Introdução

Buscaremos abordar os conceitos básicos de Modelagem de Equações Estruturais, ou structural equation modeling SEM. No R será utilizada a biblioteca lavaan. Trata-se de uma biblioteca com diversas aplicações de SEM.

O uso de SEM se constitui de um extenso campo de aplicação matemática que não pode ser coberto nessa abordagem inicial. Avim de introduzir o uso da biblioteca e uso de SEM, serão realizadas as aplicações mais recorrentes encontradas em uma pesquisa online sobre este tema. Algumas simplificações serão adotadas bem como algumas demonstrações matemáticas que não serão aqui exploradas, mas são encontradas na literatura especializada.

Nesse primeiro contato com SEM se burcará manusear e apresentar o uso de matrizes, identificação de modelo e ajuste.

Biblioteca

A biblioteca pode ser obtida diretamento do repositório CRAN com o comando padrão do R:

install.packages ("lavaan", dependencies = TRUE)

SEM

O modelo SEM constitui-se como uma analise combinada de análise fatorial e de regressão múltipla. Esta análise combinada visa alcançar a explicação de fenômenos por meio de medidas indiretas fornecidas por variáveis latentes (não observáveis). Tais variáveis latentes emergem da identificação da relação entre múltiplas variáveis (observáveis). Cabe lembrar que a relação identificada entre variáveis não se trata de colinearidade (uma vez que os pressupostos do método são normalidade e independência de variáveis), mas sim de estruturas de inter-relações entre equações; estas relações são associações de fatores gerados a partir da combinação de múltiplas variáveis.

O SEM modela a aplicação de equações linearer e fatoriais de modo paralelo de mameira associada por meio de variáveis latentes.

As equações aplicadas a serem combinadas no SEM são:

Iniciando

Este exemplo trás uma survey de 500 alunos onde se deseja identificar como a formação do aluno impacta em seu desempenho acadêmico. A pesquisa constitui-se de 9 variáveis explanatórias (observáveis) [Motivação, Harmonia, Estabilidade, Psicologia Parental Negativa, SES, QI verbal, Leitura, Aritmética e Ortografia]. A pesquisa conduzita parte da hipótese de existência de três constructos (variáveis latentes) [Ajuste, Risco e Realização]. Cada uma das três variáveis latentes emergem da combinação de três variáveis observáveis:

  • Ajustamento
    • Motivação
    • Harmonia
    • Estabilidade
  • Risco
    • Psicologia Parental (Negativa)
    • SES
    • QI verbal
  • Realização
    • Leitura
    • Aritmética
    • Ortografia

De posse dos dados, o primeiro passo é obter a matriz de variância e covariância que informa qual tipo de relação estatística os atributos dos elementos amostrais de pesquisa possuem entre sí.

library(lavaan)
## This is lavaan 0.6-9
## lavaan is FREE software! Please report any bugs.
df <- read.csv("worland5.csv")
cov(df)
##        motiv harm stabi ppsych ses verbal read arith spell
## motiv    100   77    59    -25  25     32   53    60    59
## harm      77  100    58    -25  26     25   42    44    45
## stabi     59   58   100    -16  18     27   36    38    38
## ppsych   -25  -25   -16    100 -42    -40  -39   -24   -31
## ses       25   26    18    -42 100     40   43    37    33
## verbal    32   25    27    -40  40    100   56    49    48
## read      53   42    36    -39  43     56  100    73    87
## arith     60   44    38    -24  37     49   73   100    72
## spell     59   45    38    -31  33     48   87    72   100

Note que a matriz possue a variancia em sua diagonal e as covariâncias nas demais células da matriz. O triângulo superior e inferior da matriz, delimitados pela diagonal possuem os mesmos valores para os mesmos pares de variáveis, essa correspondência é chamada simetria de variâncias, ou seja, o valor de harm x stabi é o mesmo de stabi x harm. Esta simetria é requerida para os passos seguintes do modelo. Embora o modelo apresente variância e covariância, a covariância consiste na relação estatística mais importante do modelo de equações estruturais.

A covariância populacional denotada \(\Sigma\) é chamada de matriz de variância-covariância, e é estimada sendo então denotada por \(\widehat{\Sigma} = S\) da amostra. Esta não sema ser confundida com \(\Sigma = \Sigma(\theta)\), definida como matriz de covariância implícita do modelo. A matriz de covariância implicita \(\Sigma(\theta)\) é o alvo do SEM que visa reproduzir a matriz de variância-covariância da amostra \(\widehat{\Sigma} = S\). A catriz de covariância implícita é utilizada para avaliar as relações estruturais entre variáveis implícitas e explícitas, caso o modelo replique a matriz de cariância-covariância, então: \(\Sigma = \Sigma(\theta)\).

library(corrplot)
## corrplot 0.88 loaded
M<-cor(df)
corrplot(M, method="pie")

