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
etbFixed
, mais explique ce qu'elles montrent.Réponses:
Résumé: les paramètres corrigés sont pour la prédiction en fonction du vrai prédicteur . Si est utilisé dans la prédiction, les paramètres d'origine fonctionnent mieux.˜ xx x~
Notez qu'il existe deux modèles de prédiction linéaire différents qui se cachent. Premièrement, étant donné , second, étant donné , x y x = βy x y ~ x y ~ x = ~ β
Même si nous avions accès aux vrais paramètres, la prédiction linéaire optimale en fonction de serait différente de la prédiction linéaire optimale en fonction de . Le code dans la question fait ce qui suit˜ xx x~
Comme à l'étape 3, nous prédisons en fonction de , et non en fonction de , l'utilisation de coefficients (estimés) du deuxième modèle fonctionne mieux. xx~ x
En effet, si nous avions accès à , et mais pas , nous pourrions substituer un estimateur linéaire de dans le premier modèle, Si nous effectuons d'abord la forme de transformation en puis effectuons le calcul dans la dernière équation, nous récupérons les coefficientsβ ˜ x x x ^ ^ y x = βα β x~ x x
Essai
J'ai édité le code dans OP pour également évaluer les MSE pour les prédictions en utilisant la version non bruyante de la prédiction (code à la fin de la réponse). Les résultats sont
Autrement dit, lorsque vous utilisez au lieu de , les paramètres corrigés battent en effet les paramètres non corrigés, comme prévu. De plus, la prédiction avec ( ), c'est-à-dire des paramètres fixes et un vrai prédicteur, est meilleure que ( ), qui est, paramètres reg et prédicteur bruyant, car évidemment le bruit nuit quelque peu à la précision de la prédiction. Les deux autres cas correspondent à l'utilisation des paramètres d'un mauvais modèle et produisent donc des résultats plus faibles.x x~ α,β,x α~,β~,x~
Avertissement sur la non-linéarité
En fait, même si la relation entre est linéaire, la relation entre et pourrait ne pas l'être. Cela dépend de la distribution de . Par exemple, dans le code actuel, est tiré de la distribution uniforme, donc quelle que soit la hauteur de , nous connaissons une limite supérieure pour et donc le prévu en fonction de devrait saturer. Une solution possible de style bayésien serait de poser une distribution de probabilité pour puis de brancher lors de la dérivation dey,x y x~ x x x~ x y x~ x E(x∣x~) y^^x - au lieu de la prédiction linéaire que j'ai utilisée précédemment. Cependant, si l'on est disposé à poser une distribution de probabilité pour , je suppose que l'on devrait opter pour une solution bayésienne complète au lieu d'une approche basée sur la correction des estimations OLS en premier lieu.x
Code MATLAB pour répliquer le résultat du test
Notez que cela contient également mes propres implémentations pour evaluer et OLS_solver car elles n'ont pas été fournies dans la question.
la source