我已经将一个简单的二阶多项式拟合成以下形式的时间序列数据:
polyfit <- lm(y ~ poly(x,2))
我希望从形式为y = Ax ^ 2 + Bx + C的拟合多项式中提取相应的系数(A,B和C)。我自然认为答案可以在polyfit对象中的polyfit $系数中找到但这些系数不正确。我已经尝试了一些非常简单的数据集并与excel进行了比较,虽然poly曲线拟合在R和excel中是相同的,但是从excel获得的A,B和C系数是正确的,但是从polyfit对象获得的那些不是吗?我是否从polyfit对象中提取了不正确的信息?为了我的目的,直接从R中提取系数会更方便吗?有人可以帮忙吗?
答案 0 :(得分:5)
默认情况下poly
适合正交多项式。基本上它使用以下想法......
x <- 1:10
# in this case same as x-mean(x)
y1 <- residuals(lm(x ~ 1))
# normalize to have unit norm
y1 <- y1/sqrt(sum(y1^2))
y2 <- residuals(lm(y1^2 ~ y1))
y2 <- y2/sqrt(sum(y2^2))
y3 <- residuals(lm(x^3 ~ y2 + y1))
y3 <- y3/sqrt(sum(y3^2))
cbind(y1, y2, y3)
poly(x, 3)
构造一组仍然产生相同预测的正交向量。如果您只想以常规方式获取多项式,则需要将raw=TRUE
指定为参数。
y <- rnorm(20)
x <- 1:20
o <- lm(y ~ poly(x, 2, raw = TRUE))
# alternatively do it 'by hand'
o.byhand <- lm(y ~ x + I(x^2))