2016-04-28 8 views
1

Когда я делаю следующие месячными -> ежеквартальных КонверсийXTS to.quarterly дает неверные результаты ежемесячного

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.44 и Dec 1989 -4.58 должно быть 1989Q4 -4.58. Как-то есть два значения 1989Q4. Почему-то октябрьские и июльские ценности захватываются вместо сентября и значения Децемерса.

Что, черт возьми, происходит?

ответ

0

Это ошибка в версии XTS на CRAN, что было зафиксировано в development version.

Проблема заключается в том, что ваш объект xts.testm использует ваш часовой пояс, хотя индекс является классом yearmon (который не имеет часовой пояс). Это исправлено в версии разработки, гарантируя, что все классы индексов, у которых нет часового пояса (например, Date, yearmon, yearqtr, chron), имеют от "UTC".

Использование XTS из CRAN:

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 
+0

большое спасибо за Ваш ответ! Я все еще новичок в R, поэтому, пожалуйста, простите мое невежество, но как я могу использовать версию разработки, с которой вы любезно связаны? Нужен ли мне этот «R-devel», о котором я читал? –

+0

@Knixd: это просто версия для разработки xts, а не версия для разработки R. –

+0

Wonderful. Я изучу, используя версию для развития xts.Thanks снова за помощью! –

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 

 Смежные вопросы

  • Нет связанных вопросов^_^