二进制时间序列的自相关函数

时间:2017-12-12 08:52:35

标签: r statistics time-series correlation binary-data

我有一个事件的二进制(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观察之间变化

1 个答案:

答案 0 :(得分:0)

我根本不清楚你要做什么。

  1. 与@OttoKässi达成协议我不明白子集背后的逻辑。为什么三个?为什么那三个?构建这些子集的(数学)基本原理是什么。

  2. 更重要的是,平均相关系数对我来说毫无意义。在自相关中,您可以计算Pearson的向量的乘积矩相关系数与同一向量的不同滞后版本。那么你想为三个不同的(正交)向量做这个,并平均系数?为什么?这对我来说没有任何统计意义。

  3. 除此之外,要计算三个向量的自相关,您可以执行以下操作:

    # 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