Prognozowanie i prognozowanie
Tak, masz rację, kiedy postrzegasz to jako problem przewidywania, regresja Y-on-X da model taki, że biorąc pod uwagę pomiar przyrządu, możesz dokonać obiektywnej oceny dokładnego pomiaru laboratoryjnego, bez wykonywania procedury laboratoryjnej .
mi[ Y| X]
Może się to wydawać sprzeczne z intuicją, ponieważ struktura błędów nie jest „prawdziwa”. Zakładając, że metoda laboratoryjna jest złotą metodą bezbłędną, wówczas „wiemy”, że prawdziwym modelem generującym dane jest
Xja= βYja+ ϵja
Yjaϵjami[ ϵ ] = 0
mi[ Yja| Xja]
Yja= Xja- ϵβ
Xja
mi[ Yja| Xja] = 1βXja- 1βmi[ ϵja| Xja]
mi[ ϵja| Xja]ϵX
Oczywiście, bez utraty ogólności możemy pozwolić
ϵja= γXja+ ηja
mi[ ηja| X] = 0
Yja= 1βXja- γβXja- 1βηja
Yja= 1 - γβXja- 1βηja
ηββσ
Yja= α Xja+ ηja
β
Analiza instrumentu
Osoba, która zadała ci to pytanie, najwyraźniej nie chciała odpowiedzi powyżej, ponieważ twierdzi, że X-on-Y jest poprawną metodą, więc dlaczego mogliby chcieć? Najprawdopodobniej rozważali zadanie zrozumienia instrumentu. Jak omówiono w odpowiedzi Vincenta, jeśli chcesz wiedzieć, że chcą, aby instrument zachowywał się, X-on-Y jest właściwą drogą.
Wracając do pierwszego równania powyżej:
Xja= βYja+ ϵja
mi[ Xja| Yja] = YjaXβ
Kurczenie się
Ymi[ Y| X]γmi[ Y| X]Y. Prowadzi to następnie do takich koncepcji, jak regresja do średniej i empiryczne bayes.
Przykład w R
Jednym ze sposobów na sprawdzenie, co się tutaj dzieje, jest zebranie pewnych danych i wypróbowanie metod. Poniższy kod porównuje X-on-Y z Y-on-X do prognozowania i kalibracji i można szybko zobaczyć, że X-on-Y nie jest dobry dla modelu predykcyjnego, ale jest prawidłową procedurą kalibracji.
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")
Dwie linie regresji są wykreślane na podstawie danych
Następnie mierzona jest suma błędu kwadratów dla Y dla obu dopasowań na nowej próbce.
> 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
Alternatywnie próbkę można wygenerować przy ustalonym Y (w tym przypadku 4), a następnie przyjąć średnią z tych szacunków. Teraz możesz zobaczyć, że predyktor Y-on-X nie jest dobrze skalibrowany, a jego wartość oczekiwana jest znacznie niższa niż Y. Predyktor X-on-Y jest dobrze skalibrowany i ma wartość oczekiwaną zbliżoną do Y.
> 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
Rozkład dwóch prognoz można zobaczyć na wykresie gęstości.
[self-study]
znacznik.