Saya sedang mengerjakan beberapa data sintaksis untuk model Error In Variable untuk beberapa penelitian. Saat ini saya memiliki satu variabel independen, dan saya berasumsi saya tahu varians untuk nilai sebenarnya dari variabel dependen.
Jadi, dengan informasi ini, saya dapat mencapai estimator yang tidak bias untuk koefisien variabel dependen.
Model:
y=0,5x-10+e2
Di mana:
untuk beberapa
σ e 2 ~ N ( 0 , 1 )
Di mana nilai hanya diketahui untuk setiap sampel, dan juga standar deviasi dari nilai riil untuk sampel diketahui: .
Saya mendapatkan koefisien bias ( ) menggunakan OLS, dan kemudian membuat penyesuaian menggunakan:
Saya melihat bahwa estimator baru saya yang tidak bias untuk koefisien jauh lebih baik (lebih dekat dengan nilai sebenarnya) dengan model ini, tetapi MSE semakin buruk daripada menggunakan estimator yang bias.
Apa yang terjadi? Saya mengharapkan estimator yang ada di mana-mana untuk menghasilkan hasil yang lebih baik daripada yang bias.
Kode 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)
Hasil:
MSE estimator yang bias:
ans =
Columns 1 through 7
1.2171 1.6513 1.9989 2.3914 2.5766 2.6712 2.5997
Column 8
2.8346
MSE estimator yang tidak sesuai:
ans =
Columns 1 through 7
1.2308 2.0001 2.9555 4.9727 7.6757 11.3106 14.4283
Column 8
11.5653
Selain itu, mencetak nilai-nilai b
dan bFixed
- Saya melihat bahwa bFixed
memang lebih dekat dengan nilai riil dari 0.5,-10
estimator yang bias (seperti yang diharapkan).
PS Hasil yang tidak bias lebih buruk daripada penaksir yang bias signifikan secara statistik - tes untuk itu dihilangkan dari kode, karena ini adalah penyederhanaan kode "versi lengkap".
UPDTAE: Saya menambahkan tes yang memeriksa dan , dan estimator yang bias memang jauh lebih buruk (nilai lebih besar) daripada yang tidak bias menurut metrik ini, meskipun MSE dari estimator yang bias (pada set-test) secara signifikan lebih baik.
Di mana adalah koefisien nyata dari variabel dependen, adalah penaksir yang bias untuk , dan adalah penaksir yang tidak bias untuk .
Ini saya percaya menunjukkan bahwa alasan untuk hasil BUKAN varians yang lebih tinggi dari penaksir tidak bias, karena masih lebih dekat dengan nilai sebenarnya.
Kredit: Menggunakan catatan Kuliah Steve Pischke sebagai sumber
b
danbFixed
, tetapi menjelaskan apa yang ditampilkan.Jawaban:
Ringkasan: parameter yang dikoreksi adalah untuk memprediksi sebagai fungsi dari predictor sejati . Jika digunakan dalam prediksi, parameter asli berkinerja lebih baik.x x~
Perhatikan bahwa ada dua model prediksi linear yang bersembunyi. Pertama, diberikan , kedua, diberikan ,y x
Bahkan jika kita memiliki akses ke parameter sebenarnya, prediksi linear optimal sebagai fungsi akan berbeda dari prediksi linear optimal sebagai fungsi dari . Kode dalam pertanyaan berikut:x x~
Karena pada langkah 3 kami memperkirakan sebagai fungsi , bukan sebagai fungsi , menggunakan (estimasi) koefisien dari model kedua berfungsi lebih baik.x~ x
Memang, jika kita memiliki akses ke , dan tetapi tidak , kita mungkin mengganti penaksir linier dalam model pertama, Jika kita pertama kali melakukan bentuk transformasi menjadi dan kemudian melakukan perhitungan dalam persamaan terbaru, kita mendapatkan kembali koefisienα β x~ x x
Pengujian
Saya mengedit kode di OP untuk juga mengevaluasi UMK untuk prediksi menggunakan versi prediksi yang tidak berisik (kode di akhir jawaban). Hasilnya
Yaitu, ketika menggunakan bukannya , parameter yang diperbaiki memang mengalahkan parameter yang tidak dikoreksi, seperti yang diharapkan. Selain itu, prediksi dengan ( ), yaitu, parameter tetap dan prediktor sebenarnya, lebih baik daripada ( ), yang adalah, parameter reg dan prediktor bising, karena jelas derau itu merusak akurasi prediksi. Dua kasus lainnya sesuai dengan menggunakan parameter model yang salah dan dengan demikian menghasilkan hasil yang lebih lemah.x x~ α , β, x α~, β~, x~
Peringatan tentang nonlinier
Sebenarnya, bahkan jika hubungan antara adalah linier, hubungan antara dan mungkin tidak. Ini tergantung pada distribusi . Misalnya, dalam kode ini, diambil dari distribusi seragam, jadi tidak peduli seberapa tinggi adalah, kita tahu batas atas untuk dan dengan demikian diprediksi sebagai fungsi dari harus jenuh. Solusi Bayesian-style yang mungkin adalah menempatkan distribusi probabilitas untuk dan kemudian memasukkan saat memperolehy, x y x~ x x x~ x y x~ x E (x∣ x~) y^^x - Alih-alih prediksi linear yang saya gunakan sebelumnya. Namun, jika seseorang berkeinginan menempatkan distribusi probabilitas untuk , saya kira orang harus pergi untuk solusi Bayesian penuh daripada pendekatan yang didasarkan pada mengoreksi estimasi OLS di tempat pertama.x
Kode MATLAB untuk mereplikasi hasil tes
Perhatikan bahwa ini juga berisi implementasi saya sendiri untuk evaluasi dan OLS_solver karena tidak diberikan dalam pertanyaan.
sumber