私は、特定の値、すなわちpr(x> a)を超える確率変数の事象の確率を見出そうとしています。ここで、aはある定数であり、通常はxの平均xは標準的なガウス分布ではない。だから私は他の確率密度関数に合って、xのpdfをaからinfに取って欲しかった。これはスパイクのモデリングの問題であるため、これを極値解析の問題とみなし、ワイブル分布が適切かもしれないことがわかりました。確率密度のリーマン和
極値分布に関して、ワイブル分布は非常に「実装が容易ではない」積分を持っているため、私はScipyからpdfを得てRiemann-sumを行うことができたと考えました。私はまた、カーネル密度を単純に評価し、pdfを取得し、リーマン和で同じことを行い、積分を近似することもできると考えました。
私はPythonでリーマンサムを行うためのきちんとした方法を提供したスタック上のQを見つけました。私はそのコードを自分の問題に合わせて修正しました。しかし、積分を評価すると、私は奇妙な数を得て、何かがKDEやリーマン和関数のどちらかに間違っていることを示します。
x = theData
x_grid = np.linspace(0,np.max(x),len(x))
p = ss.weibull_min.fit(x[x!=0], floc=0)
pd = ss.weibull_min.pdf(x_grid,p[0], p[1], p[2])
次のようになります:scipyのダウンロードマニュアルに従って
2つのシナリオ、ワイブルと最初、次のように
ともKDEの方法を試し
pd = ss.gaussian_kde(x).pdf(x_grid)
LY次の関数を介して実行:ワイブルの場合
def riemannSum(a, b, n):
dx = (b - a)/n
s = 0.0
x = a
for i in range(n):
s += pd[x]
x += dx
return s * dx
print(riemannSum(950.0, 1612.0, 10000))
print(riemannSum(0.0, 1612.0, 100000))
、それは私に
>> 0.272502150549
>> 18.2860384829
を与え、KDEの場合には、私は
>> 0.448450460469
>> 18.2796021034
を得るこれがあります明らかに間違っています。全体の積分を取ると私に1が与えられ、18.2+はかなり遠いです。
私はこれらの密度関数で何ができるのか間違っていますか?または私はリーマン和機能のいくつかのミスを犯している
リーマンサムコード:https://en.wikipediaをよくご覧ください。org/wiki/Riemann_sum –
積分を数値的に計算することは大きな問題ですが、目標が実際にテール確率を計算するのであれば、Weibull分布のScipyクラスにはすでに 'cdf'メソッドがあります。 –