28 Конфирматорный факторный анализ

28.1 Экспресс-введение в структурное моделирование

Вспомним, кто мы… Мы же с вами исследователи из области социальных и/или гуманитарных наук. А чем мы богаты? Теоретическими моделями, на которых мы основываем наши исследования! А какая теоретическая модель хороша? Та, которая получила эмпирическое подтверждение!1

А как это?…

В предыдущей главе мы научились искать, факторы, скрытые за наблюдаемыми переменными — это уже большой шаг. Однако недостаточный. И главное ограничение PCA и EFA — это то, что мы ищем независимые факторы/главные компоненты, в то время как структура взаимосвязей между латентными переменными может быть гораздо сложнее. Кроме того, эти скрытые переменные могут предсказывать другие наблюдаемые переменные: например, уровень вовлеченности сотрудников [возможно] будет предсказывать выполнение KPI, что в свою очередь предсказывает заработную плату. То есть в данным случае мы движемся не от наблюдаемых переменных к латентным, а в обратном направлении. А ведь влияние одних латентных конструктов могут быть опосредованы другими… И в итоге получается что-то такое:

Короче, модель может быть сколь угодно сложна — и надо её каким-то образом эмпирически проверять. Это позволяют делать методы структурного моделирования (structural equation modelling, SEM).

Что это за методы? Это группа методов, которые проверять модели (гипотезы), описывающие наши данные. Проверка состоит из двух больших шагов:

  • задание теоретической модели генерации данных;
  • проверка того, насколько предложенная модель хорошо подходит под наши данные.

Но, если вдуматься, то так работают все статистические методы — даже в линейной регрессии мы сначала задаём линейную модель, а потом проверяем, насколько хорошо она описывает взаимосвязи, представленные в данных. В чем же особенность SEM?

Во-первых, в модель включаются латентные переменные — мы получаем возможность их моделировать и использовать для предсказаний. Этого не может делать, например, хорошо знакомая нам линейная регрессия, так как она работает только с наблюдаемыми переменными.

Во-вторых, в модель могут быть включены косвенные связи — связи между латентными переменными. То есть мы можем моделировать связи между переменными, которые мы даже не можем измерить! Ну, круто же!

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

28.1.1 Сколько нужно данных?

Есть мнение, что «структурное моделирование требует большого количества данных». Не очень понятно, что считать большим количеством, однако эвристика следующая: на один оцениваемый параметр нужно не менее 10 наблюдений. Выглядит как что-то приемлемое.

28.2 Модель конфирматорного факторного анализа

Окей, мы брифли взглянули на то, что такое структурное моделирование. Если мы возьмем от него только часть, то получим конфирматорный факторый анализ (confirmatory factor analysis). Осталось понять, какую часть надо взять.

Наша задача — проверить факторный структуру данных, которую мы взяли из теории или нашли с помощью эксплораторного факторного анализа. То есть, в общем виде что-то такое:

Выглядит уже не так страшно и запустанно.

Как это всё работает внутри? Сложно. Но, на самом деле, за всем стоит привычная нам множественная линейная регрессия и уже знакомый нам метод максимального правдоподобия, ведь мы всё ещё в рамках линейных моделей.

Чуть выше мы обсуждали, сколько нужно данных, и сказали, что «10 наблюдений на один параметр». Однако тактично умолчали, что есть такое параметр. Так вот параметры — это, проще говоря, стрелочки на схеме выше. Это либо факторный нагрузки, так же как и в EFA, или коэффициенты косвенных связей между латентными переменными.

Конфирматорный факторный анализ в некотором смысле дополняет эксплораторный. Так, он позволяет уточнить и дополнить результаты последнего, а именно ответить на вопросы:

  • пересекаются ли факторы? — действительно ли каждый переменная обусловлена влиянием одного фактора?
  • достоверны ли статистически факторные нагрузки?
  • как коррелируют сами факторы и как это влияет на факторные нагрузки?
  • отличается ли дисперсия фактора от нуля? — ведь если нет, тогда этот фактор не информативен, то есть не дифференцирует респондентов

Итак, модель конфирматорного факторного анализа мы осознали. Пора писать код!

28.3 CFA в R

28.3.1 Данные

Сегодня работаем с данными по адаптации психометрической методики, направленной на измерении толерантности к неопределенности. Загрузим их, а также подключим необходимые библиотеки:

