1

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

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

# Fit null model without fixed effects (but including all random effects)
parmodCPr <- cpglmm(Parasite ~ 1 + (1 | Population) + (1 | Container), data = DataAll)

# Fit alternative model including fixed and all random effects
parmodCPf <- cpglmm(Parasite ~ Sex + Treatment + Habitat + (1 | Population) +
                  (1 | Container), data = DataAll)

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

# getting the observation-level variance Null model
phiN <- parmodCPr@phi # the dispersion parameter
pN <- parmodCPr@p # the index parameter
mu <- exp(fixef(parmodCPr) + 0.5 * (VarCorr(parmodCPr)$Population[1] + VarCorr(parmodCPr)$Container[1]))
VarOdN <- phiN * mu^(pN - 2) # the delta method

# Full model
phiF <- parmodCPf@phi # the dispersion parameter
pF <- parmodCPf@p # the index parameter
VarOdF <- phiF * mu^(pF - 2) # the delta method

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

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

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

谢谢。

4

1 回答 1

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 模型。

希望这可以帮助某人。多年来一直在研究这个问题和其他相关问题。

于 2018-09-17T18:38:45.983 回答