Lista 1 - Psicometria em R

Programa de Pós Graduação em Bioestatística - UEM

Pacotes utilizados

library(dplyr)
library(lavaan)
library(knitr)
library(kableExtra)
library(haven)

1.1 Obtenção da matriz de covariância a partir de erros-padrões e correlações

Para calcular o desvio-padrão de cada composição, multiplicamos o erro-padrão correspondente por \(\sqrt{n}\) (onde \(n = 212\)), operação que é justificada pelas propriedades da distribuição da média amostral.

Em uma amostra aleatória de tamanho \(n\), com observações independentes e variância populacional \(\sigma^2\), a variância da média amostral é dada por \(\operatorname{Var}(\bar{X}) = \frac{\sigma^2}{n}\).

Extraindo a raiz quadrada de ambos os lados da equação, obtemos a relação direta entre o erro-padrão da média e o desvio-padrão da amostra:

\[EP(\bar{X}) = \frac{DP(X)}{\sqrt{n}}.\]

Isolando o desvio-padrão,

\[DP(X) = EP(\bar{X}) \cdot \sqrt{n}.\]

De tal forma, adicionei a tabela fornecida no exercício ao R, e multipliquei cada um dos erros-padrão de \(\bar{X}\) por \(\sqrt{212}\), obtendo os desvios-padrão de \(X\):

# Criando a tabela com erros-padrão da média
composicao <- c(
  "MC (kg)",
  "IMC (kg/m²)",
  "CB (cm)",
  "CC (cm)",
  "CP (cm)",
  "DCP (mm)",
  "DCT (mm)",
  "DCS (mm)"
)

ep_media <- c(1.05, 0.3, 0.29, 0.81, 0.26, 0.51, 0.44, 0.47)

tab_ep <- data.frame(composicao, ep_media)

# Calculando os desvios-padrão
tab_ep$dp_var <- round(tab_ep$ep_media * sqrt(212), 2)
Composição Erro-padrão \(\bar{X}\) Desvio-padrão \(X\)
MC (kg) 1.05 15.29
IMC (kg/m²) 0.30 4.37
CB (cm) 0.29 4.22
CC (cm) 0.81 11.79
CP (cm) 0.26 3.79
DCP (mm) 0.51 7.43
DCT (mm) 0.44 6.41
DCS (mm) 0.47 6.84

Para transformar a matriz de correlações em matriz de covariâncias, basta utilizar o resultado obtido acima, uma vez que, para duas variáveis \(X_i\) e \(X_j\), a correlação é definida como:

\[r_{ij}=\frac{\operatorname{Cov}(X_i,X_j)} {DP_iDP_j} \]

Reorganizando a equação,

\[\operatorname{Cov}(X_i,X_j) = r_{ij}DP_iDP_j.\]

Ou seja, a covariância entre \(X_i\) e \(X_j\) pode ser escrita como a correlação entre \(X_i\) e \(X_j\) multiplicada pelos desvios padrão de \(X_i\) e \(X_j\).

Abaixo, inseri a matriz de correlações no R e calculei a matriz de covariâncias.

# Criando a matriz de correlações
tab_corr <- matrix(
  c(
    1.000, 0.890, 0.932, 0.887, 0.914, 0.591, 0.573, 0.688,
    0.890, 1.000, 0.933, 0.939, 0.882, 0.759, 0.746, 0.836,
    0.932, 0.933, 1.000, 0.890, 0.905, 0.693, 0.691, 0.758,
    0.887, 0.939, 0.890, 1.000, 0.819, 0.765, 0.779, 0.839,
    0.914, 0.882, 0.905, 0.819, 1.000, 0.643, 0.601, 0.653,
    0.591, 0.759, 0.693, 0.765, 0.643, 1.000, 0.912, 0.818,
    0.573, 0.746, 0.691, 0.779, 0.601, 0.912, 1.000, 0.856,
    0.688, 0.836, 0.758, 0.839, 0.653, 0.818, 0.856, 1.000
  ),
  nrow = 8,
  ncol = 8,
  byrow = TRUE
)

dimnames(tab_corr) <- list(composicao, composicao)

# Transformando em matriz de covariâncias ------

# Matriz diagonal com os desvios-padrão obtidos no item anterior
D <- diag(tab_ep$dp_var)
dimnames(D) <- list(composicao, composicao)

