mgcv: 如何指定平滑函数和因子之间的交互作用?

5
在R中,我想用分类变量拟合gam模型。我认为可以像下面这样做(cat是分类变量)。
lm(data = df, formula = y ~ x1*cat + x2 + x3);

但我无法像这样做事情:

gam(data = df, formula = y ~ s(x1)*cat + s(x2) + x3)

但是以下内容可以正常工作:
gam(data = df, formula = y ~ cat + s(x1) + s(x2) + x3)

我该如何将分类变量添加到其中一个样条线中?

1
这个问题在这里是不合适的,因为它集中讨论了R中的函数。 - Michael R. Chernick
2
在代码的第二部分中,您似乎正在尝试的事情(即分类变量和平滑之间的交互),可以使用“by”函数来实现。例如s(x,by=cat)将为每个cat级别拟合一个单独的平滑曲线。 - GoF_Logistic
1个回答

8

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

s(x1, by = cat)

这创建了“因子平滑”平滑类fs,其中为每个因子水平创建了一个x1的平滑函数。平滑参数也被复制但不链接,因此它们是独立估计的。您可以设置:
s(x1, by = cat, id = 0)

使用一个平滑参数对所有“子平滑”进行处理。

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

s(x1, by = cat) + cat

6
小澄清:s(x1, by = cat) 不会创建一个 "fs" 类型的平滑函数 - 如果它这样做了,你就不需要用 + cat 进行居中。如果你想要 mgcv 中称为 "fs" 的平滑函数,则需要使用 s(x1, cat, bs = "fs")(并且没有参数化的 cat 项)。 - Gavin Simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接