我想绘制残差及其一阶滞后的散点图,即绘制 $(e_{t-1},e_{t})$ ,以及在Stata中添加最小二乘线。我的小演示来自Example 2.3 The U.S. Gasoline Market《计量经济学分析》(7e,William H. Greene),其中显示
use http://web.pdx.edu/~crkl/ec570/data/gasoline
describe
summarize
generate g=ln(gasexp/pop)
generate y=ln(income/pop)
generate pg=ln(gasp)
generate pnew=ln(pnc)
generate pused=ln(puc)
tsset year
regress g y pg pnew pused
predict e, residual
twoway scatter e l.e || lfit e l.e
Run Code Online (Sandbox Code Playgroud)
其中l.e表示残差 上的(一阶)滞后算子e,相关数字由下式给出
我想用R重现该图,我尝试
use http://web.pdx.edu/~crkl/ec570/data/gasoline
describe
summarize
generate g=ln(gasexp/pop)
generate y=ln(income/pop)
generate pg=ln(gasp)
generate pnew=ln(pnc)
generate pused=ln(puc)
tsset year
regress g y pg pnew pused
predict e, residual
twoway scatter e l.e || lfit e l.e
Run Code Online (Sandbox Code Playgroud)
如图所示
看来这个论证type='p'是行不通的!
我在互联网上搜索并找到lag.plot要做的事情
library(foreign)
gasoline = read.dta('http://web.pdx.edu/~crkl/ec570/data/gasoline.dta')
attach(gasoline)
gasoline$g=log(gasexp/pop)
gasoline$y=log(income/pop)
gasoline$pg=log(gasp)
gasoline$pnew=log(pnc)
gasoline$pused=log(puc)
str(gasoline)
head(gasoline)
gasoline1 = ts(gasoline, start=1953, frequency=1)
library(dynlm) #help(package="dynlm")
f = dynlm(g ~ y + pg + pnew + pused, data=gasoline1)
summary(f)
e = resid(f)
plot(e~lag(e,-1), xlab="Residuals, L", ylab="Residuals", type='p')
abline(lm(e~lag(e,-1)), col='red')
Run Code Online (Sandbox Code Playgroud)
它给出了
尽管如此,还是不太令人满意!我该如何补救?
最基本的是,您可以使用两个变量之间的回归线绘制lag(e)散点图:e
plot(lag(e), e)
abline(lm(e ~ lag(e)))
Run Code Online (Sandbox Code Playgroud)
如果您想要更复杂的东西,以下 ggplot 代码可以很好地复制 Stata 输出:
library(ggplot2)
ggplot(mapping = aes(lag(e), e)) +
geom_point(size = 3, col = '#1a476f', aes(shape = 'Residuals')) +
geom_smooth(method = 'lm', se = FALSE, fullrange = FALSE, col = '#8a2b31',
aes(linewidth = 'Fitted values')) +
ylim(c(-0.3, 0.1)) +
xlim(c(-0.3, 0.1)) +
scale_shape(name = NULL) +
scale_linewidth_manual(name = NULL, values = 0.5) +
labs(y = NULL, x = 'Residuals, L') +
theme_classic(base_size = 16) +
theme(legend.position = 'bottom',
plot.background = element_rect(color = NA, fill = '#eaf2f3'),
panel.grid.major.y = element_line(linewidth = 0.1, color = 'gray'),
legend.spacing.x = unit(0, 'mm'),
legend.background = element_blank(),
legend.box.background = element_rect(fill = 'white',
color = 'black', linewidth = 0.5))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |