Python:如何对statsmodel-HuberT线性回归进行时间加权?

2024-04-24 22:01:25 发布

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

我使用statsmodel,这是我用来生成多线性回归的代码:

def regression():
    Data = pd.read_csv("CSV_file")
    DependentVariable = Data[["Variable1"]].values.tolist()
    IndependentVariables = Data[["Variable2","Variable3","Variable4"]].values.tolist()

    huber_t = sm.RLM(DependentVariable, IndependentVariables, M=sm.robust.norms.HuberT())

    hub_results = huber_t.fit()
    return hub_results.summary()

这会产生正常输出。不过,我还想对我的数据进行加权,以便较新的数据比旧的数据更重要。我在考虑用某种指数衰减来计算重量。在计算线性回归时,有没有办法把这个权重考虑进去?在


Tags: 数据代码datadef线性resultshubsm
2条回答

目前无法使用这种权重。在

有关答案,请参见statsmodels weights in robust linear regression。在

因为在小残差下,HuberT局部是二次的,所以通过该答案中的权重重新缩放数据可以作为近似值。然而,它并不等同于通过每次观察对目标函数的贡献增加权重。在

这页上有一个指数衰减的缩放例子,但我不确定同样的技术是否适用(也许它只在绘图的上下文中有效,但是你可以尝试缩放自己的变量) http://blog.yhat.com/posts/predicting-the-presidential-election.html

weight <- function(i) {
  exp(1)*1 / exp(i)
}

w <- data.frame(poll=1:8, weight=weight(1:8))
ggplot(w, aes(x=poll, weight=weight)) +
  geom_bar() +
  scale_x_continuous("nth poll", breaks=1:8) +
  scale_y_continuous("weight")

或者,您可以使用numpy生成一个指数衰减序列,答案如下:

Pandas: Exponentially decaying sum with variable weights

相关问题 更多 >