Modelagem de Equações Estruturais

Códigos
Modelos de Equações Estruturais
MEE
SEM
Autor

Jeanne Franco

Data de Publicação

3 de junho de 2027

Equações Estruturais em R: Conceitos e Aplicações Práticas

As Equações Estruturais permitem modelar relações complexas entre variáveis observadas e latentes. Elas combinam aspectos da análise fatorial e da regressão múltipla, permitindo que pesquisadores testem hipóteses sobre relações causais entre variáveis.

Neste post, vamos explorar como implementar modelos de equações estruturais em R usando o pacote lavaan. Além disso, vamos interpretar os resultados de um exemplo prático.

O que são Equações Estruturais?

Equações estruturais são modelos que permitem analisar relações entre variáveis observadas medidas diretamente (ex.: altura, idade, peso, gênero, etc.) e variáveis latentes não observadas diretamente, mas inferidas a partir de variáveis observadas. Alguns exemplos de variáveis latentes são: felicidade, ansiedade, personalidade, depressão, etc., as quais podem ser inferidas a partir de informações observadas como níveis de cortisol, interação social, consultas a psicólogos, etc. Portanto, as variáveis latentes são conceitos abstratos que não podem ser medidos diretamente.

A análise de equações estruturais é uma técnica que combina a análise de regressão múltipla e a análise fatorial para testar relações entre variáveis observáveis e latentes.

Os modelos são úteis em áreas como psicologia, ciências sociais e marketing, onde muitas vezes trabalhamos com conceitos abstratos (como “satisfação do cliente” ou “inteligência emocional”) que não podem ser medidos diretamente.

Um modelo de equações estruturais é composto por duas partes principais:

  1. Modelo de Medida: Relaciona as variáveis observadas às variáveis latentes.

  2. Modelo Estrutural: Define as relações entre as variáveis latentes.

Exemplo Prático: modelando a capacidade mental de crianças

O conjunto de dados de Holzinger e Swineford (1939) consiste em pontuações de testes de capacidade mental de crianças da sétima e oitava séries de duas escolas diferentes (Pasteur e Grant-White). No conjunto de dados original, há pontuações para 26 testes. No entanto, um subconjunto menor com 9 variáveis é mais amplamente usado na literatura.

Os dados são compostos por idade, sexo, escola, grade (séries), percepção visual (X1), cubos (X2), losangos (X3), compreensão de texto (X4), conclusão de frases (X5), significado das palavras (X6), soma acelerada (X7), contagem acelerada de pontos (X8), discriminação acelerada de letras maiúsculas retas e curvas (X9). As seguintes variáveis latentes podem ser usadas para inferir a capacidade mental das crianças:

  1. Inteligência espacial: Medida por três variáveis observadas (percepção visual, cubos e losangos).

  2. Inteligência verbal: Medida por três variáveis observadas (compreensão de texto, conclusão de frases e significado das palavras).

  3. Velocidade: Medida por três variáveis observadas (soma acelerada, contagem acelerada de pontos e discriminação acelerada de letras maiúsculas retas e curvas).

Portanto, a capacidade mental de crianças está representada pelas variáveis latentes inteligência espacial, verbal e de velocidade, que são influenciadas pelas variáveis observadas (X1-X9). A seguir estão os passos para aplicar as análises do modelo de equações estruturais.

Passo 1: Instalar e Carregar o Pacote lavaan

Primeiro, instale e carregue o pacote lavaan, que é amplamente utilizado para modelagem de equações estruturais em R.

# Instalar o pacote lavaan (se ainda não estiver instalado)
#install.packages("lavaan")

# Carregar pacotes necessários
library(lavaan)

Passo 2: Criar o Modelo

Vamos definir o modelo de equações estruturais usando os dados HolzingerSwineford1939 do pacote lavaan. Para isso, baixamos os dados e usamos uma sintaxe específica para definir as relações entre as variáveis do modelo.

# 1. Carregar dados

data("HolzingerSwineford1939")

dados <- HolzingerSwineford1939

head(dados, 6)
  id sex ageyr agemo  school grade       x1   x2    x3       x4   x5        x6
