web-dev-qa-db-ja.com

PythonでPDF(確率密度関数))を計算するにはどうすればよいですか?

特定の平均と標準偏差のPDFグラフを出力する以下のコードがあります。

http://imgur.com/a/oVgML

次に、特定の値の実際の確率を見つける必要があります。たとえば、平均が0で、値が0の場合、確率は1です。これは通常、曲線の下の面積を計算することによって行われます。これに似ています:

http://homepage.divms.uiowa.edu/~mbognar/applets/normal.html

この問題への取り組み方がわからない

import numpy as np
import matplotlib    
import matplotlib.pyplot as plt

def normal(power, mean, std, val):
    a = 1/(np.sqrt(2*np.pi)*std)
    diff = np.abs(np.power(val-mean, power))
    b = np.exp(-(diff)/(2*std*std))
    return a*b

pdf_array = []
array = np.arange(-2,2,0.1)
print array
for i in array:
    print i
    pdf = normal(2, 0, 0.1, i)
    print pdf
    pdf_array.append(pdf)

plt.plot(array, pdf_array)
plt.ylabel('some numbers')
plt.axis([-2, 2, 0, 5])
plt.show()

print 
6
Raaj

これを自分で実装する理由がない限り。これらの関数はすべて scipy.stats.norm で利用できます。

cdfを要求して、次のコードを使用すると思います:

from scipy.stats import norm
print(norm.cdf(x, mean, std))
5
martinako

_x = a_から_x = b_までの曲線y = f(x)の下の領域は、_x = a_から_x = b_までのf(x)dxの積分と同じです。 。 Scipy を使用すると、積分をすばやく簡単に行うことができます。そして、あなたが理解しているように、その領域で単一の点を見つける確率は1ではありません。なぜなら、曲線の下の総面積は1であるという考えです(それがデルタ関数である場合を除きます)。したがって、関心のある特定の値に対して_0 ≤ probability of value < 1_を取得する必要があります。それを行うにはさまざまな方法があるかもしれませんが、従来の方法は、x軸に沿って信頼区間を割り当てることです (like this )。コーディングを続ける前に、ガウス曲線と正規化について調べておきます。

4
MPath