/ / R Daty recesji Konwersja - r, quantmod, performanceanalytics

R Konwersja dat recesji - r, quantmod, performanceanalytics

Pobieraj dane pasma recesji do R via quantmod. Teraz jest to informacja binarna (w formacie xts) wyglądająca tak (tylko pokazany pierwszy okres recesji)

1857-01-01  0
1857-02-01  0
1857-03-01  0
1857-04-01  0
1857-05-01  0
1857-06-01  0
1857-07-01  1
1857-08-01  1
1857-09-01  1
1857-10-01  1
1857-11-01  1
1857-12-01  1
1858-01-01  1
1858-02-01  1
1858-03-01  1
1858-04-01  1
1858-05-01  1
1858-06-01  1
1858-07-01  1
1858-08-01  1
1858-09-01  1
1858-10-01  1
1858-11-01  1
1858-12-01  1

Mam teraz dwa problemy:

  1. Chciałbym określić początek i konieckażdy okres recesji (tj. uzyskać datę początkową i końcową) dla każdego okresu recesji. Ponieważ istnieją zerowe wartości pośrednie, gdy nie ma recesji, potrzebuję mechanizmu filtrowania, który a) odfiltrowuje zera (jest to łatwe), b) upewnia się, że każdy nowy okres recesji jest rozpoznawany. Samo wybranie tych nie jest jeszcze możliwe, ponieważ nie ma indywidualnych okresów recesji, a jedynie zbiór dat, w których nastąpiła recesja.
  2. Muszę go przekonwertować w formacie tabeli takim jak ten i tutaj http://www.r-bloggers.com/use-geom_rect-to-add-recession-bars-to-your-time-series-plots-rstats-ggplot/

    1857-06-01, 1858-12-01 1860-10-01, 1861-06-01 1865-04-01, 1867-12-01 1869-06-01, 1870-12-01 1873-10-01, 1879-03-01

Po wykonaniu tej czynności chcę użyć go jako event.lines w bibliotece PerformanceAnalytics.

Czy ktoś może mi pomóc w tym, jak to zrobić?

Jeśli chcesz pobrać serię do wypróbowania, zrób

library(quantmod)
getSymbols("USREC",src="FRED")

Odpowiedzi:

2 dla odpowiedzi № 1

Myślę, że to robi, co chcesz.

Podstawową ideą jest wykrycie przejść od 1 (recesja) do 0 (brak recesji) i odwrotnie. Możemy to zrobić diff(...). diff(...) zwraca wektor zawierający różnicę między danym wierszem a poprzednim, dla wszystkich wierszy (pierwszy element to NA). Tak więc, kiedy wchodzimy w różnicę recesji, zwraca 1, kiedy opuszczamy recesję, diff zwraca -1. Innym razem zwraca 0.

library(quantmod)
getSymbols("USREC",src="FRED")
getSymbols("UNRATE", src="FRED")
unrate.df <- data.frame(date= index(UNRATE),UNRATE$UNRATE)

start <- index(USREC[which(diff(USREC$USREC)==1)])
end   <- index(USREC[which(diff(USREC$USREC)==-1)-1])

reccesion.df <- data.frame(start=start, end=end[-1])
recession.df <- subset(reccesion.df, start >= min(unrate.df$date))

ggplot()+
geom_line(data=unrate.df, aes(x=date,y=UNRATE)) +
geom_rect(data=recession.df,
aes(xmin=start,xmax=end, ymin=0,ymax=max(unrate.df$UNRATE)),
fill="red", alpha=0.2)

EDYTOWAĆ (Odpowiedź na komentarz OP)

library(PerformanceAnalytics)
cycles.dates <- paste(format(start,"%Y-%m"),format(end[-1],"%Y-%m"),sep="/")
chart.TimeSeries(UNRATE,period.areas=cycles.dates,
period.color="lightblue", lwd=1)