【发布时间】:2020-12-04 19:37:00
【问题描述】:
我正在尝试使用 ggeffects 包绘制模型效果。通常这没有问题。但是,我有一个模型,其中二次项和一阶项之间存在交互作用(例如:var_a^2:var_b)。在我的实际模型中,有两个二次项,一个涉及与第三项的交互。下面的示例显示了两个变量的问题,以使示例尽可能简单。
如果我按如下方式使用 poly() 函数,一切正常;该模型工作正常,我可以绘制模型效果。但是,我希望能够从模型中删除他的 var_a^2:var_b 交互。
# Create a data frame with explanatory variables
dat <- expand.grid(var_a = c(-1, 0, 1),
var_b = c(-1, 0, 1))
# Replicate so there plenty of data points for modelling
dat <- bind_rows(dat, dat)
# Create response value
dat$resp <- dat$var_a + 4 * dat$var_a^2 + dat$var_a * dat$var_b + rnorm(nrow(dat), 0, 0.2)
mod1 <- lm(resp ~ poly(var_a, 2) * var_b, data = dat)
summary(mod1)
plot(ggeffect(mod1, c('var_a', 'var_b')))
plot(ggeffect(mod1, c('var_b')))
这是一个单独的效果图 var_b。我通常不会在没有 var_a 的情况下绘制 var_b ,因为它们涉及交互,但这只是为了说明我的问题。它在这里有效,但不在下面。
如上所述,我想删除 var_a^2:var_b 交互。据我所知,为此我需要将一阶和二阶 poly() 项分开,如下所示。
# This is the same as mod 1 without the var_a^2:var_b interaction
# I've split up the poly() terms so I can remove any unwanted terms
mod2 <- lm(resp ~ poly(var_a, 1) * var_b + poly(var_a, 2)[, 2], data = dat)
summary(mod2)
我可以绘制 var_a:var_b 效果并得到与上面基本相同的结果。
plot(ggeffect(mod2, c('var_a', 'var_b')))
但我不能再单独绘制 var_b 效果了。
plot(ggeffect(mod2, 'var_b'))
对于它的价值,我相信 ggeffect() 函数不起作用,因为它所依赖的效果包将除正在绘制的变量 (var_b) 之外的所有变量设置为一个常量值,该值不允许二次效应var_a 进行计算。
有没有一种方法可以使用 poly() 函数,使我能够从模型中删除不需要的交互,同时仍然能够使用 ggeffect() 来绘制模型效果?
我尝试在这个问题中添加 ggeffects 和 effects 标签,但没有足够的分数来创建新标签。如果有人想这样做,请这样做。
【问题讨论】: