我正在R中使用mgcv
包来使平滑。我对拟合变系数模型很感兴趣,该模型的变系数平滑度也根据因子变量而变化。
根据mgcv
文档,当使用s()
指定平滑时,by
参数可以采用数值变量(在这种情况下适合变系数模型),或者一个因子变量,在这种情况下,将为每个因子水平生成平滑的副本。但是,该文档没有说明如何指定具有变系数效应的模型,并且该效应在多个因子水平上都不同。我看不出有什么理由无法做到这一点,所以这两个不同的效果由同一个参数指定有点奇怪。
答案 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
参数
赌博,这将正式消除可识别性问题。