首页 文章

从r中多项式拟合中分离系数

提问于
浏览
1

我已经将一个简单的二阶多项式拟合成时间序列数据,形式如下:

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中提取系数会更方便吗?有人可以帮忙吗?

1 回答

  • 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))
    

相关问题