kdeplot()でなくても、カーネル密度推定のグラフから求める方法が有れば教えて頂きたいです。
##質問内容
Python
1kdeplot()
で描写されるグラフに関して、お聞きしたいことがあります。
有意水準5%地点のx軸の値を調べる方法はないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
以下のようにすればよいと思います。
- scipy.stats.gaussian_kde() でカーネル密度推定を行い、確率密度関数 (pdf) を得る。
- scipy.integrate.cumtrapz で pdf を全区間で積分し、累積分布関数 (cdf) を求める。
- numpy.searchsorted() で P(X <= x) = 0.05 ⇔ cdf(x) = 0.05 となる点 x を求める。
python
1from scipy.stats import gaussian_kde 2from scipy.integrate import cumtrapz 3import numpy as np 4import matplotlib.pyplot as plt 5 6np.random.seed(0) 7 8# 平均0、分散1の1変量正規分布に従う確率変数 (適当なサンプルを用意) 9rv = norm(loc=0, scale=1) 10samples = rv.rvs(1000) # 標本作成 11 12# 標本から KDE で推定する。 13kernel = gaussian_kde(samples) 14 15xs = np.linspace(-10, 10, 3000) # 積分範囲 16ys = kernel(xs) 17 18cdf = cumtrapz(ys, xs) # 積分して累積分布関数を求める。 19 20# cdf(x) = 0.05 となる x を求める。 21idx = np.searchsorted(cdf, 0.05) 22print(xs[idx]) 23 24# 可視化 25fig, ax = plt.subplots() 26ax.plot(xs, rv.pdf(xs), label="確率密度関数") 27ax.plot(xs, kernel(xs), label="KDE で推論した確率密度関数") 28ax.fill_between(xs[:idx], 0, ys[:idx], facecolor="b", alpha=0.5) 29ax.legend(loc="upper left") 30ax.set_xlim(-5, 5) 31ax.grid() 32plt.show()
投稿2020/02/19 05:42
編集2020/02/19 05:44総合スコア21956
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。