Sorunun odağının teorik tarafta daha az, pratik tarafta daha fazla olduğunu, yani R'de ikilik verilerin bir faktör analizinin nasıl uygulanacağını düşünüyorum.
İlk olarak, 2 dik faktörden gelen 6 değişkenten 200 gözlem simüle edelim. Birkaç ara adım atacağım ve daha sonra ikiye ayıracağım çok değişkenli normal sürekli verilerle başlayacağım. Bu şekilde Pearson korelasyonlarını polikrik korelasyonlarla karşılaştırabilir ve sürekli verilerden faktör yüklerini ikilik verilerden ve gerçek yüklemelerle karşılaştırabiliriz.
set.seed(1.234)
N <- 200 # number of observations
P <- 6 # number of variables
Q <- 2 # number of factors
# true P x Q loading matrix -> variable-factor correlations
Lambda <- matrix(c(0.7,-0.4, 0.8,0, -0.2,0.9, -0.3,0.4, 0.3,0.7, -0.8,0.1),
nrow=P, ncol=Q, byrow=TRUE)
x = Λ f+ exΛfe
library(mvtnorm) # for rmvnorm()
FF <- rmvnorm(N, mean=c(5, 15), sigma=diag(Q)) # factor scores (uncorrelated factors)
E <- rmvnorm(N, rep(0, P), diag(P)) # matrix with iid, mean 0, normal errors
X <- FF %*% t(Lambda) + E # matrix with variable values
Xdf <- data.frame(X) # data also as a data frame
Sürekli veriler için faktör analizi yapın. Tahmini yükler, alakasız işareti göz ardı ederken gerçek yüklere benzer.
> library(psych) # for fa(), fa.poly(), factor.plot(), fa.diagram(), fa.parallel.poly, vss()
> fa(X, nfactors=2, rotate="varimax")$loadings # factor analysis continuous data
Loadings:
MR2 MR1
[1,] -0.602 -0.125
[2,] -0.450 0.102
[3,] 0.341 0.386
[4,] 0.443 0.251
[5,] -0.156 0.985
[6,] 0.590
Şimdi verileri ikiye ayıralım. Verileri iki biçimde tutacağız: sıralı faktörlere sahip bir veri çerçevesi ve sayısal bir matris olarak. hetcor()
paketten polycor
bize daha sonra FA için kullanacağımız polikrik korelasyon matrisini veriyoruz.
# dichotomize variables into a list of ordered factors
Xdi <- lapply(Xdf, function(x) cut(x, breaks=c(-Inf, median(x), Inf), ordered=TRUE))
Xdidf <- do.call("data.frame", Xdi) # combine list into a data frame
XdiNum <- data.matrix(Xdidf) # dichotomized data as a numeric matrix
library(polycor) # for hetcor()
pc <- hetcor(Xdidf, ML=TRUE) # polychoric corr matrix -> component correlations
Şimdi düzenli bir FA yapmak için polikrik korelasyon matrisini kullanın. Tahmini yüklemelerin, sürekli verilerdekine oldukça benzer olduğunu unutmayın.
> faPC <- fa(r=pc$correlations, nfactors=2, n.obs=N, rotate="varimax")
> faPC$loadings
Loadings:
MR2 MR1
X1 -0.706 -0.150
X2 -0.278 0.167
X3 0.482 0.182
X4 0.598 0.226
X5 0.143 0.987
X6 0.571
Polikrik korelasyon matrisini kendiniz hesaplama adımını atlayabilir ve doğrudan aynı şeyi fa.poly()
yapan paketten kullanabilirsiniz psych
. Bu işlev ham ikilik verileri sayısal bir matris olarak kabul eder.
faPCdirect <- fa.poly(XdiNum, nfactors=2, rotate="varimax") # polychoric FA
faPCdirect$fa$loadings # loadings are the same as above ...
DÜZENLEME: Faktör skorları için, özellikle politom sonuç verileri için ltm
bir factor.scores()
işlevi olan pakete bakın . Bu sayfada bir örnek verilmiştir -> "Faktör Skorları - Yetenek Tahminleri".
Her iki paketi kullanarak factor.plot()
ve faktörlerini kullanarak faktör analizinden yüklemeleri görselleştirebilirsiniz . Herhangi bir nedenle, tam nesneden değil, yalnızca sonucun bileşenini kabul eder .fa.diagram()
psych
factor.plot()
$fa
fa.poly()
factor.plot(faPCdirect$fa, cut=0.5)
fa.diagram(faPCdirect)
Paralel analiz ve "çok basit bir yapı" analizi, faktör sayısının seçiminde yardımcı olur. Yine, paket psych
gerekli işlevlere sahiptir. vss()
polikrik korelasyon matrisini argüman olarak alır.
fa.parallel.poly(XdiNum) # parallel analysis for dichotomous data
vss(pc$correlations, n.obs=N, rotate="varimax") # very simple structure
Polikrik FA için paralel analiz de paket tarafından sağlanır random.polychor.pa
.
library(random.polychor.pa) # for random.polychor.pa()
random.polychor.pa(data.matrix=XdiNum, nrep=5, q.eigen=0.99)
İşlevlerin fa()
ve fa.poly()
FA'yı ayarlamak için çok daha fazla seçenek sunduğunu unutmayın . Buna ek olarak, uyum testlerini vb. Veren çıktıların bazılarını düzenledim. Bu işlevlerin (ve psych
genel olarak paketin ) dokümantasyonu mükemmel. Buradaki örnek sadece başlamanız içindir.