SciPy
はNumPy
に基づくライブラリであり、統計学に関するプログラムでは乱数生成の際などによく用います。使用方法の詳細に関しては都度調べれば十分である一方で基本的な用法に関しては抑えておくと良いので、当記事ではSciPy
の抑えておきたい用法について一問一答形式でまとめました。
・プログラム集まとめ
https://www.hello-statisticians.com/stat_program
Contents
基本事項の確認
NumPyによる行列の取り扱い
下記で詳しく取り扱った。
ライブラリの読み込み
解答$1$つ$1$つでライブラリの読み込みを行うと冗長であるので、以下を実行した上でそれぞれの解答のプログラムを実行する必要がある。
import numpy as np
from scipy import stats
乱数の固定
乱数は「漸化式」のような考え方に基づいて生成することから、初期値の値に基づいてその後の値が決まる。逆に考えると、初期値を固定することで再現性のある結果を得ることができる。乱数の固定は下記のように行うことができる。
np.random.rand(0)
上記ではseed
に0
を用いたが、値を定めて結果が再現できれば1
や2
など、他の数字を用いても良い。統計学の検証の際に乱数を用いる際は結果が再現できる必要があるので、乱数の固定は必須である。
一問一答
乱数の生成
Q.1-1-1 標準正規分布$\mathcal{N}(0,1)$に基づく乱数の生成
標準正規分布$\mathcal{N}(0,1)$に従う乱数を$20$個生成し、変数x
に格納せよ。また、x
がNumPy
の形式で定められることを確認せよ。
・解答
np.random.seed(0)
x = stats.norm.rvs(size=20)
print(type(x))
print(x)
・実行結果
<type 'numpy.ndarray'>
[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799 -0.97727788
0.95008842 -0.15135721 -0.10321885 0.4105985 0.14404357 1.45427351
0.76103773 0.12167502 0.44386323 0.33367433 1.49407907 -0.20515826
0.3130677 -0.85409574]
Q.1-1-2 標準正規分布$\mathcal{N}(\mu,\sigma^2)$に基づく乱数の生成
stats.norm.rvs
を用いて$\mu=2, \sigma=3$の正規分布$\mathcal{N}(\mu,\sigma^2)$に従う乱数を$20$個生成し、変数x
に格納せよ。
・解答
np.random.seed(0)
x = stats.norm.rvs(loc=2, scale=3, size=20)
print(x)
・実行結果
[ 7.29215704 3.20047163 4.93621395 8.7226796 7.60267397 -0.93183364
4.85026525 1.54592838 1.69034344 3.23179551 2.43213071 6.36282052
4.28311318 2.36502505 3.3315897 3.00102298 6.48223722 1.38452521
2.9392031 -0.56228722]
Q.1-1-3 一様分布$\mathrm{Uniform}(0,1)$に基づく乱数の生成
stats.uniform.rvs
を用いて一様分布$\mathrm{Uniform}(0,1)$に従う乱数を$20$個生成し、変数x
に格納せよ。
・解答
np.random.seed(0)
x = stats.uniform.rvs(size=20)
print(x)
・実行結果
[ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 0.64589411
0.43758721 0.891773 0.96366276 0.38344152 0.79172504 0.52889492
0.56804456 0.92559664 0.07103606 0.0871293 0.0202184 0.83261985
0.77815675 0.87001215]
解説np.random.rand(20)
でも同様の結果が得られることも合わせて抑えておくと良いです。
np.random.seed(0)
x = np.random.rand(20)
print(x)
・実行結果
[ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 0.64589411
0.43758721 0.891773 0.96366276 0.38344152 0.79172504 0.52889492
0.56804456 0.92559664 0.07103606 0.0871293 0.0202184 0.83261985
0.77815675 0.87001215]