1. Úvod do faktorovej analýzy
Faktorovú analýzu je možné považovať za ďalšiu štatistickú metódu určenú jednak pre exploratívne účely a tiež redukciu dimenzionality pôvodných dat. Na rozdiel od metódy hlavných komponent sa ale nezameriava a exploráciu celkovej variability a jej jednotlivých zdrojov (vrámci pôvodných premenných), ale zkúma závislostnú štruktúru medzi jednotlivými premennými (v pôvodných datach) v zmysle kovariancie/korelácia. Princíp podobných, resp. blízkych korelácii je následne využitý aj pre problem redukcie dimenzionality.
Faktorová analýza je efektívna metóda redukcie dimenzionality hlavne v prípadoch, keď sa vyžaduje následná štatistická analýza v zmysle budovania nejakého regresného modelu, ktorý je citlivý na problém multikolinearity, prípadne umožňuje využiť len obmedzené množstvo premenných. Z pohľadu explorácie dat faktorová analýza popisuje celkovú korelačnú štruktúru medzi pôvodnými premennými pomocou (väčšinou výrazne) menšieho počtu nových premenných – tzv. faktorov – ktoré sú latentné (nepozorované), ale každý z faktorov dostatočne dobre koreluje s určitou podmnožinou pôvodných premenných.
Faktorová analýza teda umožňuje grupovanie (resp. roztriedenie) pôvodných premenných podľa podobnej (vysokej) vzájomnej korelácie. Skupina pôvodných premenných s vysokou koreláciou je následne reprezentovaná jedným konkrétnym latentným faktorom.
Z určitého hľadiska je možné faktorovú analýzu považovať za zovšeobecnenie štandardnej metódy hlavných komponent (PCA) avšak ponúka jednú zásadnú a praktickú výhodu – väčšinou výrazne intuitivnejšiu a jednoduchšiu interpretáciu latentných faktorov, než je tomu v prípade hlavných kompenent.
V štatistickom programe R je pre faktorovú analýzu v deafultnej inštalácii k dispozícii funkcia factanal()
. Okrem tejto funkcie sú k dispozícii ďalšie balíčky a knižnice s alternativnými funkciami a ďalšími rozšíreniami (napr. funkcia Factanal()
z knižnice ‘FAiR’, alebo funkcia fa.promax()
z knižnice ‘psych’).
Pre účely tohto inštrukážneho materiálu budeme využívať hlavne štandardnú R funkciu factanal()
. Faktorovú analýzu aplikujeme na data s biologickými metrikami pre rôzne lokality v blízkosti vodných tokov v Českej republike. Datový súbor obsahuje 65 rôzných lokalít a pre každú lokalitu je zaznamenané jej ekologické a biologická kvalita pomocou 17 rôznych metrík a indexov (definovaných rôznymi certifikovanými metodikami napr. prostredníctvom MŽP ČR).
rm(list = ls())
bioData <- read.csv("http://msekce.karlin.mff.cuni.cz/~maciak/NMST539/bioData.csv", header = T)
dim(bioData)
## [1] 65 18
head(bioData)
## Kod_Canoco SaprInd Lital RETI EPTAbu Marg Metaritr JepAbu
## 1 BecvChor 2.57620 31.96916 0.37453 26.90136 7.10911 16.25647 14.89330
## 2 BecvOsek 2.43686 28.12037 0.27790 23.32888 5.80443 14.14831 11.06343
## 3 BecvTrou 2.10235 21.30691 0.31422 36.49575 6.14622 11.21903 30.23011
## 4 BelaBosk 1.53297 37.12914 0.48181 38.49802 9.36742 25.32146 10.11182
## 5 BilyPoto 1.79499 27.21495 0.37100 23.26918 8.62000 17.88813 5.95577
## 6 BlatTova 2.90209 16.04854 0.30351 8.64187 5.51661 7.98030 4.71039
## Epiritral Hyporitral Ntaxon Nceled Bindex EPTTax PosAbu Spasaci
## 1 7.68869 22.52242 18 40 0.64865 23 0.33939 28.29352
## 2 6.96659 19.74992 12 25 0.37838 16 0.00000 20.84029
## 3 5.92213 18.63735 9 25 0.16216 12 1.47017 20.88415
## 4 20.37168 18.17237 16 40 0.72000 30 8.07504 28.62651
## 5 12.08359 19.09771 21 36 0.54167 21 0.54567 22.02324
## 6 5.23533 14.60371 15 27 0.09091 5 0.00000 16.78539
## MDS_1 MDS_2
## 1 -0.69831500 -0.7040517
## 2 -0.61323430 -0.3796887
## 3 -0.08536265 1.6051440
## 4 0.55758620 -0.4424091
## 5 0.40888510 -0.2172988
## 6 -0.76699300 0.5244099
Zaujíma nás celková kovariančná/korelačná štruktúra medzi jednotlivými premennými, ktorú budeme postupne analyzovať pomocou faktorovej analýzy. Prvotný prehľad o odhadovanej kovariancii/korelácii môžeme získať napr. pomocou výberovej variančnej-kovariančnej matice var(bioData[,2:18])
prípadne korelačnej matice cor(bioData[,2:18])
.
Korelačnú maticu môžeme zároveň vizualizovať pomocou príkazu corrplot()
z knižnice ‘corrplot’:
library(corrplot)
corrplot(cor(bioData[,2:18]), method="ellipse")

