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的確切值,所以感謝整齊的代碼。但我有興趣瞭解更多關於比例因子的信息。除包裝手冊之外,我還可以在哪裏閱讀更多內容? –