2017-08-11 116 views
0

我使用statsmodel,這是我使用生成一個多元線性迴歸代碼:Python:如何根據statsmodel HuberT線性迴歸對時間數據進行加權?

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() 

這給出了一個正常的輸出。但是,我還想對我的數據進行加權處理,以使最近的數據比舊數據更重要。我正在考慮使用某種指數衰減來計算權重。計算線性迴歸時,是否有任何方法可以考慮這個權重?

回答

0

在這個頁面上有一個縮放指數衰減的例子,但我不確定相同的技術是否適用於您(也許它只適用於繪圖環境,但您可以嘗試縮放自己的變量) 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

0

目前無法使用這種權重。

查看statsmodels -- weights in robust linear regression的相關答案。

由於HuberT在小殘差處是二次局部的,因此在該答案中通過權重重新縮放數據可以用作近似值。然而,這並不等同於通過每次觀察對目標函數的貢獻加權。