R语言非线性模型的实现

 更新时间:2021年08月11日 10:43:31   作者:大白羊_Aries  
本文主要介绍了R语言非线性模型的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

什么是非线性回归

在非线性回归中,分析师通常采用一个确定的函数形式和相应的参数来拟合数据。最常用的参数估计方法是利用非线性最小二乘法(R中的nls函数)。该方法使用线性函数来逼近非线性函数,并且通过不断迭代这个过程来得到参数的最优解(本段来自维基百科)。非线性回归的良好性质之一是估计出的参数都有清晰的解释(如Michaelis-Menten模型的Vmax是指最大速率),而变换数据后得到的线性模型其参数往往难以解释。

实例一

首先,绘制出原数据的散点图。代码试下如下:

data9.3<-read.csv("C:/Users/Administrator/Desktop/data9.3.csv",head=TRUE)
attach(data9.3)
plot(x,y)

输出结果为:

在这里插入图片描述

可以看出,这时 y 与 x之间呈现出非线性,因此需要对数据进行非线性回归分析。

代码实现如下:

nls9.3<-nls(y~a-a/(1+(x/c)^b),start=list(a=100,b=5,c=4.8))
summary(nls9.3)
e<-resid(nls9.3)
ebar<-mean(e)
SE<-deviance(nls9.3)  # 残差平方和,由于e的均值不等于0,所以SE不等于残差的离差平方和
SSE<-sum((e-ebar)^2)  # 残差的离差平方和
prey<-fitted(nls9.3)  # y的预测值
pybar<-mean(prey)  # y的预测值的均值
ybar<-mean(y)  # y的均值
SST<-sum((y-ybar)^2)  # 总离差平方和
Rsquare<-1-SE/SST  # 相关指数

输出结果为:

在这里插入图片描述

在这里插入图片描述

  由以上输出结果可知,对参数的估计经过6步迭代计算后收敛,而且相关指数 R 2 = 0.9986,说明非线性回归拟合效果很好。同时,上述结果中对参数的显著性检验显示参数均通过显著性检验。

  但是,在小样本的情况下,不可线性化的非线性回归的残差通畅不满足正态性,进而使用 t分布进行检验也是无效的,因此显著性检验的结果并不具有重要意义。

  另外,听过对中间量的查看,回归的利差平方和 S S R = 15156.55 ,而总离差平方和 S S T = 14917.89<S S R ,可见非线性回归不再满足平方和分解式。

  该实例中残差均值为 0.2856 ≠ 0,当然,如果回归拟合的效果好,残差均值会接近0.

  通过上述分析可以认为, y与 x符合下面的非线性回归:

实例二——Gompertz模型

回归实现的代码如下:

data9.4<-read.csv("C:/Users/Administrator/Desktop/data9.4.csv",head=TRUE)
y<-data9.4[,2]
t<-data9.4[,1]
model<-nls(y~k*(a^(b^t)),start=list(a=0.5,b=0.5,k=120),lower=c(0,0,116),upper=c(1,1,10000),algorithm="port")
summary(model)
c<-coef(model)  # 将模型的回归系数赋值给c
tt<-c(1:30)
yp<-c[3]*(c[1]^(c[2]^tt))  # 计算时间取值为tt时对应的y的预测值
t1=t+1979  # 计算对应的年份
t2<-tt+1979
plot(t1,y,type="o",ann=FALSE,ylim=c(0,160),xlim=c(1975,2015))
lines(t2,yp)

输出结果为:

在这里插入图片描述

拟合结果为:

在这里插入图片描述

  这里可以不用纠结这个模型是怎么得到的,这是一个计量经济学上的模型,已经给出了确切的表达式为

  举这个例子的目的是了解由于回归迭代中的参数超过范围而导致代码运算产生无限不收敛的情况时,如何对参数取值做出限定,并使用高斯-牛顿迭代算法(设定参数algorithm=“port”)。

到此这篇关于R语言非线性模型的实现的文章就介绍到这了,更多相关R语言非线性模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • R语言 解决无法打开链结的问题

    R语言 解决无法打开链结的问题

    这篇文章主要介绍了R语言 解决无法打开链结的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 使用ggsignif优雅添加显著性标记详解

    使用ggsignif优雅添加显著性标记详解

    这篇文章主要为大家介绍了使用ggsignif优雅添加显著性标记详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • R语言模拟疫情传播图RVirusBroadcast展示疫情数据

    R语言模拟疫情传播图RVirusBroadcast展示疫情数据

    本文用RVirusBroadcast展示模拟的疫情数据,让R语言模拟疫情传播图来告诉你为什么还不到出门的时候,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • R语言apply系列函数实例详解

    R语言apply系列函数实例详解

    apply()函数是一种很强大的机制,下面这篇文章主要给大家介绍了关于R语言apply系列函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • R语言数据类型转换的实现(向量,列表,矩阵)

    R语言数据类型转换的实现(向量,列表,矩阵)

    我们在使用R语言做数据分析时,会一直对数据进行不同类型的转换,本文主要介绍了R语言数据类型转换的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • R语言绘制小提琴图violin plot实现示例

    R语言绘制小提琴图violin plot实现示例

    这篇文章主要为大家介绍了R语言绘制小提琴图violin plot的实现方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • 详解R语言图像处理EBImage包

    详解R语言图像处理EBImage包

    EBImage是R的一个扩展包,提供了用于读取、写入、处理和分析图像的通用功能,非常容易上手,本文给大家介绍下R语言图像处理EBImage包的相关知识,感兴趣的朋友一起看看吧
    2022-02-02
  • R语言-有负下标里才能有零介绍

    R语言-有负下标里才能有零介绍

    这篇文章主要介绍了R语言-有负下标里才能有零的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 如何用R语言绘制散点图

    如何用R语言绘制散点图

    这篇文章主要介绍了如何用R语言绘制散点图,帮助大家更好的理解和学习使用R语言,感兴趣的朋友可以了解下
    2021-03-03
  • R语言数据的输入和输出操作

    R语言数据的输入和输出操作

    这篇文章主要介绍了R语言数据的输入和输出操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论