Nothing
### R code from vignette source 'GPA3bifactor.Stex'
###################################################
### code chunk number 1: GPA3bifactor.Stex:20-23
###################################################
options(continue=" ")
pdf.options(pointsize = 8)
library("GPArotation")
###################################################
### code chunk number 2: GPA3bifactor.Stex:69-83
###################################################
data("WansbeekMeijer", package = "GPArotation")
fa.unrotated <- factanal(factors = 3, covmat = NetherlandsTV,
rotation = "none")
# Orthogonal bifactor rotation
res.bifT <- bifactorT(loadings(fa.unrotated))
print(res.bifT, sortLoadings = FALSE, digits = 3)
# Oblique bifactor rotation
res.bifQ <- bifactorQ(loadings(fa.unrotated))
print(res.bifQ, sortLoadings = FALSE, digits = 3)
# Structure matrix for oblique solution
summary(res.bifQ, Structure = TRUE)
###################################################
### code chunk number 3: GPA3bifactor.Stex:116-140
###################################################
omega_h <- function(bifactor_result) {
# Compute omega hierarchical from a GPArotation bifactor solution.
# Args:
# bifactor_result : a GPArotation object from bifactorT or bifactorQ
L <- loadings(bifactor_result)
lg <- L[, 1] # general factor loadings
Ls <- L[, -1] # group factor loadings
theta <- 1 - rowSums(L^2) # model-implied unique variances
sum(lg)^2 / (sum(lg)^2 + sum(Ls^2) + sum(theta))
}
# Omega total: proportion of total score variance due to all common factors.
# Requires the observed or population correlation matrix R.
omega_t <- function(bifactor_result, R) {
L <- loadings(bifactor_result)
R_hat <- L %*% t(L)
sum(R_hat) / sum(R)
}
# Coefficient alpha from a correlation matrix
alpha_coef <- function(R) {
k <- nrow(R)
k / (k - 1) * (1 - sum(diag(R)) / sum(R))
}
###################################################
### code chunk number 4: GPA3bifactor.Stex:166-191
###################################################
# Example 1: Strong general factor (loadings .7), weak group factors (.2)
lambda_g1 <- rep(0.7, 12)
lambda_s1a <- c(rep(0.2, 4), rep(0.0, 8))
lambda_s1b <- c(rep(0.0, 4), rep(0.2, 4), rep(0.0, 4))
lambda_s1c <- c(rep(0.0, 8), rep(0.2, 4))
L1 <- cbind(lambda_g1, lambda_s1a, lambda_s1b, lambda_s1c)
R1 <- L1 %*% t(L1)
diag(R1) <- 1
fa1 <- factanal(factors = 4, covmat = R1, rotation = "none")
bif1 <- bifactorT(loadings(fa1))
# Example 2: Weaker general factor (loadings .3), stronger group factors (.6)
lambda_g2 <- rep(0.3, 12)
lambda_s2a <- c(rep(0.6, 4), rep(0.0, 8))
lambda_s2b <- c(rep(0.0, 4), rep(0.6, 4), rep(0.0, 4))
lambda_s2c <- c(rep(0.0, 8), rep(0.6, 4))
L2 <- cbind(lambda_g2, lambda_s2a, lambda_s2b, lambda_s2c)
R2 <- L2 %*% t(L2)
diag(R2) <- 1
fa2 <- factanal(factors = 4, covmat = R2, rotation = "none")
bif2 <- bifactorT(loadings(fa2))
###################################################
### code chunk number 5: GPA3bifactor.Stex:194-203
###################################################
cat("Example 1 - Strong general factor:\n")
cat(" alpha =", round(alpha_coef(R1), 3), "\n")
cat(" omega_t =", round(omega_t(bif1, R1), 3), "\n")
cat(" omega_h =", round(omega_h(bif1), 3), "\n\n")
cat("Example 2 - Weaker general factor:\n")
cat(" alpha =", round(alpha_coef(R2), 3), "\n")
cat(" omega_t =", round(omega_t(bif2, R2), 3), "\n")
cat(" omega_h =", round(omega_h(bif2), 3), "\n")
###################################################
### code chunk number 6: GPA3bifactor.Stex:268-269
###################################################
data("CCAI", package = "GPArotation")
###################################################
### code chunk number 7: GPA3bifactor.Stex:272-275
###################################################
cat("Range of observed correlations:\n")
cat(" Min:", round(min(CCAI_R[lower.tri(CCAI_R)]), 3), "\n")
cat(" Max:", round(max(CCAI_R[lower.tri(CCAI_R)]), 3), "\n")
###################################################
### code chunk number 8: GPA3bifactor.Stex:283-287
###################################################
fa_unrotated <- factanal(factors = 3, covmat = CCAI_R,
n.obs = 461, rotation = "none")
bif <- bifactorT(loadings(fa_unrotated))
print(bif, sortLoadings = FALSE, digits = 3)
###################################################
### code chunk number 9: GPA3bifactor.Stex:306-311
###################################################
cat("alpha =", round(alpha_coef(CCAI_R), 3), "\n")
cat("omega_t =", round(omega_t(bif, CCAI_R), 3), "\n")
cat("omega_h =", round(omega_h(bif), 3), "\n")
cat("gap (omega_t - omega_h) =",
round(omega_t(bif, CCAI_R) - omega_h(bif), 3), "\n")
###################################################
### code chunk number 10: GPA3bifactor.Stex:321-336
###################################################
omega_h_by_group <- function(bifactor_result, R) {
L <- loadings(bifactor_result)
lg <- L[, 1]
Ls <- L[, -1]
theta <- 1 - rowSums(L^2)
denom <- sum(lg)^2 + sum(Ls^2) + sum(theta)
cat("Variance partition:\n")
cat(" General factor: ", round(sum(lg)^2 / denom, 3), "\n")
for (j in 1:ncol(Ls))
cat(" Group factor", j + 1, ": ",
round(sum(Ls[, j]^2) / denom, 3), "\n")
cat(" Measurement error: ", round(sum(theta) / denom, 3), "\n")
cat(" Total (omega_t): ",
round(omega_t(bifactor_result, R), 3), "\n")
}
###################################################
### code chunk number 11: GPA3bifactor.Stex:339-340
###################################################
omega_h_by_group(bif, CCAI_R)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.