मुझे लगता है कि यह सवाल सैद्धांतिक पक्ष पर कम है, और व्यावहारिक पक्ष पर अधिक है, अर्थात, आर में द्विबीजपत्री डेटा के एक कारक विश्लेषण को कैसे लागू किया जाए।
सबसे पहले, 2 ऑर्थोगोनल कारकों से आने वाले 6 चरों में से 200 अवलोकनों का अनुकरण करते हैं। मैं मध्यवर्ती चरणों के एक जोड़े को ले जाऊंगा और बहुभिन्नरूपी सामान्य निरंतर डेटा के साथ शुरू करूंगा जो कि मैं बाद में द्विभाजित करता हूं। इस प्रकार, हम पियरसन सहसंबंधों की तुलना पॉलीकोरिक सहसंबंधों से कर सकते हैं, और द्विधातु डेटा और सच्चे लोडिंग से निरंतर डेटा से कारक लोडिंग की तुलना कर सकते हैं।
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+ ईएक्सΛचइ
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
निरंतर डेटा के लिए कारक विश्लेषण करें। अप्रासंगिक संकेत की अनदेखी करने पर अनुमानित लोडिंग सही वाले के समान हैं।
> 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
अब डेटा को डाइकोटोमाइज़ करते हैं। हम डेटा को दो प्रारूपों में रखेंगे: ऑर्डर किए गए कारकों के साथ डेटा फ़्रेम के रूप में और संख्यात्मक मैट्रिक्स के रूप में। hetcor()
पैकेज polycor
से हमें पॉलीकोरिक सहसंबंध मैट्रिक्स देता है जिसे हम बाद में एफए के लिए उपयोग करेंगे।
# 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
अब नियमित एफए करने के लिए पॉलीकोरिक सहसंबंध मैट्रिक्स का उपयोग करें। ध्यान दें कि अनुमानित लोडिंग निरंतर डेटा से काफी हद तक समान हैं।
> 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
आप स्वयं पॉलीकोरिक सहसंबंध मैट्रिक्स की गणना के चरण को छोड़ सकते हैं, और सीधे fa.poly()
पैकेज से उपयोग कर सकते हैं psych
, जो अंत में एक ही काम करता है। यह फ़ंक्शन एक सांख्यिक मैट्रिक्स के रूप में कच्चे विचित्र डेटा को स्वीकार करता है।
faPCdirect <- fa.poly(XdiNum, nfactors=2, rotate="varimax") # polychoric FA
faPCdirect$fa$loadings # loadings are the same as above ...
संपादित करें: कारक स्कोर के लिए, पैकेज को देखें ltm
जिसमें factor.scores()
विशेष रूप से बहुपद परिणाम डेटा के लिए एक फ़ंक्शन है। इस पृष्ठ पर एक उदाहरण दिया गया है -> "फैक्टर स्कोर - एबिलिटी अनुमान"।
आप का उपयोग कर कारक विश्लेषण से लोडिंग कल्पना कर सकते हैं factor.plot()
और fa.diagram()
पैकेज से दोनों, psych
। किसी कारण से , परिणाम का factor.plot()
केवल $fa
घटक को स्वीकार करता है fa.poly()
, न कि पूर्ण वस्तु को।
factor.plot(faPCdirect$fa, cut=0.5)
fa.diagram(faPCdirect)
समानांतर विश्लेषण और "बहुत सरल संरचना" विश्लेषण कारकों की संख्या का चयन करने में सहायता प्रदान करते हैं। फिर से, पैकेज psych
में आवश्यक कार्य हैं। vss()
एक तर्क के रूप में पॉलीकोरिक सहसंबंध मैट्रिक्स लेता है।
fa.parallel.poly(XdiNum) # parallel analysis for dichotomous data
vss(pc$correlations, n.obs=N, rotate="varimax") # very simple structure
पैकेज द्वारा पॉलीकोरिक एफए के लिए समानांतर विश्लेषण भी प्रदान किया जाता है random.polychor.pa
।
library(random.polychor.pa) # for random.polychor.pa()
random.polychor.pa(data.matrix=XdiNum, nrep=5, q.eigen=0.99)
ध्यान दें कि कार्य fa()
और fa.poly()
एफए स्थापित करने के लिए कई और विकल्प प्रदान करते हैं। इसके अलावा, मैंने कुछ आउटपुट का संपादन किया जो फिट परीक्षणों आदि की अच्छाई देता है। इन कार्यों के लिए प्रलेखन (और psych
सामान्य रूप से पैकेज ) उत्कृष्ट है। यह उदाहरण यहां आपको आरंभ करने के लिए है।