发布网友 发布时间:2022-04-29 18:34
共1个回答
热心网友 时间:2023-10-03 07:46
咨询记录 · 回答于2021-09-21有人会用R语言3.3.1版本nls非线性回归方程计算两个因变量,其中一个因变量有指数系数的函数么?函数模型为Y=a*[X(1)]^b+c*X(2) Y,X(1),X(2),为三组数据,求系数a,b,c你好!非线性回归是在对变量的非线性关系有一定认识前提下,对非线性函数的参数进行最优化的过程,最优化后的参数会使得模型的RSS(残差平方和)达到最小。在R语言中最为常用的非线性回归建模函数是nls,下面以car包中的USPop数据集为例来讲解其用法。数据中population表示人口数,year表示年份。如果将二者绘制散点图可以发现它们之间的非线性关系。在建立非线性回归模型时需要事先确定两件事,一个是非线性函数形式,另一个是参数初始值。一、模型拟合对于人口模型可以采用Logistic增长函数形式,它考虑了初期的指数增长以及总资源的*。其函数形式如下。用nls函数进行非线性回归首先载入car包以便读取数据,然后使用nls函数进行建模,其中theta1、theta2、theta3表示三个待估计参数,start设置了参数初始值,设定trace为真以显示迭代过程。nls函数默认采用Gauss-Newton方法寻找极值,迭代过程中第一列为RSS值,后面三列是各参数估计值。然后用summary返回回归结果。library(car)pop.mod1 <- nls(population ~ theta1/(1+exp(-(theta2+theta3*year))),start=list(theta1 = 400, theta2 = -49, theta3 = 0.025), data=USPop, trace=T)summary(pop.mod)还有一种更为简便的方法就是采用内置自启动模型(self-starting Models),此时我们只需要指定函数形式,而不需要指定参数初始值。本例的logistic函数所对应的selfstarting函数名为SSlogispop.mod2 <- nls(population ~ SSlogis(year,phi1,phi2,phi3),data=USPop)二、判断拟合效果非线性回归模型建立后需要判断拟合效果,因为有时候参数最优化过程会捕捉到局部极值点而非全局极值点。最直观的方法是在原始数据点上绘制拟合曲线。library(ggplot2)p <- ggplot(USPop,aes(year, population))p+geom_point(size=3)+geom_line(aes(ye