2017-08-11 7 views
0

私はstatsmodelを使用していますし、これは私がマルチリニア回帰を生成するために使用しているコードです:Python:統計モデル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は小さな残差で局所的に2次式なので、その答えのような重みによるデータの再スケーリングは近似として働くことができます。しかし、それは、各観測による目的関数への寄与に重みを加えることと等価ではない。

関連する問題