在数据帧中按组将自相关函数acf()应用于向量集的元素

时间:2017-01-19 15:16:48

标签: r statistics

我有一个数据框DF,如下所示:

 ID      Area time
1  1 182.685    1
2  2 182.714    1
3  3 182.275    1
4  4 211.928    1
5  5 218.804    1
6  6 183.445    1
...
1  1 184.334    2
2  2 196.765    2
3  3 186.435    2
4  4 213.322    2
5  5 214.766    2
6  6 172.667    2

..等等ID = 6。我想对每个ID应用自相关函数,即在时间1将ID = 1与在时间2的ID = 1进行比较,依此类推。

申请最直接的方式是什么? acf()到我的数据框架?

当我尝试使用

autocorr = aggregate(x = DF$Area, by = list(DF$ID), FUN = acf)

我得到一个奇怪的物体。

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

我想在每个ID上应用自相关函数

好的,好的,所以你不需要任何互相关,这会让事情变得更容易。

  

我得到一个奇怪的对象

acf返回一堆内容,即返回一个列表。我想你只会对ACF值感兴趣,所以你需要:

FUN = function (u) c(acf(u, plot = FALSE)$acf)

另外,使用aggregate并不是一个好主意。您可能需要splitsapply

## so your data frame is called `x`
oo <- sapply(split(x$Area, x$ID), FUN = function (u) c(acf(u, plot = FALSE)$acf) )

如果您有平衡数据,即如果每个ID的观察数相同,oo将被简化为矩阵。如果您没有平衡数据,则可能需要显式控制lag.max中的acf参数。默认情况下,acf会根据观察次数自动决定此值。

现在假设我们希望滞后0到滞后7,我们可以设置:

oo <- sapply(split(x$Area, x$ID),
             FUN = function (u) c(acf(u, plot = FALSE, lag.max = 7)$acf) )

因此结果oo是一个8行的矩阵(滞后行,ID列)。我没有看到使用数据帧来保存此结果的任何好处,但如果您想要数据框,只需执行以下操作:

data.frame(oo)

对于矩阵或数据框中的数据,您可以轻松进行进一步分析。

-----------

有关acf的完整说明,请阅读Produce a boxplot for multiple ACFs