XTS ::帮助我了解period.apply()和to.period()之间的用法和区别

时间:2018-08-28 10:55:26

标签: r xts

我正在使用R学习时间序列分析,并且在学习时遇到了这两个函数。我确实了解到这两者的输出都是由周期频率定义的周期性数据,唯一可见的区别是to.period()中的OHLC输出选项。

要使用这些功能中的特定功能时,是否要使用OHLC?

1 个答案:

答案 0 :(得分:1)

to.period和所有to.minutes,to.week,to.quarterly确实是用于OHLC数据的。

如果您使用函数to.period,则它将从时段的第一天开始,时段的最后一天的结束以及指定时段的最高/最低价格开始。这些功能与quantmod / tidyquant / quantstrat软件包一起很好地工作。参见代码示例1。

如果提供to.period非OHLC数据,但是给出一个带有1个数据列的时间序列,则仍会返回某种OHLC。参见代码示例2。

现在period.apply更有趣。在这里,您可以提供自己的功能以应用于数据。如果要将功能汇总到不同时间段,尤其是与端点结合使用时,这在时间序列数据中可能是一项功能强大的功能。索引主要由端点指定,因为有了端点,您就可以创建到达更高时间级别(从一天到一周/等等)的索引。参见代码示例3和4。

请记住,如果您有多于1列的数据,请记住将矩阵函数与period.apply一起使用,因为xts基本上是矩阵和索引。参见代码示例5。

有关this data.camp course的更多信息。

library(xts)

data(sample_matrix)
zoo.data <- zoo(rnorm(31)+10,as.Date(13514:13744,origin="1970-01-01"))


# code example 1
to.quarterly(sample_matrix)
        sample_matrix.Open sample_matrix.High sample_matrix.Low sample_matrix.Close
2007 Q1           50.03978           51.32342          48.23648            48.97490
2007 Q2           48.94407           50.33781          47.09144            47.76719

# same as to.quarterly
to.period(sample_matrix, period = "quarters")
        sample_matrix.Open sample_matrix.High sample_matrix.Low sample_matrix.Close
2007 Q1           50.03978           51.32342          48.23648            48.97490
2007 Q2           48.94407           50.33781          47.09144            47.76719


# code example 2
to.period(zoo.data, period = "quarters")
           zoo.data.Open zoo.data.High zoo.data.Low zoo.data.Close
2007-03-31      9.039875      11.31391     7.451139       10.35057
2007-06-30     10.834614      11.31391     7.451139       11.28427
2007-08-19     11.004465      11.31391     7.451139       11.30360

# code example 3 using base standard deviation in the chosen period
period.apply(zoo.data, endpoints(zoo.data, on = "quarters"), sd)
2007-03-31 2007-06-30 2007-08-19 
  1.026825   1.052786   1.071758 

# self defined function of summing x + x for the period
period.apply(zoo.data, endpoints(zoo.data, on = "quarters"), function(x) sum(x + x) )
2007-03-31 2007-06-30 2007-08-19 
 1798.7240  1812.4736   993.5729 

# code example 5
period.apply(sample_matrix, endpoints(sample_matrix, on = "quarters"), colMeans)
               Open     High      Low    Close
2007-03-31 50.15493 50.24838 50.05231 50.14677
2007-06-30 48.47278 48.56691 48.36606 48.45318