繁体   English   中英

使用统计数据包对数百个协变量进行最大似然估计的方法

[英]Approaches for using statistics packages for maximum likelihood estimation for hundreds of covariates

我正在尝试调查针对大量协变量p和高维方案的最大似然估计的分布(这意味着p / n(样本数量为n时约为1/5))。 我正在生成数据,然后使用statsmodels.api.Logit使参数适合我的模型。

问题是,这似乎仅在低维范围内有效(例如300个协变量和40000个观测值)。 具体来说,我得到了最大迭代次数,对数似然被证明是发散的,并且出现了“奇异矩阵”错误。

我不确定该如何解决。 最初,当我仍在使用较小的值(例如80个协变量,4000个观察值)时,偶尔会遇到此错误,我最多设置了70次迭代,而不是35次。这似乎有所帮助。

但是,现在显然无济于事,因为我的对数似然函数正在发散。 这不仅仅是最大迭代次数内的不收敛问题。

很容易回答这些软件包并不意味着要处理这样的数字,但是有一些论文专门研究了这种高维状态,例如这里使用 p=800协变量和n=4000观测值。

当然,本文使用R而不是python。 不幸的是我不认识R。但是我应该认为python优化应该具有可比的“质量”?

我的问题:

可能是R比python statsmodels更适合在这种高p / n机制下处理数据的情况吗? 如果是这样,为什么并且可以使用R的技术来修改python statsmodels代码?

如何修改代码以适用于p = 800和n = 4000附近的数字?

在当前使用的代码中(来自其他几个问题),您隐式地使用Newton-Raphson方法。 这是sm.Logit模型的默认设置。 它可以将Hessian矩阵进行计算和求逆,以加快估计速度,但是对于大型矩阵而言,这是非常昂贵的-正如您已经看到的那样,当矩阵接近奇异时,更不用说会导致数值不稳定。 有关的Wikipedia 条目对此进行了简要说明。

您可以通过使用不同的求解器来解决此问题,例如bfgs (或lbfgs ),就像这样,

model = sm.Logit(y, X)
result = model.fit(method='bfgs')

即使对于n = 10000, p = 2000这对我来说也运行得很好。

除了估计之外,更成问题的是,用于生成样本的代码会导致数据具有很大程度的拟可分性,在这种情况下,整个MLE方法充其量是有问题的。 您应该紧急研究此问题,因为这表明您的数据可能不如您希望的那样良好。 准可分性在这里很好地解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM