gpt4 book ai didi

R 经济衰退日期转换

转载 作者:行者123 更新时间:2023-12-03 05:34:14 25 4
gpt4 key购买 nike

我正在通过 quantmod 将衰退带数据下载到 R 中。现在,这是一个二进制信息(xts 格式),看起来像这样(仅显示第一个衰退期)

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

现在,我有两个问题:

  1. 我想确定每个衰退期的开始和结束时间(即获取开始和结束日期)。由于存在没有衰退的中间零,所以我需要一个过滤机制,a)过滤掉零(这很容易),b)确保识别每个新的衰退期。仅选择这些还不够,因为那时不存在单独的衰退期,而只是发生衰退的日期的集合。
  2. 我需要将其转换为这样的表格格式,如下所示 http://www.r-bloggers.com/use-geom_rect-to-add-recession-bars-to-your-time-series-plots-rstats-ggplot/

    1857-06-01, 1858-12-011860-10-01, 1861-06-011865-04-01, 1867-12-011869-06-01, 1870-12-011873-10-01、1879-03-01

完成此操作后,我想将其用作库 PerformanceAnalytics 中的 event.lines。

有人可以帮我解决这个问题吗?

如果您想下载该系列进行尝试,请执行

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

最佳答案

我想这就是你想要的。

基本思想是检测从 1(衰退)到 0(无衰退)的转变,反之亦然。我们可以使用 diff(...) 来做到这一点。 diff(...) 返回包含所有行的给定行与前一行之间差异的向量(第一个元素是 NA)。因此,当我们进入衰退时,diff 返回 1,当我们离开衰退时,diff 返回 -1。所有其他时间都返回 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)

编辑(对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)

关于R 经济衰退日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com