Tahmin ve Tahmin
Evet haklısınız, bunu bir tahmin sorunu olarak gördüğünüzde, Y-on-X regresyonu, bir cihaz ölçümü verildiğinde laboratuvar prosedürünü yapmadan doğru laboratuvar ölçümünün tarafsız bir tahminini yapabileceğiniz bir model verecektir. .
E[Y|X]
Bu hata karşıtı görünebilir, çünkü hata yapısı "gerçek" değildir. Laboratuar yönteminin altın standart hatasız bir yöntem olduğu varsayılarak, gerçek veri üreten modelin "
Xi=βYi+ϵi
YiϵiE[ϵ]=0
E[Yi|Xi]
Yi=Xi−ϵβ
Xi
E[Yi|Xi]=1βXi−1βE[ϵi|Xi]
E[ϵi|Xi]ϵX
Açıkça, genelliğin kaybı olmadan,
ϵi=γXi+ηi
E[ηi|X]=0
YI=1βXi−γβXi−1βηi
YI=1−γβXi−1βηi
ηββσ
YI=αXi+ηi
β
Enstrüman Analizi
Size bu soruyu soran kişi, X-on-Y'nin doğru yöntem olduğunu söylediği için yukarıdaki cevabı açıkça istemedi, neden bunu istediler? Büyük olasılıkla enstrümanı anlama görevini düşünüyorlardı. Vincent'ın cevabında tartışıldığı gibi, enstrümanın davranmasını istediklerini bilmek istiyorsanız, X-on-Y gitmenin yoludur.
Yukarıdaki ilk denkleme geri dönelim:
Xi=βYi+ϵi
E[Xi|Yi]=YiXβ
büzülme
YE[Y|X]γE[Y|X]Y. Bu daha sonra ortalamaya regresyon ve ampirik bölmeler gibi kavramlara yol açar.
Örnek R
Burada olup bitenler hakkında fikir sahibi olmanın bir yolu, bazı veriler yapmak ve yöntemleri denemektir. Aşağıdaki kod, tahmin ve kalibrasyon için X-on-Y'yi Y-on-X ile karşılaştırır ve X-on-Y'nin tahmin modeli için iyi olmadığını, ancak kalibrasyon için doğru prosedür olduğunu hızlı bir şekilde görebilirsiniz.
library(data.table)
library(ggplot2)
N = 100
beta = 0.7
c = 4.4
DT = data.table(Y = rt(N, 5), epsilon = rt(N,8))
DT[, X := 0.7*Y + c + epsilon]
YonX = DT[, lm(Y~X)] # Y = alpha_1 X + alpha_0 + eta
XonY = DT[, lm(X~Y)] # X = beta_1 Y + beta_0 + epsilon
YonX.c = YonX$coef[1] # c = alpha_0
YonX.m = YonX$coef[2] # m = alpha_1
# For X on Y will need to rearrage after the fit.
# Fitting model X = beta_1 Y + beta_0
# Y = X/beta_1 - beta_0/beta_1
XonY.c = -XonY$coef[1]/XonY$coef[2] # c = -beta_0/beta_1
XonY.m = 1.0/XonY$coef[2] # m = 1/ beta_1
ggplot(DT, aes(x = X, y =Y)) + geom_point() + geom_abline(intercept = YonX.c, slope = YonX.m, color = "red") + geom_abline(intercept = XonY.c, slope = XonY.m, color = "blue")
# Generate a fresh sample
DT2 = data.table(Y = rt(N, 5), epsilon = rt(N,8))
DT2[, X := 0.7*Y + c + epsilon]
DT2[, YonX.predict := YonX.c + YonX.m * X]
DT2[, XonY.predict := XonY.c + XonY.m * X]
cat("YonX sum of squares error for prediction: ", DT2[, sum((YonX.predict - Y)^2)])
cat("XonY sum of squares error for prediction: ", DT2[, sum((XonY.predict - Y)^2)])
# Generate lots of samples at the same Y
DT3 = data.table(Y = 4.0, epsilon = rt(N,8))
DT3[, X := 0.7*Y + c + epsilon]
DT3[, YonX.predict := YonX.c + YonX.m * X]
DT3[, XonY.predict := XonY.c + XonY.m * X]
cat("Expected value of X at a given Y (calibrated using YonX) should be close to 4: ", DT3[, mean(YonX.predict)])
cat("Expected value of X at a gievn Y (calibrated using XonY) should be close to 4: ", DT3[, mean(XonY.predict)])
ggplot(DT3) + geom_density(aes(x = YonX.predict), fill = "red", alpha = 0.5) + geom_density(aes(x = XonY.predict), fill = "blue", alpha = 0.5) + geom_vline(x = 4.0, size = 2) + ggtitle("Calibration at 4.0")
İki regresyon çizgisi verilerin üzerine çizilir
Ve sonra Y için kareler hatasının toplamı, yeni bir numuneye her iki uyum için ölçülür.
> cat("YonX sum of squares error for prediction: ", DT2[, sum((YonX.predict - Y)^2)])
YonX sum of squares error for prediction: 77.33448
> cat("XonY sum of squares error for prediction: ", DT2[, sum((XonY.predict - Y)^2)])
XonY sum of squares error for prediction: 183.0144
Alternatif olarak, bir numune sabit bir Y'de (bu durumda 4) üretilebilir ve daha sonra alınan bu tahminlerin ortalaması. Artık Y-on-X tahmin cihazının, Y değerinden çok daha düşük bir beklenen değere sahip iyi kalibre edilmediğini görebilirsiniz. X-on-Y tahminci, Y değerine yakın bir beklenen değere sahip olarak iyi kalibre edilmiştir.
> cat("Expected value of X at a given Y (calibrated using YonX) should be close to 4: ", DT3[, mean(YonX.predict)])
Expected value of X at a given Y (calibrated using YonX) should be close to 4: 1.305579
> cat("Expected value of X at a gievn Y (calibrated using XonY) should be close to 4: ", DT3[, mean(XonY.predict)])
Expected value of X at a gievn Y (calibrated using XonY) should be close to 4: 3.465205
İki tahminin dağılımı yoğunluk grafiğinde görülebilir.
[self-study]
etiketi ekleyin .