Résultats différents lors de l'informatique régressions linéaires avec Scipy.Stats et StatsModels
-
20-12-2019 - |
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?
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
Vérifiez Ce message pour une discussion plus longue.
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