Я працюю над деякими синтатичними даними для моделі Error In Variable для деяких досліджень. В даний час у мене є одна незалежна змінна, і я припускаю, що знаю дисперсію для справжнього значення залежної змінної.
Отже, за допомогою цієї інформації я можу досягти неупередженого оцінки коефіцієнта залежної змінної.
Модель:
y=0,5x-10+e2
Де:
для деяких
σ e 2 ~ N ( 0 , 1 )
Там, де значення відомі лише для кожного зразка, а також відоме стандартне відхилення реального значення для вибірки: . x σ x
Я отримую упереджений ( ) коефіцієнт за допомогою OLS, а потім вношу коригування, використовуючи:
Я бачу, що мій новий, неупереджений оцінювач коефіцієнта набагато кращий (ближче до реального значення) з цією моделлю, але MSE стає гіршим, ніж використання упередженого оцінювача.
Що відбувається? Я очікував, що неупереджений оцінювач дасть кращі результати, ніж упереджений.
Код Matlab:
reg_mse_agg = [];
fixed_mse_agg = [];
varMult = 1;
numTests = 60;
for dataNumber=1:8
reg_mses = [];
fixed_mses = [];
X = rand(1000,1);
X(:,1) = X(:,1) * 10;
X(:,1) = X(:,1) + 5;
varX = var(X);
y = 0.5 * X(:,1) -10;
y = y + normrnd(0,1,size(y));
origX = X;
X = X + normrnd(0,dataNumber * varMult ,size(X));
train_size = floor(0.5 * length(y));
for t=1:numTests,
idx = randperm(length(y));
train_idx = idx(1:train_size);
test_idx = idx(train_size+1:end);
Xtrain = X(train_idx,:);
ytrain = y(train_idx);
Xtest = X(test_idx,:);
ytest = y(test_idx);
b = OLS_solver(Xtrain, ytrain);
%first arg of evaluate returns MSE, working correctly.
[ reg_mse, ~ ] = evaluate( b,Xtest,ytest);
reg_mses = [reg_mses ; reg_mse];
varInd = var(Xtrain);
varNoise = varInd - varX;
bFixed = [0 0]';
bFixed(1) = b(1) * varInd / varX;
bFixed(2) = mean(ytrain - bFixed(1)*Xtrain);
[fixed_mse,~ ] = evaluate( bFixed,Xtest,ytest);
fixed_mses = [fixed_mses ; fixed_mse];
dataNumber * varMult
b
bFixed
end
reg_mse_agg = [reg_mse_agg , reg_mses];
fixed_mse_agg = [fixed_mse_agg , fixed_mses];
end
mean(reg_mse_agg)
mean(fixed_mse_agg)
Результати:
MSE зміщеного оцінювача:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
MSE об'єктивного оцінювача:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Крім того, друк значень b
і bFixed
- я бачу, що bFixed
це дійсно ближче до реальних значень, 0.5,-10
ніж упереджений оцінювач (як очікувалося).
PS Результати неупередженості, які є гіршими, ніж упереджений оцінювач, є статистично значущими - тест на нього пропущено з коду, оскільки це спрощення коду "повної версії".
UPDTAE: Я додав тест, який перевіряє та , і зміщений оцінювач дійсно значно гірший (більше значення), ніж неупереджений відповідно до цієї метрики, навіть якщо MSE упередженого оцінювача (на тестовому наборі) значно кращий.
Де - реальний коефіцієнт залежної змінної, є упередженим оцінником для , а - неупереджений оцінювач для . Σ для кожного тесту ( β ' - β ) 2
& beta ; & beta ; & beta ; ' & beta ;
Це, на мій погляд, показує, що причиною результатів НЕ є вища дисперсія неупередженого оцінювача, оскільки вона все ще наближається до реальної величини.
Кредит: Використання лекцій Стіва Пішке як ресурсу
b
та bFixed
, але пояснив, що вони показують.