当我尝试使用这两个库时,我得到了不同的r ^ 2(系数)值(确定系数),我不能弄清楚为什么。(为您的方便起见,除去一些间距)

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
.

这里发生了什么?我无法弄清楚!某处有错误吗?

有帮助吗?

解决方案

0.2205来自也具有截距截距的模型 - 如果删除拦截,则为0.5328值。

基本上,一个包是建模 y= bx ,而另一个(有用)假设您也会像拦截术语一样(即 y= a +bx )。[注意:此假设的优点是您必须使用 x 并每次想要运行回归(或者您最终结束时都会绑定一列偏置模型)]

签出/ a>更长的讨论。

祝你好运!

其他提示

这不是已经回答的原始问题的答案。

在没有常数的情况下在回归中平方。

一个问题是没有拦截的回归没有R ^ 2的标准定义。

基本上,作为具有截距的模型中的拟合度量的良好度,将完整模型与仅具有截距的模型进行比较。如果完整模型没有拦截,则R ^ 2的标准定义可以产生奇怪的结果,如负r ^ 2。

回归中的传统定义而不恒定地除以从属变量的总线之和而不是侦探。 r ^ 2之间的回归与常数没有真正的方式以有意义的方式进行比较。

参见例如触发statsmodels更改的问题,以在禁止常量回归中处理r ^ 2“正确”: https://github.com/statsmodels/statsmodels/issues/785

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top