5

我想从 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()会自动处理。

4

2 回答 2

5

您可以使用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
于 2011-05-03T21:54:52.700 回答
5

buildData没有给你想要的东西,特别是因为DGS10NA假期(包括一年中的第一天)并且没有任何星期天的条目。因此,如果您尝试问题中的内容,那么您会得到以下奇怪的东西

> 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
于 2011-05-04T01:43:05.137 回答