Estimador sesgado para la regresión logrando mejores resultados que uno imparcial en el modelo de error en variables


13

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)x~=x+e1
y=0.5 0.5X-10+mi2

mi1~norte(0 0,σ2)σ
mi2~norte(0 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 .y,X~XσX

Me da la sesgada ( β coeficiente) por MCO y, a continuación, hacer ajustes utilizando:β^

β=β^σ^X~2σX2

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 by bFixed- veo que de bFixedhecho está más cerca de los valores reales 0.5,-10que 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 β 'para cada prueba(β^-β)2para cada prueba(β-β)2
β=0.5 0.5β^ββ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


Sería útil si publicara también los resultados, y no solo el código.
Alecos Papadopoulos

@AlecosPapadopoulos lo agregó, no agregó la impresión de todos los valores de by bFixed, pero explicó lo que muestran.
Amit

Respuestas:


2

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.xx~

Tenga en cuenta que hay dos modelos de predicción lineal diferentes acechando. En primer lugar, dado x , y x = βyx segundo, y dado ~ x , y ~ x = ~ β

y^x=βx+α,
yx~
y^x~=β~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 siguientexx~

  1. Estimar los parámetros ~β~^,α~^
  2. Compute estima β , αβ^,α^
  3. y^1=β^X~+α^y^2=β~^X~+α~^

X~X

αβX~XX

yX^^=βX^(X~)+α=β(μX+(X^-μX)σX2σX~2)+α=σX2σX~2β+α-β(1-σX2σX~2)μ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

Reg parameters, noisy predictor
1.3387    1.6696    2.1265    2.4806    2.5679    2.5062    2.5160    2.8684

Fixed parameters, noisy predictor
1.3981    2.0626    3.2971    5.0220    7.6490   10.2568   14.1139   20.7604

Reg parameters, true predictor
1.3354    1.6657    2.1329    2.4885    2.5688    2.5198    2.5085    2.8676

Fixed parameters, true predictor
1.1139    1.0078    1.0499    1.0212    1.0492    0.9925    1.0217    1.2528

XX~α,β,Xα~,β~,X~

Advertencia sobre la no linealidad

y,Xy y X~podria no ser. Esto depende de la distribución deX. Por ejemplo, en el presente código,X se extrae de la distribución uniforme, por lo que no importa qué tan alto X~ es decir, conocemos un límite superior para X y así lo previsto y como una función de X~debe saturar Una posible solución de estilo bayesiano sería plantear una distribución de probabilidad paraX y luego enchufar mi(XX~) al derivar y^^X- En lugar de la predicción lineal que utilicé anteriormente. Sin embargo, si uno está dispuesto a plantear una distribución de probabilidad paraX, Supongo que uno debería optar por una solución bayesiana completa en lugar de un enfoque basado en corregir las estimaciones de OLS en primer lugar.

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.

rng(1)

OLS_solver = @(X,Y) [X ones(size(X))]'*[X ones(size(X))] \ ([X ones(size(X))]' * Y);
evaluate = @(b,x,y)  mean(([x ones(size(x))]*b - y).^2);

reg_mse_agg = [];
fixed_mse_agg = [];
reg_mse_orig_agg = [];
fixed_mse_orig_agg = [];

varMult = 1;
numTests = 60;
for dataNumber=1:8
    reg_mses = [];
    fixed_mses = [];
    reg_mses_orig = [];
    fixed_mses_orig = [];

    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,:);
        origXtest = origX(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];

        reg_mse_orig = evaluate(b, origXtest, ytest);
        reg_mses_orig = [reg_mses; reg_mses_orig];

        fixed_mse_orig = evaluate(bFixed, origXtest, ytest);
        fixed_mses_orig = [fixed_mses_orig; fixed_mse_orig];

    end
    reg_mse_agg = [reg_mse_agg , reg_mses];
    fixed_mse_agg = [fixed_mse_agg , fixed_mses];

    reg_mse_orig_agg = [reg_mse_orig_agg , reg_mses_orig];
    fixed_mse_orig_agg = [fixed_mse_orig_agg , fixed_mses_orig]; 
end

disp('Reg parameters, noisy predictor')
disp(mean(reg_mse_agg))
disp('Fixed parameters, noisy predictor')
disp(mean(fixed_mse_agg))
disp('Reg parameters, true predictor')
disp(mean(reg_mse_orig_agg))
disp('Fixed parameters, true predictor')
disp(mean(fixed_mse_orig_agg))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.