分层 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()
),它们根本不是一回事。
我正在尝试执行 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()
),它们根本不是一回事。