Pripomeňme, že na rozdiel od (výberovej) kovariančnej matice, ktorá nie je invariantná voči měřítku, tak (výberova) korelačná matica invariantná vočí měřítku už je. Porovnajte nasledujúce výstupy:
cov(bioData[,2:18])
cov(scale(bioData[,2:18]))
cor(bioData[,2:18])
cor(scale(bioData[,2:18]))
Pripomeňte si tiež teoretické odvodenie, z ktorého vyplýva, že posledné tri príkazy dávajú stejný výstup.
Základná ídea faktorovej analýzy je vyjadriť \(p\)-rozmerná (náhodný) vektor \(\boldsymbol{X}\) pomocou lineárnej kombinácie \(k\) latentných faktorov, pričom výžadujeme, aby \(k \ll p\) (redukcia dimenzionality).
Formálne možeme model faktorovej analýzy zapísať takto:
\[
\boldsymbol{X} = \Lambda \boldsymbol{F} + \boldsymbol{e},
\]
kde \(\Lambda\) je nejaká \(p\times k\) rozmerná (nenáhodná) matica, ktorú nazývame matica loadingov (factor loadings), \(\boldsymbol{F}\) je \(k\)-rozmerná (náhodný) vektor, ktorý reprezentuje \(k\) latentných faktorov (tzv. common factors alebo scores) a \(\boldsymbol{e}\) je príslušná chyba aproximácie pôvodného vektoru \(\boldsymbol{X}\) pomocou latentných faktorov – \(k\)-rozmerného vektoru \(\boldsymbol{F}\).
Uvedený zápis výrazne pripomína zápis jednoduchého lineárneho regresného modelu
\[
\boldsymbol{Y} = \mathbb{X} \boldsymbol{\beta} + \boldsymbol{\varepsilon},
\] kde \(\boldsymbol{Y}\) je vektor závislých premenných, \(\mathbb{X}\) je matica typu \(n \times p\), ktorá obsahuje sledované nezávislé premenné a \(\boldsymbol{\varepsilon}\) je náhodný vektor chýb.
Základný principialný rozdiel medzi lineárnym regresným modelom a faktorovou dekompozíciou \(\boldsymbol{X} = \Lambda \boldsymbol{F} + \boldsymbol{e}\) je v tom, že okrem pôvodného vektoru \(\boldsymbol{X}\) nepozorujeme žiadnu ďalšiu kvantitu uvedenú v zápise (na rozdiel o lineárneho regresného modelu, kde sledujeme/poznáme aj regresnú maticu \(\mathbb{X}\)). Samotný problém faktorovej dekompozície preto nie je možné riešiť jednoznačne. Alternatívne, je možné uvažovať dodatočné obmedzenia, ktoré celý problem regularizuju – umožnia jednoznačné riešenie.
V prípade faktorovej analýzy sa používajú konkrétne obmedzenia, ktoré bližšie špecifikujú variančnú-kovariančnú štruktúru medzi jednotlivými veličinami vo faktorovej dekompozícii. Konkrétne sa predpokladá následujúce:
-
Náhodné (spoločné) faktory \(\boldsymbol{F}\) sú vzájomne nekorelované, s jednotkovým rozptylom, teda platí, že \(Var (\boldsymbol{F}) = \mathbb{I}_{k};\)
-
Náhodné chyby (resp. tzv. špecifické faktory)\(\boldsymbol{e}\) sú nezávislé a pre variančnú-kovariačnú maticu platí, že \(Var (\boldsymbol{e}) = \boldsymbol{\Psi}\), kde \(Var (e_{i}) = \psi_{ii}\);
-
Korelačná matica náhodného vektoru \(\boldsymbol{X}\) je teda rozločená na súčet dvoch členov \(\Sigma = \Lambda \Lambda^{T} + \boldsymbol{\Psi}\).
-
Vzájomná kovariancia medzi spoločnými faktormi (common fakctor) \(\boldsymbol{F}\) a špecifickými faktormi (specific faktors) \(\boldsymbol{e}\) je nulová, teda platí \(Cov(\boldsymbol{F}, \boldsymbol{e}) = \boldsymbol{0}\);
Štandardne sa vo faktorovej analýze používa aj predpoklad, že matica \(\Lambda^\top \boldsymbol{\Psi}^{-1} \Lambda\) je diagonálna. To umožňuje už definovať sústavu rovníc, ktorá problem rieši (v určitom zmysle) jednoznačne.
-
zo zápisu faktorovej dekompozície \(\Sigma = \Lambda \Lambda^\top + \boldsymbol{\Psi}\), získame \(p (p + 1)/2\) rovníc;
-
celkový počet neznámych parametrov je \(p \times k\) z matice \(\Lambda\) a \(p\) parametrov z diagonálnej matice \(\boldsymbol{\Psi}\);
-
diagonalita matice \(\Lambda^\top \boldsymbol{\Psi}^{-1} \Lambda\) umožňuje definovať dodatočných \(k(k + 1)/2\) rovníc;
-
celkový počet stupňov voľnosti teda je \[
\frac{(p - k)^2}{2} - \frac{k + p}{2};
\]
Počet stupňov voľnosti zároveň poskytuje maximum pre počet faktorov, ktoré je možné uvažovať, aby bol problem efektívne riešiteľný.
Poznámka
-
Faktorová analýza nie je jednoznačná v zmysle ľubovolnej rotácie vektoru \(X\);
-
Faktorová analýza je invariantná voči měřítku;
Vzhľadom k tomu, že faktorová analýza nie je jednoznačne určená vzhľadom k možným rotáciam, tak je užitočné použiť/nájsť rotáciu, ktorá je z určitého hľadiska najužitočnejšia – v praxi sa tym myslí rotácia, ktorá ponúka zmysluplnú interpretáciu, resp. umožňuje rozdelenie pôvodných premenných do disjunktných množín, kde každej množine je priradený jeden reprezentant – jeden latentný faktor. Procedúra, ktorá hľadá takúto rotáciu sa nazýva varimax procedúra.
Túto rotáciu/procedúru využujeme aj pri aplikácii faktorovej analýzy na biologické metriky kvality vodných tokov v Českej republike. V R funkcii factanal()
je nutné použiť dodatočný parameter ‘rotation=“varimax”’:
fa1 <- factanal(bioData[,2:18], factors = 3, rotation="varimax")
print(fa1, digits=2, cutoff=.6, sort=TRUE)
##
## Call:
## factanal(x = bioData[, 2:18], factors = 3, rotation = "varimax")
##
## Uniquenesses:
## SaprInd Lital RETI EPTAbu Marg Metaritr JepAbu
## 0.15 0.09 0.05 0.05 0.03 0.02 0.10
## Epiritral Hyporitral Ntaxon Nceled Bindex EPTTax PosAbu
## 0.07 0.39 0.21 0.09 0.19 0.10 0.35
## Spasaci MDS_1 MDS_2
## 0.11 0.13 0.45
##
## Loadings:
## Factor1 Factor2 Factor3
## SaprInd -0.79
## Lital 0.94
## RETI 0.94
## EPTAbu 0.90
## Metaritr 0.96
## JepAbu 0.68 0.65
## Epiritral 0.89
## Hyporitral 0.71
## PosAbu 0.79
## Spasaci 0.94
## MDS_1 0.91
## Marg 0.98
## Ntaxon 0.65
## Nceled 0.94
## Bindex 0.79
## EPTTax 0.83
## MDS_2 0.71
##
## Factor1 Factor2 Factor3
## SS loadings 8.96 4.05 1.41
## Proportion Var 0.53 0.24 0.08
## Cumulative Var 0.53 0.77 0.85
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 414.98 on 88 degrees of freedom.
## The p-value is 6.88e-44
Reportované prázdne miesta vo výstupe nie su v skutočnosti chýbajúce hodnoty, ale skôr sa jedná o hodnoty korelácie, ktoré su pod uvedeným thresholdom (t.j. príliš malé hodnoty odhadovanej korelácie medzi pôvodnou premennou a latentným faktorom).
V prípade nereportovanej hodnoty korelácie je možné buď uvažovať nad väčším počtom latentných faktorov (keďže momentálny počet faktorov neumožňuje roztriediť premenné tak, aby každá z nich korelovala alespoň na požadovanej úrovni s alespoň jedným latentným faktorom), zvoliť nižšiu hodnotu thresholdu.
Je počet faktorov dostačujúci? Porovnajte následujúce výstupy:
fa2 <- factanal(bioData[,2:18], factors = 4, rotation="varimax")
fa3 <- factanal(bioData[,2:18], factors = 5, rotation="varimax")
fa4 <- factanal(bioData[,2:18], factors = 9, rotation="varimax")
V praxi sa používajú hlavne dva prístupy, ako definovať počet faktorov. Je zrejmé, že pre každý element \(X_{j}\) z náhodného vektoru \(\boldsymbol{X} = (X_{1}, \dots, X_{p})^\top\) platí, že
\[
var(X_{j}) =h_{j}^2 + \psi_{j}, \qquad \textrm{pre} \qquad h_{j}^2 = \sum_{\ell = 1}^{k} q_{j \ell}^2,
\]
a \(\boldsymbol{\psi} = Diag\{\psi_{1}, \dots, \psi_{p}\}\), a \(\Lambda = \{q_{i j}\}_{i, j = 1}^{p,k}\). Hodnota \(h_{j}^2\) predstavuje variabilitu náhodnej veličiny \(X_{j}\), ktorá je vysvetlená pomocou spoločných faktorov (common faktors) \(F\) (taktiež nazývané ako communality) a druhá hodnota, t.j. \(\psi_{j}\) predstavuje zbytkovú variabilitu (tzv. špecifická variabilita).
Je tiež zrejmé, že pre \(p\) latentných faktorov dostaneme \(var(X_{j}) = \sum_{\ell = 1}^{p} q_{j \ell}^2\) a zbytovoká, t.j. špecifická variabilia bude nulová, teda \(\psi_j = 0\), pre každé \(j = 1, \dots, p\).
Rozhodnutie o celkovom počte latentných faktorov preto môže byť učinené na základe vzájomného porovnania vysvetlenej a zbytkovej variability – communality vs. specific variability.
Altenarnatívne postupy pre určenie počtu faktorov:
-
Štatistická pre-analýza
Napr. rôzne exploratívne nástroje, alebo aj PCA za účelom dosiahnutia určitej proporcie vysvetlenej variability;
-
Expert judgement
Daný počet faktorov často v praxi koreluje s určitou skupinou premenných, rozdelenie premenných umožňuje intuitívnu a jednoduchú interpretáciu z pohľadu experta.
-
Maximum Likelihood
Využitie štatistického testu na testovanie nulovej hypotézy, že \(\Sigma = \Lambda\Lambda^\top + \boldsymbol{\psi}\) oproti alternatíve, že \(H_{1}\) nekladie žiadne reštrikcie na maticu \(\Sigma\). Test pomerom vierohodnosti je možne uskutočniť pomocou testovej štatistiky
\[
T = - 2 log \Bigg[\frac{\textrm{maximum likelihood under $H_{0}$}}{\textrm{maximum likelihood under $H_{1}$}}\Bigg],
\]
avšak tento postup predpokladá, že pôvodné data pochádzajú z normálneho rozdelenia.
Poznámka
-
Ďalšou možnosťou, jak určiť vhodný počet faktorov je využiť vizuálne nástroje v knižnici ‘nFactors’ (nutná inštalácia pomocou príkazu install.packages("nFactors")
). Štyri kvalitatívne kritéria sú pred-definované k určeniu správneho počtu latentných faktorov (podrobnejšie o jednotlivých kritériach v helpe funkcie – ?plotnScree
).
library(nFactors)
ev <- eigen(cor(bioData[,2:18]))
ap <- parallel(subject=nrow(bioData[,2:18]),var=ncol(bioData[,2:18]), rep=100, cent=.05)
nS <- nScree(x=ev$values, aparallel=ap$eigen$qevpea)
plotnScree(nS)
Grafický výstup a vizuálnu reprezentáciu faktorovej analýzy je možné získať (štandardne) pomocou príkazu plot()
. Ďalšie možnosti sú samozrejme k dispozícii v rozširujúcich balíčkoch a R knižniciach.
### colors
COLS <- c("red", "green", "blue")
M <- apply(abs(fa1$loadings[,1:3]), 1, max)
cols <- COLS[matrix(rep(c(1,2,3), 17), nrow = 17, byrow = T)[match(M, abs(fa1$loadings[,1:3]))]]
load <- fa1$loadings[,1:2]
plot(load,type="n")
text(load,labels=names(bioData[,2:18]),cex=.7, col = cols)

