Python で
ワイブル分布とは
ワイブル分布 - Wikipedia の
- 物体の
強度を 統計的に 記述する ために W.ワイブル (Waloddi Weibull) に よって 提案された 確率分布 - 時間に
対する 劣化現象や 寿命を 統計的に 記述する ために 利用する - 最弱リンクモデル
最弱リンクモデル と
統計学入門 - 東京大学出版会 の6.13 <wbr>ワイブル分布
の
故障が
偶発故障なら、 瞬間故障率は 一定となり、 これらの 確率変数は 指数分布に 従うことが 証明できる。
もし劣化が 進行し 故障率が 増加する ときは IFR(Increasing Failure Rate)と いい、 この 分布には 従わない。またいわゆる 「初期故障」の 時期には、 故障率の 減少が おこり、 DFR(Decreasing Failure Rate) と いうが、 この 時も 指数分布は あては まらない。 これらの 現実に より 近い ものが ワイブル分布である。
故障率の
Python での ワイブル分布の 計算方法
- numpy.random.weibull — NumPy v1.16 Manual
scipy.stats.weibull_min — SciPy v1.2.1 Reference Guide
おそらく、 最小強度の 分布の 計算を 行う ための モジュールなのかと 思います。 scipy.stats.weibull_max — SciPy v1.2.1 Reference Guide
weibull_max
もありました。
numpy.random.weibull を 使う
numpy.random.weibull(a, size)
のa
は
a
のa=1
の
import numpy as np import matplotlib.pyplot as plt # a = 1. # shape s = np.random.weibull(a, 1000000) plt.hist(s, bins=100) plt.show()
a=2
の
import numpy as np import matplotlib.pyplot as plt # a = 2. # shape s = np.random.weibull(a, 1000000) plt.hist(s, bins=100) plt.show()
形状パラメータ a=0.5
、a=3.5
あたりは
import numpy as np import matplotlib.pyplot as plt a = .5 # shape s = np.random.weibull(a, 1000000) plt.hist(s, bins=100) plt.show()
import numpy as np import matplotlib.pyplot as plt a = 3.5 # shape s = np.random.weibull(a, 1000000) plt.hist(s, bins=100) plt.show()
scipy.stats.weibull_min
を 使う
weibull_min.stats
で
from scipy.stats import weibull_min c = 1.79 mean, var, skew, kurt = weibull_min.stats(c, moments='mvsk') print(mean, var, skew, kurt)
0.8895312083339716 0.26414885038021363 0.7869416254814524 0.5763152896528907
ppf pdf を
import matplotlib.pyplot as plt from scipy.stats import weibull_min import numpy as np c = 1.79 fig, ax = plt.subplots(1, 1) # 1%点、99%点を100等分した配列を生成 x = np.linspace(weibull_min.ppf(0.01, c), weibull_min.ppf(0.99, c), 100) # グラフを描く ax.plot(x, weibull_min.pdf(x, c), 'r-', lw=5, alpha=0.6, label='weibull_min pdf') rv = weibull_min(c) ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf') # ヒストグラムを描く r = weibull_min.rvs(c, size=1000) ax.hist(r, density=True, histtype='stepfilled', alpha=0.2) ax.legend(loc='best', frameon=False) plt.show()
scipy.stats.weibull_max
を 使う
weibull_max.stats
で
from scipy.stats import weibull_max c = 2.87 mean, var, skew, kurt = weibull_max.stats(c, moments='mvsk') print(mean, var, skew, kurt)
-0.8862269254527579 0.21460183660255183 -0.6311106578189355 0.2450893006876287
from scipy.stats import weibull_max import matplotlib.pyplot as plt c = 1.79 fig, ax = plt.subplots(1, 1) rv = weibull_max(c) # 1%点、99%点を100等分した配列を生成 x = np.linspace(weibull_max.ppf(0.01, c), weibull_max.ppf(0.99, c), 100) # グラフを描く ax.plot(x, weibull_max.pdf(x, c), 'r-', lw=5, alpha=0.6, label='weibull_max pdf') ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf') r = weibull_max.rvs(c, size=1000) ax.hist(r, density=True, histtype='stepfilled', alpha=0.2) ax.legend(loc='best', frameon=False) plt.show()
scipy.stats.weibull_min
と scipy.stats.weibull_max
の 違い
scipy.stats.weibull_min
と、scipy.stats.weibull_max
の
計算式の
違い scipy.stats.weibull_min
$f(x, c) = c x^{c-1} \exp(-x^c)$scipy.stats.weibull_max
$f(x, c) = c (-x)^{c-1} \exp(-(-x)^c)$
グラフの
形状に ついて
scipy.stats.weibull_max
は負の 方向に、 scipy.stats.weibull_min
は正の 方向に 伸びます。
参考
以下、
コメント