Estoy trabajando en algunos datos sintéticos para el modelo Error en variable para algunas investigaciones. Actualmente tengo una sola variable independiente, y supongo que sé la varianza para el verdadero valor de la variable dependiente.
Entonces, con esta información, puedo lograr un estimador imparcial para el coeficiente de la variable dependiente.
El modelo:
y=0.5x-10+e2Donde:
e1~N(0,σ2)para algunosσe2~N(0,1)
Donde los valores de son conocidos para cada muestra solamente, y también la desviación estándar del valor real de x para la muestra que se conoce: σ x .
Me da la sesgada ( β coeficiente) por MCO y, a continuación, hacer ajustes utilizando:
Veo que mi nuevo estimador imparcial para el coeficiente es mucho mejor (más cercano al valor real) con este modelo, pero el MSE está empeorando que usar el estimador sesgado.
¿Qué está pasando? Esperaba que un estimador sesgado produjera mejores resultados que el estimador sesgado.
Código de 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 de estimador sesgado:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
Estimador imparcial de MSE:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Además, imprimiendo los valores de b
y bFixed
- veo que de bFixed
hecho está más cerca de los valores reales 0.5,-10
que el estimador sesgado (como se esperaba).
PD: Los resultados de que el sesgo sea peor que el estimador sesgado son estadísticamente significativos: la prueba se omite del código, ya que es una simplificación del código de "versión completa".
UPDTAE: I añadió una prueba de que los cheques y Σ para cada prueba ( β ' - β ) 2 , y el estimador sesgado es de hecho significativamente peor (valor más grande) que el uno imparcial según esta métrica, aunque el MSE del estimador sesgado (en el conjunto de prueba) es significativamente mejor.
Donde β = 0,5 es el coeficiente real de la variable dependiente, β es el estimador sesgado para β y β '
es el estimador imparcial para .
Esto, creo, muestra que la razón de los resultados NO es la mayor varianza del estimador imparcial, ya que aún está más cerca del valor real.
Crédito: Uso de apuntes de Steve Pischke como recurso
b
ybFixed
, pero explicó lo que muestran.Respuestas:
Resumen: los parámetros corregidos son para predecir en función del verdadero predictor . Si ~ x se utiliza en la predicción, los parámetros originales se desempeñan mejor.x x~
Tenga en cuenta que hay dos modelos de predicción lineal diferentes acechando. En primer lugar, dado x , y x = βy x
segundo, y dado ~ x ,
y ~ x = ~ β
Incluso si tuviéramos acceso a los parámetros verdaderos, la óptima lineal predicción como funciones de sería diferente de la óptima lineal predicción en función de ~ x . El código en la pregunta hace lo siguientex x~
Pruebas
Edité el código en OP para evaluar también las MSE para las predicciones usando la versión no ruidosa de la predicción (código al final de la respuesta). Los resultados son
Advertencia sobre la no linealidad
Código MATLAB para replicar el resultado de la prueba
Tenga en cuenta que esto también contiene mis propias implementaciones para evaluar y OLS_solver ya que no se dieron en la pregunta.
fuente