Resultados diferentes quando computação regressões com scipy.estatísticas e statsmodels
-
20-12-2019 - |
Pergunta
Estou recebendo diferentes valores de r^2 (coeficiente de determinação) quando eu tento OLS se encaixa com essas duas bibliotecas e eu não consigo descobrir o porquê.(Alguns espaçamento removidos para a sua conveniência)
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
O que está acontecendo aqui?Eu não consigo entender!Há um erro em algum lugar?
Solução
O 0.2205 é proveniente de um modelo que também tem uma interseção prazo--a 0.5328 valor é o resultado, se você remover o interceptar.
Basicamente, é um pacote de modelagem y = bx enquanto que o outro (útil) pressupõe que você iria também como uma interseção prazo (i.e. y = a + bx).[Nota:A vantagem deste pressuposto é o de que caso contrário, você teria de tomar x e a vincular a uma coluna de para-lo cada vez que você queria executar uma regressão (ou outra coisa que você deseja acabar com um tendenciosa o modelo)]
Confira este post para uma discussão mais longa.
Boa sorte!
Outras dicas
Esta não é uma resposta para a pergunta que foi respondida.
Cerca de R-quadrado em uma regressão sem constante.
Um problema é que uma regressão sem uma interseção não tem uma definição padrão do R^2.
Essencialmente, o R-quadrado como uma medida de qualidade do ajuste de um modelo com uma interseção, compara-se o modelo completo com o modelo que possui apenas uma interseção.Se o modelo completo não tem uma interseção, em seguida, a definição padrão de R^2 pode produzir resultados estranhos como o negativo de R^2.
A definição convencional de regressão sem constante divide-se pelo total da soma dos quadrados da variável dependente, em vez de o menosprezou.O R^2 entre uma regressão com constante e sem realmente não pode ser comparado, de forma significativa.
ver, por exemplo, o problema que provocou a mudança na statsmodels para lidar com R^2 "corretamente" no não-constante de regressão: https://github.com/statsmodels/statsmodels/issues/785