【问题标题】:rollapply applied to xts objectrollapply 应用于 xts 对象
【发布时间】:2013-03-29 19:32:07
【问题描述】:
require(quantmod)
require(PerformanceAnalytics)
getSymbols('INTC')
x<- monthlyReturn(INTC)
rollapply(1+x,12,cumprod)

鉴于上面的代码,我得到了这个错误

Error in array(r, dim = d, dimnames = if (!(is.null(n1 <- names(x[[1L]])) &  : 
  length of 'dimnames' [1] not equal to array extent

我可以验证 x 的类确实是 xts。

类(x) [1] “xts” “动物园”

我想 rollapply 适用于 xts/zoo 对象。我不确定如何解决这里的问题。

感谢您的帮助。

更新

SessionInfo 输出:

R version 2.15.3 (2013-03-01)
Platform: i686-pc-linux-gnu (32-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
 [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] PerformanceAnalytics_1.1.0 quantmod_0.4-0             TTR_0.22-0                
[4] xts_0.9-3                  zoo_1.7-9                  Defaults_1.1-1            

loaded via a namespace (and not attached):
[1] grid_2.15.3     lattice_0.20-13 tools_2.15.3   

【问题讨论】:

  • 您使用的是什么版本的 xts/zoo/R?即,提供来自sessionInfo() 的输出。
  • 期望的输出是什么? cumprod 返回多个值,那么您是否希望结果对于输入的每个索引都有 12 个值?或者您可能只想要prod 而不是cumprod

标签: r xts zoo


【解决方案1】:

rollapply.xts 假定函数为每个滚动窗口返回一个值。因此,您要么需要将 prodrollapply.xts 一起使用,要么将 cumprod 与 split-apply-combine 策略一起使用,具体取决于您实际想要做什么。

rollapply(1+x,12,prod)
do.call(rbind, lapply(split(1+x,"years"), cumprod))

【讨论】:

  • 我简直不敢相信我是多么愚蠢。我正在尝试以滚动方式对每 12 次观察进行一次刺激。 cumprod 给了我一个向量。感谢您的帮助!
  • 请注意,rollapply.zoo 不限于标量返回值。
【解决方案2】:

您发现了一个错误。这是一个解决方法:

z <- as.zoo(x)
dim(z) <- NULL
rollapply(1+z, 12, cumprod)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2019-05-12
    • 1970-01-01
    • 2015-05-08
    • 2020-09-13
    • 2015-11-29
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多