1. 程式人生 > >R語言開發之非線性最小二乘法瞭解下

R語言開發之非線性最小二乘法瞭解下

當對真實世界資料建模進行迴歸分析時,我們觀察到模型的方程很少是給出線性圖的線性方程。 反而是在大多數情況下,現實世界資料模型的方程式涉及更高程度的數學函式,如3sin函式的指數。 在這種情況下,模型的曲線給出了曲線而不是線性。線性和非線性迴歸的目標是調整模型引數的值以找到最接近您的資料的線或曲線。當找到這些值時,我們才能夠準確估計響應變數。我們這次呢,就來了解下最小二乘迴歸。

在最小二乘迴歸中,我們建立了一個迴歸模型,不同點與迴歸曲線的垂直距離的平方和之和最小化。 我們通常從定義的模型開始,並假設係數的一些值, 然後就會應用R中的nls()函式來獲得更準確的值以及置信區間,來看下語法:

nls(formula, data, start)

引數描述如下:

  • formula - 是包含變數和引數的非線性模型公式。
  • data - 是用於評估(計算)公式中的變數的資料幀。
  • start - 是起始估計的命名列表或命名數字向量。

來看一個數學方程式:

a = b1*x^2+b2

根據上述的方程式,我們來看一個假設其係數的初始值的非線性模型。首先我們可以先假設初始係數為13,並將這些值擬合成nls()函式,如下:

setwd("D:/r_file")
xvalues <- c(1.6,2.1,2,2.23,3.71,3.25,3.4,3.86,1.19,2.21)
yvalues <- c(5.19,7.43,6.94,8.11,18.75,14.88,16.06,19.12,3.21,7.58)

# Give the chart file a name.
png(file = "nls.png")


# Plot these values.
plot(xvalues,yvalues)


# Take the assumed values and fit into the model.
model <- nls(yvalues ~ b1*xvalues^2+b2,start = list(b1 = 1,b2 = 3))

# Plot the chart with new data by fitting it to a prediction from 100 data points.
new.data <- data.frame(xvalues = seq(min(xvalues),max(xvalues),len = 100))
lines(new.data$xvalues,predict(model,newdata = new.data))

# Save the file.
dev.off()

# Get the sum of the squared residuals.
print(sum(resid(model)^2))

# Get the confidence intervals on the chosen values of the coefficients.
print(confint(model))

輸出的結果如下所示:

[1] 1.081935
Waiting for profiling to be done...
       2.5%    97.5%
b1 1.137708 1.253135
b2 1.497364 2.496484

產生的圖片如下:

根據上面輸出的結果,我們可以得出結論,那就是,b1的值更接近於1,而b2的值更接近於2而不是3。

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。