mgcv:如何指定平滑度和因子之间的相互作用?

Cou*_*ier 5 regression r gam mgcv

在R中,我想使用具有分类变量的gam模型。我以为可以做到(cat是绝对变量)。

lm(data = df, formula = y ~ x1*cat + x2 + x3);
Run Code Online (Sandbox Code Playgroud)

但是我不能做这样的事情:

gam(data = df, formula = y ~ s(x1)*cat + s(x2) + x3)
Run Code Online (Sandbox Code Playgroud)

但以下工作原理:

gam(data = df, formula = y ~ cat + s(x1) + s(x2) + x3)
Run Code Online (Sandbox Code Playgroud)

如何将分类变量仅添加到样条线之一?

李哲源*_*李哲源 5

其中一条评论或多或少告诉了您如何操作。使用by变量:

s(x1, by = cat)
Run Code Online (Sandbox Code Playgroud)

这将创建“因子平滑”平滑类fs,其中x1为每个因子级别创建一个平滑函数。平滑参数也是重复的,但没有链接,因此估计不合理。你可以设定

s(x1, by = cat, id = 0)
Run Code Online (Sandbox Code Playgroud)

对所有“子平滑”使用单个平滑参数。

另请注意,对比度不适用于因数,但平滑函数仍受居中约束。这意味着您还需要将因子变量指定为固定效应:

s(x1, by = cat) + cat
Run Code Online (Sandbox Code Playgroud)

  • 较小的说明:`s(x1,by = cat)`*不会*平滑地创建““ fs”`类-如果是这样,则不需要`+ cat`作为定心点。如果您想让mgcv称之为“ fs”平滑,则需要s(x1,cat,bs =“ fs”)(没有参数cat项)。 (4认同)