Идентификация модели в лаване для R

Я пытаюсь выполнить анализ скрытых переменных, используя пакет lavaan для R. Однако я получаю следующие сообщения об ошибках:

Предупреждающие сообщения: 1: В lav_data_full (data = data, group = group, cluster = cluster,: lavaan ПРЕДУПРЕЖДЕНИЕ: некоторые наблюдаемые отклонения (по крайней мере) в 1000 раз больше, чем другие; используйте varTable (fit) для исследования 2: В lav_model_vcov (lavmodel = lavmodel, lavsamplestats = lavsamplestats,: lavaan ПРЕДУПРЕЖДЕНИЕ: не удалось вычислить стандартные ошибки! lavaan ПРИМЕЧАНИЕ: это может быть признаком того, что модель не идентифицирована. 3: В lav_object_post_check (object): lavaan WARNING: некоторые предполагаемые вариации ov отрицательны 4: В lav_object_post_check (object):
lavaan ВНИМАНИЕ: некоторые предполагаемые отклонения уровней отрицательны

Моя модель построена следующим образом:

введите здесь описание изображения

model <- "
        # regressions
        eigenvector.frug ~ Size + Morphology

        # latent variables
        Size =~ Mass + Forearm
        Morphology =~ LMT + BUM

        # covariances and variances
        Mass ~~ Forearm
        LMT ~~ BUM
        Mass ~~ Mass
        Forearm ~~ Forearm
        LMT ~~ LMT
        BUM ~~ BUM
        "

Код, который я использую:

fit <- sem(model, data=data,
           orthogonal=TRUE)

И я получаю следующее резюме:

lavaan (0.5-23.1097) converged normally after 141 iterations

  Number of observations                            41

  Estimator                                         ML
  Minimum Function Test Statistic               88.676
  Degrees of freedom                                 2
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Information                                 Expected
  Standard Errors                             Standard

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  Size =~                                             
    Mass              1.000                           
    Forearm           4.941       NA                  
  Morphology =~                                       
    LMT               1.000                           
    BUM               1.349       NA                  

Regressions:
                     Estimate  Std.Err  z-value  P(>|z|)
  eigenvector.frug ~                                    
    Size               -0.000       NA                  
    Morphology         -2.774       NA                  

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
 .Mass ~~                                             
   .Forearm          59.805       NA                  
 .LMT ~~                                              
   .BUM               2.926       NA                  
  Size ~~                                             
    Morphology        0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .Mass            272.184       NA                  
   .Forearm        -518.752       NA                  
   .LMT               3.283       NA                  
   .BUM               5.871       NA                  
   .eigenvectr.frg    0.344       NA                  
    Size             26.894       NA                  
    Morphology       -0.038       NA    

Поскольку данные различаются в разных масштабах, я попытался нормализовать все переменные с помощью функции масштабирования и снова запустить модель.

data2 = scale(data)

Затем я получил следующие сообщения об ошибках:

Предупреждающее сообщение: В lav_model_vcov (lavmodel = lavmodel, lavsamplestats = lavsamplestats,: lavaan ВНИМАНИЕ: не удалось вычислить стандартные ошибки! Lavaan ПРИМЕЧАНИЕ: это может быть признаком того, что модель не идентифицирована.

И следующее резюме:

lavaan (0.5-23.1097) converged normally after  69 iterations

  Number of observations                            41

  Estimator                                         ML
  Minimum Function Test Statistic               87.973
  Degrees of freedom                                 2
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Information                                 Expected
  Standard Errors                             Standard

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  Size =~                                             
    Mass              1.000                           
    Forearm           0.940       NA                  
  Morphology =~                                       
    LMT               1.000                           
    BUM               0.181       NA                  

Regressions:
                     Estimate  Std.Err  z-value  P(>|z|)
  eigenvector.frug ~                                    
    Size                0.536       NA                  
    Morphology         -0.042       NA                  

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
 .Mass ~~                                             
   .Forearm           0.389       NA                  
 .LMT ~~                                              
   .BUM               0.541       NA                  
  Size ~~                                             
    Morphology        0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .Mass              0.404       NA                  
   .Forearm           0.471       NA                  
   .LMT               0.394       NA                  
   .BUM               0.957       NA                  
   .eigenvectr.frg    0.819       NA                  
    Size              0.571       NA                  
    Morphology        0.581       NA         

Не могли бы вы помочь мне понять, что случилось? Большое тебе спасибо.


person Marco    schedule 22.05.2017    source источник
comment
Обратите внимание, что Предупреждение! = Ошибка. В некоторых случаях предупреждения можно игнорировать, если вы знаете, что делаете (у меня нет опыта использования техник, которые вы используете).   -  person patrick    schedule 22.05.2017
comment
В этом случае вы не можете игнорировать это предупреждение, поскольку стандартные ошибки не могут быть вычислены.   -  person Mark White    schedule 22.05.2017


Ответы (1)


Я считаю, что проблема заключается в коррелированных остатках между индикаторами одной конструкции. Вы пытаетесь объяснить взаимосвязь между индикаторами в одной конструкции избыточными способами.

Например, скрытая конструкция «размер» может объяснить взаимосвязь между индикаторными переменными «масса» и «предплечье». Остатки там будут концептуализированы как дисперсия индикатора, которая не объясняется скрытой конструкцией.

Но тогда вы позволяете остаткам коррелировать, что моделирует общую дисперсию между «массой» и «предплечьями», которая не объясняется скрытым фактором.

Проблема заключается в том, что ваша скрытая конструкция состоит только из этих двух переменных. По сути, вы говорите lavaan: «Смоделируйте дисперсию между этими двумя индикаторами как скрытую конструкцию ... Нет, подождите! Также моделируйте эту же дисперсию как остаток!» Итак, lavaan в основном говорит вам: «Это не имеет смысла, я не могу этого сделать!» Я бы попробовал этот код:

model2 <- "
        # regressions
        eigenvector.frug ~ Size + Morphology

        # latent variables
        Size =~ Mass + Forearm
        Morphology =~ LMT + BUM

        # covariances and variances
        Mass ~~ Mass
        Forearm ~~ Forearm
        LMT ~~ LMT
        BUM ~~ BUM
        "

Этот код неявно фиксирует остаточные ковариации до нуля.

Еще одна проблема, с которой вы можете столкнуться, заключается в том, что каждая подмодель не идентифицирована. Для каждой скрытой переменной вы пытаетесь оценить скрытую конструкцию из 2 индикаторов, которые не идентифицированы (т. Е. У вас есть 3 элемента, связанных с дисперсией, с которыми нужно работать, но вы оцениваете 2 остатка, нагрузку и скрытую дисперсию) . Чтобы обойти это, вы можете ограничить нагрузки для каждого скрытого фактора, чтобы они были эквивалентны друг другу. мы можем сделать это, присвоив факторным нагрузкам одинаковые метки (здесь «a» и «b» для каждого фактора).

model3 <- "
        # regressions
        eigenvector.frug ~ Size + Morphology

        # latent variables
        Size =~ a*Mass + a*Forearm
        Morphology =~ b*LMT + b*BUM

        # covariances and variances
        Mass ~~ Mass
        Forearm ~~ Forearm
        LMT ~~ LMT
        BUM ~~ BUM
        "
person Mark White    schedule 22.05.2017
comment
Дорогой Марк, большое спасибо! Мне нужно изучить эту тему дальше, и я уже заказал две книги по анализу скрытых переменных. Я провел здесь тест. Ваша модель3 работает без проблем, так как предупреждающие сообщения не отображаются. Однако ваша модель2 получает одно предупреждающее сообщение: Предупреждение: В lav_object_post_check (object): lavaan ПРЕДУПРЕЖДЕНИЕ: некоторые предполагаемые отклонения ov отрицательны. Как вы упомянули, это связано с подрежимами? Кроме того, в model3 Std.Err, z-value и P (›| z |) не вычисляются для скрытых переменных. Это нормально? - person Marco; 23.05.2017
comment
Да, это может быть потому, что - хотя вся модель идентифицирована в model2 - подмодели (если вы посмотрите на скрытые факторы как на модели сами по себе) не идентифицированы. Модель3 кажется мне разумным выбором. - person Mark White; 23.05.2017
comment
Спасибо! Я изучу больше об этом виде анализа. Мне нужно узнать об этом. - person Marco; 23.05.2017
comment
В последний раз я использовал SEM 16 лет назад, чтобы выполнить простой анализ пути с расчетами вручную. Впечатляет, как с тех пор двигалась аналитика. - person Marco; 23.05.2017
comment
Уважаемый Марк, мне нужно добавить одну дополнительную переменную к модели3, предложенной вами выше. Однако у него есть только один индикатор. Как мне это закодировать? Скрытая переменная будет называться Geog, а индикатор - диапазоном. Спасибо! - person Marco; 09.04.2018
comment
@Marco вы не можете сделать скрытую переменную из одного индикатора. Вы можете просто использовать имя столбца в коде, как скрытую переменную. Это будет всего лишь одна индикаторная переменная, работающая с несколькими скрытыми переменными. - person Mark White; 09.04.2018
comment
modelfrug ‹- # regressions eigenvector.frug ~ Size + Bite + Skull + range # скрытые переменные Size = ~ a Mass + a Прикус предплечья = ~ b LMT + b BUM + b MaxBitFor Skull = ~ c BOB + c * GLSBOB # ковариации и вариации Масса ~~ Масса предплечья ~~ Предплечье LMT ~~ LMT BUM ~~ BUM BOB ~~ BOB GLSBOB ~~ GLSBOB MaxBitFor ~~ MaxBitFor диапазон ~~ диапазон - person Marco; 09.04.2018
comment
Я очень благодарен. Как мне отметить вас в моей статье? - person Marco; 09.04.2018
comment
Обычно я просто говорю спасибо сообществу StackOverflow (или CrossValidated, как это часто бывает в моем случае) в своих признаниях. - person Mark White; 09.04.2018
comment
Я сделаю это! Спасибо. - person Marco; 09.04.2018
comment
Между прочим, когда я запускаю обновленную модель и рисую диаграмму пути, единственный индикатор (rng) рисуется, связанный с последней скрытой переменной (Skl), независимо от того, где я помещаю его в уравнение. Есть ли способ нарисовать его напрямую связанным с переменной ответа? - person Marco; 09.04.2018