Ich arbeite an einigen syntaktischen Daten für das Error-In-Variable-Modell für einige Untersuchungen. Derzeit habe ich eine einzige unabhängige Variable und gehe davon aus, dass ich die Varianz für den wahren Wert der abhängigen Variablen kenne.
Mit diesen Informationen kann ich also einen unverzerrten Schätzer für den Koeffizienten der abhängigen Variablen erzielen.
Das Model:
y=0,5x-10+e2
Wobei:
für etwas e_2 \ text {~} N (0,1)
σ e 2 ~ N ( 0 , 1 )
Wobei die Werte von nur für jede Stichprobe bekannt sind und auch die Standardabweichung des realen Wertes von für die Stichprobe bekannt ist: .
Ich erhalte den voreingenommenen ( ) Koeffizienten mit OLS und nehme dann Anpassungen vor mit:
Ich sehe, dass mein neuer, unvoreingenommener Schätzer für den Koeffizienten mit diesem Modell viel besser (näher am realen Wert) ist, aber die MSE wird schlechter als die Verwendung des voreingenommenen Schätzers.
Was ist los? Ich habe erwartet, dass ein voreingenommener Schätzer bessere Ergebnisse liefert als der voreingenommene.
Matlab-Code:
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)
Ergebnisse:
voreingenommene Schätzer MSE:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
Unvoreingenommene Schätzer MSE:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Darüber hinaus ist das Drucken der Werte von b
und bFixed
- meiner bFixed
Ansicht nach in der Tat näher an den tatsächlichen Werten 0.5,-10
als der voreingenommene Schätzer (wie erwartet).
PS: Die Ergebnisse des unverzerrten Abschätzers sind statistisch signifikant schlechter als der verzerrte Abschätzer. Der Test dafür wird im Code weggelassen, da es sich um eine Vereinfachung des Codes der "Vollversion" handelt.
UPDTAE: Ich habe einen Test hinzugefügt, der und prüft , und der verzerrte Schätzer ist in der Tat signifikant schlechter (größerer Wert) als der unverzerrte Schätzer gemäß dieser Metrik, obwohl der MSE des verzerrten Schätzers (auf der Testmenge) signifikant besser ist.
Wobei der reale Koeffizient der abhängigen Variablen ist, der voreingenommene Schätzer für ; ist und ; der unvoreingenommene Schätzer für . Σ für jeden Test ( β ' - β ) 2 β = 0,5 β β β ' β
Dies zeigt meines Erachtens, dass der Grund für die Ergebnisse NICHT die höhere Varianz des unverzerrten Schätzers ist, da sie immer noch näher am tatsächlichen Wert liegt.
Kredit: Mit Vorlesungsunterlagen von Steve Pischke als Ressource
b
und hinzu bFixed
, sondern erklärte, was sie anzeigen .