magic
位於 mgcv
包(package)。 說明
通過 GCV 或 UBRE 有效估計具有多重(二次)懲罰的廣義嶺回歸問題中的平滑參數的函數。該函數使用 multi-dimensions 中的牛頓法,並通過最速下降法來迭代調整每個懲罰的平滑參數(一個懲罰的平滑參數可能固定為 1)。
為了獲得最大數值穩定性,該方法基於正交分解方法,並嘗試使用截斷奇異值分解方法來優雅地處理數值秩不足。
用法
magic(y,X,sp,S,off,L=NULL,lsp0=NULL,rank=NULL,H=NULL,C=NULL,
w=NULL,gamma=1,scale=1,gcv=TRUE,ridge.parameter=NULL,
control=list(tol=1e-6,step.half=25,rank.tol=
.Machine$double.eps^0.5),extra.rss=0,n.score=length(y),nthreads=1)
參數
y |
是響應數據向量。 |
X |
是模型矩陣(允許的列數多於行數)。 |
sp |
是平滑參數的數組。向量 |
S |
是懲罰矩陣的列表。 |
off |
是一個數組,指示參數向量中的第一個參數,該參數受到涉及 |
L |
是一個矩陣,將 |
lsp0 |
如果 |
rank |
是一個指定懲罰等級的數組。這對於形成罰矩陣的平方根很有用,但不是必需的。 |
H |
是可選的偏移懲罰 - 即平滑參數固定為 1 的懲罰。這對於允許估計過程的正則化、固定平滑懲罰等很有用。 |
C |
是指定擬合問題的任何線性等式約束的可選矩陣。如果 是參數向量,則參數強製滿足 。 |
w |
回歸權重。如果這是一個矩陣,則將其視為 |
gamma |
是 GCV 或 UBRE 分數中模型自由度的膨脹因子。 |
scale |
是與 UBRE 一起使用的比例參數。 |
gcv |
如果要使用GCV,則應設置為 |
ridge.parameter |
有時對擬合問題應用嶺罰分很有用,直接懲罰約束空間中的參數。將此參數設置為大於零的值將導致使用此類懲罰,其大小由參數值給出。 |
control |
是具有以下元素的迭代控製常量列表:
|
extra.rss |
是在計算 GCV、UBRE 和尺度參數估計時添加到殘差平方和(平方範數)項的常數。與 |
n.score |
在 GCV/UBRE 分數計算中用作數據數量的數字:通常是實際數據數量,但有一些處理非常大的數據集的方法可以改變這一點。 |
nthreads |
如果設置為 >1, |
細節
該方法是一種計算高效的方法,將 GCV 或 UBRE(通常近似 AIC)應用於以下形式的廣義嶺回歸問題中的平滑參數選擇問題:
可能受到約束 。 是設計矩陣, 參數向量, 數據向量, 權重矩陣, 正半正定係數矩陣,定義帶有相關平滑參數的第 i 個罰分 、 是正半定偏移懲罰矩陣, 是定義問題的任何線性等式約束的係數矩陣。 不必具有完整的列等級。
選擇 是為了最小化 GCV 分數:
或 UBRE 分數:
其中 gamma
自由度的膨脹因子(通常設置為 1), 是 scale
尺度參數。 是擬合問題的帽子矩陣(影響矩陣)(即將數據映射到擬合值的矩陣)。分數對平滑參數的依賴性是通過 實現的。 是
該方法通過牛頓或 日誌的最速下降更新進行操作。該方法的一個關鍵方麵是對分數的一階和二階導數進行穩定且經濟的計算。對數平滑參數。因為 GCV/UBRE 分數與其他分數持平。非常大或非常小 ,獲得良好的起始參數非常重要,並且要小心不要進入平滑參數空間的平坦區域。因此,該算法會重新調整任何可能導致 變化超過 5 的牛頓步。僅當 GCV/UBRE 的 Hessian 矩陣為正定時才使用牛頓步,否則使用最速下降。如果牛頓步必須收縮得太遠(表明牛頓基礎的二次模型很差),則使用類似的最速下降。所有初始最速下降步驟都經過縮放,以便其最大分量為 1。然而,計算步驟時,如果成功,則永遠不會擴展(以避免目標的平坦部分),但如果步驟不減少GCV/UBRE 評分,直到他們這樣做為止,否則該方向被視為失敗。 (給定平滑參數,很容易找到最佳的 參數。)
該方法使用 C
進行編碼,並使用 LINPACK 和 LAPACK 例程執行矩陣分解。
值
該函數返回一個包含以下項目的列表:
b |
給定估計的平滑參數的最佳擬合參數。 |
scale |
估計的 (GCV) 或提供的 (UBRE) 尺度參數。 |
score |
最小化的 GCV 或 UBRE 分數。 |
sp |
估計的平滑參數的數組。 |
sp.full |
實際上與 |
rV |
參數協方差矩陣的因式分解形式。參數 |
gcv.info |
是有關方法性能的信息列表,包含以下元素:
|
請注意,可以使用 magic.post.proc
獲得一些進一步有用的量。
例子
## Use `magic' for a standard additive model fit ...
library(mgcv)
set.seed(1);n <- 200;sig <- 1
dat <- gamSim(1,n=n,scale=sig)
k <- 30
## set up additive model
G <- gam(y~s(x0,k=k)+s(x1,k=k)+s(x2,k=k)+s(x3,k=k),fit=FALSE,data=dat)
## fit using magic (and gam default tolerance)
mgfit <- magic(G$y,G$X,G$sp,G$S,G$off,rank=G$rank,
control=list(tol=1e-7,step.half=15))
## and fit using gam as consistency check
b <- gam(G=G)
mgfit$sp;b$sp # compare smoothing parameter estimates
edf <- magic.post.proc(G$X,mgfit,G$w)$edf # get e.d.f. per param
range(edf-b$edf) # compare
## p>n example... fit model to first 100 data only, so more
## params than data...
mgfit <- magic(G$y[1:100],G$X[1:100,],G$sp,G$S,G$off,rank=G$rank)
edf <- magic.post.proc(G$X[1:100,],mgfit,G$w[1:100])$edf
## constrain first two smooths to have identical smoothing parameters
L <- diag(3);L <- rbind(L[1,],L)
mgfit <- magic(G$y,G$X,rep(-1,3),G$S,G$off,L=L,rank=G$rank,C=G$C)
## Now a correlated data example ...
library(nlme)
## simulate truth
set.seed(1);n<-400;sig<-2
x <- 0:(n-1)/(n-1)
f <- 0.2*x^11*(10*(1-x))^6+10*(10*x)^3*(1-x)^10
## produce scaled covariance matrix for AR1 errors...
V <- corMatrix(Initialize(corAR1(.6),data.frame(x=x)))
Cv <- chol(V) # t(Cv)%*%Cv=V
## Simulate AR1 errors ...
e <- t(Cv)%*%rnorm(n,0,sig) # so cov(e) = V * sig^2
## Observe truth + AR1 errors
y <- f + e
## GAM ignoring correlation
par(mfrow=c(1,2))
b <- gam(y~s(x,k=20))
plot(b);lines(x,f-mean(f),col=2);title("Ignoring correlation")
## Fit smooth, taking account of *known* correlation...
w <- solve(t(Cv)) # V^{-1} = w'w
## Use `gam' to set up model for fitting...
G <- gam(y~s(x,k=20),fit=FALSE)
## fit using magic, with weight *matrix*
mgfit <- magic(G$y,G$X,G$sp,G$S,G$off,rank=G$rank,C=G$C,w=w)
## Modify previous gam object using new fit, for plotting...
mg.stuff <- magic.post.proc(G$X,mgfit,w)
b$edf <- mg.stuff$edf;b$Vp <- mg.stuff$Vb
b$coefficients <- mgfit$b
plot(b);lines(x,f-mean(f),col=2);title("Known correlation")
作者
Simon N. Wood simon.wood@r-project.org
參考
Wood, S.N. (2004) Stable and efficient multiple smoothing parameter estimation for generalized additive models. J. Amer. Statist. Ass. 99:673-686
https://www.maths.ed.ac.uk/~swood34/
也可以看看
相關用法
- R magic.post.proc 來自 magic fit 的輔助信息
- R mgcv.parallel mgcv 中的並行計算。
- R mvn 多元正態加性模型
- R multinom GAM 多項式邏輯回歸
- R mini.roots 獲取懲罰矩陣的平方根
- R missing.data GAM 中缺失數據
- R mroot 矩陣的最小平方根
- R mgcv.package 混合 GAM 計算車輛,具有 GCV/AIC/REML/NCV 平滑度估計和 REML/PQL 的 GAMM
- R model.matrix.gam 從 GAM 擬合中提取模型矩陣
- R mono.con 三次回歸樣條的單調性約束
- R vcov.gam 從 GAM 擬合中提取參數(估計器)協方差矩陣
- R gam.check 擬合 gam 模型的一些診斷
- R null.space.dimension TPRS 未懲罰函數空間的基礎
- R gam.reparam 尋找平方根懲罰的穩定正交重新參數化。
- R extract.lme.cov 從 lme 對象中提取數據協方差矩陣
- R scat 用於重尾數據的 GAM 縮放 t 係列
- R choldrop 刪除並排名第一 Cholesky 因子更新
- R smooth.construct.cr.smooth.spec GAM 中的懲罰三次回歸樣條
- R bandchol 帶對角矩陣的 Choleski 分解
- R gam.side GAM 的可識別性邊條件
- R cox.ph 附加 Cox 比例風險模型
- R gamm 廣義加性混合模型
- R pdTens 實現張量積平滑的 pdMat 類的函數
- R Predict.matrix GAM 中平滑項的預測方法
- R Predict.matrix.soap.film 皂膜光滑度預測矩陣
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Stable Multiple Smoothing Parameter Estimation by GCV or UBRE。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。