如何在Python中解决线性回归等于零的最后x值条件

2024-05-29 04:05:40 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一些数据,我可以用scipy.stats.lin回归 例如:

import numpy as np
from scipy import stats

data = np.array([1, 2, 3, -1, -2, -7, -8, 6, 11])
x = np.arange(len(data))
slope = stats.linregress(x, data)[:1]

如你所见,我可以得到线性回归的斜率; 但是我想给数据加一个x值,使斜率等于零 我怎么才能解这个x?谢谢


Tags: 数据fromimportnumpydatalenasstats
1条回答
网友
1楼 · 发布于 2024-05-29 04:05:40

我从这里得到了斜坡的数学-https://www.statisticshowto.datasciencecentral.com/probability-and-statistics/regression-analysis/find-a-linear-regression-equation/#FindaLinear

假设您打算:

import numpy as np
from spicy import stats
y = np.array([1,2,3,-1,-2,-7,-8,6,11])
x = np.array(range(0,len(y)))
slope = stats.linregress(x,y).slope

在上面的设置中,您需要向y附加一个值,并将x修改为新的np.array(range(0,len(y))),这样回归的新斜率将等于0。那么,计算附加在y上的额外数字实际上非常简单。你知道吗

使用上面链接中提供的斜率公式(b),并执行以下操作:

  1. (n+1)替换n
  2. (n+1)添加到sum(x)
  3. 将未知变量i添加到sum(y)
  4. (n+1)i添加到sum(x*y)

一旦你这样做了,解i的方程,你就会得到你需要的方程来计算这个值。这就是它的作用:

In [1]: import numpy as np 
   ...: from scipy import stats                                                                                                                                                                                                                                                                                         

In [2]: y = data = np.array([1,2,3,-1,-2,-7,-8,6,11])

In [3]: x = np.array(range(0,len(data)))                                                                                                                                                                                                                                                                                

In [4]: n = len(data)                                                                                                                                                                                                                                                                                                   

In [5]: slope = stats.linregress(x,y).slope                                                                                                                                                                                                                                                                             

In [6]: slope                                                                                                                                                                                                                                                                                                           
Out[6]: 0.4

In [11]: def append_computer(x,y): 
...:     n = len(x) 
...:     m = n+1 
...:     if ((m**2) - sum(x) - m) > 0: 
...:         num = (-1*m*(sum(x*y))+(sum(x)*sum(y))+m*sum(y))/((m**2) - sum(x) - m) 
...:         return num 
...:     else: 
...:         raise ValueError(f"Solution not possible")

In [12]: stats.linregress(np.append(x,n+1), np.append(y,append_computer(x,y))).slope                                                                                                                                                                                                                                    
Out[12]: 0.0

相关问题 更多 >

    热门问题