拆分数据以获得时间序列回归

时间:2016-05-02 15:28:12

标签: r time-series

我有年度数据。我需要拆分数据并为每个子集运行单独的回归。

就我而言,我有以下变量:政府支出,产出增长和经济衰退假人(如果扩张则= 1,如果经济衰退则= 0)。

我的部分数据如下所示:

obs  output      gov        recession <br/>
1 0.00882917   0.039961003  0  <br/>
2 0.015555371  0.229567089  1  <br/>
3 0.023108089 -0.032468535  1  <br/>
4 0.083470801  0.282564584  0  <br/>
5 0.181719693  1.523028403  1  <br/>
6 0.171951664  1.44379044   0  <br/>
7 0.124292839  -0.55404903  0  <br/>
8 0.138767158  -1.446050184 1  <br/>
9 -0.137507301 -0.276697354 1  <br/>
10 -0.07396658 -0.5196439   1  <br/>
11 0.026799992 -0.13379183  0  <br/>
12 0.000107547 -0.053192635 0  <br/>
13 0.017405451 -0.027499262 1   <br/>
14 0.004882142  -0.0077849  0  <br/>
15 -0.017568837 0.030565404 1  <br/>

我需要运行以下模型:

输出= L1(输出)+政府+ L1(政府)

我需要运行此回归两次,一次是recession = 1,一次是recession = 0。问题是滞后。因此,如果在2000年recession = 1和2001年recession = 0,当我运行子集recession = 0的模型时,我需要将滞后视为2000年。

我尝试使用`dynlm'包。根据这个方案,滞后写成如下:

“一个例子是d(y)~L(y,2),其中d(x,k)是diff(x,lag = k),L(x,k)是滞后(x,lag = -k),注意符号的差异.k的默认值在两种情况下1.对于L(),它也可以是矢量值,例如,y~L(y,1:4)“

我将变量放在数据框中并尝试运行以下代码:

df <- data.frame(ts(output), ts(gov), recession)

model <- dynlm( output ~ lag(output,-1) + gov + lag(gov,-1), data=df, subset = df$recession==1)
summary(model)

但它给我一个错误说

  

匹配错误(x,table,nomatch = nomatch,...):     'match'需要矢量参数

当我对数据进行子集化时会出现问题。因为如果我没有为数据子集添加最后一个选项,我会运行代码并给出正确的答案 知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

一种粗略而低效的方法,可以完全满足您的要求:

   library( zoo ) 
   output <- read.csv( "rectest.csv" ) 
   outTS <- zoo( output, output$obs ) 
   lagOutTS <- lag( outTS, -1 ) 
   lts <- merge( outTS, lagOutTS ) 
   model <- lm( output.outTS ~ output.lagOutTS + gov.outTS + gov.lagOutTS, data=lts, subset=recession.outTS==1 )

结果:

   lm(formula = output.outTS ~ output.lagOutTS + gov.outTS + gov.lagOutTS, 
    data = lts, subset = recession.outTS == 1)

   Coefficients:
    (Intercept)  output.lagOutTS        gov.outTS     gov.lagOutTS  

    0.03201          0.88965         -0.03083          0.18854  

但我会使用自回归模型来做到这一点......