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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。