quantmod: buildData (, na.rm = FALSE) отбрасывает голову временного ряда - PullRequest
5 голосов
/ 04 мая 2011

Я хочу создать набор данных из серии FRED и использую пакет quantmod примерно так:

library(quantmod)
getSymbols(c('FEDFUNDS', 'GDPPOT', 'DGS10'), src='FRED')
dat <- buildData(FEDFUNDS ~ DGS10 + GDPPOT, na.rm=FALSE)

Мне нужен объект xts с наблюдениями для всех дат в самых длинных временных рядах,и пропущенные значения для заполнения более коротких временных рядов.В приведенном выше примере я получаю:

> head(dat, 2)
           FEDFUNDS DGS10 GDPPOT
1962-10-01     2.90  3.93 3141.6
1963-01-01     2.92    NA 3173.9
> head(FEDFUNDS, 2)
           FEDFUNDS
1954-07-01     0.80
1954-08-01     1.22
> head(DGS10, 2)
           DGS10
1962-01-02  4.06
1962-01-03  4.03
> head(GDPPOT, 2)
           GDPPOT
1949-01-01 1864.8
1949-04-01 1885.2

Серия FEDFUNDS была усечена для соответствия минимальному значению даты в серии DGS10.Мне нравится удобство функции buildData(), и я хотел бы использовать ее для этой задачи, но мне интересно, как я могу сохранить пропущенные наблюдения.

Большое спасибо за ваше время!

РЕДАКТИРОВАТЬ: причина, по которой я не хочу использовать слияние, заключается в том, что некоторые серии данных имеют разную периодичность и что buildData() позаботится об этомавтоматически.

Ответы [ 2 ]

5 голосов
/ 04 мая 2011

buildData не дает вам то, что вы хотите, в частности из-за того, что DGS10 означает NA в праздничные дни (включая первый день года) и не имеет никакой записи по воскресеньям. Так что если вы попробуете то, что у вас было в вопросе, то вы получите следующую странность

> tail(dat,16)
           FEDFUNDS DGS10  GDPPOT
2005-07-01     3.26  4.06 12611.7
2007-01-01     5.25    NA 13072.4
2007-10-01     4.76  4.56 13314.1
2008-01-01     3.94    NA 13393.0
2008-04-01     2.28  3.57 13471.2
2008-07-01     2.01  4.01 13547.1
2008-10-01     0.97  3.77 13619.9
2009-01-01     0.15    NA 13689.2
2009-04-01     0.15  2.68 13753.1
2009-07-01     0.16  3.55 13813.7
2009-10-01     0.12  3.21 13872.0
2010-01-01     0.11    NA 13928.2
2010-04-01     0.20  3.89 13985.8
2010-07-01     0.18  2.96 14044.7
2010-10-01     0.19  2.54 14109.8
2011-04-01     0.10  3.46 14247.2

с несколькими пропущенными строками, включая весь 2006 год. dat является zoo объектом, а не xts.

Если вы используете GDPPOT, то, вероятно, вы хотите использовать квартальные данные. Попробуйте это:

FEDFUNDSq <- aggregate(na.omit(FEDFUNDS), as.yearqtr, first)
DGS10q    <- aggregate(na.omit(DGS10),    as.yearqtr, first)
GDPPOTq   <- aggregate(na.omit(GDPPOT),   as.yearqtr, first)
dat2 <- as.xts(merge(FEDFUNDSq, DGS10q, GDPPOTq))

as.xts() только там, потому что вы просили его. Это должно дать вам NA там, где вы хотите, а не там, где вы этого не хотите. Например, следующее выглядит лучше, чем предыдущий хвост.

> head(tail(dat2,66),25)
        FEDFUNDSq DGS10q GDPPOTq
2005 Q3      3.26   4.06 12611.7
2005 Q4      3.78   4.39 12684.6
2006 Q1      4.29   4.37 12758.9
2006 Q2      4.79   4.88 12835.2
2006 Q3      5.24   5.15 12913.0
2006 Q4      5.25   4.62 12992.1
2007 Q1      5.25   4.68 13072.4
2007 Q2      5.25   4.65 13153.1
2007 Q3      5.26   5.00 13233.9
2007 Q4      4.76   4.56 13314.1
2008 Q1      3.94   3.91 13393.0
2008 Q2      2.28   3.57 13471.2
2008 Q3      2.01   4.01 13547.1
2008 Q4      0.97   3.77 13619.9
2009 Q1      0.15   2.46 13689.2
2009 Q2      0.15   2.68 13753.1
2009 Q3      0.16   3.55 13813.7
2009 Q4      0.12   3.21 13872.0
2010 Q1      0.11   3.85 13928.2
2010 Q2      0.20   3.89 13985.8
2010 Q3      0.18   2.96 14044.7
2010 Q4      0.19   2.54 14109.8
2011 Q1      0.17   3.36 14178.3
2011 Q2      0.10   3.46 14247.2
2011 Q3        NA     NA 14316.8
5 голосов
/ 04 мая 2011

Вы можете использовать merge.xts, поскольку он автоматически набирает NA:

library(quantmod)
getSymbols('FEDFUNDS;DGS10'head(, src='FRED')
dat <- merge(FEDFUNDS, DGS10)
head(dat)
#            FEDFUNDS DGS10
# 1954-07-01     0.80    NA
# 1954-08-01     1.22    NA
# 1954-09-01     1.06    NA
# 1954-10-01     0.85    NA
# 1954-11-01     0.83    NA
# 1954-12-01     1.28    NA
...