Estou trabalhando em alguns dados sintáticos para o modelo Error In Variable para algumas pesquisas. Atualmente, tenho uma única variável independente e estou assumindo que conheço a variação do valor verdadeiro da variável dependente.
Portanto, com essas informações, posso obter um estimador imparcial para o coeficiente da variável dependente.
O modelo:
Onde:
para alguns
Onde os valores de são conhecidos apenas para cada amostra e também o desvio padrão do valor real de para a amostra: .
Recebo o tendenciosa coeficiente) usando OLS, e depois fazer ajustes usando:
Vejo que meu novo estimador imparcial para o coeficiente é muito melhor (mais próximo do valor real) com esse modelo, mas o MSE está ficando pior do que usar o estimador enviesado.
O que está acontecendo? Eu esperava que um estimador tendencioso produzisse melhores resultados que o tendencioso.
Código 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)
Resultados:
MSE do estimador enviesado:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
MSE do estimador imparcial:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Além disso, imprimir os valores de b
e bFixed
- vejo que bFixed
é realmente mais próximo dos valores reais do 0.5,-10
que o estimador enviesado (como esperado).
PS Os resultados da imparcialidade ser pior do que o estimador enviesado são estatisticamente significativos - o teste é omitido no código, pois é uma simplificação do código da "versão completa".
UPDTAE: Eu adicionado um teste que verifica e Σ para cada teste ( β ' - β ) 2 , e o estimador parcial realmente é significativamente pior (valor maior) do que a um imparcial de acordo com a essa métrica, mesmo que o MSE do estimador enviesado (no conjunto de testes) seja significativamente melhor.
Onde β = 0,5 é o coeficiente real da variável dependente, β é o estimador enviesada para β , e β é o estimador de
.
Acredito que isso mostre que a razão para os resultados NÃO é a maior variação do estimador imparcial, pois ainda está mais próximo do valor real.
Crédito: Usando notas da palestra de Steve Pischke como recurso
b
ebFixed
, mas explicou o que eles mostram.Respostas:
Resumo: os parâmetros corrigidos são para previsão em função do verdadeiro preditor . Se ˜ x for usado na previsão, os parâmetros originais terão melhor desempenho.x x~
Observe que existem dois modelos de previsão linear diferentes à espreita. Em primeiro lugar, dada x , y x = βy x
segundo, y dado ~ x ,
y ~ x = ~ β
Teste
Editei o código no OP para avaliar também as MPEs para previsões usando a versão não barulhenta da previsão (código no final da resposta). Os resultados são
Advertência sobre a não linearidade
Código MATLAB para replicar o resultado do teste
Observe que isso também contém minhas próprias implementações para avaliar e OLS_solver, pois elas não foram fornecidas na pergunta.
fonte