[確率・統計][C#]検定統計量T(t値)の算出

「その問題、やっぱり数理モデルが解決します」を読んで、データ分析の勉強をしています。

  

第10~11章にかけて、回帰分析して算出された係数の検定方法について記載されています。
初読では、理解できませんでしたが、この章で記載されているのは以下だったようです。

・係数の検定統計量を求める
・係数が0(相関無し)と仮定して、優位性の有無を確認する。

第11章の最後で以下の式が導出されます。

個人的に残念な点は、上記が、t分布(自由度:n-2)であることを証明して、話が終了してしまいます。(他の本を読むと、この値は、検討統計量とかt値と呼ばれる値です。)
上記の値を第9章で例として挙げられたパラメータの有意性が確認されていなかったので、上記の計算を行いました。

手順は以下となります。

  1. 算出された係数a,bで求めらるy^ と観測されたyの残差を計算する。
  2. 残差の不偏分散Pow(S^, 2)を求める
  3. xの偏差の総和Sxxを求める
  4. 検定統計量Tを求める

結果は以下となります。

検定統計量 T= 0.6172133998483678

 t分布(自由度:2)の0.05棄却域は「2.91998558035373」ですので、算出されたbの有意性はないだろう(b=0)と推定され、提示されたパラメータと直線の相関性はなかったようです。

この部分のソースコードは以下となります。

//算出された係数a,bで求めらるy^ と観測されたyの残差を計算します。
for (int i = 0; i < x.Length; ++i)
{
    Console.WriteLine(String.Format("x={0}, 残差={1}", x[i], residualError[i]));
}

//残差の不偏分散Pow(S^, 2)を求める
double variance = 0;
double residualErrorAverage = residualError.Average();
for (int i = 0; i < residualError.Length; ++i)
{
    variance += Math.Pow(residualError[i] - residualErrorAverage, 2);
}
variance = variance / (residualError.Length - 2);

Console.WriteLine(String.Format("残差の不偏分散 S^ ={0}", residualErrorAverage));

//xの偏差の総和Sxxを求める
double Sxx = 0;
for (int i = 0; i < x.Length; ++i)
{
    Sxx += Math.Pow(x[i] - average_x, 2);
}
Console.WriteLine(String.Format("xの偏差の総和 Sxx={0}", Sxx));

//検定統計量T = (B^ - b) /sqrt(S^ * S^ / Sxx)
//b = 0 を帰無仮説とするので b = 0として計算する
double T = b / Math.Sqrt(variance / Sxx);
Console.WriteLine(String.Format("検定統計量 T= {0}", T));
Console.WriteLine(String.Format("標準誤差 T= {0}", Math.Sqrt(variance / Sxx)));

0 件のコメント :

コメントを投稿