Mencari langkah melalui contoh analisis faktor pada data dikotomis (variabel biner) menggunakan R

14

Saya memiliki beberapa data dikotomis, hanya variabel biner, dan bos saya meminta saya untuk melakukan analisis faktor menggunakan matriks korelasi tetrakorik. Saya sebelumnya sudah bisa belajar sendiri bagaimana menjalankan analisis yang berbeda berdasarkan contoh-contoh di sini dan di situs stat UCLA dan situs lain seperti itu, tetapi saya tidak bisa menemukan langkah melalui contoh analisis faktor pada dikotomi. data (variabel biner) menggunakan R.

Aku melihat respon chl ini untuk pertanyaan agak simular dan saya juga melihat jawaban ttnphns' , tapi saya mencari sesuatu yang lebih dibilang , langkah melalui contoh saya bisa bekerja dengan.

Adakah yang tahu langkah ini melalui contoh analisis faktor pada variabel biner menggunakan R?

Pembaruan 2012-07-11 22: 03: 35Z

Saya juga harus menambahkan bahwa saya bekerja dengan instrumen mapan, yang memiliki tiga dimensi, yang telah kami tambahkan beberapa pertanyaan tambahan dan kami sekarang berharap untuk menemukan empat dimensi yang berbeda. Selain itu, ukuran sampel kami hanya , dan saat ini kami memiliki item. Saya membandingkan ukuran sampel dan jumlah barang kami dengan sejumlah artikel psikologi dan kami jelas berada di ujung bawah, tetapi kami tetap ingin mencobanya. Padahal, ini tidak penting untuk langkah melalui contoh yang saya cari dan contoh caracal di bawah ini terlihat sangat menakjubkan. Saya akan bekerja dengan cara saya menggunakan data saya hal pertama di pagi hari.n=15319

Eric Fail
sumber
1
Karena FA mungkin tidak selalu menjadi pilihan terbaik, tergantung pada pertanyaan yang Anda minati, dapatkah Anda mengatakan lebih banyak tentang konteks studi Anda?
chl
@chl, terima kasih telah menanggapi pertanyaan saya, kami sedang menyelidiki struktur faktor yang mendasari beberapa pertanyaan tentang PTSD. Kami tertarik pada 1) mengidentifikasi beberapa domain (cluster) dan 2) menyelidiki berapa banyak pertanyaan yang berbeda memuat pada setiap domain .
Eric Fail
1
Hanya untuk memastikan, (a) berapa ukuran sampel Anda, (b) apakah ini instrumen yang sudah ada (sudah divalidasi) atau kuesioner buatan sendiri?
chl
@ chl, saya sangat menghargai pertanyaan Anda. (a) Ukuran sampel kami adalah , dan kami saat ini memiliki 19 item. Saya membandingkan ukuran sampel dan jumlah barang kami dengan apa yang dapat saya temukan di Journal of Traumatic Stress dan kami jelas berada di ujung bawah, tetapi kami tetap ingin mencobanya. (B) Kami menggunakan instrumen yang ada, tetapi dengan beberapa pertanyaan yang dibuat sendiri ditambahkan karena kami percaya mereka hilang . n=153
Eric Fail
1
Ok terima kasih untuk ini. Seharusnya mudah untuk membuat contoh yang berfungsi dengan ilustrasi dalam R.
chl

Jawaban:

22

Saya menganggap fokus pertanyaannya kurang pada sisi teoretis, dan lebih pada sisi praktis, yaitu, bagaimana menerapkan analisis faktor data dikotomis dalam R.

Pertama, mari kita simulasikan 200 pengamatan dari 6 variabel, yang berasal dari 2 faktor ortogonal. Saya akan mengambil beberapa langkah perantara dan mulai dengan data kontinu normal multivarian yang kemudian saya lakukan dikotomi. Dengan begitu, kita dapat membandingkan korelasi Pearson dengan korelasi polikorik, dan membandingkan pemuatan faktor dari data kontinu dengan yang dari data dikotomis dan pemuatan yang benar.

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)

Sekarang mensimulasikan data aktual dari model , dengan menjadi nilai-nilai variabel yang diamati seseorang, loadings benar matriks, skor faktor laten, dan iid, mean 0, kesalahan normal.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

Lakukan analisis faktor untuk data kontinu. Taksiran pemuatan mirip dengan yang sebenarnya ketika mengabaikan tanda yang tidak relevan.

> 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       

Sekarang mari kita mendikotomi data. Kami akan menyimpan data dalam dua format: sebagai kerangka data dengan faktor yang diurutkan, dan sebagai matriks numerik. hetcor()dari paket polycormemberi kita matriks korelasi polikorik yang nantinya akan kita gunakan untuk FA.

