如何为时间序列绘制交叉相关矩阵?

5

我有一组时间序列数据,如下所示(不包括行和列的注释):

      L1 L2 L3 L4
t=1    0  1  1  0
t=2    0  1  1  1
t=3    1  0  1  1
t=4    0  1  1  0

我将其读入R中:

timeseries = read.table("./test", header=F)

我正在使用以下方法绘制L1的时间序列:

ts.plot(timeseries$V1)

并将交叉相关函数绘制为:

ccf(timeseries$V1, timeseries$V2)

现在,有人能告诉我如何绘制一个交叉相关矩阵,以显示L1-L4的函数输出吗?基本上是像这样(在我的情况下,是一个4x4的绘图矩阵):
enter image description here

这个是否应该发送进行交叉验证? - wespiserA
嗯..我可以问一下为什么吗?这是一个与R绘图相关的问题,它有自己的语言。 - Legend
你只是在寻找一种将每对列的ccf绘制在单个图上的方法吗? - joran
@joran:没错!就是这样。我更新了我的问题并给出了一个例子。 - Legend
好的,我提供了一种非常基本的方法来实现这个。但是我建议耐心等待更多人的关注,因为很可能在时间序列包(zooxts)中有一个函数以更漂亮的方式完成类似的功能。 - joran
3个回答

5

似乎还有另一种微不足道的方法来实现它!

timeseries = read.table("./test", header=F)
acf(timeseries)

给我一个相关性图矩阵。当然,如果需要协方差,acf还有其他可选项可以传递。


2
一种简单的方法是在绘图设备上创建一个图形矩阵,并将每个ccf 绘图逐个放置在其中:
M <- matrix(sample(0:1,40,replace = TRUE),nrow = 10)

par(mfrow= c(4,4))
for (i in 1:4){
    for (j in 1:4){
        ccf(M[,i],M[,j])
    }
}

但是如果你稍微等一下,可能会有更熟悉时间序列软件包的人提供一个更加优美的函数。


+1 很好!谢谢。我可能会等半天。如果没有其他的,我会接受这个。谢谢。 - Legend

2

在joran的帖子中,M的值如下,请尝试以下方法:

pnl <- function(x, y = x) { par(new = TRUE); ccf(x, y) }
pairs(as.data.frame(M), upper.panel = pnl, diag.panel = pnl, cex.labels = 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接