Follow @data_no_memo

メモ

個人的なメモです。他者にわかりやすく書くよりも未来の自分にわかりやすく書いています。なお、記事内容の正確さは保証できません。勉強中の身ですので、間違い等ご指摘頂けたら幸いです。

クロンバックのα係数

何らかの質問項目によって、測定された変数がどれだけ、本当に測りたいそれを測れているのかを示す指標として、しばしばクロンバックのα係数が使用される。なお、クロンバックのα係数は信頼性係数の指標の1つである。

 

 

クロンバックのα係数を考えるために、ここでは、まずある質問項目によって測定された変数xには、本当に測定したい変数(以下では、真値と呼びtと表現する)と誤差(以下では、eと表現する)が含まれていると考える。すなわち、以下のように表現できる。

 

 

 

ただし、tとeの共分散は0と仮定される。このように仮定を置く事で、xの分散はtの分散とeの分散の和で表現できる。この時、xの分散がtの分散でどれだけ説明できるかが信頼性係数の指標(以下、ρとする)となる。回帰分析の時のR^2値と同じ要領。

ただし、tの分散なんて誰にもわからないから、何らかの仮定を置きつつ、工夫する事で手元にあるデータからρを求める努力をする。

 

その一つが強平行測定を仮定した折半法である。ここでは、測定したい変数tを測定するためにn個の質問項目を用意したとする。

そのn個の質問項目を適当に2つに分ける(以下、n1とn2とする)。この時、n1とn2は強平行測定であることを仮定すると、上記のρは以下のように測定できる(=スピアマン=ブラウンの公式)。

 

 

ただし、これはどのように質問項目を2つに分けるかによって、変化する可能性がある。よって、全ての組み合わせの平均値を新しい指標としたのがクロンバックのα係数。それは以下のように表現できる。

 

 

 

なお、ここでkは項目数、s^2は各項目における分散、S^2は各項目を合計した時の分散である。

 

それでは実際に、全ての組み合わせの折半法におけるρがクロンバックのα係数と一致するのか調べてみよう。

 

手順は以下の通り。

 

①その正負に関わらず、2つの数値の差を返す関数を作成

②6つの乱数をそれぞれ1000個ずつ標準正規分布から発生させる(x1, x2, x3, x4, x5, x6)

③x1~x6を2つに分ける全てのパターン(10通り)においてスピアマン=ブラウンの公式で信頼性係数を求めて、その平均値を求める(pとする)。

④x1~x6でクロンバックのα係数を求める(aとする)。

⑤aとpの差を①の関数で求める

 

以上の②~⑤の手順を1000回繰り返し、どれくらいの差が出てくるのかを調べた。

その結果、その差の平均値は1.891の10の-5乗となった。最大でも1.369の10の-4乗であった。ほとんど0と言って良い。

ここから、今回の条件のもとでは、全ての組み合わせの折半法におけるρがクロンバックのα係数と一致すると言って良いだろう。

 

コードは以下の通り。 

 


#関数の作成
difference<-function(x,y){
	if(x<=0&y<=0){
		a<-x-y
		a<-abs(a)
	}
	if(x>0&y>0){
		a<-x-y
		a<-abs(a)
	}
	if(x<=0&y>0){
		a<-y-x
	}
	if(x>0&y<=0){
		a<-x-y
	}
	print(a)
}

N<-1000 #試行回数
n<-1000 #サンプルサイズ

x<-matrix(nrow=n,ncol=6) #収納
xi<-matrix(nrow=n,ncol=10) #収納
xj<-matrix(nrow=n,ncol=10) #収納
rec<-numeric(N) #収納
p<-numeric(10) #収納
 
for(i in 1:N){
 
#6つの乱数を発生
  for(j in 1:6){
 		x[,j]<-rnorm(n)
 		} 	
 		
#10通りの分け方
xi[,1]<-x[,1]+x[,2]+x[,3]
xj[,1]<-x[,4]+x[,5]+x[,6]

xi[,2]<-x[,1]+x[,2]+x[,4]
xj[,2]<-x[,3]+x[,5]+x[,6]

xi[,3]<-x[,1]+x[,2]+x[,5]
xj[,3]<-x[,3]+x[,4]+x[,6]

xi[,4]<-x[,1]+x[,2]+x[,6]
xj[,4]<-x[,3]+x[,4]+x[,5]

xi[,5]<-x[,1]+x[,3]+x[,4]
xj[,5]<-x[,2]+x[,5]+x[,6]

xi[,6]<-x[,1]+x[,3]+x[,5]
xj[,6]<-x[,2]+x[,4]+x[,6]

xi[,7]<-x[,1]+x[,3]+x[,6]
xj[,7]<-x[,2]+x[,4]+x[,5]

xi[,8]<-x[,1]+x[,4]+x[,5]
xj[,8]<-x[,2]+x[,3]+x[,6]

xi[,9]<-x[,1]+x[,4]+x[,6]
xj[,9]<-x[,2]+x[,3]+x[,5]

xi[,10]<-x[,1]+x[,5]+x[,6]
xj[,10]<-x[,2]+x[,3]+x[,4]

#折半法における信頼性係数の計算(10通り)
for(k in 1:10){
	p[k]<-(2*cor(xi[,k],xj[,k]))/(1+cor(xi[,k],xj[,k]))
}
p<-mean(p[1:10]) #10通りの平均値


#各xの不偏分散を標本分散に変換
for(w in 1:6){ 
	s[w]<-((n-1)/n)*var(x[,w])
}

s<-c(s[1],s[2],s[3],s[4],s[5],s[6])
X<-x[,1]+x[,2]+x[,3]+x[,4]+x[,5]+x[,6]

#全てのxを足し合わせたものの不偏分散を標本分散に変換
S<-((n-1)/n)*var(X)

k<-6 #項目数
a<-(k/(k-1))*(1-(sum(s)/S)) #クロンバックのα係数

rec[i]<-difference(p,a)
}

summary(rec)