我在pandas数据框中有一些不错的数据。我想对它进行简单的线性回归:
使用statsmodels,我执行回归。现在,我如何得到我的情节?我尝试过statsmodels' plot_fit
方法,但情节有点时髦:
我希望得到一条代表回归实际结果的水平线。
Statsmodels有一个variety of methods for plotting regression(a few more details about them here),但它们似乎都不是超级简单的"只是在你的数据上绘制回归线" - plot_fit
似乎是最接近的事情。
matplotlib.axes._subplots.AxesSubplot
。我可以轻松地将回归线叠加到该图上吗? 两个相关问题:
似乎都没有一个好的答案。
根据@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
我试过这个,但它似乎没有用......不确定原因:
答案 0 :(得分:17)
正如我在评论中提到的,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)