Python で
結果を
対数正規分布とは
統計学入門 - 東京大学出版会 の
ランダムに
世帯を 選びその 年間所得Xを 調べると、 低い方は 一定限度が あるが、 高い方には 明確な 限度が ない。 このような 場合、 logX を 考えるのが 自然である (図6.15)。そこで、 logX が 正規分布に 従うならば、 もとのXは 対数正規分布 log-normal distribution に 従うと いう。
現実で、
- オプション: プレミアムの
評価方法 - 低所得者範囲での
所得分布
Python での 対数正規分布の 計算方法
対数正規分布はlog-normal distribution
とlog-normal distribution python
で
numpy.random.lognormal を 使う
numpy.random.lognormal
は
import numpy as np # mu: 基礎となる正規分布の平均値、 sigma: 基礎となる正規分布の標準偏差 mu, sigma = 3., 1. s = np.random.lognormal(mu, sigma, 1000) print(s)
[ 53.65039347 16.42483065 5.21176677 4.73970538 5.4776618 8.21022889 34.58747085 121.00853537 13.86098751 6.43636124 4.06565487 31.76621297 9.4816259 7.10916311 33.48658321 2.05610029 50.77300074 28.96997044 13.51811062 98.36436465 ..... 44.15313676 38.45845665 4.91379163 21.96371365 7.26879496 18.76733173 14.52764593 38.79054122 10.20387406 50.45289727 51.39174082 54.2082318 205.19325454 5.61990921 2.62172464]
ヒストグラムを
import matplotlib.pyplot as plt import numpy as np # mu: 基礎となる正規分布の平均値、 sigma: 基礎となる正規分布の標準偏差 mu, sigma = 3., 1. s = np.random.lognormal(mu, sigma, 1000) count, bins, ignored = plt.hist(s, 100, density=True, align='mid') plt.show()
mu
とsigma
を
import matplotlib.pyplot as plt import numpy as np # mu: 基礎となる正規分布の平均値、 sigma: 基礎となる正規分布の標準偏差 mu, sigma = 6., 1.5 s = np.random.lognormal(mu, sigma, 1000) count, bins, ignored = plt.hist(s, 100, density=True, align='mid') plt.show()
scipy.stats.lognorm を 使う
scipy.stats.lognorm
を
from scipy.stats import lognorm s = 0.954 # モーメントの計算をする mean, var, skew, kurt = lognorm.stats(s, moments='mvsk') print(mean, var, skew, kurt)
1.576264803741382 3.6886797556399684 5.464256148333118 81.30583448651502
import matplotlib.pyplot as plt import numpy as np # shpae (形状パラメータ)に 0.954 を指定する s = 0.954 # %点関数 1%から 99% 点までを100等分した配列を生成する x = np.linspace(lognorm.ppf(0.01, s),lognorm.ppf(0.99, s), 100) fig, ax = plt.subplots(1, 1) # pdf (Probability density function) 確率密度関数 ax.plot(x, lognorm.pdf(x, s),'r-', lw=5, alpha=0.6, label='lognorm pdf') # shapeを指定して、変数で受ける rv = lognorm(s) ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf') r = lognorm.rvs(s, size=1000) # ヒストグラムに描画する ax.hist(r, density=True, histtype='stepfilled', alpha=0.2) ax.legend(loc='best', frameon=False) plt.show()
import matplotlib.pyplot as plt import numpy as np # shpae (形状パラメータ)に 0.5を指定する s = 0.5 # %点関数 1%から 99% 点までを100等分した配列を生成する x = np.linspace(lognorm.ppf(0.01, s),lognorm.ppf(0.99, s), 100) fig, ax = plt.subplots(1, 1) # pdf (Probability density function) 確率密度関数 ax.plot(x, lognorm.pdf(x, s),'r-', lw=5, alpha=0.6, label='lognorm pdf') # shapeを指定して、変数で受ける rv = lognorm(s) ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf') r = lognorm.rvs(s, size=1000) # ヒストグラムに描画する ax.hist(r, density=True, histtype='stepfilled', alpha=0.2) ax.legend(loc='best', frameon=False) plt.show()
参考
以下、
以上です。
コメント