ฉันให้ความสำคัญกับคำถามที่น้อยกว่าในด้านทฤษฎีและอีกมากเกี่ยวกับภาคปฏิบัติเช่นวิธีการใช้การวิเคราะห์ปัจจัยของข้อมูลสองขั้วในอาร์
อันดับแรกลองจำลองการสังเกต 200 ครั้งจาก 6 ตัวแปรมาจาก 2 ปัจจัยมุมฉาก ฉันจะทำสองขั้นตอนกลางและเริ่มต้นด้วยข้อมูลต่อเนื่องหลายตัวแปรแบบปกติที่ฉันแบ่งขั้วต่อในภายหลัง ด้วยวิธีนี้เราสามารถเปรียบเทียบความสัมพันธ์ของเพียร์สันกับความสัมพันธ์ของพอลิคาร์บอเนตและเปรียบเทียบการโหลดปัจจัยจากข้อมูลต่อเนื่องกับข้อมูลที่มาจากข้อมูลแบบแยกขั้วและการโหลดที่แท้จริง
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Λฉอี
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
ทำให้เรามีเมทริกซ์สหสัมพันธ์โพลีคานิคที่เราจะใช้สำหรับ 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
ตอนนี้ใช้เมทริกซ์สหสัมพันธ์โพลีคานิคเพื่อทำ FA ปกติ โปรดทราบว่าการโหลดโดยประมาณนั้นค่อนข้างคล้ายคลึงกับโหลดจากข้อมูลต่อเนื่อง
> 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
การวิเคราะห์แบบขนานสำหรับ polychoric 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()
ตัวเลือกอื่น ๆ อีกมากมายที่จะตั้งค่า FA นอกจากนี้ฉันได้แก้ไขบางส่วนของผลลัพธ์ที่ให้การทดสอบแบบพอดี ฯลฯ เอกสารสำหรับฟังก์ชั่นเหล่านี้ (และบรรจุภัณฑ์psych
โดยทั่วไป) นั้นยอดเยี่ยม ตัวอย่างนี้มีไว้เพื่อให้คุณเริ่มต้น