Das betreffende Modell kann geschrieben werden
y= p ( x ) + ( x - x1) ⋯ ( x - xd) ( β0+ β1x + ⋯ + βpxp) + ε
wobei ein Polynom vom Grad d - 1 ist, das durch vorbestimmte Punkte ( x 1 , y 1 ) , ... , ( x d , y d ) verläuft, und ε zufällig ist. (Verwenden Sie das Lagrange-Interpolationspolynom .) Schreiben ( x - x 1 ) ⋯ ( x - x d ) = rp(xi)=yid−1(x1,y1),…,(xd,yd)ε erlaubt es uns, dieses Modell umzuschreiben als(x−x1)⋯(x−xd)=r(x)
y−p(x)=β0r(x)+β1r(x)x+β2r(x)x2+⋯+βpr(x)xp+ε,
Dies ist ein Standard-OLS-Multiple-Regression-Problem mit derselben Fehlerstruktur wie das Original, bei dem die unabhängigen Variablen die Größen r ( x ) x i , i = 0 , 1 , … , p sindp+1r(x)xi, i=0,1,…,p . Berechnen Sie einfach diese Variablen und führen Sie Ihre vertraute Regressionssoftware aus. Achten Sie dabei darauf, dass keine konstanten Terme enthalten sind. Es gelten die üblichen Vorbehalte gegen Regressionen ohne konstante Laufzeit. insbesondere kann das künstlich hoch sein; Die üblichen Auslegungen treffen nicht zu.R2
(Tatsächlich ist die Regression durch den Ursprung ein Sonderfall dieser Konstruktion, bei der , ( x 1 , y 1 ) = ( 0 , 0 ) und p ( x ) = 0 ist , so dass das Modell y = β ist 0 x + ⋯ + β p x pd=1(x1,y1)=(0,0)p(x)=0)y=β0x+⋯+βpxp+1+ε.
Hier ist ein Beispiel (in 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)
Die drei Fixpunkte sind durchgehend rot dargestellt - sie sind nicht Teil der Daten. Die ungezwungene Anpassung des Polynoms kleinster Quadrate vierter Ordnung wird mit einer schwarz gepunkteten Linie dargestellt (es gibt fünf Parameter). Die eingeschränkte Anpassung (in der Größenordnung von fünf, jedoch mit nur drei freien Parametern) wird mit der roten Linie angezeigt.
Die Ausgabe ( summary(fit0)
und summary(fit)
) der kleinsten Quadrate zu überprüfen, kann lehrreich sein - das überlasse ich dem interessierten Leser.