Predicción y pronóstico
Sí, tiene razón, cuando ve esto como un problema de predicción, una regresión Y-sobre-X le dará un modelo tal que, dada una medición por instrumentos, puede hacer una estimación imparcial de la medición de laboratorio precisa, sin realizar el procedimiento de laboratorio. .
E[Y|X]
Esto puede parecer contrario a la intuición porque la estructura de error no es la "real". Suponiendo que el método de laboratorio es un método estándar sin errores de oro, entonces "sabemos" que el verdadero modelo generador de datos es
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
Explícitamente, sin pérdida de generalidad podemos dejar
ϵi=γXi+ηi
E[ηi|X]=0
YI=1βXi−γβXi−1βηi
YI=1−γβXi−1βηi
ηββσ
YI=αXi+ηi
β
Análisis de instrumentos
La persona que le hizo esta pregunta, claramente no quería la respuesta anterior, ya que dice que X-on-Y es el método correcto, entonces, ¿por qué podrían haber querido eso? Lo más probable es que estuvieran considerando la tarea de comprender el instrumento. Como se discutió en la respuesta de Vincent, si desea saber acerca de cómo quieren que se comporte el instrumento, X-on-Y es el camino a seguir.
Volviendo a la primera ecuación anterior:
Xi=βYi+ϵi
E[Xi|Yi]=YiXβ
Contracción
YE[Y|X]γE[Y|X]Y. Esto lleva a conceptos como la regresión a la media y bayes empíricos.
Ejemplo en R
Una forma de tener una idea de lo que está sucediendo aquí es hacer algunos datos y probar los métodos. El siguiente código compara X-on-Y con Y-on-X para la predicción y la calibración, y puede ver rápidamente que X-on-Y no es bueno para el modelo de predicción, pero es el procedimiento correcto para la calibración.
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")
Las dos líneas de regresión se trazan sobre los datos.
Y luego el error de suma de cuadrados para Y se mide para ambos ajustes en una nueva muestra.
> 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
Alternativamente, se puede generar una muestra en una Y fija (en este caso 4) y luego el promedio de esas estimaciones tomadas. Ahora puede ver que el predictor Y-on-X no está bien calibrado con un valor esperado mucho más bajo que Y. El predictor X-on-Y, está bien calibrado con un valor esperado cercano a 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
La distribución de las dos predicciones se puede ver en una gráfica de densidad.
[self-study]
etiqueta.