[.Net][C#][確率・統計][MathNet.Numerics][t検定]等分散を仮定した 2 標本による検定

皆さんご存じの通りEXCELは、すっごく便利でT検定を使ういろんな検定が搭載されています。
その1つの「t検定:等分散を仮定した 2 標本による検定」に注目してみました。

過去の記事でも使っているのですがC#で統計を扱うときは「MathNet.Numerics」が便利です。
一般的な確率分布を使った確率の算出を行うことができます。

「t検定:等分散を仮定した 2 標本による検定」は2つの集合の平均値に差があるかを検定する手法です。
 検定統計量は以下の式で定義されます。

MathNet.Numericsを使って、この式をC#で書くと以下となります。

//検定を行うデータ
var samples1 = new double[] { 11, 12, 18, 22, 18, 15, 17, 18, 22, 30, 20, 25 };
var samples2 = new double[] { 19, 18, 14, 21, 18, 11, 23};

//σを求める
double variance = (samples1.Length - 1) * samples1.Variance() + (samples2.Length - 1) * samples2.Variance();
variance = variance / (samples1.Length - 1 + samples2.Length - 1);

//式の分母を求める
double stdErr = Math.Sqrt(variance * (1.0 / samples1.Length + 1.0 / samples2.Length));

//t値を求める
double t = (samples1.Mean() - samples2.Mean()) / stdErr;

t値が求まったので、t値の発生確率であるp値を求めます。
この時用いるt分布の自由度は、「データの個数の和-2」です。
t分布両側でのp値を求めるコードは以下です。

double pVal = MathNet.Numerics.ExcelFunctions.TDist(t, (int)(samples1.Length + samples2.Length - 2), 2);

今回参考にしている書籍は以下です。

0 件のコメント :

コメントを投稿