9. HAFTANIN TEKRARI

AFA: Elimizde bir sürü madde var. Bu maddeler aslında kaç tane gizil yapıyı (faktörü) ölçüyor? AFA bunu keşfetmek için kullanılıyor. Doğrulayıcı (DFA) gibi önceden yapı belirlemiyoruz, verinin bize söylemesini bekliyoruz.

Önce uygunluk kontrolü

İki test yapılıyor:

  • KMO (Kaiser Meyer Olkin): Değişkenler arasında yeterince örtüşme var mı? Yani ortak faktör yapısı kurulabilir mi? KMO > .60 olmalı. .80 üstü çok iyi.
  • Bartlett Küresellik Testi: Korelasyon matrisi birim matris mi değil mi? Eğer birim matrisse (her şey birbirinden bağımsız) faktör analizi yapmanın anlamı yok. p < .05 olmalı → H₀ reddedilsin → değişkenler arasında ilişki var.

Faktör sayısına nasıl karar veririm?

  • Kaiser kriteri (K1): Özdeğeri 1’den büyük olan faktör sayısı kadar faktör çıkar.
  • Scree plot: Dirsek noktasına bak.

Temel kavramlar

  • Coefficient-factor loading: Her faktörün o maddeye olan katkısı. Diğer faktörler kontrol edildikten sonraki katkı. Regresyon katsayısı gibi düşün.
  • Ortak varyans: Bir maddenin varyansının faktörler tarafından açıklanan kısmı. Örüntü katsayılarının karelerinin toplamı.
  • Özgün varyans: 1 - h². Faktörlerin açıklayamadığı kısım.
  • SS loadings: Bir faktörün tüm maddelerdeki yüklerinin kareleri toplamı. Bunu madde sayısına bölersen → o faktörün açıkladığı varyans yüzdesi.

Rotasyon

Döndürme öncesi her madde birden fazla faktöre orta düzeyde yük veriyor ama kim kimin maddesi belli değil. Döndürme yapınca her madde tek bir faktöre yüksek yük verir, diğerlerine düşük → yorumlama kolaylaşır.

  • Varimax (dik): Faktörler bağımsız varsayılır (korelasyon = 0).
  • Promax (eğik): Faktörler birbiriyle ilişkili olabilir.

Örüntü matrisi vs yapı matrisi

  • Örüntü: Diğer faktörler kontrol edildiğinde maddenin o faktöre olan katkısı. Eğik döndürmede buna bakılır.
  • Yapı: Madde ile faktör arasındaki toplam korelasyon (faktörler arası korelasyonu da içerir). Yapı katsayıları örüntüden her zaman büyüktür.

Artık matrisi

Gözlenen korelasyon matrisi - model tarafından üretilen korelasyon matrisi = artık matrisi

Köşegen dışı değerler |.05|’ten küçükse → model veriye iyi uyum sağlıyor.

SORU 1: DÖNDÜRME YAPILMADAN AFA

library(haven)
library(psych)
library(dplyr)
library(knitr)
library(ggplot2)
afa <- read_sav("AFAV10N200.sav")
head(afa)
## # A tibble: 6 × 10
##        X1      X2      X3     X4     X5     X6      X7     X8     X9    X10
##     <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>  <dbl>
## 1  0.0496 -2.71   -0.406  -0.999  0.662  0.258 -0.668  -0.420  2.08   1.57 
## 2 -0.401   1.51   -0.587   1.01   1.37  -0.441  0.577   2.37   0.617 -0.323
## 3 -0.611   0.0427  0.0996 -0.554 -0.773 -0.627 -0.853  -1.69  -1.46  -2.35 
## 4 -1.08    1.43   -0.677  -0.947  0.567 -1.14  -0.0734  1.85  -0.110 -1.44 
## 5  2.54    1.51    0.172   0.746  0.309 -0.657 -0.697   1.05  -0.481 -0.510
## 6  0.370   0.435   1.79    1.64   0.268  0.808  1.73   -0.335  0.440  0.229
str(afa)
## tibble [200 × 10] (S3: tbl_df/tbl/data.frame)
##  $ X1 : num [1:200] 0.0496 -0.401 -0.6111 -1.0787 2.5436 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X2 : num [1:200] -2.7092 1.5148 0.0427 1.4289 1.5114 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X3 : num [1:200] -0.4055 -0.5875 0.0996 -0.6773 0.1716 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X4 : num [1:200] -0.999 1.01 -0.554 -0.947 0.746 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X5 : num [1:200] 0.662 1.365 -0.773 0.567 0.309 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X6 : num [1:200] 0.258 -0.441 -0.627 -1.138 -0.657 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X7 : num [1:200] -0.6683 0.5771 -0.8532 -0.0734 -0.6973 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X8 : num [1:200] -0.42 2.37 -1.69 1.85 1.05 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X9 : num [1:200] 2.079 0.617 -1.464 -0.11 -0.481 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9
##  $ X10: num [1:200] 1.572 -0.323 -2.353 -1.436 -0.51 ...
##   ..- attr(*, "format.spss")= chr "F9.6"
##   ..- attr(*, "display_width")= int 9

10 değişken, 200 birey

KMO ve Bartlett

KMO(afa)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = afa)
## Overall MSA =  0.82
## MSA for each item = 
##   X1   X2   X3   X4   X5   X6   X7   X8   X9  X10 
## 0.83 0.79 0.82 0.88 0.76 0.77 0.88 0.84 0.83 0.74
cortest.bartlett(afa)
## $chisq
## [1] 827
## 
## $p.value
## [1] 1.98e-144
## 
## $df
## [1] 45

Genel KMO = .82 → .60 sınırının çok üstünde, örneklem yeterliliği iyi. Madde bazlı MSA değerleri de .74-.88 arasında, hepsi .60’ın üstünde.

Bartlett: χ²(45) = 827.11, p < .001 → korelasyon matrisi birim matristen anlamlı şekilde farklı.

Veri faktör analizine uygun.

Faktör Sayısı, Kaiser Kriteri

fa(afa)$e.values
##  [1] 4.213 1.557 1.369 0.528 0.503 0.435 0.407 0.388 0.349 0.251
scree(cor(afa), factors = FALSE)

İlk üç özdeğer 1’den büyük. K1 kuralına göre 3 faktör çıkarılacak. Scree plot da 3 faktörü destekliyor dirsek noktası 3. faktörden sonra.

Döndürmesiz AFA, örüntü matrisi,

out <- fa(afa, nfactors = 3, fm = "pa", rotate = "none")
out
## Factor Analysis using method =  pa
## Call: fa(r = afa, nfactors = 3, rotate = "none", fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##      PA1   PA2   PA3   h2   u2 com
## X1  0.65  0.01 -0.37 0.56 0.44 1.6
## X2  0.62 -0.46  0.23 0.64 0.36 2.1
## X3  0.68  0.06 -0.39 0.62 0.38 1.6
## X4  0.67  0.00 -0.34 0.57 0.43 1.5
## X5  0.58 -0.50  0.25 0.65 0.35 2.3
## X6  0.56  0.37  0.36 0.58 0.42 2.5
## X7  0.72  0.17 -0.28 0.62 0.38 1.4
## X8  0.56 -0.45  0.19 0.54 0.46 2.2
## X9  0.54  0.38  0.28 0.52 0.48 2.4
## X10 0.57  0.43  0.35 0.62 0.38 2.6
## 
##                        PA1  PA2  PA3
## SS loadings           3.81 1.15 0.96
## Proportion Var        0.38 0.12 0.10
## Cumulative Var        0.38 0.50 0.59
## Proportion Explained  0.64 0.19 0.16
## Cumulative Proportion 0.64 0.84 1.00
## 
## Mean item complexity =  2
## Test of the hypothesis that 3 factors are sufficient.
## 
## df null model =  45  with the objective function =  4.25 with Chi Square =  827
## df of  the model are 18  and the objective function was  0.15 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic n.obs is  200 with the empirical chi square  9.02  with prob <  0.96 
## The total n.obs was  200  with Likelihood Chi Square =  29.5  with prob <  0.043 
## 
## Tucker Lewis Index of factoring reliability =  0.963
## RMSEA index =  0.056  and the 90 % confidence intervals are  0.01 0.092
## BIC =  -65.9
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA3
## Correlation of (regression) scores with factors   0.95 0.86 0.84
## Multiple R square of scores with factors          0.90 0.75 0.70
## Minimum correlation of possible factor scores     0.81 0.49 0.41
round(out$loadings[, 1:3], 3)
##       PA1    PA2    PA3
## X1  0.651  0.011 -0.371
## X2  0.619 -0.456  0.226
## X3  0.678  0.060 -0.391
## X4  0.670  0.000 -0.341
## X5  0.581 -0.504  0.246
## X6  0.560  0.367  0.355
## X7  0.717  0.172 -0.281
## X8  0.557 -0.446  0.187
## X9  0.540  0.380  0.284
## X10 0.568  0.425  0.347

