将随机效应添加到 GAM 的两种方法会产生非常不同的结果。为什么会这样,应该使用哪一个?

机器算法验证 随机效应模型 广义加法模型 毫克CV
2022-03-15 19:29:01

mgcv 文档的一个特定部分给出了将随机效应合并到广义加法模型中的多种方法。两种方法是 1) 使用bs="re"in在类标签中添加平滑项gam2)结合现有的功能,使用功能gamm,其中包括类似的设施然而,在模拟数据上,两者给出了完全不同的模型拟合。为什么会这样,应该使用哪一个?lmegam

x <- rnorm(1000) 
ID <- rep(1:200,each=5)
y <- x 
for(i in 1:200) y[which(ID==i)] <- y[which(ID==i)] + rnorm(1)
y <- y + rnorm(1000)
ID <- as.factor(ID)
m1 <- gam(y ~ x + s(ID,bs="re"))
m2 <- gamm(y ~ x, random=list(ID=~1) )
mean( (fitted(m1)-fitted(m2$gam))^2 ) 
1个回答

我怀疑差异在于您获得的拟合值。如果你看一下我所说的模型拟合,系数估计,方差项,模型是相同的。比较summary(m2$lme)summary(m1)_gam.vcomp(m1)

> summary(m1)

Family: gaussian 
Link function: identity 

Formula:
y ~ x + s(ID, bs = "re")

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.05234    0.07932    0.66     0.51    
x            1.01375    0.03535   28.68   <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(ID) 167.1    199 5.243  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.674   Deviance explained = 72.9%
GCV = 1.2133  Scale est. = 1.0082    n = 1000
> summary(m2$lme)
Linear mixed-effects model fit by maximum likelihood
 Data: strip.offset(mf) 
       AIC     BIC    logLik
  3218.329 3237.96 -1605.165

Random effects:
 Formula: ~1 | ID
        (Intercept) Residual
StdDev:    1.025306 1.003452

Fixed effects: y.0 ~ X - 1 
                 Value  Std.Error  DF   t-value p-value
X(Intercept) 0.0523358 0.07922717 799  0.660578  0.5091
Xx           1.0137531 0.03535887 799 28.670404  0.0000
 Correlation: 
   X(Int)
Xx 0.014 

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-2.80375873 -0.67702485  0.04245145  0.64026891  2.59257295 

Number of Observations: 1000
Number of Groups: 200 

我们看到在两个模型中的估计值为 1.01375 和 ~0.05。还要注意受试者/组间方差的估计值(作为标准偏差),在 的输出中给出为 1.025 相同的信息可以使用 来从模型中计算出来,它给出β^xβ^0σ^IDsummary(m2$lme)gamgam.vcomp()m1

> gam.vcomp(m1)
   s(ID) 
1.027795

这已经足够让我们不用担心了。

因此,这些fitted方法必须返回不同的拟合值;如果我们从 生成拟合值m2$lme,那么我们得到的值与由 生成的值相同fitted(m1)

> mean((fitted(m1)-fitted(m2$lme))^2) 
[1] 2.966927e-07

这是出于所有意图和目的0。

fitted.lmeID被记录以从总体水平(平均超过)和针对特定主题的组件返回贡献。这就是fitted.gam要做的,m1因为它将随机效果表示为样条“固定”效果。gamm模型的情况下,fitted.gam返回模型“固定”效应部分的拟合值,这将解释差异。(我写“固定”是因为使用样条曲线,“固定”和“随机”效果会变得有点模糊。)

在他的书中,Simon Wood 在使用gamm(). 他谈到使用resid()fitted()在模型的$lme组件上gamm分别排除和包括随机效应。他说这适用于此处使用的特定示例中的模型诊断。

您需要哪一个取决于您的具体使用/研究问题的背景。

如果您所需要的只是像这样的简单随机效应,并且您熟悉 GAM 和mgcv,那么使用随机效应样条基础可能会更简单,gam()而不必处理作为 GAMM 的混合的奇怪输出模型通过gamm(). 如上所示,这两个模型实际上是等效的,您报告的差异仅取决于拟合值是否包含或排除受试者(或 ID)特定效果。