1  1   1    13     1 Pasteur     7 3.333333 7.75 0.375 2.333333 5.75 1.2857143
2  2   2    13     7 Pasteur     7 5.333333 5.25 2.125 1.666667 3.00 1.2857143
3  3   2    13     1 Pasteur     7 4.500000 5.25 1.875 1.000000 1.75 0.4285714
4  4   1    13     2 Pasteur     7 5.333333 7.75 3.000 2.666667 4.50 2.4285714
5  5   2    12     2 Pasteur     7 4.833333 4.75 0.875 2.666667 4.00 2.5714286
6  6   2    14     1 Pasteur     7 5.333333 5.00 2.250 1.000000 3.00 0.8571429
        x7   x8       x9
1 3.391304 5.75 6.361111
2 3.782609 6.25 7.916667
3 3.260870 3.90 4.416667
4 3.000000 5.30 4.861111
5 3.695652 6.30 5.916667
6 4.347826 6.65 7.500000
# Criar modelo

modelo <- '
  # Fatores latentes
  espacial =~ x1 + x2 + x3
  verbal =~ x4 + x5 + x6
  velocidade =~ x7 + x8 + x9
'

Aqui:

  • =~ indica que as variáveis observadas estão associadas a uma variável latente.

  • ~ indica uma relação de regressão entre variáveis latentes.

Passo 3: Ajustar o Modelo aos Dados

Vamos simular um conjunto de dados para este exemplo e ajustar o modelo. A função cfa() para ajuste do modelo significa Confimatory Factor Analysis.

# Ajustar o modelo

ajuste <- cfa(modelo, data = dados)

Passo 4: Interpretar os Resultados

Use a função summary() para visualizar os resultados do modelo ajustado.

# Resumo do modelo
summary(ajuste, standardized = TRUE, fit.measures = TRUE)
lavaan 0.6-19 ended normally after 35 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        21

  Number of observations                           301

Model Test User Model:
                                                      
  Test statistic                                85.306
  Degrees of freedom                                24
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               918.852
  Degrees of freedom                                36
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.931
  Tucker-Lewis Index (TLI)                       0.896

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3737.745
  Loglikelihood unrestricted model (H1)      -3695.092
                                                      
  Akaike (AIC)                                7517.490
  Bayesian (BIC)                              7595.339
  Sample-size adjusted Bayesian (SABIC)       7528.739

Root Mean Square Error of Approximation:

  RMSEA                                          0.092
  90 Percent confidence interval - lower         0.071
  90 Percent confidence interval - upper         0.114
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.840

Standardized Root Mean Square Residual:

  SRMR                                           0.065

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  espacial =~                                                           
    x1                1.000                               0.900    0.772
    x2                0.554    0.100    5.554    0.000    0.498    0.424
    x3                0.729    0.109    6.685    0.000    0.656    0.581
  verbal =~                                                             
    x4                1.000                               0.990    0.852
    x5                1.113    0.065   17.014    0.000    1.102    0.855
    x6                0.926    0.055   16.703    0.000    0.917    0.838
  velocidade =~                                                         
    x7                1.000                               0.619    0.570
    x8                1.180    0.165    7.152    0.000    0.731    0.723
    x9                1.082    0.151    7.155    0.000    0.670    0.665

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  espacial ~~                                                           
    verbal            0.408    0.074    5.552    0.000    0.459    0.459
    velocidade        0.262    0.056    4.660    0.000    0.471    0.471
  verbal ~~                                                             
    velocidade        0.173    0.049    3.518    0.000    0.283    0.283

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .x1                0.549    0.114    4.833    0.000    0.549    0.404
   .x2                1.134    0.102   11.146    0.000    1.134    0.821
   .x3                0.844    0.091    9.317    0.000    0.844    0.662
   .x4                0.371    0.048    7.779    0.000    0.371    0.275
   .x5                0.446    0.058    7.642    0.000    0.446    0.269
   .x6                0.356    0.043    8.277    0.000    0.356    0.298
   .x7                0.799    0.081    9.823    0.000    0.799    0.676
   .x8                0.488    0.074    6.573    0.000    0.488    0.477
   .x9                0.566    0.071    8.003    0.000    0.566    0.558
    espacial          0.809    0.145    5.564    0.000    1.000    1.000
    verbal            0.979    0.112    8.737    0.000    1.000    1.000
    velocidade        0.384    0.086    4.451    0.000    1.000    1.000

