R diff - 什么是等价于面板数据Stata中的D.x以生成差异变量

问题描述

在 R 中添加差分变量的正确语法是什么?类似于 Stata 中的“D.variable”命令。 我尝试在 R 中生成一个差分变量。我尝试了多种方法,但无法获得与 Stata 相同的输出。 R代码

(setf 7 (+ 1 7))

输出

DF <- DF%>%
   group_by(id) %>%
   mutate(D_MDR = F_MDR - dplyr::lag(F_MDR)) 
 summary(DF$D_MDR)

R 代码

 Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-0.7724 -0.1456 -0.0098 -0.0113  0.1232  0.8416    1441 

输出

DFP1 <- pdata.frame(DF,index = c("id"))
DFP1$D_MDR <- diff(DFP1$F_MDR,lag = 1,differences = 1) 
skim(DFP1$D_MDR)

这是Stata代码

-- Data Summary ------------------------
                           Values    
Name                       DFP1$D_MDR
Number of rows             10433     
Number of columns          1         
_______________________              
Column type frequency:               
  numeric                  1         
________________________             
Group variables            None      

-- Variable type: numeric ----------------------------------------------------------------------------------
# A tibble: 1 x 11
  skim_variable n_missing complete_rate    mean    sd     p0    p25      p50   p75  p100 hist 
* <chr>             <int>         <dbl>   <dbl> <dbl>  <dbl>  <dbl>    <dbl> <dbl> <dbl> <chr>
1 data               1441         0.862 -0.0113 0.207 -0.772 -0.146 -0.00978 0.123 0.842 ▁▃▇▂▁

Stata 输出

 tsset id year
 gen D_MDR = D.F_MDR
 sum D_MDR

解决方法

如果您想使用包 diff 中的 plm,这应该可以满足您的需求:

DFP1 <- pdata.frame(DF,index = c("id","year"))
DFP1$D_MDR <- diff(DFP1$F_MDR)

相对于您的代码,我在 pdata.frame 的索引参数中添加了时间维度。我删除了 diff 的参数(lag = 1 是默认值,difference 不是 plm::diff 的有效参数)。

请注意,如果 plm::diff 可以正确解释时间维度(最好使用时间维度的整数值)。