计算中位数实现的波动率:RTAQ MedRV

时间:2012-06-15 23:58:55

标签: r loops xts

嘿,有谁知道如何循环RTAQ包中的MedRV功能? 我有

##find days in data
ddx.f = endpoints(full, on="days");
days.full = format(index(full)[ddx.f], "%Y-%m-%d");

for (day in days.full) {
  x = full[day]

}

提取每一天,但不知道每天要添加什么来循环通过MedRV功能。 有任何想法吗?并且也有人知道在R中是否有重要性测试来测试跳跃?

提前致谢。

2 个答案:

答案 0 :(得分:0)

这个想法与您的last question

相同

将数据拆分为几天,并将功能应用于每一天。低于split(dxts, "days")将创建一个列表,其中每个元素都是1天的数据。 lapply每天都会应用一项功能。

set.seed(123)
full <- .xts(rnorm(2880), 1:2880*5*60)
mrv <- lapply(split(full, "days"), function(x) {
    #return an xts-object, which requires a timeBased index
    xts(MedRV(x), end(x)) #use the last timestamp of the day
})

然后rbind将结果转换为单个xts对象

do.call(rbind, mrv)
#                         [,1]
# 1969-12-31 23:55:00  58.2340
# 1970-01-01 23:55:00 268.5672
# 1970-01-02 23:55:00 260.3016
# 1970-01-03 23:55:00 310.5664
# 1970-01-04 23:55:00 302.1562
# 1970-01-05 23:55:00 272.9567
# 1970-01-06 23:55:00 291.0333
# 1970-01-07 23:55:00 309.7571
# 1970-01-08 23:55:00 229.9853
# 1970-01-09 23:55:00 298.3878
# 1970-01-10 18:00:00 215.6014

编辑/替代语法

mrv <- lapply(split(full, "days"), MedRV)
names(mrv) <- index(full)[endpoints(full, on="days")]
as.xts(do.call(rbind, mrv))

答案 1 :(得分:0)

另一种方法是使用period.apply函数或其apply.daily包装器。我过去得到了一些意想不到的结果,因为period.apply使用sapply代替lapply(至少我认为这就是原因),所以,我通常会这样做我做了另一个答案。

set.seed(123)
full <- .xts(rnorm(2880), 1:2880*5*60)
ddx.f = endpoints(full, on="days")
period.apply(full, ddx.f, MedRV)

apply.daily(full, MedRV) # same as period.apply but, endpoints are created for you
#                         [,1]
# 1969-12-31 23:55:00  58.2340
# 1970-01-01 23:55:00 268.5672
# 1970-01-02 23:55:00 260.3016
# 1970-01-03 23:55:00 310.5664
# 1970-01-04 23:55:00 302.1562
# 1970-01-05 23:55:00 272.9567
# 1970-01-06 23:55:00 291.0333
# 1970-01-07 23:55:00 309.7571
# 1970-01-08 23:55:00 229.9853
# 1970-01-09 23:55:00 298.3878
# 1970-01-10 18:00:00 215.6014