Up

順序カテゴリ評定尺度

岡本安晴

PyStan 3 対応のスクリプトをこのウェブサイトに用意しました。

 

刺激の感覚の強さを順序カテゴリで答えたデータに基づく尺度構成を、Thurstone1927の判断の基本モデルを適用したカテゴリ判断の法則(The law of categorical judgment; Torgerson, 1958, p. 205)を用いてベイズ分析により行う。サーストンモデルを用いて以下のように確率モデルを構成する。

提示された刺激の感覚の強さをK個のカテゴリから選んで答えるものとする。刺激の引き起こす感覚量を確率変数で表し、平均、標準偏差の正規分布に従うものとする。すなわち、

である。

感覚量の連続体上におけるK個のカテゴリの境界をで、評価カテゴリをで表すとき、

 のとき 

とする。ただし、

である。

このとき、刺激の感覚がカテゴリであると判断される確率は、

である。ここで、は累積標準正規分布関数である。

感覚連続体の原点と単位を決めるために、カテゴリ境界の両端を0と1に設定する。

、 

感覚の強さの範囲(ダイナミックレンジ)が刺激の種類に依らずほぼ同じであるという仮定(Teghtsoonian, 1971)に従えば、この制約条件は自然なものである。

感覚の標準偏差については、以下の制約を置く。

これは、Stevens1975, p. 235Ekmanの法則と呼んでいるものを踏まえたものである。

上式において、のとき、

となる。これは、Fechnerの考え方に対応するものである。

 

ベイズ分析を行うためのStanスクリプトをリスト1のように用意した。

