I am learning about Item Response Theory in which items are used to assess ability. In principle, multiple latent abilities may exist and some items test the one, while other items test another. This is similar to Factor Analysis and EFA can be used to discover how many latent abilities exist.
Could someone explain to me the connection between IRT and EFA and, in particular, explain in what way they are different.
As a example of how similar yet different the two approaches are, consider the following example in R in which I generate 2 factors each with 3 partially correlated items. Why are the results not identical?
library(MASS)
library(mirt)
library(psych)
set.seed(5)
Sigma <- matrix(c(1, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 0.5, 1), nrow=3, ncol=3)
mu <- c(0, 0, 0)
values_1 <- mvrnorm(n=100, mu=mu, Sigma=Sigma)
values_2 <- mvrnorm(n=100, mu=mu, Sigma=Sigma)
data <- cbind(values_1, values_2)
colnames(data) <- c("v1", "v2", "v3", "v4", "v5", "v6")
cor(data)
# v1 v2 v3 v4 v5 v6
#v1 1.00000000 0.47780822 0.467372048 -0.03945821 -0.12578462 -0.039831938
#v2 0.47780822 1.00000000 0.439688257 0.05177551 -0.05475685 0.059792099
#v3 0.46737205 0.43968826 1.000000000 -0.03951421 -0.04625965 -0.005905009
#v4 -0.03945821 0.05177551 -0.039514211 1.00000000 0.52541143 0.548299469
#v5 -0.12578462 -0.05475685 -0.046259648 0.52541143 1.00000000 0.540397739
#v6 -0.03983194 0.05979210 -0.005905009 0.54829947 0.54039774 1.000000000
model <- mirt(data, 2)
#Iteration: 61, Log-Lik: -535.353, Max-Change: 0.00010
summary(model, rotate="varimax")
#
#Rotation: varimax
#
#Rotated factor loadings:
#
# F1 F2 h2
#v1 -0.16213 -0.800794 0.668
#v2 0.05058 -0.712119 0.510
#v3 0.00323 -0.786802 0.619
#v4 0.68827 0.030944 0.475
#v5 0.74845 0.113504 0.573
#v6 0.78273 0.000103 0.613
#
#Rotated SS loadings: 1.675 1.781
#
#Factor correlations:
#
# F1 F2
#F1 1 0
#F2 0 1
fa(data, nfactors=2, rotate="varimax")
#Factor Analysis using method = minres
#Call: fa(r = data, nfactors = 2, rotate = "varimax")
#Standardized loadings (pattern matrix) based upon correlation matrix
# MR1 MR2 h2 u2 com
#v1 -0.08 0.71 0.52 0.48 1
#v2 0.04 0.68 0.46 0.54 1
#v3 -0.03 0.65 0.42 0.58 1
#v4 0.73 0.01 0.53 0.47 1
#v5 0.72 -0.09 0.53 0.47 1
#v6 0.75 0.03 0.57 0.43 1
#
# MR1 MR2
#SS loadings 1.63 1.40
#Proportion Var 0.27 0.23
#Cumulative Var 0.27 0.50
#Proportion Explained 0.54 0.46
#Cumulative Proportion 0.54 1.00
summary(model, rotate="oblimin")
#
#Rotation: oblimin
#
#Rotated factor loadings:
#
# F1 F2 h2
#v1 -0.1180 -0.7949 0.668
#v2 0.0909 -0.7188 0.510
#v3 0.0475 -0.7909 0.619
#v4 0.6902 -0.0110 0.475
#v5 0.7460 0.0683 0.573
#v6 0.7869 -0.0478 0.613
#
#Rotated SS loadings: 1.676 1.781
#
#Factor correlations:
#
# F1 F2
#F1 1.000 0.116
#F2 0.116 1.000
fa(data, nfactors=2, rotate="oblimin")
#Factor Analysis using method = minres
#Call: fa(r = data, nfactors = 2, rotate = "oblimin")
#Standardized loadings (pattern matrix) based upon correlation matrix
# MR1 MR2 h2 u2 com
#v1 -0.05 0.71 0.52 0.48 1
#v2 0.06 0.68 0.46 0.54 1
#v3 -0.01 0.65 0.42 0.58 1
#v4 0.73 0.02 0.53 0.47 1
#v5 0.72 -0.08 0.53 0.47 1
#v6 0.76 0.04 0.57 0.43 1
#
# MR1 MR2
#SS loadings 1.63 1.40
#Proportion Var 0.27 0.23
#Cumulative Var 0.27 0.50
#Proportion Explained 0.54 0.46
#Cumulative Proportion 0.54 1.00