2017-09-17 65 views
1

我有一個數據集,像這樣:環通與連續的時間滯後數據輸出線性迴歸係數

set.seed(242) 
df<- data.frame(month=order(seq(1,20,1),decreasing=TRUE), 
psit=sample(1:100,20,replace=TRUE), var=sample(1:10,20, 
replace=TRUE)) 

我希望做粗時滯分析,看看如何滯後var數據影響psit數據。如此粗略分析中所定義的滯後,從每個psit數據點開始是var數據T-1,T-2,T-3等。

要查看前幾個月var數據如何影響psit數據,我想提出一個timelag載體,它由var數據單月從該psit變量偏移量爲的。然後,我會將timelag矢量綁定到psit矢量。下面是有偏移dataframes爲1個月的實施例中,2個月偏移,3個月偏移,respectivley:

set.seed(242) 
timelag1<- cbind(df[1:12,2], df[2:13,3]) #1 month time lag 
timelag2<- cbind(df[1:12,2], df[3:14,3]) #2 month time lag 
timelag3<- cbind(df[1:12,2], df[4:15,3]) #3 month time lag 

對於每個數據幀,我想var針對psit數據使用lm()功能和輸出將R倒退平方值。這個過程將對每個後續偏移重複。示例如下:

model1<-lm(timelag1) 
summary(model1)$r.squared 
model2<-lm(timelag2) 
summary(model2)$r.squared 
model3<-lm(timelag3) 
summary(model3)$r.squared 

我想創建一個循環,爲240個月的大數據集迭代此過程。然後在每個數據幀上運行一個lm(),然後輸出r平方值。

回答

0

嘗試達因包,其允許lm處理動物園等的時間序列的對象:通常若用延遲爲k然後一個還包括k的所有更小的值以及

library(dyn) 

z <- read.zoo(df) 
models <- lapply(1:3, function(i) dyn$lm(psit ~ lag(var, -i), tail(z, 12+i))) 
sapply(models, function(x) summary(x)$r.squared) 
## [1] 0.31209189 0.04923393 0.09995727 

注。在這種情況下:

models <- lapply(1:3, function(i) dyn$lm(psit ~ lag(var, -(1:i)), tail(z, 12+i))) 
do.call("anova", models) 

,並提供:

Model 1: psit ~ lag(var, -(1:i)) 
Model 2: psit ~ lag(var, -(1:i)) 
Model 3: psit ~ lag(var, -(1:i)) 
    Res.Df RSS Df Sum of Sq  F Pr(>F) 
1  10 8688.5       
2  9 8221.7 1 466.73 0.4545 0.5192 
3  8 8215.5 1  6.24 0.0061 0.9398 
+0

謝謝你的幫助@G。格羅騰迪克。我爲您提供的兩個選項都收到了錯誤。 'lag(var, - (1:i))中的錯誤:n必須是一個單一的正整數'。您是否能夠註釋代碼,以便我理解這些論據如何幫助實現結果? – Danielle

+0

我應該注意到,當我使用'read.zoo()'讀取df時,'month'列被刪除,df只包含'psit'和'var'變量。這是否應該發生? – Danielle

+0

具體來說,'dyn'參數中'tail(z,12 + i)'和'lapply'命令中'1:3'做了什麼?在我的例子中,我有3個模型可以使迴歸更有趣,但是如果我的數據集可以迭代到12個月或更長,那麼1:3是否會將分析限制爲三個滯後,因此有三個模型? – Danielle