R - 非线性最小二乘法
在对真实世界数据进行回归分析建模时,我们观察到模型方程很少是给出线性图形的线性方程。大多数情况下,真实世界数据的模型方程涉及更高阶的数学函数,如 3 次幂或 sin 函数。在这种情况下,模型的图表会呈现曲线而不是直线。线性回归和非线性回归的目标都是调整模型参数的值,以找到最接近数据点的直线或曲线。找到这些值后,我们就能以较高的准确度估计响应变量。
在最小二乘回归中,我们建立一个回归模型,使不同点到回归曲线的垂直距离平方和最小化。我们通常从一个已定义的模型开始,并为系数假设一些初始值。然后使用 R 的 nls() 函数来获得更准确的值以及置信区间。
语法
在 R 中创建非线性最小二乘测试的基本语法如下 −
nls(formula, data, start)
以下是所用参数的描述 −
formula 是一个包含变量和参数的非线性模型公式。
data 是一个用于求值公式中变量的数据框。
start 是一个命名列表或命名数值向量,包含起始估计值。
示例
我们将考虑一个非线性模型,并为其系数假设初始值。接下来,我们将查看这些假设值的置信区间,以便判断这些值在模型中的拟合程度。
为此,我们考虑以下方程 −
a = b1*x^2+b2
假设初始系数为 1 和 3,并将这些值拟合到 nls() 函数中。
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) # 为图表文件命名。 png(file = "nls.png") # 绘制这些值。 plot(xvalues,yvalues) # 取假设值并拟合到模型中。 model <- nls(yvalues ~ b1*xvalues^2+b2,start = list(b1 = 1,b2 = 3)) # 使用 100 个数据点的预测绘制新数据图表。 new.data <- data.frame(xvalues = seq(min(xvalues),max(xvalues),len = 100)) lines(new.data$xvalues,predict(model,newdata = new.data)) # 保存文件。 dev.off() # 获取平方残差之和。 print(sum(resid(model)^2)) # 获取所选系数值的置信区间。 print(confint(model))
执行上述代码时,会产生以下结果 −
[1] 1.081935
等待轮廓分析完成...
2.5% 97.5%
b1 1.137708 1.253135
b2 1.497364 2.496484
我们可以得出结论,b1 的值更接近 1,而 b2 的值更接近 2,而不是 3。