0

我一直試圖用R語言中的poly.calc方法(polynom包)實現拉格朗日插值來解決問題。R - poly.calc在使用多點時不穩定

基本上,我的問題是使用拉格朗日插值來預測某個國家的人口。我有過去幾年(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功率)。 這沒有意義。 但是,如果我使用了五點,這是正確的。

+0

您可能還想發佈一個鏈接到該圖。 – cel

回答

0

這不是一個真正的問題,而是一個數值分析問題。

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

最小二乘模型可以從上面的模型中看到,該花鍵可以做配件非好工作線性關係。