信頼性係数オメガωとアルファα
信頼性係数ωを次式(8.2.17)のモデル
の下で、次式(8.2.20)により求める。
式番号は<岡本安晴「心理学データ分析と測定」勁草書房>におけるものである。式(8.2.20)におけるは、上掲書p.124に説明されているアルゴリズムで求める。スクリプトは以下のようである。
psy2 = np.zeros((M))
while True:
C = S - np.diag(psy2)
w, v = np.linalg.eigh(C)
A = (w[M-1] ** 0.5) * v[:,
M-1]
t_psy2 = np.diag(S) - A**2
if (np.abs(psy2 -
t_psy2)).sum() < 1.0e-7:
break
psy2 = t_psy2
上のアルゴリズムで求められたpsy2からが次のスクリプトにより求められる(上掲書p. 123参照)。
Lmd = (np.diag(S) - psy2) ** 0.5
アルファ係数αは、次式(8.2.33)
により求められる。スクリプトは以下のようである。
alpha_coef =
(M/(M-1)) * (1 - (np.diag(S).sum() / VarX))
標準化アルファ係数(standardized alpha)あるいは一般化されたスピアマンーブラウンの公式(generalized Spearman-Brown formula)は、次式
で求められるが、スクリプトは以下のようにした。
std_alpha = M
* r_bar / (1.0 + (M - 1) * r_bar)
プログラム全体は、このウェブサイトの後半にリスト1として示した。プログラムファイルなどは、圧縮ファイルfiles8_cont.zipとしたので、ダウンロード・解凍すれば自由に利用できる。
リスト1のプログラムを実行すると、まず入力データファイル名の設定が求められる(図1)。
図1
データは、図2の形式のExcelファイルとして用意する。
・
・
・
図2
第1行目に変数名を描く。第1列目はデータの識別用で、通し番号あるいは文字列など、何でもよい。第2列目から各項目の値を書く。各行が一つのケースデータを表す。
図1のようにファイル名を設定してEnterキーを押すと、以下のスクリプトでデータの読み込みが行われる。
flnm = input('Data File Name (*.xlsx)
= ')
xlsx = pd.ExcelFile(flnm)
# 入力ファイル名の設定
data = pd.read_excel(xlsx)
# 読み込み
VarLabels = data.columns[1:].values;
print(VarLabels)
X = data.values[:, 1:]
N = len(X)
M = len(X[0])
その後、計算が行われ、信頼性係数などが図3のように出力される。
図3
リスト1 信頼性係数算出Pythonスクリプト。スクリプトファイルなどは圧縮ファイルとしたので、ダウンロード・解凍すれば自由に利用できる。。
import pandas as pd
import numpy as np
flnm = input('Data File Name (*.xlsx)
= ')
xlsx = pd.ExcelFile(flnm)
# 入力ファイル名の設定
data = pd.read_excel(xlsx)
# 読み込み
VarLabels = data.columns[1:].values;
print(VarLabels)
X = data.values[:, 1:]
N = len(X)
M = len(X[0])
S = np.cov(X, rowvar = False)
psy2 = np.zeros((M))
while True:
C = S - np.diag(psy2)
w, v = np.linalg.eigh(C)
A = (w[M-1] ** 0.5) * v[:,
M-1]
t_psy2 = np.diag(S) - A**2
if (np.abs(psy2 -
t_psy2)).sum() < 1.0e-7:
break
psy2 = t_psy2
Lmd = (np.diag(S) - psy2) ** 0.5
print()
for i in range(M):
print(VarLabels[i])
print(' lambda[{0:}] =
{1:.5}'.format(i+1, Lmd[i]))
sum_L_2 = (Lmd.sum()) ** 2
VarX = np.var(X.sum(axis = 1))
omega = sum_L_2 / VarX
print('\nomega =
{0:.5}'.format(omega))
alpha_coef = (M/(M-1)) * (1 -
(np.diag(S).sum() / VarX))
print('\nalpha =
{0:.5}'.format(alpha_coef))
Cor = np.corrcoef(X, rowvar = False)
r_bar = (Cor.sum() -
np.diag(Cor).sum()) / (M * (M - 1))
std_alpha = M * r_bar / (1.0 + (M - 1)
* r_bar)
print('standardized alpha =
{0:.5}'.format(std_alpha))