Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R GAM中的随机效应和其他平滑效应使协方差矩阵非正定_R_Regression_Gam_Mgcv - Fatal编程技术网

R GAM中的随机效应和其他平滑效应使协方差矩阵非正定

R GAM中的随机效应和其他平滑效应使协方差矩阵非正定,r,regression,gam,mgcv,R,Regression,Gam,Mgcv,我正在使用mgcv中的gam来适应模型 m <- gam(y ~ s(x) + s(Group, bs = "re")) 非正定的。此外,估计的s(x)只是一条直线 现在,移除s(x)部分修复了vcov问题,移除s(组)也修复了这些问题,然后估计的曲线s(x)不是一条直线 有人知道为什么会发生这种情况,以及如何解决它吗?这样我就可以包括s(x)和s(组),并且还可以得到一个正定的vcov矩阵和正确估计的曲线(即使它们不重要) 我相信这可能是因为x和组在某种程度上混淆了,因此只需要其中一个

我正在使用
mgcv
中的
gam
来适应模型

m <- gam(y ~ s(x) + s(Group, bs = "re"))
非正定的。此外,估计的
s(x)
只是一条直线

现在,移除
s(x)
部分修复了
vcov
问题,移除
s(组)
也修复了这些问题,然后估计的曲线
s(x)
不是一条直线

有人知道为什么会发生这种情况,以及如何解决它吗?这样我就可以包括
s(x)
s(组)
,并且还可以得到一个正定的
vcov
矩阵和正确估计的曲线(即使它们不重要)


我相信这可能是因为
x
在某种程度上混淆了,因此只需要其中一个?

这意味着受惩罚的最小二乘问题不是满秩的,即使在通过普通的二次惩罚进行正则化之后也是如此。首先检查你的系数。如果任何系数正好为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)
有关所有平滑基类,包括收缩类,请参见
?平滑。术语


另一个尝试是降低模型的灵活性,例如降低
s(x)

s(x, k = 5)
s(x, k = 3)
对于三次样条曲线,最小
k
为3

但这并不能保证解决您的问题,因为如果是
s(x)
的零空间与
s(组,bs='re')
混淆,您必须使用收缩平滑来惩罚零空间

s(x, k = 5)
s(x, k = 3)