相関係数行列からクロンバックのαを求める

尺度の作成論文などでは信頼性係数が報告される。信頼性係数には様々な種類があるが, その中でもっともよく使われるのがクロンバックのαである。クロンバックのαは次の計算式で求められる。

$$ 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でクロンバックのαを求めるためには複数のやり方がある。

http://www.okadajp.org/RWiki/?%CE%B1%E4%BF%82%E6%95%B0%EF%BC%8C%E4%BF%A1%E9%A0%BC%E6%80%A7%E4%BF%82%E6%95%B0%E3%81%AE%E7%AE%97%E5%87%BA

とりあえずここでは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)

cronbach1

αの値が出てくるだけでなくて, 各項目をなくした際にαがどのように変化するかの値も出てくる。これらは尺度作成の際には役に立つだろう。

相関係数からクロンバックのαを求める

ところで岡田(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