2017-03-01 46 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