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.
İki test yapılıyor:
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.
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.
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
## 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
## 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
## $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.
## [1] 4.213 1.557 1.369 0.528 0.503 0.435 0.407 0.388 0.349 0.251
İ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.
## 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
## 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.
## X2 için h² = 0.642
## 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.
## 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
## 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.
## 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.
##
## 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
##
## 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ı.
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
## $chisq
## [1] 892
##
## $p.value
## [1] 4.84e-125
##
## $df
## [1] 105
## [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
## PA1 PA3 PA2
## PA1 1.000 -0.226 -0.080
## PA3 -0.226 1.000 0.334
## PA2 -0.080 0.334 1.000
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ş.