我正在研究“误差中的误差”模型的一些句法数据,以进行一些研究。目前,我只有一个自变量,并且假设我知道因变量的真实值的方差。
因此,利用这些信息,我可以实现因变量系数的无偏估计。
该模型:
Ŷ=0.5X-10+ë2其中:
ë1〜Ñ(0,σ2)对于一些σë2〜Ñ(0,1
其中的值是已知的对于每个样品只,并且还的实际价值的标准偏差X为已知样品:σ X。
我得到的偏向(β使用OLS,然后进行使用调整)系数:
我看到,使用该模型,新的系数的无偏估计器要好得多(更接近于实际值),但是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:无偏的结果要比有偏的估计量差,这在统计上是有意义的-代码中省略了对它的测试,因为这是“完整版本”代码的简化。
我认为这表明得出结果的原因并不是无偏估计量的方差更高,因为它仍然更接近实际值。
图片来源:以史蒂夫·皮施克的讲义作为资源
如果您还发布结果,而不只是代码,那将很有帮助。
—
Alecos Papadopoulos'3
@AlecosPapadopoulos添加它,没有添加的所有值的打印
—
阿米特(Amit)2015年
b
和bFixed
,但解释说,他们展示一下。