我有一个事件的二进制(1或0)时间序列,我想计算它的ACF。问题是我需要根据它们的持续时间将TS
分成簇,并计算每个子集的ACF。
让我举个例子:
TS:(1,1,1,0,0,1,1,0,0,0,1)
我想要一个以下的总和的ACF:
群集1的ACF:(1,1,1,0,0,0,0,0,0,0,0)
群集2的ACF:(1,1,0,0,0,0,0,0,0,0,0)
群集3的ACF:(1,0,0,0,0,0,0,0,0,0,0)
然后平均这3个向量以得到我需要的结果。簇的数量是任意的,时间序列的近似持续时间在1k到10k观察之间变化
答案 0 :(得分:0)
我根本不清楚你要做什么。
与@OttoKässi达成协议我不明白子集背后的逻辑。为什么三个?为什么那三个?构建这些子集的(数学)基本原理是什么。
更重要的是,平均相关系数对我来说毫无意义。在自相关中,您可以计算Pearson的向量的乘积矩相关系数与同一向量的不同滞后版本。那么你想为三个不同的(正交)向量做这个,并平均系数?为什么?这对我来说没有任何统计意义。
除此之外,要计算三个向量的自相关,您可以执行以下操作:
# Your sample vectors
v <- list(
v1 = c(1,1,1,0,0,0,0,0,0,0,0),
v2 = c(1,1,0,0,0,0,0,0,0,0,0),
v3 = c(1,0,0,0,0,0,0,0,0,0,0));
# Calculate acf for lag = 0 ... 10 and store as columns in dataframe
# The rows correspond to lag = 0 ... 10
acf <- as.data.frame(lapply(v, function(x) as.numeric(acf(x, plot = FALSE)$acf)));
acf;
# v1 v2 v3
#1 1.00000000 1.00000000 1.000000000
#2 0.63257576 0.47979798 -0.009090909
#3 0.26515152 -0.04040404 -0.018181818
#4 -0.10227273 -0.06060606 -0.027272727
#5 -0.13636364 -0.08080808 -0.036363636
#6 -0.17045455 -0.10101010 -0.045454545
#7 -0.20454545 -0.12121212 -0.054545455
#8 -0.23863636 -0.14141414 -0.063636364
#9 -0.27272727 -0.16161616 -0.072727273
#10 -0.18181818 -0.18181818 -0.081818182
#11 -0.09090909 -0.09090909 -0.090909091
如果你现在坚持,你可以通过获取行平均值来计算不同滞后的平均相关系数。请注意,我不知道这是如何具有统计意义的。
rowMeans(acf);
#[1] 1.00000000 0.36776094 0.06885522 -0.06338384 -0.08451178 -0.10563973
#[7] -0.12676768 -0.14789562 -0.16902357 -0.14848485 -0.09090909