나는 문제의 초점이 이론적 인 측면보다는 덜 실용적 측면, 즉 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)
x = Λ f+ 전자엑스Λ에프이자형
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 ...
편집 : 요인 점수는 패키지를 참조하십시오 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
폴리 코릭 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를 설정 하는 기능 fa()
과 fa.poly()
더 많은 옵션을 제공합니다. 또한 적절한 테스트 등을 제공하는 일부 출력을 편집했습니다. 이러한 기능 (및 psych
일반적으로 패키지) 에 대한 문서 가 우수합니다. 여기이 예제는 시작하기위한 것입니다.