分层 GAM - 为什么我没有获得分类变量的个别结果?

Hierarchical GAMs - why am I not getting individual results for my categorical variable?

我正在尝试执行 HGAM,以便按 Reservoir 分隔我的大型数据集。我的预测变量之一是 Season_Y,表示采样的季节和年份。这是我的代码:

 model = gam( 
    log1p(GEO) ~ s(Season_Y, by=Res, k=, bs ="fs") +
    t2(TP, TIN.TP, by=Res, bs="fs", k=5) + 
    s(Sil, by=Res, k=5) +
    s(SO4, by=Res, k=5) +
    s(Dfe, by=Res, k=5) +
    s(Ortho, by=Res, k=5) +
    s(NO3.NH3, by=Res, k=5),
  data=gam.data,
  family=Gamma,
  method="REML" 
) 

通常在 GLM 中,我会为每个后续 Season_Y 获得单独的分数,例如Winter_2019。但我只有一个总分Season_Y。如下图所示:

                                    edf Ref.df         F  p-value    
s(Season_Y):ResAlaw           4.603e+00  6.000 3.091e+02  0.99783    
s(Season_Y):ResAlwen          2.474e+00  5.000 2.085e+03  0.99962    
s(Season_Y):ResCefni          2.600e+00  7.000 1.168e+03  0.99809    
s(Season_Y):ResDolwen         6.863e-05  1.000 4.220e+07  0.99803    
s(Season_Y):ResLlandegfedd    6.795e-05  1.000 1.219e+07  0.99856    
s(Season_Y):ResLlwyn Onn      4.350e+00  6.000 3.917e+01  0.99830    
s(Season_Y):ResPentwyn        1.267e-04  2.000 4.130e+05  0.99996    
s(Season_Y):ResPlas Uchaf     4.798e-02  5.000 2.801e+04  0.99768    
s(Season_Y):ResPontsticill    3.182e+00  7.000 1.672e+01  0.99950   

当我这样做时 gam.check 我没有得到任何值:

                                   k'      edf k-index p-value    
s(Season_Y):ResAlaw           7.00e+00 4.60e+00      NA      NA    
s(Season_Y):ResAlwen          7.00e+00 2.47e+00      NA      NA    
s(Season_Y):ResCefni          7.00e+00 2.60e+00      NA      NA    
s(Season_Y):ResDolwen         7.00e+00 6.86e-05      NA      NA    
s(Season_Y):ResLlandegfedd    7.00e+00 6.79e-05      NA      NA    
s(Season_Y):ResLlwyn Onn      7.00e+00 4.35e+00      NA      NA    
s(Season_Y):ResPentwyn        7.00e+00 1.27e-04      NA      NA    
s(Season_Y):ResPlas Uchaf     7.00e+00 4.80e-02      NA      NA    
s(Season_Y):ResPontsticill    7.00e+00 3.18e+00      NA      NA  

只想详细说明每年每个季节的重要性,好吗?

如有任何帮助,我们将不胜感激。

谢谢!

如果 Season_Y 确实 包含类似 "Winter_2019" 的数据,则您使用的 fs 基础不正确。这个基础相当于一个随机斜率,但我们得到的不是线性效应,而是分组变量每个水平的平滑效应。这里的关键是你正在产生一个平滑的(很多)所以你必须传递一个 continuous 变量并且 Season_Y 不是连续的。如果这甚至是在做任何明智的事情,它只是在创建一个随机效果(拦截),因此就代码使用的意图而言,它会 更清楚:

s(Season_Y, by = Res, bs = "re")

至于为什么在基础维度检查中所有内容都是 NA,您要求随机效应并且基础维度检查不适用于这些术语。来自 ?check.k:

Currently smooths of factor variables are not supported and will give an NA p-value.

我认为你真的混淆了这里的输出。您显示的第一个输出块是 summary.gam() 的输出。第二个输出来自 gam.check()(或 k.check()),它们根本不是一回事。