X2 için: PA1 = 0.619, PA2 = -0.456, PA3 = 0.226 Bu katsayılar her bir faktörün X2 maddesindeki bireysel katkısını gösteriyor. X2’nin puanını hesaplamak için kurulan denklem: X2 = 0.62 × F1 + (-0.46) × F2 + 0.23 × F3 + hata. En büyük ağırlık 1. faktörde ama 2. faktörün de negatif yönde güçlü katkısı var.

Ortak Varyans

cat("X2 için h² =", round(out$communality["X2"], 4), "\n")
## X2 için h² = 0.642
h2_x2 <- 0.6191^2 + (-0.4558)^2 + 0.2261^2
cat("Elle hesaplama:", round(h2_x2, 4), "\n")
## Elle hesaplama: 0.642

h² = 0.64 → X2’deki varyansın %64’ü üç faktör tarafından açıklanıyor. .50 üstü iyi temsil demek. Kalan %36’sı (u² = .36) bu faktörlerle açıklanamayan özgün varyans. Örüntü katsayıları ile ortak varyans arasındaki ilişki: h² = λ₁² + λ₂² + λ₃². Yani ortak varyans, örüntü katsayılarının karelerinin toplamıdır.

Açıklanan varyans, artıklar

out$Vaccounted
##                         PA1   PA2   PA3
## SS loadings           3.808 1.154 0.960
## Proportion Var        0.381 0.115 0.096
## Cumulative Var        0.381 0.496 0.592
## Proportion Explained  0.643 0.195 0.162
## Cumulative Proportion 0.643 0.838 1.000
artik <- round(out$residual, 2)
artik
##        X1    X2    X3    X4    X5    X6    X7    X8    X9   X10
## X1   0.44  0.02  0.01 -0.02 -0.03 -0.04  0.01  0.01 -0.02  0.05
## X2   0.02  0.36 -0.01  0.00  0.00  0.02 -0.01 -0.01  0.02 -0.03
## X3   0.01 -0.01  0.38  0.01  0.02  0.04 -0.02 -0.01  0.03 -0.06
## X4  -0.02  0.00  0.01  0.43 -0.02  0.02  0.01  0.02 -0.01 -0.01
## X5  -0.03  0.00  0.02 -0.02  0.35 -0.04  0.02  0.00  0.01  0.02
## X6  -0.04  0.02  0.04  0.02 -0.04  0.42 -0.02  0.02  0.00  0.00
## X7   0.01 -0.01 -0.02  0.01  0.02 -0.02  0.38 -0.02  0.00  0.02
## X8   0.01 -0.01 -0.01  0.02  0.00  0.02 -0.02  0.46 -0.03  0.02
## X9  -0.02  0.02  0.03 -0.01  0.01  0.00  0.00 -0.03  0.48  0.00
## X10  0.05 -0.03 -0.06 -0.01  0.02  0.00  0.02  0.02  0.00  0.38
n_buyuk <- sum(abs(artik[lower.tri(artik)]) > 0.05)
cat("Mutlak değeri .05'ten büyük artık sayısı:", n_buyuk, "/ 45\n")
## Mutlak değeri .05'ten büyük artık sayısı: 1 / 45

Bir faktörün açıkladığı varyans = o faktördeki tüm yüklerin kareleri toplamı (SS loadings) / madde sayısı. 45 çift korelasyonun sadece 1 tanesinde artık .05’i aşıyor (X3-X10 arası: -0.06). Model veriye çok iyi uyum sağlıyor.

SORU 2: PROMAX EĞİK DÖNDÜRME

out_egik <- fa(afa, nfactors = 3, fm = "pa", rotate = "promax")
round(out_egik$Phi, 3)
##       PA1   PA2   PA3
## PA1 1.000 0.479 0.487
## PA2 0.479 1.000 0.350
## PA3 0.487 0.350 1.000

Üç faktör arasında orta düzeyde pozitif korelasyon var. Faktörler ilişkili ama ayrı yapılar. Eğik döndürme doğru tercih.

Örüntü matrisi ve yapı matrisi

print(out_egik$loadings, cut = 0.30, digits = 3)
## 
## Loadings:
##     PA1    PA2    PA3   
## X1   0.763              
## X2          0.780       
## X3   0.807              
## X4   0.739              
## X5          0.823       
## X6                 0.758
## X7   0.723              
## X8          0.728       
## X9                 0.706
## X10                0.799
## 
##                  PA1   PA2   PA3
## SS loadings    2.307 1.825 1.745
## Proportion Var 0.231 0.183 0.175
## Cumulative Var 0.231 0.413 0.588
print(out_egik$Structure, cut = 0.30, digits = 3)
## 
## Loadings:
##     PA1   PA2   PA3  
## X1  0.748 0.372 0.324
## X2  0.408 0.800 0.314
## X3  0.784 0.356 0.360
## X4  0.750 0.401 0.345
## X5  0.362 0.807      
## X6  0.357       0.757
## X7  0.776 0.348 0.496
## X8  0.372 0.737      
## X9  0.373       0.719
## X10 0.372       0.789
## 
##                  PA1   PA2   PA3
## SS loadings    3.181 2.600 2.551
## Proportion Var 0.318 0.260 0.255
## Cumulative Var 0.318 0.578 0.833

