R 中的 lag.plot 与 Stata 中的一样

Joh*_*one 0 r stata

我想绘制残差及其一阶滞后的散点图,即绘制 $(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)

它给出了

在此输入图像描述

尽管如此,还是不​​太令人满意!我该如何补救?

All*_*ron 5

最基本的是,您可以使用两个变量之间的回归线绘制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)

在此输入图像描述