我正在运行.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
而无法继续使用第三个模型。
答案 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
的行为有所不同,具体取决于是否
您使用fe
或pa
选项。未能与前汇合不会
导致do文件停止,就像收敛失败时一样
与后者。这就是为什么我只将capture noisily
放在第一行。
也许更有经验的用户可以 对此发表评论。如果没有,您可以联系Stata-tech支持。
底线,正如@NickCox已经提到的,你可以避免你的具体问题
调整capture
。
答案 2 :(得分:1)
我只是弄清楚为什么会发生这种情况,因为我遇到了类似的问题,其中xtlogit似乎违反了迭代(#)命令。原因是它正在计算两个独立的模型:比较模型和完整模型。它将迭代(#)应用于完整模型而不是比较模型。因为首先拟合比较模型,所以可以看到迭代超过迭代(#)。由于你的问题,设置maxiter解决了它!