scipy linregress功能错误的标准错误返回?

Tho*_*wne 7 python regression scipy

我有一个奇怪的情况与scipy.stats.linregress似乎返回一个不正确的标准错误:

from scipy import stats
x = [5.05, 6.75, 3.21, 2.66]
y = [1.65, 26.5, -5.93, 7.96]
gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y)
>>> gradient
5.3935773611970186
>>> intercept
-16.281127993087829
>>> r_value
0.72443514211849758
>>> r_value**2
0.52480627513624778
>>> std_err
3.6290901222878866
Run Code Online (Sandbox Code Playgroud)

Excel返回以下内容:

 slope: 5.394

 intercept: -16.281

 rsq: 0.525

 steyX: 11.696
Run Code Online (Sandbox Code Playgroud)

steyX是excel的标准误差函数,返回11.696而不是scipy的3.63.谁知道这里发生了什么?在python中获得回归的标准错误的任何替代方法,而不是去Rpy

Tho*_*wne 8

我刚刚被SciPy用户组告知,std_err在这里表示梯度线的标准误差,而不是预测y的标准误差,如Excel所示.然而,这个函数的用户应该小心,因为这并不总是这个库的行为 - 它用于输出完全像Excel,并且转换似乎发生在过去几个月.

无论如何仍然在寻找与Python中的STEYX相当的东西.


ars*_*ars 6

你可以试试statsmodels包:

In [37]: import statsmodels.api as sm

In [38]: x = [5.05, 6.75, 3.21, 2.66]

In [39]: y = [1.65, 26.5, -5.93, 7.96]

In [40]: X = sm.add_constant(x) # intercept

In [41]: model = sm.OLS(y, X)

In [42]: fit = model.fit()

In [43]: fit.params
Out[43]: array([  5.39357736, -16.28112799])

In [44]: fit.rsquared
Out[44]: 0.52480627513624789

In [45]: np.sqrt(fit.mse_resid)
Out[45]: 11.696414461570097
Run Code Online (Sandbox Code Playgroud)