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)