mgcv: 如何return估计平滑参数?
mgcv: How to return estimated smoothing parameter?
考虑如下简单的 GAM 拟合:
library(mgcv)
my.gam <- gam(y~s(x), data=mydata)
- 有没有 return 估计的平滑参数 (lambda) 以便我可以保存它?我知道 lambda 在输出中给出为 'GCV score',但我需要一个特定的代码来 returning 它。
- 如何将 lambda 设置为所需的值?
summary()
不 return 平滑参数。您混淆了 GCV 分数和平滑参数。如果您不理解这些概念,或者在 Cross Validated 上提出问题,请咨询当地的统计学家。我只会告诉你如何提取和设置平滑参数。
考虑一个例子:
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)
这基本上禁用了所有平滑项的惩罚。请注意,将 sp
设置为负值意味着自动选择 sp
.
lambda
和 sp
:
sapply(b$smooth, "[[", "S.scale") / b$sp
# s(x0) s(x1) s(x2) s(x3)
#6.545005e+00 5.326938e+00 1.490702e+03 4.097379e-10
有时 lambda
是必要的。将平滑函数视为随机效应或随机场时,有
variance_parameter_of_random_effect = scale_parameter / lambda
其中比例参数可以在 b$scale
中找到(对于高斯模型,这也是 b$sig2
)。见一个相关问题:GAM with "gp" smoother: how to retrieve the variogram parameters?
跟进
Yes, I need the exact value of lambda
, so thanks for the neat code. Yet I'm interested in knowing more about the scaling factor. Where can I read more about it in addition to the package manual?
阅读?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
考虑如下简单的 GAM 拟合:
library(mgcv)
my.gam <- gam(y~s(x), data=mydata)
- 有没有 return 估计的平滑参数 (lambda) 以便我可以保存它?我知道 lambda 在输出中给出为 'GCV score',但我需要一个特定的代码来 returning 它。
- 如何将 lambda 设置为所需的值?
summary()
不 return 平滑参数。您混淆了 GCV 分数和平滑参数。如果您不理解这些概念,或者在 Cross Validated 上提出问题,请咨询当地的统计学家。我只会告诉你如何提取和设置平滑参数。
考虑一个例子:
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)
这基本上禁用了所有平滑项的惩罚。请注意,将 sp
设置为负值意味着自动选择 sp
.
lambda
和 sp
:
sapply(b$smooth, "[[", "S.scale") / b$sp
# s(x0) s(x1) s(x2) s(x3)
#6.545005e+00 5.326938e+00 1.490702e+03 4.097379e-10
有时 lambda
是必要的。将平滑函数视为随机效应或随机场时,有
variance_parameter_of_random_effect = scale_parameter / lambda
其中比例参数可以在 b$scale
中找到(对于高斯模型,这也是 b$sig2
)。见一个相关问题:GAM with "gp" smoother: how to retrieve the variogram parameters?
跟进
Yes, I need the exact value of
lambda
, so thanks for the neat code. Yet I'm interested in knowing more about the scaling factor. Where can I read more about it in addition to the package manual?
阅读?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