理論はこちら
昔はLambda4というパッケージがあったようだが、今はアーカイブに入っていて、使えない。
現在のパッケージの中では、psychパッケージを使ってλ1~λ6を計算する方法をするのが最もよい。
Readme
https://cran.r-project.org/web/packages/psych/refman/psych.html#alpha
ライブラリの読み込みとデータ準備
library(psych) # bfi から外向性(E1〜E5)の5項目を使用 data(bfi) X <- bfi[, c("E1","E2","E3","E4","E5")] X$E1 <- 7 - X$E1 # 逆転項目 X$E2 <- 7 - X$E2 # 逆転項目 X <- na.omit(X)
逆転を自動処理してα(=λ3)とλ6は alpha() で取得
a <- alpha(X) # Cronbach's alpha と Guttman's λ6 lam3 <- unname(a$total$raw_alpha) # λ3 = α lam6 <- unname(a$total$G6) # λ6(SMCベース)
λ4(最大スプリットハーフ)は splitHalf() で取得
sh <- splitHalf(X, raw = TRUE, brute = (ncol(X) <= 16)) lam4 <- unname(sh$maxrb) # λ4 = 最大スプリットハーフ
残り(λ1, λ2, λ5)はpsychライブラリーのヘルプから実装
S <- cov(X, use = "pairwise.complete.obs") k <- ncol(S) Vx <- sum(S) # 総得点分散 = 1' S 1 d <- diag(S) off <- S; diag(off) <- 0 lam1 <- 1 - sum(d) / Vx C2 <- sum(off^2) # ∑_{i≠j} σ_ij^2 lam2 <- lam1 + sqrt((k/(k-1)) * C2) / Vx row_ss <- rowSums(off^2) # 行ごとの共分散二乗和 lam5 <- lam1 + (2 * sqrt(max(row_ss))) / Vx
λ1~λ6を示す
round(c(lambda1 = lam1, lambda2 = lam2, lambda3 = lam3, lambda4 = lam4, lambda5 = lam5, lambda6 = lam6), 3)
lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 0.609 0.765 0.761 0.776 0.756 0.726
層別α(Stratified alpha)
library(sirt) labs <- c(1, 2, 1, 2, 1) itemstrata <- cbind(colnames(X), labs) str_alpha <- sirt::stratified.cronbach.alpha(X, itemstrata = itemstrata) str_alpha
0.768
https://cran.r-project.org/web/packages/sirt/refman/sirt.html#stratified.cronbach.alpha
最大信頼性(Coefficient H)
https://cran.r-project.org/web/packages/EFAtools/index.html
lavaan の1因子CFAをEFAtoolsのOMEGA()に渡す。
library(lavaan) library(EFAtools) model <- 'F =~ E1 + E2 + E3 + E4 + E5' fit <- lavaan::cfa(model, data = X, std.lv = TRUE) # 1因子CFA H_out <- EFAtools::OMEGA(fit) # 名前付きベクトル; H が含まれる H_out
Omega total and H index for the single factor: Omega: 0.763 H index: 0.778
最大化 λ4(Guttman’s λ4)
lam4 <- psych::splitHalf(X, raw = TRUE, brute = (ncol(X) <= 16))$maxrb lam4
[1] 0.7759781