R kullanarak ikilik veriler (ikili değişkenler) üzerinde bir faktör analizi örneği üzerinden bir adım aramak


14

Bazı ikili verilerim var, sadece ikili değişkenler var ve patronum tetraforik korelasyon matrisi kullanarak bir faktör analizi yapmamı istedi. Daha önce kendime buradaki örneklere ve UCLA'nın istatistik sitesine ve bunun gibi diğer sitelere göre farklı analizleri nasıl çalıştıracağımı öğretebildim , ancak dikotom üzerine bir faktör analizi örneğine bir adım bulamıyorum R kullanarak veri (ikili değişkenler).

Ben gördün CHL tepkisini biraz simular soruya ben de gördüm ttnphns' cevabını ancak ben daha bir şey arıyorum dile , ben çalışabilirsiniz bir örnek üzerinden bir adımdır.

Burada kimse R kullanarak ikili değişkenler üzerinde bir faktör analizi örneği aracılığıyla böyle bir adım biliyor mu?

Güncelleme 2012-07-11 22: 03: 35Z

Ayrıca, bazı ek sorular eklediğimiz ve şimdi dört ayrı boyut bulmayı umduğumuz, üç boyutu olan yerleşik bir araçla çalıştığımı da eklemeliyim. Ayrıca, örneklem boyutumuz sadece ve şu anda ürünümüz var . Örneklem büyüklüğümüzü ve öğe sayımızı bir dizi psikoloji makalesiyle karşılaştırdım ve kesinlikle alt uçtayız, ama yine de denemek istedik. Yine de, bu aradığım örnek için önemli değil ve aşağıdaki caracal örneği gerçekten şaşırtıcı görünüyor. Sabah ilk veriyi kullanarak yolumdan çalışacağım.19n=15319


1
FA mutlaka en iyi seçim olmayabilir, ilgilendiğiniz soruya bağlı olarak, çalışmanızın bağlamı hakkında daha fazla şey söyleyebilir misiniz?
chl

@chl, sorumu yanıtladığınız için teşekkür ederim, TSSB ile ilgili bazı soruların altında yatan faktör yapısını araştırıyoruz . 1) bazı alan adlarının (kümelerin) tanımlanması ve 2) her bir alanda farklı soruların ne kadar yüklendiğini araştırmakla ilgileniyoruz .
Eric Fail

1
Sadece emin olmak için, (a) örneklem büyüklüğünüz nedir, (b) bu ​​mevcut (önceden doğrulanmış) bir araç mı yoksa kendi kendine yapılan bir anket mi?
chl

@chl, sorularınızı gerçekten takdir ediyorum. (a) bizim örnek boyutu , ve şu anda 19 ürün var. Örnek boyutumuzu ve ürün sayımızı Journal of Traumatic Stress'te bulabildiklerimle karşılaştırdım ve kesinlikle alt uçtayız, ama yine de denemek istedik. (b) Mevcut bir araç kullanıyoruz, ancak eksik olduğuna inandığımız için kendi kendine yapılan bazı sorular eklendi . n=153
Eric Fail

1
Tamam, bunun için teşekkürler. Yani R. resimden bir çalışma örneği kurmak kolay olmalı
chl

Yanıtlar:


22

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 polycorbize 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 ltmbir 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()psychfactor.plot()$fafa.poly()

factor.plot(faPCdirect$fa, cut=0.5)
fa.diagram(faPCdirect)

factor.plot () ve fa.diagram () 'dan çıktı

Paralel analiz ve "çok basit bir yapı" analizi, faktör sayısının seçiminde yardımcı olur. Yine, paket psychgerekli 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)

fa.parallel.poly () ve random.polychor.pa () 'den çıktı

İş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 psychgenel olarak paketin ) dokümantasyonu mükemmel. Buradaki örnek sadece başlamanız içindir.


Sizin örnek üzerinden adım harika görünüyor. Sabah verilerimi kullanarak yoluma devam edeceğim ve size geri döneceğim. Bunu yazmak için zaman ayırdığınız için teşekkür ederiz. Bazı teorik referanslarınız varsa, ben de onlarla ilgilenirim. Chl, Revelle'nin R'deki psikometri ders kitabını tavsiye etti ve kesinlikle buna bir göz atacağım. Teşekkürler
Eric Fail

@caracal: her zamanki Pearson r yerine poli / tetra-chorik korelasyonlar kullanıldığında bir psychşekilde faktör skorlarının tahmin edilmesine izin veriyor mu?
ttnphns

3
Üzgünüz, @caracal, R kullanıcısı değilim. Bu yüzden soruyorum. Orijinal Pearson r değil tetraforik r kullandığınızdan, orijinal ikili veriler ve yükleme matrisi arasında doğrudan doğrusal cebirsel bağlantıyı kaybettiniz. Bu durumda klasik regresyon / Bartlett'in yerine bazı özel algoların (örneğin EM yaklaşımına dayalı olarak) kullanılacağını hayal ediyorum. Bu, psychfaktör puanlarını hesapladığında ya da etmiyorsa, olağan r değil, tetrashoric r ile uğraştığımızdan dolayı mı veriyor?
ttnphns

1
@EricFail Polikrik korelasyon matrisleri ikili korelasyonlardan geçerek tahmin edildiğinden, değişkenlerin sayısı arttıkça ve gözlem sayısı sabitlendikçe pozitif olmayan kesin bir son matris daha yaygın hale gelir (bu MPlus tartışmasına bakınız ). Gibi fonksiyonlar nearcor()gelen sfsmiscveya cor.smooth()gelen psychbu durum için kullanılır.
caracal

1
@ttnphns Üzgünüm, sorunuzu yanlış anladım. İyi soru! Başlangıçta MPlus teknik ek 11 gibi bir şeyin uygulandığını varsaydım, ancak psych's koduna factor.scores()bakıldığında durum böyle değil. Bunun yerine, puanlar sürekli durumdaki gibi hesaplanır. Ancak, factor.scores()paketteki işlev ltmdoğru prosedürleri uyguluyor gibi görünüyor, bu örneğe bakın -> "Faktör Skorları - Yetenek Tahminleri" ve yardım sayfası.
caracal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.