“捕获”命令似乎使用Stata忽略-xtlogit的iter(#)选项

时间:2013-11-07 13:07:25

标签: stata

我正在运行.do文件,其中包含xtlogit估算的许多模型。即使模型没有收敛,我也想在日志中记录这一点。由于.do文件需要几个小时才能运行,我通常会离开并执行其他操作。不幸的是,模型的不收敛会停止整个.do文件。 因此,我使用capture noisily {}来运行整个.do文件。但是,这似乎忽略了我在每个xtlogit命令中分别指定的最大迭代次数,具体取决于变量的数量和模型的假设复杂性。

在运行模型之前,我已经在全局范围内使用set maxiter找到了解决方法。但是这不允许每个模型更精细的迭代规范(除非我使用它很多)。

我找不到有关capture此行为的任何报告。也许,有一个比set maxiter的解决方法更好的方法吗?

这是一个示例代码,通过强加太少的迭代来手动重现错误:

webuse union, clear
capture noisily {
xtlogit union age grade i.not_smsa south##c.year, fe iter(2)
xtlogit union age grade i.not_smsa south##c.year, iter(3) pa
xtlogit union age grade i.not_smsa south##c.year, fe iter(2)
}

.do文件在第二个模型之后停止,并显示错误消息“未达到收敛” r(430);由于capture而无法继续使用第三个模型。

3 个答案:

答案 0 :(得分:1)

我的猜测是你将capture应用于错误的级别。您希望在capture而不是整个文件中xtlogit出现任何错误。

此外,请查看nostop的{​​{1}}选项。

答案 1 :(得分:1)

这有效并尊重您的个人iter

webuse union, clear
capture noisily xtlogit union age grade i.not_smsa south##c.year, pa iter(3)
xtlogit union age grade i.not_smsa south##c.year, fe iter(2)
xtlogit union age grade i.not_smsa south##c.year, fe iter(3)

请注意,xtlogit的行为有所不同,具体取决于是否 您使用fepa选项。未能与前汇合不会 导致do文件停止,就像收敛失败时一样 与后者。这就是为什么我只将capture noisily放在第一行。

也许更有经验的用户可以 对此发表评论。如果没有,您可以联系Stata-tech支持。

底线,正如@NickCox已经提到的,你可以避免你的具体问题 调整capture

的位置

答案 2 :(得分:1)

我只是弄清楚为什么会发生这种情况,因为我遇到了类似的问题,其中xtlogit似乎违反了迭代(#)命令。原因是它正在计算两个独立的模型:比较模型和完整模型。它将迭代(#)应用于完整模型而不是比较模型。因为首先拟合比较模型,所以可以看到迭代超过迭代(#)。由于你的问题,设置maxiter解决了它!