信頼性係数
クロンバックのアルファ係数
テスト項目の因子負荷量がすべて同じであるという仮定を置かない信頼性係数オメガの算出プログラムを<係数オメガ>に用意した。項目ごとに真値の重みが異なるときはアルファ係数ではなくオメガ係数を用いるべきである。
信頼性係数アルファの問題点はOkamoto (2013) でも扱われている。
最近の知見を踏まえた信頼性係数の説明については
<岡本安晴「心理学データ分析と測定」勁草書房、第8章 心理学的特性を測る:心理尺度>を参照されたい。
信頼性係数としてクロンバックのα係数(アルファ係数)を求めるVisual C++プログラムを作成してみた。信頼性係数は、検査得点Xを真の値Tと誤差Eの和
(1)
として表したとき、次式
(2)
で定義される(岡本安晴「計量心理学」培風館)。
この信頼性係数の推定において、検査項目がM群の項目に分かれている場合に用いられているものとしてクロンバックのα係数がある。式(1)に示されるように、信頼性係数は、検査得点が真の値Tの1因子と誤差項によって構成されているというモデルに対して定義されているので、M群の項目が1因子で構成されていることを因子分析などによって確認しておく必要がある。
検査の第i群の項目得点を真値と誤差の和
で表す。このとき検査得点は次式で表される。
(3)
ここで、Xの真値、誤差である。
式(3)より、式(2)の推定値として導かれるものが次式
であり、クロンバックのα係数と呼ばれている。ここで、とはとの標本分散である。
実行形式のプログラムファイルCalcAlpha.exeはクロンバックのα係数を求めるものである。ファイル名CalcAlpha.exeをクリックしてダウンロード実行することができる。ただし、.NET Framework3.5対応である。プログラムのソースコードファイルなどは圧縮ファイルCalcAlpha.zipとしてまとめた。圧縮ファイル名CalcAlpha.zipをクリックしてダウンロードすることができる。ダウンロードした圧縮ファイルは、マウス右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したファイルはVisual C++2008などで開くことができる。
プログラムを実行すると図1のフォームが表示される。
図1
「Print Data」にチェックを入れておくと、読み込んだデータも出力ファイルに出力される。出力ファイルはテキストファイルなので、プログラムの実行終了後、エディタなどで開いて見ることができる。「GO」ボタンのクリックで、図2の入力データファイル名の設定を求めるダイアログ・ウィンドウが表示される。
図2
入力データのファイル名を設定して、「開く」ボタンをクリックすると、出力用ファイルの名前の設定を求めるダイアログ・ウィンドウが表示される(図3)。
図3
出力はテキストファイルとして書き出される。出力用テキストファイル名を設定して、「保存」ボタンをクリックすると計算が始まる。計算が終了すると、出力用ファイルの保存が行われたことを示すダイアログ・ウィンドウが表示される(図4)。
図4
「OK」ボタンをクリックすると、プログラムの実行が終了する。
図2で指定する入力用ファイルは以下の形式で用意する。
ファイルの先頭部分は、スラッシュ/(半角文字)で始まる行の次の行に項目数を書き、続く行にケースラベル/番号を表す変量のラベルを書いてから各変量のラベルを書く。
======================================================
/
10
ID Item-1 Item-2 Item-3 Item-4 Item-5 Item-6 Item-7 Item-8 Item-9 Item-10
/
1
1
1
1
1
1
1
1
1
1
/
1
79 46
68
65 89
38 58
70 49 65
2
48 71
61
50 43
27
48 54
34 61
3
38 42
38
45 55
43
47 39
65 54
4 45 51 30 71 63 45 62 58 34 51
・
・
・
47
27 32
56
39 43
55
51 28
61 50
48
36 46
49
54 31
75 43
40
30 49
49
44 24
56
51 58
34
42 52
67 48
50
71 75
64
84 58
25
67 65 47 56
/
=====================================================
2つ目のスラッシュ/で始まる行に続く行に、アルファ係数の算出に用いる変数の選択を示す値を並べる。値が1であればアルファ係数の算出に用いられ、1以外であればその変数は除かれる。上のファイル例の場合は、すべての変数がアルファ係数の算出に用いられる。
3つ目のスラッシュ/で始まる行の次の行から、1行に1人分のデータを書いていく。各行は、まずケースラベル/番号を表す文字列を書き、その後に各変数(項目)の値を書いていく。データの最後は、スラッシュ/で始まる行を置いてデータの終わりであることを示す。
上の入力データの場合の出力ファイルの内容は次のようになっている。
======================================================
Data File =
F:\yasuharu\www\LaCoocan\VCpp\reliability\CalcAlpha\CalcAlpha\Data10.txt
Variable Labels...
Item-1(1)
Item-2(1)
Item-3(1)
Item-4(1)
Item-5(1)
Item-6(1)
Item-7(1)
Item-8(1)
Item-9(1)
Item-10(1)
NVars = 10 NCases = 50
Vars Slected...
Item-1
Item-2
Item-3 Item-4 Item-5 Item-6 Item-7 Item-8 Item-9 Item-10
Alpha = 0.87874
======================================================
アルファ係数の値は、
である。
上のデータに対して、因子数を1として因子分析を行うと次のような結果を得る。
===================
因子パターン
Factor-1
Item-1 0.82047
Item-2 0.84716
Item-3 0.78601
Item-4 0.85658
Item-5 0.83633
Item-6 -0.13083
Item-7 0.83335
Item-8 0.87830
Item-9 0.12270
Item-10 0.86449
===================
Item-6とItem-9をアルファ係数の算出から除くため、上の入力用ファイルを以下のように変更する。
======================================================
/
10
ID Item-1 Item-2 Item-3 Item-4 Item-5 Item-6 Item-7 Item-8 Item-9 Item-10
/
1
1
1
1 1
0 1
1
0
1
/
1
79 46
68
65 89
38
58 70
49 65
2
48 71
61
50 43
27
48 54
34 61
3 38 42 38 45 55 43 47 39 65 54
・
・
・
======================================================
すなわち、Item-6とItem-9に対する値を1から0に変更する。このデータを入力ファイルとしてアルファ係数を求めると、以下の出力ファイルを得る。
===================================================
Data File =
F:\yasuharu\www\LaCoocan\VCpp\reliability\CalcAlpha\CalcAlpha\Data10Sel.txt
Variable Labels...
Item-1(1)
Item-2(1)
Item-3(1)
Item-4(1)
Item-5(1) Item-6(0) Item-7(1) Item-8(1) Item-9(0) Item-10(1)
NVars = 10 NCases = 50
Vars Slected...
Item-1
Item-2
Item-3 Item-4 Item-5 Item-7 Item-8 Item-10
Alpha = 0.93991
====================================================
変数ラベルの右側に変数選択の値が( )で挟んで示されている。1以外であればアルファ係数の算出から除かれている。Item-6とItem-9を除いたときのアルファ係数は
となっている。
プログラムにおけるアルファ係数の計算を行うコードは以下のようになっている。
=====================================
double sX
= 0.0, ssX = 0.0;
double *
sXi, * ssXi;
sXi = new
double[M];
ssXi = new
double[M];
for (int i = 0; i < M; i++){
sXi[i]
= ssXi[i] = 0.0;
}
for (int i = 0; i < NCases; i++){
double v = 0.0;
for (int j = 0; j
< M; j++){
v
+= data[j][i];
sXi[j]
+= data[j][i];
ssXi[j]
+= sqr(data[j][i]);
}
sX
+= v;
ssX
+= sqr(v);
}
double
sX2 = (ssX - sqr(sX) / NCases) / (NCases - 1.0);
double *
si2;
si2 = new
double[M];
for (int i = 0; i < M; i++)
si2[i] = (ssXi[i] - sqr(sXi[i]) / NCases)
/ (NCases - 1.0);
double
sum_si2 = 0.0;
for (int i = 0; i < M; i++)
sum_si2 += si2[i];
double a
= (1.0 - sum_si2 / sX2) * M / (M - 1.0);
fout->WriteLine();
fout->WriteLine("Alpha = " + a.ToString("F5"));
========================================
なお、Visual C++プログラミング入門書として<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を用意した。