使用 statsmodels 的最大似然估计会使事情过于复杂?希望得到建议

Maximum Likelihood Estimation with statsmodels overcomplicates things? Hoping for Recommendations

在学习了几门高级统计课程后,我决定编写一些代码 functions/classes 以通过 MLE 自动估计不同分布的参数。在 Matlab 中,以下是我轻松编码一次的内容:

function [ params, max, confidence_interval ] = newroutine( fun, data, guesses )

lh = @(x,data) -sum(log(fun(x,data))); %Gets log-likelihood from user-defined fun.

options = optimset('Display', 'off', 'MaxIter', 1000000, 'TolX', 10^-20, 'TolFun', 10^-20);
[theta, max1] = fminunc(@(x) lh(x,data), guesses,options);
params = theta 
max = max1

end

我只需要将基础 pdf 方程正确指定为 fun,并且使用更多代码我可以计算 p 值、置信区间等

使用 Python,但是,我在 MLE 自动化上找到的所有资源(例如,here and here坚持 这是最简单的方法要做到这一点,就需要使用 statsmodelGenericLikelihoodModel 的子 class 来深入研究 OOP,这对我来说似乎太复杂了。我的理由是,由于可以从 pdf 自动创建对数似然(至少对于绝大多数函数而言),并且 scipy.stats."random_dist".fit() 已经很容易 returns MLE 估计,它 似乎 荒谬,每次你有一个新的 dist 时都必须编写 ~30 行 class 代码。适合。

我意识到按照这两个链接建议的方式进行操作可以让您自动利用 statsmodel's 函数,但老实说,这似乎并不比利用 scipy 自己编写更简单的函数简单.

我是否错过了执行基本 MLE 的更简单方法,或者 statsmodels 这样做是否有充分的理由?

我写了 first post 概述了各种方法,我认为可以公平地说,虽然我推荐 statsmodels 方法,但我这样做是为了利用它提供的后估计工具并每次估计模型时都会得到标准误差。

当使用 minimize 时,python 等同于 fminunc(正如您在示例中所概述的那样),通常我不得不使用 "Nelder-Meade" 或其他渐变无收敛法得到。由于我需要用于统计推断的标准误差,因此这需要使用 numdifftools 恢复粗麻布的额外步骤。所以最后,你提出的方法也有其复杂性(对于我的工作)。如果您只关心最大似然估计而不是推理,那么您概述的方法可能是最好的,并且您不需要 statsmodel 的机制是正确的。

仅供参考:在 a later post 中,我将您的方法与 autograd 结合使用,以显着提高大型最大似然模型的速度。我还没有成功地将它与 statsmodels.

一起使用