Доверительный интервал для LOWESS в Python
Как бы я вычислил доверительные интервалы для регрессии LOWESS в Python? Я хотел бы добавить их как заштрихованную область в график 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()
Я добавил примерный график с доверительным интервалом ниже от webblog Серьезная статистика (он создается с использованием ggplot в R).
![enter image description here]()
Ответы
Ответ 1
LOESS не имеет явного понятия стандартной ошибки. В этом контексте это ничего не значит. С тех пор вы застряли с подходом грубой силы.
Загрузите свои данные. Ваш подход подходит к кривой LOESS для загруженных данных. Посмотрите на середину этой страницы, чтобы найти красивую картину того, что вы делаете. http://statweb.stanford.edu/~susan/courses/s208/node20.html
![введите описание изображения здесь]()
Как только у вас будет большое количество различных кривых LOESS, вы можете найти верхний и нижний X-ый процентили.
![введите описание изображения здесь]()
Ответ 2
Это очень старый вопрос, но он один из первых, который появляется в поиске Google. Вы можете сделать это, используя функцию loess() из scikit-misc. Вот пример (я попытался сохранить ваши исходные имена переменных, но немного увеличил шум, чтобы сделать его более заметным)
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]()