J'ai quelques belles données dans un cadre de données pandas. Je voudrais exécuter une régression linéaire simple dessus:
À l'aide de modèles statistiques, j'effectue ma régression. Maintenant, comment puis-je obtenir mon intrigue? J'ai essayé les modèles de statistiques plot_fit
méthode, mais l'intrigue est un peu géniale:
J'espérais obtenir une ligne horizontale qui représente le résultat réel de la régression.
Statsmodels a un variété de méthodes pour tracer la régression ( quelques détails supplémentaires à leur sujet ici ) mais aucun ne semble être le super simple "tracer juste la ligne de régression en haut de vos données "- plot_fit
semble être la chose la plus proche.
matplotlib.axes._subplots.AxesSubplot
. Puis-je superposer facilement une ligne de régression sur ce tracé?Deux questions connexes:
Aucun des deux ne semble avoir une bonne réponse.
Comme demandé par @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
J'avais essayé, mais cela ne semble pas fonctionner ... je ne sais pas pourquoi:
Comme je l'ai mentionné dans les commentaires, seaborn
est un excellent choix pour la visualisation de données statistiques.
import seaborn as sns
sns.regplot(x='motifScore', y='expression', data=motif)
Vous pouvez également utiliser statsmodels.regression.linear_model.OLS
et tracez manuellement une ligne de régression.
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])
Encore une autre solution est statsmodels.graphics.regressionplots.abline_plot
ce qui enlève une partie du passe-partout de l'approche ci-dessus.
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)