2011-05-03 30 views
5

Tôi muốn tạo ra một tập dữ liệu từ FRED loạt và tôi sử dụng gói quantmod như vậy:quantmod: buildData (, na.rm = FALSE) giảm đầu của chuỗi thời gian

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

Những gì tôi cần là một XTS đối tượng với các quan sát cho tất cả các ngày trong chuỗi thời gian dài nhất và thiếu các giá trị để điền vào chuỗi thời gian ngắn hơn. Trong ví dụ trên, tôi nhận được:

> 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 

Loạt FEDFUNDS bị cắt bớt để khớp với giá trị ngày tối thiểu của loạt DGS10. Tôi thích sự tiện lợi của chức năng buildData() và rất thích sử dụng nó cho tác vụ này, nhưng tôi tự hỏi làm thế nào tôi có thể giữ các quan sát còn thiếu.

Cảm ơn bạn rất nhiều vì đã dành thời gian!

EDIT: Lý do tôi không muốn sử dụng hợp nhất là một số chuỗi dữ liệu có chu kỳ khác nhau và rằng buildData() tự động xử lý điều đó.

Trả lời

5

buildData không đem lại cho bạn những gì bạn muốn, đặc biệt là vì DGS10NA vào các ngày lễ (bao gồm cả ngày đầu tiên của năm) và không có bất kỳ mục nhập nào vào Chủ Nhật. Vì vậy, nếu bạn cố gắng những gì bạn có trong câu hỏi, sau đó bạn sẽ có được kỳ quặc sau

> 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 

với một vài dòng mất tích, trong đó có toàn bộ năm 2006. dat là một đối tượng zoo hơn xts.

Nếu bạn đang sử dụng GDPPOT thì có lẽ bạn muốn sử dụng dữ liệu hàng quý. Hãy thử điều này:

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)) 

Chỉ as.xts() vì bạn đã yêu cầu. Điều này sẽ cung cấp cho bạn NA nơi bạn muốn và không phải nơi bạn không muốn. Ví dụ, sau đây trông tốt hơn so với đuôi trước đó.

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

Hoạt động tuyệt vời. Cảm ơn! – Vincent

5

Bạn có thể sử dụng merge.xts, vì nó miếng với NA tự động:

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

+1 Để hợp nhất và đánh giá tốt lượng tử nói chung – Andrie

+1

Tôi xin lỗi, ví dụ của tôi không đủ thông tin. Lý do tôi muốn sử dụng buildData() là một số chuỗi dữ liệu của tôi có chu kỳ khác nhau và buildData() tự động xử lý điều đó. Sử dụng hợp nhất sẽ yêu cầu thao tác thêm để có được mọi thứ xuống dữ liệu hàng quý. Trong một nỗ lực để đơn giản hóa ví dụ, tôi đã lấy quá nhiều. Điều này được phản ánh trong bản chỉnh sửa tôi đã thực hiện cho bài đăng gốc. – Vincent

+0

@Vincent: có liên quan hơn một chút, vâng. :) Tôi sẽ cung cấp cho nó khác đi vào tối nay. –

Các vấn đề liên quan