R을 사용하여 이분법 데이터 (이진 변수)에 대한 요인 분석의 예를 살펴 보는 단계


14

나는 이분법적인 데이터 만 있고 이진 변수 만 있고 상사는 테트라 코릭 상관 행렬을 사용하여 요인 분석을 수행하도록 요청했습니다. 이전에 여기와 UCLA의 통계 사이트 및 기타 사이트 에서 예제를 기반으로 다른 분석을 실행하는 방법을 스스로 가르쳐 왔지만 이분법에 대한 요인 분석의 예를 단계별로 찾을 수는 없습니다. R을 사용하여 데이터 (이진 변수).

나는 다소 단순한 질문에 대한 chl의 응답 을 보았고 또한 ttnphns의 답변 을 보았지만 더 잘 설명 된 것을 찾고 있습니다.

여기 누구든지 R을 사용하여 이진 변수에 대한 요인 분석 의 예통해 그러한 단계를 알고 있습니까?

업데이트 2012-07-11 22 : 03 : 35Z

또한 3 차원의 기존 계측기를 사용하여 추가 질문을 추가했으며 이제 4 가지의 다른 차원을 찾고자합니다. 또한 샘플 크기는 이고 현재 19 개의 항목이 있습니다. 나는 우리의 표본 크기와 품목 수를 많은 심리학 기사와 비교했으며 우리는 분명히 최하위에 있지만 어쨌든 시도하고 싶었습니다. 비록 이것이 내가 찾고 있는 단계별 절차에 중요하지 않지만 아래 의 caracal의 는 정말 놀랍습니다. 나는 아침에 내 데이터를 사용하여 내 방식대로 일할 것입니다.=15319


1
관심있는 질문에 따라 FA가 반드시 최선의 선택이 아닐 수도 있으므로 연구 상황에 대해 더 많이 말할 수 있습니까?
chl

@chl, 내 질문에 답변 해 주셔서 감사합니다 . PTSD와 관련된 일부 질문 의 기본 요소 구조 를 조사하고 있습니다. 1) 일부 도메인 (클러스터 )을 식별 하고 2) 각 도메인 에 서로 다른 질문이 얼마나 많이 로드 되는지 조사하는 데 관심이 있습니다 .
에릭 실패

1
(a) 표본 크기는 무엇입니까, (b) 기존 (이미 검증 된) 기기입니까, 자체 제작 설문지입니까?
chl

=153

1
알았어, 고마워 그것은 R로 예시 된 실제 예제를 설정하기 쉬워야합니다.
chl

답변:


22

나는 문제의 초점이 이론적 인 측면보다는 덜 실용적 측면, 즉 R에서 이분법 데이터의 요인 분석을 구현하는 방법에 중점을 둡니다.

먼저, 2 개의 직교 인자에서 나오는 6 개의 변수에서 200 개의 관측 값을 시뮬레이션 해 봅시다. 몇 가지 중간 단계를 수행하고 나중에 이분법 화하는 다변량 정규 연속 데이터로 시작합니다. 이렇게하면 Pearson 상관 관계와 다항식 상관 관계를 비교하고 연속 데이터의 요인로드와 이분 데이터 및 실제로드의 요소로드를 비교할 수 있습니다.

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)

엑스=Λ에프+이자형엑스Λ에프이자형

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 결국 동일한 작업을 수행하는 package에서 . 이 함수는 원시 이분법 데이터를 숫자 행렬로 받아들입니다.

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

편집 : 요인 점수는 패키지를 참조하십시오 ltmfactor.scores() 다항 결과 데이터를위한 기능 이있는 를 . 이 페이지 에 예가 있습니다 -> "요소 점수-능력 추정치".

당신은 사용하여 요인 분석에서 부하를 시각화 할 수 있습니다 factor.plot()fa.diagram()패키지를 모두 psych. 어떤 이유로 전체 개체가 아닌의 결과 구성 요소 factor.plot()만 허용 합니다.$fafa.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

폴리 코릭 FA에 대한 병렬 분석도 패키지에서 제공합니다 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()fa.poly()더 많은 옵션을 제공합니다. 또한 적절한 테스트 등을 제공하는 일부 출력을 편집했습니다. 이러한 기능 (및 psych일반적으로 패키지) 에 대한 문서 가 우수합니다. 여기이 예제는 시작하기위한 것입니다.


당신의 예제를 통해 당신의 단계 는 좋아 보인다. 나는 아침에 내 데이터를 사용하여 내 방식대로 일하고 당신에게 돌아올 것입니다. 시간을내어 작성해 주셔서 감사합니다. 만약 당신이 이론적 인 참고 문헌을 가지고 있다면 그것들에도 관심이있을 것입니다. Chl 은 R의 심리 측정을 위해 Revelle의 교과서를 추천 했으며 분명히 그것을 살펴볼 것입니다. 감사합니다
Eric Fail

@ caracal : 일반적인 Pearson r 대신 poly / tetra-choric 상관 관계를 사용할 때 psych어떻게 든 요인 점수 를 추정 할 수 있습니까?
ttnphns

3
죄송합니다, @caracal, 저는 R 사용자가 아닙니다. 그게 내가 묻는 이유 입니다. 원래 Pearson r이 아니라 tetrachoric r을 사용했기 때문에 원래 이진 데이터와 로딩 행렬 사이의 직선 선형 대수 연결을 잃어 버렸습니다. 이 경우 고전 회귀 / 바트 렛 대신에 특별한 알고리즘 (예 : EM 접근법에 기초한)이 사용된다고 생각합니다. 그렇게 psych는 요인 점수를 계산하거나하지 않는 경우에, 우리는 tetrachoric R이 아닌 보통의 R 처리 된 사실에 그 인해를 제공?
ttnphns

1
@EricFail 페어 와이즈 상관 관계를 통해 다항식 상관 행렬이 추정됨에 따라, 변수의 수가 증가하고 관측치의 수가 고정됨에 따라 양의 명확한 끝 행렬이 더 일반적으로 사용됩니다 (이 MPlus 토론 참조 ). 이 경우에는 nearcor()from sfsmisc또는 cor.smooth()from 과 같은 기능 psych이 사용됩니다.
caracal

1
@ttnphns 죄송합니다. 귀하의 질문을 오해했습니다. 좋은 질문! 나는 원래 MPlus 기술 부록 (11) 구현 같은 뭔가를 가정 만의 코드보고 psychfactor.scores(), 이것은 사실이 아니다. 대신 점수는 연속 사례와 마찬가지로 계산됩니다. 그러나 factor.scores()패키지 의 함수가 ltm올바른 절차를 구현하는 것 같습니다.이 -> "요소 점수-능력 추정치"및 도움말 페이지를 참조하십시오.
caracal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.