前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中进行nls模型分析

R中进行nls模型分析

作者头像
R语言数据分析指南
发布2024-04-19 18:22:23
1130
发布2024-04-19 18:22:23
举报

欢迎关注R语言数据分析指南

❝本节来介绍如何使用R进行nls分析使用内置的mtcars数据集,整个过程仅参考。希望对各位观众老爷能有所帮助。 ❞

代码语言:javascript
复制
library(tidyverse)

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() + 
  geom_smooth(method = "lm", formula = y ~ x) + 
  ggtitle("Initial Plot of MPG vs Car Weight")

❝此图显示了mtcars数据集中汽车重量(wt,单位为千磅)与每加仑英里数(mpg)之间的关系。 蓝色趋势线呈负斜率,这表示 wt 和 mpg 之间存在负相关。即随着车辆重量的增加,每加仑的行驶英里数似乎会减少。 数据点大致沿着蓝色趋势线分布,但有一定的波动。一些点位于趋势线之上,而另一些点位于趋势线之下,这表明还有其他因素可能影响 mpg,或wt与mpg之间可能存在非线性关系。 ❞

「nls(非线性最小二乘法)拟合指数模型」 使用nls来拟合非线性模型前需要先确定初始值,可通过将非线性模型线性化来估计参数的初始值。 通过对 mpg 取对数并对 wt 进行线性回归,可以将非线性的指数关系转换为线性关系,这样更容易分析和获取初始值。线性模型的斜率和截距转换回指数模型的参数。 线性模型的截距将是 log(k),因此k 将是截距的指数。 线性模型的斜率将是b的估计值。

代码语言:javascript
复制
# 对响应变量进行对数转换并拟合线性模型
mtcars$log_mpg <- log(mtcars$mpg)
fit <- lm(log_mpg ~ wt, data = mtcars)

# 显示拟合摘要获取初始参数估计
summary(fit)

使用模型参数
b_estimate <- coef(fit)["wt"]
k_estimate <- exp(coef(fit)["(Intercept)"])

# 输出参数估计
cat("Initial parameter estimates:\n")
cat(sprintf("k = %f\n", k_estimate))
cat(sprintf("b = %f\n", b_estimate))

k = 46.150767, b = -0.271785
代码语言:javascript
复制
# 使用nls函数拟合mtcars数据集中的mpg与wt之间的指数关系,k和b为模型参数
nls_model <- nls(mpg ~ k * exp(b * wt),
             data = mtcars,
             start = list(k = k_estimate, b = b_estimate))

# 打印nls模型的摘要,包括参数估计、统计显著性等信息
summary(nls_model)
代码语言:javascript
复制
# 使用nls函数拟合模型,增加了对迭代次数的控制,设置最大迭代次数为200
nlsFit <- nls(formula = mpg ~ k * exp(b * wt),
              start = list(k = k_estimate, b = b_estimate),
              data = mtcars,
              control = nls.control(maxiter = 200))
代码语言:javascript
复制
nlsParams <- coef(nlsFit) # 正确地提取nlsFit模型的参数
         k          b 
49.6596682 -0.2935779 

数据可视化

代码语言:javascript
复制
dlabel <- tibble(label="y = 49.7*e<sup>-0.294x</sup>",x=4,y=35)

ggplot(mtcars,aes(wt,mpg)) +
  geom_point()+
  stat_smooth(method = 'nls',
              method.args = list(start = c(a=1, b=1)), 
              formula = y~a*exp(b*x), se = FALSE)+
  geom_richtext(data=dlabel,aes(x=x,y=y,label=label),
                fill=NA,label.color=NA,show.legend = F)+
  theme_bw()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 数据可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档