Embora o modelo requeira a matriz simétrica, abaixo foi elaborada uma matriz de covariâncias não simétrica afim de facilidar a visualização da relação estatística entre as variáveis.

cor.mtest <- function(mat, ...) {
    mat <- as.matrix(mat)
    n <- ncol(mat)
    p.mat<- matrix(NA, n, n)
    diag(p.mat) <- 0
    for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
            tmp <- cor.test(mat[, i], mat[, j], ...)
            p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
        }
    }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
# matrix of the p-value of the correlation
p.mat <- cor.mtest(df)

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(M, method="color", col=col(200),  
         type="upper", order="hclust", 
         addCoef.col = "black",
         tl.col="black", tl.srt=45,
         p.mat = p.mat, sig.level = 0.01, insig = "blank", 
         diag=FALSE 
         )

Conceitos

Definições

Quando um indicador (variável causada) é predito por um fator endógeno, este indicador é chamado \(y-side\) indicador, também tratado como \(y\).Assim as variáveis \(x-side\) e \(y-side\) são variáveris dependentes, onde x e y dependem da endogenidade de seu fator.

Sintaxe lavaan

~ preditor Adotado para regressãp dp resultado observado por preditores observados [x ~x]
=~ indicador aplicado sobre variáveis latentes, indicadores observados quando utilizados modelos de análise fatoriais [f =~ q + r + s]
~~ covariância [x ~~ x]
~1 intercepto [x~1 estima a média da variável x]
1* correção de parâmetro corrige o parâmetro ou seta como 1
NA* liberação de parâmetro substitui o método do marcador padrão
a * rótulo de parâmetro aplicado em restrições do modelo

Regressão Linear Simples

O uso da Regressão Linear modela a relação entre as variáveis exógena (x) e uma endógena (y), sendo \(b_0\) o intercepto, \(b_1\) o coeficiente e \(\epsilon\) o erro. \[y_1 = b_0 + b_1x_1+\epsilon_1\] A notação usual para SEM é a seguinte:

\[y_1 = \alpha + \gamma x_1 + \zeta_1 \] \(\phi\) variância residual, ou covariância da variável exógena.
\(\psi\) variância residual, ou covariância da variável endógena.

m1a <- lm(read ~ motiv, data=df)
(fit1a <-summary(m1a))
## 
## Call:
## lm(formula = read ~ motiv, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -26.0995  -6.1109   0.2342   5.2237  24.0183 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.232e-07  3.796e-01    0.00        1    
## motiv        5.300e-01  3.800e-02   13.95   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.488 on 498 degrees of freedom
## Multiple R-squared:  0.2809, Adjusted R-squared:  0.2795 
## F-statistic: 194.5 on 1 and 498 DF,  p-value: < 2.2e-16

Aplicações lineares de SEM com lavaan

Especificando apenas a predição da variável endógena read por meio da exógena motiv: read ~ motiv

m1b <-   '
    read ~ motiv
'
fit1b <- sem(m1b, data=df)
summary(fit1b)
## lavaan 0.6-9 ended normally after 9 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         2
##                                                       
##   Number of observations                           500
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   read ~                                              
##     motiv             0.530    0.038   13.975    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .read             71.766    4.539   15.811    0.000

Especificando apenas a predição da variável endógena read por meio da exógena motiv e intriduzindo o intercepto: read ~1 + motiv

m1b <-   '
    read ~ 1 + motiv
'
fit1b <- sem(m1b, data=df)
summary(fit1b)
## lavaan 0.6-9 ended normally after 9 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         3
##                                                       
##   Number of observations                           500
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   read ~                                              
##     motiv             0.530    0.038   13.975    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .read             -0.000    0.379   -0.000    1.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .read             71.766    4.539   15.811    0.000

Especificando a predição da variável endógena read por meio da exógena motiv com o intercepto e a introdução da requisição da variância das variáveis relacionadas: read ~ 1 + motiv motiv ~~ motiv

m1b <-   '
    read ~ 1 + motiv
  motiv ~~ motiv
'
fit1b <- sem(m1b, data=df)
summary(fit1b)
## lavaan 0.6-9 ended normally after 14 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         5
##                                                       
##   Number of observations                           500
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   read ~                                              
##     motiv             0.530    0.038   13.975    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .read             -0.000    0.379   -0.000    1.000
##     motiv             0.000    0.447    0.000    1.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     motiv            99.800    6.312   15.811    0.000
##    .read             71.766    4.539   15.811    0.000
mean(df$motiv)
## [1] 2.4e-07
var(df$motiv)
## [1] 100
m1a$df.residual
## [1] 498
length(df$motiv)
## [1] 500
m1a$df.residual/length(df$motiv)*(fit1a$sigma)**2
## [1] 71.76618