# Transformando a matriz de correlações em matriz de covariâncias
tab_cov <- D %*% tab_corr %*% D

# Arredondando os resultados
tab_cov <- round(tab_cov, 2)
MC (kg) IMC (kg/m²) CB (cm) CC (cm) CP (cm) DCP (mm) DCT (mm) DCS (mm)
MC (kg) 233.78 59.47 60.14 159.90 52.97 67.14 56.16 71.95
IMC (kg/m²) 59.47 19.10 17.21 48.38 14.61 24.64 20.90 24.99
CB (cm) 60.14 17.21 17.81 44.28 14.47 21.73 18.69 21.88
CC (cm) 159.90 48.38 44.28 139.00 36.60 67.01 58.87 67.66
CP (cm) 52.97 14.61 14.47 36.60 14.36 18.11 14.60 16.93
DCP (mm) 67.14 24.64 21.73 67.01 18.11 55.20 43.44 41.57
DCT (mm) 56.16 20.90 18.69 58.87 14.60 43.44 41.09 37.53
DCS (mm) 71.95 24.99 21.88 67.66 16.93 41.57 37.53 46.79

1.2 Especificação de modelos de trajetória em lavaan

Na figura fornecida pelo exercício, \(A\), \(B\), \(C\) e \(D\) são variáveis manifestas (observadas). \(E_C\) e \(E_D\) são variáveis latentes, representando os termos de erro das variáveis \(C\) e \(D\) (variância que não é explicada pelas variáveis preditoras do modelo).

\(A\) e \(B\) são variáveis exógenas (atuam apenas como preditoras), uma vez que nenhuma seta aponta pra elas. Em contrapartida, \(C\) e \(D\) são variáveis endógenas, uma vez que recebem setas de outras variáveis. \(C\) atua como mediadora (dependente de \(A\) e \(B\), mas preditora de \(D\)). Por fim, \(D\) recebe efeitos diretos de \(A\) e \(C\), e indiretos de \(B\).

As setas retas representam efeitos diretos de regressão, com as letras \(w\), \(x\), \(y\) e \(z\) sendo os coeficientes (pesos) da regressão. Fixar os pesos dos termos de erro em 1 garante que, para cada variação de 1 unidade no erro, a variável manifesta varie em exatamente 1 unidade da sua própria escala. A seta bidimensional entre \(A\) e \(B\) mostra que existe covariância entre as variáveis. E, por fim, as setas em \(E_C\) e \(E_D\) representam as variâncias dos termos de erro, escritas como \(\sigma^2_{E_C}\) e \(\sigma^2_{E_D}\).

Utilizando a linguagem do pacote lavaan, podemos escrever:

\[C \space \sim \space y*B \space + \space w*A\]

\[D \space \sim \space z*C \space + \space x*A\]

\[A \sim\sim B\]

Com \(\sim\) indicando regressões diretas, e \(\sim\sim\) covariância.

1.3 Modelagem de mediação em lavaan

1.3.1 Inserção da matriz de covariâncias

Inserindo a matriz de covariâncias no R:

conceitos <- c("expectativa", "clima", "conteudo", "desempenho")

vet_cov <- c(84.85, 71.28, 18.83, 60.05,
             71.28, 140.34, -6.25, 84.54,
             18.83, -6.25, 72.92, 37.18,
             60.05, 84.54, 37.18, 139.48)

mat_cov <- matrix(vet_cov, nrow = 4)
dimnames(mat_cov) <- list(conceitos, conceitos)

1.3.2 Especificação do modelo de mediação

Especificação do modelo, avaliando efeitos diretos e indiretos das expectativas dos professores sobre o desempenho dos alunos:

modelo_mediacao <- '
  # Efeitos diretos
  clima ~ a1 * expectativa
  conteudo ~ a2 * expectativa
  
  desempenho ~ b1 * clima + b2 * conteudo + c * expectativa

  # Efeitos indiretos
  ind_clima := a1 * b1
  ind_conteudo := a2 * b2
'

1.3.3 Estimação e interpretação dos efeitos indiretos

Para estimar e interpretar os efeitos indiretos, podemos ajustar o modelo especificado no item anterior utilizando a função sem(), do pacote lavaan. Basta inserir a matriz de covariâncias e o valor de \(n\), ambos fornecidos no enunciado do exercício.

# Ajuste do modelo
ajuste <- sem(modelo_mediacao, 
              sample.cov = mat_cov, 
              sample.nobs = 40)

