scipy - Pythonでサンプルから与えられた値の確率を取得する方法は?

okwaves2024-01-25  11

この投稿を参照しました: https://stackoverflow.com/questions/38141951/why-does-scipy-norm-pdf-something-give-pdf-1-how-to-correct-it しかし、まだ混乱が残っています
import scipy.stats as stats
x = np.array([ 0.7972,  0.0767,  0.4383,  0.7866,  0.8091,
               0.1954,  0.6307,  0.6599,  0.1065,  0.0508])

print('mean:', x.mean())  # 0.45511999999999986
print('std', x.std())  # 0.30346538451691657

y = stats.norm.pdf(x, mean, std)
plt.plot(x, y, c='b')
plt.show()

これは、平均値の確率が 131% であることを意味しますか? 点が与えられた場合、値の確率を計算するにはどうすればよいでしょうか?これは可能ですか?

私の状況を追加してください: 連続変数では、どの点の確率も 0 であることは理解しています。 しかし、ユーザーは、データ内の 100 の確率はどのくらいですか、100 を定量化するにはどうすればよいですか? と尋ねます。

「いいえ」も参照してくださいrmed ヒストグラム y 軸が 1 より大きい

– ヨハンC

2020 年 9 月 3 日 10:42



------------------------

すでに述べたように、連続分布では x が 100 である確率は 0 です。正しい質問は、「x が 99.5 から 100.5 の間にある確率」のようなものです。これは、区間の両端の累積分布関数を減算することで計算できます。これは、その区間の曲線の下の面積にも等しくなります。

from matplotlib import pyplot as plt
import numpy as np
import scipy.stats as stats

x = np.array([0.7972, 0.0767, 0.4383, 0.7866, 0.8091,
              0.1954, 0.6307, 0.6599, 0.1065, 0.0508])

mean = x.mean()
std = x.std()
print('mean:', mean)  # 0.45511999999999986
print('std', std)  # 0.30346538451691657

val = 0.4
eps = 0.05
prob_close_to_val = stats.norm.cdf(val + eps, mean, std) - stats.norm.cdf(val - eps, mean, std)
print(f"probability of being close to {val}: {prob_close_to_val * 100:.2f} %")
# probability of being close to 0.5: 12.95 %

xs = np.linspace(mean - std * 3, mean + std * 3, 200)
ys = stats.norm.pdf(xs, x.mean(), x.std())
plt.plot(xs, ys, c='b')
plt.fill_between(xs, 0, ys, where=(xs >= val - eps) & (xs <= val + eps), color='r', alpha=0.3)
plt.ylim(ymin=0)
plt.margins(x=0)
plt.show()

y 軸の 1.3 の値を解釈するには、x が x=0.5 付近の幅 w の小さなゾーンに入る確率は 1.3/w に近くなります。 w=0.1 を選択すると、1.3/0.1、つまり約 13% になります。p>

1

あなたはとてもプロフェッショナルですね。概念を説明するコードを追加していただきありがとうございます

– ヴィンセントライ

2020 年 9 月 3 日 11:08



------------------------

使用している関数は、平均値、つまりガウスのピークにおける確率密度関数の値を計算します。

確率密度関数の整数は 1 です。これは、次のことを意味するものではありません。t 確率密度関数の値は常に 1 より小さくなければなりません。



------------------------

y は確率密度関数、x は連続変数であり、連続領域内の任意の値の確率は 0 です。連続領域に対してその値 (一般的に pdf) が意味することは、値が領域内に存在する確率が高いということです。 dx が小さいと仮定すると、間隔 (mean-dx/2、mean+dx/2) は約 1.314622*dx です (極限では dx->0 が等しくなります)。実際、pdf として中心に無限値を持つデルタ関数を使用できます (pdf の下の領域の合計が 1 である限り)。多くのための詳細については、Wikipedia をご覧ください: https://en.wikipedia.org/wiki/Probability_density_function

変数が値に等しい確率を表す離散確率変数の確率質量関数と混同しないように注意する必要があります。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。