我正在 R 中拟合一个混合模型,其交互项如下:
model <- lmer(y ~ x * z + (1|h), data = df)
。 y
和 x
是连续变量,z
是分类变量,h
是随机效应。
数据:
n <- 50
df <- tibble::tibble(
x = rnorm(n),
z = sample(-1:1, n, replace = TRUE),
h = sample(1:3, n, replace=TRUE), # random effect
y = z*(0.5*x) + rnorm(n,0,0.2))
df$z <- as.factor(df$z)
df$h <- as.factor(df$h)
然后,我使用
plot_predictions()
包中的 marginaleffects
函数,然后使用 facet_wrap(~ z)
中的 ggplot2
分别可视化不同类别的每个回归,如下所示:
plot_predictions(model, condition = c("x","z"), vcov = T, points= 0.3) + facet_wrap(~ z)
您可以注意到,第一张图和第二张图根据第三张图的数据点限制推断出其数据范围之外的回归线。
所以,我尝试通过添加
newdata = df
来控制这个:
plot_predictions(model, new data = df, by = c("x","z"), vcov = T, points= 0.3) + facet_wrap(~ z)
但是,现在我有一个新问题;我失去了线性效果,它看起来像一条破坏性的非连续线。有趣的是,只有当我拟合具有随机效应的混合模型(即 glmm、hgam)时才会发生这种情况,但简单的线性模型并非如此。
知道如何防止这种情况发生,将回归线 (+- CI) 限制在每个面板的数据点范围内并保持线性模型线吗?
使用最新版本的
marginaleffects
,下面的代码似乎可以按预期工作。
(PS:下次,如果你写了一个完整的可复制示例,其中包含库和我们可以剪切和粘贴的连续代码块,那么对于试图给出答案的人来说会很方便。)
library(lme4)
library(ggplot2)
library(marginaleffects)
n <- 50
df <- tibble::tibble(
x = rnorm(n),
z = sample(-1:1, n, replace = TRUE),
h = sample(1:3, n, replace=TRUE), # random effect
y = z*(0.5*x) + rnorm(n,0,0.2))
df$z <- as.factor(df$z)
df$h <- as.factor(df$h)
model <- lmer(y ~ x * z + (1|h), data = df)
plot_predictions(model, newdata = df, by = c("x","z"), vcov = TRUE, points= 0.3) +
facet_wrap(~ z, scales = "free")