R时间序列事件序列

时间:2018-01-17 13:15:10

标签: r time-series quantitative-finance

R还是比较新的我最近一直在使用R + tydiverse来分析财务(日内)时间序列数据,以收集一些统计数据来帮助我做出交易决策。

我还没有在R中找到一个好的解决方案,就是如何测试顺序事件 例如,如果我想知道在X发生之后和Z发生之前事件Y发生的概率(事件是变量的值,即价格达到某个值),R中是否有任何好的库或方法来实现这一目标?

例如,如果我有一个简单的

tribble(
~t, ~price, ~level1, ~level2, ~level3,
as.POSIXct(strptime("2011-03-27 08:00:00", "%Y-%m-%d %H:%M:%S")), 5, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 09:00:00", "%Y-%m-%d %H:%M:%S")), 7, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 10:00:00", "%Y-%m-%d %H:%M:%S")), 9, 6, 8, 0,
as.POSIXct(strptime("2011-03-27 11:00:00", "%Y-%m-%d %H:%M:%S")), 0, 6, 8, 0
)

我希望在 price > level1之前测试price > level 2 然后 price <= level3 (此数据示例中为true),是否存在在R?

中分析这样的东西的干净方法

1 个答案:

答案 0 :(得分:1)

答案

leadlag对此非常有用,请在此处查看一些dplyr说明:Lead and lag.如果您有多个股票或想要仅在日内使用,leadlag尊重这些group_by(stock)group_by(day)(一旦您恰当地定义了这些内容。!如果您的数据缺少一小时(例如9:00:00您的数据集中遗失了},潜在客户将从08:00:00跳到10:00:00,这可能不是您想要的。

df <- tribble(
  ~t, ~price, ~level1, ~level2, ~level3,
  as.POSIXct(strptime("2011-03-27 08:00:00", "%Y-%m-%d %H:%M:%S")), 5, 6, 8, 0,
  as.POSIXct(strptime("2011-03-27 09:00:00", "%Y-%m-%d %H:%M:%S")), 7, 6, 8, 0,
  as.POSIXct(strptime("2011-03-27 10:00:00", "%Y-%m-%d %H:%M:%S")), 9, 6, 8, 0,
  as.POSIXct(strptime("2011-03-27 11:00:00", "%Y-%m-%d %H:%M:%S")), 0, 6, 8, 0
)
df %>% filter(price > level1 & lead(price) > level2 & lead(price, 2) <= level3)

                  t     price  level1 level2 level3
               <dttm>   <dbl>  <dbl>  <dbl>  <dbl>
1 2011-03-27 09:00:00     7      6      8      0

还有'时间感知'tidyverse风格包可以帮助解决这个问题(但我没有太多经验):https://business-science.github.io/tibbletime/和其他我不记得的。

另请阅读Hadley Wickham的免费在线书籍R4DS的nycflights部分:dates and timesmodel building