リスト1 順序カテゴリ尺度構成Stanスクリプト例(RatingEkman.stan

data {

    int NSt;

    int K;

    real Sts[NSt];

    int Rs[NSt, K];

}

transformed data {

    vector[NSt+1] a_Psis;

    vector[K-2] a_C;

   

    for (i in 1:(NSt+1)) {

        a_Psis[i] = 1.0;

    }

    for (i in 1:(K-2)) {

        a_C[i] = 1.0;

    }

}

parameters {

    simplex[NSt+1] prePsis;

    simplex[K-2] preC;

    real<lower = 0.0> a;

    real<lower = 0.0> b;

}

transformed parameters {

    real Psis[NSt];

    real sgms[NSt];

    real C[K-1];

    simplex[K] theta[NSt];

    real v;

 

    v = 0.0;

    for (s in 1:NSt) {

        v = v + prePsis[s];

        Psis[s] = logit(v);

    }

   

    for (s in 1:NSt) {

        sgms[s] = a + b * (Psis[s] - Psis[1]);

    }

    C[1] = 0.0;

    C[K-1] = 1.0;

    v = 0.0;

    for (k in 2:(K-2)) {

        v = v + preC[k-1];

        C[k] = C[1] + v;

    }

    for (s in 1:NSt) {

        theta[s][1] = normal_cdf(C[1], Psis[s], sgms[s]);

        theta[s][K] = 1.0 - normal_cdf(C[K-1], Psis[s], sgms[s]);

        for (k in 2:(K-1)) {

            theta[s][k] = normal_cdf(C[k], Psis[s], sgms[s]) -

                            normal_cdf(C[k-1], Psis[s], sgms[s]);

        }

    }

}

model {

    prePsis ~ dirichlet(a_Psis);

    preC ~ dirichlet(a_C);

    a ~ exponential(0.001);

    b ~ exponential(0.001);

    for (s in 1:NSt) {

        Rs[s] ~ multinomial(theta[s]);

    }

}

 

リスト1のStanスクリプトを用いてデータを分析するPythonスクリプトMainCatScal.pyを作成した。サンプルデータファイルなどとともに圧縮ファイルcatscalfiles.zipにまとめたので、ダウンロード展開して自由に利用されたい、PythonでのStanPyStan)の利用については、岡本(2019などを参照されたい。

以下の実行例は、Windows 10でのAnacondaの仮想環境におけるものである。Python 3.7の仮想環境にpystan 2.17.1.0をインストールして実行したものである(2022.06.22)。

スクリプトMainCatScal.pyを実行すると、入力データファイル名と出力データファイル名の設定が求められる。

 

(py37) PS D:\catscalfiles> python MainCatScal.py

Input file (*.xlsx) = Data.xlsx

Output file (*.txt) = Results.txt

 

入力データファイルはExcelファイルの形式で用意する(図1)。

図1

 

第1行目は、変数名である。2行目からデータを、1列目に提示刺激、2列目に各評価カテゴリの頻度を入力する。刺激は、上の行から順番に強くなるように並べる。社会的・文化的刺激(絵画など)のように、強度の順序が不明の場合は、カテゴリに仮の数値、例えば図1の例では、左から1,2,3,4,5,6,7と数値を与えて、刺激ごとに平均値あるいは中央値を求め、それに基づいて刺激の強さの順序を推測することができる。カテゴリの数値の平均値でも大まかな刺激の数量化が出来るが、さらに本ウェブサイトの分析法を用いれば、計量心理学のモデルに基づいたより精緻な分析が可能である。社会的・文化的刺激をカテゴリ数値の平均値で順序付けたときは、図1の第1欄の刺激値には例えば順番に1から整数値を当てはめておけばよい。この数値はグラフを描くときに用いられるが、分析の結果には影響しない。

入力データファイル名(上の場合は、Data.xlsx)を設定してEnterキーを押すと、次に出力ファイル名の設定が求められる。適当なテキストファイル名を設定すればよい。上の例では、Results.txtと設定されている。出力ファイル名を設定すると、データが読み込まれ、計算が始まる。

StanスクリプトによるMCMCサンプリングが終了すると、パラメータの事後分布が順番に表示される。

図2

 

まず、感覚量の事後分布が描かれる(図2)。サーストンの比較判断モデルの場合、感覚量の原点と単位は不定であるので、カテゴリ境界の制約条件によって原点と単位が決められていることに注意。感覚量の分布が負の領域にあるのは、このためである。

図2のフォームの右上のX印をクリックして閉じると、図3のグラフが表示される。

図3

 

感覚量の強いものに対する標準偏差の分布が右にシフトしていることが分かる(Ekmanの法則)。

図3のフォームを閉じると、判断の境界値の事後分布が表示される(図4)。

図4

 

境界値は原点と単位を決めるための条件として設定されているので、縦線で位置が示されている。

図4のフォームを閉じると、関係式の係数の事後分布を示すグラフが表示される(図5)。

図5

 

係数の値(分布)が正の値であることから、感覚量が強くなるとその標準偏差も大きくなっていることが判る。

図5のフォームを閉じると、しばらくの計算時間の後、図6のグラフが表示される。

図6

 

感覚量が青線で、その上下にの幅の位置が緑色点線で描かれている。判断の境界値が黄色の横線で描かれている。図6のグラフにより、これらの関係を視覚的に理解することができる。

図6を閉じると、図7の累積比率を表す曲線が表示される。

 

図7

 

各刺激値ごとの評定カテゴリ値に対する累積比率を描いたものである。データに対するものを点線で、モデルに基づくものを実線で示している。

図7のフォームを閉じると、プログラムの実行終了となり、次のような出力が端末に表示される。

 

Results.txt was saved.

 

(py37) PS D:\\catscalfiles>

 

出力ファイルResults.txtが保存されたことが表示されている。

上の例の場合、出力ファイルの内容は以下のようになっている。

 

Input Data File = Data.xlsx

 

Data:

         1   63   37    0    0    0    0    0

     1.668   33   65    2    0    0    0    0

     2.783   18   67   15    0    0    0    0

     4.642    4   53   40    3    0    0    0

     7.743    3   28   56   13    0    0    0

    12.915    1   13   45   30   11    0    0

    21.544    0    3   21   34   33    8    1

    35.938    0    0    8   20   36   25   11

    59.948    0    0    1   15   21   32   31

       100    0    0    0    2    7   26   65

 

       Stimulus       Mode Psi     Mode Sigma

           1.00          -0.03           0.09

           1.67           0.04           0.10

           2.78           0.11           0.11

           4.64           0.20           0.13

           7.74           0.29           0.14

          12.91           0.41           0.16

          21.54           0.57           0.18

          35.94           0.74           0.21

          59.95           0.88           0.23

         100.00           1.11           0.26

 

感覚量と標準偏差の値が事後分布のmodeで示されているが、これは事後分布のサンプリングからKDEKernel Density Estimate)によって密度関数の推定を行ってmodeを求めたものである。ベイズ分析ではMAPMaximum a posteriori)推定値と呼ばれているものである。

 

 

引用文献

岡本安晴(2019)いまさら聞けないPythonでデータ分析.丸善出版

Stevens, S. S. (1975). Psychophysics: Introduction to its perceptual, neural, and social prospects. New York: Wiley.

Tesghtsoonian, R. (1971). On the exponents in Stevens law and the constant in Ekmans law. Psychological Review, 78, 71-80.

Thurstone, L. L. (1927). A law of comparative judgment. Psychological Review, 34, 273-286.

Torgerson, W. S. (1958). Theory and methods of scaling. New York: John Wiley & Sons, Inc.

 

 

Up