質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4095閲覧

カーネル密度推定sns.kdeplot()の面積を求めたいです

BASEBALL-Y

総合スコア67

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/02/19 00:14

##質問内容

Python

1kdeplot()

で描写されるグラフに関して、お聞きしたいことがあります。
有意水準5%地点のx軸の値を調べる方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BASEBALL-Y

2020/02/19 00:16

kdeplot()でなくても、カーネル密度推定のグラフから求める方法が有れば教えて頂きたいです。
guest

回答1

0

ベストアンサー

以下のようにすればよいと思います。

  1. scipy.stats.gaussian_kde() でカーネル密度推定を行い、確率密度関数 (pdf) を得る。
  2. scipy.integrate.cumtrapz で pdf を全区間で積分し、累積分布関数 (cdf) を求める。
  3. 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
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問