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 hinzubFixed
, sondern erklärte, was sie anzeigen .Antworten:
Zusammenfassung: Die korrigierten Parameter dienen zur Vorhersage als Funktion des wahren Prädiktors . Wenn für die Vorhersage verwendet wird, erzielen die ursprünglichen Parameter eine bessere Leistung.˜ xx x~
Beachten Sie, dass es zwei verschiedene lineare Vorhersagemodelle gibt. Erstens, gegeben , zweitens, gegeben , x y x = βy x y ~ x y ~ x = ~ β
Selbst wenn wir Zugriff auf die wahren Parameter hätten, würde sich die optimale lineare Vorhersage als Funktion von der optimalen linearen Vorhersage als Funktion von . Der Code in der Frage bewirkt Folgendes˜ xx x~
Da wir in Schritt 3 als Funktion von und nicht als Funktion von vorhersagen , funktioniert die Verwendung von (geschätzten) Koeffizienten des zweiten Modells besser. xx~ x
In der Tat, wenn wir Zugriff auf , und aber nicht auf , könnten wir im ersten Modell einen linearen Schätzer für : Wenn wir zuerst die Transformationsform nach ausführen und dann die Berechnung in der neuesten Gleichung durchführen, erhalten wir die Koeffizientenβ ~ x x x ^ ^ y x = βα β x~ x x
Testen
Ich habe den Code in OP bearbeitet, um auch MSEs für Vorhersagen zu bewerten, indem ich die nicht verrauschte Version der Vorhersage verwendete (Code am Ende der Antwort). Die Ergebnisse sind
Wenn also anstelle von , schlagen die korrigierten Parameter erwartungsgemäß die nicht korrigierten Parameter. Darüber hinaus ist die Vorhersage mit ( ), dh festen Parametern und wahrem Prädiktor, besser als ( ) is, reg parameter und noisy predictor, da offensichtlich das rauschen die prädiktionsgenauigkeit etwas beeinträchtigt. Die beiden anderen Fälle entsprechen der Verwendung der Parameter eines falschen Modells und führen somit zu schwächeren Ergebnissen.x x~ α,β,x α~,β~,x~
Einschränkung der Nichtlinearität
Selbst wenn die Beziehung zwischen linear ist, kann es sein, dass die Beziehung zwischen und nicht linear ist . Dies hängt von der Verteilung von . Zum Beispiel in dem vorliegenden Code, wird von der Gleichverteilung gezogen, so egal wie hoch ist, wissen wir eine obere für gebundenen und damit die vorhergesagte als Funktion von sollte sättigen. Eine mögliche Bayes'sche Lösung wäre, eine Wahrscheinlichkeitsverteilung für zu setzen und dann einzufügen, wenny,x y x~ x x x~ x y x~ x E(x∣x~) y^^x - Anstelle der zuvor verwendeten linearen Vorhersage. Wenn man jedoch bereit ist, eine Wahrscheinlichkeitsverteilung für zu setzen , sollte man sich für eine vollständige Bayes'sche Lösung entscheiden, anstatt zunächst auf der Korrektur von OLS-Schätzungen zu beruhen.x
MATLAB-Code zum Replizieren des Testergebnisses
Beachten Sie, dass dies auch meine eigenen Implementierungen für Evaluate und OLS_solver enthält, da diese in der Frage nicht angegeben wurden.
quelle