与变量模型中的无偏估计相比,用于回归的偏倚估计量可获得更好的结果


13

我正在研究“误差中的误差”模型的一些句法数据,以进行一些研究。目前,我只有一个自变量,并且假设我知道因变量的真实值的方差。

因此,利用这些信息,我可以实现因变量系数的无偏估计。

该模型:

Ŷ=0.5X-10+ë2其中: ë1Ñ0σ2对于一些σë2Ñ01x~=x+e1
y=0.5x10+e2

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

其中的值是已知的对于每个样品只,并且还的实际价值的标准偏差X为已知样品:σ Xy,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

此外,印刷的价值bbFixed-我看到bFixed的确是更接近真实值0.5,-10比偏估计(如预期)。

PS:无偏的结果要比有偏的估计量差,这在统计上是有意义的-代码中省略了对它的测试,因为这是“完整版本”代码的简化。

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

我认为这表明得出结果的原因并不是无偏估计量的方差更高,因为它仍然更接近实际值。

图片来源:以史蒂夫·皮施克的讲义作为资源


如果您还发布结果,而不只是代码,那将很有帮助。
Alecos Papadopoulos'3

@AlecosPapadopoulos添加它,没有添加的所有值的打印bbFixed,但解释说,他们展示一下。
阿米特(Amit)2015年

Answers:


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

测试中

我在OP中编辑了代码,还使用预测的无噪音版本(答案末尾的代码)对MSE进行了评估。结果是

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~

关于非线性的警告

其实,即使之间的关系是线性的,之间的关系ŸX就不一定了。这取决于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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.