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

问题描述 投票:3回答:3

在建模定量交易模型时,我经常遇到如何处理NA值的相同问题。以下示例是关于自1997-01-01以来EOD数据的库存存储在xts对象中,其中有四列名为“High”,“Low”,“Close”,“Volume”。数据来自彭博社。当我想计算滚动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个交易日?

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

r xts
3个回答
1
投票

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

这类问题非常适合Quantitative Finance堆栈交换站点(例如参见How to update an exponential moving average with missing values?)。


0
投票

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

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

b.ts是时候


0
投票

试试na.omit

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

© www.soinside.com 2019 - 2024. All rights reserved.