Смещенная оценка для регрессии, достигающая лучших результатов, чем объективная оценка в модели Error In Variables

13

Я работаю над некоторыми синтетическими данными для модели Error In Variable для некоторых исследований. В настоящее время у меня есть одна независимая переменная, и я предполагаю, что знаю дисперсию для истинного значения зависимой переменной.

Таким образом, с помощью этой информации я могу получить объективную оценку для коэффициента зависимой переменной.

Модель:

у=0,5х-10+е2где: е1~N(0,σ2)для некоторогоσе2~N(0,1)x~=x+e1
y=0.5x10+e2

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

Там , где значения известны только для каждого образца, а также стандартного отклонения реального значения х для образца известно: σ х .y,x~xσx

Я получаю смещена ( β коэффициент) с помощью МНК, а затем внося коррективы с помощью:β^

β=β^σ^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 Результаты того, что непредвзятый результат хуже, чем предвзятый оценщик, являются статистически значимыми - тест для него в коде пропущен, поскольку он является упрощением кода «полной версии».

UPDTAE: Я добавил тест , который проверяет и Σ для каждого теста ( & beta ; ' - & beta ; ) 2 , и смещенной оценки действительно значительно хуже (большее значение) , чем несмещенный согласно одному этот показатель, хотя MSE смещенной оценки (на тестовом наборе) значительно лучше. Там , где β = 0,5 является реальным коэффициентом зависимой переменной, β является смещенной оценкой для р , и является несмещенной оценкой для рfor each test(β^β)2for each test(ββ)2
β=0.5β^βββ .

Я полагаю, это показывает, что причиной результатов является НЕ более высокая дисперсия непредвзятой оценки, поскольку она все еще ближе к реальной стоимости.

Предоставлено : Использование лекций Стива Пишке в качестве ресурса.

Амит
источник
Было бы полезно, если бы вы опубликовали также результаты, а не только код.
Алекос Пападопулос
@AlecosPapadopoulos добавил его, не добавил печать всех значений bи 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.
α~,β~α,βα~,β~. So, if the goal is to do linear prediction given the noisy version of the predictor, we should just fit a linear model to the noisy data. The corrected coefficients α,β are of interest if we are interested in the true phenomenon for other reasons than prediction.

Testing

I edited the code in OP to also evaluate MSEs for predictions using the non-noisy version of the prediction (code in the end of the answer). The results are

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

That is, when using x instead of x~, the corrected parameters indeed beat the uncorrected parameters, as expected. Furthermore, the prediction with (α,β,x), that is, fixed parameters and true predictor, is better than (α~,β~,x~), that is, reg parameters and noisy predictor, since obviously the noise harms the prediction accuract somewhat. The other two cases correspond to using the parameters of a wrong model and thus produce weaker results.

Caveat about nonlinearity

Actually, even if the relationship between y,x is linear, the relationship between y and x~ might not be. This depends on the distribution of x. For example, in the present code, x is drawn from the uniform distribution, thus no matter how high x~ is, we know an upper bound for x and thus the predicted y as a function of x~ should saturate. A possible Bayesian-style solution would be to posit a probability distribution for x and then plug in E(xx~) when deriving y^^x - instead of the linear prediction I used previously. However, if one is willing to posit a probability distribution for x, I suppose one should go for a full Bayesian solution instead of an approach based on correcting OLS estimates in the first place.

MATLAB code for replicating the test result

Note that this also contains my own implementations for evaluate and OLS_solver since they were not given in the question.

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))
Juho Kokkala
источник