Создание функции R Squared для пакета CPLM - PullRequest
0 голосов
/ 17 сентября 2018

Для исследований в аспирантуре я использую пакет CPLM (в частности, функцию cpglmm) для учета данных с нулевым раздуванием (распределение Пуассона по составу Твиди) в наборе данных, изучающем влияние лесозаготовок на плотность гнездящихся птиц. Это не очень распространенный пакет, такой как 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) с моими моделями в качестве входных данных. Я был бы очень признателен за любую помощь с этой проблемой. Надеюсь, я предоставил достаточно информации.

Спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

Поверьте, я понял это.Вот пример, который я написал:

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, которая вам нужна для запуска функции.

Надеюсь, это кому-нибудь поможет.Работаю над этой и другими связанными с ней проблемами целую вечность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...