gam
位於 mgcv
包(package)。 說明
將廣義加性模型 (GAM) 與數據進行擬合,術語“GAM”包括任何二次懲罰 GLM 以及通過二次懲罰似然類型方法估計的各種其他模型(請參閱 family.mgcv
)。模型項的平滑程度作為擬合的一部分進行估計。 gam
還可以擬合任何受到多重二次懲罰(包括懲罰程度的估計)的 GLM。對於使用擬合模型預測的任何數量,可以輕鬆獲得置信/可信區間。
平滑項使用懲罰回歸樣條線(或類似的平滑器)以及由 GCV/UBRE/AIC/REML/NCV 選擇的平滑參數或具有固定自由度的回歸樣條線(允許兩者混合)來表示。多維平滑可使用懲罰薄板回歸樣條(各向同性)或張量積樣條(當各向同性平滑不合適時),並且用戶可以添加平滑。平滑的線性泛函也可以包含在模型中。有關可用平滑的概述,請參閱smooth.terms
。有關指定模型的更多信息,請參閱 gam.models
、 random.effects
和 linear.functional.terms
。有關模型選擇的更多信息,請參閱gam.selection
。請閱讀 gam.check
和 choose.k
。
請參閱包 gam
,了解通過原始 Hastie 和 Tibshirani 方法實現的 GAM(有關此實現的差異,請參閱詳細信息)。
對於非常大的數據集,請參閱 bam
,對於混合 GAM,請參閱 gamm
和 random.effects
。
用法
gam(formula,family=gaussian(),data=list(),weights=NULL,subset=NULL,
na.action,offset=NULL,method="GCV.Cp",
optimizer=c("outer","newton"),control=list(),scale=0,
select=FALSE,knots=NULL,sp=NULL,min.sp=NULL,H=NULL,gamma=1,
fit=TRUE,paraPen=NULL,G=NULL,in.out,drop.unused.levels=TRUE,
drop.intercept=NULL,nei=NULL,discrete=FALSE,...)
參數
formula |
GAM 公式或公式列表(請參閱 |
family |
這是一個族對象,指定在擬合等中使用的分布和鏈接(請參閱 |
data |
包含模型響應變量和公式所需的協變量的 DataFrame 或列表。默認情況下,變量取自 |
weights |
數據對對數似然貢獻的先驗權重。請注意,例如,權重 2 相當於對完全相同的觀察進行兩次。如果您想重新加權每個數據的貢獻而不改變對數似然的總體大小,那麽您應該對權重進行歸一化(例如 |
subset |
一個可選向量,指定要在擬合過程中使用的觀測子集。 |
na.action |
一個函數,指示當數據包含“NA”時應該發生什麽。默認值由 ‘options’ 的“na.action”設置設置,如果未設置,則為“na.fail”。 “factory-fresh” 默認為“na.omit”。 |
offset |
可用於提供模型偏移以用於擬合。請注意,在預測時,此偏移量將始終被完全忽略,這與 |
control |
用於替換 |
method |
平滑參數估計方法。 |
optimizer |
指定用於優化平滑參數估計標準的數值優化方法的數組(由 |
scale |
如果這是正數,則將其視為已知的尺度參數。負值表示尺度參數未知。 0 表示泊鬆和二項式的尺度參數為 1,否則未知。請注意,對於泊鬆和二項式情況,(RE)ML 方法隻能使用尺度參數 1。 |
select |
如果這是 |
knots |
這是一個可選列表,包含用戶指定的用於基礎構造的結值。對於大多數底座,用戶隻需提供要使用的結,該結必須與提供的 |
sp |
此處可以提供平滑參數向量。必須按照平滑項在模型公式中出現的順序提供平滑參數。負元素表示應該估計參數,因此固定參數和估計參數的混合是可能的。如果平滑共享平滑參數,則 |
min.sp |
可以為平滑參數提供下限。請注意,如果使用此選項,則返回對象中的平滑參數 |
H |
可以提供用戶對 GAM 參數提供的固定二次罰分,並將其作為其係數矩陣。該術語的常見用法是在模型在線性預測器尺度上接近 un-identifiable 但在響應尺度上完美定義的情況下,向 GAM 參數添加嶺罰分。 |
gamma |
將此值增加到 1 以上以生成更平滑的模型。 |
fit |
如果此參數是 |
paraPen |
可選列表,指定應用於參數模型項的任何懲罰。 |
G |
通常是 |
in.out |
用於初始化外部迭代的可選列表。如果提供,則必須包含兩個元素: |
drop.unused.levels |
默認情況下,未使用的級別會在擬合之前從因子中刪除。對於某些涉及因子變量的平滑,您可能需要將其關閉。僅當您知道自己在做什麽時才這樣做。 |
drop.intercept |
設置為 |
nei |
指定 |
discrete |
用於設置模型以與 |
... |
傳遞的進一步論點,例如到 |
細節
廣義加性模型 (GAM) 是廣義線性模型 (GLM),其中線性預測器由用戶指定的協變量平滑函數加上線性預測器的常規參數分量給出。一個簡單的例子是:
其中(獨立)響應變量 by
變量的存在是通常抑製這種情況的唯一情況)。 、 和 是協變量 和 的平滑函數。日誌是鏈接函數的示例。請注意,為了可識別模型需要對平滑函數進行約束。默認情況下,這些是自動施加的,並要求函數在觀察到的協變量值上求和為零(度量
如果模型擬合中絕對允許任何平滑函數,則此類模型的最大似然估計將不可避免地導致 和 的複雜 over-fitting 估計。因此,模型通常通過懲罰似然最大化來擬合,其中通過為每個平滑函數添加懲罰來修改模型(負對數)似然,懲罰其‘wiggliness’。為了控製懲罰擺動和懲罰擬合不良之間的權衡,每個懲罰都乘以相關的平滑參數:如何估計這些參數,以及如何實際表示平滑函數是從 GLM 轉向 GAM 引入的主要統計問題。
gam
的 mgcv
實現表示使用懲罰回歸樣條線的平滑函數,並且默認情況下,在給定所使用的數量基函數的情況下,這些樣條線使用設計為最佳的基函數。平滑項可以是任意數量的協變量的函數,並且用戶可以對如何測量函數的平滑度進行一定的控製。
mgcv
中的gam
通過使用廣義交叉驗證 (GCV) 準則解決平滑參數估計問題
或 Un-Biased 風險估計器 (UBRE) 標準
其中 是偏差, 是數據數量, 是尺度參數, 是模型的有效自由度。請注意,UBRE 實際上隻是 AIC 重新縮放,但僅在 已知時使用。
替代方案是 GACV、NCV
或 REML 的拉普拉斯近似。有一些證據表明後者實際上可能是最有效的選擇。 mgcv
包解決的主要計算挑戰是高效可靠地優化平滑度選擇標準。
概括地說,gam
的工作原理是,首先為模型公式中的每個平滑項構造基函數和一個或多個二次罰係數矩陣,獲得模型公式的嚴格參數部分的模型矩陣,然後將它們組合起來以獲得完整的模型矩陣(/設計矩陣)和一組用於平滑項的懲罰矩陣。此時也獲得了線性可識別性約束。該模型適合使用 gam.fit
、 gam.fit3
或變體,這些變體是 glm.fit
的修改。 GAM 懲罰似然最大化問題通過懲罰迭代重加權最小二乘法 (P-IRLS) 解決(參見 Wood 2000)。可以通過三種方式之一選擇平滑參數。 (i)“性能迭代”使用這樣的事實:在每個P-IRLS步驟中,估計工作懲罰線性模型,並且可以對每個這樣的工作模型執行平滑參數估計。最終,在大多數情況下,模型參數估計和平滑參數估計都會收斂。此選項在 bam
和 gamm
中可用。 (ii) 或者,P-IRLS 方案迭代至每個平滑參數試驗集的收斂,並且 GCV、UBRE 或 REML 分數僅在收斂時進行評估 - 然後優化是 ‘outer’ 到 P-IRLS 循環:在這種情況下P-IRLS 迭代必須區分,以便於優化,並使用 gam.fit3
或其變體之一來代替 gam.fit
。 (iii) Wood 和 Fasiolo (2017) 的擴展 Fellner-Schall 算法通過簡單更新平滑參數交替估計模型係數,最終近似最大化模型的邊際似然 (REML)。 gam
默認使用第二種方法,即外迭代。
內置了幾種替代的basis-penalty類型來表示模型平滑,但可以輕鬆添加替代類型(有關概述,請參見smooth.terms
,有關如何添加平滑類的信息,請參見smooth.construct
)。基礎維度的選擇(s
、te
、ti
和 t2
術語中的k
)是應該仔細考慮的事情(確切的值並不重要,但重要的是不要使其限製性地小,但又不能太大且計算成本高)。應選擇比近似相關平滑函數所需的基更大的基。然後,平滑的有效自由度將由該項上的平滑懲罰控製,並且(通常)自動選擇(上限由 k-1
或偶爾由 k
設置)。當然k
不應該太大,否則計算會很慢(或者在極端情況下,需要估計的係數會比數據多)。
請注意,gam
假設對 GAM 的定義非常包容:本質上可以使用任何懲罰 GLM:為此,gam
允許通過參數 paraPen
對非平滑模型組件進行懲罰,並允許使用線性預測器通過 linear.functional.terms
中說明的求和約定機製依賴於平滑的一般線性函數。 link{family.mgcv}
詳細介紹了 GLM 和指數族之外的可用內容。
Wood (2011, 2004) 和 Wood, Pya and Saefken (2016) 中給出了默認基礎擬合方法的詳細信息。 Wood (2000, 2017) 討論了一些替代方法。
gam()
不是 Trevor Hastie 原始版本的克隆(如 S-PLUS 或包 gam
中提供)。主要區別是(i)默認情況下模型項平滑度的估計是模型擬合的一部分,(ii)采用貝葉斯方差估計方法,可以更輕鬆地計算置信區間(具有良好的覆蓋概率), (iii) 模型可以依賴於平滑項的任何(有界)線性函數,(iv) 模型的參數部分可以受到懲罰,(v) 可以合並簡單的隨機效應,以及 (vi) 合並的設施多個變量的平滑是不同的:具體而言,沒有 lo
平滑,而是 (a) s
項可以有多個參數,意味著各向同性平滑,並且 (b) te
、 ti
或t2
平滑是通過尺度不變張量積平滑對任意數量變量的平滑交互進行建模的有效手段。球體上的樣條線、Duchon 樣條線和高斯馬爾可夫隨機場也可用。 (vii) 超出指數族的模型是可用的。請參閱包 gam
,了解通過原始 Hastie 和 Tibshirani 方法實現的 GAM。
值
如果 fit=FALSE
該函數返回適合 GAM 所需的項目列表 G
,但實際上並不適合它。
否則,該函數將返回 "gam"
類的對象,如 gamObject
中所述。
警告
用於平滑項的默認基本尺寸本質上是任意的,應該檢查它們是否太小。請參閱choose.k
和gam.check
。
當將模型擬合到很少的響應數據時,自動平滑參數選擇不太可能發揮作用。
對於在協變量空間中聚集在一起的許多零的數據,建立 GAM 非常容易,但它會遇到可識別性問題,特別是在使用泊鬆或二項式族時。問題是,例如log 或 logit 鏈接,平均值零對應於線性預測尺度上的無限範圍。
例子
## see also examples in ?gam.models (e.g. 'by' variables,
## random effects and tricks for large binary datasets)
library(mgcv)
set.seed(2) ## simulate some data...
dat <- gamSim(1,n=400,dist="normal",scale=2)
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)
summary(b)
plot(b,pages=1,residuals=TRUE) ## show partial residuals
plot(b,pages=1,seWithMean=TRUE) ## `with intercept' CIs
## run some basic model checks, including checking
## smoothing basis dimensions...
gam.check(b)
## same fit in two parts .....
G <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),fit=FALSE,data=dat)
b <- gam(G=G)
print(b)
## 2 part fit enabling manipulation of smoothing parameters...
G <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),fit=FALSE,data=dat,sp=b$sp)
G$lsp0 <- log(b$sp*10) ## provide log of required sp vec
gam(G=G) ## it's smoother
## change the smoothness selection method to REML
b0 <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat,method="REML")
## use alternative plotting scheme, and way intervals include
## smoothing parameter uncertainty...
plot(b0,pages=1,scheme=1,unconditional=TRUE)
## Would a smooth interaction of x0 and x1 be better?
## Use tensor product smooth of x0 and x1, basis
## dimension 49 (see ?te for details, also ?t2).
bt <- gam(y~te(x0,x1,k=7)+s(x2)+s(x3),data=dat,
method="REML")
plot(bt,pages=1)
plot(bt,pages=1,scheme=2) ## alternative visualization
AIC(b0,bt) ## interaction worse than additive
## Alternative: test for interaction with a smooth ANOVA
## decomposition (this time between x2 and x1)
bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+ti(x1,x2,k=6),
data=dat,method="REML")
summary(bt)
## If it is believed that x0 and x1 are naturally on
## the same scale, and should be treated isotropically
## then could try...
bs <- gam(y~s(x0,x1,k=40)+s(x2)+s(x3),data=dat,
method="REML")
plot(bs,pages=1)
AIC(b0,bt,bs) ## additive still better.
## Now do automatic terms selection as well
b1 <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat,
method="REML",select=TRUE)
plot(b1,pages=1)
## set the smoothing parameter for the first term, estimate rest ...
bp <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),sp=c(0.01,-1,-1,-1),data=dat)
plot(bp,pages=1,scheme=1)
## alternatively...
bp <- gam(y~s(x0,sp=.01)+s(x1)+s(x2)+s(x3),data=dat)
# set lower bounds on smoothing parameters ....
bp<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),
min.sp=c(0.001,0.01,0,10),data=dat)
print(b);print(bp)
# same with REML
bp<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),
min.sp=c(0.1,0.1,0,10),data=dat,method="REML")
print(b0);print(bp)
## now a GAM with 3df regression spline term & 2 penalized terms
b0 <- gam(y~s(x0,k=4,fx=TRUE,bs="tp")+s(x1,k=12)+s(x2,k=15),data=dat)
plot(b0,pages=1)
## now simulate poisson data...
set.seed(6)
dat <- gamSim(1,n=2000,dist="poisson",scale=.1)
## use "cr" basis to save time, with 2000 data...
b2<-gam(y~s(x0,bs="cr")+s(x1,bs="cr")+s(x2,bs="cr")+
s(x3,bs="cr"),family=poisson,data=dat,method="REML")
plot(b2,pages=1)
## drop x3, but initialize sp's from previous fit, to
## save more time...
b2a<-gam(y~s(x0,bs="cr")+s(x1,bs="cr")+s(x2,bs="cr"),
family=poisson,data=dat,method="REML",
in.out=list(sp=b2$sp[1:3],scale=1))
par(mfrow=c(2,2))
plot(b2a)
par(mfrow=c(1,1))
## similar example using GACV...
dat <- gamSim(1,n=400,dist="poisson",scale=.25)
b4<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),family=poisson,
data=dat,method="GACV.Cp",scale=-1)
plot(b4,pages=1)
## repeat using REML as in Wood 2011...
b5<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),family=poisson,
data=dat,method="REML")
plot(b5,pages=1)
## a binary example (see ?gam.models for large dataset version)...
dat <- gamSim(1,n=400,dist="binary",scale=.33)
lr.fit <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),family=binomial,
data=dat,method="REML")
## plot model components with truth overlaid in red
op <- par(mfrow=c(2,2))
fn <- c("f0","f1","f2","f3");xn <- c("x0","x1","x2","x3")
for (k in 1:4) {
plot(lr.fit,residuals=TRUE,select=k)
ff <- dat[[fn[k]]];xx <- dat[[xn[k]]]
ind <- sort.int(xx,index.return=TRUE)$ix
lines(xx[ind],(ff-mean(ff))[ind]*.33,col=2)
}
par(op)
anova(lr.fit)
lr.fit1 <- gam(y~s(x0)+s(x1)+s(x2),family=binomial,
data=dat,method="REML")
lr.fit2 <- gam(y~s(x1)+s(x2),family=binomial,
data=dat,method="REML")
AIC(lr.fit,lr.fit1,lr.fit2)
## For a Gamma example, see ?summary.gam...
## For inverse Gaussian, see ?rig
## now 2D smoothing...
eg <- gamSim(2,n=500,scale=.1)
attach(eg)
op <- par(mfrow=c(2,2),mar=c(4,4,1,1))
contour(truth$x,truth$z,truth$f) ## contour truth
b4 <- gam(y~s(x,z),data=data) ## fit model
fit1 <- matrix(predict.gam(b4,pr,se=FALSE),40,40)
contour(truth$x,truth$z,fit1) ## contour fit
persp(truth$x,truth$z,truth$f) ## persp truth
vis.gam(b4) ## persp fit
detach(eg)
par(op)
##################################################
## largish dataset example with user defined knots
##################################################
par(mfrow=c(2,2))
n <- 5000
eg <- gamSim(2,n=n,scale=.5)
attach(eg)
ind<-sample(1:n,200,replace=FALSE)
b5<-gam(y~s(x,z,k=40),data=data,
knots=list(x=data$x[ind],z=data$z[ind]))
## various visualizations
vis.gam(b5,theta=30,phi=30)
plot(b5)
plot(b5,scheme=1,theta=50,phi=20)
plot(b5,scheme=2)
par(mfrow=c(1,1))
## and a pure "knot based" spline of the same data
b6<-gam(y~s(x,z,k=64),data=data,knots=list(x= rep((1:8-0.5)/8,8),
z=rep((1:8-0.5)/8,rep(8,8))))
vis.gam(b6,color="heat",theta=30,phi=30)
## varying the default large dataset behaviour via `xt'
b7 <- gam(y~s(x,z,k=40,xt=list(max.knots=500,seed=2)),data=data)
vis.gam(b7,theta=30,phi=30)
detach(eg)
作者
Simon N. Wood simon.wood@r-project.org
Front end design inspired by the S function of the same name based on the work of Hastie and Tibshirani (1990). Underlying methods owe much to the work of Wahba (e.g. 1990) and Gu (e.g. 2002).
參考
Key References on this implementation:
Wood, S.N., N. Pya and B. Saefken (2016), Smoothing parameter and model selection for general smooth models (with discussion). Journal of the American Statistical Association 111, 1548-1575 doi:10.1080/01621459.2016.1180986
Wood, S.N. (2011) Fast stable restricted maximum likelihood and marginal likelihood estimation of semiparametric generalized linear models. Journal of the Royal Statistical Society (B) 73(1):3-36 doi:10.1111/j.1467-9868.2010.00749.x
Wood, S.N. (2004) Stable and efficient multiple smoothing parameter estimation for generalized additive models. J. Amer. Statist. Ass. 99:673-686. [Default method for additive case by GCV (but no longer for generalized)]
Wood, S.N. (2003) Thin plate regression splines. J.R.Statist.Soc.B 65(1):95-114 doi:10.1111/1467-9868.00374
Wood, S.N. (2006a) Low rank scale invariant tensor product smooths for generalized additive mixed models. Biometrics 62(4):1025-1036
Wood S.N. (2017) Generalized Additive Models: An Introduction with R (2nd edition). Chapman and Hall/CRC Press. doi:10.1201/9781315370279
Wood, S.N. and M. Fasiolo (2017) A generalized Fellner-Schall method for smoothing parameter optimization with application to Tweedie location, scale and shape models. Biometrics 73 (4), 1071-1081 doi:10.1111/biom.12666
Wood S.N., F. Scheipl and J.J. Faraway (2013) Straightforward intermediate rank tensor product smoothing in mixed models. Statistics and Computing 23: 341-360. doi:10.1007/s11222-012-9314-z
Marra, G and S.N. Wood (2012) Coverage Properties of Confidence Intervals for Generalized Additive Model Components. Scandinavian Journal of Statistics, 39(1), 53-74. doi:10.1111/j.1467-9469.2011.00760.x
Key Reference on GAMs and related models:
Wood, S. N. (2020) Inference and computation with generalized additive models and their extensions. Test 29(2): 307-339. doi:10.1007/s11749-020-00711-5
Hastie (1993) in Chambers and Hastie (1993) Statistical Models in S. Chapman and Hall.
Hastie and Tibshirani (1990) Generalized Additive Models. Chapman and Hall.
Wahba (1990) Spline Models of Observational Data. SIAM
Wood, S.N. (2000) Modelling and Smoothing Parameter Estimation with Multiple Quadratic Penalties. J.R.Statist.Soc.B 62(2):413-428 [The original mgcv paper, but no longer the default methods.]
Background References:
Green and Silverman (1994) Nonparametric Regression and Generalized Linear Models. Chapman and Hall.
Gu and Wahba (1991) Minimizing GCV/GML scores with multiple smoothing parameters via the Newton method. SIAM J. Sci. Statist. Comput. 12:383-398
Gu (2002) Smoothing Spline ANOVA Models, Springer.
McCullagh and Nelder (1989) Generalized Linear Models 2nd ed. Chapman & Hall.
O'Sullivan, Yandall and Raynor (1986) Automatic smoothing of regression functions in generalized linear models. J. Am. Statist.Ass. 81:96-103
Wood (2001) mgcv:GAMs and Generalized Ridge Regression for R. R News 1(2):20-25
Wood and Augustin (2002) GAMs with integrated model selection using penalized regression splines and applications to environmental modelling. Ecological Modelling 157:157-177
https://www.maths.ed.ac.uk/~swood34/
也可以看看
mgcv-package
、gamObject
、gam.models
、smooth.terms
、linear.functional.terms
、s
、te
predict.gam
、plot.gam
、summary.gam
、gam.side
、gam.selection
、gam.control
gam.check
、linear.functional.terms
、negbin
、magic
、vis.gam
相關用法
- R gam.check 擬合 gam 模型的一些診斷
- R gam.reparam 尋找平方根懲罰的穩定正交重新參數化。
- R gam.side GAM 的可識別性邊條件
- R gamm 廣義加性混合模型
- R gamlss.gH 計算回歸係數的對數似然導數
- R gam.fit3 使用 GCV、UBRE/AIC 或 RE/ML 導數計算進行 P-IRLS GAM 估計
- R gam.fit5.post.proc gam.fit5 的後處理輸出
- R gam.fit GAM P-IRLS 估計與 GCV/UBRE 平滑度估計
- R gam.mh 具有 gam 擬合的簡單後驗模擬
- R gam.control 設置 GAM 擬合默認值
- R gam2objective GAM 平滑參數估計的目標函數
- R gam.outer 使用“外部”迭代最小化 GAM 的 GCV 或 UBRE 分數
- R gamlss.etamu 將 mu 的導數轉換為線性預測器的導數
- R gam.vcomp 將 gam 平滑度估計報告為方差分量
- R gammals 伽瑪位置比例模型係列
- R gam.models 指定廣義加性模型
- R gamSim 模擬 GAM 的示例數據
- R gam.selection 廣義加性模型選擇
- R gaulss 高斯位置尺度模型族
- R gfam 分組家庭
- R gumbls Gumbel 位置比例模型族
- R gevlss 廣義極值位置比例模型族
- R ginla GAM 集成嵌套拉普拉斯逼近牛頓增強
- R get.var 從列表或 data.frame 中獲取命名變量或計算表達式
- R vcov.gam 從 GAM 擬合中提取參數(估計器)協方差矩陣
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Generalized additive models with integrated smoothness estimation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。