Her madde tek bir faktöre .70 üstü yük veriyor, diğerlerine düşük. Döndürme başarılı — net ayrışma sağlanmış. X2 yalnızca 2. faktöre yüksek yük veriyor. Yapı katsayıları örüntü katsayılarından daha yüksek çünkü faktörler arası korelasyonu da içeriyor. X2 için ilişki faktörler arası korelasyondan kaynaklanıyor, doğrudan katkıdan değil.

Döndürme öncesi

Her madde birden fazla faktöre orta düzeyde yük veriyor → kim hangi faktörün maddesi belli değil.

Döndürme sonrası

Her madde yalnızca bir faktörde .70+ yük, diğerlerinde düşük → basit yapı sağlandı. Döndürme başarılı.

FARKLI VERİ SETİ İLE UYGULAMA: bfi

psych paketindeki bfi (Big Five Inventory) verisini kullanacağım. 25 kişilik özelliği maddesi, 5 faktörlü yapı bekleniyor. Sadece ilk 200 gözlemi ve 15 maddeyi (A1-A5, C1-C5, N1-N5) kullanarak küçük bir uygulama yapacağım.

data(bfi)
bfi_alt <- bfi[1:200, c("A1","A2","A3","A4","A5","C1","C2","C3","C4","C5","N1","N2","N3","N4","N5")]
bfi_alt <- na.omit(bfi_alt)

KMO(bfi_alt)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = bfi_alt)
## Overall MSA =  0.72
## MSA for each item = 
##   A1   A2   A3   A4   A5   C1   C2   C3   C4   C5   N1   N2   N3   N4   N5 
## 0.69 0.75 0.68 0.71 0.73 0.72 0.75 0.77 0.78 0.73 0.68 0.66 0.79 0.68 0.79
cortest.bartlett(bfi_alt)
## $chisq
## [1] 892
## 
## $p.value
## [1] 4.84e-125
## 
## $df
## [1] 105
fa(bfi_alt)$e.values[1:6]
## [1] 3.423 2.741 1.835 1.174 0.970 0.754
out_bfi <- fa(bfi_alt, nfactors = 3, fm = "pa", rotate = "promax")
print(out_bfi$loadings, cut = 0.30, digits = 3)
## 
## Loadings:
##    PA1    PA3    PA2   
## A1        -0.377       
## A2         0.676       
## A3         0.871       
## A4         0.378       
## A5         0.728       
## C1                0.643
## C2                0.729
## C3                0.660
## C4               -0.558
## C5               -0.458
## N1  0.731              
## N2  0.732              
## N3  0.775              
## N4  0.543              
## N5  0.626              
## 
##                  PA1   PA3   PA2
## SS loadings    2.522 2.049 1.941
## Proportion Var 0.168 0.137 0.129
## Cumulative Var 0.168 0.305 0.434
round(out_bfi$Phi, 3)
##        PA1    PA3    PA2
## PA1  1.000 -0.226 -0.080
## PA3 -0.226  1.000  0.334
## PA2 -0.080  0.334  1.000

YANSITMA

Bu hafta dersi online izledim ama AFA konusu yüksek lisanstan tanıdık olduğu için takip etmekte zorlanmadım. R’da psych::fa() fonksiyonuyla her şeyin ne kadar kolay yapılabildiğini görmek güzeldi, SPSS’teki menü labirentine kıyasla çok daha şeffaf. En çok dikkatimi çeken şey örüntü matrisi ile yapı matrisinin farkıydı. Eğik döndürmede ikisi farklılaşıyor çünkü faktörler birbiriyle ilişkili. Yapı matrisi bu korelasyonu içeriyor, örüntü matrisi ise “saf” katkıyı gösteriyor. Dik döndürmede ikisi aynı oluyor çünkü faktörler arası korelasyon zaten sıfır. Artık matrisinin model uyumunu değerlendirmedeki rolünü de bu derste öğrendim, köşegen dışı değerler .05’ten küçükse model tüm ikili ilişkileri başarıyla açıklıyor demekmiş.