2017-07-14 52 views
1

我想對多個滯後自變量進行線性迴歸。我試圖自動化指定滯後數的部分,即1,3,5等。會自動更新下面的代碼,並提供結果在上一步中定義的滯後。 我的代碼沒有任何「滯後」自動操作如下。在這種情況下,我指定了2個時滯:具有多個滯後自變量的線性迴歸

base::summary(stats::lm(ABX_2000$Returns ~ stats::lag(as.ts(ABX_2000$Returns),1) + 
           stats::lag(as.ts(ABX_2000$Returns),2))) 

此代碼有效!

予定義的函數如下::

# function to accept multiple lags 
lm_lags_multiple <- function(ds,lags=2){ 
    base::summary(stats::lm(ds ~ paste0("stats::lag(as.ts(ds,k=(", 1:lags, ")))", collapse = " + "))) 
} 
# run function 
lm_lags_multiple(ds=ABX_2000$Returns,lags=2) 

在運行上述功能,收到錯誤消息指出:

可變長度是不同的。

我不知道如何解決這個錯誤?在R中是否有與Python中等價的lambda函數?

+0

滯後的載體是比原來更短,通過的量落後。您可能需要用零填充滯後系列的開始,以使它們具有相同的長度。 –

+0

你好@AndrewGustar。我對R很新,也不確定如何解決這個問題。 paste0函數[paste0(「stats :: lag(as.ts(ds,k =(」,1:lags,「)))」,collapse =「+」)]返回[1]「stats :: lag( as.ts(ds,k =(1)))+ stats :: lag(as.ts(ds,k =(2))))。將此結果分配給變量會導致相同的錯誤。感謝您的幫助。 – Seb

回答

1

讓我們試試這個代碼:

lm_lags_multiple <- function(ds,lags=2){ 
    lst <- list() 
    for (i in 1:lags){ 
    lst[i] <- paste0("stats::lag(as.ts(ABX_2000$Returns),",i,")") 
    } 
    base::summary(stats::lm(as.formula(paste0("ds ~",paste(Reduce(c,lst), collapse = "+"))))) 
} 

請不要忘記,讓我們知道它的工作:)

+0

謝謝。我需要解決另一個問題,但很高興知道解決方案 – Seb