[英]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
數據。 然后,將時滯矢量timelag
到psit
矢量。 以下是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.