我在gam
中使用mgcv
来适应模型
m <- gam(y ~ s(x) + s(Group, bs = "re"))
然而,这使得协方差矩阵
vcov(m)
非正定。此外,估计的s(x)
只是一条直线。
现在,删除s(x)
部分会解决vcov
问题,删除s(Group)
也会修复这些问题,然后估算的曲线s(x)
不是直线。
有人知道为什么会发生这种情况,以及如何解决这个问题?这样我可以同时包含s(x)
和s(Group)
,并且还可以得到正定vcov
矩阵和正确估计的曲线(即使它们是微不足道的)?
我认为这可能是因为x
和Group
在一定程度上混淆了这一事实,因此只需要其中一个?
答案 0 :(得分:1)
这意味着即使在通过普通二次惩罚进行正则化之后,惩罚最小二乘问题也不是满秩。首先检查你的系数。如果任何系数恰好为0,则它们不可识别并且约束为0。
any(coef(m) == 0)
请注意,与lm
和glm
不同,其中无法识别的系数被编码NA
,mgcv
只使用0.当然,这些系数的最终标准误差是也是0,这就是vcov
给出的协方差矩阵不是正定的原因。
修复是使用更强的正则化。在这里尝试收缩平滑,例如,
s(x, bs = 'cs', k = 10)
s(x, bs = 'ts', k = 10)
有关所有平滑基础类,请参阅?smooth.terms
,包括收缩类。
要尝试的另一件事是通过降低s(x)
的等级来降低模型的灵活性,例如
s(x, k = 5)
s(x, k = 3)
对于三次样条曲线,最小k
为3。
但是这并不能保证解决您的问题,就好像它是s(x)
的{{1}}的空格一样,您必须使用收缩平滑来惩罚NULL空间。< / p>