簡體   English   中英

具有順序時滯的循環數據輸出線性回歸系數

[英]Loop Through Data with Sequential Time Lags output Linear Regression Coefficients

我有一個像這樣的數據集:

 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向量,其中包含與psit變量psit一個月的var數據。 然后,將時滯矢量timelagpsit矢量。 以下是1個月偏移,2個月偏移,3個月偏移,尊重程度的數據幀示例:

 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

對於每個數據psit ,我想使用lm()函數針對psit數據回歸var並輸出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平方值。

嘗試使用dyn包,該包允許lm處理Zoo和其他時間序列對象:

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

請注意,通常,如果使用滯后k,那么也將包括所有較小的k值。 在這種情況下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM