Sociolog preučuje, kateri dejavniki povzročajo stres v času študija. V vzorec je vključil 239 študentov, ki so se opredelili do 18 trditev, merjenih na Likertovi lestvici. Ali lahko sociolog na podlagi rezultatov analize definira manjše število dejavnikov, ki povzročajo proučevan stres?

Uporabili bomo Faktorsko analizo, ker imamo vsebinski pristop. Zanima nas, kateri dejavniki (faktorji) vplivajo stres.

podatki <- read.table("./Stres.csv", header=TRUE, sep=";", dec=",")

head(podatki, 3)
##   ID q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18
## 1  1  4  5  6  3  5  6  5  6  3   3   4   5   6   5   4   7   4   5
## 2  2  6  5  6  4  5  5  5  6  6   4   5   4   6   5   4   6   4   5
## 3  3  6  2  2  2  4  2  2  2  2   2   2   2   1   2   2   1   2   2

Vse spremenljivke merjene na Likertovi lestvici (1: Sploh se ne strinjam, 7: Popolnoma se strinjam)

V faktorskem modelu te spremenljivke imenujemo indikatorji (zelo pogosto so merjeni na likertovi lestvici od 1-7). imamo 18 indikatorjev, ki temeljijo na neki teoriji/vsebini.

colnames(podatki) <- c("ID", "Deja", "Varn", "Hrup", "Obre", "Podp", "Preh", 
                       "Span", "Misl", "Depr", "Glav", "Zdra", "Prev", "Zrak", 
                       "Tesn", "Uspe", "Pogo", "Ogre", "Opre")
library(pastecs)
round(stat.desc(podatki[-1], basic=FALSE), 2)
##              Deja Varn Hrup Obre Podp Preh Span Misl Depr Glav Zdra
## median       5.00 5.00 5.00 4.00 5.00 5.00 6.00 6.00 5.00 5.00 6.00
## mean         4.77 4.92 4.79 3.41 5.28 4.99 5.21 5.43 4.90 4.62 5.46
## SE.mean      0.09 0.08 0.08 0.09 0.09 0.07 0.08 0.08 0.10 0.11 0.08
## CI.mean.0.95 0.18 0.15 0.16 0.17 0.18 0.14 0.16 0.17 0.20 0.22 0.16
## var          1.96 1.37 1.54 1.73 1.92 1.21 1.63 1.70 2.48 3.09 1.58
## std.dev      1.40 1.17 1.24 1.32 1.39 1.10 1.28 1.30 1.57 1.76 1.26
## coef.var     0.29 0.24 0.26 0.39 0.26 0.22 0.24 0.24 0.32 0.38 0.23
##              Prev Zrak Tesn Uspe Pogo Ogre Opre
## median       5.00 6.00 6.00 4.00 5.00 4.00 4.00
## mean         4.95 5.41 5.37 3.71 4.82 4.07 4.09
## SE.mean      0.08 0.08 0.09 0.09 0.08 0.09 0.09
## CI.mean.0.95 0.16 0.16 0.17 0.18 0.17 0.17 0.18
## var          1.59 1.54 1.77 2.07 1.71 1.78 2.10
## std.dev      1.26 1.24 1.33 1.44 1.31 1.33 1.45
## coef.var     0.25 0.23 0.25 0.39 0.27 0.33 0.35

katera spremenljivka ima največ variabilnosti? gledaš coef. var., tam kjer je najvišji je največja varibilnost.

Za FA lahko uporabljamo izključno številske sprem., zato izločimo ID.

podatki_FA <- podatki[!colnames(podatki) %in% c("ID")]

R <- cor(podatki_FA)

funkcija cor naredi koleracijsko matriko. vhodna tabela s podatki ima je dimenzije 239x19. koleracijska matrika ima dimenzije 18x18, po glavni diagonali so 1, izven pa so pari koleracijski koefcientov.

library(psych) 
corPlot(R)

#### FA: želimo si koleracijo med faktorji med 0,3 in 0,8. izogibamo se zelo visokim koleracijam, ni nič narobe če je katera pod 0,3. Korelirati morajo tisti indikatorji, tisti, ki merijo isti faktor. izračunati moraš determinanto.

Izračunamo determinantno koleracijske matrike. primerjamo jo z 0,00001, biti mora višja. Če je višja, pomeni da koleracije niso premočne - to si želimo.

det(R) 
## [1] 0.0004671319

Delamo Barletov preizkus sferičnosti. H0: populacijska koleracijska matrika je enaka enotski matriki. enotska matrika ima izven diagonale same ničle. mi preverjamo ali so slučajno vsi koleracijski koef. na populaciji enaki 0.

Glede na p-vrednost zavrnemo H0, populacijska koleracijska matrika ni enaka enotski, podatki so primerni, indikatorji imajo povezavo med seboj, lahko izvedemo FA.

library(psych)
cortest.bartlett(R, n = nrow(podatki_FA)) 
## $chisq
## [1] 1772.794
## 
## $p.value
## [1] 1.963153e-273
## 
## $df
## [1] 153
library(psych)
KMO(R) 
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = R)
## Overall MSA =  0.87
## MSA for each item = 
## Deja Varn Hrup Obre Podp Preh Span Misl Depr Glav Zdra Prev Zrak Tesn 
## 0.74 0.88 0.84 0.82 0.67 0.85 0.92 0.93 0.88 0.92 0.91 0.83 0.88 0.88 
## Uspe Pogo Ogre Opre 
## 0.85 0.85 0.84 0.87

Df =153 predstavlja št. koleracijski koeficentov. formula je (18*17)/2.

s KMO preverjamo ali so indikatorji primerni za FA. KMO = 0,87 mora biti vedno nad 0,5. najnižji MSA stat. ima indikator podpora, ker je nad 0,5 ga ni treba odstranit. Če bi bil pod 0,5 NUJNO ODSTRANIŠ!

Koliko faktorjev? Na podlagi slike lahko: delamo paralelno analizo. Primerja empirične lastne vrednosti in teoretične, gledaš kje si nad premico. (4). Prelom pa je pri 2 in 5, torej (5-1) = 4 faktorje obdržimo.

library(psych)
fa.parallel(podatki_FA, 
            sim = FALSE, 
            fa = "fa") 

## Parallel analysis suggests that the number of factors =  4  and the number of components =  NA

Z ukazom covar=FALSE smo analizo na koleracijski matriki, to pomeni, da indikatorje predhodno standardiziramo. S tem zagotovimo, da bo vsak indikator enako prispeval k oblikovanju faktorjev.

rotate = “oblimin” -> delamo poševno rotacijo, ker lažje dosežemo enostavno faktorsko strukturo, kar omogoča lažjo razlago poimenovanja faktorjev.

library(psych) 
library(GPArotation) 
## 
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
## 
##     equamax, varimin
faktorska <- fa(podatki_FA, 
                covar = FALSE,  
                nfactors = 4, 
                fm = "minres",  
                rotate = "oblimin") 

cut = 0.4, prikaže faktorske uteži nad 0,4. h2 je komunaliteta. h2 0.5835 pri Glav: 58,35 % variabilnosti indikatorja imam glavobole je skupne (torej si jo indikator deli s preostalimi). Je rezultat skupnih faktorjev. u2 je specifična variabilnost. com je indeks kompleksnosti, odstranili bi indikator ogre (2,46), ker meri 2 faktorja. Želimo, da posamezen indikator meri en sam faktor (dosežemo enostavno faktorsko strukturo)

print.psych(faktorska, 
            cut = 0.4, 
            sort = TRUE) 
## Factor Analysis using method =  minres
## Call: fa(r = podatki_FA, nfactors = 4, rotate = "oblimin", covar = FALSE, 
##     fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
##      item   MR1   MR2   MR3   MR4   h2   u2 com
## Tesn   14  0.80                   0.76 0.24 1.1
## Depr    9  0.77                   0.59 0.41 1.3
## Glav   10  0.76                   0.58 0.42 1.1
## Zdra   11  0.74                   0.68 0.32 1.1
## Span    7  0.54                   0.66 0.34 1.8
## Misl    8  0.51                   0.45 0.55 1.5
## Hrup    3        0.64             0.51 0.49 1.1
## Pogo   16        0.63             0.48 0.52 1.1
## Varn    2        0.59             0.39 0.61 1.1
## Preh    6        0.59             0.41 0.59 1.2
## Prev   12        0.45             0.24 0.76 1.2
## Ogre   17        0.41             0.45 0.55 2.5
## Zrak   13        0.41             0.46 0.54 2.0
## Uspe   15              0.68       0.52 0.48 1.2
## Obre    4              0.65       0.48 0.52 1.1
## Opre   18              0.53       0.35 0.65 1.1
## Podp    5                    0.67 0.47 0.53 1.0
## Deja    1                    0.66 0.51 0.49 1.1
## 
##                        MR1  MR2  MR3  MR4
## SS loadings           3.53 2.74 1.60 1.12
## Proportion Var        0.20 0.15 0.09 0.06
## Cumulative Var        0.20 0.35 0.44 0.50
## Proportion Explained  0.39 0.30 0.18 0.12
## Cumulative Proportion 0.39 0.70 0.88 1.00
## 
##  With factor correlations of 
##      MR1  MR2  MR3  MR4
## MR1 1.00 0.50 0.37 0.21
## MR2 0.50 1.00 0.26 0.15
## MR3 0.37 0.26 1.00 0.14
## MR4 0.21 0.15 0.14 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## df null model =  153  with the objective function =  7.67 with Chi Square =  1772.79
## df of  the model are 87  and the objective function was  0.75 
## 
## The root mean square of the residuals (RMSR) is  0.03 
## The df corrected root mean square of the residuals is  0.05 
## 
## The harmonic n.obs is  239 with the empirical chi square  84.7  with prob <  0.55 
## The total n.obs was  239  with Likelihood Chi Square =  170.37  with prob <  2.4e-07 
## 
## Tucker Lewis Index of factoring reliability =  0.908
## RMSEA index =  0.063  and the 90 % confidence intervals are  0.049 0.078
## BIC =  -306.08
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    MR1  MR2  MR3  MR4
## Correlation of (regression) scores with factors   0.95 0.91 0.86 0.83
## Multiple R square of scores with factors          0.90 0.82 0.74 0.69
## Minimum correlation of possible factor scores     0.80 0.65 0.48 0.38

Faktor 1 meri zdravje, F2 okolje, F3 meri študijsko obremenitev, F4 pa socialno okolje. SS loadings so lastne vrednosti po rotaciji. proportion VAR; gleda celotno variabilnost. 0,20: 20% celotne variabilnosti je pojasnjene s F1. cumulative var f4 = 0,50 pomeni, da vsi 4 faktorji skupaj pojasnijo 50% celotne variabilnosti, ki jo imajo ti indikatorji skupaj, polovica pa je specifična variabilnost. p

Proportion EXP: f1 = 0,39 pomeni, da s 1. faktorjem pojasnimo 39% skupne variabilnosti. Mean item complexity je povprečje kompleksnosti. želimo, da je čimbližje 1.

Ostanki <- faktorska$residual 

Ostanki <- as.matrix(Ostanki[upper.tri(Ostanki)]) 

VisokiOstanki <- abs(Ostanki) > 0.05 

sum(VisokiOstanki)/nrow(Ostanki)
## [1] 0.1372549

ostanki med empiričino in reproducirano koleracijo. Želimo, da so ti ostanki čim nižji. Meja je 0,05 (absolutno). 0,1372; 13,72% je visokih ostankov. Razlog: nismo odstranili tistih indikatorjev, ki merijo več kot 1 faktor. težava je tudi, da faktor 4 merita samo 2 indikatorja (dobro je da vsaj 3).

podatki$F1 <- faktorska$scores[ , 1] 
podatki$F2 <- faktorska$scores[ , 2]
podatki$F3 <- faktorska$scores[ , 3]
podatki$F4 <- faktorska$scores[ , 4]

podatki[48 , c(1, 20, 21, 22, 23)]
##    ID       F1        F2          F3       F4
## 48 48 -1.68385 -2.577348 -0.09284441 1.306588

Za osebo ID48 izpišemo vrednosti faktorjev. Najbolj prisoten je F4 (socio okolje), ker je edini nadpovprečjem, zato je dal ta študent pri teh dveh indikatorjih visoke ocene. Najmanj pa pri F2.

Faktor <- podatki[, c("Hrup", "Pogo", "Varn", "Preh", "Prev", "Ogre", "Zrak")] 

library(psych)
alpha(Faktor, 
      check.keys = TRUE) 
## 
## Reliability analysis   
## Call: alpha(x = Faktor, check.keys = TRUE)
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.81      0.81     0.8      0.37 4.2 0.019  4.8 0.84     0.37
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.76  0.81  0.84
## Duhachek  0.77  0.81  0.84
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## Hrup      0.77      0.77    0.75      0.36 3.4    0.023 0.0067  0.36
## Pogo      0.77      0.77    0.75      0.36 3.3    0.023 0.0051  0.37
## Varn      0.78      0.79    0.77      0.38 3.7    0.022 0.0059  0.37
## Preh      0.78      0.78    0.76      0.37 3.5    0.022 0.0085  0.37
## Prev      0.80      0.80    0.78      0.40 4.0    0.020 0.0052  0.39
## Ogre      0.79      0.79    0.77      0.38 3.7    0.021 0.0090  0.37
## Zrak      0.78      0.78    0.76      0.37 3.5    0.022 0.0079  0.36
## 
##  Item statistics 
##        n raw.r std.r r.cor r.drop mean  sd
## Hrup 239  0.72  0.72  0.67   0.59  4.8 1.2
## Pogo 239  0.74  0.73  0.69   0.60  4.8 1.3
## Varn 239  0.66  0.66  0.58   0.52  4.9 1.2
## Preh 239  0.69  0.70  0.64   0.57  5.0 1.1
## Prev 239  0.60  0.60  0.49   0.44  4.9 1.3
## Ogre 239  0.66  0.65  0.56   0.50  4.1 1.3
## Zrak 239  0.69  0.69  0.62   0.55  5.4 1.2
## 
## Non missing response frequency for each item
##         1    2    3    4    5    6    7 miss
## Hrup 0.01 0.03 0.08 0.28 0.28 0.27 0.05    0
## Pogo 0.02 0.04 0.10 0.21 0.28 0.30 0.05    0
## Varn 0.00 0.02 0.12 0.16 0.35 0.30 0.05    0
## Preh 0.01 0.02 0.04 0.22 0.38 0.27 0.06    0
## Prev 0.00 0.03 0.09 0.22 0.29 0.26 0.10    0
## Ogre 0.03 0.11 0.15 0.42 0.12 0.15 0.03    0
## Zrak 0.01 0.02 0.07 0.10 0.23 0.42 0.15    0

Ali je faktor okolje merjen zanesljivo? gledaš std. alpha: 0,81: v splošnem je faktor izmerjen zanesljivo, ker je več kot 0,7. std alpha, če bi posamezen faktor odstranili. v našem primeru, ne bi nobenega odstranili, ker bi vodilo v manjšo std. alpho kot jo imamo trenutno.