Как построить линейную регрессию statsmodels (OLS) чисто
Постановка Задачи:
у меня есть хорошие данные в фрейме данных pandas. Я хотел бы запустить на нем простую линейную регрессию:
используя statsmodels, я выполняю регрессию. Теперь, как мне получить мой участок? Я пробовал statsmodels' plot_fit
метод, но сюжет немного фанки:
Я надеялся получить горизонтальную линию, которая представляет собой фактический результат регрессия.
Statsmodels есть разнообразие методов построения регрессии (еще несколько подробностей о них здесь) но ни один из них не кажется супер простым "просто построить линию регрессии поверх ваших данных"-- plot_fit
кажется, ближе всего.
вопросы:
- первое изображение выше из функции графика панды, которая возвращает
matplotlib.axes._subplots.AxesSubplot
. Могу ли я легко наложить линию регрессии на этот участок? - есть ли функция в statsmodels, которую я пропустил?
- есть ли лучший способ собрать эту цифру?
два вопроса:
- построение результатов линейной регрессии панд OLS
- получение линии регрессии для построения из регрессии панд
ни один из них, кажется, не имеет хорошего ответа.
пример данных
As запрошено @IgorRaush
motifScore expression
6870 1.401123 0.55
10456 1.188554 -1.58
12455 1.476361 -1.75
18052 1.805736 0.13
19725 1.110953 2.30
30401 1.744645 -0.49
30716 1.098253 -1.59
30771 1.098253 -2.04
abline_plot
Я пробовал это, но, похоже, это не работает... не знаю, почему:
1 ответов
как я уже упоминал в комментариях, seaborn
является отличным выбором для визуализации статистических данных.
import seaborn as sns
sns.regplot(x='motifScore', y='expression', data=motif)
кроме того, вы можете использовать statsmodels.regression.linear_model.OLS
и вручную постройте линию регрессии.
import statsmodels.api as sm
# regress "expression" onto "motifScore" (plus an intercept)
model = sm.OLS(motif.expression, sm.add_constant(motif.motifScore))
p = model.fit().params
# generate x-values for your regression line (two is sufficient)
x = np.arange(1, 3)
# scatter-plot data
ax = motif.plot(x='motifScore', y='expression', kind='scatter')
# plot regression line on the same axes, set x-axis limits
ax.plot(x, p.const + p.motifScore * x)
ax.set_xlim([1, 2])
еще одно решение statsmodels.graphics.regressionplots.abline_plot
что отнимает часть шаблона от вышеуказанного подход.
import statsmodels.api as sm
from statsmodels.graphics.regressionplots import abline_plot
# regress "expression" onto "motifScore" (plus an intercept)
model = sm.OLS(motif.expression, sm.add_constant(motif.motifScore))
# scatter-plot data
ax = motif.plot(x='motifScore', y='expression', kind='scatter')
# plot regression line
abline_plot(model_results=model.fit(), ax=ax)