# Visualização dos resultados
lavaan::summary(ajuste, fit.measures = TRUE, standardized = TRUE, ci = TRUE)
## lavaan 0.7-2 ended normally after 2 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         8
## 
##   Number of observations                            40
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 3.687
##   Degrees of freedom                                 1
##   P-value (Chi-square)                           0.055
## 
## Model Test Baseline Model:
## 
##   Test statistic                                58.874
##   Degrees of freedom                                 6
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.949
##   Tucker-Lewis Index (TLI)                       0.695
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)               -424.587
##   Loglikelihood unrestricted model (H1)       -422.743
##                                                       
##   Akaike (AIC)                                 865.174
##   Bayesian (BIC)                               878.685
##   Sample-size adjusted Bayesian (SABIC)        853.651
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.259
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.564
##   P-value H_0: RMSEA <= 0.050                    0.067
##   P-value H_0: RMSEA >= 0.080                    0.914
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.089
## 
## Goodness of Fit Index:
## 
##   Goodness of Fit Index (GFI)                    1.000
##   90 Percent confidence interval - lower         1.000
##   90 Percent confidence interval - upper         1.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   clima ~                                                               
##     expectatv (a1)    0.840    0.154    5.456    0.000    0.538    1.142
##   conteudo ~                                                            
##     expectatv (a2)    0.222    0.142    1.559    0.119   -0.057    0.501
##   desempenho ~                                                          
##     clima     (b1)    0.569    0.142    4.006    0.000    0.291    0.847
##     conteudo  (b2)    0.530    0.154    3.446    0.001    0.228    0.831
##     expectatv  (c)    0.112    0.186    0.603    0.546   -0.252    0.476
##    Std.lv  Std.all
##                   
##     0.840    0.653
##                   
##     0.222    0.239
##                   
##     0.569    0.545
##     0.530    0.366
##     0.112    0.084
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .clima            78.448   17.542    4.472    0.000   44.067  112.829
##    .conteudo         67.023   14.987    4.472    0.000   37.649   96.396
##    .desempenho       63.323   14.159    4.472    0.000   35.571   91.075
##    Std.lv  Std.all
##    78.448    0.573
##    67.023    0.943
##    63.323    0.425
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ind_clima         0.478    0.148    3.229    0.001    0.188    0.768
##     ind_conteudo      0.118    0.083    1.421    0.155   -0.045    0.280
##    Std.lv  Std.all
##     0.478    0.356
##     0.118    0.088

Respondendo à pergunta do exercício, os efeitos indiretos estimados pelo modelo são encontrados na seção Defined Parameters, ao final da saída da função summary().

Efeito indireto do clima social (ind_clima): A estimativa do efeito não padronizado é \(0,478\) (IC 95%: [0,188; 0,768]), com um efeito padronizado (Std.all) de \(0,356\). O efeito é estatisticamente significativo (\(p = 0,001\)).

Efeito indireto do conteúdo coberto (ind_conteudo): A estimativa do efeito não padronizado é \(0,118\) (IC 95%: [-0,045; 0,281]), com um efeito padronizado (Std.all) de \(0,088\). O efeito não apresenta significância estatística ao nível de 5% (\(p = 0,155\)), o que também é evidenciado pelo intervalo de confiança, que contém zero.

1.4 Modelagem com variáveis latentes em lavaan

1.4.1 Matriz de covariância

Inserindo a matriz de covariâncias no R:

conceito <- c("depressao_1", "depressao_2", "depressao_3", "atv_social", 
              "quedas", "cronicas", "atv_fisica",   "mobilidade")

vet_cov <- c(0.77,  0.38,  0.39, -0.25,  0.31,  0.24,  -3.16, -0.92,
             0.38,  0.65,  0.39, -0.32,  0.29,  0.25,  -3.56, -0.88,
             0.39,  0.39,  0.62, -0.27,  0.26,  0.19,  -2.63, -0.72,
             -0.25, -0.32, -0.27,  6.09, -0.36, -0.18,   6.09,  0.88,
             0.31,  0.29,  0.26, -0.36,  7.67,  0.51,  -3.12, -1.49,
             0.24,  0.25,  0.19, -0.18,  0.51,  1.69,  -4.58, -1.41,
             -3.16, -3.56, -2.63,  6.09, -3.12, -4.58, 204.79, 16.53,
             -0.92, -0.88, -0.72,  0.88, -1.49, -1.41,  16.53,  7.24)

