2017-03-01 22 views
1

我有一個包含12個變量的矩陣,每個變量有1343個觀測值。我希望爲這些變量中的每一個計算自動關聯,並使用全部數據來完成這些操作,即lag.max = 1343R中多元時間序列的自動關聯

使用acf()函數我可以計算單個變量的自動關聯,但我希望在單個矩陣圖(3 x 4)中繪製全部12個。

使用acf(linear[,1],lag.max = (length(linear)))生產:

auto-correlation of a single variable

我的數據如下所示:

> class(linear) 
[1] "matrix" 

> str(linear) 
num [1:1343, 1:12] -102 -101 -101 -101 -101 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:1343] "2017-01-20 16:30:00" "2017-01-20 16:45:00" "2017-01-20 17:00:00" "2017-01-20 17:15:00" ... 
    ..$ : chr [1:12] "DO0182U09A3" "DO0182U09B3" "DO0182U09C3" "DO0182U21A1" ... 

我已經嘗試通過列的範圍中線性矩陣

acf(linear[,1:12], lag.max = 1343) 

但它似乎產生了一種acf陰謀每個圖中的標題似乎表示相關性圖,請參閱下圖。

從閱讀?acf的詳細信息我看到你可以傳遞一個多變量時間序列,我相信我的linear對象是,但是我得到了如下的相關圖。

難道我的問題是在創建linear之前我有一個對象叫wideRawXTS

> str(wideRawXTS) 
An ‘xts’ object on 2017-01-20 16:30:00/2017-02-03 16:00:00 containing: 
    Data: num [1:1343, 1:12] -102 -101 -101 -101 -101 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:12] "DO0182U09A3" "DO0182U09B3" "DO0182U09C3" "DO0182U21A1" ... 
    Indexed by objects of class: [POSIXlt,POSIXt] TZ: 
    xts Attributes: 
NULL 

因爲有一些變量的缺失值我進行了一個線性插值如下:

linear <- apply(wideRawXTS, 2, na.interpolation, option = "linear") 

我需要的linear第一列再轉換成一個XTS對象?

任何人都可以提供一些指導,說明在產生自相關矩陣圖時我可能會出錯嗎?

> head(linear) 
        DO0182U09A3 DO0182U09B3 DO0182U09C3 DO0182U21A1 DO0182U21A2 DO0182U21A3 DO0182U21B1 DO0182U21B2 DO0182U21B3 
2017-01-20 16:30:00  -101.50  -103.37  -103.86  -104.78  -104.95  -105.33  -102.50  -99.43  -104.05 
2017-01-20 16:45:00  -101.32  -102.75  -104.22  -104.51  -103.94  -105.29  -102.82  -101.99  -103.94 
2017-01-20 17:00:00  -101.45  -103.30  -103.93  -104.70  -104.82  -105.13  -103.72  -103.95  -104.25 
2017-01-20 17:15:00  -100.91  -95.92  -99.22  -103.83  -104.72  -105.19  -103.57  -101.36  -104.09 
2017-01-20 17:30:00  -100.91  -103.04  -104.09  -102.15  -104.91  -105.18  -103.88  -104.09  -103.96 
2017-01-20 17:45:00  -100.97  -103.67  -104.12  -105.07  -104.23  -97.48  -103.92  -103.89  -104.01 
        DO0182U21C1 DO0182U21C2 DO0182U21C3 
2017-01-20 16:30:00  -104.51  -104.42  -105.17 
2017-01-20 16:45:00  -104.74  -104.65  -105.25 
2017-01-20 17:00:00  -105.02  -105.04  -105.32 
2017-01-20 17:15:00  -103.90  -102.95  -105.16 
2017-01-20 17:30:00  -104.75  -105.07  -105.23 
2017-01-20 17:45:00  -105.08  -105.14  -104.89 

odd plot

根據來自@ eipi10這裏的反饋是他們的建議輸出。我的筆記本花了大約20分鐘來計算,但我不知道它代表什麼!所有的情節看起來都完全一樣。

enter image description here

+1

這是否你在尋找什麼:'面值(mfrow = C(3,4)); sapply(線性,acf,lag.max = nrow(線性))' – eipi10

+0

@ eipi10感謝您的回覆,您的評論確實產生了矩陣圖,但我不知道它代表什麼!水平尺度似乎搞砸了。我不知道如何添加圖片到評論,但我會修改原來的帖子與輸出。 – TheGoat

回答

1

linear是一個矩陣。對於我的第一條評論中的代碼,需要將linear轉換爲數據框,或者需要明確引用每列。下面的代碼採用後一種方法:

par(mfrow=c(3,4)) 

set.seed(2) 
linear = matrix(cumsum(rnorm(12*50)), ncol=12) 

sapply(1:ncol(linear), function(i) { 
    acf(linear[,i], main=paste("Column:", i), lag.max=nrow(linear)) 
    }) 

enter image description here

+0

再次感謝,這對我有效。我無法弄清楚的一件事是如何在循環訪問每一列時如何傳遞新數據框的列名稱。我試過'linearDF < - as.data.frame(linear) sapply(1:ncol(linearDF),function(i){acf(linearDF [,i],main = colnames(linearDF [,i])) lag.max = nrow(linearDF)) })'但是對於每個子區塊標題,我會得到所有列名稱的列表,而不是它循環通過的特定列。有什麼建議麼? – TheGoat

+0

任何想法如何將列名傳遞給每個矩陣圖? – TheGoat