xtabond2:工具矩阵依赖于内存中的数据集

时间:2015-08-11 19:07:37

标签: stata

以下两个xtabond2估算命令给出相同的估算结果:

webuse abdata, clear
gen wL3=l3.w
gen wL2=l2.w
xtabond2 n nL1 w yr* if wL3~=., gmm(w, lag(1 1)) iv(yr*) nolevel robust 
keep if wL2~=. 
xtabond2 n nL1 w yr*, gmm(w, lag(1 1)) iv(yr*) nolevel robust 

而以下两个xtabond2估算命令给出不同的估算结果(即使它们基于相同的样本并且等效地指定它们的仪器组):

webuse abdata, clear
gen wL3=l3.w
gen wL2=l2.w
xtabond2 n nL1 w yr* if wL3~=., gmm(w, lag(1 2)) iv(yr*) nolevel robust 
keep if wL2~=. 
xtabond2 n nL1 w yr*, gmm(w, lag(1 2)) iv(yr*) nolevel robust 

在后一个例子中,xtabond2在第一次估算中报告了18种工具,在第二次估算中报告了17种工具。

[从检查仪器矩阵开始,xtabond2似乎从内存中的所有数据构建仪器矩阵,而忽略了if对依赖和独立变量的预估样本限制声明(即xtabond2忽略if wL3~=.)。]

我的问题是:有没有办法从

生成估算结果
keep if wL2~=. 
xtabond2 n nL1 w yr*, gmm(w, lag(1 2)) iv(yr*) nolevel robust

以上没有先放弃观察?是否有一种聪明的方法可以控制内存中数据滞后的数量,以便在不丢弃观察值的情况下获得相同结果的工具?

将主数据集子集N次以将xtabond2应用于N个不同的数据子集(同时还限制构造仪器集的样本)似乎效率低下。

1 个答案:

答案 0 :(得分:0)

放弃观察似乎是(目前)控制/限制进入仪器矩阵的观测的唯一方法。

Stata具有内置功能,可用于删除观察结果,然后恢复原始数据集。而不是做

drop if ... 
xtabond2 ...
use ..., clear

可以改为做

preserve
xtabond2 ...
restore

有关详细信息,请参阅help preserve

请注意,在此过程之后恢复e(sample)会很困难,因为restore会将其删除。我发现的唯一建议是Richard Williams here

> I suppose if you really wanted/needed to keep e(sample) alive, you 
> could create and save a new dataset before you did you restore, and 
> then merge your original data set with the one that contained 
> e(sample).    Alternatively, I suppose it wouldn't be too hard to 
> figure out the commands that would generate e(sample) if you didn't 
> already have it.