r语言做断轴_R语言用nls做非线性回归以及函数模型的参数估计

非线性回归是在对变量的非线性关系有一定认识前提下,对非线性函数的参数进行最优化的过程,最优化后的参数会使得模型的RSS(残差平方和)达到最小。在R语言中最为常用的非线性回归建模函数是nls,下面以car包中的USPop数据集为例来讲解其用法。数据中population表示人口数,year表示年份。如果将二者绘制散点图可以发现它们之间的非线性关系。在建立非线性回归模型时需要事先确定两件事,一个是非线性函数形式,另一个是参数初始值。

一、模型拟合

对于人口模型可以采用Logistic增长函数形式,它考虑了初期的指数增长以及总资源的限制。其函数形式如下。

function.jpg

首先载入car包以便读取数据,然后使用nls函数进行建模,其中theta1、theta2、theta3表示三个待估计参数,start设置了参数初始值,设定trace为真以显示迭代过程。nls函数默认采用Gauss-Newton方法寻找极值,迭代过程中第一列为RSS值,后面三列是各参数估计值。然后用summary返回回归结果。

library(car)

pop.mod1

summary(pop.mod)

还有一种更为简便的方法就是采用内置自启动模型(self-starting Models),此时我们只需要指定函数形式,而不需要指定参数初始值。本例的logistic函数所对应的selfstarting函数名为SSlogis

pop.mod2

二、判断拟合效果

非线性回归模型建立后需要判断拟合效果,因为有时候参数最优化过程会捕捉到局部极值点而非全局极值点。最直观的方法是在原始数据点上绘制拟合曲线。

library(ggplot2)

p

p+geom_point(size=3)+geom_line(aes(year,fitted(pop.mod1)),col='red')

附注:关于fitted详细讲解转——一个不错的博客

cacf871ece8fa7fecedf73a6c706be89.png

若比较多个模型的拟合效果可使用AIC函数,取最小值为佳。(AIC是赤池系数用于比较模型的好坏,类似的BIC是贝叶斯系数)

三、残差诊断

为了检测这些假设是否成立我们用拟合模型的残差来代替误差进行判断。

plot(fitted(pop.mod1) , resid(pop.mod1),type='b')

a1d9dfc52fc777b9938a3a2c841ecf22.png

fitted是拟合值(predict是预测值) resid和residuals表示残差

四、函数模型的参数估计

关于函数估计至少有这么几个问题是需要关心的:

1、知道函数的一个大概的模型,需要估计函数的参数;

2、不知道模型,但想用一个不坏的模型刻画它;

3、不知道模型,不太关心其显式表达是什么,只想知道它在没观测到的点的取值。

这三个问题第一个是拟合或者叫参数估计,第二个叫函数逼近,第三个叫函数插值。从统计的角度来看,第一个是参数问题,剩下的是非参数的问题

以含常数项的指数函数为例

模拟模型( y=x^beta+mu +varepsilon ),这里假设( beta=3,mu=5.2 )

产生仿真数据

len

x

y

ds

str(ds)

'data.frame': 24 obs. of 2 variables:

$ x: num 0.3961 0.2004 0.0407 0.9873 0.83 ...

$ y: num 5.37 5.15 5.21 6.06 5.75 ...

plot(y ~ x, main = "指数模型")

s

lines(s, s^3, lty = 2, col = "red")

1c9e80545d19507fb513131df97216bd.png

使用nls函数估计如下:

rhs

b0 + x^b1

}

m.1

power = 2), trace = T)

回显如下:

629.9495 : 0 2

0.08918652 : 5.174334 2.526742

0.08346069 : 5.184992 2.786072

0.08303884 : 5.188992 2.870896

0.08301127 : 5.190252 2.894080

0.08300947 : 5.190594 2.900075

0.08300935 : 5.190683 2.901602

0.08300934 : 5.190705 2.901989

0.08300934 : 5.190711 2.902088

0.08300934 : 5.190713 2.902112

summary(m.1)

回显如下:

Formula: y ~ rhs(x, intercept, power)

Parameters:

Estimate Std. Error t value Pr(>|t|)

intercept 5.19071 0.02189 237.150 < 2e-16

power 2.90211 0.30825 9.415 3.58e-09

intercept ***

power ***

---

Signif. codes:

