T得点(偏差値)のベイズ推定
T得点のベイズ推定を行うためのモデルを考えてみた。推定結果は図1のように図示される。
図1
設定したモデルは以下の通りである。なお、ベイズ統計の基本的なことを<岡本安晴「統計学を学ぶための統計学入門[下]」培風館、Pp. 153-157>で説明している。
N人のデータにおいてk番目の受験者の位置を
で与える。このpに対応するT得点Xを
で与える。プログラムでは以下のコードで計算している。
double p
= (k - 0.5) / double(n);
double z
= calc_z_normal( p );
double X
= 50.0 + 10.0 * z;
いま、真のT得点をTとおき、
とおく。eは誤差項である。
であり、Tとeは独立であるとする。
データNとkが与えられるとXが決まる。Xが算出されたときのTの事後分布を求める。そのために、Tが与えられたときのXの分布を求める。Tとeが独立であるとき
が成り立つ。
信頼係数をとおくと
である。これより、
をえる。
また、
である。ここで、は平均μ、分散の正規分布の密度関数を表す。
これより事後確率は以下のように与えられる。
したがって、事前分布が一様分布であれば、事後分布は
となる。
Tの事前分布が平均50、標準偏差10であれば、
となる。
および
より
であることがわかる。
式(1)および(2)で与えられる事後分布、およびその平均値と95%確信区間を表示するプログラムがT_scale.exeである。実行形式のプログラムファイルT_scale.exeをクリックしてダウンロード実行することができる。プログラムは.NET Framework3.5対応である。ソースコードファイルなどを圧縮ファイルT_scale.zipとして用意した。圧縮ファイル名T_scale.zipをマウスの右ボタンでクリックしてダウンロードする事が出来る。ダウンロードした圧縮ファイルは、ファイル名T_scale.zipをマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したファイルはVisual C++2008で開くことができる。
プログラムを実行すると図2のフォームが表示される。
図2
信頼性係数、受験者総数、順位(最下位が1、最上位がN)を設定して「Calc」ボタンをクリックすると計算が始まり、図1のウィンドウが表示される。画面上部に用意されているテキストボックスに他の値を設定して「Calc」ボタンをクリックすると設定された値に対して再計算が行われる。右上の「Save」ボタンをクリックすると表示されている画面がファイルに保存される。「Close」ボタンのクリックでプログラムの実行終了である。
上のプログラムはWindowsフォームアプリケーションであるが、コンソールアプリケーションも作成した。コードは以下の通りである。
#include "stdafx.h"
#include "calcz.h"
using namespace System;
using namespace Calcz;
double sqr(double v){
return v * v;
}
int main(array<System::String ^> ^args)
{
double
rho, k;
int n;
Console::Write("信頼性係数= ");
rho = double::Parse(Console::ReadLine());
Console::Write("受験者総数N = ");
n = int::Parse(Console::ReadLine());
Console::Write("順位k(:最下位<= k
<= N:最上位)= ");
k = double::Parse(Console::ReadLine());
double p
= (k - 0.5) / double(n);
double z
= calc_z_normal( p );
double X
= 50.0 + 10.0 * z;
double
sgmE = Math::Sqrt(100.0 * (1.0 - rho));
double
sgmTn = Math::Sqrt(sqr(sgmE * 10.0) / (sqr(sgmE) + sqr(10.0)));
double
meanTn = (sqr(10.0) * X + sqr(sgmE) * 50.0) / (sqr(10.0) + sqr(sgmE));
Console::WriteLine("一様分布: Mean = " + X.ToString("F1")
+
" 95%Invl = [" +
(X - 1.96 * sgmE).ToString("F1")
+ ",
" + (X + 1.96 * sgmE).ToString("F1")
+ "]");
Console::WriteLine("正規分布: Mean = " + meanTn.ToString("F1")
+
" 95%Invl = [" +
(meanTn - 1.96 * sgmTn).ToString("F1")
+ ",
" + (meanTn + 1.96 * sgmTn).ToString("F1")
+ "]");
Console::WriteLine();
Console::Write("Enterキーを押して終了。");
Console::ReadLine();
return 0;
}
このコンソールアプリケーションの実行結果例を図3に示す。
図3
このコンソールアプリケーションの実行形式のプログラムT_Scale_Con.exeはプログラム名T_Scale_Con.exeをクリックしてダウンロード・実行することができる。プログラムファイルなどを圧縮ファイルT_Scale_Con.zipとしてまとめたものは、圧縮ファイル名T_Scale_Con.zipをクリックしてダウンロードすることができる。ダウンロードしたファイルT_Scale_Con.zipをマウスの右ボタンでクリックして表示されるメニュから「展開」あるいは「解凍」を選んで解凍すればVisual C++2008で開くことができる。
なお、Visual C++プログラミングの解説を<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>で行っている。