1

我有一个包含 2 列的时间序列数据集:x 是“每小时”连续温度数据,y 是几周内定期采样的响应数据(每天早上 5 点、下午 2 点、晚上 8 点定期采样)。

我想做两种滞后方法来分析数据

1) 绘制我所有的 y 数据(常数)与越来越滞后的 x 数据(以 1 小时的步长将 x 数据移动 0-24 小时),即下午 6 点的 x 和下午 6 点的 y;x 下午 5 点 vs y 下午 6 点 ...... x(前一天下午 5 点) vs y(下午 6 点)

2) 与 1) 相同,但累积偏移,即 0:24 的“时间倒退”累积滞后窗口,x 数据的步长为 1,并针对 y 数据进行测试,即下午 6 点的 x 与下午 6 点的 y;x(平均下午 5 点和 6 点)vs y 下午 6 点...... x(平均下午 6 点 - 前一天下午 5 点)vs y(下午 6 点)

我想为每个滞后场景(0 - 24)绘制“y”与“移位 x”的线性模型(lm),并制作一个表格,其中包含滞后数列、lm 的 p 值;和调整。R2 of lm) 所以我可以看到“x”中的哪个滞后和累积平均滞后最能解释 y 数据。

本质上它与“cummean”或“rollapply”函数相同,但在向后方向工作,但我在 R 中找不到任何这样做的东西。翻转 X 数据不起作用,因为需要维护数据的顺序,因为我需要在 x 中延迟几个 y

我猜想它需要一个“for”循环来遍历每个滞后的所有数据,其中“i”是滞后

0 滞后的单次运行将是这样的:

#Creating dummy data 

x<- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16))
y<- zoo(c(rep("NA",3),40,rep("NA",3),45,rep("NA",3),50,rep("NA",3),40), as.Date(1:16))
z<-merge(x, y, all = FALSE)
z

reslt<-lm(z$y~z$x)
a<-summary(reslt)$coefficients[2,4]
b<-summary(reslt)$adj.r.squared

ResltTable<-c(a,b)
colnames(ResltTable)<-c("p-value","Adj. R^2")

谢谢 !

4

1 回答 1

0

这将回归yxi 周期前迭代 i 的值。请注意,在应该使用 NA 的地方使用了“NA”。此外,问题是指每小时但提供每日数据,因此我们显示每日滞后。dyn$lm运行lm添加自动对齐。(请注意,昨天向 CRAN 发布了一个新版本的 dyn,该版本解决了 R 的开发版本中 R 的变化。)我们已经为滞后 0、1、2、...、10 运行了这个,但如果你有更多数据,你可以将其运行到更高的值。如果您想在相反方向上滞后,请替换-iiin lag。如果您想使用从 0 到 i 的所有滞后,请适当地使用lag(x, 0:-i)和调整cbind语句。

library(dyn) # also loads zoo


x <- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16))
y <- zoo(c(rep(NA,3),40,rep(NA,3),45,rep(NA,3),50,rep(NA,3),40), as.Date(1:16))
z < -merge(x, y, all = FALSE)
z


k <- 10 # highest lag to consider
tab <- t(sapply(0:10, function(i) {
  fm <- dyn$lm(y ~ lag(x, -i), z)
  s <- summary(fm)
  cbind(i, coef(fm)[1], coef(fm)[2], coef(s)[2, 4], s$adj.r.squared)
}))
colnames(tab) <- c("Lag", "Intercept", "Slope", "P Value", "Adj R Sq")
tab

给予:

> tab
      Lag  Intercept       Slope    P Value   Adj R Sq
 [1,]   0 -13.750000   5.0000000 0.04653741  0.8636364
 [2,]   1  -2.542373   3.8983051 0.09717103  0.7226502
 [3,]   2  -1.944444   3.8888889 0.29647353  0.2424242
 [4,]   3  14.651163   2.5581395 0.49421946 -0.1162791
 [5,]   4  70.357143  -2.1428571 0.78770438 -0.7857143
 [6,]   5  53.571429  -0.7142857 0.87896228 -0.9285714
 [7,]   6  58.461538  -1.1538462 0.84557904 -0.8846154
 [8,]   7  57.884615  -1.1538462 0.84557904 -0.8846154
 [9,]   8 160.000000 -10.0000000        NaN        NaN
[10,]   9 102.500000  -5.0000000        NaN        NaN
[11,]  10 120.000000  -6.6666667        NaN        NaN
于 2016-12-14T13:06:11.630 回答