【问题标题】:Computing Median Realized Volatility: RTAQ MedRV计算中值实现波动率:RTAQ MedRV
【发布时间】:2012-06-19 01:10:56
【问题描述】:

嘿,有谁知道如何循环通过 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 中有一个显着性测试来测试跳跃吗?

提前致谢。

【问题讨论】:

标签: r loops xts


【解决方案1】:

思路和你的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))

【讨论】:

  • 真的吗?再次感谢您的帮助,对不起,我在这么短的时间内有很多东西要学。
  • 你对这个包很熟悉吗?我正在尝试测试论文的跳跃,但似乎没有显着性测试
  • 对不起。我对那个包不是很熟悉。您可以将其作为一个新问题提出,或者您可能更幸运地在r-sig-finance mailing list 上询问此问题。 (但不要同时发帖)
  • 我运行:##Realized Variance; lapply(split(r.full, "days"), rRealizedVariance) -> full.obs.realized;当我尝试绘制对象时,出现错误:“xy.coords(x, y, xlabel, ylabel, log) 中的错误:'x' 是一个列表,但没有组件 'x' 和 'y'”如何将其转换为带有“x”和“y”的对象?你知道是否可以从 full.obs.realized 中获取 ,lapply(split(r.full, "days"), MedRV) -> full.obs.medrv 以便查看每天的差异? 我有 'r.full' 因为我忘了退货
  • P.s 抱歉刚刚开始理解您所说的可重现示例的含义
【解决方案2】:

另一种方法是使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多