일부 연구를 위해 Error In Variable 모델에 대한 일부 구문 데이터를 연구하고 있습니다. 현재 단일 독립 변수가 있으며 종속 변수의 실제 값에 대한 분산을 알고 있다고 가정합니다.
따라서이 정보를 사용하여 종속 변수의 계수에 대한 편견 추정량을 얻을 수 있습니다.
모델:
, Y=0.5(X)-(10)+E(2)여기서,
E1~N(0,σ2)일부σ예2~N(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 편견없는 추정값이 편향된 추정값보다 나쁜 결과는 통계적으로 유의합니다. "풀 버전"코드를 단순화하기 때문에 코드에서 생략했습니다.
β = 0.5 β β β ' β
이 결과는 여전히 실제 가치에 더 가깝기 때문에 결과의 이유가 편향 추정량의 높은 분산이 아님을 보여줍니다.
크레딧 : Steve Pischke의 강의 노트 를 리소스로 사용
b
and 의 모든 값의 인쇄를 추가하지는 않았지만 bFixed
그들이 보여주는 것을 설명했습니다.