баллы по фактору лавы для многоуровневой модели перехвата SEM - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу извлечь значения коэффициентов моей скрытой переменной уровня 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), это также было бы здорово.

...