0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06143 on 22 degrees of freedom

Number of iterations to convergence: 9

Achieved convergence tolerance: 4.296e-06

如果采用最小二乘估计方法,得到的结果是:

model

summary(model)

回显如下:

Call:

lm(formula = I(log(y)) ~ I(log(x)))

Residuals:

Min 1Q Median 3Q Max

-0.054991 -0.029944 -0.008994 0.037530 0.073063

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 1.755422 0.011128 157.755 < 2e-16

I(log(x)) 0.055445 0.009502 5.835 7.17e-06

(Intercept) ***

I(log(x)) ***

---

Signif. codes:

0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.03851 on 22 degrees of freedom

Multiple R-squared: 0.6075,Adjusted R-squared: 0.5897

F-statistic: 34.05 on 1 and 22 DF, p-value: 7.166e-06

我们可以将估计数据、真实模型、nls估计模型、最小二乘模型得到的结果展示在下图中,来拟合好坏有个直观的判断:

plot(ds$y ~ ds$x, main = "Fitted power model, with intercept", sub = "Blue: fit; magenta(洋红): fit LSE ; green: known")

lines(s, s^3 + 5.2, lty = 2, col = "green")

lines(s, predict(m.2, list(x = s)), lty = 1, col = "blue")

lines(s, exp(predict(model, list(x = s))), lty = 2, col = "magenta")

segments(x, y, x, fitted(m.2), lty = 2, col = "red")

legend("topleft",c("nsl拟合","最小二乘法(洋红)","真实","nls估计"),col=c("blue","magenta","green","red"),pch=15:15,cex = 0.7)

062563bd2a8398299aaf5f3167244316.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day8-异常处理与网络编程

第1章 异常处理 1.1 什么是异常? 1.1.1 描述 #1 什么是异常&#xff1f; # 异常是错误发生的信号&#xff0c;一旦程序出错&#xff0c;就会产生一个异常&#xff0c;应用程序未处理该异常&#xff0c; # 异常便会抛出&#xff0c;程序随之终止 异常就是程序运行时发生错误的信…

常用数据结构的一部分类

VECTORvector是可以实现自动增长的对象数组。java.util.vector提供了向量类&#xff08;vector&#xff09;来实现向量数组的功能。在C和C中可以使用指针来实现动态数组&#xff0c;java通过提供大量的类库来弥补这个功能。向量类的对象 可以向其中随意插入不同类的对象&#x…

进程(并发,并行) join start 进程池 (同步异步)

一、背景知识 顾名思义&#xff0c;进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统&#xff0c;是操作系统最核心的概念&#xff0c;也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的…

面对职业诱惑,我们如何作出理性的选择?

版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。本文地址&#xff1a;http://blog.csdn.net/jobchanceleo/archive/2007/07/08/1682484.aspx 分享一个发生在我们身边的案例&a…

xamarin怎么调用java的_XamarinSQLite教程在Xamarin.Android项目中使用数据库

XamarinSQLite教程在Xamarin.Android项目中使用数据库在Xamarin.Android项目中使用预设数据库的具体操作步骤如下&#xff1a;(1)创建一个Xamarin.Android项目&#xff0c;如AndroidSQLiteDemo。(2)在AndroidSQLiteDemo项目的Resources文件夹下创建一个Raw文件夹。(3)将上一节中…

Selector的一些state使用

(一)Selector的基本状态android:state_selected 控件选中状态&#xff0c;可以为true或falseandroid:state_focused 控件获得焦点状态&#xff0c;可以为true或falseandroid:state_pressed 控件点击状态&#xff0c;可以为true或falseandroid:state_enabled 控件使能状态&#…

服务框架及服务治理组件——业界调研

声明&#xff1a;主要内容来自公司内部 对业界的调研,不一定恰当、准确、实时。 表格文字较多&#xff0c;APP阅读体验较差 团队服务相关组件\方案通信框架监控负载均衡\路由是否开源腾讯完全自研&#xff1b;BG内部自治&#xff0c;每个BG有自己相应的解决方案&#xff0c;单独…

在操作系统重启后恢复应用程序的工作状态

Windows 10 创意者更新之后&#xff0c;默认开启了重启后恢复应用程序状态的功能。这是自 Vista 以来就提供的功能——Restart Manager。 应用程序实现这一功能只需要调用 RegisterApplicationRestart 即可。传入两个参数&#xff1a; 重启后使用的命令行参数&#xff08;例如当…

