xts到。每月给出错误的结果

时间:2016-04-28 06:49:41

标签: r time-series frequency xts zoo

当我每月执行以下操作时 - >季度转换

xts.testm <- xts(rnorm(440*12, mean=0, sd=10), order.by=timeBasedSeq(155001/1989))
xts.testq<-to.quarterly(xts.testm, OHLC = FALSE)
tail(xts.testm)
tail(xts.testq)

我得到以下输出,显示原始月度和新季度输出:

               [,1]
Jul 1989  4.4441175
Aug 1989 -0.2839412
Sep 1989 -3.3491154
Oct 1989 -1.9351425
Nov 1989  7.5427961
Dec 1989 -4.5846861
> tail(xts.testq)
             [,1]
1988 Q4 -1.537608
1989 Q1 -7.190733
1989 Q2  9.430785
1989 Q3  4.444117
1989 Q4 -1.935143
1989 Q4 -4.584686

请注意上一季度的重复和不正确的值。 to.quarterly应该抓住最后一个值。它不是。 Sep 1989 -3.349应为1989Q3 -4.44Dec 1989 -4.58应为1989Q4 -4.58。不知何故,有两个1989Q4值。不知何故,10月和7月的价值被攫取而不是9月和Decembers的价值。

到底发生了什么事?

2 个答案:

答案 0 :(得分:0)

它对我有用。使用set.seed()尝试使用可重现的示例。

set.seed(10)
xts.testm <- xts(rnorm(440*12, mean=0, sd=10), order.by=timeBasedSeq(155001/1989))
xts.testq<-to.quarterly(xts.testm, OHLC = FALSE)
tail(xts.testm,12)
tail(xts.testq,8)

你有这个输出吗?

tail(xts.testm,12)
               [,1]
dic 1988 -16.984259
gen 1989 -13.103928
feb 1989  -3.515761
mar 1989  23.712606
apr 1989   6.635250
mag 1989  13.826195
giu 1989   1.771894
lug 1989 -11.096838
ago 1989  14.664982
set 1989  12.516992
ott 1989  11.572212
nov 1989 -18.763949
> tail(xts.testq,8)
               [,1]
1988 Q1   4.2217167
1988 Q2   0.4267038
1988 Q3  25.3994248
1988 Q4 -16.9842591
1989 Q1  23.7126065
1989 Q2   1.7718940
1989 Q3  12.5169922
1989 Q4 -18.7639487

答案 1 :(得分:0)

这是CRAN上xts版本中的一个错误,已在development version中修复。

问题是您的xts.testm对象正在使用您的本地时区,即使索引是yearmon类(没有时区)。通过确保所有没有时区的索引类(例如Date,yearmon,yearqtr,chron)的TZ"UTC",可以在开发版本中修复此问题。

使用CRAN的xts:

R> set.seed(21)
R> xts.testm <- xts(rnorm(440*12, sd=10), order.by=timeBasedSeq(155001/1989))
R> str(xts.testm)  # "TZ: " implies local timezone
An ‘xts’ object on Jan 1550/Dec 1989 containing:
  Data: num [1:5280, 1] 7.93 5.22 17.46 -12.71 21.97 ...
  Indexed by objects of class: [yearmon] TZ: 
  xts Attributes:  
 NULL
R> xts.testq <- to.quarterly(xts.testm, OHLC = FALSE)
R> tail(xts.testq)
              [,1]
1988 Q4 -17.874026
1989 Q1   3.346780
1989 Q2  18.418469
1989 Q3   9.461461
1989 Q4 -16.074923
1989 Q4  -3.615878

使用xts的当前开发版本:

R> set.seed(21)
R> xts.testm <- xts(rnorm(440*12, sd=10), order.by=timeBasedSeq(155001/1989))
R> str(xts.testm)  # note "TZ: UTC"
An ‘xts’ object on Jan 1550/Dec 1989 containing:
  Data: num [1:5280, 1] 7.93 5.22 17.46 -12.71 21.97 ...
  Indexed by objects of class: [yearmon] TZ: UTC
  xts Attributes:  
 NULL
R> xts.testq <- to.quarterly(xts.testm, OHLC = FALSE)
R> tail(xts.testq)
              [,1]
1988 Q3   4.936151
1988 Q4   5.404136
1989 Q1  -3.331241
1989 Q2 -23.621581
1989 Q3   2.687675
1989 Q4  -3.615878