Я хочу извлечь значения коэффициентов моей скрытой переменной уровня 2 в многоуровневой SEM только для перехвата в lavaan, используя lavPredict. Согласно документации, это выглядит так, как будто это возможно при использовании опции 'level' (https://rdrr.io/cran/lavaan/man/lavPredict.html).
Для контекста я экспериментирую с идеей использования коэффициентов для скрытой переменной уровня 2 для использования во взаимодействии во второй модели. Насколько я знаю, взаимодействия с скрытыми переменными в lavaan невозможны, и реализация в Mplus также неудовлетворительна (не может указать корреляции между переменными взаимодействия). Поскольку скрытая переменная - это только дисперсия y, я думал, что идея использования коэффициентов не будет такой уж проблемной c.
Вот рабочий пример:
library( lavaan)
# Sample parameters
n <- 10
t <- 5
# Individual-specific effect
a <- rnorm( n, 0, 1)
a <- rep( a, each = t)
# Idiosyncratic error
e <- rnorm( n*t, 0, 1)
# Observed variable is person-mean (individual-effect) plus time-specific error
y <- 1*a + e
# Id and time columns
id <- rep( seq( 1, n, 1), each = t)
time <- rep( seq( 1, t), n)
# Pack it all together in df
df_temp <- data.frame( id, time, a, e, y)
# Run lavaan model - this should just decompose observed
# variable into between- and within-person variance components
mx <- '
level: 1
y ~ 1
level: 2
a =~ y
'
mx.fit <- sem( mx, data = df_temp, cluster = "id")
summary( mx.fit)
lavPredict( mx.fit, level = 2L)
Это дает мне ошибку:
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extent
Я попытался указать дополнительные параметры ( сборка, метод, тип и т. д. c.) но пока безуспешно.
Альтернативный метод - указать модель с широкоформатными данными, как описано в Bollen & Brand (2010) (https://academic.oup.com/sf/article/89/1/1/2235097). Кажется, это работает, но это дает мне запутанные результаты. Вот почему я пытаюсь сравнить два подхода.
# Bollen & Brand method with wide-format data
# Reshape from long to wide
df_temp_wide <- dcast( df_temp, id ~ time, value.var = "y")
# Rename columns
names( df_temp_wide) <- c( "id", paste0( rep( "y", t), seq( 1, t, 1)))
# Run alternative method intercept-only model
mx2 <- '
a =~ 1*y1 + 1*y2 + 1*y3 + 1*y4 + 1*y5
'
mx2.fit <- sem( mx2, data = df_temp_wide)
summary( mx2.fit)
# Here, lavPredict works at least
lavPredict( mx2.fit)
Есть ли у кого-нибудь опыт прогнозирования коэффициентов для скрытой переменной уровня 2 таким образом? Или, может быть, кто-то сталкивался с этим сообщением об ошибке и знает, на что оно ссылается?
В целом, если у кого-то есть совет относительно наилучшего способа определения взаимодействия между наблюдаемой переменной и меж-дисперсией моей зависимой переменной (в SEM), это также было бы здорово.