Sto lavorando ad alcuni dati sintatici per il modello Error In Variable per alcune ricerche. Attualmente ho una singola variabile indipendente e presumo di conoscere la varianza per il valore reale della variabile dipendente.
Quindi, con queste informazioni, posso ottenere uno stimatore imparziale per il coefficiente della variabile dipendente.
Il modello:
y=0,5x-10+e2
Dove:
per alcuni e_2 \ text {~} N (0,1)
σ e 2 ~ N ( 0 , 1 )
Dove i valori di sono noti solo per ciascun campione, e anche la deviazione standard del valore reale di per il campione è nota: .
Ottengo il coefficiente distorto ( ) usando OLS, e quindi eseguendo le regolazioni usando:
Vedo che il mio nuovo stimatore imparziale per il coefficiente è molto meglio (più vicino al valore reale) con questo modello, ma l'MSE sta peggiorando rispetto all'utilizzo dello stimatore distorto.
Che cosa sta succedendo? Mi aspettavo che uno stimatore ub distorto producesse risultati migliori di quello distorto.
Codice 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)
risultati:
MSE dello stimatore distorto:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
MSE dello stimatore non distorto:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Inoltre, stampando i valori di b
e bFixed
- vedo che bFixed
è davvero più vicino ai valori reali di 0.5,-10
rispetto allo stimatore distorto (come previsto).
PS I risultati dell'opinione imparziale peggiori dello stimatore distorto sono significativi dal punto di vista statistico: il test viene omesso dal codice, poiché si tratta di una semplificazione del codice "versione completa".
AGGIORNAMENTO: ho aggiunto un test che controlla e e lo stimatore distorto è effettivamente significativamente peggiore (valore maggiore) di quello imparziale secondo questa metrica, anche se l'MSE dello stimatore distorto (sul set di test) è significativamente migliore.
Dove è il coefficiente reale della variabile dipendente, è lo stimatore distorto per e è lo stimatore imparziale per . Σ per ogni prova ( β ' - β ) 2 β = 0.5 β β β ' β
Questo credo che mostra che la ragione dei risultati NON è la maggiore varianza dello stimatore imparziale, poiché è ancora più vicino al valore reale.
Ringraziamento: utilizzo degli appunti di Steve Pischke come risorsa
b
e bFixed
, ma ha spiegato cosa mostrano.