Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy linregress函数错误标准错误返回?_Python_Scipy_Regression - Fatal编程技术网

Python scipy linregress函数错误标准错误返回?

Python scipy linregress函数错误标准错误返回?,python,scipy,regression,Python,Scipy,Regression,我对scipy.stats.linregresse有一个奇怪的情况,它似乎返回了一个错误的标准错误: 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 >

我对scipy.stats.linregresse有一个奇怪的情况,它似乎返回了一个错误的标准错误:

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
鉴于Excel返回以下内容:

 slope: 5.394

 intercept: -16.281

 rsq: 0.525

 steyX: 11.696

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

我刚刚从SciPy用户组获悉,这里的标准误差表示梯度线的标准误差,而不是Excel中预测的y的标准误差。尽管如此,此函数的用户还是应该小心,因为这并不总是这个库的行为——它过去的输出方式与Excel完全相同,而且这种转换似乎是在过去几个月发生的

无论如何,我们仍然在寻找一个与Python中的STEYX等价的版本

您可以尝试以下软件包:


是的,这是真的-梯度的标准估计是回归的结果;但是,估计值(Y)的标准估计值是相关的,您可以通过乘以linregress提供给您的梯度(SEG)的标准误差返回SEE:SEG=SEE/sqrt(X-平均值X的和)**2)

Stack Exchange不处理latex,但如果您有兴趣,可以在“分析样本数据”标题下进行计算

excel中“y上的标准误差”的计算实际上是y值的标准偏差

x上的std错误也是如此。最后一步中的数字“2”是您给出的示例的自由度

>>> x = [5.05, 6.75, 3.21, 2.66]
>>> y = [1.65, 26.5, -5.93, 7.96]
>>> def power(a):
        return a*5.3936-16.2811

>>> y_fit = list(map(power,x))
>>> y_fit
[10.956580000000002, 20.125700000000005, 1.032356, -1.934123999999997]
>>> var = [y[i]-y_fit[i] for i in range(len(y))]
>>> def pow2(a):
        return a**2

>>> summa = list(map(pow2,var))
>>> summa
[86.61243129640003, 40.63170048999993, 48.47440107073599, 97.89368972737596]
>>> total = 0
>>> for i in summa:
        total += i
>>> total
273.6122225845119
>>> import math
>>> math.sqrt(total/2)
11.696414463084658

这将为您提供一个与使用python的STEYX等效的版本:

fit = np.polyfit(x,y,deg=1)
n = len(x)
m = fit[0]
c = fit[1]
y_pred = m*x+c
STEYX = (((y-y_pred)**2).sum()/(n-2))**0.5
print(STEYX)

明亮的谢谢你。正是我需要的,我明白了。谢谢。你找到了吗?@user32882这个帖子中有多个答案可以回答这个问题。
fit = np.polyfit(x,y,deg=1)
n = len(x)
m = fit[0]
c = fit[1]
y_pred = m*x+c
STEYX = (((y-y_pred)**2).sum()/(n-2))**0.5
print(STEYX)