Aqui estão alguns dos principais resultados que você verá:

  1. Indicadores de Ajuste do Modelo:

    • CFI (Comparative Fit Index): Valores acima de 0.90 indicam um bom ajuste.

    • RMSEA (Root Mean Square Error of Approximation): Valores abaixo de 0.08 indicam um ajuste aceitável.

    • SRMR (Standardized Root Mean Square Residual): Valores abaixo de 0.08 são desejáveis.

  2. Cargas Fatoriais:

    • Mostram a relação entre as variáveis observadas e as variáveis latentes. Valores acima de 0.5 são considerados adequados.

Interpretação dos Resultados

  1. Indicadores de Ajuste:

    • O modelo apresenta um bom ajuste, com CFI = 0.931, RMSEA = 0.092 e SRMR = 0.065.
  2. Cargas Fatoriais:

    • Todas as cargas fatoriais são significativas (p < 0.001) e acima de 0.5, indicando que as variáveis observadas são bons indicadores das variáveis latentes.

Gerar gráfico

Passo 1: instalar pacote semPlot para criar o gráfico.

# Instale o pacote (se necessário)
#install.packages("semPlot")

# Carregue o pacote
library(semPlot)
Warning: pacote 'semPlot' foi compilado no R versão 4.4.3

Passo 2: Gerar o Gráfico do Modelo

# Gráfico básico do modelo
semPaths(
  object = ajuste,
  what = "std",           # Mostra coeficientes padronizados
  layout = "tree",        # Organização do gráfico
  style = "lisrel",          # Estilo visual (opcional)
  sizeMan = 8,            # Tamanho dos retângulos (variáveis observadas)
  sizeLat = 9,           # Tamanho dos círculos (variáveis latentes)
  nCharNodes = 0,         # Mostra nomes completos
  rotation = 2,           # Rotação do gráfico (2 = vertical),
    color = list(
    lat = "#003C30",  # Cor das latentes
    man = "#543005"), # Cor das observadas
    edge.label.cex = 1,    # Ajusta tamanho dos rótulos
    label.cex = 0.8,        # Tamanho dos rótulos dentro dos nós
  label.color = "white",
    mar = c(4, 4, 4, 4),      # Margens do gráfico (variáveis observadas)
    edge.width = .7,    # Espessura das linhas e setas
    nodeLabels = c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9","Espacial", "Verbal", "Velocidade"),
    edge.color = "gray8",   # Cor das linhas/setas
)

Interpretação do gráfico

O gráfico apresenta os nós, onde estão as variáveis latentes e observadas, e as setas indicam as relações entre elas. As variáveis apresentadas nos círculos (Espacial, Verbal, Velocidade) são as variáveis latentes influenciadas pelas variáveis observadas percepção visual (X1), cubos (X2), losangos (X3), compreensão de texto (X4), conclusão de frases (X5), significado das palavras (X6), soma acelerada (X7), contagem acelerada de pontos (X8), discriminação acelerada de letras maiúsculas retas e curvas (X9) apresentadas nos quadrados. Os valores atrelados às setas são as estimativas padronizadas de caminhos, indicadas no resumo dos resultados pelos std.all. As estimativas das relações entre as variáveis latentes indicam as covariâncias e as estimativas sobre as variáveis observadas são as suas variâncias, como indicado na tabela também pelos valores std.all. As setas indicam relações unidirecionais entre as variáveis, quando uma tem influência sobre a outra. Setas tracejadas indicam caminhos não diretos ou residuais e setas sólidas indicam relações diretas entre as variáveis. Setas mais escuras indicam relações mais fortes entre as variáveis, de acordo com a estimativa padronizada, e setas mais claras indicam relações mais fracas.

Conclusão

Neste post, exploramos como implementar e interpretar modelos de equações estruturais em R usando o pacote lavaan. Essa técnica é poderosa para testar hipóteses complexas e entender relações entre variáveis latentes e observadas.

Se você tiver dúvidas ou quiser explorar mais sobre o tema, deixe um comentário abaixo! E não se esqueça de compartilhar este post com seus colegas que também se interessam por programação em R e análise de dados.