及时倒退 rollapply
Backwards in time rollapply
我有一个包含 2 列的时间序列数据集:x 是 "hourly" 连续温度数据,y 是几周内定期采样的响应数据(每天早上 5 点、下午 2 点、晚上 8 点定期采样)。
我想采用 2 种滞后方法来分析数据
1) 绘制我所有的 y 数据(常数)与越来越滞后的 x 数据(以 1 小时为步长将 x 数据移动 0-24 小时),即下午 6 点的 x 与下午 6 点的 y; x 下午 5 点 vs y 下午 6 点...... x(前一天下午 5 点)vs y(下午 6 点)
2) 与 1) 相同,但有累积偏移,即 "backward in time" 累积滞后 window of 0:24,x 数据步长为 1,并针对 y 数据进行测试
即下午 6 点的 x 与下午 6 点的 y; x(平均下午 5 点和下午 6 点)vs y 在下午 6 点...... x(前一天下午 6 点 - 下午 5 点的平均值)vs y(下午 6 点)
我想为每个滞后场景 (0 - 24) 绘制 "y" 与 "shifted x" 的线性模型 (lm),并制作一个 table,其中有一列用于滞后,lm 的 p 值;和调整。 lm 的 R2)所以我可以看到 "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")
谢谢!
这将回归 y
对 x
i 周期前迭代 i 的值。请注意,问题中应使用 NA 的地方使用了 "NA"。该问题还涉及每小时但提供每日数据,因此我们显示每日滞后。 dyn$lm
运行s lm
添加自动对齐。 (请注意,昨天向 CRAN 发布了一个新版本的 dyn,它解决了 R 开发版本中 R 的变化。)我们有 运行 这个用于滞后 0、1、2、...、10,但是如果你有更多的数据,你可以 运行 它达到更高的值。如果你想在相反方向滞后,那么在 lag
中将 -i
替换为 i
。如果您想使用从 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
我有一个包含 2 列的时间序列数据集:x 是 "hourly" 连续温度数据,y 是几周内定期采样的响应数据(每天早上 5 点、下午 2 点、晚上 8 点定期采样)。
我想采用 2 种滞后方法来分析数据
1) 绘制我所有的 y 数据(常数)与越来越滞后的 x 数据(以 1 小时为步长将 x 数据移动 0-24 小时),即下午 6 点的 x 与下午 6 点的 y; x 下午 5 点 vs y 下午 6 点...... x(前一天下午 5 点)vs y(下午 6 点)
2) 与 1) 相同,但有累积偏移,即 "backward in time" 累积滞后 window of 0:24,x 数据步长为 1,并针对 y 数据进行测试 即下午 6 点的 x 与下午 6 点的 y; x(平均下午 5 点和下午 6 点)vs y 在下午 6 点...... x(前一天下午 6 点 - 下午 5 点的平均值)vs y(下午 6 点)
我想为每个滞后场景 (0 - 24) 绘制 "y" 与 "shifted x" 的线性模型 (lm),并制作一个 table,其中有一列用于滞后,lm 的 p 值;和调整。 lm 的 R2)所以我可以看到 "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")
谢谢!
这将回归 y
对 x
i 周期前迭代 i 的值。请注意,问题中应使用 NA 的地方使用了 "NA"。该问题还涉及每小时但提供每日数据,因此我们显示每日滞后。 dyn$lm
运行s lm
添加自动对齐。 (请注意,昨天向 CRAN 发布了一个新版本的 dyn,它解决了 R 开发版本中 R 的变化。)我们有 运行 这个用于滞后 0、1、2、...、10,但是如果你有更多的数据,你可以 运行 它达到更高的值。如果你想在相反方向滞后,那么在 lag
中将 -i
替换为 i
。如果您想使用从 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