裁员感悟

好员工&#xff0c;别以为裁员与你无关(上) 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。本文地址&#xff1a;http://blog.csdn.net/jobchanceleo/archive/2007/05/26/…

php传中文给Java_完美解决PHP中文乱码(转) - - JavaEye技术网站

PHP中文乱码一般是字符集问题&#xff0c;编码主要有下面几个问题。一&#xff0e;首先是PHP网页的编码1.文件本身的编码与网页的编码应匹配a.如果欲使用gb2312编码&#xff0c;那么php要输出头&#xff1a;header(“Content-Type: text/html; charsetgb2312")&#xff0c…

CharSequence类

CharSequence是char类型的一个可读序列&#xff0c;它本身是一个接口&#xff0c;CharBuffer、String、StringBuffer、StringBuilder这个四个类实现了这个接口。此接口对于不同种类的char序列提供统一的只读访问以下是这个函数的API 它只定义了四个方法 /*** This interface re…

程序员考核的五大死因

程序员考核的五大死因&#xff08;上&#xff09; 程序员作为企业开发力量的最核心资产&#xff0c;无疑得到公司从上至下的一致关注。开发是个智力密集型产业&#xff0c;程序开发的特点是&#xff0c;付出相同时间的情况下&#xff0c;两个开发者之间的产能会相差十几甚至几…

java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例

本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家供大家参考&#xff0c;有需要的小伙伴们可以来看看。给定一个包含 m x n 个元素的矩阵(m 行, n 列)&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有…

Vue Axios的配置 (高仿饿了么)

export default {name: "app",components: {"v-header": header},data() {return {seller: {}};},created() {let _this this; // 让this始终代表最初this指向的对象this.axios.get(../data.json).then(function(res) {_this.seller res.data.sellercons…

PagerAdapter学习

前言: ViewGroup可以实现很多功能&#xff0c;如简单的页面导航和页面滑动等等。谷歌公司为我们提供ViewGroup的API。谷歌公司推荐我们把ViewGroup和Fragment一起使,如果一起使用的话&#xff0c;应该使用FragmentPagerAdapter和FragmentStatePagerAdapter来进行适配处理&#…

arXiv网站

arXiv 原先是由物理学家保罗金斯巴格在1991年建立的网站&#xff0c; 我们会将预稿上传到arvix作为预收录&#xff0c;因此这就是个可以证明论文原创性&#xff08;上传时间戳&#xff09;的文档收录网站。转载于:https://www.cnblogs.com/AntonioSu/p/8387324.html

加薪——爱你在心口难开

加薪——爱你在心口难开(1) &#xff08;原文刊登于《程序员》杂志07年第4期&#xff09; 刚过了春节的4月份&#xff0c;空气中到处透着躁动的味道&#xff0c;“求职”、“招聘”不断刺激着程序员们的耳鼓&#xff0c;其实大多数跳槽者如果能静下心来审视自己一下&#xf…

java线程interrupt用法_Java线程中interrupt那点事 | 学步园

1.先看一下例子程序&#xff1a;import java.io.IOException;import java.net.ServerSocket;import javax.rmi.CORBA.Tie;/**author: ZhengHaibo*web: http://blog.csdn.net/nuptboyzhb*mail: zhb931706659126.com*2014-3-16 Nanjing,njupt,China*/public class TestThread {/*…

Kotlin Native新增Objective-C互操作能力以及对WebAssembly的支持

根据JetBrains技术主管Nikolay Igotti的介绍&#xff0c;Kotlin/Native 0.4已经可用于为iOS和macOS开发原生应用。此外该版本还为WebAssembly平台提供了实验性支持。 \\Kotlin/Native对iOS/macOS开发的支持&#xff0c;关键在于实现了与Objective-C的互操作性。JetBrains目前已…

TranslateAnimation动画

众所周知&#xff0c;TranslateAnimation是android中重要的一个动画函数&#xff0c;很多时候我们都需要使用它来实现更好的UI效果&#xff0c;今天就简单研究下这个TranslateAnimation。TranslateAnimation这个位移动画主要有三个构造函数&#xff0c;对应着三种不同的参数形式…