CONTENTS コンテンツ

codexaで統計を学ぼう!(5)

ChatGPTを使ってPythonを学ぼう!

2024.04.06

 Python学習編66回目です。

 ここんとこは不偏標準偏差のn-1で割ることへの疑問を調べてます。以下のコードで、nで割るのとn-1で割るのではどっちが真に近いか検証したところ、n-1で割る方が真に近いと出ました。

import numpy as np
bo_syuudan = np.random.rand(200,5) #標本集団5個ずつ、母集団合計で要素1000の配列を作成
bo_hoyujunhensa = np.std(bo_syuudan) #母集団の標準偏差を計算
hyouhon_hoyujunhensa = np.zeros(200) #標本集団の標準偏差を記録するための配列を作成
huhen_hoyujunhensa = np.zeros(200) #標本集団の不偏標準偏差を記録するための配列を作成
for i in range(len(bo_syuudan)):
  hyouhon_hoyujunhensa[i] = (np.std(bo_syuudan[i])) #標本集団の標準偏差を配列に格納
average_hyouhon_hoyujunhensa = hyouhon_hoyujunhensa.mean() #標本集団の標準偏差を格納した配列の平均を求める
for i in range(len(bo_syuudan)): #上と同じ操作を不偏昇順偏差で行う
  huhen_hoyujunhensa[i] = (np.std(bo_syuudan[i], ddof = 1))
average_huhen_hyoujunhensa =huhen_hoyujunhensa.mean()
print(bo_hoyujunhensa)
print(average_hyouhon_hoyujunhensa)
print(average_huhen_hyoujunhensa)

しかしn-1で割っても母集団の標準偏差より小さく出る傾向にあり、0~1の乱数の標準偏差は1/√12≒0.2887のところ、約0.28程度でした。ということはn-1で割るよりも良い補正方法があるはず。直感では少なくとも全要素0~1の乱数ならあらゆるサンプルサイズで標本数によらず標準偏差を1/√12にする補正方法がありそう。ということはどこかの先人が発見してるはず。聞いてみよう。

入力:上記の実験をしたところ、n=1000の標準偏差とn=5の不偏標準偏差では前者が大きい傾向にありました。標準偏差においてサンプル数nによるバラつきをより小さくするために、n-1で割るよりも良い補正方法を教えてください

出力:

標準偏差の計算におけるn−1で割る(ベッセルの補正)は、標本標準偏差を不偏推定量として母集団の標準偏差を推定するためのものです。この補正は、標本からの推定が母集団の真の値に偏りなく近づくように設計されています。サンプルサイズが小さい(nが小さい)場合に特に有効ですが、サンプルサイズが大きくなるにつれてその効果は薄れます。

標準偏差の計算でサンプル数nによるバラつきをより小さくするための「より良い補正方法」については、通常の状況ではn−1で割る方法が広く受け入れられています。しかし、特定の状況や要件に応じて、他の手法を考慮することは可能です。それには以下のようなアプローチがありますが、これらは不偏性の観点からではなく、他の目的や条件に基づいたものです。

ジャックナイフ法

  • ジャックナイフ法は、再サンプリング技術の一つであり、特にサンプルサイズが小さい場合の統計量のバリアンスを推定するために使用されます。この方法では、一度に一つの観測値を除外して、残りのデータセットに基づいて統計量を計算します。これを全ての観測値に対して繰り返し、得られた統計量の平均を取ることで、より安定した推定が得られることがあります。

ブートストラップ法

  • ブートストラップ法も再サンプリング技術の一つで、元のデータセットからランダムにサンプルを繰り返し抽出(置き換えあり)し、サンプルから統計量(この場合は標準偏差)を計算します。これにより、統計量の分布を推定し、バリアンスを評価することができます。

変更された標準偏差の公式

  • 特定の分布(例えば正規分布)を仮定する場合、サンプルサイズや分布の特性に基づいて、標準偏差の計算に適用する補正係数を調整することができます。しかし、これは特定の仮定に基づくため、一般的な状況での不偏推定量としての適用性は限られます。

これらの方法は、標準偏差の不偏性を向上させるというよりは、特定の目的(例えば推定の安定性の向上や、サンプルからの推定の信頼性の向上)に合わせて統計量の挙動を調整するためのものです。それぞれの方法は特定の状況や目的に応じて適切に選択されるべきであり、常に「より良い」と言えるものではありません。

万能解はないのか。特定の分布ではより正確な補正があるっぽいから、上記実験の例(一様分布)で聞いてみよう

入力:一様分布の場合、n-1で割るよりも適した補正方法には何がありますか?

出力:

一様分布のデータに対する標準偏差の計算で、n−1で割る(ベッセルの補正)よりも適した補正方法を探す場合、その目的は通常、サンプルから母集団のパラメーターをより正確に推定することです。しかし、一様分布の場合に特有の補正方法があるわけではありません。不偏標準偏差の計算におけるn−1の使用は、標本平均が母平均に比べて過小評価されがちな問題を補正するための一般的な方法であり、一様分布を含む多くの分布に対して適用されます。

一様分布に対する特定の問題(例えば、データの範囲が既知の場合の標準偏差の推定)に対処するために、他の統計的推定手法や補正を考慮することは可能ですが、標準偏差の計算における一般的な改善策として広く認められている方法は、特にありません。

考慮すべき点

  • 分布の特性の利用: 一様分布の場合、分布の最小値と最大値がわかっているなら、これらの値を使用して母集団の分散や標準偏差を直接計算することができます。一様分布の分散は σ2=12(ba)2​ で計算できます(ここで ab はそれぞれ分布の最小値と最大値です)。しかし、これは母集団に対する計算であり、標本データからこれらのパラメーターを推定する際には適用できません。
  • 他の推定法の利用: サンプルデータからより良い推定を行うためには、ブートストラップ法などの再サンプリング手法を使用して、推定量の分布を評価し、その信頼区間を求める方法が考えられます。これは、推定の不確実性を定量化するのに役立ちます。

結論

一般に、n−1で割ることは、標本標準偏差を計算する際の一般的な不偏推定法であり、これに代わる特定の「より良い」補正方法は一様分布に限らず、普遍的なものとしては存在しません。特定の状況や分布の性質に合わせて適切な推定手法を選択することが重要ですが、これは推定したいパラメーターや分析の目的に応じて変わります。

うーん、やはりn-1で受け入れてそれ以上の補正方法は考えてない感じか。統計は実用に耐えれば理論値でなくてもいい分野だから、細部にこだわりすぎてもいけないな。だいぶ脱線したが元に戻るか。

次回に続く

この記事をシェアする