【问题标题】:Reproducibility of predictions from GAM (mgcv package) [closed]GAM(mgcv包)预测的可重复性[关闭]
【发布时间】:2021-10-04 17:53:59
【问题描述】:

我正在使用使用 bam() R 包中的 bam() 函数构建的广义相加模型来预测二元响应的概率。

根据所提供的newdata 表的构成,对于相同的输入数据,我似乎得到的预测略有不同,但不明白为什么。

模型是使用如下公式构建的:

model <- bam(response ~ categorical_predictor1 + s(continuous_predictor, bs='tp'),
             data=data,
             family="binomial",
             select=TRUE,
             discrete=TRUE,
             nthreads = 16)

我还有几个分类和连续的预测变量,但为了节省篇幅,我在上面的公式中只提到了两个。

然后我这样预测:

predictions <- predict(model,
                       newdata = newdata,
                       type="response")

我想对大约 250 万行进行预测,但在测试期间我预测了 250,000 行的子集。

每次我使用模型预测该子集(即newdata=subset)时,我都会得到相同的输出 - 这是可重现的。但是,如果我使用该模型在 250 万行的完整表中预测相同的子集(即newdata=full_data),那么我得到的 250,000 子集的预测与单独预测它们时略有不同。

我一直认为每一行都是根据提供的预测器依次预测的,所以无法理解为什么预测会随着“newdata”的上下文而变化。如果我预测使用标准 glm 或随机森林,则不会发生这种情况,因此我认为它是特定于 gams 或 mgcv 包的。

抱歉,我无法提供可重现的示例 - 我的数据集很大,我不确定小示例数据集是否会发生同样的情况。

【问题讨论】:

    标签: r logistic-regression prediction gam mgcv


    【解决方案1】:

    来自predict.bam的帮助:
    “当discrete=TRUE 时,newdata 中的预测数据以与使用bam 的离散拟合方法相同的方式进行离散化。但是,离散化网格目前与拟合期间使用的网格不同。相反,为预测重新进行离散化数据。这意味着,如果您正在预测一组相对较小的预测数据,或者在规则网格上,那么结果实际上可能与没有离散化的结果相同。这种方法的缺点是,如果您使用一个大的数据框,然后将其拆分成更小的数据框再次进行预测,结果可能会略有不同,因为离散化误差略有不同。”

    您可能无法切换到 gam 或使用离散=FALSE,因为您需要速度。但是你必须处理一些小的差异作为交换。从帮助中,听起来您可以通过仔细选择子集来最小化这种情况,但您无法完全消除它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2016-01-07
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多