为时间序列的每个月运行回归-apply.monthly不起作用

时间:2019-06-07 09:52:13

标签: r time-series apply xts quantile-regression

我想对一年时间序列的每个月应用分位数回归(具有一个因变量和一个自变量),因此我将获得12个系数。 我的数据集由return_2000_xts给出,rq()是分位数回归的函数。 我的数据集为xts格式,其中包括银行股票的每日收益。

我尝试使用apply.monthly()

apply.monthly(return_2000_xts, 
    rq(esb.eu ~ hsbc.uk, data = return_2000_xts, tau = 0.95))

不幸的是,我收到以下错误消息:

  

get(as.character(FUN),mode =“ function”,envir = envir)中的错误:     找不到“功能”模式的对象“ FUN”

我的代码可能是什么问题?

2 个答案:

答案 0 :(得分:2)

我不确定是怎么回事,也许apply.monthly()正在剥离某些属性,但是回到基础知识似乎行得通。

library(xts)
library(quantreg)

data(sample_matrix)
xt <- as.xts(sample_matrix)

f <- as.character(index(xt), format="%Y-%m")
xt.ym <- split(xt, f)
lapply(xt.ym, FUN=function(x) rq(Open ~ Close, data=x, tau=0.95))

作为参考,这是行不通的,但感觉应该如此

apply.monthly(xt, FUN=function(x) rq(Open ~ Close, data=x))
  

coredata.xts(x)中的错误:当前不支持的数据类型


我已经意识到为什么apply.monthly()不起作用。它想返回一个xts对象,但是无法将一系列回归对象强制转换为xts,因此会引发错误。但是,如果我们将回归输出限制为可以强制执行的内容(例如f.ex),它将起作用。

apply.monthly(xt, FUN=function(x) rq(Open ~ Close, data=x)$coef)
#            (Intercept)     Close
# 2007-01-31   12.224046 0.7564106
# 2007-02-28   -6.326472 1.1242798
# 2007-03-31   -2.108973 1.0432247
# 2007-04-30    5.739395 0.8840677
# 2007-05-31    2.453616 0.9495129
# 2007-06-30   17.380465 0.6342055

答案 1 :(得分:1)

一个可重现的示例会很好,但是您可能想要

apply.monthly(return_2000_xts, 
              FUN=rq,
              formula = esb.eu ~ hsbc.uk, 
              data = return_2000_xts, tau = 0.95)

...,也就是说,您仅传递rq函数作为参数,然后将其他参数添加到rq()作为附加参数(与{{ 1}})