曲率从规定的平滑项转移到参数项,这些项在返回的矩阵或矩阵concurvity
的列下总共分组。para
这是一个修改后的例子?concurvity
library("mgcv")
## simulate data with concurvity...
set.seed(8)
n<- 200
f2 <- function(x) 0.2 * x^11 * (10 * (1 - x))^6 + 10 *
(10 * x)^3 * (1 - x)^10
t <- sort(runif(n)) ## first covariate
## make covariate x a smooth function of t + noise...
x <- f2(t) + rnorm(n)*3
## simulate response dependent on t and x...
y <- sin(4*pi*t) + exp(x/20) + rnorm(n)*.3
## fit model...
b <- gam(y ~ s(t,k=15) + s(x,k=15), method="REML")
现在添加一个线性项并重新拟合
x2 <- seq_len(n) + rnorm(n)*3
b2 <- update(b, . ~ . + x2)
现在看两个模型的concurvity
## assess concurvity between each term and `rest of model'...
concurvity(b)
concurvity(b2)
这些产生
> concurvity(b)
para s(t) s(x)
worst 1.06587e-24 0.60269087 0.6026909
observed 1.06587e-24 0.09576829 0.5728602
estimate 1.06587e-24 0.24513981 0.4659564
> concurvity(b2)
para s(t) s(x)
worst 0.9990068 0.9970541 0.6042295
observed 0.9990068 0.7866776 0.5733337
estimate 0.9990068 0.9111690 0.4668871
请注意,这x2
本质上是一个嘈杂的版本t
:
> cor(t, x2)
[1] 0.9975977
因此,弯曲度从基本上 0 in 上升b
到几乎 1 in b2
。
现在,如果我们添加x2
为平滑函数...
concurvity(update(b, . ~ . + s(x2)))
我们看到条目恢复到非常小,我们直接para
得到了样条项的度量s(x2)
> concurvity(update(b, . ~ . + s(x2)))
para s(t) s(x) s(x2)
worst 1.506201e-24 0.9977153 0.6264654 0.9976988
observed 1.506201e-24 0.9838018 0.5893737 0.9963857
estimate 1.506201e-24 0.9909506 0.4921592 0.9943990
这就是函数在参数项方面的工作方式;重点是平滑条款。
注意:您正在指定gamma
但使用 REML 进行拟合。gamma
仅影响 GCV 和 UBRE/AIC 平滑选择方法,因此您可以删除此参数,因为它对模型拟合的影响为零。从 mgcv 的1.8-23版本开始,gamma
参数 no 也会影响使用 REML/ML 拟合的模型,其中通过 REML/ML 选择平滑度参数,就好像样本大小为n/γ代替n.