변수 모형에서 오차가없는 것보다 더 나은 결과를 달성하는 회귀에 대한 편향 추정기


13

일부 연구를 위해 Error In Variable 모델에 대한 일부 구문 데이터를 연구하고 있습니다. 현재 단일 독립 변수가 있으며 종속 변수의 실제 값에 대한 분산을 알고 있다고 가정합니다.

따라서이 정보를 사용하여 종속 변수의 계수에 대한 편견 추정량을 얻을 수 있습니다.

모델:

, Y=0.5(X)-(10)+E(2)여기서, E1~N(0,σ2)일부σ2~N(0,1)x~=x+e1
y=0.5x10+e2

e1~N(0,σ2)σ
e2~N(0,1)

값 여기서 각 샘플도의 실제 값의 표준 편차에 대해 공지되어 X 시료 알려져있다 : σ X .y,x~xσx

나는 바이어스 (수 β 사용하여 조정을 OLS를 사용하고 만들기) 계수 :β^

β=β^σ^x~2σx2

계수에 대한 나의 편향되지 않은 새 추정기가이 모델에서 훨씬 더 우수하지만 (실제 값에 더 가깝습니다) MSE는 편향 추정기를 사용하는 것보다 나 빠지고 있습니다.

무슨 일이야? 나는 편견보다 편향된 추정기보다 더 나은 결과를 얻을 것으로 예상했다.

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)

결과 :

편향 추정기의 MSE :

ans =

  Columns 1 through 7

    1.2171    1.6513    1.9989    2.3914    2.5766    2.6712    2.5997

  Column 8

    2.8346

편견없는 추정기의 MSE :

ans =

  Columns 1 through 7

    1.2308    2.0001    2.9555    4.9727    7.6757   11.3106   14.4283

  Column 8

   11.5653

또한,의 값을 인쇄 b하고 bFixed- 나는 볼 bFixed가까이의 실제 값으로 참 0.5,-10(예상대로) 바이어스 추정보다.

PS 편견없는 추정값이 편향된 추정값보다 나쁜 결과는 통계적으로 유의합니다. "풀 버전"코드를 단순화하기 때문에 코드에서 생략했습니다.

for each test(β^β)2 β = 0.5 β β β ' βfor each test(ββ)2
β=0.5β^βββ

이 결과는 여전히 실제 가치에 더 가깝기 때문에 결과의 이유가 편향 추정량의 높은 분산이 아님을 보여줍니다.

크레딧 : Steve Pischke의 강의 노트 를 리소스로 사용


코드뿐만 아니라 결과도 게시하면 도움이됩니다.
Alecos Papadopoulos

@AlecosPapadopoulos 그것을 추가하고 band 의 모든 값의 인쇄를 추가하지는 않았지만 bFixed그들이 보여주는 것을 설명했습니다.
amit

답변:


2

xx~

yx

y^x=βx+α,
yx~
y^x~=β~x~+α~.

xx~

  1. β~^,α~^
  2. β^,α^
  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.
α~,β~α,βα~,β~α,β

테스팅

노이즈가없는 예측 버전 (응답 끝에있는 코드)을 사용하여 예측에 대한 MSE를 평가하기 위해 OP의 코드를 편집했습니다. 결과는

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~

비선형성에 대한주의 사항

y,xyx~xxx~xyx~xE(xx~)y^^xx

테스트 결과 복제를위한 MATLAB 코드

여기에는 평가 및 OLS_solver에 대한 자체 구현이 포함되어 있습니다.

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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.