Синтаксис для функции glmer для использования с glmulti? - PullRequest
0 голосов
/ 27 ноября 2018

Используя glmer, я могу отлично запустить смешанную модель логистической регрессии.Но когда я пытаюсь сделать то же самое, используя glmulti, я получаю ошибки (описанные ниже).Я думаю, что проблема с функцией, которую я указываю для использования в glmulti.Мне нужна функция, которая задает модель логистической регрессии для данных, содержащих непрерывные фиксированные ковариаты и категориальные случайные эффекты, используя ссылку logit.Переменная ответа является двоичным 0/1.

Пример данных:

library(lme4)
library(rJava)
library(glmulti)

set.seed(666)
x1 = rnorm(1000)  # some continuous variables 
x2 = rnorm(1000)
x3 = rnorm(1000)
r1 = rep(c("red", "blue"), times = 500)  #categorical random effects
r2 = rep(c("big", "small"), times = 500)
z = 1 + 2*x1 + 3*x2 +2*x3       
pr = 1/(1+exp(-z))         
y = rbinom(1000,1,pr)      # bernoulli response variable
df = data.frame(y=y,x1=x1,x2=x2, x3=x3, r1=r1, r2=r2)

Логистическая регрессия с одним блеском работает просто отлично:

model1<-glmer(y~x1+x2+x3+(1|r1)+(1|r2),data=df,family="binomial")

Но возникают ошибки, когда я пытаюсь использовать ту же структуру модели через glmulti:

# create a function - I think this is where my problem is 

glmer.glmulti<-function(formula, data, family=binomial(link ="logit"), random="", ...){
  glmer(paste(deparse(formula),random),data=data,...)
}

# run glmulti models
glmulti.logregmixed <-
  glmulti(formula(glmer(y~x1+x2+x3+(1|r1)+(1|r2), data=df),   fixed.only=TRUE), #error w/o fixed.only=TRUE
      data=df,
      level = 2,              
      method = "g",            
      crit = "aicc",           
      confsetsize = 128,       
      plotty = F, report = F,  
      fitfunc = glmer.glmulti,
      family = binomial(link ="logit"),
      random="+(1|r1)","+(1|r2)",  # possibly this line is incorrect?
      intercept=TRUE)

#Errors returned:
singular fit
Error in glmulti(formula(glmer(y ~ x1 + x2 + x3 + (1 | r1) + (1 | r2),  : 
  Improper call of glmulti.
In addition: Warning message:
In glmer(y ~ x1 + x2 + x3 + (1 | r1) + (1 | r2), data = df) :
  calling glmer() with family=gaussian (identity link) as a shortcut     to lmer() is deprecated; please call lmer() directly

Я пробовал различные изменения в функции, а также в частях formula и fitfunc кода glmulti.Я попытался заменить lmer на glmer, и я думаю, что я не понимаю ошибку.Я также боюсь, что вызов lmer может изменить структуру модели, так как во время одной из моих попыток summary() модели заявил "Linear mixed model fit by REML ['lmerMod']." Мне нужно, чтобы модели glmulti были такими же, как те, что я получаю с помощью model1 с использованием glmer (то есть summary(model1) дает "Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']"

Многие подобные вопросы остаются без ответа. Заранее спасибо!

Кредит:

образец набора данных, созданный с помощьюСправка отсюда: https://stats.stackexchange.com/questions/46523/how-to-simulate-artificial-data-for-logistic-regression

Код glmulti, адаптированный здесь: Выбор модели с использованием glmulti

...