r公式操作(拆分随机效果)

  • 本文关键字:随机 拆分 操作
  • 更新时间 :
  • 英文 :


我正在尝试建立一个混合效应模型验证工具,我正在使用正向选择方法,因此如果假设模型是model<-y~a+b+(1+c|d)(包括随机截距和随机斜率(,我可以使用R findbars(model)中lme4包下的findbars函数来分离随机效应,即本例中的(1+c|d),但由于我使用的是正向选择方法,我首先想要仅随机截距模型,即(1|d),然后是全随机效应模型(1+c|d)。如果我在模型中看到(1+c|d),有没有办法分割随机效应(1|d)

这比我想要的要复杂得多,但我认为这是必要的:

##' combine unary or binary operator + arguments (sugar for 'substitute')
makeOp <- function(x,y,op=NULL) {
   if (is.null(op)) {  ## unary
    substitute(OP(X),list(X=x,OP=y))
   } else substitute(OP(X,Y), list(X=x,OP=op,Y=y))
}
## convert character to raw 'language' object
toLang <- function(x) parse(text=x)[[1]]
## expand term using terms()
splitFun <- function(x) {
    tt <- terms(as.formula(makeOp(x,quote(`~`))))
    res <- lapply(attr(tt,"term.labels"),toLang)
    if (attr(tt,"intercept")==1) {
        res <- c(list(1),res)
    }
    return(res)
}
## expand left-hand side terms into a list, 
##   distribute across right-hand sides
expandFun <- function(x) {
    lapply(splitFun(x[[2]]),makeOp,y=x[[3]],op=quote(`|`))
}

试试看:

form <- y~a+b+(1+c|d)
bb <- lme4::findbars(form)
lapply(bb,expandFun)
## [[1]]
## [[1]][[1]]
## 1 | d
## 
## [[1]][[2]]
## c | d

此代码也将扩展,例如x*y1+x+y+x:y(不确定是否希望发生这种情况…(

PS:你确实知道逐步模型选择的推断危险,对吧?(例如,请参见此处(

最新更新