NMST539 | Cvičenie 8

Faktorová analýza

LS 2020/2021 | 20/04/21 | (online výuka)

zdrojový Rmd súbor (kódovanie UTF8)

Outline ôsmeho cvičenia:

  • teoretické základy faktorovej analýzy (FA);
  • aplikácia FA na reálne data pomocou programu R;
  • komplexné štatistické modely (tzv. SEM) s využitím FA;


Štatisticky program R je k dispozícii (GNU public licence) na adrese https://www.r-project.org

RStudio – “user-friendly” interface (jeden z mnohých, ktoré na internete nájdete): RStudio.

Užitočné návody a manuály pre prácu s programom R:

  • Bína, V., Komárek, A. a Komárková, L.: Jak na jazyk R. (PDF súbor)
  • Komárek, A.: Základy práce s R. (PDF súbor)
  • Kulich, M.: Velmi stručný úvod do R. (PDF súbor)
  • De Vries, A. a Meys, J.: R for Dummies. (ISBN-13: 978-1119055808)


Odborná literatúra:
  • Hardle, W. and Simar.L.: Applied Multivariate Statistical Analysis. Springer, 2015
  • Mardia, K., Kent, J., and Bibby, J.:Multivariate Analysis, Academic Press, 1979.




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?









Domáca (samostatná) úloha

(Deadline: Cvičenie č.9 / 27.04.2021)


  • Vyberte si vhodný datový súbor (napr. data, ktoré ste uvažovali v prvej, štvrtej, alebo predchádzajúcej domácej úlohe);
  • Z podkladového datového súboru uvažujte vhodné (numerické) premenné a aplikujte faktorovú analýzu.
  • Výsledky faktorovej analýzy sa pokúste pomocou rôznych rozširujúcich knižníc v programe R vhodne vizualizovať.
  • Riešenie umiestnite na svoju webovú stránku, najneskôr v utorok, 27.04.2021, do 14:00.