mgcv: Error Model has more coefficients than data, 与 gam() 中的参数相关

mgcv: Error Model has more coefficients than data, related to the argument by in the gam()

案例a,mgcv R包中的gam代码运行良好

library(mgcv)
dat <- gamSim(1,n=400,dist="normal",scale=2)

num_knots = nrow(dat)
fit <- gam(y~s(x0, bs = "cr", k = num_knots, m=2),data=dat)
summary(fit)

但是我在gam()中加上参数by后,报错"Model has more coefficients than data"。

fit <- gam(y~s(x0, bs = "cr", k = num_knots, m=2, by = x1),data=dat)

这个错误让我很困惑,因为我认为添加 by 参数来创建平滑项和参数项之间的交互不应该增加未知系数的数量,尽管事实证明我错了。我哪里错了?

当您将连续变量传递给 by 时,您得到的是变系数模型,其中 x1 的影响作为 x0.[=19 的平滑函数变化=]

第一种情况发生的情况是,由于可识别性约束应用于 x0 的基础扩展,您请求 num_knots 基函数但实际上得到了 num_knots - 1 基函数.当你添加截距时,你会得到 num_knots 系数,这适合这个模型,因为它是一个惩罚样条(尽管你可能想要 method = 'REML')。应用可识别性约束是因为存在与模型截距混淆的基函数(或组合)并且您无法在模型中拟合两个常数项并使它们被唯一识别。

在第二种情况下,变系数模型,没有同样的问题,所以当你要求 num_knots 基函数加上一个截距时,你试图用 401 个系数和 400 个系数拟合模型观察结果是行不通的。