R Lavaan 编码潜变量交互

6
有人能够向我展示如何在lavaan软件包的模型语句中编码潜变量交互吗?
假设我有一个潜变量L1和一些观察变量F1,并想要编码它们对某个结果Y的交互效应:
L1 =~ x1 + x2

Y ~ L1 * F1 

这个不起作用。
提前感谢!

1
我认为你在cross-validated上可能会得到更好的回应,因为这与统计学更相关。 - user20650
1个回答

6
感谢John Madden的重要评论,我将区分调节(您可能正在寻找的内容)和调解。

调节(变量值的交互作用)

对于您的问题,简单的答案是:据我所知,没有lavaan集成的可能性来执行两个潜在变量的交互作用,但这是我的一个解决方法:

  1. 定义潜在变量(CFA)
  2. 提取预测值,将其添加到数据框中并定义交互变量
  3. 进行您想要的回归(使用或不使用潜在变量本身)

这是一些玩具代码的解决方法 - 调节与此数据(mtcars,它在R基础中)无关并且会给出警告,但工作流程的结构应该很清楚。

library(lavaan)

# 1. set up your measurement models
cfamodel <- "
    #defining the latent variables
    L1 =~ drat + wt
    L2 =~ disp + hp
"
fitcfa <- cfa(data = mtcars, model = cfamodel)

# 2. extract the predicted values of the cfa and add them to the dataframe
semdata <- data.frame(mtcars, predict(fitcfa))

# create a new variable with the interaction of L1 and L2
semdata <- semdata %>%
              mutate(L1L2 = L1 * L2)

# 3. now set up the regression and add the predefined interaction to the model
# a) regression with both latent variables and the interaction
semmodel1 <- "
    # define regression
    mpg ~ L1 + L2 + L1L2
"
fitsem1 <- sem(data = semdata, model = semmodel1)
summary(fitsem1)

# b) regression with only the interaction (does that even make sense? I don't know...)
semmodel2 <- "
    # define regression
    mpg ~ L1L2
"
fitsem2 <- sem(data = semdata, model = semmodel2)
summary(fitsem2)

中介效应(权重的交互作用)

在中介效应中,您需要定义一个新参数,该参数是感兴趣的两个回归权重的乘积。以您的示例为例,L1 为潜在变量,F1 为观察变量,Y为因变量,则此参数为:

# define Regressions (direct effect)
Y ~ lambda1*X
Y ~ lambda2*M

# define Regressions (effect on mediator)
M ~ X

# define Interaction
interac := lambda1*lambda2

fit <- sem(model, data = Data)
summary(fit)
lavaan将为您提供交互作用的估计值。 :=运算符“定义新参数,这些参数的值是原始模型参数的任意函数。”示例来自:http://lavaan.ugent.be/tutorial/mediation.html

2
我看不到你的回应中有交互项。你所提供的例子是一个调节效应的例子,而OP要求的是交互作用,也就是在心理学领域中所称的调节效应。据我所知,lavaan目前还不支持这种分析。 - John Madden
1
@blazej 很好的问题。我想我从来没有读过关于调节中介的内容。你能画出模型的路径吗?我无法想象调节和中介在哪里发挥作用。 - j_5chneider
1
@blazej 很好,谢谢。你链接中的示例是一个清单模型。我为您准备了一个使用 R 基础集成的 mtcars 数据的示例,因此您也可以运行它:model <- " # 依赖变量路径 mpg ~ lambda1*cyl + lambda2*disp + drat + disp:drat # 中介变量路径 disp ~ cyl # 定义中介:权重交互作用 interac := lambda1*lambda2 " fit <- sem(model, data = mtcars) summary(fit) - j_5chneider
1
@blazej 如果你的一个参与调节的变量被建模为潜在变量,那么你需要事先定义它们,并像上面的调节示例中提取预测值,然后将交互变量插入模型中。我无法在注释中插入换行符,所以你需要在复制代码后进行换行。将我上一条评论中的示例与你从网站中得到的示例相关联:mpg = Y,cyl = X,disp = M,drat = V,disp:drat = MV(调节),interac = 间接效应(中介) - j_5chneider
1
哇!看起来确实很棒。不知道为什么这在lavaan材料中没有被描述?如果您愿意完整地描述这个例子,我可能会将其作为一个单独的问题提出来。 - blazej
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接