GAM 中的随机效应和另一种平滑使协方差矩阵非正定
Random effects in GAM and one other smooth make covariance matrix non-positive definite
我在 mgcv
中使用 gam
来拟合模型
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,则它们不可识别并被约束为 0。
any(coef(m) == 0)
请注意,与 lm
和 glm
中无法识别的系数编码不同 NA
,mgcv
仅使用 0。当然,这些结果的标准误差系数也为0,这就是为什么vcov
给出的协方差矩阵不是正定的。
解决方法是使用更强的正则化。试试shrinkage smooth这里,例如
s(x, bs = 'cs', k = 10)
s(x, bs = 'ts', k = 10)
请参阅 ?smooth.terms
了解所有平滑基础 class,包括收缩 class。
另一件事是降低模型的灵活性,方法是降低 s(x)
的等级,例如
s(x, k = 5)
s(x, k = 3)
三次样条的最小 k
为 3。
但这并不能保证解决你的问题,好像是s(x)
的NULL space与s(Group, bs = 're')
混淆了,你必须使用shrinkage smooth来惩罚 NULL space.
我在 mgcv
中使用 gam
来拟合模型
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,则它们不可识别并被约束为 0。
any(coef(m) == 0)
请注意,与 lm
和 glm
中无法识别的系数编码不同 NA
,mgcv
仅使用 0。当然,这些结果的标准误差系数也为0,这就是为什么vcov
给出的协方差矩阵不是正定的。
解决方法是使用更强的正则化。试试shrinkage smooth这里,例如
s(x, bs = 'cs', k = 10)
s(x, bs = 'ts', k = 10)
请参阅 ?smooth.terms
了解所有平滑基础 class,包括收缩 class。
另一件事是降低模型的灵活性,方法是降低 s(x)
的等级,例如
s(x, k = 5)
s(x, k = 3)
三次样条的最小 k
为 3。
但这并不能保证解决你的问题,好像是s(x)
的NULL space与s(Group, bs = 're')
混淆了,你必须使用shrinkage smooth来惩罚 NULL space.