【问题标题】:R - poly.calc not stable when using many pointsR - 使用多点时 poly.calc 不稳定
【发布时间】:2015-11-01 20:12:29
【问题描述】:

我一直在尝试使用拉格朗日插值来解决问题,该插值在 R 语言的poly.calc 方法(polynom 包)中实现。

基本上,我的问题是使用拉格朗日插值法预测某个国家的人口。我有过去几年(1961 - 2014)的人口。 csv文件为here

w1 = read.csv(file="country.csv", sep=",", head=TRUE)
array_x = w1$x
array_y = w1$y

#calls Lagrange Method
p = poly.calc(array_x, array_y)

#create a function to evaluate the polynom
prf <- as.function(p)
#create some points to plot
myx = seq(1961, 2020, 0.5)
#y's to plot
myy = prf(myx)
#plot
plot(myx, myy,col='blue')

之后,绘制的曲线呈下降趋势,y 轴为(非常大)负(134 的幂)。 它没有任何意义。 但是,如果我使用五点,那是正确的。

【问题讨论】:

  • 您可能还想发布该情节的链接。

标签: r machine-learning numerical-methods polynomial-approximations


【解决方案1】:

这不是一个真正的 SO 问题,而是一个数值分析问题。

R 正在做你想做的一切,这不是编程错误。只是你想要它做的事情是出了名的糟糕。拉格朗日多项式因极其不稳定而臭名昭著,尤其是在拟合大量点时。

更稳定的替代方法是使用样条,例如 B 样条。它们可以很容易地使用 R 的默认 spline 库拟合到任何回归模型中,即您可以使用

拟合最小二乘模型
library(splines)
x <- sort(runif(500, -3,3) ) #sorting makes for easier plotting ahead
y <- sin(x)
splineFit <- lm(y ~ bs(x, df = 5) )
est_y <- predict(splineFit)
plot(x, y, type = 'l')
lines(x, est_y, col = 'blue')

从上面的模型可以看出样条可以很好的拟合非线性关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2012-08-06
    • 2011-01-20
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多