当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R smooth2random 将平滑转换为适合估计随机效应的形式


R语言 smooth2random 位于 mgcv 包(package)。

说明

用于将 mgcv 平滑对象转换为适合估计为随机效应的形式的通用函数,例如lme 。主要导出供其他包开发人员使用。

用法

smooth2random(object,vnames,type=1)



参数

object

mgcv 平滑对象。

vnames

避免作为随机效应形式中的虚拟变量名称的名称向量。

type

1 表示 lme ,否则 lmer

细节

平滑效应和随机效应之间存在二元性,这意味着可以使用混合建模软件来估计平滑效应。例如,此函数将标准 mgcv 平滑对象转换为适合 lme 估计的形式。导出供包开发人员使用的 gamm 服务例程。请参阅为新数据创建预测矩阵的示例,对应于 type=2 时返回的随机效应矩阵和固定效应矩阵。

一个列表。

rand

随机效应列表,包括分组因子和固定效应矩阵。将因子、模型矩阵和模型矩阵名称作为属性附加到每个元素。或者,对于 type=2 随机效应模型矩阵列表,每个矩阵对应一个独立同分布。具有单一方差分量的高斯随机效应。

trans.D

一个向量,trans.D,将 coefs 按顺序 [rand1, rand2,...fix] 转换回原始参数化。如果为空,则作为 1 的向量。 b.original = trans.U %*% (trans.D*b.fit)

trans.U

一个矩阵,trans.U,将 coefs 按顺序 [rand1, rand2,...fix] 转换回原始参数化。如果为空,则不需要。如果为空则视为身份。

Xf

固定效应矩阵(如果有)。

fixed

TRUE/FALSE ,指示术语是否不受惩罚。如果没有受到惩罚,那么其他东西可能不会被退回(这不是随机效应)。

rind

一个索引向量,如果 br 是该项的随机系数向量,则 br[rind] 是该项的有序系数。

pen.ind

惩罚每个系数的索引:0表示未惩罚。

例子

## Simple type 1 'lme' style...
library(mgcv)
x <- runif(30)
sm <- smoothCon(s(x),data.frame(x=x))[[1]]
smooth2random(sm,"")

## Now type 2 'lme4' style...
z <- runif(30)
dat <- data.frame(x=x,z=z)
sm <- smoothCon(t2(x,z),dat)[[1]]
re <- smooth2random(sm,"",2)
str(re)

## For prediction after fitting we might transform parameters back to
## original parameterization using 'rind', 'trans.D' and 'trans.U',
## and call PredictMat(sm,newdata) to get the prediction matrix to
## multiply these transformed parameters by.
## Alternatively we could obtain fixed and random effect Prediction
## matrices corresponding to the results from smooth2random, which
## can be used with the fit parameters without transforming them.
## The following shows how...

s2rPred <- function(sm,re,data) {
## Function to aid prediction from smooths represented as type==2
## random effects. re must be the result of smooth2random(sm,...,type=2).
  X <- PredictMat(sm,data)   ## get prediction matrix for new data
  ## transform to r.e. parameterization
  if (!is.null(re$trans.U)) X <- X%*%re$trans.U
  X <- t(t(X)*re$trans.D)
  ## re-order columns according to random effect re-ordering...
  X[,re$rind] <- X[,re$pen.ind!=0] 
  ## re-order penalization index in same way  
  pen.ind <- re$pen.ind; pen.ind[re$rind] <- pen.ind[pen.ind>0]
  ## start return object...
  r <- list(rand=list(),Xf=X[,which(re$pen.ind==0),drop=FALSE])
  for (i in 1:length(re$rand)) { ## loop over random effect matrices
    r$rand[[i]] <- X[,which(pen.ind==i),drop=FALSE]
    attr(r$rand[[i]],"s.label") <- attr(re$rand[[i]],"s.label")
  }
  names(r$rand) <- names(re$rand)
  r
} ## s2rPred

## use function to obtain prediction random and fixed effect matrices
## for first 10 elements of 'dat'. Then confirm that these match the
## first 10 rows of the original model matrices, as they should...

r <- s2rPred(sm,re,dat[1:10,])
range(r$Xf-re$Xf[1:10,])
range(r$rand[[1]]-re$rand[[1]][1:10,])

作者

Simon N. Wood simon.wood@r-project.org.

参考

Wood S.N. (2017) Generalized Additive Models: An Introduction with R (2nd edition). Chapman and Hall/CRC Press.

也可以看看

gamm

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Convert a smooth to a form suitable for estimating as random effect。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。