Vorhersage und Prognose
Ja, Sie haben Recht. Wenn Sie dies als Vorhersageproblem betrachten, erhalten Sie durch eine Y-auf-X-Regression ein Modell, mit dem Sie bei einer Instrumentenmessung eine unvoreingenommene Schätzung der genauen Labormessung vornehmen können, ohne das Laborverfahren durchführen zu müssen .
E[Y|X]
Dies mag kontraintuitiv erscheinen, da die Fehlerstruktur nicht die "echte" ist. Unter der Annahme, dass die Labormethode eine fehlerfreie Goldstandardmethode ist, "wissen" wir, dass das wahre datengenerierende Modell ist
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
Explizit können wir ohne Verlust der Allgemeinheit lassen
ϵi=γXi+ηi
E[ηi|X]=0
YI=1βXi−γβXi−1βηi
YI=1−γβXi−1βηi
ηββσ
YI=αXi+ηi
β
Instrumentenanalyse
Die Person, die Ihnen diese Frage gestellt hat, wollte die obige Antwort eindeutig nicht, da sie sagt, dass X-auf-Y die richtige Methode ist. Warum haben sie das vielleicht gewollt? Höchstwahrscheinlich überlegten sie, das Instrument zu verstehen. Wie in Vincents Antwort besprochen, ist das X-on-Y der richtige Weg, wenn Sie wissen möchten, dass sich das Instrument verhält.
Zurück zur ersten Gleichung oben:
Xi=βYi+ϵi
E[Xi|Yi]=YiXβ
Schwindung
YE[Y|X]γE[Y|X]Y. Dies führt dann zu Konzepten wie Regression zum Mittelwert und empirischen Bayes.
Beispiel in R
Eine Möglichkeit, ein Gefühl dafür zu bekommen, was hier vor sich geht, besteht darin, einige Daten zu erstellen und die Methoden auszuprobieren. Der folgende Code vergleicht X-on-Y mit Y-on-X für die Vorhersage und Kalibrierung, und Sie können schnell erkennen, dass X-on-Y für das Vorhersagemodell nicht gut ist, aber das richtige Verfahren für die Kalibrierung.
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")
Die beiden Regressionslinien sind über den Daten aufgetragen
Und dann wird die Summe der Fehlerquadrate für Y für beide Anpassungen an einer neuen Stichprobe gemessen.
> 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
Alternativ kann eine Stichprobe mit einem festen Y (in diesem Fall 4) erstellt und dann der Durchschnitt dieser Schätzungen ermittelt werden. Sie können jetzt sehen, dass der Y-on-X-Prädiktor mit einem erwarteten Wert, der viel niedriger als Y ist, nicht gut kalibriert ist. Der X-on-Y-Prädiktor ist mit einem erwarteten Wert nahe Y gut kalibriert.
> 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
Die Verteilung der beiden Vorhersagen ist in einem Dichtediagramm zu sehen.
[self-study]
Tag hinzu.