在R中滞后xts对象

Ale*_*lex 1 r time-series apply zoo xts

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

  1. 可以使用对象的常用lagdiff函数xts吗?
  2. 如果我想rollapply一个函数的xts中的对象zoo的意义-我知道,xtsperiod.apply哪个非重叠区域工作的作用-应一个只使用rollapplyxts对象,它应该再次因为有工作zoo底下?

编辑:我只是查找细节,它似乎并没有zoo真正的底层xts.有人可以对此进行评论/验证吗?

A5C*_*2T1 10

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

这是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
Run Code Online (Sandbox Code Playgroud)

现在,将数据集转换为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
Run Code Online (Sandbox Code Playgroud)

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

......决定滞后的默认行为应该与该运算符的公共时间序列解释相匹配 - 特别是时间'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
Run Code Online (Sandbox Code Playgroud)

为了好玩,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
Run Code Online (Sandbox Code Playgroud)