Je travaille sur certaines données syntaxiques pour le modèle Error In Variable pour certaines recherches. Actuellement, j'ai une seule variable indépendante et je suppose que je connais la variance pour la vraie valeur de la variable dépendante.
Donc, avec cette information, je peux obtenir un estimateur sans biais pour le coefficient de la variable dépendante.
Le modèle:
y=0,5x-10+e2
Où:
pour certains \ sigma e_2 \ text {~} N (0,1)
σ e 2 ~ N ( 0 , 1 )
Lorsque les valeurs de sont connues pour chaque échantillon uniquement, et que l'écart-type de la valeur réelle de pour l'échantillon est connu: .
J'obtiens le coefficient biaisé ( ) en utilisant OLS, puis en faisant des ajustements en utilisant:
Je vois que mon nouvel estimateur sans biais pour le coefficient est beaucoup mieux (plus proche de la valeur réelle) avec ce modèle, mais le MSE devient pire que l'utilisation de l'estimateur biaisé.
Qu'est-ce qui se passe? Je m'attendais à ce qu'un estimateur biaisé produise de meilleurs résultats que celui biaisé.
Code 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)
Résultats:
MSE de l'estimateur biaisé:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
MSE de l'estimateur impartial:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
De plus, l'impression des valeurs de b
et bFixed
- je vois que bFixed
c'est en effet plus proche des valeurs réelles 0.5,-10
que de l'estimateur biaisé (comme prévu).
PS Les résultats de l'estimateur sans biais étant pire que l'estimateur biaisé sont statistiquement significatifs - le test pour celui-ci est omis du code, car il s'agit d'une simplification du code "version complète".
UPDTAE: j'ai ajouté un test qui vérifie et , et l'estimateur biaisé est en effet significativement pire (valeur plus grande) que celui sans biais selon cette métrique, même si le MSE de l'estimateur biaisé (sur le test) est significativement meilleur.
Où est le coefficient réel de la variable dépendante, est l'estimateur biaisé pour et est l'estimateur sans biais pour . Σ pour chaque essai ( β ' - β ) 2 β = 0,5 β β β ' β
Cela, je crois, montre que la raison des résultats n'est PAS la variance plus élevée de l'estimateur sans biais, car il est encore plus proche de la valeur réelle.
Crédit: Utilisation des notes de cours de Steve Pischke comme ressource
b
et bFixed
, mais explique ce qu'elles montrent.