jamesbang

V1

2022/09/05阅读:54主题:雁栖湖

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

1写在前面

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

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

2用到的包

rm(list = ls())
library(tidyverse)
library(ggsci)
library(rms)

3示例数据

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

dat <- mtcars %>% 
rownames_to_column(.,"ID")

4数据处理

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

dat %>%
summarise_all(
~ sum(is.na(.))
)

5简单建模

5.1 两个变量

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

mod2 <- lm(mpg ~ wt + vs, data = dat)
mod2

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

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


5.2 可视化

我们用散点图可视化一下

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的影响。

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 可视化

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有无交互项的区别

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

library(patchwork)

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

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

8纳入跟多变量

8.1 建模

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

mod4 <- lm(mpg ~ wt + vs + drat,data = dat)
print(mod4)

8.2 查看详细信息

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

result <- dat %>%
group_by(vs) %>%
group_modify(
~ broom::tidy(mod4)
)
result

8.3 结果可视化

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

library(ggstatsplot)
ggcoefstats(mod4)

汽水
最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

分类:

后端

标签:

后端

作者介绍

jamesbang
V1

wx🔍: Grassssss 卷起来了