library(tidyverse) # наш любимый
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.4     ✓ dplyr   1.0.2
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(lavaan) # для структурного моделирования
## This is lavaan 0.6-8
## lavaan is FREE software! Please report any bugs.
library(semPlot) # для визуализаций 
tolunc <- read_csv2('https://raw.githubusercontent.com/angelgardt/hseuxlab-wlm2021/master/data/tolerance_uncertainty.csv')
## ℹ Using ',' as decimal and '.' as grouping mark. Use `read_delim()` for more control.
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   .default = col_double(),
##   sex = col_character()
## )
## ℹ Use `spec()` for the full column specifications.
str(tolunc)
## tibble [405 × 24] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ sex : chr [1:405] "женский" "женский" "мужской" "мужской" ...
##  $ age : num [1:405] 20 18 22 20 18 18 18 20 21 18 ...
##  $ tu1 : num [1:405] 6 1 3 4 1 4 4 6 1 1 ...
##  $ tu2 : num [1:405] 3 1 5 6 4 6 3 6 1 4 ...
##  $ tu3 : num [1:405] 4 7 4 6 5 5 6 7 4 5 ...
##  $ tu4 : num [1:405] 5 4 6 6 5 7 5 6 1 7 ...
##  $ tu5 : num [1:405] 2 7 6 6 7 5 5 7 7 6 ...
##  $ tu6 : num [1:405] 7 1 4 6 1 5 5 7 1 1 ...
##  $ tu7 : num [1:405] 1 3 6 6 4 6 5 6 1 6 ...
##  $ tu8 : num [1:405] 5 3 4 6 2 4 2 7 3 3 ...
##  $ tu9 : num [1:405] 5 7 7 6 4 5 3 6 4 5 ...
##  $ tu10: num [1:405] 6 6 7 6 7 4 5 7 4 2 ...
##  $ tu11: num [1:405] 3 1 4 7 2 6 7 6 2 3 ...
##  $ tu12: num [1:405] 4 3 6 7 5 6 6 7 2 6 ...
##  $ tu13: num [1:405] 4 4 6 7 4 4 5 6 4 2 ...
##  $ tu14: num [1:405] 4 7 6 7 6 6 5 7 5 7 ...
##  $ tu15: num [1:405] 4 7 4 7 4 6 5 7 4 4 ...
##  $ tu16: num [1:405] 5 1 4 7 1 5 5 6 2 1 ...
##  $ tu17: num [1:405] 4 3 5 7 5 6 6 7 6 7 ...
##  $ tu18: num [1:405] 1 4 6 7 3 6 5 6 4 5 ...
##  $ tu19: num [1:405] 4 6 7 7 4 6 4 6 4 7 ...
##  $ tu20: num [1:405] 4 1 6 7 5 5 3 5 1 1 ...
##  $ tu21: num [1:405] 4 7 5 7 4 7 4 7 7 7 ...
##  $ tu22: num [1:405] 4 5 4 5 2 5 4 6 5 2 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   sex = col_character(),
##   ..   age = col_double(),
##   ..   tu1 = col_double(),
##   ..   tu2 = col_double(),
##   ..   tu3 = col_double(),
##   ..   tu4 = col_double(),
##   ..   tu5 = col_double(),
##   ..   tu6 = col_double(),
##   ..   tu7 = col_double(),
##   ..   tu8 = col_double(),
##   ..   tu9 = col_double(),
##   ..   tu10 = col_double(),
##   ..   tu11 = col_double(),
##   ..   tu12 = col_double(),
##   ..   tu13 = col_double(),
##   ..   tu14 = col_double(),
##   ..   tu15 = col_double(),
##   ..   tu16 = col_double(),
##   ..   tu17 = col_double(),
##   ..   tu18 = col_double(),
##   ..   tu19 = col_double(),
##   ..   tu20 = col_double(),
##   ..   tu21 = col_double(),
##   ..   tu22 = col_double()
##   .. )
summary(tolunc)
##      sex                 age             tu1             tu2      
##  Length:405         Min.   :17.00   Min.   :1.000   Min.   :1.00  
##  Class :character   1st Qu.:18.00   1st Qu.:2.000   1st Qu.:2.00  
##  Mode  :character   Median :19.00   Median :3.000   Median :3.00  
##                     Mean   :20.51   Mean   :3.343   Mean   :3.36  
##                     3rd Qu.:20.00   3rd Qu.:4.000   3rd Qu.:4.00  
##                     Max.   :68.00   Max.   :7.000   Max.   :7.00  
##       tu3             tu4             tu5             tu6       
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:4.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :4.000   Median :5.000   Median :5.000   Median :4.000  
##  Mean   :3.835   Mean   :4.556   Mean   :4.528   Mean   :3.795  
##  3rd Qu.:5.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##       tu7             tu8             tu9             tu10            tu11     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.00  
##  1st Qu.:4.000   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:4.00  
##  Median :4.000   Median :4.000   Median :5.000   Median :4.000   Median :5.00  
##  Mean   :4.284   Mean   :3.748   Mean   :4.546   Mean   :4.415   Mean   :4.62  
##  3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.00  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.00  
##       tu12            tu13            tu14            tu15      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :5.000   Median :4.000   Median :5.000   Median :5.000  
##  Mean   :4.523   Mean   :4.269   Mean   :4.585   Mean   :4.474  
##  3rd Qu.:6.000   3rd Qu.:5.000   3rd Qu.:6.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##       tu16            tu17           tu18            tu19            tu20      
##  Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:4.00   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :4.000   Median :5.00   Median :4.000   Median :5.000   Median :3.000  
##  Mean   :3.662   Mean   :4.57   Mean   :4.116   Mean   :4.533   Mean   :3.235  
##  3rd Qu.:5.000   3rd Qu.:6.00   3rd Qu.:5.000   3rd Qu.:6.000   3rd Qu.:4.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##       tu21            tu22      
##  Min.   :1.000   Min.   :1.000  
##  1st Qu.:5.000   1st Qu.:3.000  
##  Median :6.000   Median :4.000  
##  Mean   :5.472   Mean   :3.867  
##  3rd Qu.:7.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000

Это одношкальная методика, поэтому все вопросы направлены на измерение одной латентной переменной — толерантности к неопределенности. Получается очень простая модель, которую необходимо проверить.

28.3.2 Синтаксис пакета lavaan

Однако первоначально нам надо освоиться с пакетом lavaan (laten varible analysis). Это самый популярный пакет для структурного моделирования, однако у него несколько специфический синтаксис.

В теоретической модели могут присутствовать различные типы связей:

  • измерения — связи от наблюдаемых переменных к латентным (наблюдаемые → латентные)
  • регрессии — связи от латентных переменны к наблюдаемым (латентные → наблюдаемые)
  • и корреляции — связи между наблюдаемыми и латентными переменными (наблюдаемые → наблюдаемые, латентные → латентные)

Для того, чтобы записать такую структуру модели был придуман специальный «язык», а вернее, обозначения:

Измерения Регрессии Корреляции
=~ ~ ~~

Для CFA нам необходимы только измерения, так как мы хотим проверить структуру измеритеьной факторной модели.

Модель в lavaan — это одна строка, которая передается в функцию. Далее функции сами парсят строку так, как им надо.

Наша модель будет записываться так:

mdl1 <- "F1 =~ tu1 + tu2 + tu3 + tu4 + tu5 + tu6 + tu7 + tu8 + tu9 + tu10 + tu11 + tu12 + tu13 + tu14 + tu15 + tu16 + tu17 + tu18 + tu19 + tu20 + tu21 + tu22"

Теперь можно перейти к подбору модели.

28.3.3 Подбор модели

Для конфирматорного факторного анализа в пакета lavaan предусмотрена функция cfa(), которая хочет на вход модель и данные. Попробуем:

model1 <- cfa(mdl1, data = tolunc)

Модель сошлась, никаких ошибок и предупреждение нам не выдали. Хорошо.

Воспользуемся хорошо знакомой нам функцией summary(), чтобы посмотреть на результаты:

