Запустить регрессию для каждого месяца тайм-серии - apply.monthly не работает - PullRequest
0 голосов
/ 07 июня 2019

Я хочу применить квантильную регрессию (с одной зависимой и одной независимой переменной) к каждому месяцу однолетнего временного ряда, чтобы в результате я получил 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' режима 'function' не найден

В чем может быть проблема с моим кодом?

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Я не совсем уверен, что идет не так, может быть, 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, поэтому он выдает ошибку. Однако это сработает, если мы ограничим вывод регрессии чем-то, что может быть приведено, например:

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 голос
/ 07 июня 2019

Воспроизводимый пример был бы хорош, но вы , вероятно, хотите

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

... то есть, вы просто передаете rq функцию в качестве аргумента, а затем добавляете другуюаргументы rq() в качестве дополнительных аргументов (которые соответствуют аргументу ... для apply.monthly())

...