統計学的信頼性と心理学的信頼性
議論とプログラム
岡本安晴, 2018、2022
議論
カテゴリ項目を用いる心理尺度においては、統計学的信頼性と心理学的信頼性を区別する必要がある。統計学的信頼性は、連続量の項目に対する統計学的モデルを形式的にカテゴリ項目に適用したモデルに基づくと理解されるもので、心理学的モデル(サーストンのカテゴリ判断の法則/モデル)に基づく心理学的信頼性より大きい推定値になる傾向がある(Okamoto, 2016, 2017)。
統計学的信頼性は、以下のように連続量項目のモデルと統計学的形式において同じである。
人のカテゴリ項目の回答カテゴリ値をで表し、真値と誤差の和
に分解する。カテゴリ変数の真値を統計学的にの平均値として定義する。すなわち
である。式(1)と式(2)により、項目がカテゴリ変数の場合も連続変数の場合と同じように扱うことができる。しかし、カテゴリ変数の場合は、その値は整数値であり、真値も整数値であると考える方が自然であるが、式(2)で与えられる真値は整数値とは限らない。真値を平均値(2)で与えるのは、統計学的便法である。ポピュラーな信頼性係数であるクロンバックのアルファ係数は、カテゴリ項目からなる尺度の場合、モデル(1)と(2)に基づく統計学的信頼性係数であると理解される。α係数は、次に説明する心理学的信頼性係数より大きい値をとる傾向がある(Okamoto, 2016, 2017)。
カテゴリ変数の真値は、量子力学の考え方を参考にすれば、確率分布して考えることができる。量子力学では、離散状態の確率分布が想定される。心理尺度においても、反応カテゴリの確率分布を「真値」と考えればよい。取り得る値がカテゴリ値で、真値がその平均値としてのカテゴリ値以外の値というのは矛盾した考え方である。しかし、カテゴリ変数の背後にそのカテゴリ変量が表している心理学的構成概念を想定すれば、カテゴリ変量の分布を連続変量のモデルで表すことができる。カテゴリ項目の因子分析をpolychoric/tetracholic 相関係数によって行うときは、カテゴリ変数の背後に連続量の潜在変数が仮定されている。
統計学的信頼性を用いる立場の人は式(2)で与えられる平均値を真値と定義し、カテゴリ変量の背後に設定した心理学的概念の値を真値する立場をPlatonicとして否定しているようであるが、科学哲学者には逆の考え方をする研究者もいる。
Godfrey-Smith (2021) は以下のように書いている。
I think that scientific theories, when things go well, can in principle and often do in fact tell us about how the world works and what it contains, including some of its deeply hidden structure. (p. 236)
彼はさらに
I think that phenomenal-realism, metaphysical constructivism, and other standard views that oppose realism are false.(ibid. p.236)
と書いている。
Godfrey-Smith (2021) の考え方に立てば、統計学的信頼性は誤りであり、心理学的信頼性が正しいと言えよう。
心理学的信頼性は心理学的概念の真値とその測定値との関係の強さを表すものである。心理学的概念の強さとカテゴリ項目のカテゴリ値との関係をサーストンのカテゴリ判断の法則に基づいてモデル構成する。このモデルは、項目反応理論(item response theory, IRT)ではSamejimaのモデルとして知られている。
人のカテゴリ値をとる項目への回答をとする。この回答は、項目への連続変量で表される潜在反応のカテゴリ化によって生成される。潜在変量である反応は、1因子モデルで表される場合を考えると、次式(3)で表される(Okamoto, 2017)。
ここで、は測定対象である心理学的概念の人の値であり、項目のがを因子とする因子モデルとして設定されている。誤差項は他の変数と独立であり、正規分布に従うとする。この潜在変量に対して項目のカテゴリ反応が次式(4)により与えられる。
ここで、はカテゴリ境界である。
人の尺度値が次式(5)のカテゴリ値の和で与えられるとする。
このとき、測定値と真値との関係を次の回帰モデルで表す。
または、
測定値と真値との関係の強さは、回帰モデル(6)あるいは(7)の決定係数で与えることができる。決定係数の値は式(6)あるいは(7)で同じ値であり、測定値と真値との相関係数の2乗で与えられ、 (Okamoto, 2016)あるいは(Okamoto, 2017)で表すと
となる。
上式で与えられる信頼性係数あるいはは、測定値と測定対象である心理学的概念の真値との関係の強さを表すもので、心理学的信頼性係数といえる。これに対して、統計学的信頼性係数と考えられるα係数は、このより大きい値となる傾向がある(Okamoto, 2016, 2017)。実証科学としての心理学研究においては、心理学的信頼性係数を求めておくべきである。算出のためのプログラム例は、このウェブサイトの後半で説明している。
式(8)の計算式はOkamoto (2017)で与えられているが、やや複雑である。しかし、次式(9)を用いる方法は、次に示すように式(9)が間違っているので使えないことに注意。
ここで、は、条件の下でのとの共分散を表し、はの確率密度関数である。
式(9)が成り立たない例
2つの確率変数とを次のようにおく。
確率変数との平均値をとで表すと、
である。
次式
より、
をとなる。
また、
であるので、次式(10)を得る。
いま、確率変数との条件での確率変数をとで表し、それらの平均値をとで表すと、
を得る。ここで、は、条件の下での期待値を表す。
これより、
である。ここで、は標準正規分布の確率密度関数である。
式(10) と式(11)より、式(9)が成り立たないことがわかる。
心理学的信頼性係数を求めるPythonスクリプトを用意した。モデル(3)および(4)よりカテゴリ反応の確率は次式で与えられる。
式(12)より、パラメータの原点と単位が任意であることがわかる。パラメータ値の推定のために何らかの制約条件が必要である(Okamoto, 2017)。項目のカテゴリ数によって制約条件が異なるので、次の3条件にわけてモデルのパラメータ値推測のためのStanスクリプトが用意された。
(A)項目のカテゴリ数が4個以上の場合。(B)項目のカテゴリ数が3個の場合。(C)項目のカテゴリ数が2個の場合(2値項目)。
パラメータ推定のStanスクリプトは、基本的に項目反応理論(Item Response Theory: IRT)におけるものと同じである。従って、本ウェブサイトにおける方法は項目反応和理論(Sum of Item Responses Theory: SIRT)と呼ぶことが可能であり、項目反応理論における研究成果を項目和を測定値とする方法に活用する可能性が示唆される。
Stanスクリプトにより求められた項目のパラメタ値に基づいて心理学的信頼性係数が算出される。プログラム(スクリプト)ファイルおよびサンプルデータファイルを圧縮ファイルとして本ウェブサイトに用意しているので、本ウェブサイトの該当箇所からダウンロードして利用することができる。プログラムの使い方はpdfファイルと本ウェブサイトに用意しているので、これも本ウェブサイトの該当箇所からダウンロードして参照されたい。
なお、Pythonのインストールおよび使用法の簡単な説明のウェブサイトを用意している。
原点と単位を設定するために次の制約条件を設定する(Okamoto, 2017)。
式(13)に対応するStanスクリプトをリスト1に示す。StanスクリプトおよびPythonスクリプトとサンプルデータファイルを圧縮ファイルにまとめた。ダウンロードして利用することができる。プログラムの使用法は、pdfファイルとして用意した。ダウンロードして参照されたい。
なお、入力データファイルとしてCSVファイルにも対応したものも本ウェブサイト後半に用意した。
プログラムMain.pyを走らせると図1のようになる。まず、入力データファイル名が聞かれる。続いて、出力ファイル名の入力が求められる。出力ファイル名は任意のテキストファイル名であるが、既存のものと同じ場合は、上書きされる。
図1
出力ファイル名の入力後、Stanスクリプトが実行され、項目パラメータの事後分布からのサンプリングが行われる。事後分布からのサンプリングの中央値をパラメータの点推定値として信頼性係数が算出され、Est_Rho_cat by Medsの値として表示される(図2)。
図2
信頼性係数の表示後、信頼性係数の事後分布を求めるかどうかが聞かれる。
文字NをタイプしてEnterキーを押すと、プログラムは実行終了となる。
文字YをタイプしてEnterキーを押すと、信頼性係数のサンプリングが始まる。サンプル数は100個で、これを4グループに分けて、それぞれがプロセスを呼び出して並行処理される(図3)。
図3
サンプリング後、サンプルされた信頼性係数のヒストグラムが表示される(図4)。
図4
図4のウィンドウを閉じると、プログラムの実行終了となる。
プログラムの実行終了後、出力ファイルを適当なテキストエディタで開くと、図5から図8に示す内容が出力されていることがわかる。出力内容の説明は、プログラムの使用法を記したpdfファイルを参照されたい。
図5
.
.
.
図6
.
.
.
図7
.
.
.
図8
リスト 1. カテゴリ数が4個以上の場合のStanスクリプト
// Yasuharu
Okamoto, 2017.07
data {
int <lower = 4>
K; // Number of
categories > 3
int Npsn;
//
Number of persons
int Nitm;
//
Number of items
int Ntot;
// Number of data, Ntot <= Nprn * Nitm
int<lower = 1, upper =
Npsn> IDpsn[Ntot]; // Person ID
int<lower = 1, upper =
Nitm> IDitm[Ntot]; // Item ID
int<lower = 1, upper =
K> Res[Ntot];
//
Response-> An integer value between 1 and K
}
parameters {
real<lower = 0.0> Lambda[Nitm];
real
mu[Nitm];
simplex[K - 2] w_c;
real<lower = 0.0> psi[Nitm];
real
F[Npsn];
}
transformed parameters
{
vector[K] p[Ntot];
real C[K - 1];
C[1] = -1.0;
for (k in 2:(K - 1)){
C[k]
= C[k - 1] + w_c[k - 1] * 2.0;
}
for (i in 1:Ntot){
p[i][K] = Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[K -
1]) /
psi[IDitm[i]]);
p[i][1] =1.0 - Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) -
C[1]) /
psi[IDitm[i]]);
for
(k in 2:(K - 1)){
p[i][k] = Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[k -
1]) /
psi[IDitm[i]])
- Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[k]) /
psi[IDitm[i]]);
}
}
}
model {
for (i in 1:Npsn)
F[i]
~ normal(0.0, 1.0);
for (i in 1:Ntot)
Res[i] ~ categorical(p[i]);
}
カテゴリ数が3の場合は、カテゴリ境界はとの2つだけである。これらの2つのカテゴリ境界の間に他のカテゴリ境界がないという以外は(A)のカテゴリ数が4以上の場合と同様である。Stanスクリプトをリスト2に示した。Stanスクリプトを含むプログラム全体のファイルをサンプルデータファイルとともに圧縮ファイルとして用意した。ダウンロードして利用されたい。プログラムの使用法はpdfファイルとして用意したので、ダウンロードして参照されたい。
なお、入力データファイルとしてCSVファイルにも対応したものも本ウェブサイト後半に用意した。
プログラムの使い方は、上で説明した4カテゴリー以上の場合と同様である。PythonスクリプトMainThreeCat.pyの実行でプログラムは始まる(図9)。
図9
Listing 2. カテゴリ数が3個の場合のStanスクリプト。
// Yasuharu
Okamoto, 2017.07
data {
int <lower = 3, upper =
3> K;
//
Number of categories = 3
int Npsn;
//
Number of persons
int Nitm;
//
Number of items
int Ntot;
//
Number of data, Ntot <=
Nprn * Nitm
int<lower = 1, upper =
Npsn> IDpsn[Ntot]; // Person ID
int<lower = 1, upper =
Nitm> IDitm[Ntot]; // Item ID
int<lower = 1, upper =
K> Res[Ntot];
//
Response-> An integer value between 1 and K
}
parameters {
real<lower = 0.0> Lambda[Nitm];
real
mu[Nitm];
real<lower = 0.0> psi[Nitm];
real
F[Npsn];
}
transformed parameters
{
vector[K] p[Ntot];
real C[K - 1];
C[1] = -1.0;
C[2] = 1.0;
for (i in 1:Ntot){
p[i][K]
= Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[K - 1]) /
psi[IDitm[i]]);
p[i][1] =1.0 - Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) -
C[1]) /
psi[IDitm[i]]);
for (k in 2:(K - 1)){
p[i][k] = Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[k -
1]) /
psi[IDitm[i]])
- Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[k]) /
psi[IDitm[i]]);
}
}
}
model {
for (i in 1:Npsn)
F[i]
~ normal(0.0, 1.0);
for (i in 1:Ntot)
Res[i] ~ categorical(p[i]);
}
カテゴリ数が2個(2値項目)の場合の制約条件は、原点については次式(14)で設定される(Okamoto, 2017)。
制約条件(14)の下で次式(15)が成り立つ。
ここで、
とおいた。
式(15)は、原点に関す制約条件(14)のもとで、単位に関する制約条件を
と設定することができることを示している(Okamoto, 2017)。
カテゴリ数が2個の場合のStanスクリプトをリスト3に示す。プログラム全体のファイルはサンプルデータファイルとともに圧縮ファイルにまとめた。ダウンロードして解凍すれば利用できる。プログラムの使用法はpdfファイルとして用意した。ダウンロードして参照されたい。
なお、入力データファイルとしてCSVファイルにも対応したものも本ウェブサイト後半に用意した。
PythonスクリプトMainTwoCat.pyを実行すると図10のようになる。プログラムの利用法は、上で説明したカテゴリ数が4個以上の場合とおなじである。
図10
// Yasuharu
Okamoto, 2017.07
data {
int <lower = 2, upper =
2> K;
//
Number of categories = 2
int Npsn;
// Number of
persons
int Nitm;
//
Number of items
int Ntot;
//
Number of data, Ntot <=
Nprn * Nitm
int<lower = 1, upper =
Npsn> IDpsn[Ntot]; // Person ID
int<lower = 1, upper =
Nitm> IDitm[Ntot]; // Item ID
int<lower = 1, upper =
K> Res[Ntot];
//
Response-> An integer value between 1 and K
}
parameters {
real<lower = 0.0> Lambda[Nitm];
real
mu[Nitm];
real
F[Npsn];
}
transformed parameters
{
vector[K] p[Ntot];
real C[K - 1];
real psi[Nitm];
C[1] = 0.0;
for (j in 1:Nitm){
psi[j] = 1.0;
}
for (i in 1:Ntot){
p[i][K]
= Phi(((mu[IDitm[i]] + (Lambda[IDitm[i]] * F[IDpsn[i]])) - C[K - 1]) /
psi[IDitm[i]]);
p[i][1] =1.0 - p[i][K];
}
}
model {
for (i in 1:Npsn)
F[i]
~ normal(0.0, 1.0);
for (i in 1:Ntot)
Res[i] ~ categorical(p[i]);
}
カテゴリ数が4以上の場合
Pythonスクリプトなどは圧縮ファイルMoreThan3Cat_csv.zipにまとめた。ダウンロード解凍して、メインスクリプトMainCSV.pyを実行すればよい。使い方は、上で説明したテキストファイル入力の場合と同じなので、そこの説明ファイルHowToUseMoreThan3Cat.pdfを参照されたい。
入力用CSVファイルは、図CSV.1に示す形式で作成する。
図CSV.1
1行目が変数名である。1番目の変数は、ケースID用変数であり、値は文字列として扱われる。
2行目が、分析用変数の選択を示す数値である。値が1のものが分析対象となる。ケースID用変数にはー1が設定されているが、これは1以外の値であればよい。
3行目から、項目に対するカテゴリ値である。カテゴリ数がKのときは、1からKまでの整数値である。
図CSV.1の形式で用意したデータを、CSV(カンマ区切り)ファイルとして保存すればよい。
CSVファイルの作成後、スクリプトMainCSV.pyを実行する。入力ファイル形式の選択が求められるので、CSVファイルのときは2を入力する(図CSV.1)。
図CSV.2
入力ファイル名の設定後、カテゴリ項目のカテゴリ数の設定がもとめられる。図CSV.2の例では、5を設定している。
カテゴリ数の設定後、確認が求められるので、Yを入力すれば、次に進み、出力用テキストファイル名の設定が求められる。
出力用テキストファイル名の設定後、計算が始まり、以後は上のテキストファイルを入力データとする場合と同様である。
カテゴリ数が3の場合
Pythonスクリプトなどは圧縮ファイルThreeCat_csv.zipにまとめた。ダウンロード解凍して、メインスクリプトMainThreeCatCSV.pyを実行すればよい。使い方は、上で説明したテキストファイル入力の場合と同じなので、そこの説明ファイルHowToUse3Cat.pdfを参照されたい。
入力用CSVファイルは、図CSV.3に示す形式で作成する。
図CSV.3
1行目が変数名である。1番目の変数は、ケースID用変数であり、値は文字列として扱われる。
2行目が、分析用変数の選択を示す数値である。値が1のものが分析対象となる。ケースID用変数にはー1が設定されているが、これは1以外の値であればよい。
3行目から、項目に対するカテゴリ値である。カテゴリ数が3であるので、1から3までの整数値である。
図CSV.3の形式で用意したデータを、CSV(カンマ区切り)ファイルとして保存すればよい。
CSVファイルの作成後、スクリプトMainThreeCatCSV.pyを実行する。入力ファイル形式の選択が求められるので、CSVファイルのときは2を入力する(図CSV.4)。
図CSV.4
カテゴリ数の確認が求められるので、3であることを確認して、Yを入力すれば、次に進み、出力用テキストファイル名の設定が求められる。
出力用テキストファイル名の設定後、計算が始まり、以後は上のテキストファイルを入力データとする場合と同様である。
カテゴリ数が2の場合
Pythonスクリプトなどは圧縮ファイルTwoCat_csv.zipにまとめた。ダウンロード解凍して、メインスクリプトMainTwoCatCSV.pyを実行すればよい。使い方は、上で説明したテキストファイル入力の場合と同じなので、そこの説明ファイルHowToUse2Cat.pdfを参照されたい。
入力用CSVファイルは、図CSV.5に示す形式で作成する。
図CSV.5
1行目が変数名である。1番目の変数は、ケースID用変数であり、値は文字列として扱われる。
2行目が、分析用変数の選択を示す数値である。値が1のものが分析対象となる。ケースID用変数にはー1が設定されているが、これは1以外の値であればよい。
3行目から、項目に対するカテゴリ値である。カテゴリ数が2であるので、1または2の整数値である。
図CSV.5の形式で用意したデータを、CSV(カンマ区切り)ファイルとして保存すればよい。
CSVファイルの作成後、スクリプトMainTwoCatCSV.pyを実行する。入力ファイル形式の選択が求められるので、CSVファイルのときは2を入力する(図CSV.6)。
図CSV.6
カテゴリ数の確認が求められるので、2であることを確認して、Yを入力すれば、次に進み、出力用テキストファイル名の設定が求められる。
出力用テキストファイル名の設定後、計算が始まり、以後は上のテキストファイルを入力データとする場合と同様である。
Godfrey-Smith, P. (2021). Theory and reality: An introduction to the philosophy of science, second edition. The University of Chicago Press.
なお、古典テスト理論における信頼性係数については、<岡本安晴「心理学データ分析と測定」勁草書房、第8章 心理学的特性を測る:心理尺度>で扱っている。