使用每个块的指示符变量阻止引导程序

时间:2013-07-12 20:40:46

标签: stata

我想运行块引导程序,其中块是国家/地区,并包含国家/地区指示符变量。我认为以下内容可行。

regress mvalue kstock i.country, vce(bootstrap, cluster(country))

但我收到以下错误。

. regress mvalue kstock i.country, vce(bootstrap, cluster(country))
(running regress on estimation sample)

Bootstrap replications (50)
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxx    50
insufficient observations to compute bootstrap standard errors
no results will be saved
r(2000);

这似乎应该有效。如果块引导程序为每个块选择相同的国家/地区,那么它似乎应该删除拦截。

我的错误是编码还是概念?以下是使用grunfeld数据的一些代码。

webuse grunfeld, clear
xtset, clear
generate country = int((company - 1) / 2) + 1
regress mvalue kstock i.country, vce(bootstrap, cluster(country))

1 个答案:

答案 0 :(得分:3)

这里的问题不在于您的编码,而在于概念。问题是您无法识别每个bootstrap样本中每个回归中的每个系数。并非所有“国家/地区”都包含在每个引导程序重复的数据集中。您可以使用vce( , noisily)子选项诊断正在进行的操作:

. regress mvalue kstock i.bscountry, vce(bootstrap, cluster(country) noisily)

生成错误是因为当回归与特定引导样本一起运行时,某些系数会丢失。在每个回归中,您可以看到由于共线性,某些国家的假人被忽略了。这应该是预期的并且很有意义 - 如果国家没有被抽出,那么国家假人可能会为自举样本中的所有观察结果= 0!

如果你真的想要估计国家假人的系数,那么如果K是国家数,你将不得不找到另一种方法,而不是用K群集引导。如果你不关心系数假人,你可以使用另一个简单地吸收固定效应的命令,并仅报告其他自变量上的系数(例如aregxtreg)。考虑发生了什么的一种方式是它类似于:

.bootstrap, cluster(country) idcluster(bscountry) noisily: regress mvalue kstock i.bscountry

使用idcluster()选项,在bootstrap示例中绘制的每个国家/地区都会获得自己的ID号。如果一个国家被抽两次,那么有两个假人。 (两个虚拟对象的系数自然结果相同或接近相同。)但是,此输出中的系数完全没有意义,因为bscountry“2”将在不同的自举迭代中成为不同的国家。由于您会忽略虚拟对象上的任何输出,因此您可以使用aregxtreg之类的模型,因为它们的运行速度更快。

尽管有许多应用程序可以使用群集进行自举,但这里的问题是在回归中包含群集虚拟变量。这一切都引出了这个练习是否有意义的问题。如果你试图估计国家假人的系数,那肯定不会。否则,上述解决方案可能没问题,但如果不了解您的研究问题就很难说。