R cut - 标签具有前瞻偏差
Posted
技术标签:
【中文标题】R cut - 标签具有前瞻偏差【英文标题】:R cut - labels have look-ahead bias 【发布时间】:2021-09-04 09:21:45 【问题描述】:我就是无法让这种微不足道的行为发挥作用。我已经包含了很多例子来说明这个问题。
我有分钟柱数据,我想对 15 个柱进行分组并对它们执行一个函数,然后生成 15 分钟柱数据。我得到的时间戳是期间的开始而不是结束。我在cut()
中尝试了right
和include.lowest
参数,但这似乎不起作用。我还尝试了一些dplyr
排列,但无法正常工作。
set.seed(4984)
dat = data.frame(time=seq(as.POSIXct("2016-05-01"), as.POSIXct("2016-05-01") + 60*99, by=60),
ret=rnorm(100))
dat$by15 = cut(dat$time, breaks="15 min")
dat.summary = aggregate(ret ~ by15, FUN=sum, data=dat)
> head(dat)
time ret
1 2016-05-01 00:00:00 -0.1739740
2 2016-05-01 00:01:00 0.2906288
3 2016-05-01 00:02:00 -1.0067554
4 2016-05-01 00:03:00 0.3887459
5 2016-05-01 00:04:00 0.2865937
6 2016-05-01 00:05:00 -0.4570531
并聚合:
> head(dat.summary)
by15 ret
1 2016-05-01 00:00:00 0.6711667
2 2016-05-01 00:15:00 -1.4344507
3 2016-05-01 00:30:00 3.0797471
4 2016-05-01 00:45:00 3.7564378
5 2016-05-01 01:00:00 -2.1308232
6 2016-05-01 01:15:00 -3.7179450
问题是时间戳被作为周期的开始。在上面的示例中,dat.summary
应该如下所示:
> head(dat.summary)
by15 ret
1 2016-05-01 00:14:00 0.6711667
2 2016-05-01 00:29:00 -1.4344507
3 2016-05-01 00:44:00 3.0797471
4 2016-05-01 00:59:00 3.7564378
5 2016-05-01 01:14:00 -2.1308232
6 2016-05-01 01:29:00 -3.7179450
更长的故事如下。我想计算实现的方差。 R 中有一个功能:rRealizedVariance
来自实现的包,rRVar
来自高频。问题是他们计算 *daily( 实现的方差。我想在不同的时间段内执行此操作(例如每小时实现的方差)。实现的方差只是回报的平方和一个周期(例如 60 分钟)。在 python 中,每日实现的方差计算为:
return returns.resample('D').agg(lambda x: x.pow(2).sum())
我可以按 60 分钟计算:
return returns.resample('60min').agg(lambda x: x.pow(2).sum())
我正在尝试让它在 R 中工作。
编辑:我想在 15 分钟边界上对齐时间,例如,如果 dat
没有从干净的 15 分钟边界点开始:
dat = data.frame(time=seq(as.POSIXct("2016-05-01 00:03:00"), as.POSIXct("2016-05-01 00:03:00") + 60*99, by=60),
ret=rnorm(100))
添加 14 分钟的简单方法会导致整个时间分量错位。
【问题讨论】:
值增加 14 秒 @HongOoi 您的意思是在时间值上增加 14 分钟?好的,看起来可以,但我觉得这样做有点脏。 【参考方案1】:一个天真的答案是:
set.seed(4984)
dat = data.frame(time=seq(as.POSIXct("2016-05-01"), as.POSIXct("2016-05-01") + 60*99, by=60),
ret=rnorm(100))
dat$by15 = cut(dat$time, breaks="15 min")
# add 14 minutes
dat$by15 <- as.POSIXct(as.character(dat$by15)) + 60 * 14
dat.summary = aggregate(ret ~ by15, FUN=sum, data=dat)
编辑 1:
min_date <- "2016-05-01"
max_date <- "2016-06-01"
dat$by15 = cut(dat$time, breaks=seq(as.POSIXct(paste(min_date, "00:00:00")),
as.POSIXct(paste(max_date, "00:15:00")), by = "15 min"))
【讨论】:
如果我重新定义以下内容,那么求和会导致整个事情错位: dat = data.frame(time=seq(as.POSIXct("2016-05-01 00:03: 00"), as.POSIXct("2016-05-01 00:03:00") + 60*99, by=60), ret=rnorm(100)) 您不想仅仅更改cut
的标签吗?
我愿意,但不幸的是,在这种情况下,它必须对齐 N 分钟边界,即 15 分钟边界。碰巧我给出的示例从一个边界开始,因此添加 14 分钟的方法会将每个剪辑移动到正确的位置。如果数据不是从边界开始怎么办?如果从 3 分钟后开始,则晋级将不是 0-14、15-29、30-44、45-59,而是 3-17、18-32、33-47、48-02
您是否尝试像在编辑 1 中那样指定您想要的休息时间。这通常是一个很好的解决方案。
指定中断是否能解决您的问题?以上是关于R cut - 标签具有前瞻偏差的主要内容,如果未能解决你的问题,请参考以下文章