2

我无法在文档中找到这个问题的答案,我认为这是有效的,因为zoo它是对象的基础,xts但是:

  1. 可以在对象 上使用通常的lagdiff功能吗?xts
  2. 如果我想对某种意义上rollapplyxts对象使用功能zoo-我知道它xts具有period.apply在非重叠区域上工作的功能-应该只rollapplyxts对象上使用并且它应该再次工作,因为zoo下面有一个?

编辑:我只是查看了详细信息,但似乎这zoo实际上并不是xts. 有人可以对此发表评论/验证吗?

4

2 回答 2

11

可以,但你可能不会得到你期望的结果。

lag这是应用于ts对象的一年滞后(ldeaths是一个内置数据集,在帮助文件中用作示例lag,因此您也可以尝试)。滞后集从一年前开始(并显示所有数据)。

ldeaths
#       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
# 1974 3035 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512
# 1975 2933 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837
# 1976 2787 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823
# 1977 3102 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293
# 1978 2815 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491
# 1979 3084 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915
lag(ldeaths, 12)
#       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
# 1973 3035 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512
# 1974 2933 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837
# 1975 2787 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823
# 1976 3102 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293
# 1977 2815 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491
# 1978 3084 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915

现在,将数据集转换为xts对象并尝试。

ldeaths.x = as.xts(ldeaths)
head(lag(ldeaths.x, 12), n=14)
#          [,1]
# Jan 1974   NA
# Feb 1974   NA
# Mar 1974   NA
# Apr 1974   NA
# May 1974   NA
# Jun 1974   NA
# Jul 1974   NA
# Aug 1974   NA
# Sep 1974   NA
# Oct 1974   NA
# Nov 1974   NA
# Dec 1974   NA
# Jan 1975 3035
# Feb 1975 2552

哎呀。不是你所期望的。但是你应该期待它,因为帮助文件lag.xts说:

... 已决定 lag 的默认行为应与该运算符的常见时间序列解释相匹配 - 特别是时间 't' 的值应该是时间 't-1' 的值以表示正滞后。这与 lag.zoo 和 lag.ts 不同。

所以,让我们试试吧k = -12

head(lag(ldeaths.x, -12), n=14)
#          [,1]
# Jan 1974 2933
# Feb 1974 2889
# Mar 1974 2938
# Apr 1974 2497
# May 1974 1870
# Jun 1974 1726
# Jul 1974 1607
# Aug 1974 1545
# Sep 1974 1396
# Oct 1974 1787
# Nov 1974 2076
# Dec 1974 2837
# Jan 1975 2787
# Feb 1975 3891

为了好玩,zoo对象会发生什么?首先,转换为zoo然后尝试。

ldeaths.z = zoo(ldeaths.x)
head(lag(ldeaths.z, 12), n=14)
# 
# Jan 1974 2933
# Feb 1974 2889
# Mar 1974 2938
# Apr 1974 2497
# May 1974 1870
# Jun 1974 1726
# Jul 1974 1607
# Aug 1974 1545
# Sep 1974 1396
# Oct 1974 1787
# Nov 1974 2076
# Dec 1974 2837
# Jan 1975 2787
# Feb 1975 3891
于 2012-08-08T07:11:55.937 回答
4

xts 对象不是“下面”的动物园对象。$.zooxts 是 zoo 的子类,这意味着如果泛型函数(例如and )不存在 xts 方法,则调用 zoo 方法$<-.zoo。zoo 和 xts 对象都是具有有序索引属性的矩阵。xts 要求索引是基于时间的。

是的,您可以在 xts 对象上使用lag和。diff正如mrdwab 所 指出的,lag.xts故意的行为与lag.tsand不同lag.zoo

您也可以rollapply在 xts 对象上使用 zoo 的函数系列,但您可能需要as.xts结果。

于 2012-08-08T11:19:10.423 回答