|
1: 2019-04-20 (土) 03:55:34 njf |
| + | *Pythonでt分布の値を出す [#x4b085fc] |
| | | |
| + | t分布は母集団が正規分布していて、かつその標準偏差が未知の場合、少ない標本からもとの分布の平均値を推定するときに使われる確率分布です。 |
| + | |
| + | 統計の教科書などの最後によく数表が載っていますが、値が結構とびとびだったりして使いにくいことがよくあります。こういうことはコンピューターにやらせた方が早くて正確な結果が得られます。 |
| + | |
| + | Pythonでt分布をあつかうにはscipyを使います |
| + | |
| + | (''注意'' :[[Python/標準正規分布]]と同様の内容なので、こちらを読んでからの方が理解しやすいかも知れません。) |
| + | |
| + | 自由度10のt分布の横軸の値から上側確率を出すには |
| + | |
| + | from scipy.stats import t |
| + | t.sf(x=1.233,df=10) |
| + | |
| + | 結果 |
| + | 0.12288719525159397 |
| + | |
| + | とします。xが横軸の値、dfが自由度です。 |
| + | |
| + | 自由度10のt分布の横軸の値から下側確率を出すには |
| + | |
| + | from scipy.stats import t |
| + | t.cdf(x=1.233,df=10) |
| + | |
| + | 結果 |
| + | 0.877112804748406 |
| + | |
| + | 確率の定義から、この二つを加えると1となります。 |
| + | |
| + | t.sf(x=1.233,df=10) + t.cdf(x=1.233,df=10) |
| + | |
| + | 結果 |
| + | |
| + | 1.0 |
| + | |
| + | よって、両方覚えなくてもどちからだけ知っておけば十分です。 |
| + | |
| + | 累積確率から横軸の値を出すには |
| + | |
| + | t.ppf(q=0.9,df=10) |
| + | |
| + | 結果 |
| + | 1.3721836411102866 |
| + | |
| + | とします。 |
| + | |
| + | 上側確率から横軸の値を出すには、 |
| + | |
| + | t.isf(q=0.9,df=10) |
| + | |
| + | 結果 |
| + | -1.3721836411102866 |
| + | |
| + | とします。 |
| + | |
| + | t分布の性質より、これらは符号が反転します。 |
| + | よってどちらか覚えれば十分です。 |
| + | |
| + | *正規分布と比べてみる [#oc8a9cc9] |
| + | |
| + | t分布は自由度、つまり標本の数が多くなると正規分布に近づくとされています。 |
| + | |
| + | そのため、通常は標本の数が多いときは正規分布を使い、少ないときにしかt分布は使いません。 |
| + | |
| + | この「少ない」の具体的な数は、要求され精度によって異なるでしょうが、私の手持ちの書籍などによるとだいたい25〜30未満を意味するようです。 |
| + | |
| + | では、実際に自由度によってどの程度の差が出るのかをPythonで計算してみます。 |
| + | |
| + | 実際によく使いそうな確率0.95の横軸の値の比を計算してみると以下のようになりました。 |
| + | |
| + | -df=10 |
| + | |
| + | t.isf(q=0.95,df=10) / norm.isf(q=0.95) |
| + | |
| + | 結果 |
| + | |
| + | 1.1018981221872615 |
| + | |
| + | -df=20 |
| + | |
| + | t.isf(q=0.95,df=20) / norm.isf(q=0.95) |
| + | |
| + | 結果 |
| + | |
| + | 1.0485542389065539 |
| + | |
| + | -df=25 |
| + | |
| + | t.isf(q=0.95,df=25) / norm.isf(q=0.95) |
| + | |
| + | 結果 |
| + | |
| + | 1.038475845670062 |
| + | |
| + | -df=30 |
| + | |
| + | t.isf(q=0.95,df=30) / norm.isf(q=0.95) |
| + | |
| + | 結果 |
| + | |
| + | 1.031861356263898 |
| + | |
| + | -df=100 |
| + | |
| + | t.isf(q=0.95,df=100) / norm.isf(q=0.95) |
| + | |
| + | 結果 |
| + | |
| + | 1.0093508011061045 |
| + | |
| + | |
| + | 自由度10では10パーセントあった差が、自由度25〜30で差は3〜4パーセントになります。 |
| + | |
| + | 自由度100では1パーセントを切ります。 |
| + | |
| + | 自由度が10から30へ変化したときの減少幅の方が30から100までの減少幅よりはるかに大きく、30前後を自由度の区切りと考えるのが自然であることが分かります。 |