Résultats différents lors de l'informatique régressions linéaires avec Scipy.Stats et StatsModels

StackOverflow https://stackoverflow.com//questions/24005243

Question

Je reçois des valeurs différentes de R ^ 2 (coefficient de détermination) lorsque j'essaie les OLS s'adapte avec ces deux bibliothèques et je ne peux pas comprendre pourquoi.(Un peu d'espacement enlevé pour votre commodité)

In [1]: import pandas as pd       
In [2]: import numpy as np
In [3]: import statsmodels.api as sm
In [4]: import scipy.stats
In [5]: np.random.seed(100)
In [6]: x = np.linspace(0, 10, 100) + 5*np.random.randn(100)
In [7]: y = np.arange(100)

In [8]: slope, intercept, r, p, std_err = scipy.stats.linregress(x, y)

In [9]: r**2
Out[9]: 0.22045988449873671

In [10]: model = sm.OLS(y, x)
In [11]: est = model.fit()

In [12]: est.rsquared
Out[12]: 0.5327910685035413

Qu'est-ce qui se passe ici?Je ne peux pas comprendre!Y a-t-il une erreur quelque part?

Était-ce utile?

La solution

Le 0.2205 provient d'un modèle qui également a une trace d'interception - la valeur 0.5328 est le résultat si vous supprimez l'interception.

Fondamentalement, un paquet est de modélisation y= bx alors que l'autre (utile) suppose que vous voudriez aussi comme un terme d'interception (c'est-à-dire y=bx ).[Remarque: l'avantage de cette hypothèse est qu'autrement, vous devriez prendre x et lier une colonne de celles à chaque fois que vous vouliez exécuter une régression (sinon vous finiriez avec un biaisé modèle)]

Vérifiez Ce message pour une discussion plus longue.

bonne chance!

Autres conseils

Ce n'est pas une réponse à la question initiale qui a été répondue.

à propos de R-carré dans une régression sans constante.

Un problème est qu'une régression sans interception n'a pas la définition standard de R ^ 2.

essentiellement, R-carré comme une bonté de la mesure d'ajustement dans un modèle avec une interception compare le modèle complet avec le modèle qui n'a qu'une interception. Si le modèle complet n'a pas d'interception, la définition standard de R ^ 2 peut produire des résultats étranges tels que négatif r ^ 2.

La définition conventionnelle dans la régression sans divise constante par la somme totale des carrés de la variable dépendante au lieu de la fraîcheur. Le r ^ 2 entre une régression avec une constante et sans ne peut pas vraiment être comparé de manière significative.

Voir par exemple le problème qui a déclenché la modification des statistiquesModels pour gérer R ^ 2 "correctement" dans la régression sans constante: https://github.com/statsmodels/statsmodels/issues/785

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top