在mgcv中指定变系数和因子级复制

时间:2019-10-15 19:14:04

标签: r mgcv

我正在R中使用mgcv包来使平滑。我对拟合变系数模型很感兴趣,该模型的变系数平滑度也根据因子变量而变化。

根据mgcv文档,当使用s()指定平滑时,by参数可以采用数值变量(在这种情况下适合变系数模型),或者一个因子变量,在这种情况下,将为每个因子水平生成平滑的副本。但是,该文档没有说明如何指定具有变系数效应的模型,并且该效应在多个因子水平上都不同。我看不出有什么理由无法做到这一点,所以这两个不同的效果由同一个参数指定有点奇怪。

1 个答案:

答案 0 :(得分:0)

我向mgcv软件包的创建者提出了这个问题,这是我得到的答复

这应该可行,但是可能存在可识别性问题。 假设f是一个级别为“ a”,“ b”,“ c”的因子,x是您的平滑度 变量和感兴趣的z变量,您需要一个类似

的模型

y = z s_f(x)+噪声

然后

da <- as.numeric(f="a")*z
db <- as.numeric(f="b")*z
dc <- as.numeric(f="c")*z

gam(y ~ s(x,by=da) + s(x,by=db) + s(x,by=dc) - 1)

将适合模型。唯一的问题是-1。我们需要 因为否则,平滑的截距会与 整体拦截。 -1如此简单地处理可识别性 情况,但在其他情况下则不会-例如,如果您添加了 模型中参数化的因子变量,或具有第二组 通过这种方式使因子水平上的条件变得平滑。

在这些情况下,可能会使用select=TRUE参数 赌博,这将正式消除可识别性问题。