Bastão de Asclépio & Distribuição Normal
# suppressMessages(library(MVLM, warn.conflicts=FALSE))
suppressMessages(library(apaTables, warn.conflicts=FALSE))
suppressMessages(library(aplpack, warn.conflicts=FALSE))
suppressMessages(library(bruceR, warn.conflicts=FALSE))
suppressMessages(library(calculus, warn.conflicts=FALSE))
suppressMessages(library(car, warn.conflicts=FALSE))
suppressMessages(library(cellWise, warn.conflicts=FALSE))
suppressMessages(library(cluster, warn.conflicts=FALSE))
suppressMessages(library(corrplot, warn.conflicts=FALSE))
suppressMessages(library(DescTools, warn.conflicts=FALSE))
suppressMessages(library(diptest, warn.conflicts=FALSE))
suppressMessages(library(dplyr, warn.conflicts=FALSE))
suppressMessages(library(EGAnet, warn.conflicts=FALSE))
suppressMessages(library(ellipse, warn.conflicts=FALSE))
suppressMessages(library(far, warn.conflicts=FALSE))
suppressMessages(library(fmsb, warn.conflicts=FALSE))
suppressMessages(library(GGally, warn.conflicts=FALSE))
suppressMessages(library(ggfortify, warn.conflicts=FALSE))
suppressMessages(library(ggplot2, warn.conflicts=FALSE))
suppressMessages(library(HSAUR2, warn.conflicts=FALSE))
suppressMessages(library(knitr, warn.conflicts=FALSE))
suppressMessages(library(lava, warn.conflicts=FALSE))
suppressMessages(library(lavaan, warn.conflicts=FALSE))
suppressMessages(library(lawstat, warn.conflicts=FALSE))
suppressMessages(library(lfda, warn.conflicts=FALSE))
suppressMessages(library(MASS, warn.conflicts=FALSE))
suppressMessages(library(MatchIt, warn.conflicts=FALSE)) # distancia robusta
suppressMessages(library(matlib, warn.conflicts=FALSE))
suppressMessages(library(matrixcalc, warn.conflicts=FALSE))
suppressMessages(library(MatrixModels, warn.conflicts=FALSE))
suppressMessages(library(matrixStats, warn.conflicts=FALSE))
suppressMessages(library(MomTrunc, warn.conflicts=FALSE))
suppressMessages(library(MVA, warn.conflicts=FALSE)) # An Introduction to Applied Multivariate Analysis with R
suppressMessages(library(MVar, warn.conflicts=FALSE))
suppressMessages(library(mvdalab, warn.conflicts=FALSE))
suppressMessages(library(MVN, warn.conflicts=FALSE))
suppressMessages(library(mvtnorm, warn.conflicts=FALSE))
suppressMessages(library(performance, warn.conflicts=FALSE))
suppressMessages(library(plotly, warn.conflicts=FALSE))
suppressMessages(library(polycor, warn.conflicts=FALSE))
suppressMessages(library(ppcor, warn.conflicts=FALSE))
suppressMessages(library(pracma, warn.conflicts=FALSE))
suppressMessages(library(psych, warn.conflicts=FALSE))
suppressMessages(library(qcc, warn.conflicts=FALSE))
suppressMessages(library(qgraph, warn.conflicts=FALSE))
suppressMessages(library(rcompanion, warn.conflicts=FALSE))
suppressMessages(library(reticulate, warn.conflicts=FALSE))
suppressMessages(library(rgl, warn.conflicts=FALSE))
suppressMessages(library(scatterplot3d, warn.conflicts=FALSE))
suppressMessages(library(semPlot, warn.conflicts=FALSE))matrixNormal::I, matrixNormal::J,
matrixNormal::tr
biotools::cov2pcov: Partial Covariance
Matrix
biotools::D2.disc: Discriminant Analysis Based on
Mahalanobis Distance
biotools::mvpaircomp: Multivariate Pairwise
Comparisons
biotools::singh: Importance of Variables According
to the Singh (1981) Criterion
bruceR
bruceR::CFAbruceR::lavaan_summarybruceR::EFAbruceR::PCAbruceR::AlphabruceR::cor_diffbruceR::CorrbruceR::DescribebruceR::RECODEbruceR::model_summarybruceR::regressbruceR::EMMEANSbruceR::GLM_summarybruceR::HLM_summarybruceR::TTESTbruceR::MANOVA: https://psychbruce.github.io/bruceR/reference/MANOVA.htmlRPubs“Não é paradoxo dizer que nos nossos momentos de inspiração mais teórica podemos estar o mais próximo possível de nossas aplicações mais práticas.”
WHITEHEAD, AN apud BOYER, CB (1974) História da matemática. São Paulo: Blücher/EDUSP, p. 419.
A análise fatorial tem uma história marcada por controvérsias. Seu início moderno remonta às tentativas, no início do século XX, de Karl Pearson, Charles Spearman e outros de definir e mensurar a inteligência. Em razão dessa associação inicial com construtos como a inteligência, a análise fatorial foi desenvolvida principalmente por cientistas interessados em psicometria. As disputas sobre as interpretações psicológicas dos primeiros estudos e a limitação dos recursos computacionais dificultaram o avanço inicial da técnica como método estatístico. O advento dos computadores de alta velocidade reavivou o interesse teórico e computacional na análise fatorial. A maioria das técnicas originais foi abandonada, e as controvérsias iniciais foram resolvidas com os desenvolvimentos recentes. Ainda assim, é verdade que cada aplicação da técnica deve ser avaliada por seus próprios méritos para determinar seu sucesso.
O objetivo essencial da análise fatorial é descrever, se possível, as relações de covariância entre muitas variáveis em termos de poucas variáveis subjacentes, não observáveis, chamadas fatores. Em essência, o modelo fatorial é motivado pelo seguinte raciocínio: suponha que as variáveis possam ser agrupadas segundo suas correlações. Isto é, suponha que todas as variáveis dentro de um grupo sejam altamente correlacionadas entre si, mas apresentem correlações pequenas com variáveis de outros grupos. Então, é plausível supor que cada grupo de variáveis represente um único construto subjacente — um fator — responsável pelas correlações observadas.
Por exemplo, as correlações entre escores de testes em clássicos, francês, inglês, matemática e música, coletados por Spearman, sugeriram um fator subjacente de “inteligência”. Outro conjunto de variáveis, representando medidas de aptidão física, poderia corresponder a um segundo fator. É esse tipo de estrutura que a análise fatorial busca confirmar.
A análise fatorial pode ser vista como uma extensão da análise de componentes principais (PCA). Ambas podem ser interpretadas como tentativas de aproximar a matriz de covariância populacional \(\boldsymbol{\Sigma}\).
Entretanto, a aproximação baseada no modelo de análise fatorial é mais elaborada. A questão central da análise fatorial é verificar se os dados observados são consistentes com uma estrutura previamente especificada.
O vetor aleatório observável (manifesto) \(\mathbf{X}\), com \(p\) componentes, tem média \(\boldsymbol{\mu}\) e matriz de covariância \(\boldsymbol{\Sigma}\). O modelo fatorial postula que \(\mathbf{X}\) depende linearmente de algumas poucas variáveis aleatórias não observáveis (latentes) \(F_1, F_2, \ldots, F_m\), chamadas fatores comuns, e de \(p\) fontes adicionais de variação \(\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_p\), chamadas erros ou, às vezes, fatores específicos.
Em particular, o modelo de análise fatorial é dado por
\[ \begin{aligned} X_1 - \mu_1 &= \ell_{11}F_1 + \ell_{12}F_2 + \cdots + \ell_{1m}F_m + \varepsilon_1 \\ X_2 - \mu_2 &= \ell_{21}F_1 + \ell_{22}F_2 + \cdots + \ell_{2m}F_m + \varepsilon_2 \\ &\vdots \\ X_p - \mu_p &= \ell_{p1}F_1 + \ell_{p2}F_2 + \cdots + \ell_{pm}F_m + \varepsilon_p \end{aligned} \tag{9-1} \]
ou, em notação matricial,
\[
\underset{p \times 1}{\mathbf{X}} - \underset{p \times
1}{\boldsymbol{\mu}} = \underset{p \times m}{\mathbf{L}}\;\underset{m
\times 1}{\mathbf{F}} + \underset{p \times 1}{\boldsymbol{\varepsilon}}
\tag{9-2}
\]
O coeficiente \(\ell_{ij}\) é chamado de carga fatorial (loading) da \(i\)-ésima variável sobre o \(j\)-ésimo fator, de modo que a matriz \(\mathbf{L}\) é a matriz de cargas fatoriais (factor loadings). Observe que o erro específico \(\varepsilon_i\) está associado apenas à variável \(X_i\).
Como observa Maxwell [12], em muitas investigações os termos \(\varepsilon_i\) tendem a ser combinações de erro de medição e de fatores que estão exclusivamente associados às variáveis individuais.
As \(p\) desvios \(X_1 - \mu_1, X_2 - \mu_2, \ldots, X_p - \mu_p\) são expressos em termos de \(p + m\) variáveis aleatórias \(F_1, F_2, \ldots, F_m, \varepsilon_1, \varepsilon_2, \ldots, \varepsilon_p\), que são não observáveis (latentes).
Essa característica distingue o modelo fatorial da regressão multivariada, em que as variáveis independentes (ocupando aqui a posição de \(\mathbf{F}\)) podem ser observadas. No modelo fatorial, \(\mathbf{F}\) é estimável.
Dado o grande número de quantidades não observáveis, uma verificação direta do modelo fatorial a partir das observações de \(X_1, X_2, \ldots, X_p\) é inviável. No entanto, com algumas suposições adicionais sobre os vetores aleatórios \(\mathbf{F}\) e \(\boldsymbol{\varepsilon}\), o modelo
\[ \mathbf{X} - \boldsymbol{\mu} = \mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon} \] implica certas relações de covariância que podem ser verificadas estatisticamente.
Assumimos que
\[ \begin{align} \mathbb{E}(\mathbf{F}) &= \underset{m \times 1}{\mathbf{0}} \qquad \mathbb{C}(\mathbf{F}) = \mathbb{E}(\mathbf{F}\mathbf{F}^{\prime}) = \underset{m \times m}{\mathbf{I}}\\ \mathbb{E}(\boldsymbol{\varepsilon}) &= \underset{p \times 1}{\mathbf{0}} \qquad \mathbb{C}(\boldsymbol{\varepsilon}) = \mathbb{E}(\boldsymbol{\varepsilon}\boldsymbol{\varepsilon}^{\prime}) = \underset{p \times p}{\boldsymbol{\Psi}}= \begin{bmatrix} \psi_1 & 0 & \cdots & 0 \\ 0 & \psi_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \psi_p \end{bmatrix} \end{align} \tag{9-3} \]
Além disso, supomos que \(\mathbf{F}\) e \(\boldsymbol{\varepsilon}\) são independentes, de modo que
\[ \mathbb{C}(\boldsymbol{\varepsilon}, \mathbf{F}) = \mathbb{E}(\boldsymbol{\varepsilon}\mathbf{F}^{\prime}) = \underset{p \times m}{\mathbf{0}} \]
Essas suposições, juntamente com o modelo em (9-2) definem o modelo fatorial ortogonal.
Em resumo, o modelo fatorial ortogonal com \(m\) fatores comuns é expresso por
\[ \underset{p \times 1}{\mathbf{X}} = \underset{p \times 1}{\boldsymbol{\mu}}+ \underset{p \times m}{\mathbf{L}}\; \underset{m \times 1}{\mathbf{F}}+ \underset{p \times 1}{\boldsymbol{\varepsilon}} \tag{9-4} \]
sendo que
\(\mu_i\): esperança da variável \(i\)
\(\varepsilon_i\): fator específico da variável \(i\)
\(F_j\): fator comum \(j\)
\(\ell_{ij}\): carga da variável \(i\) sobre o fator \(j\)
Os vetores aleatórios não observáveis \(\mathbf{F}\) e \(\boldsymbol{\varepsilon}\) satisfazem as condições
\[ \begin{aligned} &\mathbf{F} \text{ e } \boldsymbol{\varepsilon} \text{ são não correlacionados} \\\\ &\mathbb{E}(\mathbf{F}) = \underset{m \times 1}{\mathbf{0}} \quad \mathbb{C}(\mathbf{F}) = \underset{m \times m}{\mathbf{I}} \\ &\mathbb{E}(\boldsymbol{\varepsilon}) = \underset{p \times 1}{\mathbf{0}} \quad \mathbb{C}(\boldsymbol{\varepsilon}) = \underset{p \times p}{\boldsymbol{\Psi}} \text{, sendo que } \boldsymbol{\Psi} \text{ é diagonal} \end{aligned} \]
Permitir que os fatores \(\mathbf{F}\) sejam correlacionados, de modo que \(\mathbb{C}(\mathbf{F})\) não seja diagonal, conduz ao modelo fatorial oblíquo. Esse modelo apresenta algumas dificuldades adicionais de estimação e não será discutido neste texto. (Ver [10].)
O modelo fatorial ortogonal implica uma estrutura de covariância para \(\mathbf{X}\).
A partir do modelo em (9-4):
\[ \begin{aligned} \left(\mathbf{X} - \boldsymbol{\mu}\right) \left(\mathbf{X} - \boldsymbol{\mu}\right)^{\prime} &= (\mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon}) (\mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon})^{\prime} \\ &= (\mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon}) \left((\mathbf{L}\mathbf{F})^{\prime} + \boldsymbol{\varepsilon}^{\prime}\right) \\ \left(\mathbf{X} - \boldsymbol{\mu}\right) \left(\mathbf{X} - \boldsymbol{\mu}\right)^{\prime}&= \mathbf{L}\mathbf{F}(\mathbf{F}\mathbf{L})^{\prime} + \boldsymbol{\varepsilon}(\mathbf{L}\mathbf{F})^{\prime} + \mathbf{L}\mathbf{F}\boldsymbol{\varepsilon}^{\prime} + \boldsymbol{\varepsilon}\boldsymbol{\varepsilon}^{\prime} \end{aligned} \]
Portanto,
\[ \begin{aligned} \boldsymbol{\Sigma} &= \mathbb{C}(\mathbf{X}) = \mathbb{E}\left[(\mathbf{X} - \boldsymbol{\mu})(\mathbf{X} - \boldsymbol{\mu})^{\prime}\right] \\ &= \mathbf{L}\mathbb{E}(\mathbf{F}\mathbf{F}^{\prime})\mathbf{L}^{\prime} + \mathbb{E}(\boldsymbol{\varepsilon}\mathbf{F}^{\prime})\mathbf{L}^{\prime} + \mathbf{L}\mathbb{E}(\mathbf{F}\boldsymbol{\varepsilon}^{\prime}) + \mathbb{E}(\boldsymbol{\varepsilon}\boldsymbol{\varepsilon}^{\prime}) \\ \boldsymbol{\Sigma} &= \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi} \end{aligned} \]
de acordo com (9-3), uma vez que \(\mathbb{C}(\boldsymbol{\varepsilon}, \mathbf{F}) = \mathbf{0}\) pela independência entre \(\mathbf{F}\) e \(\boldsymbol{\varepsilon}\).
Além disso, pelo modelo em (9-4):
\[ (\mathbf{X} - \boldsymbol{\mu})\mathbf{F}^{\prime} = (\mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon})\mathbf{F}^{\prime} = \mathbf{L}\mathbf{F}\mathbf{F}^{\prime} + \boldsymbol{\varepsilon}\mathbf{F}^{\prime} \]
Logo,
\[ \mathbb{C}(\mathbf{X}, \mathbf{F}) = \mathbb{E}(\mathbf{X} - \boldsymbol{\mu})\mathbf{F}^{\prime} = \mathbf{L}\mathbb{E}(\mathbf{F}\mathbf{F}^{\prime}) + \mathbb{E}(\boldsymbol{\varepsilon}\mathbf{F}^{\prime}) = \mathbf{L} \]
Estrutura de covariância do modelo fatorial ortogonal:
ou, em termos escalares,
\[ \begin{align} \mathbb{V}(X_i) &= \sum_{j=1}^{m}{\ell_{ij}^2} + \psi_i\\ \mathbb{C}(X_i, X_k) &= \sum_{j=1}^{m}{\ell_{ij}\ell_{kj}} \end{align} \tag{9-5} \]
ou, elemento a elemento,
\[ \mathbb{C}(X_i, F_j) = \ell_{ij} \] O modelo \(\underset{p \times 1}{\mathbf{X}} + \underset{p \times 1}{\boldsymbol{\mu}} = \underset{p \times m}{\mathbf{L}}\; \underset{m \times 1}{\mathbf{F}} + \underset{p \times 1}{\boldsymbol{\varepsilon}}\) é linear nos fatores comuns.
Se as \(p\) variáveis de resposta \(\mathbf{X}\) estiverem de fato relacionadas a fatores subjacentes, mas de forma não linear, por exemplo
\[ X_1 - \mu_1 = \ell_{11} F_1 F_3 + \varepsilon_1 \qquad X_2 - \mu_2 = \ell_{21} F_2 F_3 + \varepsilon_2 \]
e assim por diante, então a estrutura de covariância
\[ \boldsymbol{\Sigma} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi} \]
dada por (9-5) pode não ser adequada.
A suposição de linearidade é, portanto, fundamental na formulação do modelo fatorial tradicional.
A parcela da variância da \(i\)-ésima variável explicada pelos \(m\) fatores comuns é chamada de comunalidade da variável \(i\) .
A parcela de \(\mathbb{V}(X_i)\) devida ao fator específico é chamada de unicidade (uniqueness), ou variância específica (specific variance).
Denotando a comunalidade da variável \(i\) por \(h_i^2\), obtemos a partir de (9-5):
\[ \sigma_{ii} = \underbrace{\sum_{j=1}^{m}{\ell_{ij}^2}}_{\text{comunalidade}}+ \underbrace{\psi_i}_{\text{variância específica}} \]
ou seja,
\[ h_i^2 = \sum_{j=1}^{m}{\ell_{ij}^2} \tag{9-6} \]
e portanto
\[ \mathbb{V}(X_{i})=\sigma_{ii} = h_i^2 + \psi_i\\ i = 1, 2, \ldots, p \]
A comunalidade \(h_i^2\) é a soma dos quadrados das cargas fatoriais da variável \(i\) sobre os \(m\) fatores comuns.
Considere a matriz de covariância
\[ \underset{4\times 4}{\boldsymbol{\Sigma}} = \begin{bmatrix} 19 & 30 & 2 & 12 \\ 30 & 57 & 5 & 23 \\ 2 & 5 & 38 & 47 \\ 12 & 23 & 47 & 68 \end{bmatrix} \]
A igualdade
\[ \underbrace{\begin{bmatrix} 19 & 30 & 2 & 12 \\ 30 & 57 & 5 & 23 \\ 2 & 5 & 38 & 47 \\ 12 & 23 & 47 & 68 \end{bmatrix}}_{\Sigma} = \underbrace{ \begin{bmatrix} 4 & 1 \\ 7 & 2 \\ -1 & 6 \\ 1 & 8 \end{bmatrix} }_{\mathbf{L}} \underbrace{ \begin{bmatrix} 4 & 7 & -1 & 1 \\ 1 & 2 & 6 & 8 \end{bmatrix} }_{\mathbf{L}^{\prime}} + \underbrace{ \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 4 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 3 \end{bmatrix} }_{\boldsymbol{\Psi}} \]
Pode-se verificar a igualdade por álgebra matricial. Assim, \(\boldsymbol{\Sigma}\) tem a estrutura de um modelo fatorial ortogonal com \(m=2\) fatores comuns:
\[ \underset{4\times 2}{\mathbf{L}} = \begin{bmatrix} 4 & 1 \\ 7 & 2 \\ -1 & 6 \\ 1 & 8 \end{bmatrix} \qquad \underset{4\times 4}{\boldsymbol{\Psi}} = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 4 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 3 \end{bmatrix} \]
A comunalidade de \(X_1\), a partir de (9-6), é
\[ h_1^2 = \ell_{11}^2 + \ell_{12}^2 = 4^2 + 1^2 = 17 \]
A variância de \(X_1\) decompõe-se como
\[ \sigma_{11} = (\ell_{11}^2 + \ell_{12}^2) + \psi_1 = h_1^2 + \psi_1 \]
ou seja,
\[ \underbrace{19}_{\mathbb{V}(X_1)} = \underbrace{4^2 + 1^2}_{\text{comunalidade}} + \underbrace{2}_{\text{variância específica}} = 17 + 2 \]
Uma decomposição semelhante ocorre para as demais variáveis.
\[\Diamond\]
O modelo fatorial supõe que as \(p + \dfrac{p(p-1)}{2} = \dfrac{p(p+1)}{2}\) variâncias e covariâncias de \(\mathbf{X}\) podem ser reproduzidas a partir das \(mp\) cargas fatoriais \(\ell_{ij}\) e das \(p\) variâncias específicas \(\psi_i\), totalizando \(p(m+1)\) parâmetros.
Quando \(m=p\), qualquer matriz de covariância \(\boldsymbol{\Sigma}\) pode ser reproduzida exatamente como \(\boldsymbol{\Sigma}=\mathbf{L}\mathbf{L}^{\prime}\), de modo que \(\boldsymbol{\Psi}\) pode ser a matriz nula. Contudo, é quando \(m\) é pequeno em relação a \(p\) que a análise fatorial é mais útil: o modelo fornece uma explicação mais simples da covariação em \(\mathbf{X}\) com menos parâmetros do que os \(\dfrac{p(p+1)}{2}\) necessários para descrever \(\boldsymbol{\Sigma}\).
Por exemplo, para \(p=12\) e um modelo apropriado com \(m=2\),
\[ \dfrac{p(p+1)}{2}=\dfrac{12\cdot 13}{2}=78 \qquad p(m+1) - \frac{1}{2}m(m-1) =12\cdot 3-1=35 \]
A parcela \(\frac{1}{2}m(m-1)\) dos parâmetros do modelo fatorial decorre da matriz \(\mathbf{T}\) ortogonal, pois eles não são identificáveis e precisam ser removidos do total de parâmetros.
Assim, os \(78\) elementos de \(\boldsymbol{\Sigma}\) são descritos por \(35\) parâmetros \(\ell_{ij}\) e \(\psi_i\) do modelo fatorial.
Note que há, na realidade, 37 parâmetros no modelo fatorial, sendo que dois deles são fixos e unitários. Estes dois parâmetros fixos são as variâncias unitários dos dois fatores. Portanto, há 35 parâmetros livres e 2 fixos.
O número de graus de liberdade do modelo fatorial ortogonal é:
\[ \begin{align} \text{df} &= \dfrac{p(p+1)}{2} - p(m+1)+ \frac{1}{2}m(m-1)\\ &= 78-35\\ \text{df} &= 43 \end{align} \]
Dessa forma, a quantidade de “observações” (fontes de informação) independentes para um eventual teste de hipótese nula do modelo é a quantidade de momentos centrados de segunda ordem; não é o número de unidades observacionais.
Se \(m=1\), número mínimo de variáveis manifestas para que \(\text{df}\ge1\) é \(p=4\), sendo que \(\text{df}=2\).
Se \(m=2\), número mínimo de variáveis manifestas para que \(\text{df}\ge1\) é \(p=5\), sendo que \(\text{df}=1\).
Se \(m=3\), número mínimo de variáveis manifestas para que \(\text{df}\ge1\) é \(p=7\), sendo que \(\text{df}=3\).
Entretanto, na prática, muitas matrizes de covariância não admitem a fatoração \(\boldsymbol{\Sigma}=\mathbf{L}\mathbf{L}^{\prime}+\boldsymbol{\Psi}\) quando o número de fatores \(m\) é muito menor que \(p\). O exemplo a seguir ilustra um problema que pode surgir ao se tentar determinar os parâmetros \(\ell_{ij}\) e \(\psi_i\) apenas a partir das variâncias e covariâncias observadas.
Sejam \(p=3\) e \(m=1\), e suponha que as variáveis aleatórias \(X_1\), \(X_2\) e \(X_3\) possuam a seguinte matriz de covariância definida positiva:
\[ \underset{3\times3}{\boldsymbol{\Sigma}}= \begin{bmatrix} 1 & 0.9 & 0.7 \\ 0.9 & 1 & 0.4 \\ 0.7 & 0.4 & 1 \end{bmatrix} \]
Pelo modelo fatorial (9-4), obtemos:
\[ \begin{aligned} X_1 - \mu_1 &= \ell_{11}F_1 + \varepsilon_1 \\ X_2 - \mu_2 &= \ell_{21}F_1 + \varepsilon_2 \\ X_3 - \mu_3 &= \ell_{31}F_1 + \varepsilon_3 \end{aligned} \]
A estrutura de covariância em (9-5) implica que
\[ \boldsymbol{\Sigma} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi} \]
ou, de forma escalar,
\[ \begin{aligned} 1 &= \ell_{11}^2 + \psi_1, \qquad &0.90 &= \ell_{11}\ell_{21} \qquad &0.70 &= \ell_{11}\ell_{31} \\ 1 &= \ell_{21}^2 + \psi_2, \qquad &0.40 &= \ell_{21}\ell_{31} \\ 1 &= \ell_{31}^2 + \psi_3 \end{aligned} \]
O par de equações
\[ 0.70 = \ell_{11}\ell_{31} \qquad 0.40 = \ell_{21}\ell_{31} \]
implica que
\[ \ell_{21} = \left(\dfrac{0.40}{0.70}\right)\ell_{11} \]
Substituindo esse resultado na equação \(0.90 = \ell_{11}\ell_{21}\), temos
\[ \ell_{11}^2 = 1.575 \quad \text{ou} \quad \ell_{11} = \pm 1.255 \]
Como \(\mathbb{V}(F_1)=1\) (por
hipótese) e \(\mathbb{V}(X_1)=1\),
tem-se que
\(\ell_{11} =
\mathbb{C}(X_1,F_1)=\mathrm{Corr}(X_1,F_1)\).
Ora, um coeficiente de correlação não pode exceder a unidade (em
módulo), logo \(|\ell_{11}|=1.255\) é
excessivo.
Além disso, a equação
\[ 1 = \ell_{11}^2 + \psi_1 \quad \Rightarrow \quad \psi_1 = 1 - \ell_{11}^2 \]
produz
\[ \psi_1 = 1 - 1.575 = -0.575 \]
o que é insatisfatório, pois fornece um valor negativo para \(\mathbb{V}(\varepsilon_1)=\psi_1\).
Portanto, neste exemplo com \(m=1\), é possível obter uma solução numérica única para as equações \(\boldsymbol{\Sigma}=\mathbf{L}\mathbf{L}^{\prime}+\boldsymbol{\Psi}\); contudo, essa solução não é consistente com a interpretação estatística dos coeficientes e, portanto, não constitui uma solução adequada.
## Exemplo 9.2 – Inexistência de solução adequada com m = 1
## Matriz de covariância Σ (3x3)
Sigma <- matrix(c(1, 0.9, 0.7,
0.9, 1, 0.4,
0.7, 0.4, 1),
nrow = 3, byrow = TRUE)
colnames(Sigma) <- rownames(Sigma) <- c("X1","X2","X3")
Sigma X1 X2 X3
X1 1.0 0.9 0.7
X2 0.9 1.0 0.4
X3 0.7 0.4 1.0
print(
GGally::ggcorr(data=NULL,
name="",
cor_matrix=Sigma,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)Registered S3 method overwritten by 'GGally':
method from
+.gg ggplot2
## Extraindo covariâncias cruzadas
sigma12 <- Sigma[1, 2] # Cov(X1, X2) = 0.9
sigma13 <- Sigma[1, 3] # Cov(X1, X3) = 0.7
sigma23 <- Sigma[2, 3] # Cov(X2, X3) = 0.4
l11_sq <- (sigma12 * sigma13) / sigma23
l11_sq[1] 1.575
## Valor de l11 (apenas para ilustrar; o sinal ± é irrelevante para o problema)
l11 <- sqrt(l11_sq)
l11[1] 1.25499
l11 l21 l31
1.2549900 0.7171372 0.5577734
## Calculando as variâncias específicas ψ1, ψ2, ψ3:
psi1 <- 1 - l11^2
psi2 <- 1 - l21^2
psi3 <- 1 - l31^2
c(psi1 = psi1, psi2 = psi2, psi3 = psi3) psi1 psi2 psi3
-0.5750000 0.4857143 0.6888889
## Matriz de cargas L (3x1) e matriz diagonal Ψ:
L <- matrix(c(l11, l21, l31), ncol = 1)
Psi <- diag(c(psi1, psi2, psi3))
L [,1]
[1,] 1.2549900
[2,] 0.7171372
[3,] 0.5577734
[,1] [,2] [,3]
[1,] -0.575 0.0000000 0.0000000
[2,] 0.000 0.4857143 0.0000000
[3,] 0.000 0.0000000 0.6888889
## Reconstruindo Σ via modelo fatorial Σ̂ = L L' + Ψ
Sigma_modelo <- tcrossprod(L) + Psi
Sigma_modelo [,1] [,2] [,3]
[1,] 1.0 0.9 0.7
[2,] 0.9 1.0 0.4
[3,] 0.7 0.4 1.0
X1 X2 X3
X1 0 0.000000e+00 0.000000e+00
X2 0 0.000000e+00 5.551115e-17
X3 0 5.551115e-17 0.000000e+00
Teste de adequação do modelo com m = 1:
if (any(abs(L) > 1)) {
cat("Problema: pelo menos uma carga fatorial tem |l_ij| > 1 (correlação impossível).\n")
}Problema: pelo menos uma carga fatorial tem |l_ij| > 1 (correlação impossível).
if (any(diag(Psi) < 0)) {
cat("Problema: pelo menos uma variância específica ψ_j é negativa (variância inválida).\n")
}Problema: pelo menos uma variância específica ψ_j é negativa (variância inválida).
if (!any(abs(L) > 1) && !any(diag(Psi) < 0)) {
cat("Modelo com m = 1 é estatisticamente aceitável (não é o caso deste exemplo).\n")
}
## EFA com 1 fator, sem restrição de variâncias positivas (para deixar aparecer Heywood)
fit_efa1 <- lavaan::efa(
output = "lavaan",
data = NULL,
sample.cov = Sigma,
sample.nobs = 200,
nfactors = 1,
rotation = "none",
bounds = "none" # default "pos.var"
)Warning: lavaan->lav_object_post_check():
some estimated ov variances are negative
lavaan 0.6-20 ended normally after 25 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 6
Rotation method NONE
Number of observations 200
Model Test User Model:
Test statistic 0.000
Degrees of freedom 0
Model Test Baseline Model:
Test statistic 624.713
Degrees of freedom 3
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 1.000
Tucker-Lewis Index (TLI) 1.000
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -537.503
Loglikelihood unrestricted model (H1) -537.503
Akaike (AIC) 1087.006
Bayesian (BIC) 1106.795
Sample-size adjusted Bayesian (SABIC) 1087.787
Root Mean Square Error of Approximation:
RMSEA 0.000
90 Percent confidence interval - lower 0.000
90 Percent confidence interval - upper 0.000
P-value H_0: RMSEA <= 0.050 NA
P-value H_0: RMSEA >= 0.080 NA
Standardized Root Mean Square Residual:
SRMR 0.000
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
f1 =~ efa
X1 1.252 0.054 23.267 0.000 1.252 1.255
X2 0.715 0.066 10.914 0.000 0.715 0.717
X3 0.556 0.068 8.236 0.000 0.556 0.558
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.X1 -0.572 0.122 -4.704 0.000 -0.572 -0.575
.X2 0.483 0.060 8.096 0.000 0.483 0.486
.X3 0.685 0.072 9.553 0.000 0.685 0.689
f1 1.000 1.000 1.000
## Matrizes de parâmetros estimados (não padronizados)
est <- lavaan::inspect(fit_efa1, "est") # lista com $lambda, $theta, etc.
L_hat <- est$lambda # cargas fatoriais
Theta <- est$theta # matriz de erros (Ψ)
Psi_hat <- diag(Theta) # variâncias específicas
## Matriz de covariância reproduzida Σ_hat = ΛΛ' + Ψ
Sigma_hat <- lavaan::inspect(fit_efa1, "cov.ov") # Σ̂ dos observáveis
## Resíduos Σ - Σ_hat
Sigma_res <- Sigma - Sigma_hat
cat("\nCargas fatoriais estimadas (Lambda):\n")
Cargas fatoriais estimadas (Lambda):
f1
X1 1.252
X2 0.715
X3 0.556
Variâncias específicas estimadas (diag(Theta)):
X1 X2 X3
-0.5721250 0.4832857 0.6854444
Matriz de covariância reproduzida Σ_hat:
X1 X2 X3
X1 0.995
X2 0.895 0.995
X3 0.696 0.398 0.995
Resíduos Σ - Σ_hat (devem ser ~0, salvo arredondamento):
X1 X2 X3
X1 0.005
X2 0.005 0.005
X3 0.004 0.002 0.005
Diagnóstico do modelo de 1 fator:
if (any(abs(L_hat) > 1)) {
cat("- Pelo menos uma carga fatorial tem |loading| > 1 (correlação impossível).\n")
}- Pelo menos uma carga fatorial tem |loading| > 1 (correlação impossível).
if (any(Psi_hat < 0)) {
cat("- Pelo menos uma variância específica ψ_j é negativa (Heywood, modelo inadmissível).\n")
}- Pelo menos uma variância específica ψ_j é negativa (Heywood, modelo inadmissível).
if (!any(abs(L_hat) > 1) && !any(Psi_hat < 0)) {
cat("- Nenhum problema óbvio de admissibilidade detectado.\n")
}\[\Diamond\]
Quando \(m>1\), existe sempre uma ambiguidade inerente associada ao modelo fatorial.
Para compreender isso, seja \(\mathbf{T}\) uma matriz ortogonal \(m\times m\), de modo que \(\mathbf{T}\mathbf{T}^{\prime}=\mathbf{T}^{\prime}\mathbf{T}=\mathbf{I}\).
Então, a expressão em (9-2) pode ser escrita como
\[ \underset{p\times1}{\mathbf{X}} - \underset{p\times1}{\boldsymbol{\mu}} = \underset{p\times m}{\mathbf{L}}\;\underset{m\times1}{\mathbf{F}} + \underset{p\times1}{\boldsymbol{\varepsilon}} = \underset{p\times m}{\mathbf{L}}\;\mathbf{T}\mathbf{T}^{\prime}\underset{m\times1}{\mathbf{F}} + \underset{p\times1}{\boldsymbol{\varepsilon}} = \underset{p\times m}{\mathbf{L}^{\ast}}\;\underset{m\times1}{\mathbf{F}^{\ast}} + \underset{p\times1}{\boldsymbol{\varepsilon}} \tag{9-7} \]
sendo que
\[ \mathbf{L}^{\ast} = \mathbf{L}\mathbf{T} \qquad \mathbf{F}^{\ast} = \mathbf{T}^{\prime}\mathbf{F} \]
Como
\[ \mathbb{E}(\mathbf{F}^{\ast}) = \mathbf{T}^{\prime}\mathbb{E}(\mathbf{F}) = \mathbf{0} \qquad \mathbb{C}(\mathbf{F}^{\ast}) = \mathbf{T}^{\prime}\mathbb{C}(\mathbf{F})\mathbf{T} = \mathbf{T}^{\prime}\mathbf{T} = \underset{m\times m}{\mathbf{I}} \]
é impossível, com base nas observações de \(\mathbf{X}\), distinguir as cargas fatoriais \(\mathbf{L}\) de \(\mathbf{L}^{\ast}\).
Os fatores \(\mathbf{F}\) e \(\mathbf{F}^{\ast}=\mathbf{T}^{\prime}\mathbf{F}\) têm as mesmas propriedades estatísticas; assim, ainda que \(\mathbf{L}^{\ast}\) difira de \(\mathbf{L}\), ambas geram a mesma matriz de covariância \(\boldsymbol{\Sigma}\).
De fato,
\[ \boldsymbol{\Sigma} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi} = \mathbf{L}\mathbf{T}\mathbf{T}^{\prime}\mathbf{L}^{\prime} + \boldsymbol{\Psi} = (\mathbf{L}^{\ast})(\mathbf{L}^{\ast})^{\prime} + \boldsymbol{\Psi} \tag{9-8} \]
Essa ambiguidade justifica a rotação fatorial, pois matrizes ortogonais representam rotações (ou reflexões) no sistema de coordenadas de \(\mathbf{X}\), sem alterar a estrutura de covariância.
As cargas fatoriais \(\mathbf{L}\) são determinadas considerando uma matriz ortogonal \(\mathbf{T}\). Assim,
\[ \mathbf{L}^{\ast} = \mathbf{L}\mathbf{T} \tag{9-9} \]
e \(\mathbf{L}\) fornecem a mesma representação.
As comunalidades, dadas pelos elementos diagonais de
\[ \mathbf{L}\mathbf{L}^{\prime} = (\mathbf{L}^{\ast})(\mathbf{L}^{\ast})^{\prime} \]
também não são afetadas pela escolha de \(\mathbf{T}\).
A análise do modelo fatorial prossegue impondo condições que permitam estimar unicamente \(\mathbf{L}\) e \(\boldsymbol{\Psi}\).
A matriz de cargas é então rotacionada (multiplicada por uma matriz ortogonal), sendo a rotação determinada por algum critério de “facilidade de interpretação”.
Uma vez obtidas as cargas e variâncias específicas, os fatores são identificados e valores estimados para os próprios fatores (denominados escores fatoriais) são frequentemente construídos.
Dadas observações \(\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n\) em \(p\) variáveis geralmente correlacionadas, a análise fatorial busca responder à questão:
O modelo fatorial (9-4), com um pequeno número de fatores, representa adequadamente os dados?
Em essência, esse problema de modelagem estatística é tratado tentando verificar a relação de covariância expressa em (9-5).
A matriz de covariância amostral \(\mathbf{S}\) é um estimador da matriz de
covariância populacional desconhecida \(\boldsymbol{\Sigma}\).
Se os elementos fora da diagonal de \(\mathbf{S}\) forem pequenos, ou se os da
matriz de correlação amostral \(\mathbf{R}\) forem essencialmente zero,
então as variáveis não estão relacionadas e a análise fatorial não será
útil.
Nessas circunstâncias, os fatores específicos desempenham o papel dominante, enquanto o principal objetivo da análise fatorial é determinar alguns poucos fatores comuns importantes.
Se \(\boldsymbol{\Sigma}\) parecer desviar-se significativamente de uma matriz diagonal, então um modelo fatorial pode ser considerado, e o problema inicial é estimar as cargas fatoriais \(\ell_{ij}\) e as variâncias específicas \(\psi_i\).
Serão considerados dois dos métodos mais populares de estimação de parâmetros: o método de componentes principais e o método da máxima verossimilhança.
A solução obtida por qualquer desses métodos pode ser rotacionada
para simplificar a interpretação dos fatores, como descrito na Seção
9.4.
É sempre prudente tentar mais de um método de solução; se o modelo
fatorial for adequado ao problema em questão, as soluções devem ser
consistentes entre si.
Os métodos atuais de estimação e rotação exigem cálculos iterativos que devem ser realizados em computador. Vários programas computacionais estão atualmente disponíveis para essa finalidade.
A decomposição espectral de (2-20) fornece uma fatoração da matriz de covariância \(\boldsymbol{\Sigma}\).
Seja \(\boldsymbol{\Sigma}\)
associada a pares autovalor–autovetor \((\lambda_i, \mathbf{e}_i)\), com \(\lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_p
\ge 0\).
Então,
\[ \boldsymbol{\Sigma} = \sum_{i=1}^{p}{\lambda_i \mathbf{e}_i\mathbf{e}_i^{\prime}} \]
ou, de forma matricial,
\[ \boldsymbol{\Sigma} = \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1 & \sqrt{\lambda_2}\mathbf{e}_2 & \cdots & \sqrt{\lambda_p}\mathbf{e}_p \end{bmatrix} \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1^{\prime} \\[3pt] \sqrt{\lambda_2}\mathbf{e}_2^{\prime} \\[3pt] \vdots \\[3pt] \sqrt{\lambda_p}\mathbf{e}_p^{\prime} \end{bmatrix} \tag{9-10} \]
Essa fatoração satisfaz a estrutura de covariância prescrita para o
modelo fatorial, assumindo tantos fatores quanto variáveis (\(m=p\)) e variâncias específicas \(\psi_i=0\) para todo \(i\).
A matriz de cargas fatoriais \(\mathbf{L}\) tem sua \(j\)‑ésima coluna dada por \(\sqrt{\lambda_j}\,\mathbf{e}_j\). Assim,
podemos escrever
\[ \underset{p\times p}{\boldsymbol{\Sigma}} = \underset{p\times p}{\mathbf{L}}\; \underset{p\times p}{\mathbf{L}^{\prime}} + \underset{p\times p}{\mathbf{0}} = \mathbf{L}\mathbf{L}^{\prime} \tag{9-11} \]
Exceto pela escala \(\sqrt{\lambda_j}\), as cargas fatoriais do \(j\)‑ésimo fator são os coeficientes do \(j\)‑ésimo componente principal da população.
Embora a representação fatorial de \(\boldsymbol{\Sigma}\) em (9‑11) seja exata, ela não é particularmente útil: emprega tantos fatores comuns quanto variáveis e não permite variação nos fatores específicos \(\boldsymbol{\varepsilon}\) do modelo (9‑4).
Modelos de maior interesse são aqueles que explicam a estrutura de covariância em termos de apenas alguns poucos fatores comuns.
Se os últimos \(p - m\) autovalores são pequenos, uma abordagem comum é negligenciar a contribuição de \(\sum_{i=m+1}^{p}{\lambda_i \mathbf{e}_i\mathbf{e}_i^{\prime}}\) na decomposição espectral de (9‑10).
Negligenciando essa contribuição, obtemos a aproximação
\[ \boldsymbol{\Sigma} \approx \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1 & \sqrt{\lambda_2}\mathbf{e}_2 & \cdots & \sqrt{\lambda_m}\mathbf{e}_m \end{bmatrix} \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1^{\prime} \\[3pt] \sqrt{\lambda_2}\mathbf{e}_2^{\prime} \\[3pt] \vdots \\[3pt] \sqrt{\lambda_m}\mathbf{e}_m^{\prime} \end{bmatrix} = \underset{p\times m}{\mathbf{L}}\;\underset{m\times p}{\mathbf{L}^{\prime}} \tag{9-12} \]
A representação aproximada em (9‑12) supõe que os fatores específicos \(\boldsymbol{\varepsilon}\) em (9‑4) são de importância secundária e podem ser ignorados na fatoração de \(\boldsymbol{\Sigma}\).
Se os fatores específicos forem incluídos no modelo, suas variâncias podem ser tomadas como os elementos diagonais de \(\boldsymbol{\Sigma} - \mathbf{L}\mathbf{L}^{\prime}\), conforme definido em (9‑12), sendo que os zeros são impostos, i.e.:
\[ \text{diag}(\boldsymbol{\Sigma} - \mathbf{L}\mathbf{L}^{\prime})=\boldsymbol{\Psi}=\begin{bmatrix} \psi_1 & 0 & \cdots & 0 \\ 0 & \psi_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \psi_p \end{bmatrix} \] sendo que \(\psi_i = \sigma_{ii} - \sum_{j=1}^{m} \ell_{ij}^2,\quad i = 1, 2, \ldots, p\).
Considerando fatores específicos, obtemos a aproximação (os zeros são impostos!):
\[ \begin{align} \boldsymbol{\Sigma} &\approx \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\\ &= \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1 & \sqrt{\lambda_2}\mathbf{e}_2 & \cdots & \sqrt{\lambda_m}\mathbf{e}_m \end{bmatrix} \begin{bmatrix} \sqrt{\lambda_1}\mathbf{e}_1^{\prime} \\[3pt] \sqrt{\lambda_2}\mathbf{e}_2^{\prime} \\[3pt] \vdots \\[3pt] \sqrt{\lambda_m}\mathbf{e}_m^{\prime} \end{bmatrix} +\\ &\quad \begin{bmatrix} \psi_1 & 0 & \cdots & 0 \\ 0 & \psi_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \psi_p \end{bmatrix} \end{align} \tag{9-13} \]
Para aplicar essa abordagem a um conjunto de dados \(\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n\), é costume primeiramente centralizar as observações subtraindo a média amostral \(\bar{\mathbf{x}}\).
As observações centradas são dadas por
\[ \mathbf{x}_j - \bar{\mathbf{x}} = \begin{bmatrix} x_{1j} - \bar{x}_1 \\ x_{2j} - \bar{x}_2 \\ \vdots \\ x_{pj} - \bar{x}_p \end{bmatrix} \qquad j = 1, 2, \ldots, n \tag{9-14} \]
as quais possuem a mesma matriz de covariância amostral \(\mathbf{s}\) das observações originais.
Nos casos em que as unidades das variáveis não são comensuráveis, é geralmente desejável trabalhar com as variáveis padronizadas:
\[ \mathbf{z}_j = \begin{bmatrix} \dfrac{x_{1j} - \bar{x}_1}{\sqrt{s_{11}}} \\[6pt] \dfrac{x_{2j} - \bar{x}_2}{\sqrt{s_{22}}} \\[6pt] \vdots \\[6pt] \dfrac{x_{pj} - \bar{x}_p}{\sqrt{s_{pp}}} \end{bmatrix} \qquad j = 1, 2, \ldots, n \]
A matriz de covariância amostral dessas variáveis padronizadas é a matriz de correlação amostral \(\mathbf{r}\) das observações \(\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n\).
A padronização evita o problema de uma variável com variância muito grande influenciar indevidamente a determinação das cargas fatoriais.
A representação em (9‑13), quando aplicada à matriz de covariância amostral \(\mathbf{s}\) ou à matriz de correlação amostral \(\mathbf{s}\), é conhecida como solução por componentes principais (PCA).
Essa denominação decorre do fato de que as cargas fatoriais correspondem aos coeficientes escalonados dos primeiros componentes principais amostrais. (Ver Capítulo 8.)
A análise fatorial por componentes principais da matriz de
covariância amostral \(\mathbf{s}\) é
especificada em termos de seus pares autovalor–autovetor
\((\hat{\lambda}_1, \hat{\mathbf{e}}_1),
(\hat{\lambda}_2, \hat{\mathbf{e}}_2), \ldots, (\hat{\lambda}_p,
\hat{\mathbf{e}}_p)\), com \(\hat{\lambda}_1 \ge \hat{\lambda}_2 \ge \cdots \ge
\hat{\lambda}_p>0\).
Seja \(m < p\) o número de fatores comuns. Então, a matriz de cargas fatoriais estimadas \(\left\{\tilde{\ell}_{ij}\right\}\) é dada por
\[ \underset{p\times m}{\tilde{\mathbf{L}}} = \begin{bmatrix} \sqrt{\hat{\lambda}_1}\,\hat{\mathbf{e}}_1 & \sqrt{\hat{\lambda}_2}\,\hat{\mathbf{e}}_2 & \cdots & \sqrt{\hat{\lambda}_m}\,\hat{\mathbf{e}}_m \end{bmatrix} \tag{9-15} \]
As variâncias específicas estimadas são fornecidas pelos elementos
diagonais da matriz
\(\mathbf{s} -
\tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime}\), de modo que
\[ \underset{p\times p}{\tilde{\boldsymbol{\Psi}}} = \begin{bmatrix} \tilde{\psi}_1 & 0 & \cdots & 0 \\ 0 & \tilde{\psi}_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \tilde{\psi}_p \end{bmatrix}, \qquad \tilde{\psi}_i = s_{ii} - \sum_{j=1}^{m} \tilde{\ell}_{ij}^2 \tag{9-16} \]
As comunalidades são estimadas por
\[ \tilde{h}_i^2 = \sum_{j=1}^{m} \tilde{\ell}_{ij}^2 \tag{9-17} \]
A análise fatorial por componentes principais da matriz de correlação amostral é obtida substituindo-se \(\mathbf{r}\) no lugar de \(\mathbf{s}\).
Na solução por componentes principais, as cargas estimadas para um dado fator não mudam quando o número de fatores é aumentado.
Por exemplo, se \(m = 1\),
\[ \tilde{\mathbf{L}} = \left[\sqrt{\hat{\lambda}_1}\,\hat{\mathbf{e}}_1\right] \]
e, se \(m = 2\),
\[ \tilde{\mathbf{L}} = \left[\sqrt{\hat{\lambda}_1}\,\hat{\mathbf{e}}_1 \quad\sqrt{\hat{\lambda}_2}\,\hat{\mathbf{e}}_2\right] \]
sendo que \((\hat{\lambda}_1, \hat{\mathbf{e}}_1)\) e \((\hat{\lambda}_2, \hat{\mathbf{e}}_2)\) são os dois primeiros pares autovalor–autovetor de \(\mathbf{s}\) (ou \(\mathbf{r}\)).
Pela definição de \(\tilde{\psi}_i\), os elementos diagonais de \(\mathbf{s}\) são iguais aos elementos diagonais de \(\tilde{\mathbf{s}}=\tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} + \tilde{\boldsymbol{\Psi}}\).
No entanto, os elementos fora da diagonal de \(\mathbf{s}\) geralmente não são reproduzidos por \(\tilde{\mathbf{s}}=\tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} + \tilde{\boldsymbol{\Psi}}\).
A questão prática, então, é:
Como escolher o número de fatores \(m\)?
Se o número de fatores comuns não for determinado a priori (por teoria ou trabalhos prévios), a escolha de \(m\) pode ser baseada nos autovalores estimados, de modo análogo à análise de componentes principais.
Considera-se a matriz residual
\[ \mathbf{s} - (\tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} + \tilde{\boldsymbol{\Psi}})= \mathbf{s} -\tilde{\mathbf{s}} \tag{9-18} \]
resultante da aproximação de \(\mathbf{s}\) pela solução de componentes principais.
Os elementos diagonais dessa matriz são zero, e, se os demais elementos também forem pequenos, o modelo com \(m\) fatores pode ser considerado adequado.
Analiticamente, temos
\[ \text{Soma dos quadrados dos elementos de }\mathbf{s} -\tilde{\mathbf{s}} \le \sum_{i=m}^{p}{\hat{\lambda}_{i+1}^2} \tag{9-19} \]
Um valor pequeno para a soma dos quadrados dos autovalores negligenciados implica erros de aproximação igualmente pequenos.
Idealmente, os primeiros fatores comuns devem explicar uma proporção substancial da variância amostral das variáveis.
A contribuição do primeiro fator comum para a variância amostral \(s_{ii}\) é \(\tilde{\ell}_{i1}^2\).
A contribuição para a variância amostral total
\[ \text{tr}(\mathbf{s})=\sum_{i=1}^{p}{s_{ii}}, \] do primeiro fator comum é então:
\[ \sum_{j=1}^{p} \tilde{\ell}_{j1}^2=\hat{\lambda}_1 \]
Em geral, a proporção da variância amostral total explicada pelo j‑ésimo fator é dada por
\[ \text{Prop da var tot devido ao j‑ésimo fator} = \begin{cases} \dfrac{\hat{\lambda}_j}{\sum_{i=1}^{p}{s_{ii}}}, & \text{se } \mathbf{s} \\[8pt] \dfrac{\hat{\lambda}_j}{p}, & \text{se } \mathbf{r} \end{cases} \tag{9-20} \]
O critério (9‑20) é frequentemente usado como regra heurística para determinar o número adequado de fatores comuns.
Um número apropriado de fatores é aquele que explica uma proporção “suficiente” da variância total.
Outra convenção, comum em programas computacionais, é definir \(m\) igual ao número de autovalores positivos de \(\mathbf{s}\) ou ao número de autovalores de \(\mathbf{r}\) maiores que 1.
Essas regras devem ser aplicadas com cautela: o ideal é reter poucos fatores que ofereçam interpretação satisfatória e bom ajuste aos dados.
Em um estudo de preferência do consumidor, uma amostra aleatória de clientes avaliou vários atributos de um novo produto.
As respostas, em uma escala diferencial semântica de 7 pontos, foram tabuladas e construída a matriz de correlação dos atributos:
\[ \mathbf{r}=\begin{bmatrix} 1.00 & 0.02 & 0.96 & 0.42 & 0.01 \\ 0.02 & 1.00 & 0.13 & 0.71 & 0.85 \\ 0.96 & 0.13 & 1.00 & 0.50 & 0.11 \\ 0.42 & 0.71 & 0.50 & 1.00 & 0.79 \\ 0.01 & 0.85 & 0.11 & 0.79 & 1.00 \end{bmatrix} \]
Os valores destacados na matriz mostram que as variáveis (1, 3) e (2, 5) formam grupos, enquanto a variável 4 está mais próxima do grupo (2, 5) do que do grupo (1, 3).
Diante desses resultados e do pequeno número de variáveis, espera-se que as relações lineares observadas possam ser explicadas por, no máximo, dois ou três fatores comuns.
Os dois primeiros autovalores da matriz \(\mathbf{r}\) são \(\hat{\lambda}_1 = 2.85\) e \(\hat{\lambda}_2 = 1.81\), sendo os únicos maiores que 1.
Portanto, \(m = 2\) fatores comuns explicam uma proporção acumulada de
\[ \dfrac{\hat{\lambda}_1 + \hat{\lambda}_2}{p} = \dfrac{2.85 + 1.81}{5} = 0.93 \]
isto é, 93% da variância amostral total (padronizada).
As cargas fatoriais, comunalidades e variâncias específicas estimadas usando (9‑15), (9‑16) e (9‑17) são apresentadas na Tabela 9.1.
A tabela a seguir apresenta as cargas fatoriais estimadas \(\tilde{\ell}_{ij} =
\sqrt{\hat{\lambda}_i}\,\hat{e}_{ij}\),
as comunalidades \(\tilde{h}_i^2\), e
as variâncias específicas \(\tilde{\psi}_i = 1
- \tilde{h}_i^2\) obtidas no Exemplo 9.3.
Tabela 9.1: Cargas fatoriais, comunalidades e variâncias específicas
| Variável | \(F_1\) | \(F_2\) | \(\tilde{h}_i^2\) | \(\tilde{\psi}_i\) |
|---|---|---|---|---|
| 1. Gosto | .56 | .82 | .98 | .02 |
| 2. Bom custo-benefício | .78 | -.53 | .88 | .12 |
| 3. Sabor | .65 | .75 | .98 | .02 |
| 4. Adequado para lanche | .94 | -.10 | .89 | .11 |
| 5. Fornece energia | .80 | -.54 | .93 | .07 |
Autovalores: 2.85, 1.81
Proporção acumulada da variância amostral total (padronizada):
As altas comunalidades indicam que os dois fatores explicam grande
parte da variância das cinco variáveis observadas,
confirmando que um modelo com dois fatores ortogonais é suficiente para
representar adequadamente as correlações originais.
Verificação da reconstituição da matriz de correlação:
\[ \begin{align} \tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} + \tilde{\boldsymbol{\Psi}} &= \begin{bmatrix} .56 & .82 \\ .78 & -.53 \\ .65 & .75 \\ .94 & -.10 \\ .80 & -.54 \end{bmatrix} \begin{bmatrix} .56 & .78 & .65 & .94 & .80 \\ .82 & -.53 & .75 & -.10 & -.54 \end{bmatrix} +\\ &\qquad\begin{bmatrix} .02 & 0 & 0 & 0 & 0 \\ 0 & .12 & 0 & 0 & 0 \\ 0 & 0 & .02 & 0 & 0 \\ 0 & 0 & 0 & .11 & 0 \\ 0 & 0 & 0 & 0 & .07 \end{bmatrix}\\ \tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} + \tilde{\boldsymbol{\Psi}}&= \begin{bmatrix} 1.00 & .01 & .97 & .44 & .00 \\ .01 & 1.00 & .11 & .79 & .91 \\ .97 & .11 & 1.00 & .53 & .11 \\ .44 & .79 & .53 & 1.00 & .81 \\ .00 & .91 & .11 & .81 & 1.00 \end{bmatrix} \end{align} \]
A matriz resultante reproduz quase exatamente a matriz de correlação \(\mathbf{r}\).
Assim, de forma descritiva, um modelo com dois fatores fornece um bom ajuste aos dados.
As comunalidades (.98, .88, .98, .89, .93) indicam que os dois fatores explicam grande parte da variância amostral de cada variável.
A interpretação dos fatores não é feita neste ponto, pois, como discutido na Seção 9.2, as cargas fatoriais são únicas apenas até uma rotação ortogonal. A rotação frequentemente revela uma estrutura mais simples e facilita a interpretação — esse exemplo será retomado após a discussão sobre rotação fatorial (Exemplo 9.9 e Painel 9.1).
Note que a matriz de correlação não é homogênea. Isso sugere a existência de mais de um fator comum.
No contexto de análise de componentes principais (PCA), é possível interpretar as duas componentes principais extraídas. A primeira componente principal expressa um índice geral de preferência do consumidor (cargas fatoriais elevadas e positivas). A segunda componente principal expressa um índice que contrapõe preferência hedônica (carga fatorial positiva) e preferência econômica (carga fatorial positiva).
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
r <- matrix(c(
1.00, 0.02, 0.96, 0.42, 0.01,
0.02, 1.00, 0.13, 0.71, 0.85,
0.96, 0.13, 1.00, 0.50, 0.11,
0.42, 0.71, 0.50, 1.00, 0.79,
0.01, 0.85, 0.11, 0.79, 1.00
), nrow = 5, byrow = TRUE)
colnames(r) <- rownames(r) <- c("Gosto", "CustoBenef", "Sabor", "Lanche", "Energia")
print(r) Gosto CustoBenef Sabor Lanche Energia
Gosto 1.00 0.02 0.96 0.42 0.01
CustoBenef 0.02 1.00 0.13 0.71 0.85
Sabor 0.96 0.13 1.00 0.50 0.11
Lanche 0.42 0.71 0.50 1.00 0.79
Energia 0.01 0.85 0.11 0.79 1.00
n <- 200
p <- dim(r)[1]
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 200 p = 5 m = 2 df = 1
print(
GGally::ggcorr(data=NULL,
name="Preferência do Consumidor",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)## 1) calcular um layout fixo sem plotar
set.seed(123) # só para o layout ser reprodutível
q_tmp <- qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = "spring",
DoNotPlot = TRUE # <- calcula, mas não desenha
)
layout_fix <- q_tmp$layout # <- matriz de coordenadas dos nós
## 2) rede de correlações, agora usando layout_fix
qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = layout_fix, # <- aqui entra o layout fixo
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (cor)",
details = FALSE
)## 3) rede glasso, com o MESMO layout
suppressWarnings(qgraph::qgraph(
r,
graph = "glasso",
sampleSize = n,
layout = layout_fix, # <- mesmo layout, só mudam as arestas
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (glasso)",
details = FALSE
))Note: Network with lowest lambda selected as best network: assumption of sparsity might be violated.
eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 2.853
2 2 1.806
3 3 0.204
4 4 0.102
5 5 0.034
plot(lambda,
main="Preferência do Consumidor (cor)",
xlab="Componente", ylab="Autovalor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 2.85/1.81 ~ 1.58
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible first order model, av1/av2 <= 2
# Matriz de cargas: j-ésima coluna = sqrt(lambda_j) * e_j
L <- cbind( sqrt(lambda[1]) * E[,1], sqrt(lambda[2]) * E[,2] )
colnames(L) <- paste0("F", 1:m)
rownames(L) <- rownames(r)
print(L, digits=3) F1 F2
Gosto 0.560 -0.816
CustoBenef 0.777 0.524
Sabor 0.645 -0.748
Lanche 0.939 0.105
Energia 0.798 0.543
h2 <- rowSums(L^2)
psi <- 1 - h2
prop1 <- lambda[1] / nrow(r) # proporção explicada pelo 1º fator
prop2 <- sum(lambda[1:2]) / nrow(r) # proporção acumulada por 2 fatores
print(round(c(prop1 = prop1, prop2 = prop2), 3))prop1 prop2
0.571 0.932
Load_F1 Load_F2 h2 psi
Gosto 0.56 -0.82 0.98 0.02
CustoBenef 0.78 0.52 0.88 0.12
Sabor 0.65 -0.75 0.98 0.02
Lanche 0.94 0.10 0.89 0.11
Energia 0.80 0.54 0.93 0.07
r_hat <- tcrossprod(L) + diag(psi)
colnames(r_hat) <- rownames(r_hat) <- rownames(r)
round(r_hat, 2) Gosto CustoBenef Sabor Lanche Energia
Gosto 1.00 0.01 0.97 0.44 0.00
CustoBenef 0.01 1.00 0.11 0.78 0.91
Sabor 0.97 0.11 1.00 0.53 0.11
Lanche 0.44 0.78 0.53 1.00 0.81
Energia 0.00 0.91 0.11 0.81 1.00
Gosto CustoBenef Sabor Lanche Energia
Gosto 0.000 0.013 -0.012 -0.020 0.006
CustoBenef 0.013 0.000 0.020 -0.075 -0.055
Sabor -0.012 0.020 0.000 -0.028 0.001
Lanche -0.020 -0.075 -0.028 0.000 -0.017
Energia 0.006 -0.055 0.001 -0.017 0.000
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "none",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "none", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
PC1 PC2 h2 u2 com
Gosto 0.56 0.82 0.98 0.021 1.8
CustoBenef 0.78 -0.52 0.88 0.121 1.8
Sabor 0.65 0.75 0.98 0.024 2.0
Lanche 0.94 -0.10 0.89 0.107 1.0
Energia 0.80 -0.54 0.93 0.068 1.8
PC1 PC2
SS loadings 2.85 1.81
Proportion Var 0.57 0.36
Cumulative Var 0.57 0.93
Proportion Explained 0.61 0.39
Cumulative Proportion 0.61 1.00
Mean item complexity = 1.7
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.03
with the empirical chi square 4.34 with prob < 0.037
Fit based upon off diagonal values = 1
Loadings:
PC1 PC2
CustoBenef 0.78 -0.52
Lanche 0.94 -0.10
Energia 0.80 -0.54
Gosto 0.56 0.82
Sabor 0.65 0.75
PC1 PC2
SS loadings 2.85 1.81
Proportion Var 0.57 0.36
Cumulative Var 0.57 0.93
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "none",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="path",
whatLabels="no",
rotation=2,
residuals=TRUE,
edge.color="black",
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
sizeInt=4,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)Nota: 1. Esta é a solução por componentes principais: não há rotação e os fatores são construídos diretamente dos dois maiores autovalores/autovetores da matriz de correlação.
\[\Diamond\]
Conjuntos de dados de preço de ações consistindo de \(n=100\) taxas semanais de retorno em \(p=5\) ações foram introduzidos no Exemplo 8.5. Nesse exemplo, as duas primeiras componentes principais amostrais foram obtidas a partir de \(\mathbf{r}\). Tomando \(m=1\) e \(m=2\), podemos facilmente obter soluções de componentes principais para o modelo fatorial ortogonal. Especificamente, as cargas fatoriais estimadas são os coeficientes das componentes principais amostrais (autovetores de \(\mathbf{r}\)), escalonados pela raiz quadrada dos autovalores correspondentes. As cargas fatoriais estimadas, comunalidades, variâncias específicas e a proporção da variância amostral total (padronizada) explicada por cada fator para as soluções com \(m=1\) e \(m=2\) estão na Tabela 9.2. Assim, por exemplo, com \(m=2\),
\[ \tilde{h}_1^2 \;=\; (.723)^2 + (-.437)^2 \;=\; .73 \]
A matriz residual correspondente à solução com \(m=2\) fatores é
\[ \mathbf{r} - \tilde{\mathbf{r}} = \mathbf{r} - \tilde{\mathbf{L}}\,\tilde{\mathbf{L}}^{\prime} - \tilde{\boldsymbol{\Psi}} = \begin{bmatrix} 0.000 & -0.099 & -0.185 & -0.025 & 0.056\\ -0.099 & 0.000 & -0.134 & 0.014 & -0.054\\ -0.185 & -0.134 & 0.000 & 0.003 & 0.006\\ -0.025 & 0.014 & 0.003 & 0.000 & -0.156\\ 0.056 & -0.054 & 0.006 & -0.156 & 0.000 \end{bmatrix} \]
A proporção da variância total explicada pela solução com dois fatores é apreciavelmente maior do que pela solução com um fator. No entanto, para \(m=2\), \(\tilde{\mathbf{L}}\,\tilde{\mathbf{L}}^{\prime}\) produz números que são, em geral, maiores do que as correlações amostrais. Isso é particularmente verdadeiro para \(r_{45}\).
Parece bastante claro que o primeiro fator, \(F_1\), representa condições econômicas gerais e pode ser chamado de fator de mercado. Todas as ações carregam fortemente neste fator, e as cargas são aproximadamente iguais. O segundo fator contrasta as ações químicas com as ações de petróleo. (As químicas têm cargas relativamente grandes e negativas, e as de petróleo têm grandes cargas positivas neste fator.) Assim, \(F_2\) parece diferenciar ações em diferentes indústrias e pode ser chamado de fator de indústria. Em resumo, as taxas de retorno parecem ser determinadas por condições gerais de mercado e atividades que são exclusivas das diferentes indústrias, bem como por um fator residual ou específico da empresa. Essa é essencialmente a mesma conclusão alcançada pelo exame das componentes principais amostrais no Exemplo 8.5.
Tabela 9.2: Cargas fatoriais, comunalidades e variâncias específicas (soluções \(m=1\) e \(m=2\))
| Variável | Solução de 1 fator | Solução de 2 fatores | ||
|---|---|---|---|---|
| Cargas fatoriais estimadas \(F_1\) | Variâncias específicas \(\tilde{\psi}_i = 1 - \tilde{h}_i^2\) | Cargas fatoriais estimadas \(F_1\) | Cargas fatoriais estimadas \(F_2\) | |
| 1. J P Morgan | .732 | .46 | .732 | −.437 |
| 2. Citibank | .831 | .31 | .831 | −.280 |
| 3. Wells Fargo | .726 | .47 | .726 | −.374 |
| 4. Royal Dutch Shell | .605 | .63 | .605 | .694 |
| 5. ExxonMobil | .563 | .68 | .563 | .719 |
Proporção cumulativa da variância total (padronizada) explicada:
Solução de um fator: .487
Solução de dois fatores: .769
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
vars n mean sd median trimmed mad min max range skew
JPM 1 103 0.0011 0.0208 0.0034 0.0013 0.0217 -0.0459 0.0485 0.0943 -0.1128
Citi 2 103 0.0007 0.0209 0.0017 0.0002 0.0207 -0.0598 0.0525 0.1123 0.0893
WF 3 103 0.0016 0.0150 0.0003 0.0010 0.0130 -0.0362 0.0407 0.0769 0.3222
RDS 4 103 0.0040 0.0269 0.0063 0.0045 0.0245 -0.0539 0.0620 0.1159 -0.1267
EM 5 103 0.0040 0.0277 0.0052 0.0045 0.0249 -0.0636 0.0784 0.1420 -0.1173
kurtosis se
JPM -0.5367 0.0021
Citi 0.3767 0.0021
WF 0.0108 0.0015
RDS -0.4341 0.0026
EM 0.3017 0.0027
print(
GGally::ggcorr(data=NULL,
name="Taxa de retorno de ação EUA (cor)",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)## 1) calcular um layout fixo sem plotar
set.seed(123) # só para o layout ser reprodutível
q_tmp <- qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = "spring",
DoNotPlot = TRUE # <- calcula, mas não desenha
)
layout_fix <- q_tmp$layout # <- matriz de coordenadas dos nós
## 2) rede de correlações, agora usando layout_fix
qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = layout_fix, # <- aqui entra o layout fixo
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (cor)",
details = FALSE
)## 3) rede glasso, com o MESMO layout
suppressWarnings(qgraph::qgraph(
r,
graph = "glasso",
sampleSize = n,
layout = layout_fix, # <- mesmo layout, só mudam as arestas
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (glasso)",
details = FALSE
))eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 2.44
2 2 1.41
3 3 0.50
4 4 0.40
5 5 0.26
plot(lambda,
xlab="Componente", ylab="Autovalor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 2.44/1.41 ~ 1.73
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible first order model, av1/av2 <= 2
# Matriz de cargas: j-ésima coluna = sqrt(lambda_j) * e_j
L <- cbind( sqrt(lambda[1]) * E[,1], sqrt(lambda[2]) * E[,2] )
colnames(L) <- paste0("F", 1:m)
rownames(L) <- rownames(r)
print(L, digits=3) F1 F2
JPM -0.732 0.437
Citi -0.831 0.280
WF -0.726 0.374
RDS -0.605 -0.694
EM -0.563 -0.719
h2 <- rowSums(L^2)
psi <- 1 - h2
prop1 <- lambda[1] / nrow(r) # proporção explicada pelo 1º fator
prop2 <- sum(lambda[1:2]) / nrow(r) # proporção acumulada por 2 fatores
print(round(c(prop1 = prop1, prop2 = prop2), 3))prop1 prop2
0.487 0.769
Load_F1 Load_F2 h2 psi
JPM -0.732 0.437 0.727 0.273
Citi -0.831 0.280 0.770 0.230
WF -0.726 0.374 0.667 0.333
RDS -0.605 -0.694 0.847 0.153
EM -0.563 -0.719 0.834 0.166
r_hat <- tcrossprod(L) + diag(psi)
colnames(r_hat) <- rownames(r_hat) <- rownames(r)
round(r_hat, 3) JPM Citi WF RDS EM
JPM 1.000 0.731 0.695 0.140 0.099
Citi 0.731 1.000 0.708 0.308 0.266
WF 0.695 0.708 1.000 0.180 0.140
RDS 0.140 0.308 0.180 1.000 0.839
EM 0.099 0.266 0.140 0.839 1.000
JPM Citi WF RDS EM
JPM 0.000 -0.099 -0.185 -0.025 0.056
Citi -0.099 0.000 -0.134 0.014 -0.054
WF -0.185 -0.134 0.000 0.003 0.006
RDS -0.025 0.014 0.003 0.000 -0.156
EM 0.056 -0.054 0.006 -0.156 0.000
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "none",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "none", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
PC1 PC2 h2 u2 com
JPM 0.7323 -0.4365 0.7268 0.2732 1.631
Citi 0.8312 -0.2805 0.7695 0.2305 1.225
WF 0.7262 -0.3739 0.6671 0.3329 1.495
RDS 0.6047 0.6940 0.8473 0.1527 1.963
EM 0.5631 0.7186 0.8335 0.1665 1.892
PC1 PC2
SS loadings 2.4373 1.4070
Proportion Var 0.4875 0.2814
Cumulative Var 0.4875 0.7689
Proportion Explained 0.6340 0.3660
Cumulative Proportion 0.6340 1.0000
Mean item complexity = 1.6
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.0965
with the empirical chi square 19.1658 with prob < 1.198e-05
Fit based upon off diagonal values = 0.9452
Loadings:
PC1 PC2
JPM 0.7323 -0.4365
Citi 0.8312 -0.2805
WF 0.7262 -0.3739
RDS 0.6047 0.6940
EM 0.5631 0.7186
PC1 PC2
SS loadings 2.4373 1.4070
Proportion Var 0.4875 0.2814
Cumulative Var 0.4875 0.7689
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "none",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="path",
whatLabels="no",
rotation=2,
residuals=TRUE,
edge.color="black",
edge.label.cex=1,
nCharNodes=4,
sizeLat=10,
sizeMan=10,
sizeInt=4,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)A seguir são apresentados resultados de análise fatorial ortogonal usando matriz de covariância.
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
JPM Citi WF RDS EM
JPM 4.33e-04 0.000276 1.59e-04 6.41e-05 8.90e-05
Citi 2.76e-04 0.000439 1.80e-04 1.81e-04 1.23e-04
WF 1.59e-04 0.000180 2.24e-04 7.34e-05 6.05e-05
RDS 6.41e-05 0.000181 7.34e-05 7.22e-04 5.08e-04
EM 8.90e-05 0.000123 6.05e-05 5.08e-04 7.66e-04
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
corrplot::corrplot(corr=r,
is.corr=TRUE,
#method="number",
diag=FALSE,
title="Taxa de retorno de ação EUA: cor",
order="hclust",
hclust.method="ward.D",
tl.col="black",
addrect=2)corrplot::corrplot(corr=s,
is.corr=FALSE,
#method="number",
diag=TRUE,
title="Taxa de retorno de ação EUA: cov",
order="hclust",
hclust.method="ward.D",
tl.col="black",
addrect=2)eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 2.44
2 2 1.41
3 3 0.50
4 4 0.40
5 5 0.26
plot(lambda,
xlab="Componente", ylab="Autovalor: cor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 2.44/1.41 ~ 1.73
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible first order model, av1/av2 <= 2
eig <- eigen(s, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 0.00137
2 2 0.00070
3 3 0.00025
4 4 0.00014
5 5 0.00012
plot(lambda,
xlab="Componente", ylab="Autovalor: cov",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 0/0 ~ 1.95
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible first order model, av1/av2 <= 2
pca.m2 <- psych::principal(r = s,
covar = TRUE,
nfactors = 2,
rotate = "none",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = s, nfactors = 2, rotate = "none", n.obs = n,
covar = TRUE)
Unstandardized loadings (pattern matrix) based upon covariance matrix
PC1 PC2 h2 u2 H2 U2
JPM 0.0082 0.0166 0.0003420 9.128e-05 0.7893 0.2107
Citi 0.0114 0.0151 0.0003573 8.145e-05 0.8143 0.1857
WF 0.0057 0.0091 0.0001160 1.080e-04 0.5179 0.4821
RDS 0.0236 -0.0066 0.0006015 1.210e-04 0.8325 0.1675
EM 0.0241 -0.0085 0.0006521 1.136e-04 0.8516 0.1484
PC1 PC2
SS loadings 0.0014 0.0007
Proportion Var 0.5293 0.2713
Cumulative Var 0.5293 0.8006
Proportion Explained 0.6611 0.3389
Cumulative Proportion 0.6611 1.0000
Standardized loadings (pattern matrix)
item PC1 PC2 h2 u2
JPM 1 0.3959 0.7954 0.7893 0.2107
Citi 2 0.5426 0.7211 0.8143 0.1857
WF 3 0.3826 0.6095 0.5179 0.4821
RDS 4 0.8791 -0.2443 0.8325 0.1675
EM 5 0.8699 -0.3080 0.8516 0.1484
PC1 PC2
SS loadings 2.1271 1.6786
Proportion Var 0.4254 0.3357
Cumulative Var 0.4254 0.7611
Cum. factor Var 0.5589 1.0000
Mean item complexity = 1.5
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0
with the empirical chi square 0 with prob < 0.9983
Fit based upon off diagonal values = 1
Loadings:
PC1 PC2
JPM 0.0082 0.0166
Citi 0.0114 0.0151
WF 0.0057 0.0091
RDS 0.0236 -0.0066
EM 0.0241 -0.0085
PC1 PC2
SS loadings 0.0014 7e-04
Proportion Var 0.0003 1e-04
Cumulative Var 0.0003 4e-04
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = s,
n.obs = n,
rotation = "none",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="path",
whatLabels="no",
rotation=2,
residuals=TRUE,
edge.color="black",
edge.label.cex=1,
nCharNodes=4,
sizeLat=10,
sizeMan=10,
sizeInt=4,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)Se os fatores comuns \(\mathbf{F}\) e os fatores específicos \(\boldsymbol{\varepsilon}\) puderem ser assumidos como normalmente distribuídos, então podem ser obtidas estimativas de máxima verossimilhança das cargas fatoriais e das variâncias específicas. Quando \(\mathbf{F}_j\) e \(\boldsymbol{\varepsilon}_j\) são conjuntamente normais, as observações
\[ \mathbf{X}_j - \boldsymbol{\mu} = \mathbf{L}\mathbf{F}_j + \boldsymbol{\varepsilon}_j \]
também são normais, e a partir de (4–16), a verossimilhança é
\[ \begin{align} \ell(\boldsymbol{\mu}, \boldsymbol{\Sigma}) &= ((2\pi)^{p} |\boldsymbol{\Sigma}|)^{-\frac{n}{2}} \times \\ &\exp \left(-\frac{1}{2}\mathrm{tr}\left(\boldsymbol{\Sigma}^{-1}\left(\sum_{j=1}^{n}(\mathbf{x}_j - \bar{\mathbf{x}})(\mathbf{x}_j - \bar{\mathbf{x}})^{\prime} + n(\bar{\mathbf{x}} - \boldsymbol{\mu})(\bar{\mathbf{x}} - \boldsymbol{\mu})^{\prime}\right)\right)\right) \\ \ell(\boldsymbol{\mu}, \boldsymbol{\Sigma}) &= ((2\pi)^{p} |\boldsymbol{\Sigma}|)^{-\frac{n-1}{2}}\times\\ &\quad\exp \left(-\frac{1}{2}\mathrm{tr}\left(\boldsymbol{\Sigma}^{-1}\left(\sum_{j=1}^{n}(\mathbf{x}_j - \bar{\mathbf{x}})(\mathbf{x}_j - \bar{\mathbf{x}})^{\prime}\right)\right)\right) \times \\ &\qquad ((2\pi)^{p} |\boldsymbol{\Sigma}|)^{-\frac{1}{2}}\times\\ &\quad\exp \left(-\frac{n}{2}(\bar{\mathbf{x}} - \boldsymbol{\mu})^{\prime}\boldsymbol{\Sigma}^{-1}(\bar{\mathbf{x}} - \boldsymbol{\mu})\right)\\ \ell(\boldsymbol{\mu}, \mathbf{L}, \boldsymbol{\Psi}) &= ((2\pi)^{p} |\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}|)^{-\frac{n-1}{2}}\times\\ &\quad\exp \left(-\frac{1}{2}\mathrm{tr}\left((\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi})^{-1}\left(\sum_{j=1}^{n}(\mathbf{x}_j - \bar{\mathbf{x}})(\mathbf{x}_j - \bar{\mathbf{x}})^{\prime}\right)\right)\right) \times \\ &\qquad ((2\pi)^{p} |\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}|)^{-\frac{1}{2}}\times\\ &\quad\exp \left(-\frac{n}{2}(\bar{\mathbf{x}} - \boldsymbol{\mu})^{\prime}(\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi})^{-1}(\bar{\mathbf{x}} - \boldsymbol{\mu})\right) \end{align} \tag{9–25} \]
o que depende de \(\mathbf{L}\) e
\(\boldsymbol{\Psi}\) através de \(\boldsymbol{\Sigma} =
\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\).
Este modelo ainda não está bem definido, devido à multiplicidade de
escolhas para \(\mathbf{L}\) tornada
possível por transformações ortogonais.
É desejável tornar \(\mathbf{L}\) bem definida impondo a condição de unicidade computacionalmente conveniente
\[ \mathbf{L}^{\prime}\boldsymbol{\Psi}^{-1}\mathbf{L} = \boldsymbol{\Delta} \tag{9–26} \]
sendo que \(\boldsymbol{\Delta}\) é uma matriz diagonal.
As estimativas de máxima verossimilhança \(\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}\) devem ser obtidas por maximização numérica de (9–25).
Felizmente, programas de computador eficientes já existem que permitem obter essas estimativas com bastante facilidade.
Resumimos agora alguns fatos sobre estimadores de máxima verossimilhança, e, por ora, confiamos no computador para realizar os detalhes numéricos.
Resultado 9.1. Sejam \(\mathbf{X}_1, \mathbf{X}_2, \ldots,
\mathbf{X}_n\) uma amostra aleatória de \(\mathcal{N}_p(\boldsymbol{\mu},
\boldsymbol{\Sigma})\), sendo que \(\boldsymbol{\Sigma} =
\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\) é a matriz de
covariância para o modelo de \(m\)
fatores comuns de (9–4).
Os estimadores de máxima verossimilhança \(\hat{\mathbf{L}}\), \(\hat{\boldsymbol{\Psi}}\) e \(\hat{\boldsymbol{\mu}} = \bar{\mathbf{x}}\)
maximizam (9–25) sujeitos à condição \(\hat{\mathbf{L}}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\hat{\mathbf{L}}\)
ser diagonal.
As estimativas de máxima verossimilhança das comunalidades são
\[ \hat{h}_i^2 = \sum_{j=1}^{m}{\hat{\ell}_{ij}^2}, \quad \text{para } i = 1, 2, \ldots, p \tag{9–27} \]
Assim,
\[ \text{Prop var amostral tot devida ao } j\text{-ésimo fator} = \dfrac{\sum_{i=1}^{p}{\hat{\ell}_{ij}^2}}{\sum_{i=1}^{p}{s_{ii}}} \tag{9–28} \]
Demonstração:
Pela propriedade de invariância das estimativas de máxima verossimilhança (ver Seção 4.3), as funções de \(\mathbf{L}\) e \(\boldsymbol{\Psi}\) são estimadas pelas mesmas funções de \(\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}\).
Em particular, as comunalidades \(h_i^2 = \sum_{j=1}^{m}{\ell_{ij}^2}\) têm como estimativas de máxima verossimilhança \(\hat{h}_i^2 = \sum_{j=1}^{m}{\hat{\ell}_{ij}^2}\).
\[\Diamond\]
Se, como em (8–10), as variáveis forem padronizadas de modo que \(\mathbf{z} = \mathbf{V}^{-1/2}(\mathbf{x} - \boldsymbol{\mu})\), então a matriz de covariância \(\boldsymbol{\rho}\) de \(\mathbf{z}\) tem a representação
\[ \boldsymbol{\rho} = \mathbf{V}^{-1/2}\boldsymbol{\Sigma}\mathbf{V}^{-1/2} = (\mathbf{V}^{-1/2}\mathbf{L})(\mathbf{V}^{-1/2}\mathbf{L})^{\prime} + \mathbf{V}^{-1/2}\boldsymbol{\Psi}\mathbf{V}^{-1/2} \tag{9–29} \]
Assim, \(\boldsymbol{\rho}\) possui uma fatoração análoga à de (9–5) com matriz de cargas \(\mathbf{L}_z = \mathbf{V}^{-1/2}\mathbf{L}\) e matriz de variâncias específicas \(\boldsymbol{\Psi}_z = \mathbf{V}^{-1/2}\boldsymbol{\Psi}\mathbf{V}^{-1/2}\).
Pela propriedade de invariância dos estimadores de máxima verossimilhança, o estimador de máxima verossimilhança da matriz \(\boldsymbol{\rho}\) é
\[ \hat{\boldsymbol{\rho}} = (\hat{\mathbf{V}}^{-1/2}\hat{\mathbf{L}})(\hat{\mathbf{V}}^{-1/2}\hat{\mathbf{L}})^{\prime} + \hat{\mathbf{V}}^{-1/2}\hat{\boldsymbol{\Psi}}\hat{\mathbf{V}}^{-1/2} = \hat{\mathbf{L}}_z\hat{\mathbf{L}}_z^{\prime} + \hat{\boldsymbol{\Psi}}_z \tag{9–30} \]
sendo que \(\hat{\mathbf{V}}^{-1/2}\) e \(\hat{\mathbf{L}}\) são os estimadores de máxima verossimilhança de \(\mathbf{V}^{-1/2}\) e \(\mathbf{L}\), respectivamente. (Ver Suplemento 9A.)
Como consequência da fatoração em (9–30), sempre que a análise de máxima verossimilhança se refere à matriz de correlação, chamamos
\[ \hat{h}_i^2 = \sum_{j=1}^{m}{\hat{\ell}_{ij}^2}, \quad i = 1, 2, \ldots, p \tag{9–31} \]
as estimativas de máxima verossimilhança das comunalidades,
e avaliamos a importância dos fatores com base em
\[ \text{Prop var amostral tot (padron) devido ao } j\text{-ésimo fator} = \dfrac{\sum_{i=1}^{p}{\hat{\ell}_{ij}^2}}{p} \tag{9–32} \]
Para evitar notações tediosas, os \(\hat{\ell}_{ij}\) precedentes denotam os elementos de \(\hat{\mathbf{L}}_z\).
Comentário. Normalmente, as observações são padronizadas e uma matriz de correlação amostral é analisada por fatores. A matriz de correlação amostral \(\mathbf{r}\) é inserida em \(((n-1)/n)\mathbf{s}\) na função de verossimilhança de (9–25), e as estimativas de máxima verossimilhança \(\hat{\mathbf{L}}_z\) e \(\hat{\boldsymbol{\Psi}}_z\) são obtidas usando um computador. Embora a verossimilhança em (9–25) seja apropriada para \(\mathbf{s}\), de forma surpreendente, essa prática é equivalente a obter as estimativas de máxima verossimilhança \(\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}\) com base na matriz de covariância amostral \(\mathbf{s}\), definindo \(\hat{\mathbf{L}}_z = \hat{\mathbf{V}}^{-1/2}\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}_z = \hat{\mathbf{V}}^{-1/2}\hat{\boldsymbol{\Psi}}\hat{\mathbf{V}}^{-1/2}\). Aqui, \(\hat{\mathbf{V}}^{-1/2}\) é a matriz diagonal com o recíproco dos desvios-padrão amostrais (calculados com divisor \(\sqrt{n}\)) na diagonal principal.
Indo na direção oposta, dadas as cargas fatoriais estimadas \(\hat{\mathbf{L}}_z\) e as variâncias específicas \(\hat{\boldsymbol{\Psi}}_z\) obtidas a partir de \(\mathbf{r}\), encontramos que as estimativas de máxima verossimilhança resultantes para uma análise fatorial da matriz de covariância \(((n-1)/n)\mathbf{s}\) são \(\hat{\mathbf{L}} = \hat{\mathbf{V}}^{1/2}\hat{\mathbf{L}}_z\) e \(\hat{\boldsymbol{\Psi}} = \hat{\mathbf{V}}^{1/2}\hat{\boldsymbol{\Psi}}_z\hat{\mathbf{V}}^{1/2}\), ou
\[ \hat{\ell}_{ij} = \hat{\ell}_{z,ij}\sqrt{\hat{\sigma}_{ii}} \quad \text{e} \quad \hat{\psi}_i = \hat{\psi}_{z,i}\hat{\sigma}_{ii} \]
sendo que \(\hat{\sigma}_{ii}\) é a variância amostral calculada com divisor \(n\).
A distinção entre divisores pode ser ignorada nas soluções de componentes principais.
\[\Diamond\]
A equivalência entre fatorar \(\mathbf{s}\) e \(\mathbf{r}\) tem sido, aparentemente, confundida em muitas discussões publicadas sobre análise fatorial. (Ver Suplemento 9A.)
Os dados de retornos de ações dos Exemplos 8.5 e 9.4 foram reanalisados supondo um modelo fatorial com \(m = 2\) fatores e utilizando o método de máxima verossimilhança. As cargas fatoriais estimadas, comunalidades, variâncias específicas e a proporção da variância amostral total (padronizada) explicada por cada fator estão na Tabela 9.3.
Os valores correspondentes para a solução com \(m = 2\) fatores obtida pelo método de componentes principais (ver Exemplo 9.4) também são apresentados. As comunalidades correspondentes à fatoração de máxima verossimilhança de \(\mathbf{r}\) são da forma [ver (9-31)]
\[ \hat{h}_i^{2} = \hat{\ell}_{i1}^{2} + \hat{\ell}_{i2}^{2} \]
Assim, por exemplo,
\[ \hat{h}_1^{2} = (.115)^{2} + (.765)^{2} = .58 \] Tabela 9.3
| Cargas fatoriais (ML) | Variâncias específicas | Cargas fatoriais (PC) | Variâncias específicas | |||
| Variável | \(F_1\) | \(F_2\) | \(\hat{\psi}_i = 1 - \hat{h}_i^{2}\) | \(F_1\) | \(F_2\) | \(\tilde{\psi}_i = 1 - \tilde{h}_i^{2}\) |
| 1. JP Morgan | .115 | .755 | .42 | .732 | -.437 | .27 |
| 2. Citibank | .322 | .788 | .27 | .831 | -.280 | .23 |
| 3. Wells Fargo | .182 | .652 | .54 | .726 | -.374 | .33 |
| 4. Royal Dutch Shell | 1.000 | -.000 | .00 | .605 | .694 | .15 |
| 5. ExxonMobil | .683 | -.032 | .53 | .563 | .719 | .17 |
| Proporção acumulada da variância amostral total (padronizada) explicada |
|---|
| Máxima verossimilhança: \(F_1 = .323,\quad F_1 & F_2 = .647\) |
| Componentes principais: \(F_1 = .487,\quad F_1 & F_2 = .769\) |
Nota. A solução de máxima verossimilhança apresenta um caso de Heywood: a variância específica estimada para Royal Dutch Shell é igual a \(0.00\), indicando que as equações de máxima verossimilhança produziram carga(s) fatoriais tais que uma variância específica deveria ser negativa. O software ajusta ligeiramente as cargas para manter \(\hat{\psi}_i > 0\).
A matriz residual é
\[ \mathbf{r} - \hat{\mathbf{r}} =\mathbf{r} - \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} - \hat{\boldsymbol{\Psi}} \;=\; \begin{bmatrix} 0 & .001 & -.002 & .000 & .052 \\ .001 & 0 & .002 & .000 & -.033 \\ -.002 & .002 & 0 & .000 & .001 \\ .000 & .000 & .000 & 0 & .000 \\ .052 & -.033 & .001 & .000 & 0 \end{bmatrix} \]
Os elementos de \(\mathbf{r} - \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} - \hat{\boldsymbol{\Psi}}\) são muito menores do que aqueles da matriz residual correspondente à fatoração por componentes principais de \(\mathbf{r}\) apresentada no Exemplo 9.4. Com essa base, preferimos o método de máxima verossimilhança e tipicamente o apresentamos em exemplos subsequentes.
A proporção cumulativa da variância total da amostra explicada pelos fatores é maior para a fatoração por componentes principais do que para a fatoração por máxima verossimilhança. Não é surpreendente que esse critério tipicamente favoreça a fatoração por componentes principais. Cargas fatoriais obtidas por uma análise fatorial por componentes principais estão relacionadas aos componentes principais, os quais, por construção, possuem uma propriedade de otimização de variância. [Ver a discussão anterior à equação (8-19).]
Focando na solução de máxima verossimilhança, observamos que todas as variáveis têm cargas positivas em \(F_{1}\). Chamamos esse fator de fator mercado, assim como fizemos na solução por componentes principais. A interpretação do segundo fator não é tão clara como aparentou ser na solução por componentes principais. As ações de bancos possuem cargas grandes e positivas, enquanto as ações de petróleo possuem cargas desprezíveis no segundo fator, \(F_{2}\). Nesta perspectiva, o segundo fator diferencia ações de bancos de ações de petróleo e poderia ser chamado de fator indústria. Alternativamente, o segundo fator poderia simplesmente ser chamado de fator setor setor bancário.
Os padrões das cargas fatoriais iniciais para a solução de máxima verossimilhança são restringidos pela condição de unicidade de que
\[ \hat{\mathbf{L}}^{\prime} \hat{\boldsymbol{\Psi}}^{-1} \hat{\mathbf{L}} \] seja uma matriz diagonal. Portanto, padrões fatoriais úteis frequentemente não são revelados até que os fatores sejam rotacionados (ver Seção 9.4).
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
vars n mean sd median trimmed mad min max range skew
JPM 1 103 0.0011 0.0208 0.0034 0.0013 0.0217 -0.0459 0.0485 0.0943 -0.1128
Citi 2 103 0.0007 0.0209 0.0017 0.0002 0.0207 -0.0598 0.0525 0.1123 0.0893
WF 3 103 0.0016 0.0150 0.0003 0.0010 0.0130 -0.0362 0.0407 0.0769 0.3222
RDS 4 103 0.0040 0.0269 0.0063 0.0045 0.0245 -0.0539 0.0620 0.1159 -0.1267
EM 5 103 0.0040 0.0277 0.0052 0.0045 0.0249 -0.0636 0.0784 0.1420 -0.1173
kurtosis se
JPM -0.5367 0.0021
Citi 0.3767 0.0021
WF 0.0108 0.0015
RDS -0.4341 0.0026
EM 0.3017 0.0027
print(
GGally::ggcorr(
data = NULL,
name = "Taxa de retorno de ação EUA (cor)",
cor_matrix = r,
geom = "tile",
min_size = 0,
max_size = 10,
nbreaks = 6,
digits = 2,
label = TRUE,
label_round= 2,
label_size = 4
)
)## 1) calcular um layout fixo sem plotar
set.seed(123) # só para o layout ser reprodutível
q_tmp <- qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = "spring",
DoNotPlot = TRUE # <- calcula, mas não desenha
)
layout_fix <- q_tmp$layout # <- matriz de coordenadas dos nós
## 2) rede de correlações, agora usando layout_fix
qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = layout_fix, # <- aqui entra o layout fixo
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (cor)",
details = FALSE
)## 3) rede glasso, com o MESMO layout
suppressWarnings(qgraph::qgraph(
r,
graph = "glasso",
sampleSize = n,
layout = layout_fix, # <- mesmo layout, só mudam as arestas
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Taxa de retorno de ação EUA (glasso)",
details = FALSE
))eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 2.44
2 2 1.41
3 3 0.50
4 4 0.40
5 5 0.26
plot(lambda,
xlab="Componente", ylab="Autovalor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 2.44/1.41 ~ 1.73
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible first order model, av1/av2 <= 2
# Matriz de cargas: j-ésima coluna = sqrt(lambda_j) * e_j
L <- cbind( sqrt(lambda[1]) * E[,1], sqrt(lambda[2]) * E[,2] )
colnames(L) <- paste0("F", 1:m)
rownames(L) <- rownames(r)
print(L, digits=3) F1 F2
JPM -0.732 0.437
Citi -0.831 0.280
WF -0.726 0.374
RDS -0.605 -0.694
EM -0.563 -0.719
h2 <- rowSums(L^2)
psi <- 1 - h2
prop1 <- lambda[1] / nrow(r) # proporção explicada pelo 1º fator
prop2 <- sum(lambda[1:2]) / nrow(r) # proporção acumulada por 2 fatores
print(round(c(prop1 = prop1, prop2 = prop2), 3))prop1 prop2
0.487 0.769
Load_F1 Load_F2 h2 psi
JPM -0.732 0.437 0.727 0.273
Citi -0.831 0.280 0.770 0.230
WF -0.726 0.374 0.667 0.333
RDS -0.605 -0.694 0.847 0.153
EM -0.563 -0.719 0.834 0.166
r_hat <- tcrossprod(L) + diag(psi)
colnames(r_hat) <- rownames(r_hat) <- rownames(r)
round(r_hat, 3) JPM Citi WF RDS EM
JPM 1.000 0.731 0.695 0.140 0.099
Citi 0.731 1.000 0.708 0.308 0.266
WF 0.695 0.708 1.000 0.180 0.140
RDS 0.140 0.308 0.180 1.000 0.839
EM 0.099 0.266 0.140 0.839 1.000
JPM Citi WF RDS EM
JPM 0.000 -0.099 -0.185 -0.025 0.056
Citi -0.099 0.000 -0.134 0.014 -0.054
WF -0.185 -0.134 0.000 0.003 0.006
RDS -0.025 0.014 0.003 0.000 -0.156
EM 0.056 -0.054 0.006 -0.156 0.000
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "none",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)
Communalities:
JPM Citi WF RDS EM
0.58 0.73 0.46 1.00 0.47
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = "none")
Uniquenesses:
JPM Citi WF RDS EM
0.417 0.275 0.542 0.005 0.530
Loadings:
Factor1 Factor2
RDS 0.997 -0.007
EM 0.685 0.026
JPM 0.121 0.754
Citi 0.328 0.786
WF 0.188 0.650
Factor1 Factor2
SS loadings 1.622 1.610
Proportion Var 0.324 0.322
Cumulative Var 0.324 0.646
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.97 on 1 degree of freedom.
The p-value is 0.16
Factor1 Factor2
JPM 0.121 0.7543
Citi 0.328 0.7857
WF 0.188 0.6502
RDS 0.997 -0.0071
EM 0.685 0.0263
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method NONE
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 1307.115 1344.001 1299.778 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.000 0.416 0.584
Citi 0.828* 0.200 0.275 0.725
WF 0.672* 0.083 0.542 0.458
RDS 0.150 0.989* 0.000 1.000
EM 0.134 0.671* 0.532 0.468
f1 f2 total
Sum of sq (obliq) loadings 1.760 1.474 3.235
Proportion of total 0.544 0.456 1.000
Proportion var 0.352 0.295 0.647
Cumulative var 0.352 0.647 0.647
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1
f2 0 1
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2
0.538 0.458
Linden [11] originalmente conduziu um estudo de análise fatorial de resultados de decatlo olímpico para todas as 160 largadas completas desde o fim da Segunda Guerra Mundial até meados da década de 1970. Seguindo a abordagem dele, examinamos agora as \(n = 280\) largadas completas no período de 1960 até 2004. Os valores registrados para cada prova foram padronizados e os sinais das provas cronometradas foram trocados de forma que pontuações altas sejam boas para todas as provas. Também analisamos a matriz de correlação, que, com base em todos os \(280\) casos, é
\[ \mathbf{r} = \begin{bmatrix} 1.000 & .6386 & .4752 & .3227 & .5520 & .3262 & .3509 & .4008 & .1821 & -.0352 \\ .6386 & 1.0000 & .4953 & .5668 & .4706 & .3520 & .3998 & .5167 & .3102 & .1012 \\ .4752 & .4953 & 1.0000 & .4357 & .2539 & .2812 & .7926 & .4728 & .4682 & -.0120 \\ .3227 & .5668 & .4357 & 1.0000 & .3449 & .3503 & .3657 & .6040 & .2344 & .2380 \\ .5520 & .4706 & .2539 & .3449 & 1.0000 & .1546 & .2100 & .2553 & .1600 & .4125 \\ .3262 & .3520 & .2812 & .3503 & .1546 & 1.0000 & .4009 & .4179 & .1712 & .0002 \\ .3509 & .3998 & .7926 & .3657 & .2100 & .4009 & 1.0000 & .4509 & .3511 & .2395 \\ .4008 & .5167 & .4728 & .6040 & .2553 & .4179 & .4509 & 1.0000 & .3151 & 1.0000 \\ .1821 & .3102 & .4682 & .2344 & .1600 & .1712 & .3511 & .3151 & 1.0000 & .0983 \\ -.0352 & .1012 & -.0120 & .2380 & .4125 & .0002 & .2395 & 1.0000 & .0983 & 1.0000 \end{bmatrix} \]
A partir de uma perspectiva de análise fatorial por componentes principais, os quatro primeiros autovalores, \(4.21\), \(1.39\), \(1.06\), \(0.92\), de \(\mathbf{r}\) sugerem uma solução fatorial com \(m = 3\) ou \(m = 4\). Uma interpretação subsequente, bastante parecida com a análise original de Linden, reforça a escolha \(m = 4\).
Nesse caso, os dois métodos de solução produziram resultados muito diferentes. Para a fatoração por componentes principais, todas as provas, exceto a corrida de 1500 metros, têm cargas positivas grandes no primeiro fator. Esse fator pode ser rotulado como habilidade atlética global. O fator \(2\), que apresenta cargas elevadas na corrida de 400 metros e na corrida de 1500 metros, pode ser chamado de fator de resistência aeróbica em corrida. Os fatores restantes não podem ser facilmente interpretados.
Para o método de máxima verossimilhança, o primeiro fator parece ser um fator de habilidade atlética global, mas o padrão de cargas não é tão forte como na solução por componentes principais. O segundo fator é principalmente um fator de força de membros superiores porque arremesso de peso e arremesso de disco apresentam cargas elevadas nesse fator. O terceiro fator é resistência em corrida, pois as provas de 400 metros e 1500 metros apresentam cargas elevadas. Novamente, o quarto fator não é facilmente identificado, embora possa ter alguma relação com a habilidade de salto ou força de pernas. Voltaremos à interpretação dos fatores no Exemplo 9.11 após a discussão sobre rotação fatorial.
A solução de quatro fatores baseada em componentes principais explica grande parte da variância amostral total (padronizada), embora as variâncias específicas estimadas sejam grandes em alguns casos (por exemplo, o lançamento de dardo). Isso sugere que algumas provas podem exigir atributos unique ou específicos não requeridos pelas outras provas. A solução de quatro fatores baseada em máxima verossimilhança explica uma parcela menor da variância total amostral, mas, como as matrizes residuais a seguir indicam, as estimativas \(\mathbf{L}\) e \(\boldsymbol{\Psi}\) produzidas pelo método de máxima verossimilhança reproduzem \(\mathbf{r}\) melhor do que as estimativas \(\mathbf{L}\) e \(\boldsymbol{\Psi}\) do método por componentes principais.
Tabela 9.4 (Componentes principais). Dados do decatlo olímpico.
| Variável | F1 | F2 | F3 | F4 | \(\tilde{\psi}_i = 1 - \tilde{h}_i^2\) |
|---|---|---|---|---|---|
| Corrida de 100 m | .696 | .022 | -.468 | -.416 | .12 |
| Salto em distância | .793 | .075 | -.255 | -.115 | .29 |
| Arremesso de peso | .771 | -.434 | .197 | -.112 | .17 |
| Salto em altura | .711 | .181 | .005 | .367 | .33 |
| Corrida de 400 m | .605 | .549 | -.045 | -.397 | .17 |
| 100 m com barreiras | .513 | -.083 | -.372 | .561 | .28 |
| Lançamento de disco | .690 | -.456 | .289 | -.078 | .23 |
| Salto com vara | .761 | .162 | .018 | .304 | .30 |
| Lançamento de dardo | .518 | -.252 | .519 | -.074 | .39 |
| Corrida de 1500 m | .220 | .746 | .493 | .085 | .15 |
| Proporção acumulada da variância total explicada | .42 | .56 | .67 | .76 |
Tabela 9.4 (Máxima verossimilhança). Dados do decatlo olímpico.
| Variável | F1 | F2 | F3 | F4 | \(\hat{\psi}_i = 1 - \hat{h}_i^2\) |
|---|---|---|---|---|---|
| Corrida de 100 m | .993 | -.069 | -.021 | .002 | .01 |
| Salto em distância | .665 | .252 | .239 | .220 | .39 |
| Arremesso de peso | .530 | .777 | -.141 | -.079 | .09 |
| Salto em altura | .363 | .428 | .421 | .424 | .33 |
| Corrida de 400 m | .571 | .019 | .620 | -.305 | .20 |
| 100 m com barreiras | .343 | .189 | .090 | .323 | .73 |
| Lançamento de disco | .402 | .718 | -.102 | -.095 | .30 |
| Salto com vara | .440 | .407 | .390 | .263 | .42 |
| Lançamento de dardo | .218 | .461 | .084 | -.085 | .73 |
| Corrida de 1500 m | -.016 | .091 | .609 | -.145 | .60 |
| Proporção acumulada da variância total explicada | .27 | .45 | .57 | .62 |
As matrizes residuais são, respectivamente, para o método de componentes principais,
\[ \mathbf{r} - \tilde{\mathbf{r}} = \mathbf{r}- \tilde{\mathbf{L}}\tilde{\mathbf{L}}^{\prime} - \tilde{\boldsymbol{\Psi}} \]
e, para o método de máxima verossimilhança,
\[ \mathbf{r} - \hat{\mathbf{r}} = \mathbf{r} - \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} - \hat{\boldsymbol{\Psi}} \]
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
# Matriz de correlação r do decatlo
r <- matrix(c(
1.000, .6386, .4752, .3227, .5520, .3262, .3509, .4008, .1821, -.0352,
.6386, 1.0000, .4953, .5668, .4706, .3520, .3998, .5167, .3102, .1012,
.4752, .4953, 1.0000, .4357, .2539, .2812, .7926, .4728, .4682, -.0120,
.3227, .5668, .4357, 1.0000, .3449, .3503, .3657, .6040, .2344, .2380,
.5520, .4706, .2539, .3449, 1.0000, .1546, .2100, .2553, .1600, .4125,
.3262, .3520, .2812, .3503, .1546, 1.0000, .4009, .4179, .1712, .0002,
.3509, .3998, .7926, .3657, .2100, .4009, 1.0000, .4509, .3511, .2395,
.4008, .5167, .4728, .6040, .2553, .4179, .4509, 1.0000, .3151, .2395,
.1821, .3102, .4682, .2344, .1600, .1712, .3511, .3151, 1.0000, .0983,
-.0352, .1012,-.0120, .2380, .4125, .0002, .2395, .2395, .0983, 1.0000
), nrow = 10, byrow = TRUE)
colnames(r) <- rownames(r) <- c(
"R100m", "SaltoDst", "LncPeso", "SaltoAlt", "R400m",
"R110mBar", "LncDisc", "SaltoVar", "LncDard", "R1500m"
)
n <- 280
p <- dim(r)[1]
m <- 4
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 280 p = 10 m = 4 df = 11
print(
GGally::ggcorr(data=NULL,
name="Decatlo olímpico",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)## 1) calcular um layout fixo sem plotar
set.seed(123) # só para o layout ser reprodutível
q_tmp <- qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = "spring",
DoNotPlot = TRUE # <- calcula, mas não desenha
)
layout_fix <- q_tmp$layout # <- matriz de coordenadas dos nós
## 2) rede de correlações, agora usando layout_fix
qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = layout_fix, # <- aqui entra o layout fixo
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Decatlo olímpico (cor)",
details = FALSE
)## 3) rede glasso, com o MESMO layout
suppressWarnings(qgraph::qgraph(
r,
graph = "glasso",
sampleSize = n,
layout = layout_fix, # <- mesmo layout, só mudam as arestas
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Decatlo olímpico (glasso)",
details = FALSE
))eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 4.22
2 2 1.30
3 3 1.10
4 4 0.93
5 5 0.73
6 6 0.64
7 7 0.42
8 8 0.34
9 9 0.22
10 10 0.11
plot(lambda,
xlab="Componente", ylab="Autovalor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 4.22/1.3 ~ 3.25
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible unifactor model, av1/av2 > 3
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "none",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "none", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
PC1 PC2 PC3 PC4 h2 u2 com
R100m 0.69 0.06 -0.57 0.22 0.85 0.148 2.2
SaltoDst 0.79 0.08 -0.31 0.03 0.73 0.273 1.3
LncPeso 0.77 -0.40 0.14 0.28 0.85 0.149 1.9
SaltoAlt 0.71 0.15 0.06 -0.36 0.66 0.339 1.6
R400m 0.56 0.63 -0.23 0.29 0.84 0.156 2.7
R110mBar 0.54 -0.23 -0.13 -0.54 0.66 0.343 2.4
LncDisc 0.73 -0.27 0.34 0.10 0.73 0.266 1.8
SaltoVar 0.75 0.00 0.13 -0.35 0.70 0.303 1.5
LncDard 0.50 -0.26 0.38 0.39 0.60 0.395 3.4
R1500m 0.26 0.72 0.57 -0.03 0.91 0.087 2.2
PC1 PC2 PC3 PC4
SS loadings 4.22 1.30 1.10 0.93
Proportion Var 0.42 0.13 0.11 0.09
Cumulative Var 0.42 0.55 0.66 0.75
Proportion Explained 0.56 0.17 0.15 0.12
Cumulative Proportion 0.56 0.73 0.88 1.00
Mean item complexity = 2.1
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.08
with the empirical chi square 165.17 with prob < 1.2e-29
Fit based upon off diagonal values = 0.95
Loadings:
PC1 PC2 PC3 PC4
R100m 0.69 0.06 -0.57 0.22
SaltoDst 0.79 0.08 -0.31 0.03
LncPeso 0.77 -0.40 0.14 0.28
SaltoAlt 0.71 0.15 0.06 -0.36
LncDisc 0.73 -0.27 0.34 0.10
SaltoVar 0.75 0.00 0.13 -0.35
R400m 0.56 0.63 -0.23 0.29
R1500m 0.26 0.72 0.57 -0.03
R110mBar 0.54 -0.23 -0.13 -0.54
LncDard 0.50 -0.26 0.38 0.39
PC1 PC2 PC3 PC4
SS loadings 4.22 1.30 1.10 0.93
Proportion Var 0.42 0.13 0.11 0.09
Cumulative Var 0.42 0.55 0.66 0.75
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "none",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)
Communalities:
R100m SaltoDst LncPeso SaltoAlt R400m R110mBar LncDisc SaltoVar
0.70 0.65 1.00 0.54 0.69 0.30 0.71 0.65
LncDard R1500m
0.24 1.00
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = "none")
Uniquenesses:
R100m SaltoDst LncPeso SaltoAlt R400m R110mBar LncDisc SaltoVar
0.301 0.349 0.005 0.464 0.313 0.701 0.292 0.347
LncDard R1500m
0.762 0.005
Loadings:
Factor1 Factor2 Factor3 Factor4
LncPeso 0.987 0.141 -0.017 -0.005
LncDisc 0.751 0.359 -0.059 0.109
R1500m -0.153 0.986 -0.007 -0.001
R100m 0.485 0.044 0.648 -0.205
SaltoDst 0.486 0.182 0.612 0.081
R400m 0.200 0.453 0.552 -0.371
SaltoAlt 0.405 0.307 0.395 0.348
R110mBar 0.287 0.048 0.334 0.321
SaltoVar 0.442 0.314 0.379 0.464
LncDard 0.450 0.170 0.021 0.080
Factor1 Factor2 Factor3 Factor4
SS loadings 2.719 1.584 1.515 0.644
Proportion Var 0.272 0.158 0.152 0.064
Cumulative Var 0.272 0.430 0.582 0.646
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 84.36 on 11 degrees of freedom.
The p-value is 2.1e-13
Factor1 Factor2 Factor3 Factor4
R100m 0.485 0.0437 0.64827 -0.204552
SaltoDst 0.486 0.1821 0.61208 0.081283
LncPeso 0.987 0.1407 -0.01662 -0.004690
SaltoAlt 0.405 0.3072 0.39518 0.348491
R400m 0.200 0.4527 0.55232 -0.370838
R110mBar 0.287 0.0478 0.33402 0.320710
LncDisc 0.751 0.3585 -0.05867 0.108553
SaltoVar 0.442 0.3143 0.37857 0.464360
LncDard 0.450 0.1695 0.02132 0.079901
R1500m -0.153 0.9857 -0.00663 -0.000853
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method NONE
Number of observations 280
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 4 6793.333 6953.264 6813.743 86.269 11 0 0.941 0.156
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5 ev6 ev7 ev8 ev9 ev10
4.216 1.297 1.103 0.926 0.726 0.643 0.418 0.341 0.218 0.112
Standardized loadings: (* = significant at 1% level)
f1 f2 f3 f4 unique.var communalities
R100m 0.836* 0.000 0.000 0.000 0.300 0.700
SaltoDst 0.746* 0.306* 0.000 0.000 0.349 0.651
LncPeso 0.568* 0.233 0.789* 0.000 0.000 1.000
SaltoAlt 0.472* 0.556* 0.048 0.025 0.465 0.535
R400m 0.658* -0.013 -0.148 0.480* 0.314 0.686
R110mBar 0.350* 0.386* -0.009 -0.171 0.699 0.301
LncDisc 0.382* 0.387* 0.615* 0.176* 0.295 0.705
SaltoVar 0.453* 0.664* 0.077 -0.023 0.347 0.653
LncDard 0.267* 0.229* 0.334* 0.054 0.762 0.238
R1500m -0.042 0.433* -0.112 0.893* 0.000 1.000
f1 f2 f3 f4 total
Sum of sq (obliq) loadings 2.782 1.437 1.156 1.093 6.469
Proportion of total 0.430 0.222 0.179 0.169 1.000
Proportion var 0.278 0.144 0.116 0.109 0.647
Cumulative var 0.278 0.422 0.538 0.647 0.647
Factor correlations: (* = significant at 1% level)
f1 f2 f3 f4
f1 1
f2 0 1
f3 0 0 1
f4 0 0 0 1
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2 f3 f4
0.546 0.308 0.100 0.108
A suposição de normalidade populacional conduz diretamente a um teste da adequação do modelo fatorial comum. Suponha que o modelo com \(m\) fatores comuns seja válido. Nesse caso,
\[ \mathbf{\Sigma} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi} \]
e testar a adequação do modelo de \(m\) fatores comuns é equivalente a testar
\[ \begin{cases} H_0: \underset{p \times p}{\mathbf{\Sigma}} = \underset{p \times m}{\mathbf{L}}\; \underset{m \times p}{\mathbf{L}^{\prime}} + \underset{p \times p}{\boldsymbol{\Psi}}\\ H_1: \mathbf{\Sigma} \ne \mathbf{L} \mathbf{L}^{\prime} + \boldsymbol{\Psi} \end{cases}\\ \alpha=5\% \tag{9-33} \] versus a hipótese alternativa de que \(\mathbf{\Sigma}\) é uma matriz definida positiva arbitrária.
Quando \(\mathbf{\Sigma}\) não possui nenhuma estrutura especial, o máximo da função de verossimilhança [ver (4-18) e Resultado 4.11, com \(\hat{\mathbf{\Sigma}} = \dfrac{n-1}{n}\mathbf{S} = \mathbf{S}_n\)] é proporcional a
\[ (|\mathbf{S}_n|\,e^p)^{-n/2} \tag{9-34} \]
Sob \(H_0\), \(\mathbf{\Sigma}\) é restrita a ter a forma dada em (9-33). Nesse caso, o máximo da função de verossimilhança [ver (9-25), com \(\hat{\boldsymbol{\mu}} = \bar{\mathbf{x}}\) e \(\hat{\mathbf{\Sigma}} = \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}}\), onde \(\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}\) são os estimadores de máxima verossimilhança de \(\mathbf{L}\) e \(\boldsymbol{\Psi}\), respectivamente] é proporcional a
\[ |\hat{\mathbf{\Sigma}}|^{-n/2} \exp\left[ -\dfrac{1}{2} \operatorname{tr} \left\{ \hat{\mathbf{\Sigma}}^{-1} \sum_{j=1}^{n} (\mathbf{x}_j - \bar{\mathbf{x}}) (\mathbf{x}_j - \bar{\mathbf{x}})^{\prime} \right\} \right] \]
i.e.,
\[ |\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}}|^{-n/2} \exp\!\left[ -\dfrac{n}{2} \operatorname{tr} \left\{ (\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}})^{-1} \mathbf{S}_n \right\} \right] \tag{9-35} \]
Usando o Resultado 5.2, (9-34) e (9-35), obtemos que a estatística da razão de verossimilhanças para testar \(H_0\) é
\[ -2\ln (\Lambda) = -2\ln\left( \dfrac{ \text{máx. verossimilhança sob } H_0 }{ \text{máx. verossimilhança irrestrita} } \right) \tag{9-36} \]
ou, equivalentemente,
\[ -2\ln(\Lambda) = -n\ln\left( \dfrac{ |\hat{\mathbf{\Sigma}}| }{ |\mathbf{S}_n| } \right) + n\left[ \operatorname{tr}(\hat{\mathbf{\Sigma}}^{-1}\mathbf{S}_n) - p \right] \] Os graus de liberdade são
\[ \begin{align} v - v_0 &= \frac{1}{2}p(p+1) - \left(p(m+1) - \frac{1}{2}m(m-1)\right)\\ &= \frac{1}{2}\left((p-m)^2 - p - m\right)\\ v - v_0&= \frac{1}{2}(p-m)(p-m-1) - m \end{align} \tag{9-37} \]
O Suplemento 9A indica que \(\mathrm{tr}\left(\hat{\mathbf{\Sigma}}^{-1}\mathbf{S}_n\right) - p = 0\), desde que \(\hat{\mathbf{\Sigma}} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\) seja a estimativa de máxima verossimilhança de \(\mathbf{\Sigma} = \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\).
Assim, temos
\[ -2\ln (\Lambda) = n \ln \left(\frac{\left|\hat{\mathbf{\Sigma}}\right|}{\left|\mathbf{S}_n\right|}\right) \tag{9-38} \]
Bartlett [3] mostrou que a aproximação qui-quadrado para a distribuição amostral de \(-2\ln (\Lambda)\) pode ser melhorada substituindo-se \(n\) em (9-38) pelo fator multiplicativo \((n - 1 - (2p + 4m + 5)/6)\).
Usando a correção de Bartlett, rejeitamos \(H_0\) ao nível de significância \(\alpha\) se
\[ \left(n - 1 - \dfrac{2p + 4m + 5}{6}\right) \ln\left(\frac{\left|\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}}\right|}{\left|\mathbf{S}_n\right|}\right) > \chi^2_{\frac{1}{2}(p-m)(p-m-1) - m}(1-\alpha) \tag{9-39} \]
desde que \(n\) e \(n-p\) sejam grandes.
Como o número de graus de liberdade \(\text{df}=\frac{1}{2}(p-m)(p-m-1) - m>1\), segue que
\[ m \le \frac{1}{2}\left(2p + 1 - \sqrt{8p + 9}\right) \tag{9-40} \]
para que se possa aplicar o teste em (9-39).
Se \(m=2\), número mínimo de variáveis manifestas para que \(\text{df}\ge1\) é \(p=5\), sendo que \(\text{df}=1\).
| \(p\) | \(m\) máximo | \(text{df}\) |
|---|---|---|
| 4 | 1 | 2 |
| 5 | 2 | 1 |
| 6 | 2 | 4 |
| 7 | 3 | 3 |
| 8 | 4 | 2 |
| 9 | 5 | 1 |
| 10 | 5 | 5 |
| 11 | 6 | 4 |
| 12 | 7 | 3 |
| 13 | 8 | 2 |
| 14 | 9 | 1 |
| 15 | 9 | 6 |
| 16 | 10 | 5 |
| 17 | 11 | 4 |
| 18 | 12 | 3 |
| 19 | 13 | 2 |
| 20 | 14 | 1 |
Comentário. Na implementação do teste em (9-39), estamos testando a adequação do modelo de \(m\) fatores comuns, comparando as variâncias generalizadas
\[ \left|\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}}\right| \quad\text{e}\quad \left|\mathbf{S}_n\right| \]
Se \(n\) é grande e \(m\) é pequeno em relação a \(p\), a hipótese \(H_0\) geralmente será rejeitada, levando à retenção de mais fatores comuns. Entretanto,
\[ \hat{\mathbf{\Sigma}} = \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}} \]
pode estar suficientemente próxima de \(\mathbf{S}_n\), de modo que adicionar mais fatores não forneça informações adicionais, mesmo que esses fatores sejam “significantes”. Portanto, algum julgamento deve ser exercido na escolha de \(m\).
\[\Diamond\]
Nota. Alguns analistas fatoriais obtêm uma estimativa aproximada de máxima verossimilhança substituindo \(\mathbf{S}_n\) pela estimativa não viesada \(\mathbf{S} = \frac{n}{n-1}\mathbf{S}_n\) e então minimizando \(\ln(\left|\mathbf{\Sigma}\right|) + \mathrm{tr}\!\left(\mathbf{\Sigma}^{-1}\mathbf{S}\right)\).
A substituição dupla de \(\mathbf{S}\) e do estimador aproximado de máxima verossimilhança na estatística de teste em (9-39) não afeta suas propriedades assintóticas em grandes amostras.
\[\Diamond\]
A análise de máxima verossimilhança com dois fatores dos dados de retornos semanais de ações foi apresentada no Exemplo 9.5. A matriz residual obtida naquele exemplo sugere que uma solução com dois fatores pode ser adequada. Teste a hipótese
\[ H_0:\ \mathbf{\Sigma}=\mathbf{L}\mathbf{L}^{\prime}+\boldsymbol{\Psi} \]
com \(m=2\), ao nível \(\alpha=0.05\).
O teste de razão de verossimilhanças (LR) da hipótese nula é invariante com relação ao uso da matriz de covariância ou correlação. O teste LR é invariante a transformações lineares de escala. Logo, produz o mesmo valor p usando a matriz de covariância ou a de correlação, desde que a normalidade multivariada seja assumida.
O teste em \((9\text{-}39)\) baseia-se na razão dos determinantes de variâncias generalizadas
\[ \frac{\left|\hat{\mathbf{\Sigma}}\right|}{\left|\mathbf{S}_n\right|} = \frac{\left|\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime}+\hat{\boldsymbol{\Psi}}\right|}{\left|\mathbf{S}_n\right|} \]
Seja \(\hat{\mathbf{V}}^{-1/2}\) a matriz diagonal tal que
\[ \hat{\mathbf{V}}^{-1/2}\mathbf{S}_n\hat{\mathbf{V}}^{-1/2} = \mathbf{R} \]
Pelas propriedades de determinantes (veja o Resultado 2A.11),
\[ \left|\hat{\mathbf{V}}^{-1/2}\right| \left|\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime}+\hat{\boldsymbol{\Psi}}\right| \left|\hat{\mathbf{V}}^{-1/2}\right| = \left| \hat{\mathbf{V}}^{-1/2}\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime}\hat{\mathbf{V}}^{-1/2} + \hat{\mathbf{V}}^{-1/2}\hat{\boldsymbol{\Psi}}\hat{\mathbf{V}}^{-1/2} \right| \]
e
\[ \left|\hat{\mathbf{V}}^{-1/2}\right| \left|\mathbf{S}_n\right| \left|\hat{\mathbf{V}}^{-1/2}\right| = \left| \hat{\mathbf{V}}^{-1/2}\mathbf{S}_n\hat{\mathbf{V}}^{-1/2} \right| \]
Consequentemente,
\[ \begin{align} \frac{\left|\hat{\mathbf{\Sigma}}\right|}{\left|\mathbf{S}_n\right|} &= \frac{\left|\hat{\mathbf{V}}^{-1/2}\right|}{\left|\hat{\mathbf{V}}^{-1/2}\right|} \frac{\left|\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime}+\hat{\boldsymbol{\Psi}}\right|}{\left|\mathbf{S}_n\right|} \frac{\left|\hat{\mathbf{V}}^{-1/2}\right|}{\left|\hat{\mathbf{V}}^{-1/2}\right|} \\ &= \frac{ \left| \hat{\mathbf{V}}^{-1/2}\hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime}\hat{\mathbf{V}}^{-1/2} + \hat{\mathbf{V}}^{-1/2}\hat{\boldsymbol{\Psi}}\hat{\mathbf{V}}^{-1/2} \right| }{ \left| \hat{\mathbf{V}}^{-1/2}\mathbf{S}_n\hat{\mathbf{V}}^{-1/2} \right| } \\ \frac{\left|\hat{\mathbf{\Sigma}}\right|}{\left|\mathbf{S}_n\right|}&= \frac{ \left|\hat{\mathbf{L}}_{\mathbf{z}}\hat{\mathbf{L}}_{\mathbf{z}}^{\prime}+\hat{\boldsymbol{\Psi}}_{\mathbf{z}}\right| }{ \left|\mathbf{R}\right| } \end{align} \tag{9-41} \] Pelo resultado anterior,
\[ \frac{\left|\hat{\mathbf{L}}_2\hat{\mathbf{L}}_2^{\prime}+\hat{\boldsymbol{\Psi}}_2\right|}{\left|\mathbf{r}\right|} = \frac{0.17898}{0.17519} = 1.0216 \]
Com a correção de Bartlett, avaliamos a estatística de teste em (9-39):
\[ \left(n-1-\frac{2p+4m+5}{6}\right) \ln\left(\frac{ \left|\hat{\mathbf{L}}_{\mathbf{z}}\hat{\mathbf{L}}_{\mathbf{z}}^{\prime}+\hat{\boldsymbol{\Psi}}_{\mathbf{z}}\right| }{ \left|\mathbf{r}\right| }\right) \]
Substituindo \(n=103\), \(p=5\), \(m=2\) e o valor numérico \(\ln(1.0216)\), obtemos:
\[ \left(103-1-\frac{10+8+5}{6}\right)\ln(1.0216) = 2.10 \]
Como
\[ \text{df}=\frac{1}{2}(p-m)(p-m-1) - m=\frac{1}{2}\times3\times2-2=1 \]
o valor crítico para \(\chi_1^2(0.95)\) é:
\[ \chi_1^2(0.95)=3.84 \]
e, portanto, como \(2.10<3.84\), falhamos em rejeitar \(H_0\). Concluímos que os dados não contradizem um modelo fatorial de dois fatores comuns.
A significância observada (valor p) para
\[ P\left(\chi_1^2>2.10\right)= 0.15 \]
indica que \(H_0\) não seria rejeitada em nenhum nível usual de significância.
Estes valores obtidos são encontrados apenas com o uso de
lavaan::efa e lavaan::summary.
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
s <- cov(Dados, use = "complete.obs", method = "pearson")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(signif(s, 3)) JPM Citi WF RDS EM
JPM 4.33e-04 0.000276 1.59e-04 6.41e-05 8.90e-05
Citi 2.76e-04 0.000439 1.80e-04 1.81e-04 1.23e-04
WF 1.59e-04 0.000180 2.24e-04 7.34e-05 6.05e-05
RDS 6.41e-05 0.000181 7.34e-05 7.22e-04 5.08e-04
EM 8.90e-05 0.000123 6.05e-05 5.08e-04 7.66e-04
JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
fits <- lavaan::efa(data = NULL,
sample.cov = s,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fits,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method NONE
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 -2636.482 -2599.595 -2643.819 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.000 0.416 0.584
Citi 0.828* 0.200 0.275 0.725
WF 0.672* 0.083 0.542 0.458
RDS 0.150 0.989* 0.000 1.000
EM 0.134 0.671* 0.532 0.468
f1 f2 total
Sum of sq (obliq) loadings 1.760 1.474 3.235
Proportion of total 0.544 0.456 1.000
Proportion var 0.352 0.295 0.647
Cumulative var 0.352 0.647 0.647
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1
f2 0 1
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method NONE
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 1307.115 1344.001 1299.778 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.000 0.416 0.584
Citi 0.828* 0.200 0.275 0.725
WF 0.672* 0.083 0.542 0.458
RDS 0.150 0.989* 0.000 1.000
EM 0.134 0.671* 0.532 0.468
f1 f2 total
Sum of sq (obliq) loadings 1.760 1.474 3.235
Proportion of total 0.544 0.456 1.000
Proportion var 0.352 0.295 0.647
Cumulative var 0.352 0.647 0.647
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1
f2 0 1
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "none",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2
0.538 0.458
\[\Diamond\]
Variâncias e covariâncias amostrais para grande amostra para as estimativas de máxima verossimilhança \(\hat{\ell}_{ij}\) e \(\hat{\psi}_i\) foram derivadas quando essas estimativas foram obtidas a partir da matriz de covariâncias amostrais \(\mathbf{S}\). (Ver [10].) As expressões são, em geral, bastante complicadas.
Como indicado na Seção 9.2, todas as cargas fatoriais obtidas das cargas iniciais por uma transformação ortogonal têm a mesma capacidade de reproduzir a matriz de covariância (ou correlação). De álgebra matricial, sabemos que uma transformação ortogonal corresponde a uma rotação rígida (ou reflexão) dos eixos coordenados. Por essa razão, uma transformação ortogonal das cargas fatoriais, bem como a transformação ortogonal implícita dos fatores, é chamada rotação fatorial.
Se \(\hat{\mathbf{L}}\) é a matriz \(p \times m\) de cargas fatoriais estimadas obtidas por qualquer método (componentes principais, máxima verossimilhança, etc.), então
\[ \hat{\mathbf{L}}^{\ast} = \hat{\mathbf{L}} \mathbf{T}, \qquad \text{sendo que } \mathbf{T}^{\prime}\mathbf{T} = \mathbf{T}\mathbf{T}^{\prime} = \mathbf{I} \tag{9-42} \]
é uma matriz \(p \times m\) de cargas “rotacionadas”. Além disso, a matriz de covariância (ou correlação) estimada permanece inalterada, pois
\[ \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}} = \hat{\mathbf{L}}\mathbf{T}\mathbf{T}^{\prime}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}} = \hat{\mathbf{L}}^{\ast}{\hat{\mathbf{L}}^{\ast}}^{\prime} + \hat{\boldsymbol{\Psi}} \tag{9-43} \]
A Equação (9-43) indica que a matriz residual
\[ \mathbf{S}_n - \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} - \hat{\boldsymbol{\Psi}} = \mathbf{S}_n - \hat{\mathbf{L}}^{\ast}{\hat{\mathbf{L}}^{\ast}}^{\prime} - \hat{\boldsymbol{\Psi}} \]
permanece inalterada. Do mesmo modo, as variâncias específicas \(\hat{\psi}_i\) e, portanto, as comunalidades \(\hat{h}_i^{2}\), não são modificadas. Assim, de um ponto de vista matemático, é irrelevante se obtemos \(\hat{\mathbf{L}}\) ou \(\hat{\mathbf{L}}^{\ast}\).
Como as cargas iniciais podem não ser facilmente interpretáveis, é prática comum rotacioná-las até que uma “estrutura simples” seja atingida. A ideia é semelhante a ajustar o foco de um microscópio para enxergar os detalhes com mais nitidez.
Idealmente, espera-se um padrão no qual cada variável tenha carga elevada em um único fator, e cargas pequenas ou moderadas nos demais fatores. No entanto, nem sempre é possível obter essa estrutura simples, embora as cargas rotacionadas para os dados do decatlo olímpico discutidos no Exemplo 9.11 forneçam um padrão razoavelmente ideal.
Para o caso \(m = 2\), ou seja, dois fatores comuns considerados simultaneamente, a transformação para uma estrutura simples pode ser frequentemente determinada graficamente. Os fatores não correlacionados são vistos como vetores unitários ao longo de eixos coordenados perpendiculares. Um gráfico das cargas fatoriais \((\hat{\ell}_{i1}, \hat{\ell}_{i2})\) fornece \(p\) pontos, cada qual correspondendo a uma variável. Os eixos podem então ser visualmente rotacionados por um ângulo \(\phi\) — e as cargas fatoriais rotacionadas são obtidas das relações:
\[ \hat{\mathbf{L}}^{\ast} = \hat{\mathbf{L}} \mathbf{T} \tag{9-44} \]
sendo que a matriz ortogonal \(\mathbf{T}\) pode ser:
Rotação no sentido horário:
\[ \mathbf{T} = \begin{bmatrix} \cos\phi & \sin\phi \\ -\sin\phi & \cos\phi \end{bmatrix} \]
Rotação no sentido anti-horário:
\[ \mathbf{T} = \begin{bmatrix} \cos\phi & -\sin\phi \\ \sin\phi & \cos\phi \end{bmatrix} \]
A relação (9-44) raramente é implementada apenas em análise gráfica bidimensional. Nessa situação, agrupamentos de variáveis podem ser percebidos visualmente, permitindo identificar os fatores comuns sem inspecionar numericamente as magnitudes das cargas rotacionadas. Para \(m > 2\), as orientações não são facilmente visualizáveis e deve-se inspecionar os valores das cargas rotacionadas para interpretar os fatores. Uma matriz ortogonal \(\mathbf{T}\) que satisfaça um critério analítico de estrutura simples é geralmente utilizada.
Lawley e Maxwell [10] apresentam a matriz de correlações amostrais das notas em exames em \(p = 6\) áreas de conhecimento para \(n = 220\) estudantes do sexo masculino. A matriz de correlações é
\[ \mathbf{r} = \begin{bmatrix} 1.0 & .439 & .410 & .288 & .329 & .248 \\ .439 & 1.0 & .351 & .354 & .320 & .329 \\ .410 & .351 & 1.0 & .164 & .190 & .181 \\ .288 & .354 & .164 & 1.0 & .595 & .470 \\ .329 & .320 & .190 & .595 & 1.0 & .464 \\ .248 & .329 & .181 & .470 & .464 & 1.0 \end{bmatrix} \]
e uma solução de máxima verossimilhança para \(m = 2\) fatores comuns produz as estimativas apresentadas na Tabela 9.5.
Tabela 9.5: Cargas fatoriais (ML) e comunalidades
| Variável | \(F_1\) | \(F_2\) | \(\hat{h}_i^2\) |
|---|---|---|---|
| 1. Gaélico | .553 | .429 | .490 |
| 2. Inglês | .568 | .288 | .406 |
| 3. História | .392 | .450 | .356 |
| 4. Aritmética | .740 | -.273 | .623 |
| 5. Álgebra | .724 | -.211 | .569 |
| 6. Geometria | .595 | -.132 | .372 |
Todas as variáveis apresentam cargas positivas no primeiro fator. Lawley e Maxwell sugerem que esse fator reflete a resposta global dos estudantes à instrução e pode ser denominado fator de inteligência geral. Metade das cargas é positiva e metade é negativa no segundo fator. Um fator com esse padrão de cargas é chamado fator bipolar. (A atribuição de polos negativo e positivo é arbitrária, pois os sinais das cargas em um fator podem ser trocados sem afetar a análise.) Esse fator não é facilmente identificável, mas, como os indivíduos com escores acima da média nos testes verbais obtêm escores acima da média no fator, enquanto os indivíduos com escores acima da média nos testes matemáticos obtêm escores abaixo da média no fator, talvez esse fator possa ser classificado como um fator “matemática-não matemática”.
Os pares de cargas fatoriais \((\ell_{i1}, \ell_{i2})\) são plotados como pontos na Figura 9.1. Os pontos são identificados com os números das variáveis correspondentes. Também é mostrada uma rotação ortogonal no sentido horário dos eixos das coordenadas por um ângulo de \(\phi \approx 20^\circ\). Esse ângulo foi escolhido de modo que um dos novos eixos passe através de \((\ell_{41}, \ell_{42})\). Quando isso é feito, todos os pontos caem no primeiro quadrante (as cargas fatoriais são todas positivas), e os dois distintos aglomerados de variáveis são mais claramente revelados.
As variáveis dos testes matemáticos apresentam altas cargas no fator \(F_1^{\ast}\) e cargas desprezíveis em \(F_2^{\ast}\). O primeiro fator pode ser chamado de fator de habilidade matemática. Similarmente, as três variáveis dos testes verbais apresentam altas cargas em \(F_2^{\ast}\) e cargas moderadas a pequenas em \(F_1^{\ast}\). O segundo fator pode ser chamado de fator de habilidade verbal. O fator de inteligência geral inicialmente identificado está imerso nos fatores \(F_1^{\ast}\) e \(F_2^{\ast}\).
As cargas fatoriais rotacionadas obtidas de (9-44) com \(\phi \approx 20^\circ\) e as estimativas de comunalidade correspondentes são apresentadas na Tabela 9.6. As magnitudes das cargas fatoriais rotacionadas reforçam a interpretação dos fatores sugerida pela Figura 9.1.
As estimativas de comunalidade são inalteradas pela rotação ortogonal, já que
\[ \boldsymbol{\hat{\Sigma}} = \mathbf{\hat{L}}\mathbf{\hat{L}}^{\prime} = \mathbf{\hat{L}} \, \mathbf{T}\mathbf{T}^{\prime}\mathbf{\hat{L}}^{\prime} = \mathbf{\hat{L}}^{\ast}{\mathbf{\hat{L}}^{\ast}}^{\prime} \]
e as comunalidades são os elementos diagonais dessas matrizes.
Observamos que a Figura 9.1 sugere uma rotação oblíqua dos eixos coordenados. Um novo eixo passaria através do agrupamento {1, 2, 3} e o outro através do agrupamento {4, 5, 6}. As rotações oblíquas recebem esse nome porque correspondem a uma rotação não rígida dos eixos coordenados, resultando em novos eixos que não são perpendiculares.
No entanto, é evidente que a interpretação dos fatores oblíquos para este exemplo seria praticamente a mesma daquela dada anteriormente para uma rotação ortogonal.
Tabela 9.6: Cargas fatoriais (ML) rotacionadas (rotação ortogonal com \(\phi \approx 20^\circ\))
| Variável | \(F_1^{\ast}\) | \(F_2^{\ast}\) | Comunalidades \(\hat{h}_i^{\ast 2} = \hat{h}_i^2\) |
|---|---|---|---|
| 1. Gaélico | 0.369 | 0.594 | 0.490 |
| 2. Inglês | 0.433 | 0.467 | 0.406 |
| 3. História | 0.211 | 0.558 | 0.356 |
| 4. Aritmética | 0.789 | 0.001 | 0.623 |
| 5. Álgebra | 0.752 | 0.054 | 0.568 |
| 6. Geometria | 0.604 | 0.083 | 0.372 |
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
r <- matrix(c(
1.0, .439, .410, .288, .329, .248,
.439, 1.0, .351, .354, .320, .329,
.410, .351, 1.0, .164, .190, .181,
.288, .354, .164, 1.0, .595, .470,
.329, .320, .190, .595, 1.0, .464,
.248, .329, .181, .470, .464, 1.0
), nrow = 6, ncol = 6, byrow = TRUE)
colnames(r) <- rownames(r) <- c(
"Gaélico", "Inglês", "História",
"Aritmética", "Álgebra", "Geometria"
)
print(r) Gaélico Inglês História Aritmética Álgebra Geometria
Gaélico 1.000 0.439 0.410 0.288 0.329 0.248
Inglês 0.439 1.000 0.351 0.354 0.320 0.329
História 0.410 0.351 1.000 0.164 0.190 0.181
Aritmética 0.288 0.354 0.164 1.000 0.595 0.470
Álgebra 0.329 0.320 0.190 0.595 1.000 0.464
Geometria 0.248 0.329 0.181 0.470 0.464 1.000
n <- 220
p <- dim(r)[1]
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 220 p = 6 m = 2 df = 4
print(
GGally::ggcorr(data=NULL,
name="Disciplinas",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "varimax",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "varimax", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 h2 u2 com
Gaélico 0.22 0.76 0.63 0.37 1.2
Inglês 0.35 0.66 0.56 0.44 1.5
História 0.00 0.82 0.67 0.33 1.0
Aritmética 0.83 0.15 0.72 0.28 1.1
Álgebra 0.81 0.18 0.69 0.31 1.1
Geometria 0.75 0.16 0.59 0.41 1.1
RC1 RC2
SS loadings 2.09 1.78
Proportion Var 0.35 0.30
Cumulative Var 0.35 0.64
Proportion Explained 0.54 0.46
Cumulative Proportion 0.54 1.00
Mean item complexity = 1.2
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.11
with the empirical chi square 86.13 with prob < 8.7e-18
Fit based upon off diagonal values = 0.9
Loadings:
RC1 RC2
Aritmética 0.83 0.15
Álgebra 0.81 0.18
Geometria 0.75 0.16
Gaélico 0.22 0.76
Inglês 0.35 0.66
História 0.00 0.82
RC1 RC2
SS loadings 2.09 1.78
Proportion Var 0.35 0.30
Cumulative Var 0.35 0.64
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "varimax",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)
Communalities:
Gaélico Inglês História Aritmética Álgebra Geometria
0.49 0.41 0.36 0.62 0.57 0.37
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = "varimax")
Uniquenesses:
Gaélico Inglês História Aritmética Álgebra Geometria
0.510 0.594 0.644 0.377 0.431 0.628
Loadings:
Factor1 Factor2
Aritmética 0.771 0.170
Álgebra 0.724 0.213
Geometria 0.572 0.210
Gaélico 0.235 0.659
Inglês 0.323 0.549
História 0.088 0.590
Factor1 Factor2
SS loadings 1.612 1.203
Proportion Var 0.269 0.201
Cumulative Var 0.269 0.469
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 2.33 on 4 degrees of freedom.
The p-value is 0.674
Factor1 Factor2
Gaélico 0.2347 0.659
Inglês 0.3229 0.549
História 0.0875 0.590
Aritmética 0.7706 0.170
Álgebra 0.7235 0.213
Geometria 0.5723 0.210
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "varimax",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method VARIMAX ORTHOGONAL
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights Kaiser
Number of observations 220
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 3460.022 3517.713 3463.84 2.391 4 0.664 1 0
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5 ev6
2.733 1.130 0.615 0.601 0.525 0.396
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
Gaélico 0.660* 0.232* 0.510 0.490
Inglês 0.551* 0.321* 0.594 0.406
História 0.591* 0.085 0.644 0.356
Aritmética 0.173* 0.770* 0.377 0.623
Álgebra 0.215* 0.723* 0.431 0.569
Geometria 0.213* 0.572* 0.628 0.372
f2 f1 total
Sum of sq (ortho) loadings 1.606 1.209 2.815
Proportion of total 0.570 0.430 1.000
Proportion var 0.268 0.202 0.469
Cumulative var 0.268 0.469 0.469
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "varimax",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2
0.355 0.449
\[\Diamond\]
Kaiser [19] sugeriu uma medida analítica de estrutura simples conhecida como critério varimax (ou varimax normal). Defina os coeficientes rotacionados escalonados por:
\[ \tilde{\ell}_{ij}^{\ast} = \frac{\hat{\ell}_{ij}^{\ast}}{\sqrt{\hat{h}_i}} \]
isto é, os coeficientes rotacionados divididos pela raiz quadrada das comunalidades.
Então, a rotação ortogonal \(\mathbf{T}\) é escolhida de forma a maximizar:
\[ V = \frac{1}{p} \sum_{j=1}^{m} \left[ \sum_{i=1}^{p} (\tilde{\ell}_{ij}^{\ast})^{4} - \frac{1}{p} \left( \sum_{i=1}^{p} (\tilde{\ell}_{ij}^{\ast})^{2} \right)^{2} \right] \tag{9-45} \]
Escalonar \(\tilde{\ell}_{ij}^{\ast}\) tem o efeito de atribuir maior peso, na determinação de estrutura simples, às variáveis com comunalidades relativamente pequenas. Após a determinação da transformação \(\mathbf{T}\), os coeficientes rotacionados são reescalados multiplicando-se por \(\sqrt{\hat{h}_i}\) para preservar as comunalidades originais.
Embora (9-45) pareça complicada, ela possui uma interpretação simples. Em palavras:
\[ V \propto \sum_{j=1}^{m} \left( \text{variância dos quadrados das cargas (escalonadas) no fator } j \right) \tag{9-46} \]
Maximizar \(V\) corresponde, efetivamente, a “espalhar” os quadrados das cargas fatoriais em cada fator tanto quanto possível. Assim, espera-se encontrar grupos de cargas altas e cargas desprezíveis em qualquer coluna da matriz rotacionada \(\hat{\mathbf{L}}^{\ast}\).
Algoritmos computacionais existem para maximizar \(V\), e os softwares estatísticos mais utilizados em análise fatorial (por exemplo, R, SPSS, MINITAB) implementam rotações varimax.
Como esperado, rotações varimax das cargas fatoriais obtidas com diferentes métodos de estimação (componentes principais, máxima verossimilhança, etc.) não coincidem, em geral. Além disso, o padrão das cargas fatoriais rotacionadas pode mudar substancialmente se fatores adicionais forem incluídos no modelo.
Se existir um fator dominante, ele será geralmente identificado por qualquer rotação ortogonal. Caso contrário, pode-se mantê-lo fixo e rotacionar os fatores remanescentes.
Vamos retornar aos dados de marketing discutidos no Exemplo
9.3.
As cargas fatoriais originais (obtidas pelo método de componentes
principais), as comunalidades e as cargas fatoriais rotacionadas
(varimax) são apresentadas na Tabela 9.7.
Tabela 9.7: Cargas fatoriais (PC) e rotacionadas (varimax)
| Variável | \(F_1\) | \(F_2\) | \(F_1^{\ast}\) | \(F_2^{\ast}\)$ | Comunalidade |
|---|---|---|---|---|---|
| 1. Gosto | 0.56 | 0.82 | 0.02 | 0.99 | 0.98 |
| 2. Bom custo-benefício | 0.78 | -0.52 | 0.94 | -0.01 | 0.88 |
| 3. Sabor | 0.65 | 0.75 | 0.13 | 0.98 | 0.98 |
| 4. Adequado para lanche | 0.94 | -0.10 | 0.84 | 0.43 | 0.89 |
| 5. Fornece muita energia | 0.80 | -0.54 | 0.97 | -0.02 | 0.93 |
| Proporção acumulada explicada | 0.571 | 0.932 | 0.507 | 0.932 |
Fica claro que as variáveis 2, 4 e 5 definem o fator 1 (altas cargas no fator 1 e cargas pequenas ou desprezíveis no fator 2), enquanto as variáveis 1 e 3 definem o fator 2 (altas cargas no fator 2 e cargas pequenas ou desprezíveis no fator 1).
A variável 4 está mais associada ao fator 1, embora apresente aspectos do traço representado pelo fator 2. Podemos chamar o fator 1 de um fator nutricional e o fator 2 de um fator gustativo.
As cargas fatoriais das variáveis são representadas em relação aos eixos fatoriais originais e aos eixos fatoriais rotacionados (varimax) na Figura 9.2.
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
r <- matrix(c(
1.00, 0.02, 0.96, 0.42, 0.01,
0.02, 1.00, 0.13, 0.71, 0.85,
0.96, 0.13, 1.00, 0.50, 0.11,
0.42, 0.71, 0.50, 1.00, 0.79,
0.01, 0.85, 0.11, 0.79, 1.00
), nrow = 5, byrow = TRUE)
colnames(r) <- rownames(r) <- c("Gosto", "CustoBenef", "Sabor", "Lanche", "Energia")
print(r) Gosto CustoBenef Sabor Lanche Energia
Gosto 1.00 0.02 0.96 0.42 0.01
CustoBenef 0.02 1.00 0.13 0.71 0.85
Sabor 0.96 0.13 1.00 0.50 0.11
Lanche 0.42 0.71 0.50 1.00 0.79
Energia 0.01 0.85 0.11 0.79 1.00
n <- 200
p <- dim(r)[1]
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 200 p = 5 m = 2 df = 1
print(
GGally::ggcorr(data=NULL,
name="Preferência do Consumidor",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "varimax",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "varimax", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 h2 u2 com
Gosto 0.02 0.99 0.98 0.021 1.0
CustoBenef 0.94 -0.01 0.88 0.121 1.0
Sabor 0.13 0.98 0.98 0.024 1.0
Lanche 0.84 0.43 0.89 0.107 1.5
Energia 0.97 -0.02 0.93 0.068 1.0
RC1 RC2
SS loadings 2.54 2.12
Proportion Var 0.51 0.42
Cumulative Var 0.51 0.93
Proportion Explained 0.54 0.46
Cumulative Proportion 0.54 1.00
Mean item complexity = 1.1
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.03
with the empirical chi square 4.34 with prob < 0.037
Fit based upon off diagonal values = 1
Loadings:
RC1 RC2
CustoBenef 0.94 -0.01
Lanche 0.84 0.43
Energia 0.97 -0.02
Gosto 0.02 0.99
Sabor 0.13 0.98
RC1 RC2
SS loadings 2.54 2.12
Proportion Var 0.51 0.42
Cumulative Var 0.51 0.93
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "varimax",
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="path",
whatLabels="no",
rotation=2,
residuals=TRUE,
edge.color="black",
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
sizeInt=4,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)Tabela 9.8 mostra as estimativas iniciais e rotacionadas por máxima verossimilhança das cargas fatoriais para os dados dos retornos de ações dos Exemplos 8.5 e 9.5. Assume-se um modelo com \(m = 2\) fatores. As variâncias específicas e as proporções cumulativas da variância total (padronizada) explicada por cada fator também são apresentadas.
Tabela 9.8: Cargas fatoriais (ML) e rotacionadas (varimax)
| Variável | \(F_1\) | \(F_2\) | \(F_1^{\ast}\)$ | \(F_2^{\ast}\) | Variância específica |
|---|---|---|---|---|---|
| 1. J P Morgan | 0.115 | 0.755 | 0.763 | 0.024 | 0.42 |
| 2. Citibank | 0.322 | 0.788 | 0.821 | 0.227 | 0.27 |
| 3. Wells Fargo | 0.182 | 0.652 | 0.669 | 0.104 | 0.54 |
| 4. Royal Dutch Shell | 1.000 | -0.000 | 0.118 | 0.993 | 0.00 |
| 5. ExxonMobil | 0.683 | 0.032 | 0.113 | 0.675 | 0.53 |
| Proporção acumulada explicada | 0.323 | 0.647 | 0.346 | 0.647 |
Uma interpretação dos fatores sugerida pelas cargas não rotacionadas foi apresentada no Exemplo 9.5. Identificamos fatores de mercado e de indústria.
As cargas rotacionadas indicam que as ações de bancos (JP Morgan, Citibank e Wells Fargo) carregam fortemente no primeiro fator, enquanto as ações de petróleo (Royal Dutch Shell e ExxonMobil) carregam fortemente no segundo fator. Os dois fatores rotacionados, em conjunto, diferenciam os setores. É difícil rotular esses fatores com precisão. O Fator 1 representa forças econômicas específicas que fazem as ações de bancos se moverem juntas. O Fator 2 parece representar condições econômicas que afetam ações de petróleo.
Como já observado, um fator geral (isto é, um fator no qual todas as variáveis carregam fortemente) tende a ser destruído após a rotação. Por essa razão, quando um fator geral é evidente, uma rotação ortogonal pode ser conduzida mantendo-se fixas as cargas fatoriais gerais.
suppressMessages(suppressWarnings(invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
vars n mean sd median trimmed mad min max range skew
JPM 1 103 0.0011 0.0208 0.0034 0.0013 0.0217 -0.0459 0.0485 0.0943 -0.1128
Citi 2 103 0.0007 0.0209 0.0017 0.0002 0.0207 -0.0598 0.0525 0.1123 0.0893
WF 3 103 0.0016 0.0150 0.0003 0.0010 0.0130 -0.0362 0.0407 0.0769 0.3222
RDS 4 103 0.0040 0.0269 0.0063 0.0045 0.0245 -0.0539 0.0620 0.1159 -0.1267
EM 5 103 0.0040 0.0277 0.0052 0.0045 0.0249 -0.0636 0.0784 0.1420 -0.1173
kurtosis se
JPM -0.5367 0.0021
Citi 0.3767 0.0021
WF 0.0108 0.0015
RDS -0.4341 0.0026
EM 0.3017 0.0027
print(
GGally::ggcorr(data=NULL,
name="Retorno ação EUA (cor)",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = "varimax",
factors = m,
scores = "none")
semPlot::semPaths(object=fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(object=fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)
Communalities:
JPM Citi WF RDS EM
0.58 0.73 0.46 1.00 0.47
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = "varimax")
Uniquenesses:
JPM Citi WF RDS EM
0.417 0.275 0.542 0.005 0.530
Loadings:
Factor1 Factor2
JPM 0.763 0.029
Citi 0.819 0.232
WF 0.668 0.108
RDS 0.113 0.991
EM 0.108 0.677
Factor1 Factor2
SS loadings 1.725 1.507
Proportion Var 0.345 0.301
Cumulative Var 0.345 0.646
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.97 on 1 degree of freedom.
The p-value is 0.16
Factor1 Factor2
JPM 0.763 0.0292
Citi 0.819 0.2318
WF 0.668 0.1082
RDS 0.113 0.9911
EM 0.108 0.6771
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "varimax",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method VARIMAX ORTHOGONAL
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights Kaiser
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 1307.115 1344.001 1299.778 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.024 0.416 0.584
Citi 0.821* 0.227* 0.275 0.725
WF 0.669* 0.104 0.542 0.458
RDS 0.118 0.993* 0.000 1.000
EM 0.113 0.675* 0.532 0.468
f1 f2 total
Sum of sq (ortho) loadings 1.731 1.504 3.235
Proportion of total 0.535 0.465 1.000
Proportion var 0.346 0.301 0.647
Cumulative var 0.346 0.647 0.647
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "varimax",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2
0.512 0.339
Ortogonalizações são apropriadas para um modelo fatorial em que os fatores comuns são assumidos independentes. No entanto, muitos pesquisadores em ciências sociais consideram também rotações oblíquas (não ortogonais). Essas rotações são frequentemente sugeridas após se examinarem as cargas fatoriais estimadas e não decorrem necessariamente do modelo fatorial originalmente postulado. Ainda assim, a rotação oblíqua é, muitas vezes, um recurso útil na análise fatorial.
Se considerarmos os \(m\) fatores comuns como eixos coordenados, o ponto com coordenadas \((\hat{\ell}_{i1}, \hat{\ell}_{i2}, \ldots, \hat{\ell}_{im})\) representa a posição da \(i\)-ésima variável no espaço fatorial. Supondo que as variáveis se agrupem em clusters que não se sobreponham, uma rotação ortogonal para estrutura simples implica uma rotação rígida do sistema de coordenadas, tal que os eixos rotacionados passem o mais próximo possível dos grupos.
Já uma rotação oblíqua corresponde a uma rotação não rígida do sistema de coordenadas, de modo que os eixos rotacionados (não mais perpendiculares) passem aproximadamente pelos agrupamentos. A rotação oblíqua busca expressar cada variável em termos do menor número possível de fatores — idealmente, um único fator.
Rotações oblíquas são discutidas em diversas referências (por exemplo, [12] ou [20]) e não serão desenvolvidas neste capítulo.
Em lavaan::efa, o parâmetro rotation
oferece os métodos de rotação oblíqua oblimin,
promax e geomin. No exemplo de Preferência do
Consumidor, usando rotação oblimin, a correlação estimada
entre os fatores nutricional e gustativo é \(0.173\). Cada método de rotação produz um
valor diferente de correlação entre os dois fatores.
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
r <- matrix(c(
1.00, 0.02, 0.96, 0.42, 0.01,
0.02, 1.00, 0.13, 0.71, 0.85,
0.96, 0.13, 1.00, 0.50, 0.11,
0.42, 0.71, 0.50, 1.00, 0.79,
0.01, 0.85, 0.11, 0.79, 1.00
), nrow = 5, byrow = TRUE)
colnames(r) <- rownames(r) <- c("Gosto", "CustoBenef",
"Sabor", "Lanche", "Energia")
print(r) Gosto CustoBenef Sabor Lanche Energia
Gosto 1.00 0.02 0.96 0.42 0.01
CustoBenef 0.02 1.00 0.13 0.71 0.85
Sabor 0.96 0.13 1.00 0.50 0.11
Lanche 0.42 0.71 0.50 1.00 0.79
Energia 0.01 0.85 0.11 0.79 1.00
n <- 2
p <- dim(r)[1]
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 2 p = 5 m = 2 df = 1
print(
GGally::ggcorr(data=NULL,
name="Preferência do Consumidor",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)# factanal: sem rotação oblíqua
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "oblimin",
n.obs = n)Carregando namespace exigido: GPArotation
Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "oblimin", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
TC1 TC2 h2 u2 com
Gosto -0.06 1.00 0.98 0.021 1.0
CustoBenef 0.95 -0.09 0.88 0.121 1.0
Sabor 0.05 0.98 0.98 0.024 1.0
Lanche 0.82 0.36 0.89 0.107 1.4
Energia 0.98 -0.10 0.93 0.068 1.0
TC1 TC2
SS loadings 2.54 2.12
Proportion Var 0.51 0.42
Cumulative Var 0.51 0.93
Proportion Explained 0.55 0.45
Cumulative Proportion 0.55 1.00
With component correlations of
TC1 TC2
TC1 1.00 0.17
TC2 0.17 1.00
Mean item complexity = 1.1
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.03
with the empirical chi square 0.04 with prob < 0.83
Fit based upon off diagonal values = 1
Loadings:
TC1 TC2
CustoBenef 0.95 -0.09
Lanche 0.82 0.36
Energia 0.98 -0.10
Gosto -0.06 1.00
Sabor 0.05 0.98
TC1 TC2
SS loadings 2.53 2.10
Proportion Var 0.51 0.42
Cumulative Var 0.51 0.93
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "promax",
n.obs = n)
print(pca.m2,
sort=FALSE,
digits=2,
cut=0.0)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "promax", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 h2 u2 com
Gosto -0.09 1.01 0.98 0.021 1.0
CustoBenef 0.96 -0.12 0.88 0.121 1.0
Sabor 0.02 0.98 0.98 0.024 1.0
Lanche 0.81 0.34 0.89 0.107 1.3
Energia 0.99 -0.13 0.93 0.068 1.0
RC1 RC2
SS loadings 2.55 2.11
Proportion Var 0.51 0.42
Cumulative Var 0.51 0.93
Proportion Explained 0.55 0.45
Cumulative Proportion 0.55 1.00
With component correlations of
RC1 RC2
RC1 1.00 0.23
RC2 0.23 1.00
Mean item complexity = 1.1
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.03
with the empirical chi square 0.04 with prob < 0.83
Fit based upon off diagonal values = 1
# factanal: MLE
fit <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = GPArotation::oblimin,
factors = m,
scores = "none")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)
Communalities:
Gosto CustoBenef Sabor Lanche Energia
0.97 0.76 0.96 0.83 0.95
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = GPArotation::oblimin)
Uniquenesses:
Gosto CustoBenef Sabor Lanche Energia
0.028 0.237 0.040 0.168 0.052
Loadings:
Factor1 Factor2
CustoBenef 0.883 -0.074
Lanche 0.792 0.336
Energia 0.986 -0.104
Gosto -0.059 0.994
Sabor 0.049 0.970
Factor1 Factor2
SS loadings 2.385 2.058
Factor Correlations:
Factor1 Factor2
Factor1 1.000 0.173
Factor2 0.173 1.000
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is -0.07 on 1 degree of freedom.
The p-value is 1
Factor1 Factor2
Gosto -0.0589 0.9943
CustoBenef 0.8831 -0.0739
Sabor 0.0495 0.9698
Lanche 0.7919 0.3357
Energia 0.9861 -0.1043
fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "oblimin",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method OBLIMIN OBLIQUE
Oblimin gamma 0
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights None
Number of observations 2
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 38.259 19.963 -14.825 0.047 1 0.829 1 0
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.8531 1.8063 0.2045 0.1024 0.0337
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
Gosto 0.994* -0.059 0.028 0.972
CustoBenef -0.074 0.883* 0.237 0.763
Sabor 0.970* 0.050 0.040 0.960
Lanche 0.336 0.792* 0.168 0.832
Energia -0.104 0.986* 0.052 0.948
f2 f1 total
Sum of sq (obliq) loadings 2.400 2.073 4.474
Proportion of total 0.537 0.463 1.000
Proportion var 0.480 0.415 0.895
Cumulative var 0.480 0.895 0.895
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1.000
f2 0.173 1.000
fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "oblimin",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "promax",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method PROMAX OBLIQUE
Promax kappa 4
Rotation algorithm (rstarts) PROMAX (0)
Standardized metric TRUE
Row weights Kaiser
Number of observations 2
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 38.259 19.963 -14.825 0.047 1 0.829 1 0
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.8531 1.8063 0.2045 0.1024 0.0337
Standardized loadings:
f1 f2 unique.var communalities
Gosto 1.003 -0.092 0.028 0.972
CustoBenef -0.103 0.892 0.237 0.763
Sabor 0.975 0.018 0.040 0.960
Lanche 0.312 0.786 0.168 0.832
Energia -0.137 0.997 0.052 0.948
f2 f1 total
Sum of sq (obliq) loadings 2.402 2.071 4.474
Proportion of total 0.537 0.463 1.000
Proportion var 0.480 0.414 0.895
Cumulative var 0.480 0.895 0.895
Factor correlations:
f1 f2
f1 1.000
f2 0.235 1.000
fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "promax",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "geomin",
nfactors= m,
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method GEOMIN OBLIQUE
Geomin epsilon 0.001
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights None
Number of observations 2
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 38.259 19.963 -14.825 0.047 1 0.829 1 0
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.8531 1.8063 0.2045 0.1024 0.0337
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
Gosto 0.990* -0.065 0.028 0.972
CustoBenef 0.000 0.873* 0.237 0.763
Sabor 0.975* 0.043 0.040 0.960
Lanche 0.402 0.781 0.168 0.832
Energia -0.022 0.975* 0.052 0.948
f2 f1 total
Sum of sq (obliq) loadings 2.356 2.118 4.474
Proportion of total 0.527 0.473 1.000
Proportion var 0.471 0.424 0.895
Cumulative var 0.471 0.895 0.895
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1.000
f2 0.097 1.000
fit <- lavaan::efa(data = NULL,
auto.efa=TRUE,
sample.cov = r,
sample.nobs = n,
#orthogonal = TRUE,
std.lv = TRUE,
rotation = "geomin",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)Na análise fatorial, o interesse geralmente se concentra nos parâmetros do modelo fatorial. No entanto, os valores estimados dos fatores comuns, chamados escores fatoriais, também podem ser necessários.
Essas quantidades são frequentemente usadas para fins diagnósticos, bem como como entradas para uma análise subsequente.
Os escores fatoriais não são estimativas de parâmetros desconhecidos no sentido usual. Em vez disso, são estimativas dos valores dos vetores fatoriais aleatórios não observados \(\mathbf{F}_j\), \(j = 1, 2, \dots, n\). Ou seja, os escores fatoriais são
\[ \hat{\mathbf{f}}_j = \text{estimativa dos valores } \mathbf{f}_j \text{ assumidos por } \mathbf{F}_j \text{ (caso } j\text{)} \]
A situação de estimação é complicada pelo fato de que as quantidades não observadas \(\mathbf{f}_j\) e \(\boldsymbol{\varepsilon}_j\) excedem em número os valores observados \(\mathbf{x}_j\). Para superar essa dificuldade, algumas abordagens heurísticas, mas fundamentadas, para o problema de estimar escores fatoriais têm sido propostas. Descrevemos duas dessas abordagens.
Ambas as abordagens de escores fatoriais têm dois elementos em comum:
Elas tratam as cargas fatoriais estimadas \(\hat{\ell}_{ij}\) e as variâncias específicas estimadas \(\hat{\psi}_i\) como se fossem os valores verdadeiros.
Elas envolvem transformações lineares dos dados originais, possivelmente centrados ou padronizados. Tipicamente, as cargas fatoriais rotacionadas estimadas, em vez das cargas originais não rotacionadas, são usadas para calcular os escores fatoriais. As fórmulas computacionais, conforme apresentadas nesta seção, não se alteram quando cargas rotacionadas são usadas no lugar das cargas não rotacionadas, portanto, não faremos distinção entre elas.
Suponha inicialmente que o vetor de médias \(\boldsymbol{\mu}\), as cargas fatoriais \(\mathbf{L}\) e as variâncias específicas \(\boldsymbol{\Psi}\) são conhecidas no modelo fatorial
\[ \mathbf{X} - \boldsymbol{\mu} = \mathbf{L} \mathbf{F} + \boldsymbol{\varepsilon} \]
Além disso, considere os fatores específicos \(\boldsymbol{\varepsilon}^{\prime} = [\varepsilon_1, \varepsilon_2,\ldots,\varepsilon_p]\) como erros. Sabendo que \(\mathbb{V}(\varepsilon_i)=\psi_i\), e que \(\psi_i\) não precisam ser iguais entre si, Bartlett [3] sugeriu que mínimos quadrados ponderados (WLS) fossem usados para estimar os valores dos fatores comuns.
A soma dos quadrados dos erros, ponderada pelo inverso de suas variâncias, é
\[ \sum_{i=1}^p \frac{\varepsilon_i^2}{\psi_i} = \boldsymbol{\varepsilon}^{\prime}\boldsymbol{\Psi}^{-1}\boldsymbol{\varepsilon} = (\mathbf{x} - \boldsymbol{\mu} - \mathbf{L}\mathbf{f})^{\prime} \boldsymbol{\Psi}^{-1} (\mathbf{x} - \boldsymbol{\mu} - \mathbf{L}\mathbf{f}) \tag{9-47} \]
Bartlett propôs escolher o estimador \(\hat{\mathbf{f}}\) que minimiza (9-47). A solução (ver Exercício 7.3) é:
\[ \hat{\mathbf{f}} = (\mathbf{L}^{\prime}\boldsymbol{\Psi}^{-1}\mathbf{L})^{-1} \mathbf{L}^{\prime}\boldsymbol{\Psi}^{-1} (\mathbf{x} - \boldsymbol{\mu}) \tag{9-48} \]
Motivados por (9-48), usamos as estimativas \(\hat{\mathbf{L}}\), \(\hat{\boldsymbol{\Psi}}\) e \(\hat{\boldsymbol{\mu}} = \bar{\mathbf{x}}\) como valores verdadeiros e obtemos os escores fatoriais para a \(j\)-ésima observação como:
\[ \hat{\mathbf{f}}_j = (\hat{\mathbf{L}}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\hat{\mathbf{L}})^{-1} \hat{\mathbf{L}}^{\prime}\hat{\boldsymbol{\Psi}}^{-1} (\mathbf{x}_j - \bar{\mathbf{x}}) \tag{9-49} \]
Quando \(\hat{\mathbf{L}}\) e \(\hat{\boldsymbol{\Psi}}\) são obtidas por máxima verossimilhança, devem satisfazer a condição de unicidade:
\[ \hat{\mathbf{L}}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\hat{\mathbf{L}} = \hat{\boldsymbol{\Delta}} \]
uma matriz diagonal. Assim, temos escores fatoriais obtidos por WLS usando estimativas de máxima verossimilhança
\[ \hat{\mathbf{f}}_j = \boldsymbol{\Delta}^{-1} \hat{\mathbf{L}}^{\prime} \hat{\boldsymbol{\Psi}}^{-1} (\mathbf{x}_j - \bar{\mathbf{x}})\\ j = 1,\ldots,n \tag{9-50} \]
ou, se a matriz de correlação é fatorada:
\[ \hat{\mathbf{f}}_j = \boldsymbol{\Delta}^{-1} \hat{\mathbf{L}}_z^{\prime} \hat{\boldsymbol{\Psi}}_z^{-1} \mathbf{z}_j\\ j = 1,\ldots,n \]
sendo que \(\mathbf{z}_j = \mathbf{D}^{-1/2}(\mathbf{x}_j - \bar{\mathbf{x}})\), conforme (8-25), e
\[ \hat{\boldsymbol{\rho}} = \hat{\mathbf{L}}_z \hat{\mathbf{L}}_z^{\prime} + \hat{\boldsymbol{\Psi}}_z \]
Os escores fatoriais obtidos por (9-50) possuem vetor de médias amostrais \(\mathbf{0}\) e matriz de covariância amostral igual à identidade. (Ver Exercício 9.16)
Se cargas fatoriais rotacionadas \(\hat{\mathbf{L}}^{\ast} = \hat{\mathbf{L}}\mathbf{T}\) forem usadas no lugar das cargas originais em (9-50), então os escores fatoriais rotacionados são:
\[ \hat{\mathbf{f}}_j^{\ast} = \mathbf{T}^{\prime} \hat{\mathbf{f}}_j\\ j = 1,\ldots,n \] Comentário. Se as cargas fatoriais são estimadas pelo método dos componentes principais, é comum gerar escores fatoriais usando mínimos quadrados não ponderados (ordinary least squares). Isso equivale a assumir \(\psi_i\) aproximadamente iguais. Os escores fatoriais são então dados por
\[ \hat{\mathbf{f}}_{j} = (\mathbf{\hat{L}}^{\prime}\mathbf{\hat{L}})^{-1} \mathbf{\hat{L}}^{\prime} (\mathbf{x}_{j} - \bar{\mathbf{x}}) \tag{9-51} \]
ou, alternativamente, para dados padronizados:
\[ \hat{\mathbf{f}}_{j} = (\mathbf{\hat{L}}_{z}^{\prime}\mathbf{\hat{L}}_{z})^{-1} \mathbf{\hat{L}}_{z}^{\prime} \mathbf{z}_{j}, \qquad \mathbf{z}_{j} = \mathbf{D}^{-1/2}(\mathbf{x}_{j} - \bar{\mathbf{x}}) \]
sendo que as cargas fatoriais de componentes principais são
\[ \mathbf{\hat{L}} = \left[ \sqrt{\hat{\lambda}_{1}}\mathbf{e}_{1} \;\;\; \sqrt{\hat{\lambda}_{2}}\mathbf{e}_{2} \;\;\; \cdots \;\;\; \sqrt{\hat{\lambda}_{m}}\mathbf{e}_{m} \right] \]
Assim, cada escore fatorial pode ser escrito como
\[ \hat{\mathbf{f}}_{j} = \begin{bmatrix} \frac{1}{\sqrt{\hat{\lambda}_{1}}}\, \mathbf{e}_{1}^{\prime} (\mathbf{x}_{j} - \bar{\mathbf{x}}) \\ \frac{1}{\sqrt{\hat{\lambda}_{2}}}\, \mathbf{e}_{2}^{\prime} (\mathbf{x}_{j} - \bar{\mathbf{x}}) \\ \vdots \\ \frac{1}{\sqrt{\hat{\lambda}_{m}}}\, \mathbf{e}_{m}^{\prime} (\mathbf{x}_{j} - \bar{\mathbf{x}}) \end{bmatrix} \tag{9-51} \]
Para esses escores fatoriais, valem as propriedades de amostra:
\[ \frac{1}{n}\sum_{j=1}^{n} \hat{\mathbf{f}}_{j} = \mathbf{0} \qquad\text{(média amostral)} \]
\[ \frac{1}{n-1}\sum_{j=1}^{n} \hat{\mathbf{f}}_{j}\hat{\mathbf{f}}_{j}^{\prime} = \mathbf{I} \qquad\text{(covariância amostral)} \]
Comparando (9-51) com a definição dos componentes principais, concluímos:
Coparando (9-51) com (8-21), vemos que \(\hat{\mathbf{f}}_{j}\) são simplesmente os primeiros componentes principais (escalonados) avaliados em \(\mathbf{x}_{j}\).
\[\Diamond\]
Partindo novamente do modelo fatorial original
\[ \mathbf{X} - \boldsymbol{\mu} = \mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon} \]
tratamos inicialmente as cargas fatoriais \(\mathbf{L}\) e as variâncias específicas \(\boldsymbol{\Psi}\) como conhecidas. Quando os fatores comuns \(\mathbf{F}\) e os erros \(\boldsymbol{\varepsilon}\) são normalmente distribuídos (ver eq. 9-3), a combinação
\[ \mathbf{X} - \boldsymbol{\mu} = \mathbf{L}\mathbf{F} + \boldsymbol{\varepsilon} \]
tem distribuição
\[ \mathbf{X} - \boldsymbol{\mu} \sim \mathcal{N}_{p}\left(\mathbf{0},\, \mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}\right) \]
Além disso, a distribuição conjunta de \((\mathbf{X} - \boldsymbol{\mu})\) e \(\mathbf{F}\) é normal:
\[ \begin{bmatrix} \mathbf{X} - \boldsymbol{\mu} \\ \mathbf{F} \end{bmatrix} \sim \mathcal{N}_{p+m}\left( \mathbf{0},\; \mathbf{\Sigma}^{\ast} \right) \]
sendo que
\[ \mathbb{C}(\mathbf{X} - \boldsymbol{\mu}, \mathbf{F})=\underset{(m+p)\times (m+p)}{\mathbf{\Sigma}^{\ast}} = \begin{bmatrix} \underset{p\times p}{\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi}} & \underset{p\times m}{\mathbf{L}} \\[6pt] \underset{m\times p}{\mathbf{L}^{\prime}} & \underset{m\times m}{\mathbf{I}} \end{bmatrix} \tag{9-52} \]
Usando o resultado 4.6, encontramos a distribuição condicional
\[ \mathbb{E}(\mathbf{F} \mid \mathbf{x}) = \mathbf{L}^{\prime} \mathbf{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu}) = \mathbf{L}^{\prime} (\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi})^{-1} (\mathbf{x} - \boldsymbol{\mu}) \tag{9-53} \]
e
\[ \mathbb{C}(\mathbf{F} \mid \mathbf{x}) = \mathbf{I} - \mathbf{L}^{\prime} (\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi})^{-1} \mathbf{L} \tag{9-54} \]
As quantidades \(\mathbf{L}^{\prime}(\mathbf{L}\mathbf{L}^{\prime} + \boldsymbol{\Psi})^{-1}\) em (9-53) são coeficientes de uma regressão multivariada dos fatores nas variáveis observadas. Assim, dadas as observações \(\mathbf{x}_{j}\), os escores fatoriais estimados são:
\[ \hat{\mathbf{f}}_{j} = \mathbf{\hat{L}}^{\prime} \mathbf{\hat{\Sigma}}^{-1} (\mathbf{x}_{j} - \bar{\mathbf{x}}) = \mathbf{\hat{L}}^{\prime} \left(\mathbf{\hat{L}}\mathbf{\hat{L}}^{\prime} + \mathbf{\hat{\Psi}}\right)^{-1} (\mathbf{x}_{j} - \bar{\mathbf{x}})\\ j = 1,2,\ldots,n \tag{9-55} \]
A expressão (9-55) pode ser simplificada usando a identidade matricial (Exercício 9.6):
\[ \mathbf{\hat{L}}^{\prime} \left(\mathbf{\hat{L}}\mathbf{\hat{L}}^{\prime} + \mathbf{\hat{\Psi}}\right)^{-1} = \left(\mathbf{I} + \mathbf{\hat{L}}^{\prime} \mathbf{\hat{\Psi}}^{-1} \mathbf{\hat{L}} \right)^{-1} \mathbf{\hat{L}}^{\prime} \mathbf{\hat{\Psi}}^{-1} \tag{9-56} \] A identidade algébrica em (9-56) permite comparar os escores fatoriais obtidos pelo método de regressão com aqueles obtidos por WLS, conforme (9-50). Denotemos temporariamente:
Então, utilizando (9-56), temos:
\[ \hat{\mathbf{f}}_j^{\text{WLS}} = (\mathbf{L}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\mathbf{L})^{-1} (\mathbf{I} + \mathbf{L}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\mathbf{L}) \hat{\mathbf{f}}_j^{\text{R}} \tag{9-57} \]
Para estimadores de máxima verossimilhança, vale que
\[ (\mathbf{L}^{\prime}\hat{\boldsymbol{\Psi}}^{-1}\mathbf{L})^{-1} = \hat{\boldsymbol{\Delta}}^{-1} \]
e, se os elementos dessa matriz diagonal são próximos de zero, os métodos de regressão e de WLS tendem a produzir escores fatoriais quase idênticos.
Escores fatoriais obtidos por regressão:
Em aplicações práticas, para reduzir possíveis erros na determinação do número de fatores, costuma-se calcular os escores fatoriais substituindo
\[ \hat{\boldsymbol{\Sigma}} = \hat{\mathbf{L}}\hat{\mathbf{L}}^{\prime} + \hat{\boldsymbol{\Psi}} \]
pela matriz de covariâncias amostral original \(\mathbf{s}\):
\[ \hat{\mathbf{f}}_j = \hat{\mathbf{L}}^{\prime} \mathbf{s}^{-1} (\mathbf{x}_j - \bar{\mathbf{x}})\\ j = 1,2,\ldots,n \tag{9-58} \]
Se o modelo utilizar a matriz de correlações \(\mathbf{r}\):
\[ \hat{\mathbf{f}}_j = \hat{\mathbf{L}}_{z}^{\prime} \mathbf{r}^{-1} \mathbf{z}_j\\ j = 1,2,\ldots,n \]
sendo que
\[ \mathbf{z}_j = \mathbf{D}^{-1/2}(\mathbf{x}_j - \bar{\mathbf{x}}) \]
e
\[ \hat{\boldsymbol{\rho}} = \hat{\mathbf{L}}_{\mathbf{z}}\hat{\mathbf{L}}_{\mathbf{z}}^{\prime} + \hat{\boldsymbol{\Psi}}_{\mathbf{z}} \]
Se for utilizada uma rotação ortogonal, com
\[ \hat{\mathbf{L}}^{\ast} = \hat{\mathbf{L}}\mathbf{T} \]
então os escores fatoriais rotacionados são dados por
\[ \hat{\mathbf{f}}^{\ast}_j = \mathbf{T}^{\prime}\hat{\mathbf{f}}_j\\j = 1,2,\ldots,n \]
O coeficiente de correlação amostral entre os escores resultantes de dois métodos diferentes fornece uma medida do grau de concordância entre os métodos [sic: recomenda-se Regressão de Deming, conforme Silveira & Siqueira (2024)]. Nenhum dos métodos é considerado uniformemente superior em todas as situações.
Vamos ilustrar o cálculo de escores fatoriais pelos métodos de mínimos quadrados ponderados (WLS) de Bartlett e de regressão multivariada, usando os dados de retornos de ações discutidos no Exemplo 9.10.
Uma solução de máxima verossimilhança para um modelo com dois fatores comuns, obtida a partir de \(\mathbf{r}\), forneceu as cargas fatoriais rotacionadas padronizadas e as variâncias específicas
\[ \hat{\mathbf{L}}_{\mathbf{z}}^{\ast} = \begin{bmatrix} 0.763 & 0.024\\ 0.821 & 0.227\\ 0.669 & 0.104\\ 0.118 & 0.993\\ 0.113 & 0.675 \end{bmatrix} \qquad\text{e}\qquad \hat{\boldsymbol{\Psi}}_{\mathbf{z}} = \begin{bmatrix} 0.42 & 0 & 0 & 0 & 0 \\ 0 & 0.27 & 0 & 0 & 0 \\ 0 & 0 & 0.54 & 0 & 0 \\ 0 & 0 & 0 & 0.00 & 0 \\ 0 & 0 & 0 & 0 & 0.53 \end{bmatrix} \]
O vetor de observações padronizadas é
\[ \mathbf{z}^{\prime} = [0.50,-1.40,-0.20,-0.70,1.40] \]
Pelo método de mínimos quadrados ponderados (WLS) (expressão análoga a (9-50)), o escore fatorial estimado é
\[ \hat{\mathbf{f}} = \left(\hat{\mathbf{L}}_{\mathbf{z}}^{\ast \prime} \hat{\boldsymbol{\Psi}}_{\mathbf{z}}^{-1} \hat{\mathbf{L}}_{\mathbf{z}}^{\ast}\right)^{-1} \hat{\mathbf{L}}_{\mathbf{z}}^{\ast \prime} \hat{\boldsymbol{\Psi}}_{\mathbf{z}}^{-1} \mathbf{z} \]
Para os dados deste exemplo, obtemos aproximadamente
\[ \hat{\mathbf{f}} = \begin{bmatrix} -0.61\\ -0.61 \end{bmatrix} \]
Pelo método de regressão (expressão análoga a (9-58)), usando a matriz de correlações \(\mathbf{r}\) entre as cinco ações, os escores fatoriais são dados por
\[ \hat{\mathbf{f}} = \hat{\mathbf{L}}_{\mathbf{z}}^{\ast \prime} \mathbf{r}^{-1} \mathbf{z} \]
Escrevendo explicitamente a matriz de coeficientes,
\[ \hat{\mathbf{f}} = \begin{bmatrix} 0.331 & 0.526 & 0.221 & -0.137 & 0.011\\ -0.040 & -0.063 & -0.026 & 1.023 & -0.001 \end{bmatrix} \begin{bmatrix} 0.50\\ -1.40\\ -0.20\\ -0.70\\ 1.40 \end{bmatrix} = \begin{bmatrix} -0.50\\ -0.64 \end{bmatrix} \]
Os dois métodos de escoragem (pontuação) produzem resultados numéricos bastante diferentes para os escores fatoriais neste conjunto de dados, pois há offending estimate (variância negativa estimada por ML: Heywood case). Note que a variância nula é uma substituição da variância negativa estimada.
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))
))
# Vetor de escores padronizados z'
z <- c(0.50, -1.40, -0.20, -0.70, 1.40)
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
# factanal: MLE
fit <- fit.factanal <- factanal(x=Dados,
rotation = "varimax",
factors = m,
scores = "none")
print(fit, digits=3, cutoff=0.0, sort=TRUE)
Call:
factanal(x = Dados, factors = m, scores = "none", rotation = "varimax")
Uniquenesses:
JPM Citi WF RDS EM
0.417 0.275 0.542 0.005 0.530
Loadings:
Factor1 Factor2
JPM 0.763 0.029
Citi 0.819 0.232
WF 0.668 0.108
RDS 0.113 0.991
EM 0.108 0.677
Factor1 Factor2
SS loadings 1.725 1.507
Proportion Var 0.345 0.301
Cumulative Var 0.345 0.646
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.97 on 1 degree of freedom.
The p-value is 0.16
Lz <- as.matrix(loadings(fit)) # cargas padronizadas
Psi <- diag(fit$uniquenesses) # variâncias específicas
## Regressão
f_reg <- t(Lz) %*% solve(r) %*% z
## Bartlett / WLS (se Psi não for singular)
f_wls <- solve(t(Lz) %*% matlib::Ginv(Psi) %*% Lz) %*%
t(Lz) %*% matlib::Ginv(Psi) %*% z
print(f_wls, 2) [,1]
Factor1 -0.60
Factor2 -0.63
[,1]
Factor1 -0.50
Factor2 -0.64
fit <- lavaan::efa(
data = Dados,
auto.efa = TRUE,
orthogonal = TRUE,
std.lv = TRUE,
rotation = "varimax",
nfactors = m,
estimator = "ML",
output = "efa"
)
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method VARIMAX ORTHOGONAL
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights Kaiser
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 -2636.482 -2599.595 -2643.819 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.024 0.416 0.584
Citi 0.821* 0.227* 0.275 0.725
WF 0.669* 0.104 0.542 0.458
RDS 0.118 0.993* 0.000 1.000
EM 0.113 0.675* 0.532 0.468
f1 f2 total
Sum of sq (ortho) loadings 1.731 1.504 3.235
Proportion of total 0.535 0.465 1.000
Proportion var 0.346 0.301 0.647
Cumulative var 0.346 0.647 0.647
fit <- lavaan::efa(
data = Dados,
rotation = "varimax",
nfactors = m,
estimator = "ML",
output = "lavaan"
)
Lz <- as.matrix(lavaan::inspect(fit, "std")$lambda)
Psi <- diag(1 - rowSums(Lz^2))
r <- lavaan::lavInspect(fit, "cor.ov")
f_reg <- t(Lz) %*% solve(r) %*% z
Psi_adj <- Psi
diag(Psi_adj)[diag(Psi_adj) == 0] <- 1e-6
f_wls <- solve(t(Lz) %*% matlib::Ginv(Psi_adj) %*% Lz) %*%
t(Lz) %*% matlib::Ginv(Psi_adj) %*% z
print(f_wls, 2) [,1]
f1 -1.0
f2 1.5
[,1]
f1 -0.50
f2 -0.65
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))
))
Dados <- read.delim("JW6Data/T8-4.DAT", header = FALSE)
colnames(Dados) <- c("JPM", "Citi", "WF", "RDS", "EM")
r <- cor(Dados, use = "complete.obs", method = "pearson")
print(round(r, 3)) JPM Citi WF RDS EM
JPM 1.000 0.632 0.510 0.115 0.154
Citi 0.632 1.000 0.574 0.322 0.213
WF 0.510 0.574 1.000 0.182 0.146
RDS 0.115 0.322 0.182 1.000 0.683
EM 0.154 0.213 0.146 0.683 1.000
n <- nrow(Dados)
p <- ncol(Dados)
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 103 p = 5 m = 2 df = 1
# factanal: MLE
fit.B <- fit.factanal <- factanal(x=Dados,
rotation = "varimax",
factors = m,
scores = "Bartlett") # Bartlett's weighted least-squares scores
print(fit.B, digits=3, cutoff=0.0, sort=TRUE)
Call:
factanal(x = Dados, factors = m, scores = "Bartlett", rotation = "varimax")
Uniquenesses:
JPM Citi WF RDS EM
0.417 0.275 0.542 0.005 0.530
Loadings:
Factor1 Factor2
JPM 0.763 0.029
Citi 0.819 0.232
WF 0.668 0.108
RDS 0.113 0.991
EM 0.108 0.677
Factor1 Factor2
SS loadings 1.725 1.507
Proportion Var 0.345 0.301
Cumulative Var 0.345 0.646
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.97 on 1 degree of freedom.
The p-value is 0.16
Factor1 Factor2
Min. :-2.445 Min. :-2.241
1st Qu.:-0.788 1st Qu.:-0.720
Median : 0.063 Median : 0.084
Mean : 0.000 Mean : 0.000
3rd Qu.: 0.647 3rd Qu.: 0.566
Max. : 3.044 Max. : 2.284
Factor1 Factor2
[1,] 0.251 -1.854
[2,] 0.443 0.248
[3,] -0.481 -0.098
[4,] 0.799 -1.315
[5,] -0.099 0.959
[6,] -0.471 0.413
Factor1 Factor2
[98,] 1.571 -0.0085
[99,] -0.873 -0.1203
[100,] 0.063 -0.2072
[101,] 1.031 -0.8764
[102,] 0.171 -0.2692
[103,] -1.044 -0.2229
fit <- lavaan::efa(
data = Dados,
rotation = "varimax",
nfactors = m,
estimator = "ML",
output = "efa"
)
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method VARIMAX ORTHOGONAL
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights Kaiser
Number of observations 103
Fit measures:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 2 -2636.482 -2599.595 -2643.819 2.039 1 0.153 0.994 0.1
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5
2.437 1.407 0.501 0.400 0.255
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
JPM 0.764* 0.024 0.416 0.584
Citi 0.821* 0.227* 0.275 0.725
WF 0.669* 0.104 0.542 0.458
RDS 0.118 0.993* 0.000 1.000
EM 0.113 0.675* 0.532 0.468
f1 f2 total
Sum of sq (ortho) loadings 1.731 1.504 3.235
Proportion of total 0.535 0.465 1.000
Proportion var 0.346 0.301 0.647
Cumulative var 0.346 0.647 0.647
# escores fatoriais (padrão: método de regressão)
scores.B <- lavaan::lavPredict(
fit,
method = "Bartlett", # ou "regression"
type = "lv" # escores das variáveis latentes
)
summary(scores.B, digits=2) f1 f2
Min. :-2.46 Min. :-2.24
1st Qu.:-0.79 1st Qu.:-0.71
Median : 0.06 Median : 0.09
Mean : 0.00 Mean : 0.00
3rd Qu.: 0.65 3rd Qu.: 0.56
Max. : 3.05 Max. : 2.29
f1 f2
[1,] 0.241 -1.867
[2,] 0.447 0.244
[3,] -0.484 -0.095
[4,] 0.795 -1.324
[5,] -0.091 0.957
[6,] -0.471 0.420
f1 f2
[98,] 1.580 -0.023
[99,] -0.879 -0.111
[100,] 0.061 -0.206
[101,] 1.030 -0.884
[102,] 0.169 -0.266
[103,] -1.052 -0.214
# escores fatoriais (padrão: método de regressão)
scores.R <- lavaan::lavPredict(
fit,
method = "regression", # ou "regression"
type = "lv" # escores das variáveis latentes
)
sunflowerplot(scores.R[,1], scores.B[,1],
main="Regression scores: factanal x lavaan::efa")
lines(lowess(scores.R[,1], scores.B[,1]))
curve(x*1, add=TRUE, lty=2)sunflowerplot(scores.R[,2], scores.B[,2],
main="Regression scores: factanal x lavaan::efa")
lines(lowess(scores.R[,2], scores.B[,2]))
curve(x*1, add=TRUE, lty=2)sunflowerplot(fit.B$scores[,1], scores.B[,1],
main="Bartlett's weighted least-squares scores")
lines(lowess(fit.B$scores[,1], scores.B[,1]))
curve(x*1, add=TRUE, lty=2)sunflowerplot(fit.B$scores[,2], scores.B[,2],
main="Bartlett's weighted least-squares scores")
lines(lowess(fit.B$scores[,2], scores.B[,2]))
curve(x*1, add=TRUE, lty=2)Muitas decisões precisam ser tomadas em qualquer estudo de análise fatorial. Provavelmente, a decisão mais importante é a escolha de \(m\), o número de fatores comuns. Embora exista um teste de grande amostra para avaliar a adequação de um modelo dado \(m\), ele só é apropriado para dados aproximadamente normais. Além disso, o teste quase certamente rejeitará o modelo para m pequeno se o número de variáveis e observações for grande. Ainda assim, a análise fatorial frequentemente fornece uma aproximação útil. Na prática, a escolha final de \(m\) é baseada em alguma combinação de:
A escolha do método de solução e do tipo de rotação é menos crucial. De fato, as análises fatoriais mais satisfatórias são aquelas nas quais as rotações são avaliadas por mais de um método, e todos os resultados confirmam substancialmente a mesma estrutura fatorial.
No momento, a análise fatorial ainda mantém certo caráter artístico, e nenhuma estratégia única deve ser tratada como definitiva. Uma estratégia razoável consiste em:
Realizar uma análise fatorial por componentes principais.
Esse método é adequado como primeira análise dos dados (não é necessário
que as matrizes de covariância or correlação amostrais sejam não
singulares).
Realizar uma análise fatorial por máxima verossimilhança, incluindo rotação varimax.
Comparar as soluções dos dois métodos.
Repetir os três primeiros passos para outros valores de \(m\).
Fatores adicionais realmente contribuem para a interpretação dos
dados?
Para grandes conjuntos de dados, dividir a amostra em duas partes
e realizar a análise separadamente.
Comparar os resultados entre as duas metades e com o obtido na amostra
completa, avaliando a estabilidade da solução.
A divisão pode ser aleatória ou baseada em particionar a primeira metade
dos casos em um grupo e a segunda metade em outro.
Conforme Gerbing & Hamilton (1996), no artigo intitulado “Viabilidade da Análise Fatorial Exploratória como Precedente para a Análise Fatorial Confirmatória”:
“Resumo: Como parte do desenvolvimento de uma estratégia abrangente para construção e avaliação de modelos de equações estruturais, um estudo de Monte Carlo avaliou a eficácia de diferentes métodos de extração e rotação na análise fatorial exploratória para identificar corretamente o modelo populacional conhecido de medida com múltiplos indicadores. Os métodos exploratórios tiveram bom desempenho na recuperação do modelo, exceto em tamanhos de amostra pequenos com fatores altamente correlacionados, e mesmo nessas situações a maioria dos indicadores foi corretamente atribuída aos fatores. Surpreendentemente, a rotação ortogonal varimax apresentou desempenho tão bom quanto as rotações oblíquas mais sofisticadas na recuperação do modelo, e geralmente produziu estimativas mais precisas. Esses resultados demonstram que a análise fatorial exploratória pode contribuir como uma estratégia heurística útil para a especificação de modelos antes da validação cruzada com análise fatorial confirmatória.”
“A maioria dos usos de análises fatoriais”confirmatórias” são, na realidade, em parte exploratórias e em parte confirmatórias, em que o modelo resultante é derivado em parte da teoria e em parte de uma nova especificação com base na análise de ajuste do modelo. Uma prática comum é usar as informações fornecidas a partir de um CFA, como índices de modificação e erros padrão para reespecificar incrementalmente um modelo, a fim de obter melhor ajuste (alterando assim os erros-padrão relatados e o ajuste estatístico do modelo a partir de regras estatísticas formais para apenas guias heurísticos de ajuste). Este artigo fornece orientação para o pesquisador com relação à eficácia de uma estratégia heurística alternativa para a especificação do modelo baseado em dados. Especificamente, quão eficaz é a EFA em revelar a estrutura de um modelo de mensuração (psicométrico)?”
“A conclusão mais geral deste artigo é que EFA é uma ferramenta útil para auxiliar o pesquisador na recuperação de um modelo de mensuração subjacente que pode então ser avaliado com CFA. CFA de um modelo desenvolvido em parte com EFA é uma estratégia viável para o desenvolvimento e análise de teoria. O papel deste estudo foi mostrar que a EFA, particularmente com a rotação varimax dos fatores dos eixos principais, parece fornecer uma ferramenta heurística útil para a construção de modelos de mensuração de múltiplos indicadores como um precursor dos procedimentos CFA.”
Apresentamos os resultados de várias análises fatoriais sobre medidas de ossos e crânios de galinhas da linhagem white leghorn. Trata-se de um estudo de alometria osteométrica (ou morfometria alométrica) em aves, especificamente alectorométrica. Os dados originais foram obtidos de Dunn (5). A análise fatorial dos dados de Dunn foi originalmente discutida por Wright (15), que iniciou sua análise a partir de uma matriz de correlação diferente da que usamos aqui.
O conjunto completo de dados consiste em \(n = 276\) medidas de dimensões ósseas, organizadas da seguinte forma:
Cabeça: \[ \begin{cases} X_1 = \text{comprimento do crânio}\\ X_2 = \text{largura do crânio} \end{cases} \]
Perna: \[ \begin{cases} X_3 = \text{comprimento do fêmur}\\ X_4 = \text{comprimento da tíbia} \end{cases} \]
Asa: \[ \begin{cases} X_5 = \text{comprimento do úmero}\\ X_6 = \text{comprimento da ulna} \end{cases} \]
A matriz de correlação amostral é
\[ \mathbf{r} = \begin{bmatrix} 1.000 & .505 & .569 & .602 & .621 & .603\\ .505 & 1.000 & .422 & .467 & .482 & .450\\ .569 & .422 & 1.000 & .926 & .877 & .878\\ .602 & .467 & .926 & 1.000 & .874 & .894\\ .621 & .482 & .877 & .874 & 1.000 & .937\\ .603 & .450 & .878 & .894 & .937 & 1.000 \end{bmatrix} \]
Essa matriz foi analisada pelos métodos de componentes principais e de máxima verossimilhança, assumindo \(m = 2\) fatores.
Após a rotação, os dois métodos produzem resultados diferentes. Concentrando-nos no método de componentes principais e na proporção cumulativa da variância total explicada, observamos que uma solução de dois fatores parece justificada.
O primeiro fator parece representar um fator de tamanho corporal, dominado pelas dimensões da asa e da perna. O segundo representa dimensões cranianas.
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
r <- matrix(c(
1.000, 0.505, 0.569, 0.602, 0.621, 0.603,
0.505, 1.000, 0.422, 0.467, 0.482, 0.450,
0.569, 0.422, 1.000, 0.926, 0.877, 0.878,
0.602, 0.467, 0.926, 1.000, 0.874, 0.894,
0.621, 0.482, 0.877, 0.874, 1.000, 0.937,
0.603, 0.450, 0.878, 0.894, 0.937, 1.000
), nrow = 6, byrow = TRUE)
dimnames(r) <- list(
c("cranio_c", "cranio_l",
"femur_c", "tibia_c",
"umero_c", "ulna_c"),
c("cranio_c", "cranio_l",
"femur_c", "tibia_c",
"umero_c", "ulna_c")
)
print(r) cranio_c cranio_l femur_c tibia_c umero_c ulna_c
cranio_c 1.000 0.505 0.569 0.602 0.621 0.603
cranio_l 0.505 1.000 0.422 0.467 0.482 0.450
femur_c 0.569 0.422 1.000 0.926 0.877 0.878
tibia_c 0.602 0.467 0.926 1.000 0.874 0.894
umero_c 0.621 0.482 0.877 0.874 1.000 0.937
ulna_c 0.603 0.450 0.878 0.894 0.937 1.000
n <- 276
p <- dim(r)[1]
m <- 2
df <- 0.5*(p-m)*(p-m-1)-m
cat("\nn = ", n, " p = ", p, " m = ", m, " df = ", df, "\n", sep="")
n = 276 p = 6 m = 2 df = 4
print(
GGally::ggcorr(data=NULL,
name="Ossos de galinha",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=TRUE,
label_round=2,
label_size=4)
)## 1) calcular um layout fixo sem plotar
set.seed(123) # só para o layout ser reprodutível
q_tmp <- qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = "spring",
DoNotPlot = TRUE # <- calcula, mas não desenha
)
layout_fix <- q_tmp$layout # <- matriz de coordenadas dos nós
## 2) rede de correlações, agora usando layout_fix
qgraph::qgraph(
r,
graph = "cor",
sampleSize = n,
minimum = "sig",
bonf = TRUE,
layout = layout_fix, # <- aqui entra o layout fixo
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Ossos de galinha (cor)",
details = FALSE
)## 3) rede glasso, com o MESMO layout
suppressWarnings(qgraph::qgraph(
r,
graph = "glasso",
sampleSize = n,
layout = layout_fix, # <- mesmo layout, só mudam as arestas
shape = "rectangle",
vsize = 8,
label.cex = 1.6,
labels = colnames(r),
label.prop = 0,
theme = "gray",
title = "Ossos de galinha (glasso)",
details = FALSE
))eig <- eigen(r, symmetric = TRUE)
lambda <- eig$values
E <- eig$vectors # colunas = autovetores unitários
dt <- data.frame(1:length(lambda),format(as.numeric(lambda),
digits=2,
nsmall=2))
names(dt) <- c("component","value")
print(dt) component value
1 1 4.456
2 2 0.782
3 3 0.458
4 4 0.169
5 5 0.079
6 6 0.055
plot(lambda,
main="Ossos de galinha (cor)",
xlab="Componente", ylab="Autovalor",
type="o", pch=16, axes=FALSE)
axis(1, at=1:length(lambda))
axis(2)
abline(h=1,col="darkgray",lty=2)sv1maior <- lambda[1]
sv2maior <- lambda[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstAV/SecondAV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")FirstAV/SecondAV = H = 4.46/0.78 ~ 5.7
- if < 2: first order
- if > 3: unifactor
- otherwise: bifactor
if (H <= 2) {txt <- "\tpossible first order model, av1/av2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < av1/av2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, av1/av2 > 3"}
cat(txt) possible unifactor model, av1/av2 > 3
pca.m2 <- psych::principal(r = r,
covar = FALSE,
nfactors = m,
rotate = "oblimin",
n.obs = n)
psych::fa.plot(pca.m2)Principal Components Analysis
Call: psych::principal(r = r, nfactors = m, rotate = "oblimin", n.obs = n,
covar = FALSE)
Standardized loadings (pattern matrix) based upon correlation matrix
TC1 TC2 h2 u2 com
cranio_c 0.36 0.57 0.67 0.329 1.7
cranio_l -0.05 0.96 0.88 0.116 1.0
femur_c 0.99 -0.06 0.92 0.083 1.0
tibia_c 0.95 0.01 0.92 0.080 1.0
umero_c 0.93 0.05 0.92 0.082 1.0
ulna_c 0.96 0.00 0.93 0.072 1.0
TC1 TC2
SS loadings 3.89 1.34
Proportion Var 0.65 0.22
Cumulative Var 0.65 0.87
Proportion Explained 0.74 0.26
Cumulative Proportion 0.74 1.00
With component correlations of
TC1 TC2
TC1 1.00 0.52
TC2 0.52 1.00
Mean item complexity = 1.1
Test of the hypothesis that 2 components are sufficient.
The root mean square of the residuals (RMSR) is 0.06
with the empirical chi square 27.91 with prob < 1.3e-05
Fit based upon off diagonal values = 0.99
Loadings:
TC1 TC2
femur_c 0.99 -0.06
tibia_c 0.95 0.01
umero_c 0.93 0.05
ulna_c 0.96 0.00
cranio_c 0.36 0.57
cranio_l -0.05 0.96
TC1 TC2
SS loadings 3.81 1.26
Proportion Var 0.63 0.21
Cumulative Var 0.63 0.84
# factanal: MLE
fit <- fit.factanal <- factanal(x=NULL,
covmat = r,
n.obs = n,
rotation = GPArotation::oblimin,
factors = m,
scores = "none")
semPlot::semPaths(object=fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(object=fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)
Communalities:
cranio_c cranio_l femur_c tibia_c umero_c ulna_c
0.40 0.24 0.88 1.00 0.99 0.91
Call:
factanal(x = NULL, factors = m, covmat = r, n.obs = n, scores = "none", rotation = GPArotation::oblimin)
Uniquenesses:
cranio_c cranio_l femur_c tibia_c umero_c ulna_c
0.598 0.759 0.120 0.005 0.006 0.095
Loadings:
Factor1 Factor2
cranio_c 0.634 0.037
femur_c 0.930 -0.104
tibia_c 0.961 -0.251
umero_c 0.972 0.240
ulna_c 0.949 0.083
cranio_l 0.491 0.029
Factor1 Factor2
SS loadings 4.277 0.14
Factor Correlations:
Factor1 Factor2
Factor1 1.000 -0.017
Factor2 -0.017 1.000
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 28.2 on 4 degrees of freedom.
The p-value is 1.13e-05
Factor1 Factor2
cranio_c 0.634 0.0370
cranio_l 0.491 0.0292
femur_c 0.930 -0.1039
tibia_c 0.961 -0.2508
umero_c 0.972 0.2399
ulna_c 0.949 0.0834
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "oblimin",
nfactors= 1:(m+1),
estimator = "ML",
output = "efa")
print(lavaan::summary(fit,
nd = 3L,
cutoff = 0.0,
dot.cutoff = 0.05))This is lavaan 0.6-20 -- running exploratory factor analysis
Estimator ML
Rotation method OBLIMIN OBLIQUE
Oblimin gamma 0
Rotation algorithm (rstarts) GPA (30)
Standardized metric TRUE
Row weights None
Number of observations 276
Overview models:
aic bic sabic chisq df pvalue cfi rmsea
nfactors = 1 2977.019 3020.463 2982.413 122.826 9 0 0.938 0.214
nfactors = 2 2892.890 2954.437 2900.533 28.697 4 0 0.987 0.150
nfactors = 3 2872.390 2948.418 2881.830 0.197 0 NA 1.000 0.000
Eigenvalues correlation matrix:
ev1 ev2 ev3 ev4 ev5 ev6
4.4564 0.7824 0.4584 0.1688 0.0791 0.0548
Number of factors: 1
Standardized loadings: (* = significant at 1% level)
f1 unique.var communalities
cranio_c 0.637* 0.594 0.406
cranio_l 0.488* 0.762 0.238
femur_c 0.932* 0.131 0.869
tibia_c 0.940* 0.116 0.884
umero_c 0.954* 0.090 0.910
ulna_c 0.960* 0.078 0.922
f1
Sum of squared loadings 4.230
Proportion of total 1.000
Proportion var 0.705
Cumulative var 0.705
Number of factors: 2
Standardized loadings: (* = significant at 1% level)
f1 f2 unique.var communalities
cranio_c 0.218 0.432* 0.598 0.402
cranio_l 0.173 0.331* 0.758 0.242
femur_c 0.664* 0.295* 0.122 0.878
tibia_c 1.022* -0.025 0.000 1.000
umero_c -0.049 1.039* 0.010 0.990
ulna_c 0.265* 0.708* 0.094 0.906
f2 f1 total
Sum of sq (obliq) loadings 2.373 2.045 4.418
Proportion of total 0.537 0.463 1.000
Proportion var 0.396 0.341 0.736
Cumulative var 0.396 0.736 0.736
Factor correlations: (* = significant at 1% level)
f1 f2
f1 1.000
f2 0.894* 1.000
Number of factors: 3
Standardized loadings: (* = significant at 1% level)
f1 f2 f3 unique.var communalities
cranio_c 0.380 0.128 0.290 0.512 0.488
cranio_l 0.828* 0.002 -0.006 0.318 0.682
femur_c -0.019 0.649* 0.324* 0.118 0.882
tibia_c 0.047 1.001* -0.030 0.000 1.000
umero_c 0.043 -0.042 1.001* 0.022 0.978
ulna_c 0.007 0.234* 0.737* 0.087 0.913
f3 f2 f1 total
Sum of sq (obliq) loadings 2.129 1.852 0.962 4.943
Proportion of total 0.431 0.375 0.195 1.000
Proportion var 0.355 0.309 0.160 0.824
Cumulative var 0.355 0.663 0.824 0.824
Factor correlations: (* = significant at 1% level)
f1 f2 f3
f1 1.000
f2 0.537* 1.000
f3 0.566* 0.893* 1.000
fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "oblimin",
nfactors= 1,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)fit <- lavaan::efa(data = NULL,
sample.cov = r,
sample.nobs = n,
rotation = "oblimin",
nfactors= m,
estimator = "ML",
output = "lavaan")
semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit,
layout="tree",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=3,
edge.label.cex=1,
nCharNodes=10,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=TRUE)# Calculate composite reliability from estimated factor-model parameters
print(semTools::compRelSEM(fit)) f1 f2
0.201 0.295
# latent variables can be thought of representing two distinct constructs?
print(semTools::discriminantValidity(fit))Some of the latent variable variances are fixed to values other than 1. The model is re-estimated by scaling the latent variables based on the first factor loading.
Warning: lavaan->lav_model_vcov():
The variance-covariance matrix of the estimated parameters (vcov) does not
appear to be positive definite! The smallest eigenvalue (= -7.125087e-18)
is smaller than zero. This may be a symptom that the model is not
identified.
lhs op rhs est ci.lower ci.upper Df AIC BIC Chisq
1 f1 ~~ f2 0.8937724 0.8592398 0.9283049 3 2894.89 2960.057 28.69723
Chisq diff RMSEA Df diff Pr(>Chisq)
1 1.176659e-11 0 1 0.9999973
Modelo de equações estruturais (SEM) consiste num conjunto de equações lineares usados para especificar fenômenos em termos de suas variáveis presumidas de causa e efeito. Na sua forma mais geral, os modelos permitem variáveis que não podem ser medidas diretamente. Esses modelos são particularmente úteis nas ciências sociais e comportamentais e têm sido usados para estudar a relação entre status social e desempenho, os determinantes da lucratividade de empresas, discriminação no emprego, a eficiência de programas de ação social e outros mecanismos relevantes.
Softwares para especificar, ajustar e avaliar modelos de equações estruturais:
Comercial:
R:
Usando a notação de Jöreskog e Sörbom, o modelo LISREL é dado pelas equações
\[ \underset{m\times 1}{\boldsymbol{\eta}} = \underset{m\times m}{\mathbf{B}}\;\underset{m\times 1}{\boldsymbol{\eta}} + \underset{m\times n}{\boldsymbol{\Gamma}}\;\underset{n\times 1}{\boldsymbol{\xi}} + \underset{m\times 1}{\boldsymbol{\zeta}} \tag{9-59} \]
\[ \begin{align} \underset{p\times 1}{\mathbf{Y}} &= \underset{p\times m}{\boldsymbol{\Lambda}_{\mathbf{y}}}\;\underset{m\times 1}{\boldsymbol{\eta}} + \underset{p\times 1}{\boldsymbol{\varepsilon}}\\\\ \underset{q\times 1}{\mathbf{X}} &= \underset{q\times n}{\boldsymbol{\Lambda}_{\mathbf{x}}}\;\underset{n\times 1}{\boldsymbol{\xi}} + \underset{q\times 1}{\boldsymbol{\delta}} \end{align} \tag{9-60} \]
com
\[ \begin{align} \mathbb{E}(\boldsymbol{\zeta}) &= \mathbf{0} \qquad \mathbb{C}(\boldsymbol{\zeta}) = \boldsymbol{\Psi}\\ \mathbb{E}(\boldsymbol{\varepsilon}) &= \mathbf{0} \qquad \mathbb{C}(\boldsymbol{\varepsilon}) = \boldsymbol{\Theta}_{\varepsilon}\\ \mathbb{E}(\boldsymbol{\delta}) &= \mathbf{0} \qquad \mathbb{C}(\boldsymbol{\delta}) = \boldsymbol{\Theta}_{\delta} \end{align} \tag{9-61} \]
As quantidades \(\boldsymbol{\zeta}\), \(\boldsymbol{\varepsilon}\) e \(\boldsymbol{\delta}\) são mutuamente não correlacionadas.
\(\mathbb{C}(\boldsymbol{\xi}) = \boldsymbol{\Phi}\).
\(\boldsymbol{\zeta}\) é não correlacionado com \(\boldsymbol{\xi}\).
\(\boldsymbol{\varepsilon}\) é não correlacionado com \(\boldsymbol{\eta}\).
\(\boldsymbol{\delta}\) é não correlacionado com \(\boldsymbol{\xi}\).
A matriz \(\mathbf{B}\) tem zeros na diagonal.
\(\mathbf{I} - \mathbf{B}\) é não singular.
Além disso, assumimos \(\mathbb{E}(\boldsymbol{\xi}) = \mathbf{0}\) e \(\mathbb{E}(\boldsymbol{\eta}) = \mathbf{0}\).
As quantidades \(\boldsymbol{\xi}\) e \(\boldsymbol{\eta}\) em (9-59) são as variáveis de causa e efeito, respectivamente, e, em geral, não são observadas diretamente. Elas são chamadas de variáveis latentes. As quantidades \(\mathbf{Y}\) e \(\mathbf{X}\) em (9-60) são variáveis manifestas linearmente relacionadas a \(\boldsymbol{\eta}\) e \(\boldsymbol{\xi}\) pelas matrizes de coeficientes \(\boldsymbol{\Lambda}_\mathbf{y}\) e \(\boldsymbol{\Lambda}_\mathbf{x}\), e essas variáveis podem ser medidas. Seus valores observados constituem os dados. As equações (9-60) são chamadas de equações de medida.
Faz-se uma distinção entre variáveis que não são influenciadas por outras variáveis no sistema (variáveis exógenas) e variáveis que são afetadas por outras (variáveis endógenas). Cada variável dependente (endógena) possui um termo residual associado.
Determinadas convenções regem o desenho de um diagrama de caminhos (path diagram), que é construído da seguinte forma (setas direcionadas representam um caminho):
Uma seta reta é desenhada para cada variável dependente (endógena) a partir de cada uma de suas fontes.
Uma seta reta também é desenhada para cada variável dependente a partir de seu termo residual.
Uma seta curva com duas pontas é desenhada entre cada par de variáveis independentes (exógenas) que se presume terem correlação diferente de zero.
A seta curva que representa correlação indica a natureza simétrica de um coeficiente de correlação. As outras conexões são direcionais, conforme indicado pela seta de ponta única.
Considere o seguinte diagrama de caminhos para as variáveis de causa e efeito:
(O diagrama mostra três variáveis exógenas \(\xi_1\), \(\xi_2\), \(\xi_3\) com correlações entre elas, e duas variáveis endógenas \(\eta_1\) e \(\eta_2\), com setas direcionais representando os coeficientes \(\gamma_1, \gamma_2, \gamma_3, \gamma_4\) e \(\beta\), além dos termos residuais \(\zeta_1\) e \(\zeta_2\).)
Este diagrama, com \(m = 2\) e \(n = 3\), corresponde à equação estrutural (ver 9-59):
\[ \begin{bmatrix} \eta_1 \\ \eta_2 \end{bmatrix} = \begin{bmatrix} 0 & \beta \\ 0 & 0 \end{bmatrix} \begin{bmatrix} \eta_1 \\ \eta_2 \end{bmatrix} + \begin{bmatrix} \gamma_1 & \gamma_2 & 0 \\ 0 & \gamma_3 & \gamma_4 \end{bmatrix} \begin{bmatrix} \xi_1 \\ \xi_2 \\ \xi_3 \end{bmatrix} + \begin{bmatrix} \zeta_1 \\ \zeta_2 \end{bmatrix} \]
com
\[ \mathbb{C}(\xi_1, \xi_2) = \phi_1 \qquad \mathbb{C}(\xi_2, \xi_3) = \phi_2 \qquad \mathbb{C}(\xi_1, \xi_3) = \phi_3 \]
e
\[ \mathbb{C}(\zeta_1, \zeta_2) = 0 \]
Vemos, por exemplo, que \(\eta_1\) depende de \(\xi_1\), \(\xi_2\) e \(\eta_2\).
Diagramas de caminhos são ferramentas úteis para formular modelos estruturais. Como indicam a direção e a natureza da causalidade, eles obrigam o pesquisador a pensar cuidadosamente sobre o problema.
\[\Diamond\] O modelo em (9-59) e (9-60) possui uma estrutura muito rica e inclui diversos submodelos importantes como casos particulares. Por exemplo, com uma escolha criteriosa de dimensões e variáveis, é possível definir tanto o modelo de regressão linear multivariada quanto o modelo de análise fatorial.
Como \(\boldsymbol{\eta}\) e \(\boldsymbol{\xi}\) não são observadas, o modelo LISREL não pode ser verificado diretamente. Entretanto, assim como na análise fatorial, o modelo e suas suposições implicam uma estrutura de covariância que pode ser examinada.
Defina o vetor de dados \([\,\mathbf{Y}^{\prime},\mathbf{X}^{\prime}\,]^{\prime}\). Então,
\[ \mathbb{C} \begin{pmatrix} \begin{bmatrix} Y \\ X \end{bmatrix} \end{pmatrix} = \underset{(p+q)\times(p+q)}{\boldsymbol{\Sigma}} = \begin{bmatrix} \underset{p\times p}{\boldsymbol{\Sigma}_{11}} & \underset{p\times q}{\boldsymbol{\Sigma}_{12}} \\[6pt] \underset{q\times p}{\boldsymbol{\Sigma}_{21}} & \underset{q\times q}{\boldsymbol{\Sigma}_{22}} \end{bmatrix} = \begin{bmatrix} \mathbb{C}(\mathbf{Y}) & \mathbb{C}(\mathbf{Y},\mathbf{X})\\[4pt] \mathbb{C}(\mathbf{X},\mathbf{Y}) & \mathbb{C}(\mathbf{X}) \end{bmatrix} \tag{9-62} \]
Para simplificar a apresentação, tome \(\mathbf{B} = \mathbf{0}\). Assim,
\[ \begin{align} \mathbb{C}(\mathbf{Y}) &= \mathbb{E}(\mathbf{Y}\mathbf{Y}^{\prime})\\ &= \boldsymbol{\Lambda}_{\mathbf{y}}\, \mathbb{C}(\boldsymbol{\eta})\, \boldsymbol{\Lambda}_{\mathbf{y}}^{\prime} + \boldsymbol{\Theta}_{\boldsymbol{\varepsilon}}\\ \mathbb{C}(\mathbf{Y})&= \boldsymbol{\Lambda}_{\mathbf{y}}\, (\boldsymbol{\Gamma}\boldsymbol{\Phi}\boldsymbol{\Gamma}^{\prime} + \boldsymbol{\Psi})\, \boldsymbol{\Lambda}_{\mathbf{y}}^{\prime} + \boldsymbol{\Theta}_{\boldsymbol{\varepsilon}} \end{align} \]
\[ \begin{align} \mathbb{C}(\mathbf{X}) &= \boldsymbol{\Lambda}_{\mathbf{x}}\, \mathbb{C}(\boldsymbol{\xi})\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime} + \boldsymbol{\Theta}_{\delta}\\ \mathbb{C}(\mathbf{X})&= \boldsymbol{\Lambda}_{\mathbf{x}}\, \boldsymbol{\Phi}\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime} + \boldsymbol{\Theta}_{\boldsymbol{\delta}} \end{align} \]
\[ \begin{align} \mathbb{C}(\mathbf{Y},\mathbf{X}) &= \mathbb{E}(\mathbf{Y}\mathbf{X}^{\prime})\\ &= \boldsymbol{\Lambda}_{\mathbf{y}}\, \mathbb{E}\left[(\boldsymbol{\Gamma}\boldsymbol{\xi}+\boldsymbol{\zeta}+\boldsymbol{\varepsilon}) (\boldsymbol{\Lambda}_{\mathbf{x}}\boldsymbol{\xi}+\boldsymbol{\delta})^{\prime} \right]\\ \mathbb{C}(\mathbf{Y},\mathbf{X})&= \boldsymbol{\Lambda}_{\mathbf{y}}\, \boldsymbol{\Gamma}\, \boldsymbol{\Phi}\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime}\\\\ \mathbb{C}(\mathbf{Y},\mathbf{X})&= \left[\mathbb{C}(\mathbf{X},\mathbf{Y})\right]^{\prime} \end{align} \tag{9-63} \]
Portanto:
\[ \begin{align} \mathbb{C} \begin{bmatrix} Y \\[2pt] X \end{bmatrix} &= \begin{bmatrix} \mathbb{C}(\mathbf{Y}) & \mathbb{C}(\mathbf{Y},\mathbf{X})\\[4pt] \mathbb{C}(\mathbf{X},\mathbf{Y}) & \mathbb{C}(\mathbf{X}) \end{bmatrix}\\ &= \begin{bmatrix} \boldsymbol{\Lambda}_{\mathbf{y}}\, (\boldsymbol{\Gamma}\boldsymbol{\Phi}\boldsymbol{\Gamma}^{\prime} + \boldsymbol{\Psi})\, \boldsymbol{\Lambda}_{\mathbf{y}}^{\prime} + \boldsymbol{\Theta}_{\boldsymbol{\varepsilon}} & \boldsymbol{\Lambda}_{\mathbf{y}}\, \boldsymbol{\Gamma}\, \boldsymbol{\Phi}\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime}\\[4pt] \left(\boldsymbol{\Lambda}_{\mathbf{y}}\, \boldsymbol{\Gamma}\, \boldsymbol{\Phi}\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime}\right)^{\prime} & \boldsymbol{\Lambda}_{\mathbf{x}}\, \boldsymbol{\Phi}\, \boldsymbol{\Lambda}_{\mathbf{x}}^{\prime} + \boldsymbol{\Theta}_{\boldsymbol{\delta}} \end{bmatrix} \end{align} \]
As covariâncias acima são funções não lineares dos
parâmetros do modelo:
\(\boldsymbol{\Lambda}_{\mathbf{x}}\),
\(\boldsymbol{\Lambda}_{\mathbf{y}}\),
\(\boldsymbol{\Gamma}\), \(\boldsymbol{\Phi}\), \(\boldsymbol{\Psi}\), \(\boldsymbol{\Theta}_{\boldsymbol{\varepsilon}}\)
e \(\boldsymbol{\Theta}_{\boldsymbol{\delta}}\).
(Recordando: supomos \(\mathbf{B} =
\mathbf{0}\).)
Dadas \(n\) observações multivariadas \([\,\mathbf{y}_{j}^{\prime}, \mathbf{x}_{j}^{\prime}\,]^{\prime}\), \(j=1,\dots,n\), a matriz de covariância amostral é [veja (3-11)]
\[ \underset{(p+q)\times(p+q)}{\mathbf{S}} = \begin{bmatrix} \underset{p\times p}{\mathbf{S}_{11}} & \underset{p\times q}{\mathbf{S}_{12}}\\[6pt] \underset{q\times p}{\mathbf{S}_{21}} & \underset{q\times q}{\mathbf{S}_{22}} \end{bmatrix} \tag{9-64} \]
A matriz \(\mathbf{S}\) pode ser particionada de maneira compatível com \(\boldsymbol{\Sigma}\). As informações contidas em \(\mathbf{S}\) são usadas para estimar os parâmetros do modelo impondo
\[ \hat{\boldsymbol{\Sigma}} = \mathbf{S} \tag{9-64} \]
e resolvendo as equações resultantes.
Infelizmente, as equações em (9-64) muitas vezes não podem ser resolvidas de forma explícita. É necessário usar um procedimento iterativo de busca que comece com estimativas iniciais dos parâmetros do modelo e produza uma matriz \(\hat{\boldsymbol{\Sigma}}\) que aproxime bem \(\mathbf{S}\). Esses procedimentos usam uma função critério que mede a discrepância entre \(\hat{\boldsymbol{\Sigma}}\) e \(\mathbf{S}\). O programa LISREL utiliza atualmente um critério de mínimos quadrados e um critério de máxima verossimilhança para estimar os parâmetros do modelo.
O próximo exemplo, com dados hipotéticos, ilustra um caso em que as estimativas dos parâmetros podem ser obtidas a partir de (9-64).
Considere \(m = 1\), \(n = 1\), \(p = 2\), \(q = 2\) e \(\mathbf{B} = \mathbf{0}\) em (9-59) e (9-60).
A equação estrutural (regressão entre variáveis latentes) é:
\[ \eta = \gamma\cdot \xi + 1\cdot\zeta \]
As duas equações de mensuração (modelos unifatoriais) são:
\[ \begin{align} \begin{bmatrix} Y_1\\ Y_2 \end{bmatrix} &= \begin{bmatrix} 1\\ \lambda_1 \end{bmatrix}\eta + \begin{bmatrix} \varepsilon_1\\ \varepsilon_2 \end{bmatrix}1\\ \begin{bmatrix} X_1\\ X_2 \end{bmatrix} &= \begin{bmatrix} \lambda_2\\ 1 \end{bmatrix}\xi + \begin{bmatrix} \delta_1\\ \delta_2 \end{bmatrix}1 \end{align} \] Note que um \(\lambda\) de cada equação de mensuração tem valor unitário. Essa etapa de SEM é fundamental para atribuir unidade de medida à variável latente comum e desta maneira reificá-la. O nome desta etapa é identificação do SEM. Note também que todos os coeficientes de regressão das variáveis latentes específicas (resíduos) são unitários pelo mesmo motivo.
Além disso, tome \(\mathbb{V}(\xi) = \phi\) e \(\mathbb{V}(\zeta) = \psi\),
\[ \mathbb{C}(\boldsymbol{\varepsilon}) = \begin{bmatrix} \theta_1 & 0\\ 0 & \theta_2 \end{bmatrix} \qquad \mathbb{C}(\boldsymbol{\delta}) = \begin{bmatrix} \theta_3 & 0\\ 0 & \theta_4 \end{bmatrix} \]
Usando (9-63), obtemos
\[ \begin{align} \mathbb{C}(\mathbf{Y}) &= \boldsymbol{\Sigma}_{11} = \begin{bmatrix} \gamma^{2}\phi + \psi + \theta_1 & \lambda_1(\gamma^{2}\phi + \psi)\\[4pt] \lambda_1(\gamma^{2}\phi + \psi) & \lambda_1^{2}(\gamma^{2}\phi + \psi) + \theta_2 \end{bmatrix}\\ \mathbb{C}(\mathbf{Y},\mathbf{X}) &= \boldsymbol{\Sigma}_{12} = \begin{bmatrix} \lambda_2(\gamma\phi) & \gamma\phi\\[4pt] \lambda_1\lambda_2(\gamma\phi) & \lambda_1(\gamma\phi) \end{bmatrix} = \boldsymbol{\Sigma}_{21}^{\prime}\\ \mathbb{C}(\mathbf{X}) &= \boldsymbol{\Sigma}_{22} = \begin{bmatrix} \phi\lambda_2^{2} + \theta_3 & \phi\lambda_2\\[4pt] \phi\lambda_2 & \phi + \theta_4 \end{bmatrix} \end{align} \]
Os dados coletados para \(Y\) e \(X\) produzem a seguinte matriz de covariância amostral:
\[ \mathbf{s}=\begin{bmatrix} \mathbf{s}_{11} & \mathbf{s}_{12}\\ \mathbf{s}_{21} & \mathbf{s}_{22} \end{bmatrix} = \begin{bmatrix} 14.3 & -27.6 & 6.4 & 3.2\\ -27.6 & 55.4 & -12.8 & -6.4\\ 6.4 & -12.8 & 3.7 & 1.6\\ 3.2 & -6.4 & 1.6 & 1.1 \end{bmatrix} \]
Igualando \(\hat{\Sigma} = \mathbf{s}\), obtemos as equações:
\((\gamma^2 \hat{\phi} + \hat{\psi}) + \hat{\theta}_1 = 14.3\)
\(\lambda_1(\gamma^2 \hat{\phi} + \hat{\psi}) = -27.6\)
\(\lambda_1^2(\gamma^2 \hat{\phi} + \hat{\psi}) + \hat{\theta}_2 = 55.4\)
\(\lambda_2 \gamma \hat{\phi} = 6.4\)
\(\gamma \hat{\phi} = 3.2\)
\(\lambda_1 \lambda_2 (\gamma \hat{\phi}) = -12.8\)
\(\lambda_1(\gamma \hat{\phi}) = -6.4\)
\(\hat{\phi} \lambda_2^2 + \hat{\theta}_3 = 3.7\)
\(\hat{\phi} \lambda_2 = 1.6\)
\(\hat{\phi} + \hat{\theta}_4 = 1.1\)
Das equações (iv) e (v), \(\lambda_2 = 2.0\). Da equação (ix), \(\hat{\phi} = 0.8\). Seguindo as demais equações, obtemos:
\[ \hat{\gamma} = 4, \qquad \hat{\boldsymbol{\Lambda}}_\mathbf{y} = \begin{bmatrix} 1\\ -2 \end{bmatrix}, \qquad \hat{\boldsymbol{\Lambda}}_\mathbf{x} = \begin{bmatrix} 2\\ 1 \end{bmatrix} \]
\[ \hat{\phi} = 0.8, \qquad \hat{\psi} = 1, \qquad \hat{\boldsymbol{\Theta}}_{\boldsymbol{\varepsilon}} = \begin{bmatrix} 0.5 & 0\\ 0 & 2 \end{bmatrix}, \qquad \hat{\boldsymbol{\Theta}}_{\boldsymbol{\delta}} = \begin{bmatrix} 0.5 & 0\\ 0 & 0.3 \end{bmatrix} \]
As colunas das matrizes \(\boldsymbol{\Lambda}_\mathbf{y}\) e \(\boldsymbol{\Lambda}_\mathbf{x}\) contêm valores iguais a 1 para fixar a escala das variáveis latentes \(\eta\) e \(\xi\). Neste exemplo, as unidades de \(\eta\) foram escolhidas iguais às de \(Y_1\), e as unidades de \(\xi\) iguais às de \(X_2\).
As variáveis estruturais \(\eta\) e \(\xi\) podem representar, por exemplo, desempenho da empresa e talento gerencial, respectivamente. As medidas observáveis \(Y_1\) (lucro) e \(Y_2\) (preço da ação) são indicadores de desempenho. Indicadores do talento gerencial, como \(X_1\) (anos como CEO) e \(X_2\) (número de conselhos nos quais participa), podem ser medidos. Assim, assumindo que o desempenho da firma é causado em grande parte pelo talento gerencial, obtém-se o modelo apresentado.
## Exemplo 9.16 – solução algébrica em R
## Matriz de covariância amostral S (ordem: Y1, Y2, X1, X2)
S <- matrix(c(
14.3, -27.6, 6.4, 3.2,
-27.6, 55.4, -12.8, -6.4,
6.4, -12.8, 3.7, 1.6,
3.2, -6.4, 1.6, 1.1
), nrow = 4, byrow = TRUE)
colnames(S) <- rownames(S) <- c("Y1","Y2","X1","X2")
S Y1 Y2 X1 X2
Y1 14.3 -27.6 6.4 3.2
Y2 -27.6 55.4 -12.8 -6.4
X1 6.4 -12.8 3.7 1.6
X2 3.2 -6.4 1.6 1.1
## Passos algébricos exatamente como no texto
# 1) parâmetros ligados a X1, X2
lambda2_hat <- S["Y1","X1"] / S["Y1","X2"] # λ2 = S13 / S14
phi_hat <- S["X1","X2"] / lambda2_hat # φ = S34 / λ2
gamma_phi_hat <- S["Y1","X2"] # γ φ = S14
gamma_hat <- gamma_phi_hat / phi_hat # γ = (γ φ)/φ
theta4_hat <- S["X2","X2"] - phi_hat # θ4 = Var(X2) - φ
theta3_hat <- S["X1","X1"] - phi_hat*lambda2_hat^2 # θ3 = Var(X1) - φ λ2^2
# 2) parâmetros ligados a Y1, Y2
lambda1_hat <- S["Y2","X2"] / gamma_phi_hat # λ1 = S24 / (γ φ)
G2phi_hat <- gamma_hat^2 * phi_hat # γ^2 φ
B_hat <- S["Y1","Y2"] / lambda1_hat # B = γ^2 φ + ψ
psi_hat <- B_hat - G2phi_hat # ψ = B - γ^2 φ
theta1_hat <- S["Y1","Y1"] - B_hat # θ1 = Var(Y1) - B
theta2_hat <- S["Y2","Y2"] - lambda1_hat^2*B_hat# θ2 = Var(Y2) - λ1^2 B
## Resumos dos parâmetros
pars <- c(
gamma = gamma_hat,
lambda1 = lambda1_hat,
lambda2 = lambda2_hat,
phi = phi_hat,
psi = psi_hat,
theta1 = theta1_hat,
theta2 = theta2_hat,
theta3 = theta3_hat,
theta4 = theta4_hat
)
round(pars, 3) gamma lambda1 lambda2 phi psi theta1 theta2 theta3 theta4
4.0 -2.0 2.0 0.8 1.0 0.5 0.2 0.5 0.3
## Reconstruindo Σ̂ a partir dos parâmetros para conferir
Lambda_y_hat <- matrix(c(1, lambda1_hat), ncol = 1)
Lambda_x_hat <- matrix(c(lambda2_hat, 1), ncol = 1)
Theta_e_hat <- diag(c(theta1_hat, theta2_hat))
Theta_d_hat <- diag(c(theta3_hat, theta4_hat))
Sigma11_hat <- tcrossprod(Lambda_y_hat) * (gamma_hat^2*phi_hat + psi_hat) + Theta_e_hat
Sigma22_hat <- tcrossprod(Lambda_x_hat) * phi_hat + Theta_d_hat
Sigma12_hat <- tcrossprod(Lambda_y_hat, Lambda_x_hat) * (gamma_hat*phi_hat)
Sigma_hat <- rbind(
cbind(Sigma11_hat, Sigma12_hat),
cbind(t(Sigma12_hat), Sigma22_hat)
)
print(round(Sigma_hat, 2)) [,1] [,2] [,3] [,4]
[1,] 14.3 -27.6 6.4 3.2
[2,] -27.6 55.4 -12.8 -6.4
[3,] 6.4 -12.8 3.7 1.6
[4,] 3.2 -6.4 1.6 1.1
Y1 Y2 X1 X2
Y1 0 0 0 0
Y2 0 0 0 0
X1 0 0 0 0
X2 0 0 0 0
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
S <- matrix(c(14.3, -27.6, 6.4, 3.2,
-27.6, 55.4, -12.8, -6.4,
6.4, -12.8, 3.7, 1.6,
3.2, -6.4, 1.6, 1.1),
nrow = 4, byrow = TRUE)
colnames(S) <- rownames(S) <- c("Y1","Y2","X1","X2")
r <- cov2cor(S)
print(signif(r,2)) Y1 Y2 X1 X2
Y1 1.00 -0.98 0.88 0.81
Y2 -0.98 1.00 -0.89 -0.82
X1 0.88 -0.89 1.00 0.79
X2 0.81 -0.82 0.79 1.00
print(
GGally::ggcorr(
data = NULL,
name = "",
cor_matrix = r,
geom = "tile",
min_size = 0,
max_size = 10,
nbreaks = 6,
digits = 2,
label = TRUE,
label_round= 2,
label_size = 4
)
)## modelo LISREL simples: 1 fator endógeno (eta) e 1 exógeno (xi)
## Y1,Y2 medem eta; X1,X2 medem xi; eta ~ xi
mod_916 <- "
eta =~ Y1 + Y2
xi =~ X2 + X1
eta ~ xi
"
fit_916 <- lavaan::sem(model = mod_916,
std.lv = FALSE,
bounds = TRUE,
estimator = "ML",
sample.cov = S,
sample.nobs = 200)
print(lavaan::summary(fit_916))lavaan 0.6-20 ended normally after 75 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 9
Row rank of the constraints matrix 8
Number of observations 200
Model Test User Model:
Test statistic 0.000
Degrees of freedom 1
P-value (Chi-square) 1.000
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
eta =~
Y1 1.000
Y2 -2.000 0.031 -64.747 0.000
xi =~
X2 1.000
X1 2.000 0.107 18.656 0.000
Regressions:
Estimate Std.Err z-value P(>|z|)
eta ~
xi 4.000 0.213 18.774 0.000
Variances:
Estimate Std.Err z-value P(>|z|)
.Y1 0.497 0.100 4.975 0.000
.Y2 0.199 0.348 0.573 0.567
.X2 0.298 0.035 8.567 0.000
.X1 0.497 0.087 5.690 0.000
.eta 0.995 0.313 3.182 0.001
xi 0.796 0.107 7.452 0.000
semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="est",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="est",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)\[\Diamond\] Exercício 9.17 (J&W, 5a ed.). Considere o modelo LISREL no Exemplo 9.16. Troque 1 e \(\lambda_1\) no vetor de parâmetros \(\boldsymbol{\Lambda}_\mathbf{y}\), e troque \(\lambda_2\) e 1 no vetor de parâmetros \(\boldsymbol{\Lambda}_\mathbf{x}\). Usando a matriz \(\boldsymbol{s}\) fornecida no exemplo, resolva para os parâmetros do modelo. Explique por que as escalas das variáveis estruturais \(\eta_1\) e \(\zeta\) devem ser fixadas.
Solução:
A equação estrutural é:
\[ \eta = \gamma \xi + \zeta \]
As equações de medida são:
\[ \begin{align} \begin{bmatrix} Y_1 \\ Y_2 \end{bmatrix} &= \begin{bmatrix} \lambda_1 \\ 1 \end{bmatrix} \eta + \begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \end{bmatrix}\\ \begin{bmatrix} X_1 \\ X_2 \end{bmatrix} &= \begin{bmatrix} 1 \\ \lambda_2 \end{bmatrix} \xi + \begin{bmatrix} \delta_1 \\ \delta_2 \end{bmatrix} \end{align} \]
Adicionalmente, seja:
\[ \mathbb{V}(\xi) = \phi\qquad \mathbb{V}(\zeta) = \psi \]
As covariâncias dos erros são:
\[ \mathbb{C}(\boldsymbol{\varepsilon)} = \begin{bmatrix} \theta_1 & 0 \\ 0 & \theta_2 \end{bmatrix} \qquad \mathbb{C}(\boldsymbol{\delta)} = \begin{bmatrix} \theta_3 & 0 \\ 0 & \theta_4 \end{bmatrix} \]
A matriz de covariâncias observada é:
\[ \hat{\mathbb{C}} \begin{pmatrix} \begin{bmatrix} Y \\ X \end{bmatrix} \end{pmatrix} = \mathbf{s} = \begin{bmatrix} 14.3 & -27.6 & 6.4 & 3.2 \\ -27.6 & 55.4 & -12.8 & -6.4 \\ 6.4 & -12.8 & 3.7 & 1.6 \\ 3.2 & -6.4 & 1.6 & 1.1 \end{bmatrix} \]
A partir disso, obtemos:
\[ \hat{\mathbb{V}}(Y_1) = \hat{\lambda}_1^2(\hat{\gamma}^2 \hat{\phi} + \hat{\psi}) + \hat{\theta_1} = 14.3 \]
\[ \hat{\mathbb{V}}(Y_2) = (\hat{\gamma}^2\hat{\phi} + \hat{\psi}) + \hat{\theta}_2 = 55.4 \]
\[ \hat{\mathbb{C}}(Y_1,Y_2) = \hat{\lambda}_1(\hat{\gamma}^2 \hat{\phi} + \hat{\psi}) = -27.6 \]
\[ \hat{\mathbb{C}}(Y_1,X_1) = \hat{\lambda}_1 \hat{\gamma} \hat{\phi} = 6.4 \]
\[ \hat{\mathbb{C}}(Y_1,X_2) = \hat{\lambda}_1 \hat{\lambda}_2 \hat{\gamma} \hat{\phi} = 3.2 \]
\[ \hat{\mathbb{C}}(Y_2,X_1) = \hat{\gamma} \hat{\phi} = -12.8 \]
\[ \hat{\mathbb{C}}(Y_2,X_2) = \hat{\lambda}_2 \hat{\gamma} \hat{\phi} = -6.4 \]
\[ \hat{\mathbb{V}}(X_1) = \hat{\phi} + \hat{\theta}_3 = 3.7 \]
\[ \hat{\mathbb{V}}(X_2) = \hat{\lambda}_2^2 \hat{\phi} + \hat{\theta}_4 = 1.1 \]
\[ \hat{\mathbb{C}}(X_1,X_2) = \hat{\lambda}_2 \hat{\phi} = 1.6 \]
Resolvendo (i)–(x):
\[ \hat{\phi} = 3.2,\qquad \hat{\gamma} = -4,\qquad \hat{\psi} = 4 \]
As cargas padronizadas estimadas:
\[ \hat{\boldsymbol{\Lambda}}_\mathbf{y} = \begin{bmatrix} -0.5 \\ 1.0 \end{bmatrix} \qquad \hat{\boldsymbol{\Lambda}}_\mathbf{x} = \begin{bmatrix} 0.5 \\ 1 \end{bmatrix} \]
Covariâncias residuais:
\[ \mathbb{C}(\boldsymbol{\varepsilon}) = \begin{bmatrix} 0.5 & 0 \\ 0 & 0.2 \end{bmatrix} \qquad \mathbb{C}(\boldsymbol{\delta}) = \begin{bmatrix} 0.5 & 0 \\ 0 & 0.3 \end{bmatrix} \]
Comparando os modelos ajustados:
Exemplo 9.16:
\[ \begin{align} \eta &= 4\xi + \zeta \\ Y_1 &= \eta + \varepsilon_1 \\ Y_2 &= -2\eta + \varepsilon_2 \\ X_1 &= 2\eta + \delta_1 \\ X_2 &= \eta + \delta_2 \end{align} \]
Exercício 9.17:
\[ \begin{align} \eta &= -4\xi + \zeta \\ Y_1 &= -0.5\eta + \varepsilon_1 \\ Y_2 &= \eta + \varepsilon_2 \\ X_1 &= \eta + \delta_1 \\ X_2 &= 0.5\eta + \delta_2 \end{align} \]
Se \(\eta\) e \(\xi\) não forem escaladas, os \(\lambda\) não podem ser determinadas unicamente sem restrições adicionais. A mudança de escala altera a interpretação dos resultados. Os dados eram artificiais, e o Exemplo 9.16 foi construído para “ajustar” o modelo.
A razão para a construção de dois casos é a indeterminação de escala das variáveis latentes no modelo LISREL. Como nem \(\xi\) nem \(\eta\) têm sua unidade de medida fixada, o sinal do parâmetro estrutural \(\gamma\) não é identificável a partir das covariâncias observadas.
Quando a escala de uma variável latente é definida por um indicador específico (e.g., \(X_2\) para \(\xi\) e \(Y_1\) para \(\eta\)), o sinal de \(\gamma\) fica determinado pela covariância entre esses indicadores. No Caso 1, \(\mathbb{C}(X_2, Y_1) = 3.2 > 0\), implicando \(\gamma > 0\).
Se a escala for definida por outro par de indicadores (e.g., \(X_1\) para \(\xi\) e \(Y_2\) para \(\eta\)), o sinal de \(\gamma\) se ajusta para satisfazer a nova associação observada. No Caso 2, \(\mathbb{C}(X_1, Y_2) = -12.8 < 0\), implicando \(\gamma < 0\).
Assim, os dois casos mostram que, sem fixação explícita de escala, o modelo admite soluções igualmente válidas com sinais opostos para \(\gamma\). A escolha da unidade de medida das latentes determina o sinal, mas não afeta as covariâncias reproduzidas pelo modelo.
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
S <- matrix(c(14.3, -27.6, 6.4, 3.2,
-27.6, 55.4, -12.8, -6.4,
6.4, -12.8, 3.7, 1.6,
3.2, -6.4, 1.6, 1.1),
nrow = 4, byrow = TRUE)
colnames(S) <- rownames(S) <- c("Y1","Y2","X1","X2")
r <- cov2cor(S)
print(signif(r,2)) Y1 Y2 X1 X2
Y1 1.00 -0.98 0.88 0.81
Y2 -0.98 1.00 -0.89 -0.82
X1 0.88 -0.89 1.00 0.79
X2 0.81 -0.82 0.79 1.00
print(
GGally::ggcorr(
data = NULL,
name = "",
cor_matrix = r,
geom = "tile",
min_size = 0,
max_size = 10,
nbreaks = 6,
digits = 2,
label = TRUE,
label_round= 2,
label_size = 4
)
)## modelo LISREL simples: 1 fator endógeno (eta) e 1 exógeno (xi)
## Y1,Y2 medem eta; X1,X2 medem xi; eta ~ xi
mod_916 <- "
eta =~ Y2 + Y1
xi =~ X1 + X2
eta ~ xi
"
fit_916 <- lavaan::sem(model = mod_916,
std.lv = FALSE,
bounds = TRUE,
estimator = "ML",
sample.cov = S,
sample.nobs = 200)
print(lavaan::summary(fit_916))lavaan 0.6-20 ended normally after 71 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 9
Row rank of the constraints matrix 8
Number of observations 200
Model Test User Model:
Test statistic 0.000
Degrees of freedom 1
P-value (Chi-square) 1.000
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
eta =~
Y2 1.000
Y1 -0.500 0.008 -64.747 0.000
xi =~
X1 1.000
X2 0.500 0.027 18.656 0.000
Regressions:
Estimate Std.Err z-value P(>|z|)
eta ~
xi -4.000 0.162 -24.710 0.000
Variances:
Estimate Std.Err z-value P(>|z|)
.Y2 0.199 0.348 0.573 0.567
.Y1 0.497 0.100 4.975 0.000
.X1 0.497 0.087 5.690 0.000
.X2 0.299 0.035 8.567 0.000
.eta 3.980 1.257 3.166 0.002
xi 3.184 0.372 8.564 0.000
semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="path",
rotation=1,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="est",
rotation=1,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="path",
rotation=1,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="est",
rotation=1,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)Podemos também determinar a correlação entre as duas variáveis latentes \(\eta\) e \(\xi\).
suppressMessages(suppressWarnings(
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
S <- matrix(c(14.3, -27.6, 6.4, 3.2,
-27.6, 55.4, -12.8, -6.4,
6.4, -12.8, 3.7, 1.6,
3.2, -6.4, 1.6, 1.1),
nrow = 4, byrow = TRUE)
colnames(S) <- rownames(S) <- c("Y1","Y2","X1","X2")
r <- cov2cor(S)
print(signif(r,2)) Y1 Y2 X1 X2
Y1 1.00 -0.98 0.88 0.81
Y2 -0.98 1.00 -0.89 -0.82
X1 0.88 -0.89 1.00 0.79
X2 0.81 -0.82 0.79 1.00
print(
GGally::ggcorr(
data = NULL,
name = "",
cor_matrix = r,
geom = "tile",
min_size = 0,
max_size = 10,
nbreaks = 6,
digits = 2,
label = TRUE,
label_round= 2,
label_size = 4
)
)mod_916 <- "
eta =~ Y1 + Y2
xi =~ X2 + X1
eta ~~ xi
"
fit_916 <- lavaan::sem(model = mod_916,
std.lv = FALSE,
bounds = TRUE,
estimator = "ML",
sample.cov = S,
sample.nobs = 200)
print(lavaan::summary(fit_916))lavaan 0.6-20 ended normally after 51 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 9
Row rank of the constraints matrix 9
Number of observations 200
Model Test User Model:
Test statistic 0.000
Degrees of freedom 1
P-value (Chi-square) 1.000
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
eta =~
Y1 1.000
Y2 -2.000 0.031 -64.747 0.000
xi =~
X2 1.000
X1 2.000 0.107 18.656 0.000
Covariances:
Estimate Std.Err z-value P(>|z|)
eta ~~
xi 3.184 0.358 8.897 0.000
Variances:
Estimate Std.Err z-value P(>|z|)
.Y1 0.498 0.100 4.975 0.000
.Y2 0.199 0.348 0.573 0.567
.X2 0.298 0.035 8.567 0.000
.X1 0.497 0.087 5.690 0.000
eta 13.731 1.425 9.638 0.000
xi 0.796 0.107 7.452 0.000
semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)mod_916 <- "
eta =~ Y2 + Y1
xi =~ X1 + X2
eta ~~ xi
"
fit_916 <- lavaan::sem(model = mod_916,
std.lv = FALSE,
bounds = TRUE,
estimator = "ML",
sample.cov = S,
sample.nobs = 200)
print(lavaan::summary(fit_916))lavaan 0.6-20 ended normally after 49 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 9
Row rank of the constraints matrix 9
Number of observations 200
Model Test User Model:
Test statistic 0.000
Degrees of freedom 1
P-value (Chi-square) 1.000
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
eta =~
Y2 1.000
Y1 -0.500 0.008 -64.747 0.000
xi =~
X1 1.000
X2 0.500 0.027 18.656 0.000
Covariances:
Estimate Std.Err z-value P(>|z|)
eta ~~
xi -12.736 1.351 -9.426 0.000
Variances:
Estimate Std.Err z-value P(>|z|)
.Y2 0.199 0.348 0.573 0.567
.Y1 0.497 0.100 4.975 0.000
.X1 0.498 0.087 5.690 0.000
.X2 0.299 0.035 8.567 0.000
eta 54.924 5.523 9.944 0.000
xi 3.184 0.372 8.564 0.000
semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="lisrel",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="path",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)semPlot::semPaths(fit_916,
layout="spring",
style="ram",
what="std",
whatLabels="std",
rotation=2,
residuals=TRUE,
edge.color="black",
nDigits=2,
edge.label.cex=1,
nCharNodes=8,
sizeLat=10,
sizeMan=10,
curvePivot=TRUE,
intAtSide=TRUE,
fade=FALSE)De modo geral, para estimar os parâmetros de um modelo estrutural, precisamos de mais equações do que incógnitas.
Se \(t\) é o número total de parâmetros desconhecidos, então \(p\) e \(q\) devem satisfazer
\[ t \le (p+q)\,\frac{p+q+1}{2} \tag{9-65} \]
Essa condição, porém, não garante que todos os parâmetros possam ser estimados de forma única.
O ajuste final do modelo deve ser analisado com cuidado.
Pontos essenciais:
Inspecionar cada parâmetro estimado, verificando se sinais e magnitudes fazem sentido substantivo.
Examinar a matriz residual
\[
\mathbf{S} - \hat{\boldsymbol{\Sigma}}
\]
Os resíduos devem ser pequenos e sem padrão sistemático.
Verificar variâncias: procedimentos iterativos de estimação podem gerar estimativas negativas (casos de Heywood). Todas as variâncias devem ser positivas.
Avaliar se a solução obtida dependeu do ponto inicial da iteração.
Em resumo: identificação não garante estimabilidade prática, e estimabilidade não garante ajuste adequado.
Liste pelo menos duas vantagens dos modelos de equações estruturais (SEM) em relação aos modelos tradicionais de ANOVA e regressão.
Em um diagrama convencional de SEM, \(Y_1 \to Y_2\) significa:
O que é um mediador em um modelo de caminhos?
Qual das afirmações sobre modelos de caminhos não está correta?
Quais são algumas formas possíveis de considerar os erros de medida das variáveis observadas no SEM?
O que significa dizer que um modelo é identificado?
Para que um modelo seja identificado, devemos fixar as variâncias das variáveis latentes em 1. V/F
A estatística de teste do modelo, \((N - 1)F_{min}\), tem distribuição qui-quadrado, onde (N) é o tamanho da amostra e \(F_{min}\) é o mínimo da função de ajuste. V/F
Mesmo que um modelo se ajuste muito bem aos dados, ainda é muito provável obter um valor de qui-quadrado significativo. V/F
Qual dos seguintes índices de ajuste do modelo é o mais sensível ao tamanho da amostra?
Respostas e soluções:
O SEM pode incluir tanto variáveis observadas quanto latentes, e as relações entre construtos latentes podem ser examinadas; várias variáveis dependentes podem ser estudadas em uma única análise de SEM; os resíduos das equações podem ser correlacionados no SEM.
B
C
Um mediador é uma variável que serve tanto como uma variável de origem quanto como uma variável de resultado. Em outras palavras, ela afeta e também é afetada por algumas outras variáveis dentro do modelo.
C
B
Existem duas maneiras possíveis: (1) incorporar coeficientes de confiabilidade, quando aplicável, fixando as variâncias de erro como os quadrados dos erros-padrão de medida; (2) incorporar modelos de medida quando múltiplos indicadores dos construtos estão disponíveis.
D
F (A escala de uma variável latente pode ser definida de duas maneiras: padronizando-a ou fixando a carga fatorial de um indicador em 1.)
F (Ela tem distribuição qui-quadrado somente quando o modelo está corretamente especificado e as demais suposições do modelo são satisfeitas.)
V (Mantendo constante a discrepância entre modelo e dados, o valor do qui-quadrado do modelo aumenta à medida que o tamanho da amostra aumenta.)
A
D (Tanto valores altos do qui-quadrado do modelo quanto do RMSEA indicam mau ajuste do modelo, mas o qui-quadrado também é afetado pelo tamanho da amostra, portanto a melhor opção é o RMSEA.)
B
D
F (Existem certas condições necessárias para relações causais que provavelmente não são satisfeitas em estudos transversais.)
Artigos que atualizam análise fatorial exploratória (EFA):
Beaujean, AA (2013) Factor analysis using R. Practical Assessment, Research & Evaluation 18(4): 1-16.
Achim (2017)
Nájera et al. (2025)
Rönkkö & Cho (2020)
Trendafilov & Unkel (2011)
Zygmont & Smith (2014)
Artigos que atualizam modelo de equações estruturais (SEM):
Lei & Wu (2007)
Rosseel, Y & Vidal, M (2025) A tutorial for understanding SEM using R: Where do all the numbers come from? British Journal of Mathematical and Statistical Psychology 00: 1-38. https://doi.org/10.1111/bmsp.70003
Epskamp, S (2015) semPlot: Unified visualizations of structural equation models. Structural Equation Modeling: A Multidisciplinary Journal 22(3): 474–83. https://doi.org/10.1080/10705511.2014.937847
Evermann, J (2010) Multiple-Group Analysis Using the sem Package in the R System, Structural Equation Modeling: A Multidisciplinary Journal 17(4): 677-702. DOI: 10.1080/10705511.2010.510070. https://joerg.evermann.ca/docs/sem_tutorial.zip