Как построить матрицу взаимной корреляции для временных рядов? - PullRequest
5 голосов
/ 06 августа 2011

У меня есть представление временных рядов моих данных следующим образом (без строки и столбца) аннотации:

      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?По сути, что-то вроде этого (в моем случае матрица графиков 4х4):

enter image description here

Ответы [ 3 ]

6 голосов
/ 08 августа 2011

Кажется, есть еще один тривиальный способ сделать это!

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

дает мне матрицу корреляционных графиков.Конечно, есть и другие опции, которые можно передать на acf, если необходима ковариация.

2 голосов
/ 07 августа 2011

Попробуйте, где 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)
2 голосов
/ 06 августа 2011

Тривиальный способ сделать это - просто создать матрицу графиков на вашем графическом устройстве и поместить каждый график 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])
    }
}

Но если вы немного подождете, кто-то, кто знает пакеты временных рядов более тесно, может воспользоваться функцией, которая делает это немного приятнее.

...