mat_cov <- matrix(vet_cov, nrow = 8)

dimnames(mat_cov) <- list(conceito, conceito)

1.4.2 Ajuste e interpretação do modelo de equações estruturais

Especificação do modelo, utilizando a matriz de covariâncias e o valor de \(n\) fornecidos no exercício, onde \(= \sim\) é utilizado para mensurar a má saúde física e psicológica através das variáveis latentes, e \(\sim\) para estimar o efeito direto das mesmas sobre a mobilidade dos indivíduos.

modelo <- '
  # Modelo de mensuração (variáveis latentes)
  ma_saude_psico =~ depressao_1 + depressao_2 + depressao_3 + atv_social
  ma_saude_fisica =~ cronicas + atv_fisica + quedas

  # Modelo estrutural (efeitos diretos)
  mobilidade ~ ma_saude_psico + ma_saude_fisica
'

# Ajuste do modelo
ajuste <- sem(modelo, sample.cov = mat_cov, sample.nobs = 6053)

# Visualização dos resultados
lavaan::summary(ajuste, standardized = TRUE, fit.measures = TRUE, ci = TRUE)
## lavaan 0.7-2 ended normally after 62 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        18
## 
##   Number of observations                          6053
## 
## Model Test User Model:
##                                                       
##   Test statistic                               254.865
##   Degrees of freedom                                18
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             10290.938
##   Degrees of freedom                                28
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.977
##   Tucker-Lewis Index (TLI)                       0.964
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -95467.244
##   Loglikelihood unrestricted model (H1)     -95339.812
##                                                       
##   Akaike (AIC)                              190970.488
##   Bayesian (BIC)                            191091.238
##   Sample-size adjusted Bayesian (SABIC)     191034.038
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.047
##   90 Percent confidence interval - lower         0.042
##   90 Percent confidence interval - upper         0.052
##   P-value H_0: RMSEA <= 0.050                    0.856
##   P-value H_0: RMSEA >= 0.080                    0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.027
## 
## Goodness of Fit Index:
## 
##   Goodness of Fit Index (GFI)                    0.991
##   90 Percent confidence interval - lower         0.988
##   90 Percent confidence interval - upper         0.992
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                      Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   ma_saude_psico =~                                                       
##     depressao_1         1.000                               1.000    1.000
##     depressao_2         1.015    0.020   49.994    0.000    0.976    1.055
##     depressao_3         0.972    0.020   49.608    0.000    0.934    1.011
##     atv_social         -0.771    0.056  -13.683    0.000   -0.881   -0.660
##   ma_saude_fisica =~                                                      
##     cronicas            1.000                               1.000    1.000
##     atv_fisica        -12.005    0.442  -27.173    0.000  -12.871  -11.139
##     quedas              1.073    0.070   15.337    0.000    0.935    1.210
##    Std.lv  Std.all
##                   
##     0.624    0.712
##     0.634    0.786
##     0.607    0.771
##    -0.481   -0.195
##                   
##     0.610    0.469
##    -7.319   -0.511
##     0.654    0.236
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   mobilidade ~                                                          
##     ma_saude_psico    0.433    0.196    2.215    0.027    0.050    0.816
##     ma_saude_fisic   -4.034    0.286  -14.107    0.000   -4.594   -3.474
##    Std.lv  Std.all
##                   
##     0.270    0.101
##    -2.459   -0.914
## 
## Covariances:
##                     Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   ma_saude_psico ~~                                                      
##     ma_saude_fisic     0.250    0.011   22.634    0.000    0.228    0.271
##    Std.lv  Std.all
##                   
##     0.656    0.656
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .depressao_1       0.380    0.009   41.810    0.000    0.362    0.398
##    .depressao_2       0.248    0.007   33.798    0.000    0.234    0.262
##    .depressao_3       0.251    0.007   35.721    0.000    0.238    0.265
##    .atv_social        5.858    0.107   54.534    0.000    5.647    6.068
##    .cronicas          1.318    0.028   46.833    0.000    1.263    1.373
##    .atv_fisica      151.194    3.462   43.667    0.000  144.408  157.981
##    .quedas            7.241    0.134   54.019    0.000    6.978    7.504
##    .mobilidade        1.990    0.239    8.318    0.000    1.521    2.459
##     ma_saude_psico    0.390    0.014   28.811    0.000    0.363    0.416
##     ma_saude_fisic    0.372    0.024   15.334    0.000    0.324    0.419
##    Std.lv  Std.all
##     0.380    0.494
##     0.248    0.382
##     0.251    0.405
##     5.858    0.962
##     1.318    0.780
##   151.194    0.738
##     7.241    0.944
##     1.990    0.275
##     1.000    1.000
##     1.000    1.000

