Previsão e previsão
Sim, você está correto. Quando você vê isso como um problema de previsão, uma regressão Y-X fornece um modelo tal que, dada uma medida do instrumento, você pode fazer uma estimativa imparcial da medida exata do laboratório, sem executar o procedimento de laboratório. .
E[Y|X]
Isso pode parecer contra-intuitivo, porque a estrutura de erro não é a "real". Supondo que o método de laboratório seja um método padrão livre de erros, então "sabemos" que o verdadeiro modelo de geração de dados é
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
Explicitamente, sem perda de generalidade, podemos deixar
ϵi=γXi+ηi
E[ηi|X]=0
YI=1βXi−γβXi−1βηi
YI=1−γβXi−1βηi
ηββσ
YI=αXi+ηi
β
Análise de Instrumentos
A pessoa que fez essa pergunta claramente não queria a resposta acima, pois diz que o X-Y-Y é o método correto, então por que eles queriam isso? Provavelmente eles estavam considerando a tarefa de entender o instrumento. Conforme discutido na resposta de Vincent, se você quiser saber sobre o comportamento do instrumento, o X-on-Y é o caminho a seguir.
Voltando à primeira equação acima:
Xi=βYi+ϵi
E[Xi|Yi]=YiXβ
Encolhimento
YE[Y|X]γE[Y|X]Y. Isso leva a conceitos como bayes de regressão à média e empíricos.
Exemplo em R
Uma maneira de entender o que está acontecendo aqui é fazer alguns dados e experimentar os métodos. O código abaixo compara X-Y com Y-X sobre previsão e calibração e você pode ver rapidamente que X-Y não é bom para o modelo de previsão, mas é o procedimento correto para calibração.
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")
As duas linhas de regressão são plotadas sobre os dados
E o erro da soma dos quadrados para Y é medido para os dois ajustes em uma nova amostra.
> 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, uma amostra pode ser gerada em um Y fixo (neste caso 4) e, em seguida, na média das estimativas feitas. Agora você pode ver que o preditor Y-on-X não está bem calibrado com um valor esperado muito menor que Y. O preditor X-Y-Y está bem calibrado com um valor esperado próximo 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
A distribuição das duas previsões pode ser vista em um gráfico de densidade.
[self-study]
tag.