前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」使用 ggplot2 进行曲线拟合

「R」使用 ggplot2 进行曲线拟合

作者头像
王诗翔呀
发布2022-01-21 19:14:56
1.5K0
发布2022-01-21 19:14:56
举报
文章被收录于专栏:优雅R优雅R

有读者询问如何对散点图拟合非线性的曲线。实际上我们通常看到的无论是直线拟合还是各种曲线拟合都属于广义线性模型。

这里我们构造一组数据来看看如何使用 ggplot2 来拟合数据。

构造的数据因变量大致是自变量 3 次方:

代码语言:javascript
复制
set.seed(1234L)
x <- 1:100
y <- (c(1:100) + rnorm(100, mean = 20, sd = 5))^3
df <- data.frame(
  x = x,
  y = y
)

使用 ggplot2 绘制散点图:

代码语言:javascript
复制
library(ggplot2)
p <- ggplot(df, aes(x, y)) +
  geom_point()
p

我们先直接利用 geom_smooth() 对散点进行平滑拟合,默认使用的是 loess 方法。

代码语言:javascript
复制
p + geom_smooth()
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

img

修改方法使用线性回归。

代码语言:javascript
复制
p + geom_smooth(method = "lm")
#> `geom_smooth()` using formula 'y ~ x'

img

如果针对的是非线性回归,而我们已经看到了大致的模式,我们可以通过 R 支持的公式来设定如何拟合散点。

代码语言:javascript
复制
p + geom_smooth(method = "lm", formula = y ~ I(x^3))

除了直接 geom_smooth() 进行拟合,还可以先使用 lm() 建立模型,生成对应的值,然后使用线条添加在图上也是可以的。

如果你还想要在图中添加公式,可以阅读 Stack Overflow 以下几篇问答:

  • https://stackoverflow.com/questions/7549694/add-regression-line-equation-and-r2-on-graph
  • https://stackoverflow.com/questions/49418552/adding-regression-line-equation-and-r2-on-separate-lines-graph
  • https://stackoverflow.com/questions/37494969/ggplot2-add-regression-equations-and-r2-and-adjust-their-positions-on-plot
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档