【问题标题】:Computing log-likelihood on a validation / test set计算验证/测试集上的对数似然
【发布时间】:2022-11-16 22:39:18
【问题描述】:

来自 Python 的 statsmodels 库的回归结果包括值 llf,我认为这是拟合期间获得的对数似然。然而,我对新数据的对数似然感兴趣,我在predict() 中使用的数据。是否有一个函数(即使没有记录)我可以调用来获取它?特别是,我对 OrderedModel 的对数似然感兴趣。

【问题讨论】:

    标签: python statsmodels


    【解决方案1】:

    在 statsmodels 中不能直接计算新数据的对数似然。 (例如参见https://github.com/statsmodels/statsmodels/issues/7947) 模型 loglike 方法始终使用数据、endog、exog 和其他模型特定数组,这些数组作为属性附加到模型。

    像 GLM 这样的几个模型和像 Logit、Poisson 这样的标准离散模型有一个 get_distribution 方法(在 statsmodels 0.14 中),它为类似于预测的新数据返回一个 scipy stats 兼容分布实例。此分布实例具有 pdf 和 logpdf 方法,可用于计算预测的对数似然。

    但是,这还不适用于 OrderedModel 等模型。

    两种可能的解决方法,可能适用于大多数情况(我没有检查 OrderedModel)

    • 使用预测数据创建一个新模型,然后使用来自估计模型的参数评估model.loglike。这将使用基于预测数据而非原始模型的 nobs 和自由度。因此,依赖于这些的结果可能不适合某些用例。
    • 更改基础模型的数据属性。也就是说,将新数据分配给 model.endog、model.exog,如果需要,还可以分配给其他数组。然后使用估计的参数调用 model.loglike 方法。

    这两个都是 hack,可能适用于 loglike 但可能不适用于某些其他模型或结果统计。
    一种正确的方法是编写新函数来直接计算类对数,或者转换预测概率以创建多项式分布实例。

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2023-02-26
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多