相関係数行列からクロンバックのαを求める
尺度の作成論文などでは信頼性係数が報告される。信頼性係数には様々な種類があるが, その中でもっともよく使われるのがクロンバックのαである。クロンバックのαは次の計算式で求められる。
$$ a = \frac{n}{n-1} \left( 1- \frac{\Sigma^n _{i=1}Var(X_i)}{Var(X)}\right) \tag{1} $$
ここで, $n$は項目数, $X_i$は$i$番目の項目の得点である。$X$はテストの合計得点である。
Rでクロンバックのαの求めるには
Rでクロンバックのαを求めるためには複数のやり方がある。
とりあえずここではpsychパッケージに含まれるalpha()関数を使ってみることにする。データは同じパッケージに含まれるbfiを用いる。このデータはビッグファイブ理論が想定する因子を測定する質問紙で1因子につき5項目合計25項目からなる。サンプルサイズは2800である。今回は最初の10項目だけ使う。
データの中身はこんな感じ。6件法である。
skim_type | skim_variable | n_missing | complete_rate | numeric.mean | numeric.sd | numeric.hist |
---|---|---|---|---|---|---|
numeric | A1 | 16 | 0.9942857 | 2.413434 | 1.407737 | ▇▂▂▁▁ |
numeric | A2 | 27 | 0.9903571 | 4.802380 | 1.172020 | ▂▁▅▇▇ |
numeric | A3 | 26 | 0.9907143 | 4.603821 | 1.301834 | ▂▂▅▇▆ |
numeric | A4 | 19 | 0.9932143 | 4.699748 | 1.479633 | ▂▁▃▅▇ |
numeric | A5 | 16 | 0.9942857 | 4.560345 | 1.258512 | ▂▂▅▇▆ |
numeric | C1 | 21 | 0.9925000 | 4.502339 | 1.241347 | ▂▂▅▇▅ |
numeric | C2 | 24 | 0.9914286 | 4.369957 | 1.318347 | ▃▂▆▇▅ |
numeric | C3 | 20 | 0.9928571 | 4.303957 | 1.288552 | ▃▂▆▇▅ |
numeric | C4 | 26 | 0.9907143 | 2.553353 | 1.375118 | ▇▂▂▁▁ |
numeric | C5 | 16 | 0.9942857 | 3.296695 | 1.628542 | ▇▂▅▃▂ |
さて, このデータに対してクロンバックのαを求めるにはalpha()関数を用いるのだが, データが逆転項目を含んでいるのでそれを処理しなければいけない。6件法なので6から項目を引くと出てくる。ここではのちの話の都合で欠損を含むデータを除外している。
# 逆転項目の処理して必要な項目だけ取り出す
new <- dat %>%
mutate(A1=6-A1, C4=6-C4, C5=6-C5) %>%
select(1:10) %>%
filter(!is.na(A1), !is.na(A2), !is.na(A3), !is.na(A4), !is.na(A5),
!is.na(C1), !is.na(C2), !is.na(C3), !is.na(C4), !is.na(C5))
逆転項目の処理が済んだところで, alpha()関数を使ってみる。
# クロンバックαを計算
res <- psych::alpha(new)
αの値が出てくるだけでなくて, 各項目をなくした際にαがどのように変化するかの値も出てくる。これらは尺度作成の際には役に立つだろう。
相関係数からクロンバックのαを求める
ところで岡田(2015)によれば, クロンバックのαは相関係数行列から求めることもできるようである。
https://www.jstage.jst.go.jp/article/arepj/54/0/54_71/_article/-char/ja/
相関係数行列からクロンバックのαは次の式で求められる。
$$ a = \frac{n\bar{r}}{1+(n-1) \bar{r}} \tag{2} $$
ここでnは項目数で, $\bar{r}$は項目間の相関係数の平均である。さきほどのデータを用いて, 同様の結果が得られるが試してみる。相関係数行列を求めて, 上記の式に当てはめてみる。
# 相関係数からα計算計算
cormtx <- cor(new[,1:10], use = "complete.obs")
rbar <- mean(cormtx[lower.tri(cormtx)])
n <- 10
alpha_computed_cormtx<- (n * rbar) / (1 + (n-1)*rbar)
# > alpha_computed_cormtx
# [1] 0.7397363
ここで得られた値は先ほどのalpha()関数の出力のstd.alphaという値と一致している。いつか使うかもしれないからこれを関数化しておくことにする。
# 相関係数行列からαを求める感数
alpha.cor <- function(x){
n <- ncol(x)
rbar <- mean(x[lower.tri(x)])
alpha <- (n * rbar) / (1 + (n-1)*rbar)
return(alpha)
}
#> alpha.cor(cormtx)
#[1] 0.7397363