试图理解timeseries维度时出错

试图理解timeseries维度时出错,r,xts,R,Xts,我试图计算两种股票价格(xts型)、AGL和BIL(OHLC数据如下)的滚动日相关性: 然后,我使用ROC创建了一个系列: my.AGL.roc <- ROC(my.AGL[,4]) 提前谢谢 Ed在my.AGL.roc中的首次观察可能是NA 从?滚动平均值: rollmean的默认方法不处理包含NAs的输入。在这种情况下,请改用rollapply rollappy(my.AGL.roc,30,mean)R-2.13.1下的TTR::roc没有问题。您可以使用TTR::runCor计算两

我试图计算两种股票价格(xts型)、AGL和BIL(OHLC数据如下)的滚动日相关性:

然后,我使用ROC创建了一个系列:

my.AGL.roc <- ROC(my.AGL[,4])
提前谢谢
Ed

my.AGL.roc
中的首次观察可能是
NA

?滚动平均值

rollmean的默认方法不处理包含NAs的输入。在这种情况下,请改用rollapply


rollappy(my.AGL.roc,30,mean)

R-2.13.1下的
TTR::roc
没有问题。您可以使用
TTR::runCor
计算两个价格系列之间的滚动相关性

> rollapply(my.AGL.lret, 30, mean)
Error in `colnames<-`(`*tmp*`, value = "days.Close") : 
  attempt to set colnames on object with less than two dimensions
> rollmean(my.AGL.lret, 30)
Error in `colnames<-`(`*tmp*`, value = "days.Close") : 
  attempt to set colnames on object with less than two dimensions
library(quantmod)
my.AGL <-
structure(c(32020L, 32810L, 33000L, 33394L, 33650L, 34205L, 34140L, 
33400L, 34300L, 32975L, 33179L, 33450L, 33700L, 34180L, 35000L, 
34140L, 33600L, 34300L, 32020L, 32460L, 32811L, 33157L, 33599L, 
34205L, 33299L, 33155L, 33106L, 32850L, 33020L, 33400L, 33539L, 
34000L, 34461L, 33480L, 33400L, 33250L), .Dim = c(9L, 4L), .Dimnames = list(
    NULL, c("days.Open", "days.High", "days.Low", "days.Close"
    )), index = structure(c(1262646025, 1262732404, 1262818810, 
1262905220, 1262991623, 1263250801, 1263337207, 1263423608, 1263510020
), tzone = "", tclass = c("POSIXct", "POSIXt")), .indexCLASS = c("POSIXct", 
"POSIXt"), .indexTZ = "", class = c("xts", "zoo"))

my.AGL.roc <- ROC(Cl(my.AGL))
my.BIL.roc <- ROC(Op(my.AGL))  # since OP didn't provide BIL data
runCor(x=my.AGL.roc,y=my.BIL.roc,n=3)
#                              [,1]
# 2010-01-04 17:00:25            NA
# 2010-01-05 17:00:04            NA
# 2010-01-06 17:00:10            NA
# 2010-01-07 17:00:20 -0.6614544157
# 2010-01-08 17:00:23 -0.8643698058
# 2010-01-11 17:00:01  0.0001661546
# 2010-01-12 17:00:07  0.8768496736
# 2010-01-13 17:00:08  0.3459987310
# 2010-01-14 17:00:20  0.0289108044
库(quantmod)

你的问题有点糊涂。
my.AGL
是否为类对象
xts
?如果
ROC
确实来自
TTR
软件包,我的回答应该会有所帮助。请让您的问题重现。1) 包括适当的
语句。2) 使用
dput
复制
my.AGL
的结构。请参阅以获取帮助。谢谢Antoliy,我已将ROC函数替换为my.AGL.lret。您是否尝试过我提供的
rollapply
?第一个观察值是
NA
并不是一个需要修复的错误,因为很明显,第一个值没有变化率。编辑:我知道你已经尝试过了,我会再次检查我自己。再次检查,
rollmean()
返回与你相同的错误,但是
rollappy()
对我有效。你能试试
my.AGL.roc
上的
rollappy()
吗?Txs Anatoliy,我发现:rollappy似乎对roc函数的结果有效,但对上面显示的手动计算无效。如果我合并2个返回序列(AGL和BIL),rollmean似乎有效。我发现这很奇怪,因为只有当时间序列包含超过1列时,该函数才有效。感谢Joshua,这正如我预期的那样有效。您知道为什么rollmean不将单个安全返回序列视为有效输入吗?
my.AGL.lret[ is.na(my.AGL.lret) ] <- 0 

 my.AGL.lret
                      days.Close
2011-08-10 17:01:00  0.000000000
2011-08-11 17:01:00  0.025299427
2011-08-15 17:01:00  0.027050178
2011-08-16 17:01:00  0.001011175
2011-08-17 17:01:00  0.004936565
2011-08-18 17:01:00 -0.040264398
2011-08-22 17:01:00 -0.022195552
2011-08-23 17:01:00 -0.018253440
2011-08-24 17:01:00  0.017847304
2011-08-25 17:01:00  0.004679017
> rollapply(my.AGL.lret, 30, mean)
Error in `colnames<-`(`*tmp*`, value = "days.Close") : 
  attempt to set colnames on object with less than two dimensions
> rollmean(my.AGL.lret, 30)
Error in `colnames<-`(`*tmp*`, value = "days.Close") : 
  attempt to set colnames on object with less than two dimensions
dim(my.AGL.roc)
[1] 406   1
library(quantmod)
my.AGL <-
structure(c(32020L, 32810L, 33000L, 33394L, 33650L, 34205L, 34140L, 
33400L, 34300L, 32975L, 33179L, 33450L, 33700L, 34180L, 35000L, 
34140L, 33600L, 34300L, 32020L, 32460L, 32811L, 33157L, 33599L, 
34205L, 33299L, 33155L, 33106L, 32850L, 33020L, 33400L, 33539L, 
34000L, 34461L, 33480L, 33400L, 33250L), .Dim = c(9L, 4L), .Dimnames = list(
    NULL, c("days.Open", "days.High", "days.Low", "days.Close"
    )), index = structure(c(1262646025, 1262732404, 1262818810, 
1262905220, 1262991623, 1263250801, 1263337207, 1263423608, 1263510020
), tzone = "", tclass = c("POSIXct", "POSIXt")), .indexCLASS = c("POSIXct", 
"POSIXt"), .indexTZ = "", class = c("xts", "zoo"))

my.AGL.roc <- ROC(Cl(my.AGL))
my.BIL.roc <- ROC(Op(my.AGL))  # since OP didn't provide BIL data
runCor(x=my.AGL.roc,y=my.BIL.roc,n=3)
#                              [,1]
# 2010-01-04 17:00:25            NA
# 2010-01-05 17:00:04            NA
# 2010-01-06 17:00:10            NA
# 2010-01-07 17:00:20 -0.6614544157
# 2010-01-08 17:00:23 -0.8643698058
# 2010-01-11 17:00:01  0.0001661546
# 2010-01-12 17:00:07  0.8768496736
# 2010-01-13 17:00:08  0.3459987310
# 2010-01-14 17:00:20  0.0289108044