如何在 lavaan 中执行最简单的审核并衡量其对其他变量的影响?
How to perform simplest Moderation in lavaan and measuring its effect to other vars?
如何在 lavaan 中执行最简单的审核并衡量其对其他变量的影响?
您在 r 和 lavaan 中有一个模型 - 如何添加调节项?:
- 是否通过添加 ~b + c 使“c”成为主持人术语?
- 交互项和适度有什么区别?
- lavaan project 没有提供这样的例子,许多人提出类似的问题但没有正确明确的答案。
我在网上找不到明确的答案,就简单的单词和例子而言。
model_sem <-
'
a=~ x1 + x2
b=~ z1 + z2
a ~ b
'
Moderation = 测试交互项是否重要(在 Lavaan 中)。除了一些例外,这个简单的事情并没有那么清楚地写到网络上。 see here
当你有两个观察变量(那些包含数据的变量)时,事情就很简单了
假设你有
X 回归到 (->) Y (X~Y) 和
M = 调节变量
注意:带有交互项的简单 lm 语法也是有效的。
例如
summary( lm( Y ~ X + X*Y ) )
library(psych)
library(dplyr)
library(lavaan)
library(semTools)
# Note that Centering variables is essential
# Creating interaction term prior of sem running
myData <- myData %>% mutate(Χ_x_Μ = myData$X * myData$M)
moderation_model <- '
# Hayes Process model 1
# regressions
Y ~ b1*X
Y ~ b2*M
Y ~ b3*Χ_x_Μ
# define mean parameter label for centered math for use in simple slopes
M ~ M.mean*1
# define variance parameter label for centered math for use in simple slopes
M ~~ M.var*M
# simple slopes for condition effect
SD.below := b1 + b3*(M.mean - sqrt(M.var))
mean := b1 + b3*(M.mean)
SD.above := b1 + b3*(M.mean + sqrt(M.var))
'
model <- moderation_model
sem_fit <- lavaan::sem( model, std.lv = TRUE, data = myData, fixed.x = FALSE )
summary( sem_fit, standardized = TRUE, rsquare = TRUE )
standardizedSolution( sem_fit, type = "std.all" )
但是,当您愿意时,事情可能会变得很奇怪
交互一阶甚至二阶潜在变量
(ps。在某些情况下是因素)。
因为,Lavaan 不支持这个,很简单。
Steps:
# Create observed Factors by using their items
df$x1_o = (df$f11 + df$f12 + df$f13 ) /3
df$x2_o = (df$f21 + df$f22 + df$f33 ) /3
df$M_o = (df$m1 + df$m2 + df$m3 ) /3
df$Y_o = (df$y1 + df$y2 ) /3
df$X_o = (df$x1_o + df$x2_o ) /3
# Mean Center all your SEM variables
cn = colnames( df )
df_center = df - data.frame( matrix( rep( colMeans( df ), nrow( df ) ), ncol = ncol( df ), byrow = T)) # mean centering
colnames( df_center ) = cn
# Make to interact each item of Moderator (M) with the X Variable to test its effect on the Y variable
prod = df_center$x1_o * df_center$m1; df_center$prod11 = prod - mean(prod)
prod = df_center$x1_o * df_center$m2; df_center$prod12 = prod - mean(prod)
prod = df_center$x1_o * df_center$m3; df_center$prod13 = prod - mean(prod)
prod = df_center$x2_o * df_center$m1; df_center$prod11 = prod - mean(prod)
prod = df_center$x2_o * df_center$m2; df_center$prod12 = prod - mean(prod)
prod = df_center$x2_o * df_center$m3; df_center$prod13 = prod - mean(prod)
head(df_center, 2)
# Make your Lavaan moderated model
# Note that in defining mean and variance of (M) Moderator,
# we used the observed factored Moderator (M_o)
# and not the Latent (without values) construct (M).
# This happened cause Lavaan was saying that M.var has no free parameters.
# So, I did that. If you think something else, please make a comment or a
# post.
moderation_model <-
'
x1 = f11 + f12 + 13
x2 = f21 + f22 + f33
M = m1 + m2 + m3
Y = y1 + y2
X = x1 + x2
INT =~ prod11 + prod12 + prod13 + prod21 + prod22 + prod23
Y ~ b1 * X
Y ~ b2 * M
Y ~ b3 * INT
# define mean parameter label for centered math for use in simple slopes
M_o ~ M_o.mean*1
# define variance parameter label for centered math for use in simple slopes
M_o ~~ M_o.var*M_o
# simple slopes for condition effect
SD.below := b1 + b3*(M_o.mean - sqrt(M_o.var))
mean := b1 + b3*(M_o.mean)
SD.above := b1 + b3*(M_o.mean + sqrt(M_o.var))
'
# ps. If Lavaan says that there is non-definite matrix cause is negative,
# please, remove some items from the relevant variable from moderation model.
# Check if lavaan sem can run it:
model <- moderation_model
sem_fit <- lavaan::sem( model, std.lv = TRUE, data = df_center, fixed.x = FALSE )
summary( sem_fit, standardized = TRUE, rsquare = TRUE )
standardizedSolution( sem_fit, type = "std.all" )
如何在 lavaan 中执行最简单的审核并衡量其对其他变量的影响?
您在 r 和 lavaan 中有一个模型 - 如何添加调节项?:
- 是否通过添加 ~b + c 使“c”成为主持人术语?
- 交互项和适度有什么区别?
- lavaan project 没有提供这样的例子,许多人提出类似的问题但没有正确明确的答案。
我在网上找不到明确的答案,就简单的单词和例子而言。
model_sem <-
'
a=~ x1 + x2
b=~ z1 + z2
a ~ b
'
Moderation = 测试交互项是否重要(在 Lavaan 中)。除了一些例外,这个简单的事情并没有那么清楚地写到网络上。 see here
当你有两个观察变量(那些包含数据的变量)时,事情就很简单了
假设你有 X 回归到 (->) Y (X~Y) 和 M = 调节变量
注意:带有交互项的简单 lm 语法也是有效的。 例如
summary( lm( Y ~ X + X*Y ) )
library(psych)
library(dplyr)
library(lavaan)
library(semTools)
# Note that Centering variables is essential
# Creating interaction term prior of sem running
myData <- myData %>% mutate(Χ_x_Μ = myData$X * myData$M)
moderation_model <- '
# Hayes Process model 1
# regressions
Y ~ b1*X
Y ~ b2*M
Y ~ b3*Χ_x_Μ
# define mean parameter label for centered math for use in simple slopes
M ~ M.mean*1
# define variance parameter label for centered math for use in simple slopes
M ~~ M.var*M
# simple slopes for condition effect
SD.below := b1 + b3*(M.mean - sqrt(M.var))
mean := b1 + b3*(M.mean)
SD.above := b1 + b3*(M.mean + sqrt(M.var))
'
model <- moderation_model
sem_fit <- lavaan::sem( model, std.lv = TRUE, data = myData, fixed.x = FALSE )
summary( sem_fit, standardized = TRUE, rsquare = TRUE )
standardizedSolution( sem_fit, type = "std.all" )
但是,当您愿意时,事情可能会变得很奇怪 交互一阶甚至二阶潜在变量 (ps。在某些情况下是因素)。 因为,Lavaan 不支持这个,很简单。
Steps:
# Create observed Factors by using their items
df$x1_o = (df$f11 + df$f12 + df$f13 ) /3
df$x2_o = (df$f21 + df$f22 + df$f33 ) /3
df$M_o = (df$m1 + df$m2 + df$m3 ) /3
df$Y_o = (df$y1 + df$y2 ) /3
df$X_o = (df$x1_o + df$x2_o ) /3
# Mean Center all your SEM variables
cn = colnames( df )
df_center = df - data.frame( matrix( rep( colMeans( df ), nrow( df ) ), ncol = ncol( df ), byrow = T)) # mean centering
colnames( df_center ) = cn
# Make to interact each item of Moderator (M) with the X Variable to test its effect on the Y variable
prod = df_center$x1_o * df_center$m1; df_center$prod11 = prod - mean(prod)
prod = df_center$x1_o * df_center$m2; df_center$prod12 = prod - mean(prod)
prod = df_center$x1_o * df_center$m3; df_center$prod13 = prod - mean(prod)
prod = df_center$x2_o * df_center$m1; df_center$prod11 = prod - mean(prod)
prod = df_center$x2_o * df_center$m2; df_center$prod12 = prod - mean(prod)
prod = df_center$x2_o * df_center$m3; df_center$prod13 = prod - mean(prod)
head(df_center, 2)
# Make your Lavaan moderated model
# Note that in defining mean and variance of (M) Moderator,
# we used the observed factored Moderator (M_o)
# and not the Latent (without values) construct (M).
# This happened cause Lavaan was saying that M.var has no free parameters.
# So, I did that. If you think something else, please make a comment or a
# post.
moderation_model <-
'
x1 = f11 + f12 + 13
x2 = f21 + f22 + f33
M = m1 + m2 + m3
Y = y1 + y2
X = x1 + x2
INT =~ prod11 + prod12 + prod13 + prod21 + prod22 + prod23
Y ~ b1 * X
Y ~ b2 * M
Y ~ b3 * INT
# define mean parameter label for centered math for use in simple slopes
M_o ~ M_o.mean*1
# define variance parameter label for centered math for use in simple slopes
M_o ~~ M_o.var*M_o
# simple slopes for condition effect
SD.below := b1 + b3*(M_o.mean - sqrt(M_o.var))
mean := b1 + b3*(M_o.mean)
SD.above := b1 + b3*(M_o.mean + sqrt(M_o.var))
'
# ps. If Lavaan says that there is non-definite matrix cause is negative,
# please, remove some items from the relevant variable from moderation model.
# Check if lavaan sem can run it:
model <- moderation_model
sem_fit <- lavaan::sem( model, std.lv = TRUE, data = df_center, fixed.x = FALSE )
summary( sem_fit, standardized = TRUE, rsquare = TRUE )
standardizedSolution( sem_fit, type = "std.all" )