กำลังมองหาขั้นตอนผ่านตัวอย่างของการวิเคราะห์ปัจจัยเกี่ยวกับข้อมูลแบบแบ่งขั้ว (ตัวแปรไบนารี) โดยใช้ R


14

ฉันมีข้อมูลแบบแบ่งขั้วมีเพียงตัวแปรไบนารีเท่านั้นและเจ้านายของฉันขอให้ฉันทำการวิเคราะห์ปัจจัยโดยใช้เมทริกซ์สหสัมพันธ์ tetrachoric ก่อนหน้านี้ฉันสามารถสอนตัวเองถึงวิธีการวิเคราะห์ที่แตกต่างกันตามตัวอย่างที่นี่และที่เว็บไซต์สถิติของ UCLAและเว็บไซต์อื่น ๆ เช่นนี้ แต่ฉันไม่สามารถหาขั้นตอนผ่านตัวอย่างของการวิเคราะห์ปัจจัยบน dichotomous ข้อมูล (ตัวแปรไบนารี) โดยใช้ R

ฉันเห็นการตอบสนองของ chl ต่อคำถามที่ค่อนข้างคล้ายคลึงกันและฉันก็เห็นคำตอบของ ttnphnsด้วย แต่ฉันกำลังมองหาบางสิ่งที่สะกดได้มากกว่านี้อีกขั้นจากตัวอย่างที่ฉันสามารถใช้งานได้

ไม่มีใครที่นี่รู้ขั้นตอนดังกล่าวผ่านตัวอย่างของการวิเคราะห์ปัจจัยในตัวแปรไบนารีโดยใช้ R หรือไม่?

อัปเดต 2012-07-11 22: 03: 35Z

ฉันควรเพิ่มว่าฉันกำลังทำงานกับเครื่องมือที่กำหนดขึ้นซึ่งมีสามมิติซึ่งเราได้เพิ่มคำถามเพิ่มเติมและตอนนี้เราหวังว่าจะพบสี่มิติที่แตกต่างกัน นอกจากนี้ขนาดตัวอย่างของเรามีเพียงและขณะนี้เรามี19รายการ ฉันเปรียบเทียบขนาดตัวอย่างและจำนวนรายการของเรากับบทความจิตวิทยาจำนวนหนึ่งและเราอยู่ในระดับล่างสุด แต่เราต้องการลองต่อไป แม้ว่านี่จะไม่สำคัญสำหรับขั้นตอนในตัวอย่างที่ฉันกำลังมองหาและตัวอย่างของ caracal ด้านล่างดูน่าทึ่งจริงๆ ฉันจะใช้วิธีของฉันผ่านมันโดยใช้ข้อมูลของฉันเป็นสิ่งแรกในตอนเช้าn=15319


1
เนื่องจาก FA อาจไม่ใช่ทางเลือกที่ดีที่สุดขึ้นอยู่กับคำถามที่คุณสนใจคุณสามารถพูดเพิ่มเติมเกี่ยวกับบริบทของการศึกษาของคุณได้หรือไม่
chl

@chl ขอบคุณสำหรับการตอบคำถามของฉันเรากำลังตรวจสอบโครงสร้างปัจจัยพื้นฐานของคำถามบางอย่างเกี่ยวกับพล็อต เรามีความสนใจใน 1) ระบุบางโดเมน (กลุ่ม) และ 2) ตรวจสอบเท่าใดคำถามที่แตกต่างกันในการโหลดในแต่ละโดเมน
Eric Fail

1
เพียงเพื่อให้แน่ใจว่า (a) ขนาดตัวอย่างของคุณคืออะไร (b) นี่คือเครื่องมือที่มีอยู่ (ผ่านการตรวจสอบแล้ว) หรือแบบสอบถามที่ผลิตเอง
chl

@chl ฉันขอขอบคุณคำถามของคุณ (a) ขนาดตัวอย่างของเราคือและขณะนี้เรามี 19 รายการ ฉันเปรียบเทียบขนาดตัวอย่างและจำนวนรายการของเรากับสิ่งที่ฉันสามารถหาได้ใน Journal of Traumatic Stress และเราอยู่ในระดับล่างสุดแน่นอน แต่เราต้องการลองต่อไป (ข) เราใช้เครื่องมือที่มีอยู่ แต่กับคำถามที่ตัวเองทำบางอย่างเพิ่มเป็นเราเชื่อว่าพวกเขาจะหาย n=153
Eric Fail

1
โอเคขอบคุณสำหรับสิ่งนี้ นั่นควรง่ายในการตั้งค่าตัวอย่างการทำงานด้วยภาพประกอบใน R.
chl

