5

在建模量化交易模型时,我经常遇到如何处理 NA 值的相同问题。下面的示例是关于自 1997 年 1 月 1 日以来的 EOD 数据存储在 xts 对象中的股票,该对象具有名为“High”、“Low”、“Close”、“Volume”的四列。数据来自彭博社。当我想计算滚动 20 天的交易量时,会出现错误消息:

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

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

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 个交易日?

我希望某种“最佳实践”可以成为这篇文章的结果,因为我认为这个问题也会发生在金融领域的其他 R 用户身上,无论他们是从彭博、雅虎财经还是其他来源获取数据。

4

3 回答 3

2

我不知道“最佳实践”,但一种替代方法可能是所谓的“非均匀时间序列运算符”,如Operators on Inhomogeneous Time Series中所述。

这类问题非常适合 Quantitative Finance 堆栈交换站点(例如,请参阅如何使用缺失值更新指数移动平均线?)。

于 2012-10-17T20:22:06.270 回答
2

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

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

b.ts是时候

于 2017-03-22T09:16:51.643 回答
0

试试na.omit

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

于 2019-02-03T10:55:26.200 回答