C#で正規分布やt分布、カイ2乗分布を扱うのに便利なMath.NET Numericsがあります。
Math.NET
Numericsを使ってt分布の面積(確率)と、特定の確率となるt値を求める方法を記載します。
1.Nugetでライブラリを組み込む
(1)メニューの「プロジェクト-NuGetパッケージの管理」を選択します。
(2)参照を選択し、Math.NET
Numericsを検索しプロジェクトに追加します。
これで、Math.NET Numericsが使えるようになりました。
2.t分布の面積や確率を計算するには以下のように記載します。
(1)平均:0、分散:1、自由度:2のときの5%となるt値を求める
double t = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, 2, 0.05);
(2)平均:0、分散:1、自由度:2のときのt=0となる面積を求める
MathNet.Numerics.Distributions.StudentT.CDF(0, 1, 2, 0);
このライブラリで、面積、確率を求めるとは、以下の図の範囲となるようです。
3.EXCELと同じ動作をする関数もあります。 (1)確率0.05のときのt値を求める
MathNet.Numerics.ExcelFunctions.TInv(0.05, 2);
(2)t値=4.303のときのP値を求める。
MathNet.Numerics.ExcelFunctions.TDist(4.302652729749469, 2, 2);
4.全ソースコードです。
using System; namespace tdistribution { class Program { static void Main(string[] args) { //MathNet.Numericsのt分布のテスト //面積(確率)となるt値を求める Console.WriteLine(String.Format("t分布の面積=0.05の位置 = {0}", MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, 2, 0.05))); //-∞からlocationまでの面積(確率)を求める P値は両側なので2倍する Console.WriteLine(String.Format("t=0の面積 = {0}", MathNet.Numerics.Distributions.StudentT.CDF(0, 1, 2, -2.91998558035373))); //3.EXCELと同じ関数名で求める //t値 Console.WriteLine(String.Format("t値 = {0}", MathNet.Numerics.ExcelFunctions.TInv(0.05, 2))); //面積 Console.WriteLine(String.Format("面積(P値) = {0}", MathNet.Numerics.ExcelFunctions.TDist(4.302652729749469, 2, 2))); } } }
5.参考書籍
以下は個人的に面白いと思っている本です。
0 件のコメント :
コメントを投稿