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.
A biblioteca pode ser obtida diretamento do repositório CRAN com o comando padrão do R:
install.packages ("lavaan", dependencies = TRUE)
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:
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:
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
)
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.
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
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
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