predict.gam
位于 mgcv
包(package)。 说明
采用 gam()
生成的拟合 gam
对象,并在给定模型协变量的一组新值或用于模型拟合的原始值的情况下生成预测。基于模型系数的后验分布,预测可能伴随有标准误差。该例程可以选择返回矩阵,模型系数必须预先乘以该矩阵,以便在提供的协变量值处产生线性预测变量的值:这对于获得从模型导出的数量的可信区域(例如,平滑),以及 R
之外的查找表预测(请参见下面的示例代码)。
用法
## S3 method for class 'gam'
predict(object,newdata,type="link",se.fit=FALSE,terms=NULL,
exclude=NULL,block.size=NULL,newdata.guaranteed=FALSE,
na.action=na.pass,unconditional=FALSE,iterms.type=NULL,...)
参数
object |
由 |
newdata |
包含需要预测的模型协变量值的 DataFrame 或列表。如果未提供,则返回与原始数据相对应的预测。如果提供了 |
type |
当其值为 |
se.fit |
当此值为 TRUE(非默认值)时,将为每个预测返回标准误差估计值。 |
terms |
如果 |
exclude |
如果 |
block.size |
每次调用底层代码时要处理的最大预测数:越大速度越快,但内存消耗更大。设置为 < 1 以使用预测总数。如果 |
newdata.guaranteed |
设置为 |
na.action |
如何处理 |
unconditional |
如果 |
iterms.type |
如果 |
... |
其他论点。 |
细节
predict.gam
产生的标准误差基于拟合 gam 对象中参数 Vp
的贝叶斯后验协方差矩阵。
当使用 linear.functional.terms
模型进行预测时,有两种可能性。如果要在预测中使用求和约定,就像在拟合中一样,那么 newdata
应该是一个列表,其中命名的矩阵参数对应于拟合中作为矩阵的任何变量。或者,人们可以选择简单地评估特定值的构成平滑,在这种情况下,矩阵参数可以用向量替换(并且 newdata
可以是数据帧)。有关示例代码,请参阅linear.functional.terms
。
为了便于使用 termplot
进行绘图,如果 object
拥有属性 "para.only"
和 type=="terms"
,则仅返回 1 阶参数项(即 termplot
可以处理的参数项)。
请注意,与其他预测函数一样,与 gam 模型公式中指定的偏移量不同,在预测时始终忽略作为参数提供给 gam
的任何偏移量。
请参阅示例,了解如何使用 lpmatrix
获取从模型导出的数量的可信区域。
值
如果type=="lpmatrix"
,则返回一个矩阵,当应用于模型系数向量时,该矩阵将在所提供的协变量值处给出线性预测变量值(减去任何偏移)的向量。否则,如果 se.fit
是 TRUE
,则返回 2 项列表,其中项(两个数组)fit
和 se.fit
包含预测和关联的标准误差估计,否则返回预测数组。返回数组的维度取决于 type
是否是 "terms"
:如果是,则数组是二维的,线性预测器中的每个项都是单独的,否则数组是一维的,包含线性预测器/预测值(或相应的 s.e.s)。按项返回的线性预测器将不包括偏移量或截距。
newdata
可以是 DataFrame 架、列表或 model.frame:如果它是模型框架,则必须提供所有变量。
警告
如果在平滑调用中使用协变量的数据相关变换,则预测可能不正确。请参阅示例。
请注意,此函数的行为与 Splus 中的predict.gam()
不同。
type=="terms"
与 predict.lm
对参数模型组件所做的并不完全匹配。
例子
library(mgcv)
n <- 200
sig <- 2
dat <- gamSim(1,n=n,scale=sig)
b <- gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)
newd <- data.frame(x0=(0:30)/30,x1=(0:30)/30,x2=(0:30)/30,x3=(0:30)/30)
pred <- predict.gam(b,newd)
pred0 <- predict(b,newd,exclude="s(x0)") ## prediction excluding a term
## ...and the same, but without needing to provide x0 prediction data...
newd1 <- newd;newd1$x0 <- NULL ## remove x0 from `newd1'
pred1 <- predict(b,newd1,exclude="s(x0)",newdata.guaranteed=TRUE)
## custom perspective plot...
m1 <- 20;m2 <- 30; n <- m1*m2
x1 <- seq(.2,.8,length=m1);x2 <- seq(.2,.8,length=m2) ## marginal grid points
df <- data.frame(x0=rep(.5,n),x1=rep(x1,m2),x2=rep(x2,each=m1),x3=rep(0,n))
pf <- predict(b,newdata=df,type="terms")
persp(x1,x2,matrix(pf[,2]+pf[,3],m1,m2),theta=-130,col="blue",zlab="")
#############################################
## difference between "terms" and "iterms"
#############################################
nd2 <- data.frame(x0=c(.25,.5),x1=c(.25,.5),x2=c(.25,.5),x3=c(.25,.5))
predict(b,nd2,type="terms",se=TRUE)
predict(b,nd2,type="iterms",se=TRUE)
#########################################################
## now get variance of sum of predictions using lpmatrix
#########################################################
Xp <- predict(b,newd,type="lpmatrix")
## Xp %*% coef(b) yields vector of predictions
a <- rep(1,31)
Xs <- t(a) %*% Xp ## Xs %*% coef(b) gives sum of predictions
var.sum <- Xs %*% b$Vp %*% t(Xs)
#############################################################
## Now get the variance of non-linear function of predictions
## by simulation from posterior distribution of the params
#############################################################
rmvn <- function(n,mu,sig) { ## MVN random deviates
L <- mroot(sig);m <- ncol(L);
t(mu + L%*%matrix(rnorm(m*n),m,n))
}
br <- rmvn(1000,coef(b),b$Vp) ## 1000 replicate param. vectors
res <- rep(0,1000)
for (i in 1:1000)
{ pr <- Xp %*% br[i,] ## replicate predictions
res[i] <- sum(log(abs(pr))) ## example non-linear function
}
mean(res);var(res)
## loop is replace-able by following ....
res <- colSums(log(abs(Xp %*% t(br))))
##################################################################
## The following shows how to use use an "lpmatrix" as a lookup
## table for approximate prediction. The idea is to create
## approximate prediction matrix rows by appropriate linear
## interpolation of an existing prediction matrix. The additivity
## of a GAM makes this possible.
## There is no reason to ever do this in R, but the following
## code provides a useful template for predicting from a fitted
## gam *outside* R: all that is needed is the coefficient vector
## and the prediction matrix. Use larger `Xp'/ smaller `dx' and/or
## higher order interpolation for higher accuracy.
###################################################################
xn <- c(.341,.122,.476,.981) ## want prediction at these values
x0 <- 1 ## intercept column
dx <- 1/30 ## covariate spacing in `newd'
for (j in 0:2) { ## loop through smooth terms
cols <- 1+j*9 +1:9 ## relevant cols of Xp
i <- floor(xn[j+1]*30) ## find relevant rows of Xp
w1 <- (xn[j+1]-i*dx)/dx ## interpolation weights
## find approx. predict matrix row portion, by interpolation
x0 <- c(x0,Xp[i+2,cols]*w1 + Xp[i+1,cols]*(1-w1))
}
dim(x0)<-c(1,28)
fv <- x0%*%coef(b) + xn[4];fv ## evaluate and add offset
se <- sqrt(x0%*%b$Vp%*%t(x0));se ## get standard error
## compare to normal prediction
predict(b,newdata=data.frame(x0=xn[1],x1=xn[2],
x2=xn[3],x3=xn[4]),se=TRUE)
##################################################################
# illustration of unsafe scale dependent transforms in smooths....
##################################################################
b0 <- gam(y~s(x0)+s(x1)+s(x2)+x3,data=dat) ## safe
b1 <- gam(y~s(x0)+s(I(x1/2))+s(x2)+scale(x3),data=dat) ## safe
b2 <- gam(y~s(x0)+s(scale(x1))+s(x2)+scale(x3),data=dat) ## unsafe
pd <- dat; pd$x1 <- pd$x1/2; pd$x3 <- pd$x3/2
par(mfrow=c(1,2))
plot(predict(b0,pd),predict(b1,pd),main="b0 and b1 predictions match")
abline(0,1,col=2)
plot(predict(b0,pd),predict(b2,pd),main="b2 unsafe, doesn't match")
abline(0,1,col=2)
####################################################################
## Differentiating the smooths in a model (with CIs for derivatives)
####################################################################
## simulate data and fit model...
dat <- gamSim(1,n=300,scale=sig)
b<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)
plot(b,pages=1)
## now evaluate derivatives of smooths with associated standard
## errors, by finite differencing...
x.mesh <- seq(0,1,length=200) ## where to evaluate derivatives
newd <- data.frame(x0 = x.mesh,x1 = x.mesh, x2=x.mesh,x3=x.mesh)
X0 <- predict(b,newd,type="lpmatrix")
eps <- 1e-7 ## finite difference interval
x.mesh <- x.mesh + eps ## shift the evaluation mesh
newd <- data.frame(x0 = x.mesh,x1 = x.mesh, x2=x.mesh,x3=x.mesh)
X1 <- predict(b,newd,type="lpmatrix")
Xp <- (X1-X0)/eps ## maps coefficients to (fd approx.) derivatives
colnames(Xp) ## can check which cols relate to which smooth
par(mfrow=c(2,2))
for (i in 1:4) { ## plot derivatives and corresponding CIs
Xi <- Xp*0
Xi[,(i-1)*9+1:9+1] <- Xp[,(i-1)*9+1:9+1] ## Xi%*%coef(b) = smooth deriv i
df <- Xi%*%coef(b) ## ith smooth derivative
df.sd <- rowSums(Xi%*%b$Vp*Xi)^.5 ## cheap diag(Xi%*%b$Vp%*%t(Xi))^.5
plot(x.mesh,df,type="l",ylim=range(c(df+2*df.sd,df-2*df.sd)))
lines(x.mesh,df+2*df.sd,lty=2);lines(x.mesh,df-2*df.sd,lty=2)
}
作者
Simon N. Wood simon.wood@r-project.org
The design is inspired by the S function of the same name described in Chambers and Hastie (1993) (but is not a clone).
参考
Chambers and Hastie (1993) Statistical Models in S. Chapman & Hall.
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
Wood S.N. (2017, 2nd ed) Generalized Additive Models: An Introduction with R. Chapman and Hall/CRC Press. doi:10.1201/9781315370279
也可以看看
相关用法
- R predict.bam 根据拟合的大加法模型进行预测
- R print.gam 打印广义加法模型对象。
- R pdTens 实现张量积平滑的 pdMat 类的函数
- R plot.gam 默认 GAM 绘图
- R pcls 惩罚约束最小二乘拟合
- R place.knots 通过协变量值自动均匀放置一组结
- R pdIdnot 单位矩阵倍数的溢出证明 pdMat 类
- R polys.plot 绘制定义为多边形的地理区域
- R pen.edf 提取与游戏拟合中每个惩罚相关的有效自由度
- R psum.chisq 评估 c.d.f.卡方偏差的加权和
- 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 mgcv.parallel mgcv 中的并行计算。
- R gamm 广义加性混合模型
- R Predict.matrix GAM 中平滑项的预测方法
- R Predict.matrix.soap.film 皂膜光滑度预测矩阵
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Prediction from fitted GAM model。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。