O modelo estimou um coeficiente de \(0,433\) (IC 95%: [0,05; 0,82]) para a má saúde psicológica, e \(-4,034\) (IC 95%: [-4,59; -3,47]) para a má saúde física, indicando que ambas afetam a mobilidade pessoal de forma estatisticamente significativa (\(p < 0,05\)).

Como as variáveis latentes medem a má saúde (depressão, histórico de quedas e doenças crônicas), o coeficiente de -4,034 mostra que uma saúde física comprometida prejudica a mobilidade dos indivíduos. A cada aumento de 1 unidade no escore de má saúde física, a mobilidade pessoal reduz, em média, 4,034 unidades, mantendo os demais fatores constantes.

Já o coeficiente de 0,433 para a má saúde psicológica é contraintuitivo, indicando que mais problemas psicológicos aumentariam a mobilidade, efeito que pode ter sido gerado pela covariância presente entre as duas variáveis latentes.

De tal forma, considerando também o fato de que o limite inferior do intervalo de confiança para o coeficiente da má saúde psicológica é igual a 0,05 (próximo de 0), concluo que apenas a saúde física é preditiva da mobilidade pessoal, com a ressalva de que a saúde psicológica é correlacionada com a saúde física, influenciando, de certa forma, a mobilidade de forma indireta.

1.5 Comparação de efeitos em regressão linear múltipla

Antes de verificar a importância das variáveis, fiz a leitura dos dados e ajustei o modelo de regressão linear múltipla na escala original, confirmando que os coeficientes refletem os valores fornecidos no enunciado:

# Leitura do conjunto de dados
World95 <- haven::read_sav("World95.sav")

# Ajuste do modelo de regressão linear múltipla
modelo_reg <- lm(LIFEEXPF ~ FERTILTY + BABYMORT, data = World95)

# Confirmando se os coeficientes batem com a equação do exercício
round(coef(modelo_reg), 2)
## (Intercept)    FERTILTY    BABYMORT 
##       82.68       -0.66       -0.24

Para verificar a importância das variáveis independentes, foram utilizados os coeficientes de regressão padronizados, uma vez que FERTILTY e BABYMORT estão em escalas diferentes.

Assim, a variável independente mais importante é aquela que apresenta o maior valor absoluto do coeficiente \(\beta\). Isso indica que uma variação de um desvio-padrão nessa variável está associada à maior variação, em desvios-padrão, na expectativa de vida feminina, mantendo a outra variável constante.

# Ajuste do modelo com coeficientes padronizados
modelo_reg_pad <- lm(scale(LIFEEXPF) ~ scale(FERTILTY) + scale(BABYMORT), data = World95)

# Coeficientes padronizados
round(coef(modelo_reg_pad), 2)
##     (Intercept) scale(FERTILTY) scale(BABYMORT) 
##            0.00           -0.12           -0.86

Como o valor absoluto do coeficiente de BABYMORT é superior, conclui-se que a mortalidade infantil é a variável mais importante. Mantendo a fertilidade constante, um aumento de um desvio-padrão na mortalidade infantil está associado a uma redução de 0,86 desvio-padrão na expectativa de vida feminina.

Outro critério, dentro das limitações do modelo de regressão, seria comparar os valores do Coeficiente de Determinação (\(R^2\)), antes e depois da inclusão das variáveis no modelo. O \(R^2\) representa a proporção da variabilidade da variável resposta que é explicada pelo modelo ajustado.

modelo_BABYMORT <- lm(LIFEEXPF ~ BABYMORT, data = World95)
modelo_FERTILTY <- lm(LIFEEXPF ~ FERTILTY, data = World95)

coef_det_df <- data.frame(
  BABYMORT = summary(modelo_BABYMORT)$r.squared,
  FERTILTY = summary(modelo_FERTILTY)$r.squared,
  AMBAS = summary(modelo_reg)$r.squared
) %>%
  round(3)
BABYMORT FERTILTY AMBAS
0.926 0.702 0.929