summary(model1)
## lavaan 0.6-8 ended normally after 31 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        44
##                                                       
##   Number of observations                           405
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                              1401.716
##   Degrees of freedom                               209
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   F1 =~                                               
##     tu1               1.000                           
##     tu2               0.922    0.086   10.710    0.000
##     tu3               0.944    0.091   10.418    0.000
##     tu4               0.822    0.088    9.353    0.000
##     tu5               0.823    0.089    9.267    0.000
##     tu6               1.197    0.101   11.821    0.000
##     tu7               0.707    0.073    9.632    0.000
##     tu8               1.051    0.094   11.242    0.000
##     tu9               0.818    0.085    9.635    0.000
##     tu10              0.875    0.089    9.799    0.000
##     tu11              0.763    0.082    9.303    0.000
##     tu12              0.920    0.088   10.496    0.000
##     tu13              0.817    0.082    9.922    0.000
##     tu14              0.628    0.083    7.519    0.000
##     tu15              0.708    0.083    8.556    0.000
##     tu16              1.080    0.092   11.697    0.000
##     tu17              0.830    0.091    9.147    0.000
##     tu18              0.771    0.085    9.043    0.000
##     tu19              0.790    0.088    9.028    0.000
##     tu20              0.794    0.085    9.320    0.000
##     tu21              0.327    0.075    4.364    0.000
##     tu22              0.745    0.081    9.172    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .tu1               1.487    0.112   13.325    0.000
##    .tu2               1.330    0.099   13.370    0.000
##    .tu3               1.549    0.115   13.457    0.000
##    .tu4               1.707    0.125   13.698    0.000
##    .tu5               1.762    0.128   13.713    0.000
##    .tu6               1.447    0.112   12.895    0.000
##    .tu7               1.146    0.084   13.644    0.000
##    .tu8               1.413    0.107   13.176    0.000
##    .tu9               1.535    0.113   13.643    0.000
##    .tu10              1.659    0.122   13.609    0.000
##    .tu11              1.494    0.109   13.707    0.000
##    .tu12              1.431    0.107   13.435    0.000
##    .tu13              1.387    0.102   13.582    0.000
##    .tu14              1.869    0.134   13.947    0.000
##    .tu15              1.664    0.120   13.825    0.000
##    .tu16              1.241    0.096   12.963    0.000
##    .tu17              1.869    0.136   13.734    0.000
##    .tu18              1.670    0.121   13.751    0.000
##    .tu19              1.763    0.128   13.754    0.000
##    .tu20              1.613    0.118   13.704    0.000
##    .tu21              1.830    0.129   14.152    0.000
##    .tu22              1.493    0.109   13.730    0.000
##     F1                0.961    0.142    6.761    0.000

Привет, стена текста. Что тут нам надо увидеть?

Во-первых, первая строка нам говорит о том, что модель сошлась и всё хорошо. Потребовалось для этого 31 итерация.

Далее на говорят, что был использован метод максимального правдопободия (ML), в нашей модели 44 параметра и она построена на 405 наблюдениях.

Во-вторых, нам рапортуются результаты теста \(\chi^2\), который тестирует гипотезу о соответствии данных теоретической модели. Как обычно, представлена сама статистика (1401.716), число степеней свободы (209) и p-value (< .001). Нулевая гипотеза данного теста: данные согласуются с теоретической моделью. Соответственно, если мы получаем p-значение, меньшее конвенционального 0.05, то мы вынуждены отклонить нулевую гипотезу. То есть в данном случае результаты теста говорят о том, что данные не теоретическая модель не подстверждается данными. Однако делать выводы рано. На самом деле, использовать \(\chi^2\) бесполезно, так как при большом количестве данных p-value будет всегда меньше 0.05, поэтому в статьях его часто даже не указывают, а качество модели оценивают по другим метрикам, к которым мы обратимся позднее.

Далее идёт таблица факторных нагрузок. Она очень похожа на регрессионную таблицу — и это неспроста. Это и есть те самые множественные регрессии, на которых строится математическая модель конфирматорного факторного анализа.

Здесь необходимо отметить один критичный момент: очередность задания переменных в модели играет роль. Процедура подбоора модели устроена так, что все переменные нормируются относительно первой, поэтому её коэффициент (нагрузка) равен единице. Собственно, по этой причине здесь возможны факторные нагрузки, большие единицы (что не встречается с EFA). Критичен этот момент ещё и с той точки зрения, что первой переменной в модели необходимо указывать ту, которая положительно связана с фактором, чтобы, номируясь относительно неё, другие переменные не меняли своего направления связи.

В общем случае далее будет идти таблица, описывающая связи между латентными переменными. Так как у нас один фактор в модели, то этой таблицы нет. Статистический вывод делается по стандартному алгоритму.

Последняя таблица — это дисперсии остатков и факторов. Здесь необходимо обратить внимание имено на лисперсию факторов и проверить, отличается ли она статистически от нуля. В нашем случае всё ок — дисперсия фактора значима, значит и сам фактор значим. Если же дисперсия статистически равна нулю, то существование данного фактора не нашло эмпирического подтверждения.

Можно выгрузить эти таблицы под отдельности:

sfit <- standardizedsolution(model1)
# факторные нагрузки
sfit[sfit$op == "=~", ]
##    lhs op  rhs est.std    se      z pvalue ci.lower ci.upper
## 1   F1 =~  tu1   0.627 0.033 19.120      0    0.562    0.691
## 2   F1 =~  tu2   0.617 0.033 18.491      0    0.551    0.682
## 3   F1 =~  tu3   0.596 0.035 17.253      0    0.529    0.664
## 4   F1 =~  tu4   0.525 0.039 13.634      0    0.449    0.600
## 5   F1 =~  tu5   0.519 0.039 13.389      0    0.443    0.595
## 6   F1 =~  tu6   0.698 0.028 24.807      0    0.643    0.754
## 7   F1 =~  tu7   0.543 0.038 14.471      0    0.470    0.617
## 8   F1 =~  tu8   0.655 0.031 21.142      0    0.594    0.716
## 9   F1 =~  tu9   0.543 0.038 14.481      0    0.470    0.617
## 10  F1 =~ tu10   0.554 0.037 15.008      0    0.482    0.627
## 11  F1 =~ tu11   0.522 0.039 13.492      0    0.446    0.597
## 12  F1 =~ tu12   0.602 0.034 17.571      0    0.535    0.669
## 13  F1 =~ tu13   0.563 0.036 15.417      0    0.491    0.634
## 14  F1 =~ tu14   0.410 0.044  9.378      0    0.325    0.496
## 15  F1 =~ tu15   0.474 0.041 11.560      0    0.394    0.554
## 16  F1 =~ tu16   0.689 0.029 23.939      0    0.633    0.745
## 17  F1 =~ tu17   0.512 0.039 13.055      0    0.435    0.588
## 18  F1 =~ tu18   0.505 0.040 12.777      0    0.427    0.582
## 19  F1 =~ tu19   0.504 0.040 12.735      0    0.426    0.581
## 20  F1 =~ tu20   0.523 0.039 13.538      0    0.447    0.598
## 21  F1 =~ tu21   0.231 0.049  4.668      0    0.134    0.328
## 22  F1 =~ tu22   0.513 0.039 13.126      0    0.437    0.590
# корреляции
# в нашем случае ничего не выводится, так как в модель не включены корреляции
sfit[sfit$op == "~~" & sfit$lhs != sfit$rhs, ]
## [1] lhs      op       rhs      est.std  se       z        pvalue   ci.lower
## [9] ci.upper
## <0 rows> (or 0-length row.names)
# остатки
sfit[sfit$op == "~~" & sfit$lhs == sfit$rhs, ]
##     lhs op  rhs est.std    se      z pvalue ci.lower ci.upper
## 23  tu1 ~~  tu1   0.607 0.041 14.790      0    0.527    0.688
## 24  tu2 ~~  tu2   0.619 0.041 15.051      0    0.539    0.700
## 25  tu3 ~~  tu3   0.644 0.041 15.622      0    0.563    0.725
## 26  tu4 ~~  tu4   0.724 0.040 17.924      0    0.645    0.804
## 27  tu5 ~~  tu5   0.730 0.040 18.128      0    0.651    0.809
## 28  tu6 ~~  tu6   0.512 0.039 13.027      0    0.435    0.589
## 29  tu7 ~~  tu7   0.705 0.041 17.282      0    0.625    0.785
## 30  tu8 ~~  tu8   0.571 0.041 14.057      0    0.491    0.650
## 31  tu9 ~~  tu9   0.705 0.041 17.275      0    0.625    0.785
## 32 tu10 ~~ tu10   0.693 0.041 16.911      0    0.612    0.773
## 33 tu11 ~~ tu11   0.728 0.040 18.041      0    0.649    0.807
## 34 tu12 ~~ tu12   0.638 0.041 15.467      0    0.557    0.719
## 35 tu13 ~~ tu13   0.684 0.041 16.647      0    0.603    0.764
## 36 tu14 ~~ tu14   0.832 0.036 23.147      0    0.761    0.902
## 37 tu15 ~~ tu15   0.775 0.039 19.949      0    0.699    0.852
## 38 tu16 ~~ tu16   0.525 0.040 13.244      0    0.448    0.603
## 39 tu17 ~~ tu17   0.738 0.040 18.420      0    0.660    0.817
## 40 tu18 ~~ tu18   0.745 0.040 18.675      0    0.667    0.823
## 41 tu19 ~~ tu19   0.746 0.040 18.714      0    0.668    0.824
## 42 tu20 ~~ tu20   0.727 0.040 18.002      0    0.648    0.806
## 43 tu21 ~~ tu21   0.947 0.023 41.482      0    0.902    0.991
## 44 tu22 ~~ tu22   0.737 0.040 18.356      0    0.658    0.815
## 45   F1 ~~   F1   1.000 0.000     NA     NA    1.000    1.000