# 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

Sekarang gunakan matriks korelasi polikorik untuk melakukan FA biasa. Perhatikan bahwa taksiran beban cukup mirip dengan yang dari data kontinu.

> 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       

Anda dapat melewati langkah menghitung matriks korelasi polikorik sendiri, dan langsung menggunakan fa.poly()dari paket psych, yang melakukan hal yang sama pada akhirnya. Fungsi ini menerima data dikotomis mentah sebagai matriks numerik.

faPCdirect <- fa.poly(XdiNum, nfactors=2, rotate="varimax")    # polychoric FA
faPCdirect$fa$loadings        # loadings are the same as above ...

EDIT: Untuk skor faktor, lihat paket ltmyang memiliki factor.scores()fungsi khusus untuk data hasil politom. Contoh disediakan di halaman ini -> "Skor Faktor - Estimasi Kemampuan".

Anda dapat memvisualisasikan pemuatan dari analisis faktor menggunakan factor.plot()dan fa.diagram(), keduanya dari paket psych. Untuk beberapa alasan, factor.plot()hanya menerima $fakomponen hasil dari fa.poly(), bukan objek penuh.

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

output dari factor.plot () dan fa.diagram ()

Analisis paralel dan analisis "struktur yang sangat sederhana" memberikan bantuan dalam memilih sejumlah faktor. Sekali lagi, paket psychmemiliki fungsi yang diperlukan. vss()mengambil matriks korelasi polikorik sebagai argumen.

fa.parallel.poly(XdiNum)      # parallel analysis for dichotomous data
vss(pc$correlations, n.obs=N, rotate="varimax")   # very simple structure

Analisis paralel untuk polikorik FA juga disediakan oleh paket random.polychor.pa.

library(random.polychor.pa)    # for random.polychor.pa()
random.polychor.pa(data.matrix=XdiNum, nrep=5, q.eigen=0.99)

output dari fa.parallel.poly () dan random.polychor.pa ()

Perhatikan bahwa fungsinya fa()dan fa.poly()menyediakan lebih banyak opsi untuk mengatur FA. Selain itu, saya mengedit beberapa output yang memberikan uji kelaikan yang baik, dll. Dokumentasi untuk fungsi-fungsi ini (dan paket psychsecara umum) sangat bagus. Contoh ini di sini hanya dimaksudkan untuk membantu Anda memulai.

caracal
sumber
Contoh langkah Anda terlihat hebat. Saya akan bekerja dengan cara saya menggunakan data saya di pagi hari dan kembali kepada Anda. Terima kasih telah meluangkan waktu untuk menulis ini. Jika Anda memiliki beberapa referensi teoretis, saya juga akan tertarik pada mereka. Chl merekomendasikan buku teks Revelle untuk psikometrik dalam R dan saya pasti akan melihatnya. Terima kasih
Eric Fail
@caracal: apakah psychmemungkinkan untuk memperkirakan skor faktor ketika korelasi poli / tetra-choric digunakan sebagai ganti Pearson r biasa?
ttnphns
3
Maaf, @caracal, saya bukan pengguna R. Itu sebabnya saya menanyakannya. Karena Anda telah menggunakan bukan Pearson r asli tetapi tetrachoric r, Anda telah kehilangan tautan aljabar linear-lurus antara data biner asli dan matriks pemuatan. Saya membayangkan bahwa dalam kasus ini beberapa algo khusus akan digunakan (misalnya berdasarkan pendekatan EM) di tempat regresi klasik / Bartlett satu. Jadi, apakah psychmemberikannya karena kita berurusan dengan tetrakorik r, tidak biasa r, ketika menghitung skor faktor, atau tidak?
ttnphns
1
@ EricFail Karena matriks korelasi polikorik diperkirakan dengan melalui korelasi berpasangan, matriks akhir pasti non-positif memang menjadi lebih umum karena jumlah variabel meningkat, dan jumlah pengamatan diperbaiki (lihat diskusi MPlus ini ). Fungsi seperti nearcor()dari sfsmiscatau cor.smooth()dari psychdigunakan untuk kasus ini.
caracal
1
@ttnphns Maaf, saya salah mengerti pertanyaan Anda. Pertanyaan bagus! Saya awalnya berasumsi bahwa sesuatu seperti Mplus lampiran teknis 11 dilaksanakan, tapi melihat kode untuk psych's factor.scores(), ini tidak terjadi. Sebagai gantinya, skor dihitung seperti dalam kasus kontinu. Namun, factor.scores()fungsi dalam paket ltmtampaknya menerapkan prosedur yang benar, lihat contoh ini -> "Skor Faktor - Estimasi Kemampuan" dan halaman bantuan.
caracal