时间窗口不恒定时的运行方差

标签 r variance sliding-window

我正在尝试为 names 中的每一个计算一个窗口的移动方差,假设为 4 年。 A , BC .数据为每周:

> head(data1, 17)
         date name       value
1  1985-01-01    A -0.44008233
2  1985-01-01    B          NA #Observe that there are some NA's
3  1985-01-01    C  0.38682496
4  1985-01-08    A  0.41806540
5  1985-01-08    B -0.05460831
6  1985-01-08    C -0.52051435
7  1985-01-15    A  1.25769395
8  1985-01-15    B  0.80272053
9  1985-01-15    C -0.34501742
10 1985-01-22    A -0.43401839
11 1985-01-22    B  0.91113966
12 1985-01-22    C  1.07131717
13 1985-01-29    A -1.55395857
14 1985-01-29    B -0.43281709
15 1985-01-29    C  0.98034779
16 1985-02-05    A  1.70557396
17 1985-02-05    B  0.44688788

到目前为止,我的方法是 dcast数据然后运行 ​​rollapply() ( zoo ) 列明智,移动窗口为 192 = 4*12*4:
v <- dcast(data1, date ~ name, value.var = "value")
var <- rollapply(v[-1], width=4*12*4, var, fill=NA, by.column = T)
var <- cbind(v$date, var)
var[,1] <- as.Date(var[,1])

但是,我意识到有几个月我有四次观察(例如 2 月 7、14、21、28 日),而有些人每周有五次观察(例如 1 月的 1、8、15、22 和 29),因此使用4 years * 12 months * 4 weeks的窗口观察结果不正确。我想在时间窗口( width )上添加这些额外的观察结果,但我不确定如何(或者甚至可能),因为这些变化取决于每月 5 周的次数和次数时间窗口内有每月 4 周的观察。

另外,我想要一个 NA当有 NA移动时间窗口内的观察(我认为这是由 var() 自动处理的),而且我想忽略零观察。为此,我想我可以在运行运行方差函数之前删除零,然后最后以某种方式将它们放回去。所以你可以忽略那部分,当然,除非你有一些好主意可以一步完成。

样本数据 :
set.seed(486)
date <- rep(seq(as.Date("1985-01-01"), as.Date("2010-01-1"), by="weeks"), each=3)
N <- length(date)
name <- c("A","B","C")
value <- rnorm(N)
i<-which(value %in% sample(value, 25)) ;i
j<-which(value %in% sample(value, 150)) ;j
value[i] <- NA
value[j] <- 0
data1 <- data.frame(date, name, value)

最佳答案

4 年有 208 周加 5 天,所以不能被整除为周。如果我们使用 209 周,那么我们在 4 年内只剩下 2 天,所以让我们尝试一下。

先转换 data1"zoo"类根据第二列的值将数据拆分为单独的列。 z每个 A 将有一列, BC .然后定义一个不包括零的方差函数并将其与 rollapplyr 一起使用

library(zoo)
z <- read.zoo(data1, split = 2) # 1305 x 3 
var0 <- function(x) var(x[x != 0])
r <- rollapplyr(z, 209, var0)

将其保留为动物园对象可能就足够了,但这会将其转换为具有列 Index 的 4 列数据框, A , BC :
fortify.zoo(r)

关于时间窗口不恒定时的运行方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30914717/

相关文章:

database - 使用 R JDBC 插入 Teradata

r - ggplot : geom_bar with many bar

scala - 具有逆变类型参数的继承返回类型

algorithm - 时间窗在线方差算法

python - 使用 Keras 在滑动窗口中评估函数

r - 使用分割、剪切和重复函数来过滤R中的数据

r - 将绘图保存到 tiff,以高分辨率发布(在 R 中)

C# 失败的协变转换

c - 使用没有嵌套 while 循环的滑动窗口删除注释

R:具有给定坐标的快速滑动窗口