これは非常に基本的な質問ですが、良い答えを見つけることができないようです。 scipyが正確に計算するもの
scipy.stats.norm(50,10).pdf(45)
平均50と標準偏差10のガウスで45のような特定の値の確率が0であることを理解しています。それでは、pdfは正確に何を計算しているのでしょうか。それはガウス曲線の下の領域ですか、そうであれば、x軸の値の範囲はどのくらいですか?
from math import pi
from math import exp
from scipy import stats
def normal_pdf(x, mu, sigma):
return 1.0 / (sigma * (2.0 * pi)**(1/2)) * exp(-1.0 * (x - mu)**2 / (2.0 * (sigma**2)))
(ウィキペディアの定義と比較してください)。そして、これはまさにscipy.stats.norm().pdf()
が計算するものです:与えられたmu, sigma
のx
点でのpdfのvalue。
これはnot確率(=areapdfの下)ですが、の値x
でpdfを渡してpdf(x)
に渡します(その値は1.0
よりも大きくなる可能性があります!)。たとえば、N(0, 0.1)
のx = 0
にあることがわかります。
val = stats.norm(0, 0.1).pdf(0)
print(val)
val = normal_pdf(0, 0, 0.1)
print(val)
出力を与える
3.98942280401
3.989422804014327
まったくない=曲線の下の面積!
これは、x = 0
のような特定の値の確率が0
であるというステートメントと矛盾しないことに注意してください。これは、正式には、ポイントのPDFの下の領域(つまり、長さ0
の間隔)がゼロであるためです(fは[a、b]の連続関数であり、[〜#〜] f [〜#〜]は[a、b]のその逆導関数であり、fover [a、b] =F(a)-F(b)。ここで、a = b = x
したがって、積分の値はF(x) - F(x) = 0
)。
取得しているのは、平均50と標準偏差10の通常のpdf関数の値xでのpdfです。 ここで関数を確認してください )
使用して視覚化しやすい
npdf=norm(50,10)
plt.plot(range(0,100), npdf.pdf(range(0,100)), 'k-', lw=2)`
を使用して作成した通常のpdfからランダム変数を生成することもできます
npdf.rvs(1000) #1000 numbers
hist=plt.hist(n.rvs(10000),bins=100,normed=True)