4

通常分布し、pdf を当てはめたデータがいくつかあります。ただし、データセットから特定の値が発生する可能性の確率を取得したいと考えています。私の理解では、これは x の値が存在する pdf の下のビンの領域です。これを生成する numpy または scipy.stats 関数はありますか? 私は見ましたが、私はそれを見ていないか、私の理解不足が私を妨げています. これまでのところ、私は持っています:

import h5py
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.mlab as mlab
import scipy.stats as stats
import numpy
import math


a = 'data.h5'
f = h5py.File(a,'r')
dset = f['/DATA/DATA/']
values = dset[...,0]

次に、このデータのヒストグラムを生成し、それに pdf を当てはめることができます。

n, bins, patches = plt.hist(values, 50, normed=1)
mu = np.mean(values)
sigma = np.std(values)

plt.plot(bins, mlab.normpdf(bins, mu, sigma))

plt.show()

そして、x の特定の値 (この場合は 0.65) の f(x) を取得できます。

print(stats.norm.pdf(0.65, np.mean(mb1), np.std(mb1)))  

誰かがこれから私の確率を生成するのを手伝ってくれますか?

出力されたヒストグラムをpdfで添付しました。

PDFがオーバーレイされたヒストグラム

4

1 に答える 1

10

理想的には、確率が必要なイベントの範囲で確率密度関数を積分することです。ここにいくつかのコードがあります:

import numpy as np
import scipy.stats as ss

a = ss.norm.rvs(4, 2, 40)
hist(a, normed=True)

xs = np.linspace(0, 10, 30)
plot(xs, ss.norm.pdf(xs, 4, 2), label='pdf')
plot(xs, ss.norm.cdf(xs, 4, 2), label='cdf')

これにより、シグマ値 2 で値 4 を中心とする正規分布が生成されます。下の図では、赤い線で pdf を、紫の線で cdf をトレースしています。累積分布関数は、負の無限大から計算される値までの pdf の単純な積分です。したがって、ある範囲で pdf の積分を取得するには、範囲の 2 つの端点で cdf 値を差し引くだけです。

ここに画像の説明を入力

ここで、-100 から 4 の間の値が表示される確率はどのくらいかを尋ねることができます。

print  ss.norm.cdf(4, 4, 2) - ss.norm.cdf(-100, 4, 2)

0.5これは、分布全体の (ほとんど) 半分に相当するの予想される答えになります。したがって、あなたの場合、0.60 から 0.70 の間の値が表示される確率に関心があるかもしれません。

print  ss.norm.cdf(0.70, 4, 2) - ss.norm.cdf(0.60, 4, 2)

これにより、次の小さな確率が発生するはずです。

0.00490600527511

連続確率分布があり、0.65 の正確な値はそのごくわずかな部分であるため、0.65 自体の「確率」は無意味であることに注意してください。したがって、その確率は 0 です。

于 2014-03-11T19:23:26.217 に答える