2013-08-22 16 views
1

我有两个大小不等的动物园对象(流入和流出)。流出值滞后流入一段未知时间。我想确定较小的流出对象(6行)与较大的流入对象(多行)之间的相关性,每次6行,从流入开始时间开始,递增1,并找出最高相关期间。我认为这被称为“滑动窗口”比较。我尝试了很多不同的方式,但是使用“rollapply”函数来做这件事却失败了,但是由于两个对象之间的大小差异而出现错误。希望有人能够理解我想问的问题并提供解决方案。以下是我的数据的一部分,以及我如何尝试使用rollapply函数的示例。不等大小的动物园对象之间的滚动关联

> inflow 
(03/14/13 07:00:00) 11.20451 
(03/14/13 07:02:00) 11.03810 
(03/14/13 07:04:00) 11.03012 
(03/14/13 07:06:00) 11.09517 
(03/14/13 07:08:00) 10.90878 
(03/14/13 07:10:00) 11.23285 
(03/14/13 07:12:00) 11.14890 
(03/14/13 07:14:00) 11.17002 
(03/14/13 07:16:00) 11.38342 
(03/14/13 07:18:00) 11.70833 
(03/14/13 07:20:00) 11.93776 
(03/14/13 07:22:00) 12.17832 
(03/14/13 07:24:00) 12.39648 
(03/14/13 07:26:00) 12.24020 
(03/14/13 07:28:00) 12.18667 
(03/14/13 07:30:00) 12.45410 
(03/14/13 07:32:00) 12.50012 
(03/14/13 07:34:00) 12.54736 
(03/14/13 07:36:00) 13.05010 
(03/14/13 07:38:00) 13.06495 
(03/14/13 07:40:00) 13.14084 
(03/14/13 07:42:00) 12.92427 
(03/14/13 07:44:00) 12.98699 
(03/14/13 07:46:00) 12.84172 
(03/14/13 07:48:00) 12.87263 
(03/14/13 07:50:00) 12.51861 
(03/14/13 07:52:00) 12.98763 
(03/14/13 07:54:00) 12.31124 
(03/14/13 07:56:00) 12.33696 
(03/14/13 07:58:00) 12.49630 
(03/14/13 08:00:00) 12.40648 
(03/14/13 08:02:00) 11.87164 
(03/14/13 08:04:00) 12.76058 
(03/14/13 08:06:00) 12.50016 
(03/14/13 08:08:00) 12.68696 
(03/14/13 08:10:00) 12.88447 
(03/14/13 08:12:00) 12.33336 
(03/14/13 08:14:00) 13.06670 
(03/14/13 08:16:00) 13.15070 
(03/14/13 08:18:00) 12.82410 
(03/14/13 08:20:00) 12.91953 

outflow2

(03/14/13 07:54:00) (03/14/13 07:56:00) (03/14/13 07:58:00) (03/14/13 08:00:00) (03/14/13 08:02:00) (03/14/13 08:04:00) 
      11.51110   11.11878   11.05775   11.11303   10.95417   10.98035 

用途:

> test <- rollapply(inflow, width = 6, by = 1, FUN = cor(inflow, outflow)) 
Error in cor(inflow, outflow) : incompatible dimensions 
+0

我认为您需要定义单个值与多个值之间“相关性”的含义。如果流出变量在不规则时间测量,那么您如何预计流入值被分割? –

+0

我想将流出值与流入值相关联,为6组。对不起,我无法更好地描述这一点。这里是一个文本示例“ –

+0

我想我们需要具体说明一下:值3与序列1:6的”相关性“是什么?或者您是否确实要求将较长向量的聚合均值与较短向量的相关性?矢量 –

回答

1

试试这个:

rollapply(inflow, 6, cor, y = outflow) 

此计算

value <- c(cor(inflow[1:6], outflow), cor(inflow[2:7], outflow), ...etc...) 
ix <- seq(3, length = length(inflow) - 6 + 1) 
zoo(value, time(inflow)[ix]) 

根据你想要得到什么你可能也需要align=的论点。

+0

我已经添加了输出的描述。 –

+0

我不认为这是预期的。流出[2]'在与流入[7:12]'相同的时间间隔内被测量。此外,当我尝试使用cor(1:6,3)时,我得到一个尺寸错误。 (实际上OP的英文描述与该数据不一致。) –

+0

海报的代码和评论中的海报描述都似乎描述了我所展示的内容。 –