微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么用离散选项拟合具有随机效应的 GAM 会导致非常不同的输出?

如何解决为什么用离散选项拟合具有随机效应的 GAM 会导致非常不同的输出?

我目前正在使用 MGCV 包中的 BAM 函数对随时间推移的基因表达进行建模。有些基因需要很长时间来建模,所以我决定尝试将离散选项设置为 True。但是,现在输出摘要似乎在模型之间差异很大。这在随机效应项的显着性和模型解释的总偏差中尤为明显。

将离散设置为真是否会以某种方式影响随机效应的建模?

模型拟合如下:

 bam(value ~ oGeno +
      s(age,bs = "gp",k = 8,m=2) +
      s(age,by = oGeno,bs ="gp",m=1) +
      s(age,sex,bs = "re") +
      s(litter,bs = "re") +
      s(hash,bs = "re") +
      s(hpool,bs = "re"),data = data,family = family,method="REML"

 bam(value ~ oGeno +
      s(age,discrete = T,method="fREML"

生成这些摘要

当离散为假时:

Family: Tweedie(p=1.32) 
Link function: log 

Formula:
value ~ oGeno + s(age,bs = basis,k = k,m = 2) + s(age,m = 1) + s(age,bs = "re") + s(litter,bs = "re") + s(hash,bs = "re") + s(hpool,bs = "re")

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.78886    0.05635  31.744   <2e-16 ***
oGeno.L     -0.05029    0.04337  -1.159    0.246    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Approximate significance of smooth terms:
                      edf  Ref.df       F  p-value    
s(age)           4.813266   4.864  48.547  < 2e-16 ***
s(age):oGenomut  3.100540   3.188   7.298 7.00e-05 ***
s(age,sex)       0.005974   1.000   0.039    0.188    
s(litter)       13.606287  89.000   5.819    0.199    
s(hash)         82.078473 148.000  38.136 8.22e-06 ***
s(hpool)        24.505710  28.000 654.942  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

R-sq.(adj) =  0.259   Deviance explained = 33.5%
-REML =  27952  Scale est. = 1.9063    n = 15421

当离散为真时:

Family: Tweedie(p=1.32) 
Link function: log 

Formula:
value ~ oGeno + s(age,bs = "re")

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.77812    0.05850  30.393   <2e-16 ***
oGeno.L     -0.07017    0.04388  -1.599     0.11    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Approximate significance of smooth terms:
                    edf  Ref.df       F p-value    
s(age)           4.8187   4.870  31.101 < 2e-16 ***
s(age):oGenomut  3.1031   3.192   4.819 0.00108 ** 
s(age,sex)       0.3756   1.000 122.771 0.98174    
s(litter)       13.3135  93.000  68.682 1.00000    
s(hash)         81.8371 152.000 140.906 1.00000    
s(hpool)        24.5326  29.000 698.652 1.00000    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

R-sq.(adj) =  0.259   Deviance explained = 27.6%
fREML =  28369  Scale est. = 1.9063    n = 15421

解决方法

如果您在第一次模型拟合中使用默认 method = "fREML" 而没有 discrete 会怎样?就 EDF 而言,模型拟合看起来没有很大不同,所以我怀疑 "REML" 可以处理的拟合存在一些等级缺陷,但 "fREML"discrete = TRUE 部分可以'不。因此,使用 bam() 在没有离散化的情况下检查 method = "fREML" 的拟合。

因为您使用的是 gp 平滑,所以 m 位并没有像您想象的那样做;这些平滑没有基于衍生的惩罚。相反,m = 1 是默认值,用球面协方差函数拟合 GP。因此,我怀疑全局加上主题特定的平滑高度相关,这会导致其中一种算法出现拟合问题。

我看不出有什么理由让您在这里找全科医生。如果速度是问题,请对简单三次回归样条使用 bs = "cr"。并且由于那些具有基于导数的惩罚,m = 1 应该有助于避免拟合多个 age 平滑的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。