pandasデータフレームにニースのデータがあります。単純な線形回帰を実行したいと思います。
Statsmodelsを使用して、回帰を実行します。さて、どうすればプロットを取得できますか? statsmodelsのplot_fit
メソッドを試しましたが、プロットは少しファンキーです:
回帰の実際の結果を表す水平線を取得することを望んでいました。
Statsmodelsには 回帰をプロットするためのさまざまな方法 ( ここでそれらについてのいくつかの詳細 )がありますが、それらのいずれも超単純なようではありませんあなたのデータの」-plot_fit
が最も近いようです。
matplotlib.axes._subplots.AxesSubplot
を返すパンダのプロット関数です。そのプロットに回帰線を簡単に重ねることはできますか?関連する2つの質問:
どちらも良い答えがないようです。
@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
私はこれを試しましたが、うまくいかないようです...理由はわかりません:
コメントで述べたように、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)