从季度系列中形成月度系列

时间:2016-04-03 15:11:39

标签: r time-series interpolation

假设我们有季度GDP变化数据,如下所示:

         Country
1999Q3   0.01
1999Q4   0.01
2000Q1   0.02
2000Q2   0.00
2000Q3  -0.01

现在,我想将其转换为基于例如前两个季度的平均值,作为代表经济状况的一种衡量标准。即根据以上数据,我想提供以下内容:

          Country
2000-01   0.01
2000-02   0.01
2000-03   0.01
2000-04   0.015
2000-05   0.015
2000-06   0.015
2000-07   0.01
2000-08   0.01
2000-09   0.01
2000-10  -0.005
2000-11  -0.005
2000-12  -0.005

这样我就可以使用其他月度系列进行回归分析。将数据从更频繁的聚合到更少的频率很容易,但我怎么做到相反的方向呢?

修改 似乎使用spline将是正确的方法。那么问题是,在使用spline进行apply时,如何在国家/地区系列的开头处理不同数量的NA。像往常一样,数据框中有多个国家/地区作为列,并且在系列的开头它们具有不同数量的NA。

1 个答案:

答案 0 :(得分:3)

使用"yearmon"类索引转换为动物园,假设值位于季度末尾。然后执行滚动平均值z.mu。现在将其与包含所有月份的零宽度动物园对象合并,并使用na.spline填充缺失值(或使用na.locfna.approx进行不同形式的插值。 (可选)使用fortify.zoo转换回data.frame。

library(zoo)

z <- zoo(coredata(DF), as.yearmon(as.yearqtr(rownames(DF)), frac = 1))
z.mu <- rollmeanr(z, 2, partial = TRUE)
ym <- seq(floor(start(z.mu)), floor(end(z.mu)) + 11/12, 1/12)
z.ym <- na.spline(merge(z.mu, zoo(, ym)))

fortify.zoo(z.ym)

,并提供:

      Index      Country
1  Jan 1999 -0.065000000
2  Feb 1999 -0.052222222
3  Mar 1999 -0.040555556
4  Apr 1999 -0.030000000
5  May 1999 -0.020555556
6  Jun 1999 -0.012222222
7  Jul 1999 -0.005000000
8  Aug 1999  0.001111111
9  Sep 1999  0.006111111
10 Oct 1999  0.010000000
11 Nov 1999  0.012777778
12 Dec 1999  0.014444444
13 Jan 2000  0.015000000
14 Feb 2000  0.014444444
15 Mar 2000  0.012777778
16 Apr 2000  0.010000000
17 May 2000  0.006111111
18 Jun 2000  0.001111111
19 Jul 2000 -0.005000000
20 Aug 2000 -0.012222222
21 Sep 2000 -0.020555556
22 Oct 2000 -0.030000000
23 Nov 2000 -0.040555556
24 Dec 2000 -0.052222222

注意:使用的可重现形式的输入DF是:

Lines <- "         Country
1999Q3   0.01
1999Q4   0.01
2000Q1   0.02
2000Q2   0.00
2000Q3  -0.01"

DF <- read.table(text = Lines)

更新:最初问题是要求向前移动最后一个值但是更改为要求样条插值,因此答案已相应更改。也改为从1月开始到12月结束,现在假设数据为季末。