我正在估计一个已观察到变量的 SEM 模型。我正在使用 SEM 来使用 FIML 处理缺失数据。我的模型有一个交互项来测试适度性。这是一个说明问题的玩具示例。
library(lavaan)
library(car)
library(dplyr)
data(starwars)
sw2 <- starwars %>% mutate(
male = Recode(sex, "'male' = 1; NA=NA; else = 0"),
human = Recode(species, "'Human' = 1; NA=NA; else = 0"),
maleXby = male * birth_year,
)
mod <- 'mass ~ height + human + male + birth_year + maleXby'
fit <- sem(mod, data = sw2, missing="fiml.x")
summary(fit)
我想要做的是像边际图一样绘制交互项,以可视化交互效果。但是像库(交互)这样的包不适用于类的对象lavaan
。我怎样才能想象这个?有没有一个包(比如interactions
)这使得这变得更容易。
你可以使用这个模型来拟合lm()
,但我认为您希望能够使用 FIML 估算,是吗?在这种情况下,您可以使用emmeans
包,可以工作lavaan
-class 对象,如果你有semTools
包已加载。
你没有说哪个预测变量是焦点变量还是调节变量,但我假设你想治疗male
作为调节器,因为它是一个分组变量。下面的例子可以通过切换他们的角色来修改pairs()
功能,以及通过选择不同birth_year
levels at=
来探究其效果male
. When birth_year
是焦点预测器,无论选择哪个级别,其线性效果都是相同的,所以我选择了完整的range()
below.
library(emmeans)
library(semTools)
## for ease of use, fit model using colon operator
mod <- 'mass ~ height + human + male + birth_year + male:birth_year'
fit <- sem(mod, data = sw2, missing = "fiml.x")
## calculate expected marginal means for multiple
## levels of male (1:0) and birth_year
BYrange <- range(sw2$birth_year, na.rm = TRUE)
em.mass <- emmeans(fit, specs = ~ birth_year | male,
at = list(male = 1:0, birth_year = BYrange),
# because SEMs can have multiple DVs:
lavaan.DV = "mass")
em.mass
## probe effect of year across sex
rbind(pairs(em.mass))
## plot effect of year across sex
emmip(em.mass, male ~ birth_year) # 2 lines in same plot
emmip(em.mass, ~ birth_year | male) # in separate panels
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)