web-dev-qa-db-ja.com

Python)のLOWESSの信頼区間

PythonでLOWESS回帰の信頼区間を計算するにはどうすればよいですか?これらを影付きの領域として、次のコードで作成されたLOESSプロットに追加したいと思います(statsmodels以外のパッケージも問題ありません)。

import numpy as np
import pylab as plt
import statsmodels.api as sm

x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.2
lowess = sm.nonparametric.lowess(y, x, frac=0.1)

plt.plot(x, y, '+')
plt.plot(lowess[:, 0], lowess[:, 1])
plt.show()

以下のウェブブログから信頼区間のプロット例を追加しました Serious Stats (Rのggplotを使用して作成されています)。

enter image description here

25
pir

LOESSには、標準エラーの明確な概念がありません。この文脈では何の意味もありません。それが終わったので、あなたは力ずくのアプローチで立ち往生しました。

データをブートストラップします。ブートストラップされたデータにLOESS曲線を適合させます。このページの真ん中を見て、あなたがしていることのきれいな絵を見つけてください。 http://statweb.stanford.edu/~susan/courses/s208/node20.html

enter image description here

多数の異なるLOESS曲線を取得すると、上部と下部のXパーセンタイルを見つけることができます。

enter image description here

13
James Natale

これは非常に古い質問ですが、グーグル検索で最初に出てくる質問の1つです。これは、scikit-miscのloess()関数を使用して実行できます。次に例を示します(元の変数名を保持しようとしましたが、ノイズを少し上げて見やすくしました)

import numpy as np
import pylab as plt
from skmisc.loess import loess

x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.4

l = loess(x,y)
l.fit()
pred = l.predict(x, stderror=True)
conf = pred.confidence()

lowess = pred.values
ll = conf.lower
ul = conf.upper

plt.plot(x, y, '+')
plt.plot(x, lowess)
plt.fill_between(x,ll,ul,alpha=.33)
plt.show()

結果:

loess smooth with CI

6
Derek Powell