如何防止R外推数据点范围之外的回归线?[已关闭]

hgb9j2n6  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(106)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
13天前关闭
Improve this question
我在R中拟合一个线性混合模型,其中交互作用项如下:model <- lmer(y ~ x * z + (1|h), data = df). yx是连续变量,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)

然后,我使用marginaleffects包中的plot_predictions()函数,然后使用ggplot2中的facet_wrap(~ z)来分别可视化不同类别的每个回归,如下所示:

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)

但是,现在我有一个新问题,我失去了线性效果,它看起来像一个破坏性的非连续线。有趣的是,只有当我拟合具有随机效应的混合模型时,才会发生这种情况,但对于简单的线性模型,情况并非如此。
有什么办法可以防止这种情况发生,将我的回归线(+-CI)限制在每个面板的数据点范围内,并保持线性模型线?

0x6upsns

0x6upsns1#

问题似乎是,当你使用condition时,生成的预测值网格将包括完整range(x)x的每个值,而不管x的值是否存在于任何给定的z中。
一个简单的方法是使用原始点作为newdata

library(marginaleffects)
library(ggplot2)

# Dummy data
n <- 50
df <- tibble::tibble(
  x = rnorm(n),
  z = sample(-1:1, n, replace = TRUE),
  y = z*(0.5*x) + rnorm(n,0,0.2))
df$z <- as.factor(df$z)

model <- lm(y ~ x * z, data = df)

# Original:
plot_predictions(model, points = 1, condition = c("x","z")) + facet_wrap(~ z)

# Suggested:
plot_predictions(model, points = 1, newdata = df, by = c("x","z")) + facet_wrap(~ z)

相关问题