上期介绍了一元线性回归,现在我们增加预测变量个数,稍微扩展一下我们的一元线性模型,就是多元线性回归了。😘
多元线性回归分析法的数学方程:
rm(list = ls())
library(tidyverse)
library(ggsci)
library(rms)
还是使用的上期介绍的mtcars,为1974年《Motor Trend US》杂志上记录的,包括32种汽车的mpg(燃料消耗)、hp(马力)等方面的数据。
dat <- mtcars %>%
rownames_to_column(.,"ID")

我们先看一下有没有NA值,用一下tidyverse的函数吧。
这里并没有NA值的存在,所以就不过滤了。
dat %>%
summarise_all(
~ sum(is.na(.))
)

这里我们看一下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变化。
我们用散点图可视化一下
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

在这里需要特殊说明一下,由于变量之间存在交互,大家在建模的时候可能会使用不同的符号,如: +, *,:等。
这里我们看一下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。
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

注意一下有误交互项的区别, 我们在这里用散点图可视化一下二者的区别
library(patchwork)
combined <- p1 + p2 & theme(legend.position = "bottom")
combined + plot_layout(guides = "collect")

所以!在这里我们建立的带交互项的模型公式为:
我们试着纳入更多的变量。由于样本量比较小,我们这里就增加到3个变量吧。
mod4 <- lm(mpg ~ wt + vs + drat,data = dat)
print(mod4)

上面的结果可能并不容易查看,这里我们使用tidyverse将结果输出为data.frame
result <- dat %>%
group_by(vs) %>%
group_modify(
~ broom::tidy(mod4)
)
result

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


最后祝大家早日不卷!~