多项式模型与R

多项式模型与R,r,curve-fitting,data-analysis,polynomial-math,R,Curve Fitting,Data Analysis,Polynomial Math,我已经阅读了这些答案,它们非常有用,但我需要帮助,特别是在R 我在R中有一个示例数据集,如下所示: x <- c(32,64,96,118,126,144,152.5,158) y <- c(99.5,104.8,108.5,100,86,64,35.3,15) x要得到x(x^3)中的三阶多项式,您可以 lm(y ~ x + I(x^2) + I(x^3)) 或 你可以拟合一个10阶多项式,得到一个近乎完美的拟合,但你应该吗 编辑: 多边形(x,3)可能是一个更好的选择(见

我已经阅读了这些答案,它们非常有用,但我需要帮助,特别是在R

我在R中有一个示例数据集,如下所示:

x <- c(32,64,96,118,126,144,152.5,158)  
y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

x要得到x(x^3)中的三阶多项式,您可以

lm(y ~ x + I(x^2) + I(x^3))

你可以拟合一个10阶多项式,得到一个近乎完美的拟合,但你应该吗

编辑:
多边形(x,3)可能是一个更好的选择(见下文@hadley)。

关于“能否帮助我找到最佳拟合模型”的问题,可能有一个函数可以做到这一点,假设您可以说明要测试的模型集,但这将是n-1次多项式集的一个很好的第一种方法:

polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))
as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)
  • 我使用了
    as.integer()
    函数,因为我不清楚如何解释非整数多项式

  • < L>>P>测试任意一组数学方程,考虑Andrew Gelman

    复习的程序。 更新

    另请参见
    stepAIC
    功能(在MASS软件包中)以自动选择模型。

    哪个模型是“最佳拟合模型”取决于“最佳”的含义。R有一些工具可以帮助您,但您需要提供“最佳”的定义,以便在它们之间进行选择。考虑下面的示例数据和代码:

    x <- 1:10
    y <- x + c(-0.5,0.5)
    
    plot(x,y, xlim=c(0,11), ylim=c(-1,12))
    
    fit1 <- lm( y~offset(x) -1 )
    fit2 <- lm( y~x )
    fit3 <- lm( y~poly(x,3) )
    fit4 <- lm( y~poly(x,9) )
    library(splines)
    fit5 <- lm( y~ns(x, 3) )
    fit6 <- lm( y~ns(x, 9) )
    
    fit7 <- lm( y ~ x + cos(x*pi) )
    
    xx <- seq(0,11, length.out=250)
    lines(xx, predict(fit1, data.frame(x=xx)), col='blue')
    lines(xx, predict(fit2, data.frame(x=xx)), col='green')
    lines(xx, predict(fit3, data.frame(x=xx)), col='red')
    lines(xx, predict(fit4, data.frame(x=xx)), col='purple')
    lines(xx, predict(fit5, data.frame(x=xx)), col='orange')
    lines(xx, predict(fit6, data.frame(x=xx)), col='grey')
    lines(xx, predict(fit7, data.frame(x=xx)), col='black')
    

    x在R中找到最佳拟合的最简单方法是将模型编码为:

    lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...)
    

    lm.1在问“你应该”时是恰到好处的。样本数据只有8个点。这里的自由度很低。当然,现实生活中的数据可能还有很多。谢谢你的回答。让R找到最合适的模型怎么样?这有什么功能吗?这取决于你对“最佳模型”的定义。给出最大R^2的模型(10阶多项式会给出)不一定是“最佳”模型。模型中的术语需要合理选择。你可以用很多参数获得近乎完美的拟合,但该模型没有预测能力,除了通过点绘制一条最佳拟合线之外,对任何事情都没有用处。你为什么要使用
    raw=T
    ?最好使用不相关变量。我这样做是为了得到与lm(y~x+I(x^2)+I(x^3))相同的结果。
    。也许不是最优的,只是给同一个目的提供两种方法。使用
    I(x^2)
    等方法并不能给出合适的正交多项式进行拟合。我如何将Eurequa与R联系起来?@adam.888很好的问题-我不知道答案,但你可以单独发布。最后一点有点离题。注意:AIC是Akaike信息标准,它奖励紧密拟合,惩罚模型的大量参数,在各种意义上都是最优的。
    x <- 1:10
    y <- x + c(-0.5,0.5)
    
    plot(x,y, xlim=c(0,11), ylim=c(-1,12))
    
    fit1 <- lm( y~offset(x) -1 )
    fit2 <- lm( y~x )
    fit3 <- lm( y~poly(x,3) )
    fit4 <- lm( y~poly(x,9) )
    library(splines)
    fit5 <- lm( y~ns(x, 3) )
    fit6 <- lm( y~ns(x, 9) )
    
    fit7 <- lm( y ~ x + cos(x*pi) )
    
    xx <- seq(0,11, length.out=250)
    lines(xx, predict(fit1, data.frame(x=xx)), col='blue')
    lines(xx, predict(fit2, data.frame(x=xx)), col='green')
    lines(xx, predict(fit3, data.frame(x=xx)), col='red')
    lines(xx, predict(fit4, data.frame(x=xx)), col='purple')
    lines(xx, predict(fit5, data.frame(x=xx)), col='orange')
    lines(xx, predict(fit6, data.frame(x=xx)), col='grey')
    lines(xx, predict(fit7, data.frame(x=xx)), col='black')
    
    lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...)
    
    lm.s <- step(lm.1)