smooth.construct
位于 mgcv
包(package)。 说明
在公式处理过程中,GAM 公式中的平滑项将转换为 xx.smooth.spec
类的平滑规范对象。使用适当的 smooth.construct
函数将每个对象转换为平滑对象。可以通过编写新的 smooth.construct
方法函数和相应的 Predict.matrix
方法函数来添加新的平滑类(请参见下面的示例代码)。
在实践中,通常通过 smooth.construct2
和包装函数 smoothCon
调用 smooth.construct
,以处理 by
变量和居中约束(如果需要直接处理这些事情,请参阅 smoothCon
文档,了解更多信息)用户定义的平滑类)。
用法
smooth.construct(object,data,knots)
smooth.construct2(object,data,knots)
参数
object |
是一个平滑规范对象,由 GAM 公式中的
如果
|
data |
对于 |
knots |
包含与 |
细节
对于具有以下类的对象有内置方法:tp.smooth.spec
(薄板回归样条:请参阅tprs
); ts.smooth.spec
(带有shrinkage-to-zero的薄板回归样条); cr.smooth.spec
(三次回归样条:参见cubic.regression.spline
;cs.smooth.spec
(带有shrinkage-to-zero的三次回归样条);cc.smooth.spec
(循环三次回归样条);ps.smooth.spec
(Eilers 和 Marx (1986) 样式 P-splines :参见p.spline
);cp.smooth.spec
(循环P-splines);ad.smooth.spec
(1或2个变量的自适应平滑:参见adaptive.smooth
);re.smooth.spec
(简单随机效应项);mrf.smooth.spec
(马尔可夫)用于平滑离散区域的随机场平滑器);tensor.smooth.spec
(张量积平滑)。
有一个隐含的假设,即基础仅取决于结和/或一组独特的协变量组合;即,无论是从全套协变量生成,还是仅从协变量的独特组合生成,基础都是相同的。
平滑的绘制是通过平滑对象的绘图方法来处理的。如果没有更具体的方法可用,则使用默认的 mgcv.smooth
方法。可以为特定的平滑类添加绘图方法,请参阅 mgcv:::plot.sos.smooth
、 mgcv:::plot.random.effect
、 mgcv:::plot.mgcv.smooth
的源代码作为示例代码。
值
输入参数 object
分配了一个新类来指示它是什么类型的平滑,并且至少添加了以下项目:
X |
这一项的模型矩阵。这可能具有 |
S |
适用于该术语的正半定罚矩阵列表。如果该术语保留un-penalized,则列表将为空。 |
rank |
给出处罚等级的数组。 |
null.space.dim |
罚零空间的维度(居中之前)。 |
可以添加以下项目:
C |
定义该术语的任何可识别性约束的矩阵,供拟合时使用。如果这是 |
Cp |
一个可选矩阵,提供预测时使用的替代可识别性约束。默认情况下使用拟合常数。当拟合需要某种简单的稀疏约束,但预测需要通常的 sum-to-zero 约束时,此选项很有用,例如模型组件的 CI 尽可能窄。 |
no.rescale |
如果这是非 NULL,则平滑的惩罚系数矩阵将不会重新调整以增强数值稳定性(重新调整是默认值,因为 |
df |
与该术语相关的自由度(当不受惩罚且不受约束时)。如果为空,则 |
te.ok |
|
plot.me |
如果此平滑不应由 |
side.constrain |
设置为 |
L |
smooths 依赖的 ‘underlying’ 平滑参数可能比 |
通常,返回的对象还将包含定义基础所需的额外信息,并由 Predict.matrix
方法用来使用基础进行预测。请参阅 Details
部分,获取内置平滑类所包含信息的链接。
tensor.smooth
返回的对象还将以相同的方式更新 margin
列表的每个元素。 tensor.smooths
还有一个列表 XP
,其中包含根据函数值重新参数化的任何一维边际项的重新参数化矩阵。该列表将包含未重新参数化的边平滑的 NULL
条目,并且长度仅足以到达列表中最后一个重新参数化的边。
警告
用户定义的平滑对象应避免使用属性名称 "qrc"
或 "nCons"
,因为这些属性在内部使用以提供无约束参数化。
例子
## Adding a penalized truncated power basis class and methods
## as favoured by Ruppert, Wand and Carroll (2003)
## Semiparametric regression CUP. (No advantage to actually
## using this, since mgcv can happily handle non-identity
## penalties.)
smooth.construct.tr.smooth.spec<-function(object,data,knots) {
## a truncated power spline constructor method function
## object$p.order = null space dimension
m <- object$p.order[1]
if (is.na(m)) m <- 2 ## default
if (m<1) stop("silly m supplied")
if (object$bs.dim<0) object$bs.dim <- 10 ## default
nk<-object$bs.dim-m-1 ## number of knots
if (nk<=0) stop("k too small for m")
x <- data[[object$term]] ## the data
x.shift <- mean(x) # shift used to enhance stability
k <- knots[[object$term]] ## will be NULL if none supplied
if (is.null(k)) # space knots through data
{ n<-length(x)
k<-quantile(x[2:(n-1)],seq(0,1,length=nk+2))[2:(nk+1)]
}
if (length(k)!=nk) # right number of knots?
stop(paste("there should be ",nk," supplied knots"))
x <- x - x.shift # basis stabilizing shift
k <- k - x.shift # knots treated the same!
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1]<-(x-k[i])^m*as.numeric(x>k[i])
object$X<-X # the finished model matrix
if (!object$fixed) # create the penalty matrix
{ object$S[[1]]<-diag(c(rep(0,m+1),rep(1,nk)))
}
object$rank<-nk # penalty rank
object$null.space.dim <- m+1 # dim. of unpenalized space
## store "tr" specific stuff ...
object$knots<-k;object$m<-m;object$x.shift <- x.shift
object$df<-ncol(object$X) # maximum DoF (if unconstrained)
class(object)<-"tr.smooth" # Give object a class
object
}
Predict.matrix.tr.smooth<-function(object,data) {
## prediction method function for the `tr' smooth class
x <- data[[object$term]]
x <- x - object$x.shift # stabilizing shift
m <- object$m; # spline order (3=cubic)
k<-object$knots # knot locations
nk<-length(k) # number of knots
X<-matrix(0,length(x),object$bs.dim)
for (i in 1:(m+1)) X[,i] <- x^(i-1)
for (i in 1:nk) X[,i+m+1] <- (x-k[i])^m*as.numeric(x>k[i])
X # return the prediction matrix
}
# an example, using the new class....
require(mgcv)
set.seed(100)
dat <- gamSim(1,n=400,scale=2)
b<-gam(y~s(x0,bs="tr",m=2)+s(x1,bs="ps",m=c(1,3))+
s(x2,bs="tr",m=3)+s(x3,bs="tr",m=2),data=dat)
plot(b,pages=1)
b<-gamm(y~s(x0,bs="tr",m=2)+s(x1,bs="ps",m=c(1,3))+
s(x2,bs="tr",m=3)+s(x3,bs="tr",m=2),data=dat)
plot(b$gam,pages=1)
# another example using tensor products of the new class
dat <- gamSim(2,n=400,scale=.1)$data
b <- gam(y~te(x,z,bs=c("tr","tr"),m=c(2,2)),data=dat)
vis.gam(b)
作者
Simon N. Wood simon.wood@r-project.org
参考
Wood, S.N. (2003) Thin plate regression splines. J.R.Statist.Soc.B 65(1):95-114
Wood, S.N. (2006) Low rank scale invariant tensor product smooths for generalized additive mixed models. Biometrics 62(4):1025-1036
The code given in the example is based on the smooths advocated in:
Ruppert, D., M.P. Wand and R.J. Carroll (2003) Semiparametric Regression. Cambridge University Press.
However if you want p-splines, rather than splines with derivative based penalties, then the built in "ps" class is probably a marginally better bet. It's based on
Eilers, P.H.C. and B.D. Marx (1996) Flexible Smoothing with B-splines and Penalties. Statistical Science, 11(2):89-121
https://www.maths.ed.ac.uk/~swood34/
也可以看看
相关用法
- R smooth.construct.cr.smooth.spec GAM 中的惩罚三次回归样条
- R smooth.construct.bs.smooth.spec GAM 中的惩罚 B 样条
- R smooth.construct.sz.smooth.spec GAM 中的约束因子平滑交互
- R smooth.construct.re.smooth.spec GAM 中的简单随机效应
- R smooth.construct.mrf.smooth.spec 马尔可夫随机场平滑
- R smooth.construct.gp.smooth.spec 低阶高斯过程平滑
- R smooth.construct.tp.smooth.spec GAM 中的惩罚薄板回归样条
- R smooth.construct.ad.smooth.spec GAM 中的自适应平滑
- R smooth.construct.so.smooth.spec 皂膜平滑剂
- R smooth.construct.ds.smooth.spec 低阶 Duchon 1977 样条
- R smooth.construct.fs.smooth.spec GAM 中平滑交互的因子
- R smooth.construct.ps.smooth.spec GAM 中的 P 样条
- R smooth.construct.sos.smooth.spec 球体上的样条线
- R smooth.construct.tensor.smooth.spec 张量积平滑构造函数
- R smooth.construct.t2.smooth.spec 张量积平滑构造函数
- R smooth.info 提供有关平滑规范的额外信息的通用函数
- R smooth.terms GAM 中的平滑术语
- R smooth2random 将平滑转换为适合估计随机效应的形式
- R smoothCon GAM 平滑项的预测/构造包装函数
- R scat 用于重尾数据的 GAM 缩放 t 系列
- R slanczos 计算对称矩阵的截断特征分解
- R single.index 具有 mgcv 的单指数模型
- R sp.vcov 从 (RE)ML GAM 拟合中提取平滑参数估计器协方差矩阵
- R shash Sinh-arcsinh 位置比例和形状模型族
- R s 在 GAM 公式中定义平滑
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Constructor functions for smooth terms in a GAM。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。