Dokážete vysvetliť, prečo sa jedná premenná (Saprind) náchádza zjavne mimo akýkoľvek zhluk ostatných premenných? Pre faktorovú analýzu boli použité tri latentné faktory, ale scatterplot na obrázku vizualizuje pouze prvé dva faktory.
Ako by ste interpretovali fakt, že premenná MDS_2 je kdesi uprostred (medzi premennými vyznačenými červenou barvou)?
A čo vizualizácia s využitím iných dvoch latentných faktorov (pôvodný rozmer uvažovaných dat je \(p = 17\)).
### colors
par(mfrow = c(1,2))
load1 <- fa1$loadings[,c(1,3)]
plot(load1,type="n")
text(load1,labels=names(bioData[,2:18]),cex=.7, col = cols)
load2 <- fa1$loadings[,2:3]
plot(load2,type="n")
text(load2,labels=names(bioData[,2:18]),cex=.7, col = cols)

Ako alternatívnu možnosť múžeme využiť R knižnicu ‘FactoMineR’ a funkciu PCA()
a vykresliť kompletnú faktorovú mapu jednotlivých premenných, z ktorej získame intuitívnu predstavu o vzájomných koreláciach.
library(FactoMineR)
par(mfrow = c(1,2))
result <- PCA(bioData[,2:18])


