Пусть истинная линия , заданная углом и значением , будет множествомθ γLθγ
(x,y):cos(θ)x+sin(θ)y=γ.
Расстояние со знаком между любой точкой и этой линией(x,y)
d(x,y;L)=cos(θ)x+sin(θ)y−γ.
Позволить дисперсия быть и что из быть , независимость и подразумевает отклонение этого расстоянияσ 2 i y i τ 2 i x i y ixiσ2iyiτ2ixiyi
Var(d(xi,yi;L))=cos2(θ)σ2i+sin2(θ)τ2i.
Поэтому давайте найдем и для которых взвешенная сумма квадратов расстояний с обратной дисперсией будет как можно меньше: это будет решение с максимальной вероятностью, если предположить, что ошибки имеют двумерные нормальные распределения. Это требует численного решения, но легко найти несколько шагов Ньютона-Рафсона, начинающихся со значения, предлагаемого обычной подгонкой наименьших квадратов.γθγ
Моделирование показывает, что это решение хорошо даже при небольших объемах данных и относительно больших значениях и . Конечно, вы можете получить стандартные ошибки для параметров обычными способами. Если вас интересует стандартная ошибка положения линии, а также наклона, то вы можете сначала центрировать обе переменные в : это должно устранить почти всю корреляцию между оценками двух параметров.τ i 0σiτi0
Метод работает так хорошо на примере вопроса, что подобранная линия почти неотличима от истинной линии на графике: они находятся в пределах или около того друг от друга повсюду. Вместо этого в этом примере из экспоненциального распределения, а - из экспоненциального распределения с удвоенным масштабом (так что большая часть ошибки имеет место в координате ). Есть только баллов, небольшое количество. Истинные точки расположены на одинаковом расстоянии вдоль линии с интервалом между единицами. Это довольно серьезный тест, потому что потенциальные ошибки заметны по сравнению с диапазоном точек.σ i x n = 8τiσixn=8
Истинная линия показана синим пунктиром. Вдоль него исходные точки изображены в виде полых кружков. Серые стрелки соединяют их с наблюдаемыми точками, нанесенными в виде сплошных черных дисков. Решение нарисовано как сплошная красная линия. Несмотря на наличие больших отклонений между наблюдаемыми и фактическими значениями, решение замечательно близко к правильной линии в этой области.
#
# Generate data.
#
theta <- c(1, -2, 3) # The line is theta %*% c(x,y,-1) == 0
theta[-3] <- theta[-3]/sqrt(crossprod(theta[-3]))
n <- 8
set.seed(17)
sigma <- rexp(n, 1/2)
tau <- rexp(n, 1)
u <- 1:n
xy.0 <- t(outer(c(-theta[2], theta[1]), 0:(n-1)) + c(theta[3]/theta[1], 0))
xy <- xy.0 + cbind(rnorm(n, sd=sigma), rnorm(n, sd=tau))
#
# Fit a line.
#
x <- xy[, 1]
y <- xy[, 2]
f <- function(phi) { # Negative log likelihood, up to an additive constant
a <- phi[1]
gamma <- phi[2]
sum((x*cos(a) + y*sin(a) - gamma)^2 / ((sigma*cos(a))^2 + (tau*sin(a))^2))/2
}
fit <- lm(y ~ x) # Yields starting estimates
slope <- coef(fit)[2]
theta.0 <- atan2(1, -slope)
gamma.0 <- coef(fit)[1] / sqrt(1 + slope^2)
sol <- nlm(f,c(theta.0, gamma.0))
#
# Plot the data and the fit.
#
theta.hat <- sol$estimate[1] %% (2*pi)
gamma.hat <- sol$estimate[2]
plot(rbind(xy.0, xy), type="n", xlab="x", ylab="y")
invisible(sapply(1:n, function(i)
arrows(xy.0[i,1], xy.0[i,2], xy[i,1], xy[i,2],
length=0.15, angle=20, col="Gray")))
points(xy.0)
points(xy, pch=16)
abline(c(theta[3] / theta[2], -theta[1]/theta[2]), col="Blue", lwd=2, lty=3)
abline(c(gamma.hat / sin(theta.hat), -1/tan(theta.hat)), col="Red", lwd=2)
lm
подходит для модели линейной регрессии, то есть модели ожидания относительно , в которой ясно, что является случайным, а считается известным. Чтобы справиться с неопределенностью в вам понадобится другая модель. P ( Y | X ) Y X X