2022年12月27日火曜日

サーストンの一対比較法でのデータ収集方法と解析方法

サーストンの一対比較法を理解する」シリーズ. 前回「サーストンの一対比較法って何?」で,サーストンの一対比較法がどんな手法なのか,他の方法との違いとか欠点とか説明したので, 今回は具体的にサーストンの一対比較法でどのようにデータを収集して,解析するか説明する.

データの収集方法

5種類のビール(ビール1~ビール5)の「キレ」を数値化するために100人の被験者にアンケートを取ってみたとする. アンケート方法は,2種類のビールを飲み比べて『ビール1よりビール2の方がキレが高いですか?』と問うもの. どちらも同じとか,回答拒否とかの選択肢はない.必ずどちらが「キレ」が高いかを回答しないといけない. だから『ビール1よりビール2の方がキレが高いですか?』と聞かれたらYesかNoのどちらかを回答する. Yesは「「ビール1よりビール2の方がキレが高い」という意味になり, Noは「ビール2よりビール1の方がキレが高い」という意味という意味になる.

\[ \def\S#1#2{\small B_{#1}\gt B_{#2}} \begin{array}{ccccc} \hline \hline & \S{1}{2} & \S{1}{3}& \S{1}{4}& \S{1}{5}& \S{2}{3}& \S{2}{4}& \S{2}{5}& \S{3}{4}& \S{3}{5}& \S{4}{5}\\ \hline \rm 被験者1& \rm No & \rm Yes & \rm Yes & \rm No & \rm No & \rm Yes & \rm Yes & \rm Yes & \rm No & \rm No\\ \rm 被験者2& \rm Yes & \rm No & \rm Yes & \rm No & \rm Yes & \rm Yes & \rm No & \rm Yes & \rm No & \rm Yes\\ \rm 被験者3& \rm No & \rm Yes & \rm No & \rm No & \rm Yes & \rm Yes & \rm Yes & \rm Yes & \rm No & \rm No\\ \rm \vdots& \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ \rm 被験者100& \rm No & \rm Yes & \rm No & \rm No & \rm No & \rm Yes & \rm No & \rm No & \rm No & \rm No\\ \hline \rm Yesの数& 6 & 46 & 28 & 2 & 99 & 87 & 31 & 27 & 6 & 8\\ \rm Yesの割合&0.06 & 0.46 & 0.28 & 0.02 & 0.99 & 0.87 & 0.31 & 0.27 & 0.06 & 0.08\\ \hline \end{array} \]

この表は,集めたデータ例.「$\S{1}{2}$」は「ビール1はビール2よりキレが良い」という意味.それに同意すれば「Yes」となる. 「ビール2はビール1よりキレが良い」は「ビール1はビール2よりキレが良い」という問の逆なので省略している. だから,ビール5種類から2種類を抽出する組み合わせ数が$_{5}C_{2}=10$なので10列のデータになっている. 行数は,被験者数分だけある.

サーストンの一対比較法で直接用いるのは,各問いに対する「Yesの割合」だけ.誰がどう回答したかは関係ない. だから順序効果を考慮して問いの順序を無作為にするとか,あえて逆の質問をして逆にカウントするとか,工夫をする余地がある.

データの解析方法

STEP1: $\S{j}{k}$となる確率$P(\S{j}{k})$の表を作る

得られたデータの解析法は3ステップ. まず上で計算した「Yesの割合」を使って次の表を作る. この表は「ビール$j$はビール$k$よりキレが良い」と回答する割りあい(確率)を表している. ちょうどリーグ戦の勝率表に似ている

\[ \begin{array}{rrrrr} \hline \hline j \backslash k & 1& 2& 3& 4&5\\ \hline 1& 0.50& 0.06& 0.46& 0.28& 0.02\\ 2& 0.94& 0.50& 0.99& 0.87& 0.31\\ 3& 0.54& 0.01& 0.50& 0.27& 0.06\\ 4& 0.72& 0.13& 0.73& 0.50& 0.08\\ 5& 0.98& 0.69& 0.94& 0.92& 0.50\\ \hline \hline \end{array} \]

この表を作るときには,$j$と$k$には1から5の整数を一通り入れて考えて,値は「Yesの割合」からもってくればいい. そうやって数値を入れていくと対角成分よりも上がわの三角の範囲しか値が入らないことが分る. 実は上の三角形部分は,$j\lt k$の場合だけで$j\gt k$の場合はない.つまり「$\S{1}{2}$」は有っても「$\S{2}{1}$」はない. $j\gt k$は下の三角形部分にいれるべきだけどこの部分のアンケートを取らなかったのは$\S{j}{k}$がYesとなる確率が分れば, $\S{k}{j}$がYesとなる確率は次の式で自動的に分かるから.

\[ P(\S{k}{j}) = 1 - P(\S{j}{k}) \]

例えば,「ビール1はビール2よりキレが良い」がYesである確率は$P(\S{1}{2})=0.29$だけど, 「ビール2はビール1よりキレが良い」がYesである確率は自動的に$P(\S{2}{1})=1 - 0.29=0.71$になる. これはアンケートで「Yes」か「No」以外の回答を許さないから必ずそうなる.

もう一つデータが無い箇所があり,それは対角成分である$j=k$の場合. 例えば「ビール1よりビール1はキレが良い」と言われてもYesでもNoでもないからそもそもそういうアンケートに含めていない. この場合の確率は,無理やりにでも「Yes」か「No」どちらか答えろと言われたら「Yes」の割合は半分になるはずなので0.50とする. だから対角成分には全部0.50が埋まっている.

STEP2: 標準正規分布の下側$P(\S{j}{k})$パーセント点を求める

ここまではアンケート結果から確率を求めたりして何となく何がしたいのか想像できたかもしれないけど,次の手順は理論を知らないと意味不明かもしれない. でもとりあえずここでは理論は無視してどう計算するかだけ説明する.手順自体はエクセル等を使えば簡単. 何をするか一言で言うと標準正規分布の累積確率$\Phi(z)$が$\Phi(z)=P(\S{j}{k})$となる$z=z_{jk}$を求めるということ. つまり標準正規分布の累積確率密度関数を$\Phi(z)$は

\[ \Phi(z)=\int_{-\infty}^{z} \frac{1}{\sqrt{2\pi}} \exp^{-\frac{x^2}{2}}dx \] と表せる.この積分の中が標準正規分布.標準正規分布とは正規分布の関数に$\mu=0$と$\sigma=1$を代入したもの. 累積確率とは確率密度関数を積分したものだけど「下側」とは$-\infty$から$z$まで積分したもの.下のグラフで言えば青い部分の面積にあたる.

確率密度関数を積分した面積は確率そのものになる.ここではこの確率が$P(\S{j}{k})$となるような$z$を$z_{jk}$として,この$z_{jk}$を求める.

\[ \Phi(z_{jk})=P(\S{j}{k}) \]

この計算はエクセルやGoogleスプレッドシートのnorm.s.inv()関数を使うと簡単に計算できる. 例えばnorm.s.inv(1-0.06)=1.55と計算できる. セル全部を計算した結果がこれ.

\[ \begin{array}{rrrrr} \hline \hline j \backslash k & 1& 2& 3& 4&5\\ \hline 1& 0.00& 1.55& 0.10& 0.58& 2.05\\ 2& -1.55& 0.00& -2.33& -1.13& 0.50\\ 3& 0.10& 2.33& 0.00& 0.61& 1.55\\ 4& -0.58& -1.13& -0.61& 0.00& 1.41\\ 5& 2.05& -0.50& -1.55& -1.41& 0.00\\ \hline \hline \end{array} \]

計算結果をよく見ると対角成分($j=k$)は0で,対角成分を挟んで反対側は正負反対になっている. これは標準正規分布が原点に対して左右対称だから.

STEP3: 各列を平均する

最後はさらに理論を知らなければ意味不明だけど,計算は簡単. 上の表の各行を平均するだけ. ちなみに添字がいつのまにか$i$になっているのは理論の方と整合とってて多少の理由がある.

\[ \hat{\mu}_i=\displaystyle\frac{1}{5}\sum_{j=1}^5 \hat{z}_{ji} \]

この計算によってこの数直線のような解析結果が得られる. ここで注意が必要なのはこのデータ点の重心が原点,分散が1になるように数値が決まっているのでデータ点1点の数値そのものには意味がない. データ点どうしの大小比較や2組以上のデータ点間の距離の比については意味がある数値になっている(グラフの描き方は「Pythonでラベル付きの数直線を描く」を参照).