クロンバックのα信頼性係数     Last modified: Oct 02, 2009

目的

クロンバックのα信頼性係数を計算する
psy パッケージには、cronbach 関数がある

使用法

alpha(x, detail=FALSE)

引数

x	データ行列(行がケース,列が変数)
detail  詳細な計算結果を返すかどうか

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/alpha.R", encoding="euc-jp")

# クロンバックのα信頼性係数
alpha <- function(   x,                      # 必要な変数のみからなるデータ行列(データフレームまたは行列)
                        detail=FALSE)           # 詳細情報を計算するかどうか
{
        alpha0 <- function(x)
        {
                k <- ncol(x)                 # 変数の個数
                VarCovMat <- var(x)          # 分散共分散行列
                Sy2 <- sum(VarCovMat)                # 合計点の不偏分散(var(rowSums(x)) と同じ)
                Sj2 <- sum(diag(VarCovMat))  # 各変数の不偏分散の和
                return(k/(k-1)*(1-Sj2/Sy2))
        }
        x <- as.matrix(x)                    # 行列にする
        x <- subset(x, complete.cases(x))    # 欠損値を持つケースを除く
        k <- ncol(x)                         # 変数の個数(列数)
       if (is.null(colnames(x))) {              # 変数名が無いときには仮の名前を付ける
                colnames(x) <- paste("X", 1:k, sep="")
        }
        vnames <- colnames(x)                        # 変数名を記録
        stopifnot(k > 1,                        # 列数は2列以上であること
                  nrow(x) > 1)                  # 行数も2行以上であること…さもなくば,中止
        alpha <- alpha0(x)
        alpha2 <- cor2 <- R2 <- numeric(k)
        if (detail == TRUE && k >= 3) {           # print メソッドの注を参照
                z <- rowSums(x)
                for (i in 1:k) {
                        x2 <- x[, -i]
                        alpha2[i] <- alpha0(x2)
                        cor2[i] <- cor(x[, i], rowSums(x2))
                        R2[i] <- summary(lm(x[,i] ~ x2))$r.squared
                }
                result2 <- data.frame(alpha_=alpha2, r_=cor2, R_=R2)
                rownames(result2) <- vnames
                return(structure(list(alpha=c(alpha=alpha), result2=result2), class="alpha"))
        }
        else {
                class(alpha) <- "alpha"
                return(alpha=alpha)
        }
}
# print メソッド
print.alpha <- function(obj, digits=5)
{
        fmt <- sprintf("alpha = %%.%if\n", digits)
        if (length(obj) == 1) {
                cat(sprintf(fmt, obj))
        }
        else {
                cat(sprintf(fmt, obj$alpha), "\n")
                print(obj$result2, digits=digits)
                cat("alpha_ : それぞれの変数を除いたときの alpha\n")
                cat("r_     : それぞれの変数とその変数を除いたときの合計値との相関係数\n")
                cat("R_     : それぞれの変数をその変数以外の変数で予測したときの決定係数\n")
        }
}


使用例

x <- matrix(c(	# 8ケース,4変数のデータ行列例(ファイルから読んでも良い)
	49, 44, 37, 54,
	36, 36, 36, 42,
	42, 51, 45, 35,
	47, 67, 54, 40,
	54, 59, 68, 54,
	51, 55, 59, 67,
	45, 36, 48, 46,
	72, 49, 50, 58
), byrow=TRUE, ncol=4)

alpha(x)
alpha(x, detail=TRUE)

library(psy)
cronbach(x)

出力結果例

> alpha(x)
alpha = 0.74034

> alpha(x, detail=TRUE)
alpha = 0.74034
 
    alpha_      r_      R_
X1 0.66574 0.55994 0.42990
X2 0.73076 0.44440 0.55186
X3 0.59278 0.68019 0.60717
X4 0.72184 0.45892 0.48216
alpha_ : それぞれの変数を除いたときの alpha
r_     : それぞれの変数とその変数を除いたときの合計値との相関係数
R_     : それぞれの変数をその変数以外の変数で予測したときの決定係数

> library(psy)
> cronbach(x)
$sample.size
[1] 8

$number.of.items
[1] 4

$alpha
[1] 0.7403366

・ 解説ページ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh