【发布时间】:2022-07-22 19:08:25
【问题描述】:
我一直在研究用于拟合半参数模型的 gamlss 包,并在 ga() 函数中发现了一些奇怪的东西。即使模型被指定为具有伽马分布,使用 REML 拟合,模型的输出也是高斯分布,使用 GCV 拟合。
例子::
library(mgcv)
library(gamlss)
library(gamlss.add)
data(rent)
ga3 <- gam(R~s(Fl)+s(A), method="REML", data=rent, family=Gamma(log))
gn3 <- gamlss(R~ga(~s(Fl)+s(A), method="REML"), data=rent, family=GA)
GAM 模型摘要::
summary(ga3)
Family: Gamma Link function: log Formula: R ~ s(Fl) + s(A) Parametric coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 6.667996 0.008646 771.2 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Approximate significance of smooth terms: edf Ref.df F p-value s(Fl) 1.263 1.482 442.53 <2e-16 *** s(A) 4.051 4.814 36.34 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 R-sq.(adj) = 0.302 Deviance explained = 28.8% -REML = 13979 Scale est. = 0.1472 n = 1969
GAMLSS 的模型摘要::
summary(getSmo(gn3))
Family: gaussian Link function: identity Formula: Y.var ~ s(Fl) + s(A) Parametric coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 6.306e-13 8.646e-03 0 1 Approximate significance of smooth terms: edf Ref.df F p-value s(Fl) 1.269 1.492 440.14 <2e-16 *** s(A) 3.747 4.469 38.83 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 R-sq.(adj) = 0.294 Deviance explained = 29.6% GCV = 0.97441 Scale est. = 0.97144 n = 1969
问题::
为什么模型输出给出了不正确的分布和拟合方法?我在这里遗漏了什么,这是正确的吗?
【问题讨论】:
-
嗨 Ben,我在 ?ga() 的帮助部分提供了一个示例。它正在使用 mgcv 包中的租金数据。我只是将它包含在我的问题中。如果您认为会有更多好处,我可以尝试模拟数据并将其包括在内?
-
不,这看起来不错。对于那些不熟悉这个框架的人,你能解释一下
getSmo()的作用/它的用途吗?我注意到summary(gn3)本身确实说它正在使用 Gamma-family 响应 ... -
我自己对此很陌生,但似乎 getSmo() 用于提取拟合平滑器的信息。如果您运行 summary(gn3) 仅包含 mu 和 sigma 截距的参数值,则它不包含协变量的估计值。
-
一个疯狂的猜测是模型的平滑项部分本质上是在一些潜在空间上拟合高斯模型(即,随机效应/潜在变量在链接尺度上被假定为多元高斯?) 但是你必须比我更了解 GAMLSS 如何运作的理论才能评估这个猜测......从某种意义上说,问题应该更多的是“
getSmo()在做什么?”而不是“ga()在做什么?” ...