28.3.4 Оценка качества модели

Окей, с моделью разобрались, но хочется всё же понять, насколько она хороша. Метрик оценки качества разработано огромное количество — и все их lavaan считает автоматически. Наиболее популярны четыре: \(\text{CFI}\), \(\text{TLI}\), \(\text{SRMR}\), \(\text{RMSEA}\).

Все их можно вытащить достаточно легко:

fitmeasures(model1, c("chisq", "gfi", "agfi","cfi", "tli", "srmr", "rmsea"))
##    chisq      gfi     agfi      cfi      tli     srmr    rmsea 
## 1401.716    0.704    0.642    0.659    0.623    0.095    0.119

Как уже говорилось выше, ориентироваться на \(\chi^2\) бессмысленно. Для остальных метрик приняты следующие пороговые значения:

Метрика Значение
GFI (goodness of fit) (аналог \(R^2\)) \(> 0.95\)
AGFI (adjusted goodnes of fit) \(> 0.90\)
CFI (comparative fit index) \(> 0.95\)
TLI (Tucker Lewis index) \(> 0.95\)
RMSEA (Root Mean Square Error of Approximation) \(< 0.05\)
SRMR (Standardized Root Mean Square Residual) \(< 0.05\)

В нашем случае все метрики качества за пределами конвенциональных значений, что говорит о низком качестве построенной модели.

Также можно посмотреть на корреляцию остатков модели:

resid(model1, type = 'cor')
## $type
## [1] "cor.bollen"
## 
## $cov
##      tu1    tu2    tu3    tu4    tu5    tu6    tu7    tu8    tu9    tu10  
## tu1   0.000                                                               
## tu2   0.321  0.000                                                        
## tu3   0.068  0.093  0.000                                                 
## tu4  -0.045 -0.065 -0.081  0.000                                          
## tu5  -0.060 -0.004  0.038 -0.006  0.000                                   
## tu6   0.042  0.026  0.028 -0.071  0.051  0.000                            
## tu7   0.050  0.089 -0.047  0.080 -0.064 -0.080  0.000                     
## tu8  -0.015 -0.038  0.191 -0.051  0.050  0.122 -0.086  0.000              
## tu9  -0.021 -0.057  0.107 -0.033  0.169  0.025 -0.161  0.078  0.000       
## tu10 -0.040 -0.004  0.017 -0.033  0.130  0.017 -0.103  0.050  0.197  0.000
## tu11  0.081  0.043 -0.082  0.043 -0.122 -0.039  0.120 -0.080 -0.051 -0.078
## tu12 -0.101 -0.086 -0.137  0.170 -0.012 -0.110  0.042 -0.132 -0.081  0.047
## tu13 -0.011 -0.002 -0.014 -0.055  0.192  0.100 -0.115  0.009  0.159  0.148
## tu14 -0.139 -0.137  0.009  0.068 -0.091 -0.082  0.014  0.053 -0.033 -0.078
## tu15 -0.104 -0.117  0.030  0.096 -0.112 -0.082  0.055  0.098 -0.054 -0.063
## tu16  0.089  0.009 -0.044 -0.052 -0.002  0.139  0.004  0.008 -0.001 -0.045
## tu17 -0.149 -0.124 -0.135  0.140 -0.011 -0.139  0.072 -0.098 -0.074  0.012
## tu18 -0.066  0.039 -0.024 -0.004 -0.115 -0.086  0.098 -0.096 -0.053 -0.118
## tu19 -0.109 -0.051 -0.083  0.066 -0.028 -0.127  0.087 -0.128 -0.069 -0.067
## tu20  0.031  0.060  0.022 -0.030 -0.058  0.049  0.002  0.010 -0.013  0.076
## tu21 -0.151 -0.181 -0.053  0.100 -0.003 -0.103  0.034  0.010  0.028 -0.049
## tu22 -0.057 -0.153 -0.076  0.035 -0.105 -0.003  0.063 -0.049 -0.150 -0.132
##      tu11   tu12   tu13   tu14   tu15   tu16   tu17   tu18   tu19   tu20  
## tu1                                                                       
## tu2                                                                       
## tu3                                                                       
## tu4                                                                       
## tu5                                                                       
## tu6                                                                       
## tu7                                                                       
## tu8                                                                       
## tu9                                                                       
## tu10                                                                      
## tu11  0.000                                                               
## tu12  0.050  0.000                                                        
## tu13 -0.099 -0.036  0.000                                                 
## tu14 -0.012  0.087 -0.097  0.000                                          
## tu15  0.042  0.054 -0.183  0.475  0.000                                   
## tu16  0.027 -0.058  0.008 -0.063 -0.056  0.000                            
## tu17 -0.025  0.281 -0.011  0.038  0.048 -0.071  0.000                     
## tu18  0.159  0.070 -0.065  0.107  0.075 -0.069  0.117  0.000              
## tu19  0.016  0.203 -0.043  0.065  0.023 -0.064  0.312  0.215  0.000       
## tu20 -0.076  0.033  0.033 -0.063 -0.049  0.051 -0.020 -0.054 -0.121  0.000
## tu21  0.077  0.038 -0.008  0.219  0.195 -0.055  0.151  0.034  0.160 -0.167
## tu22  0.102  0.112 -0.082  0.086  0.072  0.034  0.140  0.134  0.185 -0.025
##      tu21   tu22  
## tu1               
## tu2               
## tu3               
## tu4               
## tu5               
## tu6               
## tu7               
## tu8               
## tu9               
## tu10              
## tu11              
## tu12              
## tu13              
## tu14              
## tu15              
## tu16              
## tu17              
## tu18              
## tu19              
## tu20              
## tu21  0.000       
## tu22  0.114  0.000

