前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🧐 rms | 多元线性回归的解释与可视化(二)

🧐 rms | 多元线性回归的解释与可视化(二)

作者头像
生信漫卷
发布2022-10-31 17:09:36
2K0
发布2022-10-31 17:09:36
举报
文章被收录于专栏:R语言及实用科研软件

1写在前面

上期介绍了一元线性回归,现在我们增加预测变量个数,稍微扩展一下我们的一元线性模型,就是多元线性回归了。😘

多元线性回归分析法的数学方程:

y = a+βx_1+βx_2+ϵ

2用到的包

代码语言:javascript
复制
rm(list = ls())
library(tidyverse)
library(ggsci)
library(rms)

3示例数据

还是使用的上期介绍的mtcars,为1974年《Motor Trend US》杂志上记录的,包括32种汽车的mpg(燃料消耗)、hp(马力)等方面的数据。

代码语言:javascript
复制
dat <- mtcars %>% 
  rownames_to_column(.,"ID")

4数据处理

我们先看一下有没有NA值,用一下tidyverse的函数吧。 这里并没有NA值的存在,所以就不过滤了。

代码语言:javascript
复制
dat %>%
  summarise_all(
    ~ sum(is.na(.))
  )

5简单建模

5.1 两个变量

这里我们看一下vs(引擎类型)和wt(重量)对mpg(燃料消耗)的影响。 我们将vs的赋值定义为,0 = V-shaped, 1 = straight

代码语言:javascript
复制
mod2 <- lm(mpg ~ wt + vs, data = dat)
mod2

结果解释weight = -4.443, ➡️ 当vs1保持不变时,wt变化引起的mpg变化。

vs1 = 16874.158, ➡️ 当wt保持不变时,vs变化(0变为1)引起的mpg变化。


5.2 可视化

我们用散点图可视化一下

代码语言:javascript
复制
p1 <- dat %>%
  ggplot(aes(x = wt, y = mpg, color = vs)) +
  geom_point(alpha = 0.1) +
  geom_line(aes(y = predict(mod2))) +
  theme_bw()+
  scale_color_aaas()
p1

6交互项的处理

6.1 建模

在这里需要特殊说明一下,由于变量之间存在交互,大家在建模的时候可能会使用不同的符号,如: +, *,:等。

这里我们看一下vs (0 = V-shaped, 1 = straight) 和 wt (Weight) 以及二者交互项对mpg的影响。

代码语言:javascript
复制
dat$vs <- factor(dat$vs)
mod3 <- lm(mpg ~  wt + vs + wt:vs, data = dat)
coef(mod3)

解释结果: 对于V-shaped引擎,Weight增长1个单位,mpg下降3.501310

对于straight引起,Weight增长1个单位,mpg下降3.501310 + 2.909707


6.2 可视化

代码语言:javascript
复制
p2 <- dat %>%
  ggplot(aes(x = wt, y = mpg, color = vs)) +
  geom_point(alpha = 0.1) +
  geom_line(aes(y = predict(mod3)))+
  theme_bw()+
  scale_color_aaas()
p2

7有无交互项的区别

注意一下有误交互项的区别, 我们在这里用散点图可视化一下二者的区别

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

combined <- p1 + p2 & theme(legend.position = "bottom")
combined + plot_layout(guides = "collect")

所以!在这里我们建立的带交互项的模型公式为:

mpg = a+β_1wt+β_2vs+β_3(wt*vs)+ϵ

8纳入更多变量

8.1 建模

我们试着纳入更多的变量。由于样本量比较小,我们这里就增加到3个变量吧。

代码语言:javascript
复制
mod4 <- lm(mpg ~ wt + vs + drat,data = dat)
print(mod4)

8.2 查看详细信息

上面的结果可能并不容易查看,这里我们使用tidyverse将结果输出为data.frame

代码语言:javascript
复制
result <- dat %>%
  group_by(vs) %>%
  group_modify(
    ~ broom::tidy(mod4)
  ) 
result

8.3 结果可视化

本期我们使用ggstatsplot包的ggcoefstats函数,以森林图的方式展示结果。

代码语言:javascript
复制
library(ggstatsplot)
ggcoefstats(mod4)

最后祝大家早日不卷!~


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信漫卷 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1写在前面
  • 2用到的包
  • 3示例数据
  • 4数据处理
  • 5简单建模
    • 5.1 两个变量
      • 5.2 可视化
      • 6交互项的处理
        • 6.1 建模
          • 6.2 可视化
          • 7有无交互项的区别
          • 8纳入更多变量
            • 8.1 建模
              • 8.2 查看详细信息
                • 8.3 结果可视化
                相关产品与服务
                灰盒安全测试
                腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档