A inclusão da variável FERTILTY no modelo aumenta o \(R^2\) de \(0,926\) para \(0,929\), representando um acréscimo de apenas \(0,003\) na proporção da variabilidade de LIFEEXPF explicada pelo modelo. De tal forma, dentro desse critério, BABYMORT também é mais importante.

1.6 Modelos de referência para avaliação de ajuste

Os três modelos a serem ajustados diferem pelo número de restrições impostas à matriz de covariâncias. O modelo de independência total é o mais restritivo, pois assume que as variáveis não possuem covariâncias, apresentando o pior ajuste. O modelo saturado é o menos restritivo, pois estima todas as variâncias e covariâncias, apresentando ajuste perfeito. Já o modelo proposto ocupa uma posição intermediária, buscando um bom ajuste com um número menor de parâmetros.

Leitura dos dados:

data(HolzingerSwineford1939)
HolzingerSwineford1939.Pasteur <- subset(HolzingerSwineford1939,
                                         school == "Pasteur",
                                         select = x1:x9)

n <- nrow(HolzingerSwineford1939.Pasteur) # 156

covar <- cov(HolzingerSwineford1939.Pasteur)

1.6.1 Modelo de independência total

Modelo em que todas as variáveis são independentes entre si (nenhuma covariância é estimada):

modelo_indep <- '
  x1 ~~ x1
  x2 ~~ x2
  x3 ~~ x3
  x4 ~~ x4
  x5 ~~ x5
  x6 ~~ x6
  x7 ~~ x7
  x8 ~~ x8
  x9 ~~ x9
'

ajuste_indep <- sem(modelo_indep, data = HolzingerSwineford1939.Pasteur)

fitMeasures(
  ajuste_indep,
  c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr")
)
##   chisq      df  pvalue     cfi     tli   rmsea    srmr 
## 452.002  36.000   0.000   0.000   0.000   0.272   0.273

Como temos \(k=9\) variáveis, o número de variâncias é 9, com total de elementos únicos na matriz de covariância de

\[ \frac{k(k+1)}{2} = \frac{9(10)}{2} = 45.\]

Portanto, o modelo de independência possui \(df=45-9=36\) graus de liberdade.

1.6.2 Modelo saturado

No modelo saturado, todas as variâncias e covariâncias são estimadas. Como existem 45 elementos únicos na matriz de covariâncias, temos \(df=45−45=0\) graus de liberdade.

Ajuste do modelo:

modelo_sat <- '
  x1 ~~ x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
  x2 ~~ x3 + x4 + x5 + x6 + x7 + x8 + x9
  x3 ~~ x4 + x5 + x6 + x7 + x8 + x9
  x4 ~~ x5 + x6 + x7 + x8 + x9
  x5 ~~ x6 + x7 + x8 + x9
  x6 ~~ x7 + x8 + x9
  x7 ~~ x8 + x9
  x8 ~~ x9
'

ajuste_sat <- sem(modelo_sat, sample.cov = covar, sample.nobs = n)

fitMeasures(
  ajuste_sat,
  c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr")
)
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
##      0      0     NA      1      1      0      0

1.6.3 Modelo proposto

No exemplo de Holzinger-Swineford, existem três fatores latentes: Visual, Textual e Speed, medidos pelas variáveis observadas.

Um modelo de Análise Fatorial Confirmatória (CFA) pode ser escrito como:

modelo_proposto <- '
  visual =~ x1 + x2 + x3
  textual =~ x4 + x5 + x6
  speed =~ x7 + x8 + x9
'

Uma vez que x1, x2 e x3 representam medidas relacionadas à habilidade visual, x4, x5 e x6 à habilidade textual e x7, x8 e x9 à velocidade, o modelo proposto agrupa essas variáveis em três fatores latentes.

Ajuste do modelo:

ajuste_proposto <- cfa(modelo_proposto, data = HolzingerSwineford1939.Pasteur)

fitMeasures(
  ajuste_proposto,
  c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr")
)
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 64.309 24.000  0.000  0.903  0.855  0.104  0.077

No modelo proposto, os graus de liberdade são calculados como a diferença entre as 45 informações únicas da matriz de covariâncias e os 21 parâmetros (6 cargas fatoriais, 9 variâncias dos erros, 3 variâncias dos fatores e 3 covariâncias entre os fatores) estimados pelo modelo, resultando em 24 graus de liberdade.