2012年3月22日木曜日

2012-03-22<<03<<統計学メモ

点推定の方法

・モーメント法

大きさnの標本から算出される次の推定量

\hat{\mu}_k=\frac{X^k_1+X^k_2+\cdots+X^k_n}{n}

を原点の周りのk次のモーメント(積率)という

 

\hat{\mu}_1=\frac{X_1+X_2+\cdots+X_n}{n}

1次のモーメント

\hat{\mu}_2=\frac{X^2_1+X^2_2+\cdots+X^2_n}{n}

2次のモーメント

 

ここで

\hat{\mu}_1=\frac{X_1+X_2+\cdots+X_n}{n}=\overline{X}

また

\hat{\mu}_2=\frac{X^2_1+X^2_2+\cdots+X^2_n}{n}

を以下のように変形する

=\lbrace (X_1-\overline{X})^2+(X_2-\overline{X})^2+\cdots+(X_n-\overline{X})^2+2(X_1+X_2+\cdots+X_n)\overline{X}-n\overline{X}^2\rbrace / n

ここで

2(X_1+X_2+\cdots+X_n)\overline{X}=2n\overline{X}

なぜなら

\overline{X}=\frac{X_1+X_2+\cdots+X_n}{n}

故に上の式は

=\frac{(X_1-\overline{X})^2+(X_2-\overline{X})^2+\cdots+(X_n-\overline{X})^2}{n}+\overline{X}^2

と変形される

 

ここで分散の母数の推定量を

\hat{\sigma}^2=\frac{(X_1-\overline{X})^2+(X_2-\overline{X})^2+\cdots+(X_n-\overline{X})^2}{n}

とすると

上の式変形より

\hat{\sigma}^2=\hat{\mu_2}-\hat{\mu_1}^2

 

平均値や分散の定義式にそのまま標本から得られた1次、2次のモーメントの値を代入した結果がモーメント法の算出結果になる

 

        /// <summary>
/// n次モーメント
/// </summary>
/// <param name="dec">標本のdecimal型の配列</param>
/// <param name="n">n次モーメント</param>
/// <returns>n次モーメント</returns>
public static decimal moment(decimal[] dec,int n)
{

decimal sum = 0;
for (int x = 0; x < dec.GetLength(0); x++)
{
sum += decimal_pow(dec[x], n);
}
return sum / dec.GetLength(0);
}

/// <summary>
/// decimal型の累乗
/// </summary>
/// <param name="dec">decimal型/何を</param>
/// <param name="n">int型/何乗するか</param>
/// <returns>累乗された値</returns>
public static decimal decimal_pow(decimal dec, int n)
{
decimal pow = 1;
for (int i = 1; i <= n; ++i)
{
pow = pow * dec;
}
return pow;
}


 



例.97,100,103のサンプルから母集団の平均、分散を推定する



Image1778



            //モーメント法
decimal mom_1,mom_2;
decimal[] sample = new decimal[3];

sample[0] = 97;
sample[1] = 100;
sample[2] = 103;

mom_1 = stat.moment(sample, 1);
mom_2 = stat.moment(sample, 2);

Console.WriteLine("1次モーメント="+mom_1.ToString());
Console.WriteLine("2次モーメント=" + mom_2.ToString());
Console.WriteLine("母平均の推定値=" + mom_1.ToString());
Console.WriteLine("母分散の推定値=" + (mom_2-stat.decimal_pow(mom_1,2)).ToString());
Console.ReadLine();


0 件のコメント:

コメントを投稿