คำตอบ:


22

ฉันให้ความสำคัญกับคำถามที่น้อยกว่าในด้านทฤษฎีและอีกมากเกี่ยวกับภาคปฏิบัติเช่นวิธีการใช้การวิเคราะห์ปัจจัยของข้อมูลสองขั้วในอาร์

อันดับแรกลองจำลองการสังเกต 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=Λ+อีxΛอี

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)

เอาต์พุตจาก factor.plot () และ fa.diagram ()

การวิเคราะห์แบบขนานและการวิเคราะห์ "โครงสร้างที่ง่ายมาก" ช่วยในการเลือกจำนวนปัจจัย อีกครั้งแพคเกจ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.parallel.poly () และ random.polychor.pa ()

โปรดทราบว่าฟังก์ชั่นfa()และfa.poly()ตัวเลือกอื่น ๆ อีกมากมายที่จะตั้งค่า FA นอกจากนี้ฉันได้แก้ไขบางส่วนของผลลัพธ์ที่ให้การทดสอบแบบพอดี ฯลฯ เอกสารสำหรับฟังก์ชั่นเหล่านี้ (และบรรจุภัณฑ์psychโดยทั่วไป) นั้นยอดเยี่ยม ตัวอย่างนี้มีไว้เพื่อให้คุณเริ่มต้น


ตัวอย่างก้าวของคุณดูดีมาก ฉันจะใช้วิธีของฉันผ่านมันโดยใช้ข้อมูลของฉันในตอนเช้าและกลับไปหาคุณ ขอบคุณที่สละเวลาเขียนสิ่งนี้ หากคุณมีการอ้างอิงทางทฤษฎีฉันจะสนใจพวกเขาด้วย Chlแนะนำตำราเรียนของ Revelle สำหรับ psychometrics ใน Rและแน่นอนฉันจะดูที่ ขอบคุณ
Eric Fail

@caracal: psychอนุญาตให้ประมาณคะแนนปัจจัยเมื่อใช้สหสัมพันธ์โพลี / tetra-choric แทน Pearson r หรือไม่
ttnphns

3
ขออภัย @caracal ฉันไม่ใช่ผู้ใช้ R นั่นเป็นเหตุผลที่ฉันถามมัน เนื่องจากคุณไม่ได้ใช้ Pearson r ดั้งเดิม แต่เป็น tetrachoric r คุณสูญเสียลิงก์เชิงเส้นพีชคณิตเชิงเส้นตรงไปตรงมาระหว่างข้อมูลไบนารีดั้งเดิมและเมทริกซ์การโหลด ฉันจินตนาการว่าในกรณีนี้จะใช้อัลโกพิเศษบางอย่าง (เช่นตามแนวทาง EM) แทนการถดถอยแบบคลาสสิก / บาร์ตเลตต์หนึ่ง ดังนั้นpsychให้เนื่องจากความจริงที่ว่าเรากำลังติดต่อกับ tetrachoric r, ไม่ใช่ r ปกติ, เมื่อมันคำนวณคะแนนปัจจัย, หรือไม่?
ttnphns

1
@EricFail ในฐานะที่เป็นเมทริกซ์สหสัมพันธ์ polychoric จะมีการประเมินโดยจะผ่านความสัมพันธ์คู่ที่ไม่ใช่เชิงบวกท้ายเมทริกซ์ที่ชัดเจนแน่นอนจะกลายเป็นเรื่องธรรมดามากขึ้นตามจำนวนของตัวแปรที่เพิ่มขึ้นและจำนวนของการสังเกตการณ์ได้รับการแก้ไข (เห็นนี้อภิปราย MPlus ) ฟังก์ชันเช่นnearcor()จากsfsmiscหรือcor.smooth()จากpsychใช้สำหรับกรณีนี้
caracal

1
@ttnphns ขออภัยฉันเข้าใจผิดคำถามของคุณ คำถามที่ดี! ฉันเดิมสันนิษฐานว่าบางสิ่งบางอย่างที่เหมือนภาคผนวกเทคนิค MPlus 11 ถูกนำมาใช้ แต่กำลังมองหาที่รหัสสำหรับpsych's factor.scores()นี้ไม่ได้เป็นกรณีที่ คะแนนจะถูกคำนวณเช่นเดียวกับกรณีต่อเนื่อง อย่างไรก็ตามfactor.scores()ฟังก์ชันในแพ็คเกจltmดูเหมือนจะใช้ขั้นตอนที่ถูกต้องดูตัวอย่าง -> "คะแนนปัจจัย - การประเมินความสามารถ" และหน้าช่วยเหลือ
caracal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.