Up

信頼性係数オメガωとアルファα

 

信頼性係数ωを次式(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)

 

プログラム全体は、このウェブサイトの後半にリストとして示した。プログラムファイルなどは、圧縮ファイル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))

 

 

Up