绘制(多级)多元回归

机器算法验证 r 多重回归 数据可视化 多层次分析 ggplot2
2022-03-26 05:23:12

可以说我有一些这样的数据:

library(ggplot2)
library(lme4)

groups <- floor(runif(1000, min=1, max=7))
sex <- rep(c("Male", "Female"), times= 500)
value1 <- runif(1000, min=1, max=10)
value2 <- runif(1000, min=1, max=100)
value3 <- runif(1000, min=1, max=200)
response <- runif(1000, min=1, max=100)

df <- data.frame(groups, sex, response, value1, value2, value3)

我运行以下混合效应模型:

model <- lmer(scale(response) ~ scale(value1) + scale(value2) + scale(value3) + factor(sex) + (1|groups), data=df)
summary(model)

要获得固定效果的以下输出:

Fixed effects:
  Estimate Std. Error        df t value Pr(>|t|)
(Intercept)       0.01659    0.04479 995.00000   0.370    0.711
scale(value1)    -0.01159    0.03168 995.00000  -0.366    0.715
scale(value2)    -0.02538    0.03172 995.00000  -0.800    0.424
scale(value3)    -0.03454    0.03171 995.00000  -1.089    0.276
factor(sex)Male  -0.03317    0.06340 995.00000  -0.523    0.601

现在,我对可视化和之间的关系很感兴趣,value1因此response我考虑使用模型摘要中的斜率和截距来创建如下图:

ggplot(aes(x = scale(value1), y = scale(response)), data=df) +
  geom_point() +
  geom_abline(intercept = 0.01659, slope = -0.01159)

这种方法的问题在于,散点图点显示了两个变量之间的原始关系,而斜率和截距值(abline)显示了控制所有其他变量后的关系

什么是可视化多元回归中预测变量和响应之间关系的正确/典型方法(使用ggplot)?在控制模型中的所有其他变量后,我希望能够显示关系的大小

此外,我也不确定因素和随机效应变量的存在如何影响这些图的创建

avplots(或 termplots?)在哪里出现?我可以很容易地为常规的固定效果模型创建 avplots,但它似乎不适用于混合效果模型

1个回答

有许多软件包支持在混合模型中绘制固定效应的边际效应。我知道以下内容visregeffects在下文中,我将说明 和 的用法ggeffectssjPlotvisregggeffects

使用visreg

visreg软件包支持绘制固定效果和随机效果。

使用问题中的数据的示例是:

library(ggplot2)
library(lme4)
library(visreg)

set.seed(142857)
groups <- floor(runif(1000, min=1, max=7))
sex <- rep(c("Male", "Female"), times= 500)
value1 <- runif(1000, min=1, max=10)
value2 <- runif(1000, min=1, max=100)
value3 <- runif(1000, min=1, max=200)
response <- runif(1000, min=1, max=100)

df <- data.frame(groups, sex, response, value1, value2, value3)

model <- lmer(scale(response) ~ scale(value1) + scale(value2) + scale(value3) + factor(sex) + (1|groups), data=df)

visreg(model
       , "value1" # Variable to plot
       , cond = list(value2 = 0, value3 = 0, sex = "Female") # Values of the other variables in the model
       , gg = TRUE # Use ggplot2 for plotting?
)

固定效应图

这些点显示部分残差。如果将选项设置ggTRUE,ggplot2则用于绘图,否则以 R 为基数。

默认情况下,模型中其他变量的值分别设置为连续变量和分类变量的中位数或众数。使用参数cond,您可以将变量的值设置为任意值。

使用ggeffects

该软件包ggeffects还能够绘制边际效应。它能够将随机效应的方差考虑在内(但这不适用于这些人工数据)。

这是一个例子:

library(ggplot2)
library(lme4)
library(ggeffects)

set.seed(142857)
groups <- floor(runif(1000, min=1, max=7))
sex <- rep(c("Male", "Female"), times= 500)
value1 <- runif(1000, min=1, max=10)
value2 <- runif(1000, min=1, max=100)
value3 <- runif(1000, min=1, max=200)
response <- runif(1000, min=1, max=100)

df <- data.frame(groups, sex, response, value1, value2, value3)

model <- lmer(scale(response) ~ scale(value1) + scale(value2) + scale(value3) + factor(sex) + (1|groups), data=df)

pr <- ggpredict(model, "value1")

plot(pr)

gg效果图