从 gamm、gam 和 lme 模型中获取 AIC 或 BIC citerium:在 mgcv 中如何?我怎么能相信结果呢?
Get the AIC or BIC citerium from a gamm, gam, and lme models: How in mgcv? And how can I trust the result?
我是 Gamms 和 gams 的新手,所以这个问题可能有点基础,非常感谢您的帮助:
我正在使用以下代码:
M.gamm <- gamm (bsigsi ~ s(summodpa, sed,k= 1, fx= TRUE, bs="tp") + s(sumlightpa, sed, k=1, fx= TRUE, bs="tp") , random = list(school=~ 1) , method= "ML", na.action= na.omit, data= Pilot_fitbit2)
代码运行,但给我这个反馈:
Warning messages: 1: In smooth.construct.tp.smooth.spec(object,
dk$data, dk$knots) : basis dimension, k, increased to minimum
possible
2: In smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) :
basis dimension, k, increased to minimum possible
问题:
- 我的主要问题是如何从中获得 AIC 或 BIC?
我已经尝试了
BIC(M.gamm$gam)
和 BIC(M.gamm$lme)
,因为 gamm 存在于两个部分(lme 和 gam),而对于后者(使用 lme)我确实得到了一个值,bot 对于第一个,我不要得到一个值。有谁知道为什么以及如何获得一个?
问题是我想将此值与 gam 模型的 BIC 值进行比较,但我不确定哪一个(BIC(M.gamm$lme)
或 BIC(M.gam$gam)
)是正确的。我可以为 gam 和 lme 模型推导出 BIC 和 AIC。
- 如果我能够获得 gamm 模型的 AIC 或 BIC - 我怎么知道我可以信任结果?我需要注意什么才能正确解释结果?目前,我在所有模型中都使用 ML,并且还使用相同的包 (mgcv) 来估计 lme、gam 和 gamm 以建立可比性。
如有任何帮助/建议或想法,我们将不胜感激!
最良好的祝愿,
诺埃米
非常感谢!
此警告是由于要求为您的两个平滑中的每一个平滑的单一函数基础而出现的;这没有任何意义,因为这两个基数只包含等价的常数函数,如果您的模型中有另一个常数项(截距),这两个函数都是无法识别的。一旦 mgcv 将可识别的约束应用于约束,两个平滑将从模型中完全删除。
因此警告; mgcv 没有做你想做的事。相反,它将 k
设置为可能的最小值。将 k
设置为更大的值;如果您想要低等级平滑,您不妨将其保留为默认值并且不要在 s()
中指定它。另外,除非你真的想要一个不受惩罚的样条拟合,否则不要使用 fix = TRUE
.
我不太熟悉适用于校正平滑度选择的 GAM(M)s 的任何 BIC 理论。使用 REML 平滑度选择估计 gam()
模型的 AIC
方法确实有一些超越它的理论,包括 Simon Wood 及其同事最近的一篇论文。
mgcv FAQ有以下两点要说
如何比较 gamm 模型? 在恒等式 link 正常错误情况下,基于 AIC 和假设检验的方法就可以了。否则最好根据 summary.gam 制定策略,或者,简单的随机效应可以用 gam 拟合,这使得比较简单明了。包 gamm4 是一个替代方案,它允许为广义模型选择 AIC 类型模型。
使用 gamm 或 gamm4 时,报告的 AIC 对于 gam 对象和 lme 或 lmer 对象是不同的。这是为什么? 这有几个原因。最重要的是所使用的模型在两种表示中实际上是不同的。当将 GAM 视为混合模型时,您隐含地假设如果您收集了一个复制数据集,那么您的模型中的平滑看起来与原始模型中的平滑完全不同,除了具有相同的平滑度。从技术上讲,您会期望在随机效应模型下从它们的分布中重新绘制平滑。当从通常的惩罚回归角度查看游戏时,您会期望平滑在数据复制下看起来大致相似。也就是说,您实际上是在使用贝叶斯模型进行平滑处理,而不是随机效应模型(只是常客随机效应和贝叶斯计算恰好在计算估计值时重合)。由于对数据生成过程的不同假设,AIC 模型比较会根据所采用的模型给出相当不同的答案。您使用哪种应该取决于您真正认为合适的模型。此外,AIC 的计算也不同。混合模型 AIC 使用边际似然和相应数量的模型参数。 gam模型使用惩罚似然和有效自由度。
所以,我可能会坚持使用 AIC,而不是使用 BIC。我会考虑我对 GAM(M) 的哪种解释最感兴趣。如果它们这么简单,我也可能会使用 gam()
来拟合你在这里的随机效应。等效模型将在主公式中包含 + s(school, bs = 're')
并在使用 gam()
时排除 random
位
gam(bsigsi ~ s(summodpa, sed) + s(sumlightpa, sed) +
s(school, bs = 're'), data = Pilot_fitbit2,
method = 'REML')
注意二维同位素平滑; sed
和 summodpa
以及 sumlightpa
都需要在相同的单位中,在每个平滑中具有相同的摆动度。如果它们不在相同的单位或有不同的摆动,请使用 te()
而不是 s()
作为二维项。
还要注意像这样出现在两个或多个平滑中的变量; mgcv 将尽最大努力使模型可识别,但即便如此您也很容易陷入计算问题。更好的建模方法是通过分解两个 2d 平滑中的影响来估计 sed
和其他项的边际效应加上它们的二阶交互作用,如下所示:
gam(bsigsi ~ s(sed) + s(summodpa) + s(sumlightpa) +
ti(summodpa, sed) + ti(sumlightpa, sed) +
s(school, bs = 're'), data = Pilot_fitbit2,
method = 'REML')
其中 ti()
平滑是张量积 interaction 基础,当两个边际变量的主要影响已从基础中移除时。因此,您可以将它们视为纯粹的平滑交互项。这样,sed
的主效应就包含在一个平滑项中了。
我是 Gamms 和 gams 的新手,所以这个问题可能有点基础,非常感谢您的帮助:
我正在使用以下代码:
M.gamm <- gamm (bsigsi ~ s(summodpa, sed,k= 1, fx= TRUE, bs="tp") + s(sumlightpa, sed, k=1, fx= TRUE, bs="tp") , random = list(school=~ 1) , method= "ML", na.action= na.omit, data= Pilot_fitbit2)
代码运行,但给我这个反馈:
Warning messages: 1: In smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) : basis dimension, k, increased to minimum possible
2: In smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) :
basis dimension, k, increased to minimum possible
问题:
- 我的主要问题是如何从中获得 AIC 或 BIC?
我已经尝试了
BIC(M.gamm$gam)
和BIC(M.gamm$lme)
,因为 gamm 存在于两个部分(lme 和 gam),而对于后者(使用 lme)我确实得到了一个值,bot 对于第一个,我不要得到一个值。有谁知道为什么以及如何获得一个? 问题是我想将此值与 gam 模型的 BIC 值进行比较,但我不确定哪一个(BIC(M.gamm$lme)
或BIC(M.gam$gam)
)是正确的。我可以为 gam 和 lme 模型推导出 BIC 和 AIC。 - 如果我能够获得 gamm 模型的 AIC 或 BIC - 我怎么知道我可以信任结果?我需要注意什么才能正确解释结果?目前,我在所有模型中都使用 ML,并且还使用相同的包 (mgcv) 来估计 lme、gam 和 gamm 以建立可比性。
如有任何帮助/建议或想法,我们将不胜感激!
最良好的祝愿, 诺埃米
非常感谢!
此警告是由于要求为您的两个平滑中的每一个平滑的单一函数基础而出现的;这没有任何意义,因为这两个基数只包含等价的常数函数,如果您的模型中有另一个常数项(截距),这两个函数都是无法识别的。一旦 mgcv 将可识别的约束应用于约束,两个平滑将从模型中完全删除。
因此警告; mgcv 没有做你想做的事。相反,它将 k
设置为可能的最小值。将 k
设置为更大的值;如果您想要低等级平滑,您不妨将其保留为默认值并且不要在 s()
中指定它。另外,除非你真的想要一个不受惩罚的样条拟合,否则不要使用 fix = TRUE
.
我不太熟悉适用于校正平滑度选择的 GAM(M)s 的任何 BIC 理论。使用 REML 平滑度选择估计 gam()
模型的 AIC
方法确实有一些超越它的理论,包括 Simon Wood 及其同事最近的一篇论文。
mgcv FAQ有以下两点要说
如何比较 gamm 模型? 在恒等式 link 正常错误情况下,基于 AIC 和假设检验的方法就可以了。否则最好根据 summary.gam 制定策略,或者,简单的随机效应可以用 gam 拟合,这使得比较简单明了。包 gamm4 是一个替代方案,它允许为广义模型选择 AIC 类型模型。
使用 gamm 或 gamm4 时,报告的 AIC 对于 gam 对象和 lme 或 lmer 对象是不同的。这是为什么? 这有几个原因。最重要的是所使用的模型在两种表示中实际上是不同的。当将 GAM 视为混合模型时,您隐含地假设如果您收集了一个复制数据集,那么您的模型中的平滑看起来与原始模型中的平滑完全不同,除了具有相同的平滑度。从技术上讲,您会期望在随机效应模型下从它们的分布中重新绘制平滑。当从通常的惩罚回归角度查看游戏时,您会期望平滑在数据复制下看起来大致相似。也就是说,您实际上是在使用贝叶斯模型进行平滑处理,而不是随机效应模型(只是常客随机效应和贝叶斯计算恰好在计算估计值时重合)。由于对数据生成过程的不同假设,AIC 模型比较会根据所采用的模型给出相当不同的答案。您使用哪种应该取决于您真正认为合适的模型。此外,AIC 的计算也不同。混合模型 AIC 使用边际似然和相应数量的模型参数。 gam模型使用惩罚似然和有效自由度。
所以,我可能会坚持使用 AIC,而不是使用 BIC。我会考虑我对 GAM(M) 的哪种解释最感兴趣。如果它们这么简单,我也可能会使用 gam()
来拟合你在这里的随机效应。等效模型将在主公式中包含 + s(school, bs = 're')
并在使用 gam()
random
位
gam(bsigsi ~ s(summodpa, sed) + s(sumlightpa, sed) +
s(school, bs = 're'), data = Pilot_fitbit2,
method = 'REML')
注意二维同位素平滑; sed
和 summodpa
以及 sumlightpa
都需要在相同的单位中,在每个平滑中具有相同的摆动度。如果它们不在相同的单位或有不同的摆动,请使用 te()
而不是 s()
作为二维项。
还要注意像这样出现在两个或多个平滑中的变量; mgcv 将尽最大努力使模型可识别,但即便如此您也很容易陷入计算问题。更好的建模方法是通过分解两个 2d 平滑中的影响来估计 sed
和其他项的边际效应加上它们的二阶交互作用,如下所示:
gam(bsigsi ~ s(sed) + s(summodpa) + s(sumlightpa) +
ti(summodpa, sed) + ti(sumlightpa, sed) +
s(school, bs = 're'), data = Pilot_fitbit2,
method = 'REML')
其中 ti()
平滑是张量积 interaction 基础,当两个边际变量的主要影响已从基础中移除时。因此,您可以将它们视为纯粹的平滑交互项。这样,sed
的主效应就包含在一个平滑项中了。