Значения, большие 0.1, говорят о том, что данная связь недостаточно учтена в модели.

28.3.5 Визуализация результатов

Визуализировать модель можно с помощью красивой диаграммы. Для этого есть функция semPath(), которая всё за нас сделает:

semPaths(model1, 'std')

На ней сразу отображены и факторный нагрузки, и связи между набладаемыми переменными. Пунктирная стрелка указывает на тот параметр-измерение, относительно которого были нормированы все остальные.

28.3.6 Модификация модели

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

modificationindices(model1)
##      lhs op  rhs      mi    epc sepc.lv sepc.all sepc.nox
## 46   tu1 ~~  tu2 127.841  0.848   0.848    0.603    0.603
## 47   tu1 ~~  tu3   5.465  0.188   0.188    0.124    0.124
## 48   tu1 ~~  tu4   2.114 -0.122  -0.122   -0.076   -0.076
## 49   tu1 ~~  tu5   3.625 -0.162  -0.162   -0.100   -0.100
## 50   tu1 ~~  tu6   2.735  0.132   0.132    0.090    0.090
## 51   tu1 ~~  tu7   2.678  0.113   0.113    0.086    0.086
## 52   tu1 ~~  tu8   0.318 -0.044  -0.044   -0.030   -0.030
## 53   tu1 ~~  tu9   0.454 -0.054  -0.054   -0.035   -0.035
## 54   tu1 ~~ tu10   1.747 -0.110  -0.110   -0.070   -0.070
## 55   tu1 ~~ tu11   6.637  0.202   0.202    0.135    0.135
## 56   tu1 ~~ tu12  12.182 -0.271  -0.271   -0.186   -0.186
## 57   tu1 ~~ tu13   0.123 -0.027  -0.027   -0.019   -0.019
## 58   tu1 ~~ tu14  16.848 -0.356  -0.356   -0.213   -0.213
## 59   tu1 ~~ tu15  10.291 -0.264  -0.264   -0.168   -0.168
## 60   tu1 ~~ tu16  12.011  0.256   0.256    0.188    0.188
## 61   tu1 ~~ tu17  22.409 -0.414  -0.414   -0.248   -0.248
## 62   tu1 ~~ tu18   4.282 -0.171  -0.171   -0.108   -0.108
## 63   tu1 ~~ tu19  11.918 -0.293  -0.293   -0.181   -0.181
## 64   tu1 ~~ tu20   0.984  0.081   0.081    0.052    0.052
## 65   tu1 ~~ tu21  17.244 -0.353  -0.353   -0.214   -0.214
## 66   tu1 ~~ tu22   3.294 -0.142  -0.142   -0.095   -0.095
## 67   tu2 ~~  tu3   9.996  0.241   0.241    0.168    0.168
## 68   tu2 ~~  tu4   4.220 -0.162  -0.162   -0.108   -0.108
## 69   tu2 ~~  tu5   0.013 -0.009  -0.009   -0.006   -0.006
## 70   tu2 ~~  tu6   1.062  0.078   0.078    0.056    0.056
## 71   tu2 ~~  tu7   8.148  0.185   0.185    0.150    0.150
## 72   tu2 ~~  tu8   1.934 -0.102  -0.102   -0.075   -0.075
## 73   tu2 ~~  tu9   3.425 -0.139  -0.139   -0.097   -0.097
## 74   tu2 ~~ tu10   0.017 -0.010  -0.010   -0.007   -0.007
## 75   tu2 ~~ tu11   1.885  0.101   0.101    0.072    0.072
## 76   tu2 ~~ tu12   8.655 -0.215  -0.215   -0.156   -0.156
## 77   tu2 ~~ tu13   0.004 -0.004  -0.004   -0.003   -0.003
## 78   tu2 ~~ tu14  16.035 -0.328  -0.328   -0.208   -0.208
## 79   tu2 ~~ tu15  12.633 -0.276  -0.276   -0.185   -0.185
## 80   tu2 ~~ tu16   0.108  0.023   0.023    0.018    0.018
## 81   tu2 ~~ tu17  15.151 -0.321  -0.321   -0.204   -0.204
## 82   tu2 ~~ tu18   1.461  0.094   0.094    0.063    0.063
## 83   tu2 ~~ tu19   2.509 -0.127  -0.127   -0.083   -0.083
## 84   tu2 ~~ tu20   3.563  0.145   0.145    0.099    0.099
## 85   tu2 ~~ tu21  24.233 -0.395  -0.395   -0.253   -0.253
## 86   tu2 ~~ tu22  22.983 -0.354  -0.354   -0.251   -0.251
## 87   tu3 ~~  tu4   6.375 -0.215  -0.215   -0.132   -0.132
## 88   tu3 ~~  tu5   1.388  0.102   0.102    0.062    0.062
## 89   tu3 ~~  tu6   1.146  0.087   0.087    0.058    0.058
## 90   tu3 ~~  tu7   2.165 -0.103  -0.103   -0.077   -0.077
## 91   tu3 ~~  tu8  46.703  0.541   0.541    0.365    0.365
## 92   tu3 ~~  tu9  11.324  0.272   0.272    0.176    0.176
## 93   tu3 ~~ tu10   0.286  0.045   0.045    0.028    0.028
## 94   tu3 ~~ tu11   6.365 -0.201  -0.201   -0.132   -0.132
## 95   tu3 ~~ tu12  20.873 -0.360  -0.360   -0.242   -0.242
## 96   tu3 ~~ tu13   0.189 -0.033  -0.033   -0.023   -0.023
## 97   tu3 ~~ tu14   0.070  0.023   0.023    0.014    0.014
## 98   tu3 ~~ tu15   0.804  0.075   0.075    0.047    0.047
## 99   tu3 ~~ tu16   2.719 -0.123  -0.123   -0.089   -0.089
## 100  tu3 ~~ tu17  17.048 -0.367  -0.367   -0.215   -0.215
## 101  tu3 ~~ tu18   0.524 -0.061  -0.061   -0.038   -0.038
## 102  tu3 ~~ tu19   6.430 -0.218  -0.218   -0.132   -0.132
## 103  tu3 ~~ tu20   0.483  0.057   0.057    0.036    0.036
## 104  tu3 ~~ tu21   2.013 -0.122  -0.122   -0.073   -0.073
## 105  tu3 ~~ tu22   5.383 -0.184  -0.184   -0.121   -0.121
## 106  tu4 ~~  tu5   0.033 -0.016  -0.016   -0.009   -0.009
## 107  tu4 ~~  tu6   6.330 -0.212  -0.212   -0.135   -0.135
## 108  tu4 ~~  tu7   5.480  0.170   0.170    0.121    0.121
## 109  tu4 ~~  tu8   2.856 -0.139  -0.139   -0.089   -0.089
## 110  tu4 ~~  tu9   0.955 -0.082  -0.082   -0.051   -0.051
## 111  tu4 ~~ tu10   0.934 -0.084  -0.084   -0.050   -0.050
## 112  tu4 ~~ tu11   1.569  0.103   0.103    0.065    0.065
## 113  tu4 ~~ tu12  27.970  0.432   0.432    0.277    0.277
## 114  tu4 ~~ tu13   2.743 -0.132  -0.132   -0.086   -0.086
## 115  tu4 ~~ tu14   3.324  0.167   0.167    0.093    0.093
## 116  tu4 ~~ tu15   7.196  0.233   0.233    0.138    0.138
## 117  tu4 ~~ tu16   3.283 -0.141  -0.141   -0.097   -0.097
## 118  tu4 ~~ tu17  15.965  0.369   0.369    0.206    0.206
## 119  tu4 ~~ tu18   0.013 -0.010  -0.010   -0.006   -0.006
## 120  tu4 ~~ tu19   3.551  0.169   0.169    0.097    0.097
## 121  tu4 ~~ tu20   0.754 -0.075  -0.075   -0.045   -0.045
## 122  tu4 ~~ tu21   6.139  0.222   0.222    0.126    0.126
## 123  tu4 ~~ tu22   0.983  0.082   0.082    0.051    0.051
## 124  tu5 ~~  tu6   3.205  0.153   0.153    0.096    0.096
## 125  tu5 ~~  tu7   3.463 -0.137  -0.137   -0.096   -0.096
## 126  tu5 ~~  tu8   2.719  0.137   0.137    0.087    0.087
## 127  tu5 ~~  tu9  24.536  0.422   0.422    0.257    0.257
## 128  tu5 ~~ tu10  14.841  0.342   0.342    0.200    0.200
## 129  tu5 ~~ tu11  12.237 -0.293  -0.293   -0.181   -0.181
## 130  tu5 ~~ tu12   0.145 -0.032  -0.032   -0.020   -0.020
## 131  tu5 ~~ tu13  32.557  0.463   0.463    0.296    0.296
## 132  tu5 ~~ tu14   5.918 -0.226  -0.226   -0.125   -0.125
## 133  tu5 ~~ tu15   9.626 -0.273  -0.273   -0.160   -0.160
## 134  tu5 ~~ tu16   0.003 -0.004  -0.004   -0.003   -0.003
## 135  tu5 ~~ tu17   0.096 -0.029  -0.029   -0.016   -0.016
## 136  tu5 ~~ tu18  10.697 -0.289  -0.289   -0.169   -0.169
## 137  tu5 ~~ tu19   0.630 -0.072  -0.072   -0.041   -0.041
## 138  tu5 ~~ tu20   2.802 -0.146  -0.146   -0.087   -0.087
## 139  tu5 ~~ tu21   0.006 -0.007  -0.007   -0.004   -0.004
## 140  tu5 ~~ tu22   8.984 -0.251  -0.251   -0.155   -0.155
## 141  tu6 ~~  tu7   8.437 -0.201  -0.201   -0.156   -0.156
## 142  tu6 ~~  tu8  25.012  0.393   0.393    0.275    0.275
## 143  tu6 ~~  tu9   0.808  0.072   0.072    0.048    0.048
## 144  tu6 ~~ tu10   0.369  0.051   0.051    0.033    0.033
## 145  tu6 ~~ tu11   1.901 -0.108  -0.108   -0.074   -0.074
## 146  tu6 ~~ tu12  17.871 -0.330  -0.330   -0.229   -0.229
## 147  tu6 ~~ tu13  13.706  0.282   0.282    0.199    0.199
## 148  tu6 ~~ tu14   7.288 -0.235  -0.235   -0.143   -0.143
## 149  tu6 ~~ tu15   7.848 -0.231  -0.231   -0.149   -0.149
## 150  tu6 ~~ tu16  36.394  0.449   0.449    0.335    0.335
## 151  tu6 ~~ tu17  23.929 -0.430  -0.430   -0.261   -0.261
## 152  tu6 ~~ tu18   9.062 -0.250  -0.250   -0.161   -0.161
## 153  tu6 ~~ tu19  19.732 -0.379  -0.379   -0.237   -0.237
## 154  tu6 ~~ tu20   2.982  0.141   0.141    0.092    0.092
## 155  tu6 ~~ tu21   9.830 -0.267  -0.267   -0.164   -0.164
## 156  tu6 ~~ tu22   0.015 -0.010  -0.010   -0.007   -0.007
## 157  tu7 ~~  tu8   8.545 -0.197  -0.197   -0.155   -0.155
## 158  tu7 ~~  tu9  23.144 -0.332  -0.332   -0.250   -0.250
## 159  tu7 ~~ tu10   9.677 -0.223  -0.223   -0.162   -0.162
## 160  tu7 ~~ tu11  12.447  0.239   0.239    0.183    0.183
## 161  tu7 ~~ tu12   1.811  0.090   0.090    0.071    0.071
## 162  tu7 ~~ tu13  12.268 -0.230  -0.230   -0.183   -0.183
## 163  tu7 ~~ tu14   0.152  0.029   0.029    0.020    0.020
## 164  tu7 ~~ tu15   2.431  0.111   0.111    0.080    0.080
## 165  tu7 ~~ tu16   0.016  0.008   0.008    0.007    0.007
## 166  tu7 ~~ tu17   4.374  0.158   0.158    0.108    0.108
## 167  tu7 ~~ tu18   8.009  0.203   0.203    0.146    0.146
## 168  tu7 ~~ tu19   6.387  0.186   0.186    0.131    0.131
## 169  tu7 ~~ tu20   0.004  0.004   0.004    0.003    0.003
## 170  tu7 ~~ tu21   0.757  0.064   0.064    0.044    0.044
## 171  tu7 ~~ tu22   3.375  0.124   0.124    0.095    0.095
## 172  tu8 ~~  tu9   7.062  0.207   0.207    0.141    0.141
## 173  tu8 ~~ tu10   2.902  0.138   0.138    0.090    0.090
## 174  tu8 ~~ tu11   7.016 -0.203  -0.203   -0.140   -0.140
## 175  tu8 ~~ tu12  22.498 -0.361  -0.361   -0.254   -0.254
## 176  tu8 ~~ tu13   0.092  0.023   0.023    0.016    0.016
## 177  tu8 ~~ tu14   2.677  0.139   0.139    0.086    0.086
## 178  tu8 ~~ tu15   9.860  0.253   0.253    0.165    0.165
## 179  tu8 ~~ tu16   0.095  0.022   0.022    0.017    0.017
## 180  tu8 ~~ tu17  10.461 -0.277  -0.277   -0.171   -0.171
## 181  tu8 ~~ tu18   9.908 -0.255  -0.255   -0.166   -0.166
## 182  tu8 ~~ tu19  17.425 -0.347  -0.347   -0.220   -0.220
## 183  tu8 ~~ tu20   0.120  0.028   0.028    0.018    0.018
## 184  tu8 ~~ tu21   0.087  0.025   0.025    0.015    0.015
## 185  tu8 ~~ tu22   2.626 -0.124  -0.124   -0.086   -0.086
## 186  tu9 ~~ tu10  35.433  0.495   0.495    0.310    0.310
## 187  tu9 ~~ tu11   2.247 -0.118  -0.118   -0.078   -0.078
## 188  tu9 ~~ tu12   6.598 -0.200  -0.200   -0.135   -0.135
## 189  tu9 ~~ tu13  23.310  0.367   0.367    0.252    0.252
## 190  tu9 ~~ tu14   0.785 -0.077  -0.077   -0.045   -0.045
## 191  tu9 ~~ tu15   2.334 -0.126  -0.126   -0.079   -0.079
## 192  tu9 ~~ tu16   0.002 -0.004  -0.004   -0.003   -0.003
## 193  tu9 ~~ tu17   4.638 -0.189  -0.189   -0.112   -0.112
## 194  tu9 ~~ tu18   2.325 -0.126  -0.126   -0.079   -0.079
## 195  tu9 ~~ tu19   3.985 -0.170  -0.170   -0.103   -0.103
## 196  tu9 ~~ tu20   0.152 -0.032  -0.032   -0.020   -0.020
## 197  tu9 ~~ tu21   0.510  0.061   0.061    0.036    0.036
## 198  tu9 ~~ tu22  19.138 -0.343  -0.343   -0.227   -0.227
## 199 tu10 ~~ tu11   5.309 -0.188  -0.188   -0.120   -0.120
## 200 tu10 ~~ tu12   2.216  0.120   0.120    0.078    0.078
## 201 tu10 ~~ tu13  20.713  0.360   0.360    0.238    0.238
## 202 tu10 ~~ tu14   4.559 -0.193  -0.193   -0.110   -0.110
## 203 tu10 ~~ tu15   3.244 -0.155  -0.155   -0.093   -0.093
## 204 tu10 ~~ tu16   2.603 -0.124  -0.124   -0.086   -0.086
## 205 tu10 ~~ tu17   0.132  0.033   0.033    0.019    0.019
## 206 tu10 ~~ tu18  11.972 -0.298  -0.298   -0.179   -0.179
## 207 tu10 ~~ tu19   3.848 -0.174  -0.174   -0.102   -0.102
## 208 tu10 ~~ tu20   5.072  0.191   0.191    0.117    0.117
## 209 tu10 ~~ tu21   1.563 -0.111  -0.111   -0.064   -0.064
## 210 tu10 ~~ tu22  14.991 -0.316  -0.316   -0.201   -0.201
## 211 tu11 ~~ tu12   2.435  0.119   0.119    0.082    0.082
## 212 tu11 ~~ tu13   8.793 -0.222  -0.222   -0.154   -0.154
## 213 tu11 ~~ tu14   0.097 -0.027  -0.027   -0.016   -0.016
## 214 tu11 ~~ tu15   1.367  0.095   0.095    0.060    0.060
## 215 tu11 ~~ tu16   0.909  0.069   0.069    0.051    0.051
## 216 tu11 ~~ tu17   0.529 -0.063  -0.063   -0.038   -0.038
## 217 tu11 ~~ tu18  20.356  0.368   0.368    0.233    0.233
## 218 tu11 ~~ tu19   0.218  0.039   0.039    0.024    0.024
## 219 tu11 ~~ tu20   4.777 -0.175  -0.175   -0.113   -0.113
## 220 tu11 ~~ tu21   3.683  0.161   0.161    0.097    0.097
## 221 tu11 ~~ tu22   8.500  0.225   0.225    0.151    0.151
## 222 tu12 ~~ tu13   1.311 -0.085  -0.085   -0.060   -0.060
## 223 tu12 ~~ tu14   6.284  0.212   0.212    0.130    0.130
## 224 tu12 ~~ tu15   2.614  0.130   0.130    0.084    0.084
## 225 tu12 ~~ tu16   4.797 -0.158  -0.158   -0.118   -0.118
## 226 tu12 ~~ tu17  74.800  0.739   0.739    0.452    0.452
## 227 tu12 ~~ tu18   4.581  0.173   0.173    0.112    0.112
## 228 tu12 ~~ tu19  38.595  0.515   0.515    0.324    0.324
## 229 tu12 ~~ tu20   1.059  0.082   0.082    0.054    0.054
## 230 tu12 ~~ tu21   1.018  0.084   0.084    0.052    0.052
## 231 tu12 ~~ tu22  11.882  0.263   0.263    0.180    0.180
## 232 tu13 ~~ tu14   7.118 -0.221  -0.221   -0.137   -0.137
## 233 tu13 ~~ tu15  27.849 -0.415  -0.415   -0.273   -0.273
## 234 tu13 ~~ tu16   0.087  0.021   0.021    0.016    0.016
## 235 tu13 ~~ tu17   0.110 -0.028  -0.028   -0.017   -0.017
## 236 tu13 ~~ tu18   3.634 -0.150  -0.150   -0.099   -0.099
## 237 tu13 ~~ tu19   1.629 -0.103  -0.103   -0.066   -0.066
## 238 tu13 ~~ tu20   0.996  0.078   0.078    0.052    0.052
## 239 tu13 ~~ tu21   0.044 -0.017  -0.017   -0.011   -0.011
## 240 tu13 ~~ tu22   5.945 -0.182  -0.182   -0.127   -0.127
## 241 tu14 ~~ tu15 149.233  1.098   1.098    0.623    0.623
## 242 tu14 ~~ tu16   4.137 -0.163  -0.163   -0.107   -0.107
## 243 tu14 ~~ tu17   1.025  0.097   0.097    0.052    0.052
## 244 tu14 ~~ tu18   7.902  0.254   0.254    0.144    0.144
## 245 tu14 ~~ tu19   2.912  0.158   0.158    0.087    0.087
## 246 tu14 ~~ tu20   2.792 -0.149  -0.149   -0.086   -0.086
## 247 tu14 ~~ tu21  25.427  0.469   0.469    0.254    0.254
## 248 tu14 ~~ tu22   5.210  0.195   0.195    0.117    0.117
## 249 tu15 ~~ tu16   3.520 -0.143  -0.143   -0.100   -0.100
## 250 tu15 ~~ tu17   1.770  0.121   0.121    0.068    0.068
## 251 tu15 ~~ tu18   4.164  0.175   0.175    0.105    0.105
## 252 tu15 ~~ tu19   0.390  0.055   0.055    0.032    0.032
## 253 tu15 ~~ tu20   1.825 -0.114  -0.114   -0.070   -0.070
## 254 tu15 ~~ tu21  21.829  0.412   0.412    0.236    0.236
## 255 tu15 ~~ tu22   3.982  0.162   0.162    0.103    0.103
## 256 tu16 ~~ tu17   5.981 -0.198  -0.198   -0.130   -0.130
## 257 tu16 ~~ tu18   5.643 -0.182  -0.182   -0.126   -0.126
## 258 tu16 ~~ tu19   4.833 -0.173  -0.173   -0.117   -0.117
## 259 tu16 ~~ tu20   3.166  0.134   0.134    0.095    0.095
## 260 tu16 ~~ tu21   2.771 -0.131  -0.131   -0.087   -0.087
## 261 tu16 ~~ tu22   1.417  0.086   0.086    0.063    0.063
## 262 tu17 ~~ tu18  10.890  0.301   0.301    0.170    0.170
## 263 tu17 ~~ tu19  76.770  0.820   0.820    0.452    0.452
## 264 tu17 ~~ tu20   0.315 -0.050  -0.050   -0.029   -0.029
## 265 tu17 ~~ tu21  13.773  0.348   0.348    0.188    0.188
## 266 tu17 ~~ tu22  15.629  0.341   0.341    0.204    0.204
## 267 tu18 ~~ tu19  36.021  0.530   0.530    0.309    0.309
## 268 tu18 ~~ tu20   2.315 -0.129  -0.129   -0.079   -0.079
## 269 tu18 ~~ tu21   0.689  0.074   0.074    0.042    0.042
## 270 tu18 ~~ tu22  14.264  0.307   0.307    0.195    0.195
## 271 tu19 ~~ tu20  11.736 -0.298  -0.298   -0.177   -0.177
## 272 tu19 ~~ tu21  15.280  0.356   0.356    0.198    0.198
## 273 tu19 ~~ tu22  27.050  0.435   0.435    0.268    0.268
## 274 tu20 ~~ tu21  17.133 -0.361  -0.361   -0.210   -0.210
## 275 tu20 ~~ tu22   0.524 -0.058  -0.058   -0.037   -0.037
## 276 tu21 ~~ tu22   7.893  0.236   0.236    0.143    0.143

Индекс модификации показывает, насколько улучшится модель при включении данной связи в её структуру. Данная функцию была разработана для проведения быстрого разведочного анализа и формулирования гипотез для последующих исследований. Но несмотря на благие намерения, велик соблазн уйти на темную сторону исследовательской практики и вводить в модель дополнительные связи, находя им ad hoc объяснения. Не надо так!

28.3.7 Сравнение моделей

Исключительно в учебных целях и ради демонстрации процедуры сравнения моделей мы позволим себе шалость и включим в модель связь tu1 ~~ tu2, у которой наибольший индекс модицикации:

mdl2 <- "F1 =~ tu1 + tu2 + tu3 + tu4 + tu5 + tu6 + tu7 + tu8 + tu9 + tu10 + tu11 + tu12 + tu13 + tu14 + tu15 + tu16 + tu17 + tu18 + tu19 + tu20 + tu21 + tu22
tu1 ~~ tu2"
model2 <- cfa(mdl2, data = tolunc)
summary(model2)
## lavaan 0.6-8 ended normally after 34 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        45
##                                                       
##   Number of observations                           405
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                              1259.954
##   Degrees of freedom                               208
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   F1 =~                                               
##     tu1               1.000                           
##     tu2               0.919    0.064   14.423    0.000
##     tu3               0.996    0.103    9.698    0.000
##     tu4               0.899    0.099    9.044    0.000
##     tu5               0.887    0.100    8.865    0.000
##     tu6               1.272    0.117   10.901    0.000
##     tu7               0.752    0.083    9.094    0.000
##     tu8               1.130    0.107   10.518    0.000
##     tu9               0.882    0.096    9.187    0.000
##     tu10              0.943    0.101    9.320    0.000
##     tu11              0.812    0.092    8.810    0.000
##     tu12              1.014    0.101   10.080    0.000
##     tu13              0.876    0.093    9.391    0.000
##     tu14              0.704    0.093    7.556    0.000
##     tu15              0.785    0.093    8.429    0.000
##     tu16              1.147    0.106   10.801    0.000
##     tu17              0.927    0.103    9.008    0.000
##     tu18              0.836    0.096    8.712    0.000
##     tu19              0.873    0.099    8.826    0.000
##     tu20              0.843    0.096    8.800    0.000
##     tu21              0.383    0.082    4.674    0.000
##     tu22              0.823    0.092    8.948    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##  .tu1 ~~                                              
##    .tu2               0.857    0.093    9.234    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .tu1               1.615    0.120   13.459    0.000
##    .tu2               1.443    0.107   13.498    0.000
##    .tu3               1.580    0.117   13.459    0.000
##    .tu4               1.683    0.123   13.640    0.000
##    .tu5               1.757    0.128   13.680    0.000
##    .tu6               1.479    0.115   12.885    0.000
##    .tu7               1.155    0.085   13.628    0.000
##    .tu8               1.412    0.108   13.118    0.000
##    .tu9               1.531    0.113   13.605    0.000
##    .tu10              1.656    0.122   13.570    0.000
##    .tu11              1.504    0.110   13.692    0.000
##    .tu12              1.389    0.104   13.321    0.000
##    .tu13              1.390    0.103   13.551    0.000
##    .tu14              1.835    0.132   13.898    0.000
##    .tu15              1.632    0.119   13.766    0.000
##    .tu16              1.267    0.098   12.952    0.000
##    .tu17              1.816    0.133   13.648    0.000
##    .tu18              1.659    0.121   13.712    0.000
##    .tu19              1.728    0.126   13.689    0.000
##    .tu20              1.628    0.119   13.694    0.000
##    .tu21              1.811    0.128   14.131    0.000
##    .tu22              1.463    0.107   13.662    0.000
##     F1                0.832    0.135    6.167    0.000

Сравнение двух моделей выполняется с помощью привычной нам функции anova():

anova(model1, model2)
## Chi-Squared Difference Test
## 
##         Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)    
## model2 208 30112 30292 1260.0                                  
## model1 209 30252 30428 1401.7     141.76       1  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

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


  1. Это, конечно, не единственный критерий, но сейчас для нас — аналитиков — самый важный.↩︎