为CPLM包创建R Squared函数

时间:2018-09-17 16:43:12

标签: r regression mixed-models poisson tweedie

对于我的研究生研究,我正在使用CPLM程序包(特别是cpglmm函数)来考虑数据集中的零膨胀数据(Tweedie复合Poisson分布),以查看记录对繁殖鸟类密度的影响。这不是像lme4,nlme等广泛使用的软件包。因此,可以在这些更常用的软件包上使用的模型验证方法不能在cpglmm上使用。

我目前处于描述模型拟合程度的阶段,并试图计算边际和条件的R平方值。不幸的是,我不能使用r2glmm软件包或MuMln来计算R平方值,因为它们不支持cpglmm。因此,我不得不通过here中找到的示例(在附录6中cpglmm寄生模型下的示例,第33页)中手动计算这些值。这是该示例中的脚本:

let magazineWorks = checkMagazine(magazine: magazine, note: note)
if magazineWorks {
    print("Yes")
} else {
    print("No")
}

我想做的就是使用此代码在R中编写一个函数,以我的模型作为输入输出边际和条件R平方值(RglmmM和RglmmC)。非常感谢您对这个问题的帮助。希望我提供了足够的信息。

谢谢。

1 个答案:

答案 0 :(得分:0)

我相信。这是我写的一个示例:

R2glmm <- function(model){

  # Calculation of the variance in fitted values
  VarALT <- var(as.vector(model.matrix(model) %*% fixef(model)))

  # getting the observation-level variance Null model
  phiNULL <- NULLmodel$phi # the dispersion parameter
  pNULL <- NULLmodel$p # the index parameter
  mu <- exp(fixef(NULLmodel) + 0.5 * (VarCorr(NULLmodel)$YEAR[1])) 
  VarOdNULL <- phiNULL * mu^(pNULL - 2) # the delta method

  # Alternate model
  phiALT <- model$phi # the dispersion parameter
  pALT <- model$p # the index parameter
  VarOdALT <- phiALT * mu^(pALT - 2) # the delta method

  # R2[GLMM(m)] - marginal R2[GLMM]; using the delta method observation-level variance
  R2glmmM <- VarALT/(VarALT + sum(as.numeric(VarCorr(model))) + VarOdALT)

  # R2[GLMM(c)] - conditional R2[GLMM] for full model
  R2glmmC <- (VarALT + sum(as.numeric(VarCorr(model))))/(VarALT + sum(as.numeric(VarCorr(model))) + VarOdALT)

  return(c(R2glmmM, R2glmmC))

  }

包含ALT的变量是指替代模型。 “模型”表示您需要通过该函数运行的所有cpglmm模型。

希望这可以帮助某人。多年来,一直致力于解决此问题以及其他相关问题。