Используя 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