【问题标题】:Does rollapply() allow an array of results from call to function?rollapply() 是否允许调用函数的结果数组?
【发布时间】:2012-08-18 14:00:06
【问题描述】:
# Loading packages

require(forecast)
require(quantmod)

# Loading OHLC xts object

getSymbols('SPY', from = '1950-01-01')

# Selecting weekly Close prices

x <- Cl(to.weekly(SPY))

# ARIMA(p,d,q) estimation and forecasting function

a.ari.fun <- function(x) {

  a.ari <- auto.arima(x = x, d = 1, max.p = 50, max.q = 50, max.P = 50,
                      max.Q = 50, ic = 'aic', approximation = TRUE)
  fore <- forecast.Arima(object = a.ari, h = 4, level = c(.9))
  supp <- tail(fore$lower, 1)
  rest <- tail(fore$upper, 1)
  return(c(supp, rest))

}

# Roll apply ARIMA(p,d,q) in rolling window

rollapplyr(data = tail(x, 800), width = 750, FUN = a.ari.fun)

此代码返回错误是因为

return(c(supp, rest))

在我写的a.ari.fun()函数的末尾;我很确定,因为如果 a.ari.fun() 只返回

return(rest)

效果很好。

我必须如何安排a.ari.fun() 以获得适合rollapplyr() 的对象?

【问题讨论】:

  • 您希望输出是什么样的?你可以使用两次rollapply吗?也许this post会给你一些想法?
  • 不幸的是,完成所有迭代需要大量时间,我不能重复等待时间;我想要的结果是一个具有 n 行和 2 列的矩阵:第一列包含“supp”时间序列,而第二列包含“rest”时间序列。
  • 它看起来与您链接的帖子完全相反:那个朋友有多个输出结果,他只需要一个值;我需要相反的,即多值输出:)

标签: r zoo


【解决方案1】:

看起来使用by.column=FALSE 会满足您的要求。

tail(rollapplyr(data = as.zoo(x), width = 750, FUN = a.ari.fun, by.column=FALSE))

2012-07-13 126.0730 145.8036
2012-07-20 126.1342 145.8616
2012-07-27 128.9303 148.6576
2012-08-03 129.7640 149.4975
2012-08-10 130.5752 150.2954
2012-08-17 132.3789 152.0963

如果你加载了 PerformanceAnalytics,rollapply.xts 将被调度,而不是 rollapply.zoo。我首先编辑将对象转换为zoo,以确保调用正确的rollapply

编辑:

感谢@JoshuaUlrich 的一些补丁,现在可以与rollapply.xts 一起使用,因此您不必转换为zoo。此外,rollapply.xts 现在注册在 xts 包而不是 PerformanceAnalytics 中,因此无论是否 PerformanceAnalytics,您都将获得相同的结果已加载。您将需要 xts 的开发版本——Rev. 765 或更高版本——位于R-Forge

rollapplyr(x, 750, a.ari.fun, by.column=FALSE)

【讨论】:

  • 哇。我会试试看,但是......不是只需要by.column 来处理多变量输入吗?或者,至少,这是我的想法……
  • 我得到一个错误:&gt; rollapplyr(data = x, width = 750, FUN = a.ari.fun, by.column = FALSE)我得到Errore in xts(xx, tt, if (by == 1) attr(data, "frequency")) : NROW(x) must match length(order.by)
  • 你是否加载了PerformanceAnalytics。简单地加载该包可能会导致问题。
  • 是的。那就是问题所在。 PerformanceAnalytics 不能很好地与其他人配合使用。
  • @neverfox,更新xts。当前版本on CRAN 是 0.9-5。
猜你喜欢
  • 2010-10-10
  • 2017-06-30
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2021-08-31
  • 1970-01-01
  • 2015-04-05
相关资源
最近更新 更多