Poznámka
-
R funkcia
factanal()
využíva pre faktorovú analýzu škálované pôvodné premenné – variančná-kovariančná matica \(\boldsymbol{X}\) je nahradená príslušnou korelačnou maticou s jednotkami na diagonále (resp. výberovou verziou matice). Pre pripomenutie, faktorová analýza je ale na rozdiel od metódy hlavných komponent invariantná voči měřítku, keďže nás primárne zaujíma kovariačná štruktúra – teda mimodiagonálne prvky variančnej-kovariančnej matice. PCA sa zameriavala na variančnú štruktúru, teda na diagonálne prvky variačnej-kovariančnej matice.
Budeme uvažovať tri latentné faktory za dostačujúce. Pre získanie príslušných skórov (hodnoty v matici \(\boldsymbol{F}\)) pre všetky uvažované pozorovania pre \(n = 65\), použijeme dodatočný parameter scores = "regression"
.
fa1 <- factanal(bioData[,2:18], factors = 3, scores = "regression")
fa1$scores[1:10, ] ### first 10 observations only
## Factor1 Factor2 Factor3
## [1,] -0.1244966 0.4931840 0.01922617
## [2,] -0.3384993 -0.3923032 0.11955014
## [3,] -0.2204456 -0.3858083 2.32056815
## [4,] 0.8256632 1.2082761 -0.94089111
## [5,] -0.1393208 0.8931078 -0.53235597
## [6,] -1.0145529 -0.6560039 -0.37522820
## [7,] -0.8234387 -0.6278391 -0.70127483
## [8,] -0.9872882 -0.1378264 -0.43331255
## [9,] 0.2241872 0.8863282 0.79520699
## [10,] 0.5229264 1.0626182 0.29552698
Príslušné loadingy (hodnoty v matici \(\Lambda\)) získame pomocou príkazu
fa1$loadings[1:10,] ### first ten only
## Factor1 Factor2 Factor3
## SaprInd -0.793799582 -0.45707444 -0.108998198
## Lital 0.939491283 0.16395668 0.024852907
## RETI 0.941128211 0.20306590 -0.141655979
## EPTAbu 0.902708622 0.08859657 0.356731365
## Marg -0.001090104 0.98354576 0.001719189
## Metaritr 0.958503123 0.19288270 -0.150284844
## JepAbu 0.684331954 -0.11515559 0.646234322
## Epiritral 0.885950522 0.18171923 -0.339553210
## Hyporitral 0.709711736 0.18364671 0.274803872
## Ntaxon -0.571525473 0.65364957 -0.189925057
Samostatne
-
Aplikujte faktorovú analýzu na vhodné data a uvažujte rôzný počet latentných faktorov.
-
Použijte nejaké vhodné miery na kvantitatívne zistenie chyby aproximácie pôvodného vektoru pomocou daného počtu latentných faktorov.
2. Využitie faktorovej analýzy v regresii a SEM modeloch
Už bolo v úvode uvedené, že faktorová analýza je hodne efektívny nástroj hlavne v prípadoch, že je na data nutné aplikovať nejaký regresný model, ale celkový počet premenných, prípadne vzájomná korelácia medzi premennými neumožňuje aplikovať metodológiu regresného modelu priamočiaro. Faktorová analýza poskytuje ďalší nástroj, ako si s problémom poradiť: vzájomne korelované premenné je možné efektívne (z pohľadu regresného modelu) a zmysluplne (z pohľadu experta a následnej interpretácie) náhradiť latentnými faktormi. Tým získame jednak redukciu dimenzionality a zároveň sa vyrieši problém multikolinearity.
Flexibilný nástroj regresného modelovania, ktorý často využíva práve faktorovú analýzu a princíp latentných premenných je tzv. model štrukturálnych rovníc – Structural Equation Model (SEM). Jedna sa o komplexný model (v určitom zmysle zovšeobecnenie štandardného modelu lineárnej regresie), ktorý ma obrovský potenciál pri modelovani kauzálnych závislosti medzi endogennými a exogennými premennými.
Pre SEM model sa často využíva schématicky diagram, na základe ktorého je následne vybudovaný štatistický model. Schématický diagram vzniká na základe určitých apriórnych znalosti, exploratívnej analýzy a expertného pohľadu.
Ilustračný príklad schématického diagramu pre SEM model:
V programe R je k dispozícii knižnica ‘sem’ prípadne knižnica ‘lavaan’. Pre jednoduchú ilustráciu SEM modelu využijeme data ‘PoliticalDemocracy’ z knižnice library("lavaan")
.
library("sem")
library("lavaan")
data(PoliticalDemocracy)
PoliticalDemocracy[1:10,]
## y1 y2 y3 y4 y5 y6 y7 y8
## 1 2.50 0.000000 3.333333 0.000000 1.250000 0.000000 3.726360 3.333333
## 2 1.25 0.000000 3.333333 0.000000 6.250000 1.100000 6.666666 0.736999
## 3 7.50 8.800000 9.999998 9.199991 8.750000 8.094061 9.999998 8.211809
## 4 8.90 8.800000 9.999998 9.199991 8.907948 8.127979 9.999998 4.615086
## 5 10.00 3.333333 9.999998 6.666666 7.500000 3.333333 9.999998 6.666666
## 6 7.50 3.333333 6.666666 6.666666 6.250000 1.100000 6.666666 0.368500
## 7 7.50 3.333333 6.666666 6.666666 5.000000 2.233333 8.271257 1.485166
## 8 7.50 2.233333 9.999998 1.496333 6.250000 3.333333 9.999998 6.666666
## 9 2.50 3.333333 3.333333 3.333333 6.250000 3.333333 3.333333 3.333333
## 10 10.00 6.666666 9.999998 8.899991 8.750000 6.666666 9.999998 10.000000
## x1 x2 x3
## 1 4.442651 3.637586 2.557615
## 2 5.384495 5.062595 3.568079
## 3 5.961005 6.255750 5.224433
## 4 6.285998 7.567863 6.267495
## 5 5.863631 6.818924 4.573679
## 6 5.533389 5.135798 3.892270
## 7 5.308268 5.075174 3.316213
## 8 5.347108 4.852030 4.263183
## 9 5.521461 5.241747 4.115168
## 10 5.828946 5.370638 4.446216
Príslušný schématický diagram, na základe ktorého zostavíme SEM model, vyzerá takto:
Samotný model je v programe R implementovaný následovne:
model <- '
# measurement model
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# regressions
dem60 ~ ind60
dem65 ~ ind60 + dem60
# residual correlations
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'
Odhad získame pomocou:
fit <- sem(model, data=PoliticalDemocracy)
summary(fit, standardized=TRUE)
## lavaan 0.6-8 ended normally after 68 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 31
##
## Number of observations 75
##
## Model Test User Model:
##
## Test statistic 38.125
## Degrees of freedom 35
## P-value (Chi-square) 0.329
##
## 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
## ind60 =~
## x1 1.000 0.670 0.920
## x2 2.180 0.139 15.742 0.000 1.460 0.973
## x3 1.819 0.152 11.967 0.000 1.218 0.872
## dem60 =~
## y1 1.000 2.223 0.850
## y2 1.257 0.182 6.889 0.000 2.794 0.717
## y3 1.058 0.151 6.987 0.000 2.351 0.722
## y4 1.265 0.145 8.722 0.000 2.812 0.846
## dem65 =~
## y5 1.000 2.103 0.808
## y6 1.186 0.169 7.024 0.000 2.493 0.746
## y7 1.280 0.160 8.002 0.000 2.691 0.824
## y8 1.266 0.158 8.007 0.000 2.662 0.828
##
## Regressions:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## dem60 ~
## ind60 1.483 0.399 3.715 0.000 0.447 0.447
## dem65 ~
## ind60 0.572 0.221 2.586 0.010 0.182 0.182
## dem60 0.837 0.098 8.514 0.000 0.885 0.885
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .y1 ~~
## .y5 0.624 0.358 1.741 0.082 0.624 0.296
## .y2 ~~
## .y4 1.313 0.702 1.871 0.061 1.313 0.273
## .y6 2.153 0.734 2.934 0.003 2.153 0.356
## .y3 ~~
## .y7 0.795 0.608 1.308 0.191 0.795 0.191
## .y4 ~~
## .y8 0.348 0.442 0.787 0.431 0.348 0.109
## .y6 ~~
## .y8 1.356 0.568 2.386 0.017 1.356 0.338
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .x1 0.082 0.019 4.184 0.000 0.082 0.154
## .x2 0.120 0.070 1.718 0.086 0.120 0.053
## .x3 0.467 0.090 5.177 0.000 0.467 0.239
## .y1 1.891 0.444 4.256 0.000 1.891 0.277
## .y2 7.373 1.374 5.366 0.000 7.373 0.486
## .y3 5.067 0.952 5.324 0.000 5.067 0.478
## .y4 3.148 0.739 4.261 0.000 3.148 0.285
## .y5 2.351 0.480 4.895 0.000 2.351 0.347
## .y6 4.954 0.914 5.419 0.000 4.954 0.443
## .y7 3.431 0.713 4.814 0.000 3.431 0.322
## .y8 3.254 0.695 4.685 0.000 3.254 0.315
## ind60 0.448 0.087 5.173 0.000 1.000 1.000
## .dem60 3.956 0.921 4.295 0.000 0.800 0.800
## .dem65 0.172 0.215 0.803 0.422 0.039 0.039
Samostatne
-
Uvažujte napríklad dataset HolzingerSwineford1939
z R knižnice library("lavaan")
:
data(HolzingerSwineford1939)
dim(HolzingerSwineford1939)
## [1] 301 15
head(HolzingerSwineford1939)
## id sex ageyr agemo school grade x1 x2 x3 x4 x5 x6
## 1 1 1 13 1 Pasteur 7 3.333333 7.75 0.375 2.333333 5.75 1.2857143
## 2 2 2 13 7 Pasteur 7 5.333333 5.25 2.125 1.666667 3.00 1.2857143
## 3 3 2 13 1 Pasteur 7 4.500000 5.25 1.875 1.000000 1.75 0.4285714
## 4 4 1 13 2 Pasteur 7 5.333333 7.75 3.000 2.666667 4.50 2.4285714
## 5 5 2 12 2 Pasteur 7 4.833333 4.75 0.875 2.666667 4.00 2.5714286
## 6 6 2 14 1 Pasteur 7 5.333333 5.00 2.250 1.000000 3.00 0.8571429
## x7 x8 x9
## 1 3.391304 5.75 6.361111
## 2 3.782609 6.25 7.916667
## 3 3.260870 3.90 4.416667
## 4 3.000000 5.30 4.861111
## 5 3.695652 6.30 5.916667
## 6 4.347826 6.65 7.500000
-
Aplikujte faktorovú analýzu na premenné \(X_{1}, \dots, X_9\) a uvažujte tri latentné faktory:
fa_Hol <- factanal(HolzingerSwineford1939[,7:15], factors = 3, rotation="varimax")
print(fa_Hol, digits=2, cutoff=.45, sort=TRUE)
-
Ako by ste interpretovali výsledky faktorovej analýzy? Ako by ste navrhli lineárny regresný model (prípadne SEM), aby ste dostali nejaké kvantitatívne výsledky?
-
Vhodná by bola napríklad tzv. konfirmačná faktorová analýza… V programe R funkcia cfa()
z knižnice ‘lavaan’, ktorá je vpodstate hodne analogická s funkciou sem()
. Takto by vyzeral model:
HS.model <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 '
fit <- cfa(HS.model, data=HolzingerSwineford1939)
summary(fit, fit.measures=TRUE)
-
Ako by vyzeral príslušný schématický diagram?