如何使用xts对象处理TTR库中的“系列包含非领先的NA”?

时间:2012-10-15 20:37:26

标签: r xts

我经常遇到在定量交易模型建模时如何处理NA值的问题。以下示例是关于自1997-01-01以来EOD数据存储在xts对象中的库存,其中有四列名为" High"," Low"" Close&#34 ;,"卷&#34 ;.数据来自彭博社。当我想计算20天的滚动量时,会出现错误消息:

SMA(stock$Volume, 20)
Error in runSum(x, n) : Series contains non-leading NAs  

我很快找到了问题(我知道这是NA值,因为我已经尝试了1000次)并且发现了缺少体积数据的两天。我复制了那些日子'数据如下。作为一个快速观察,TTR中的SMAEMA等函数如果前面有数字并且后跟数字,则无法处理NAs。

stock <- as.xts(matrix(c(94.46,92.377,94.204,NA,71.501,70.457,70.979,NA), 2, 4,
  byrow = TRUE, dimnames = list(NULL, c("High","Low","Close","Volume"))),
  as.Date(c("1998-07-07", "1999-02-22")))

处理此问题的最佳方法是什么?是将stock$Volume存储为删除了NA值的临时对象,然后计算滚动量并将其与merge.xts合并,同时添加fill = NA,以便插入NA值再次?但这是正确的,因为你花了最近20个交易日而不只是20天窗口中的19个?

我希望某种&#34;最佳实践&#34;可能是这篇文章的结果,因为我认为这个问题也适用于其他财务上的R用户,无论他们是从彭博,雅虎财经还是其他来源获取数据。

3 个答案:

答案 0 :(得分:1)

我不知道“最佳做法”,但有一种替代方案可能是所谓的“非均匀时间序列算子”,如Operators on Inhomogeneous Time Series所示。

此类问题非常适合Quantitative Finance堆栈交换网站(例如,请参阅How to update an exponential moving average with missing values?)。

答案 1 :(得分:0)

获取包含NA的初始时间序列,例如a.ts 通过使用na.approx通用函数来近似NAs,用插值替换每个NA(动物园包文档中的更多细节)

b.ts=na.approx(a.ts)

b.ts是时间

答案 2 :(得分:0)

尝试na.omit

我遇到了同样的问题,这为我解决了这个问题。