Est-il un moyen d'obtenir des "effets marginaux" de un " glmer` objet
j'estime le modèle logit à effets aléatoires en utilisant glmer
et je tiens à signaler les Effets Marginaux pour les variables indépendantes. glm
modèles, paquet mfx
aide à calculer les effets marginaux. Y a-t-il un paquet ou une fonction pour glmer
objets?
Merci pour votre aide.
un exemple reproductible est donné ci-dessous
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank) #creating ranks
id <- rep(1:ceiling(nrow(mydata)/2), times=c(2)) #creating ID variable
mydata <- cbind(mydata,data.frame(id,stringsAsFactors=FALSE))
set.seed(12345)
mydata$ran <- runif(nrow(mydata),0,1) #creating a random variable
library(lme4)
cfelr <- glmer(admit ~ (1 | id) + rank + gpa + ran + gre, data=mydata ,family = binomial)
summary(cfelr)
3 réponses
C'est une réponse beaucoup moins technique, mais peut-être fournit une ressource utile. Je suis un fan de l' sjPlot
paquet qui fournit des tracés des effets marginaux des objets glmer, comme so:
library(sjPlot)
sjp.glmer(cfelr, type = "eff")
le paquet fournit beaucoup d'options pour explorer les effets fixes et aléatoires d'un modèle glmer aussi bien. https://github.com/strengejacke/sjPlot
Cheers, Ben
vous pourriez utiliser le ggeffects-paquet (exemples dans le package-vignettes). Donc, pour votre code, cela pourrait ressembler à ceci:
library(ggeffects)
# dat is a data frame with marginal effects
dat <- ggpredict(cfelr, term = "rank")
plot(dat)
ou que vous utilisez, que Benjamin décrit, Vous pouvez utiliser le sjPlot-package, en utilisant le plot_model()
fonction avec l'intrigue de type "pred"
(ceci enroule simplement le paquet ggeffects pour les tracés à effet marginal):
library(sjPlot)
plot_model(cfelr, type = "pred", term = "rank")
ma solution ne répond pas à la question,
"Est-il un moyen d'obtenir des "effets marginaux" à partir d'un glmer
objet",
mais plutôt,
"Est-il un moyen d'obtenir marginal de la logistique des coefficients de régression à partir d'une régression logistique conditionnelle avec un intercept aléatoire?"
Je n'offre ce relevé que parce que l'exemple reproductible fourni était une régression logistique conditionnelle avec une interception aléatoire et je suis ayant l'intention d'être utile. S'il vous plaît ne pas baisser la note; je retirerai si cette réponse est jugée trop hors sujet.
le code R est basé sur le travail de Patrick Heagerty (cliquez sur "View Raw" pour voir pdf), et j'inclus un exemple reproductible ci-dessous de ma version github de son paquet inmle (excuse the warnings at installation -- i'm shoehorning Patrick's non-CRAN package). J'Omets la sortie pour tous sauf la dernière ligne,compare
, ce qui montre l'effet fixe coefficients côte à côte.
library(devtools)
install_github("lnMLE_1.0-2", "swihart")
library(lnMLE)
## run the example from the logit.normal.mle help page
## see also the accompanying document (click 'View Raw' on page below:)
## https://github.com/swihart/lnMLE_1.0-2/blob/master/inst/doc/lnMLEhelp.pdf
data(eye_race)
attach(eye_race)
marg_model <- logit.normal.mle(meanmodel = value ~ black,
logSigma= ~1,
id=eye_race$id,
model="marginal",
data=eye_race,
tol=1e-5,
maxits=100,
r=50)
marg_model
cond_model <- logit.normal.mle(meanmodel = value ~ black,
logSigma= ~1,
id=eye_race$id,
model="conditional",
data=eye_race,
tol=1e-5,
maxits=100,
r=50)
cond_model
compare<-round(cbind(marg_model$beta, cond_model$beta),2)
colnames(compare)<-c("Marginal", "Conditional")
compare
la sortie de La dernière ligne:
comparer
Marginal Conditional
(Intercept) -2.43 -4.94
black 0.08 0.15
j'ai essayé l'exemple reproductible donné, mais j'ai eu des problèmes avec les implémentations glmer et lnMLE; encore une fois, je n'inclus que les sorties relatives aux résultats de comparaison et les avertissements de glmer()
appel:
##original question / answer... glmer() function gave a warning and the lnMLE did not fit well...
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank) #creating ranks
id <- rep(1:ceiling(nrow(mydata)/2), times=c(2)) #creating ID variable
mydata <- cbind(mydata,data.frame(id,stringsAsFactors=FALSE))
set.seed(12345)
mydata$ran <- runif(nrow(mydata),0,1) #creating a random variable
library(lme4)
cfelr <- glmer(admit ~ (1 | id) + rank + gpa + ran + gre,
data=mydata,
family = binomial)
Qui a donné:
Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.00161047 (tol = 0.001, component 2)
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model is nearly unidentifiable: very large eigenvalue
- Rescale variables?;Model is nearly unidentifiable: large eigenvalue ratio
- Rescale variables?
mais j'ai bêtement continué sans changer, en essayant pour appliquer l' logit.normal.mle
pour l'exemple donné. Cependant, le modèle conditionnel ne converge pas et ne produit pas des estimations d'erreur standard,
summary(cfelr)
library(devtools)
install_github("lnMLE_1.0-2", "swihart")
library(lnMLE)
mydata$rank2 = mydata$rank==2
mydata$rank3 = mydata$rank==3
mydata$rank4 = mydata$rank==4
cfelr_cond = logit.normal.mle(meanmodel = admit ~ rank2+rank3+rank4+gpa+ran+gre,
logSigma = ~1 ,
id=id,
model="conditional",
data=mydata,
r=50,
tol=1e-6,
maxits=500)
cfelr_cond
cfelr_marg = logit.normal.mle(meanmodel = admit ~ rank2+rank3+rank4+gpa+ran+gre,
logSigma = ~1 ,
id=id,
model="marginal",
data=mydata,
r=50,
tol=1e-6,
maxits=500)
cfelr_marg
compare_glmer<-round(cbind(cfelr_marg$beta, cfelr_cond$beta,summary(cfelr)$coeff[,"Estimate"]),3)
colnames(compare_glmer)<-c("Marginal", "Conditional","glmer() Conditional")
compare_glmer
dont la dernière ligne révèle que le modèle conditionnel de cfelr_cond
n'ont pas évalué un modèle conditionnel mais ont simplement retourné les coefficients marginaux et aucune erreur-type.
> compare_glmer
Marginal Conditional glmer() Conditional
(Intercept) -4.407 -4.407 -4.425
rank2 -0.667 -0.667 -0.680
rank3 -1.832 -1.833 -1.418
rank4 -1.930 -1.930 -1.585
gpa 0.547 0.548 0.869
ran 0.860 0.860 0.413
gre 0.004 0.004 0.002
j'espère régler ces problèmes. Toute aide / commentaire apprécié. Je ferai des mises à jour quand je pourrai.