谢谢你的提问!
fwildclusterboot::boottest()
仅支持 OLS 模型的估计,因此运行泊松回归实际上应该在boottest()
. 我将不得不为此添加一个错误条件:)
您观察到的错误
Error in if (!is.numeric(lower) || !is.numeric(upper) || lower >= upper) stop("lower < upper is not fulfilled") :
missing value where TRUE/FALSE needed
源于用于计算置信区间的数值求根程序 - 我相信这是fwildclusterboot
不支持泊松回归的直接结果。
boottest
两者的内存问题都是fwildclusterboot
因为
- 您正在拟合的模型非常大,并且 fwildclusterboot 只接受一个固定效应 - 中指定的所有其他因子变量
fixest
都被转换为虚拟变量,因此传递给的设计矩阵boottest()
可能非常大。实际上,如果您不使用fe
参数 for fwildclusterboot::boottest()
,则在 中指定的所有固定效果都feols()
将被转换为虚拟对象,并且在引导程序中不会超出固定效果。lm()
您可以通过or (或通过 Stata 中的类似命令)运行回归来检查这是否是错误的根源,glm()
并查看这些估计是否也因内存而失败。
boottest
并且fwildclusterboot
是完全向量化的 - 因此两者都计算权重矩阵 v,它的维数G x B
为 ,其中 G 是集群的数量,B 是引导迭代的数量。如果 G 和 B 都很大,这会消耗相当多的内存!Stata.boottest
有一个函数参数 ,matsize
旨在帮助解决这种情况 - 我从文档中引用:“ matsize(#) 限制 G × B 矩阵 v∗ 的内存需求,以防止将虚拟内存缓存到磁盘。限制是以 GB 为单位指定;例如,matsize(8) 会将内存需求限制为 8GB。请注意,此选项不会限制 v∗ 的实际大小。相反,它会强制 boottest 将矩阵分解为不大于限制的块,并且然后依次创建和销毁每个块“
所以我建议你试试这个matsize
参数boottest
,看看你的错误是否是由于权重矩阵大而发生的?
内存是 的一个已知问题fwildclusterboot
,而提高内存性能的工作正在进行中。
最后, WildBootTests.jl中还有一个快速野生集群引导算法的新 Julia 实现,它支持基于 ML 的模型,并且 - 根据我的经验 - 对内存的要求比fwildclusterboot
.
更新 1
另请参阅有关使用and的讨论。boottest
pplmhdfe
更新 2
如果您想运行野生集群引导程序,因为您担心集群数量很少并且您的标准错误可能有偏差,另一种方法可能是尝试glm()
在clubSandwich中实施的自由度校正包。虽然我不得不承认,我不确定实施的修正对泊松回归的效果如何。