这里和@Ira S链接帖子中的答案存在一些混淆。k参数的默认值为-1。这表示为指定的基类型计算默认的基函数数量(默认为薄板样条,但您可以通过bs参数询问其他基函数)。因此,对于单变量薄板样条,默认情况下您将获得 10 个基函数,因为k = -1默认值为 10,而实际上您将获得 9 个基函数作为常数基函数,它与模型截距项混淆,从基中删除通过应用总和为零的可识别性约束。
给定一个基扩展,mgcv::gam()将使用惩罚似然拟合所需的模型,以估计基函数和截距和任何其他参数项的参数,以平滑参数为条件,并估计实际选择复杂性的平滑参数(摆动) 的最终拟合平滑函数。
mgcv::gam()可以使用 GCV、REML 或 ML 来估计模型的系数和平滑度参数。无论你传递给什么值,它都会为你做这个估计k。您只能通过将参数添加fx = TRUE到s()每个平滑的调用来停止它执行此平滑选择。
您面临mgcv::gam()的主要问题是设置初始基础尺寸。您不需要使用薄板样条选择节点位置(每个唯一数据值都有一个节点,然后k找到具有基函数的完整基展开的低秩版本),并且对于大多数不那么奇特的基地,结的位置通常对拟合模型几乎没有影响。
您希望设置k得很大,在给定数据量的情况下尽可能大,但您不希望它太大,因为使用所有这些基函数需要更多的计算工作,特别是如果在结果模型拟合中,许多/大多数将被惩罚为零。
所以,在你的情况下,我会设置k一个足够大的值,以适应真实函数的预期摆动。如果您有大量数据并且可以承担计算负担,则可以有效地将其设置为您想要的任意高。
假设您指定了正确的模型,则惩罚应处理额外的摆动。
我发现 GCV 对于我安装的某些模型的模型错误规范更稳健一些,我更喜欢使用 REML 进行平滑度选择,这将成为 mgcv 未来版本的默认设置,因此我建议您使用它,而不是 GCV。