Рассматриваемая модель может быть написана
Y= р ( х ) + ( х - х1) ⋯ ( х - хd) ( β0+ β1х + ⋯ + βпИксп) +ε
где - это многочлен степени проходящий через заранее определенные точки и - случайный. (Используйте интерполяционный полином Лагранжа .) Запись позволяет переписать эту модель какр ( хя) = уя( x 1 , y 1 ) , … , ( x d , y d ) ε ( x - x 1 ) ⋯ ( x - x d ) = r ( x )d- 1( х1, у1) , … , ( Xd, уd)ε( х - х1) ⋯ ( х - хd) = r ( x )
Y- р ( х ) = β0r ( x ) + β1r ( x ) x + β2г ( х ) х2+ ⋯ + βпг ( х ) хп+ ε ,
которая является стандартной множественной регрессии МНК проблема с той же структурой, что и ошибки оригинала , где независимые переменные являются величины . Просто вычислите эти переменные и запустите знакомое вам регрессионное программное обеспечение , убедившись, что оно не содержит постоянного члена. Применяются обычные предостережения о регрессиях без постоянного термина; в частности, может быть искусственно высоким; обычные интерпретации не применяются.р + 1i = 0 , 1 , … , p R 2г ( х ) хя, я = 0 , 1 , … , рR2
(Фактически, регрессия через начало координат является частным случаем этой конструкции, где , и , так что модель имеет вид )( x 1 , y 1 ) = ( 0 , 0 ) p ( x ) = 0 y = β 0 x + ⋯ + β p x p + 1 + ε .d=1(x1,y1)=(0,0)p(x)=0y=β0x+⋯+βpxp+1+ε.
Вот рабочий пример (в R
)
# Generate some data that *do* pass through three points (up to random error).
x <- 1:24
f <- function(x) ( (x-2)*(x-12) + (x-2)*(x-23) + (x-12)*(x-23) ) / 100
y0 <-(x-2) * (x-12) * (x-23) * (1 + x - (x/24)^2) / 10^4 + f(x)
set.seed(17)
eps <- rnorm(length(y0), mean=0, 1/2)
y <- y0 + eps
data <- data.frame(x,y)
# Plot the data and the three special points.
plot(data)
points(cbind(c(2,12,23), f(c(2,12,23))), pch=19, col="Red", cex=1.5)
# For comparison, conduct unconstrained polynomial regression
data$x2 <- x^2
data$x3 <- x^3
data$x4 <- x^4
fit0 <- lm(y ~ x + x2 + x3 + x4, data=data)
lines(predict(fit0), lty=2, lwd=2)
# Conduct the constrained regressions
data$y1 <- y - f(x)
data$r <- (x-2)*(x-12)*(x-23)
data$z0 <- data$r
data$z1 <- data$r * x
data$z2 <- data$r * x^2
fit <- lm(y1 ~ z0 + z1 + z2 - 1, data=data)
lines(predict(fit) + f(x), col="Red", lwd=2)
Три фиксированные точки показаны сплошным красным цветом - они не являются частью данных. Неограниченное полиномиальное наименьшее квадратичное соответствие четвертого порядка показано черной пунктирной линией (имеет пять параметров); ограниченная подгонка (порядка пяти, но только с тремя свободными параметрами) показана красной линией.
Проверка вывода наименьших квадратов ( summary(fit0)
и summary(fit)
) может быть поучительной - я оставляю это заинтересованному читателю.