1
考虑简单的GAM符合如下:mgcv:如何返回估计的平滑参数?
library(mgcv)
my.gam <- gam(y~s(x), data=mydata)
- 反正是有回报估计的平滑参数(波长),这样我可以将它保存?我知道lambda是作为'GCV分数'输出的,但我需要一个特定的代码来返回它。
- 如何将lambda设置为期望值?
考虑简单的GAM符合如下:mgcv:如何返回估计的平滑参数?
library(mgcv)
my.gam <- gam(y~s(x), data=mydata)
首先,summary()
不返回平滑参数。 GCV分数与平滑参数混在一起。如果您不了解这些概念,请咨询当地的统计人员,或者就交叉验证提出问题。我只会告诉你如何提取和设置平滑参数。
考虑这样一个例子:
library(mgcv)
set.seed(2)
dat <- gamSim(1, n=400, dist="normal", scale=2)
b <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data=dat)
你可以得到(内部)平滑参数来自:
b$sp
# s(x0) s(x1) s(x2) s(x3)
#3.648590e+00 3.850127e+00 1.252710e-02 4.986399e+10
严格地说,这不是lambda
,但只有积极缩放因子从lambda
不同。实际上,使用sp
来平滑参数就足够了。如果你想将其设定为一个固定值,例如做:
b1 <- gam(y ~ s(x0, sp = 0) + s(x1, sp = 0) + s(x2, sp = 0) + s(x3, sp = 0),
data = dat)
我在哪里设置了所有平滑参数0。注意,如果你设置sp
为负值,mgcv
会忽略它,做汽车 - 选择sp
。
备注
如果出于某些目的,你真的想要得到lambda
,做到:
b$sp * unlist(lapply(b$smooth, "[[", "S.scale"))
# s(x0) s(x1) s(x2) s(x3)
#8.712849e+01 7.896376e+01 2.339330e-01 1.018779e+12
但它是那么直接喂到lambda
mgcv
。所以我建议你与sp
一起工作。
后续
其实我只注意到我有什么错用GCV得分和lambda,虽然我知道的概念。
好!
是的,我需要确切的值
lambda
,所以感谢您的整洁的代码。但我有兴趣了解更多关于比例因子的信息。除包装说明书外,我还可以在哪里阅读更多内容?
对?smoothCon
读:
smoothCon(object,data,knots=NULL,absorb.cons=FALSE,
scale.penalty=TRUE,n=nrow(data),dataX=NULL,
null.space.penalty=FALSE,sparse.cons=0,
diagonal.penalty=FALSE,apply.by=TRUE,modCon=0)
scale.penalty: should the penalty coefficient matrix be scaled to have
approximately the same 'size' as the inner product of the
terms model matrix with itself? ...
在smoothCon
源代码,有:
if (scale.penalty && length(sm$S) > 0 && is.null(sm$no.rescale)) {
maXX <- norm(sm$X, type = "I")^2
for (i in 1:length(sm$S)) {
maS <- norm(sm$S[[i]])/maXX
sm$S[[i]] <- sm$S[[i]]/maS
sm$S.scale[i] <- maS
}
}
简而言之,对于一个模型矩阵X
和原材料惩罚矩阵S
,缩放因子maS
是:
norm(S)/norm(X, type = "I")^2
非常感谢你的回复。其实我只是注意到我在GCV分数和lambda上有什么错误,但我确实知道这些概念。是的,我需要lambda的确切值,所以感谢整齐的代码。但我有兴趣了解更多关于比例因子的信息。除包装手册之外,我还可以在哪里阅读更多内容? –