Стандартная регрессия минимизирует вертикальное расстояние между точками и линией, поэтому переключение двух переменных теперь минимизирует горизонтальное расстояние (при том же графике рассеяния). Другой вариант (который называется несколькими именами) - минимизировать перпендикулярное расстояние, это можно сделать с помощью основных компонентов.
Вот некоторый код R, который показывает различия:
library(MASS)
tmp <- mvrnorm(100, c(0,0), rbind( c(1,.9),c(.9,1)) )
plot(tmp, asp=1)
fit1 <- lm(tmp[,1] ~ tmp[,2]) # horizontal residuals
segments( tmp[,1], tmp[,2], fitted(fit1),tmp[,2], col='blue' )
o <- order(tmp[,2])
lines( fitted(fit1)[o], tmp[o,2], col='blue' )
fit2 <- lm(tmp[,2] ~ tmp[,1]) # vertical residuals
segments( tmp[,1], tmp[,2], tmp[,1], fitted(fit2), col='green' )
o <- order(tmp[,1])
lines( tmp[o,1], fitted(fit2)[o], col='green' )
fit3 <- prcomp(tmp)
b <- -fit3$rotation[1,2]/fit3$rotation[2,2]
a <- fit3$center[2] - b*fit3$center[1]
abline(a,b, col='red')
segments(tmp[,1], tmp[,2], tmp[,1]-fit3$x[,2]*fit3$rotation[1,2], tmp[,2]-fit3$x[,2]*fit3$rotation[2,2], col='red')
legend('bottomright', legend=c('Horizontal','Vertical','Perpendicular'), lty=1, col=c('blue','green','red'))
Чтобы найти выбросы, вы можете просто построить результаты анализа основных компонентов.
Вы также можете посмотреть на:
Бланд и Альтман (1986), Статистические методы оценки согласия между двумя методами клинических измерений. Ланцет, стр. 307-310