我有年度数据。我需要拆分数据并为每个子集运行单独的回归。
就我而言,我有以下变量:政府支出,产出增长和经济衰退假人(如果扩张则= 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'需要矢量参数
当我对数据进行子集化时会出现问题。因为如果我没有为数据子集添加最后一个选项,我会运行代码并给出正确的答案 知道怎么做吗?
答案 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
但我会使用自回归模型来做到这一点......