2016-07-12 6 views
-1

Angenommen, ich möchte alle möglichen Variablenkombinationen eines GLMM sehen (unter Verwendung von lme4), aber ich möchte nicht zwei Variablen gleichzeitig in einem Modell berücksichtigen. Wie mache ich das? Zum Beispiel möchte ich 3 feste Effekte und 3 zufällige Effekte berücksichtigen, aber ich möchte nicht, dass irgendwelche der zufälligen oder fixierten Effekte gleichzeitig in einem Modell berücksichtigt werden. Wenn ich das Modell auf diese Weise konstruieren:GLMM- Ist es möglich, variable Kombinationen zu begrenzen?

model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6), 
data=data1) 

und ich verwende MuMIn::dredge() Funktion (auszuführen Modell im Durchschnitt später), werde ich alle möglichen Kombinationen zwischen ihnen, aber ich will nicht (1|var4) im selben Modell sein als (1|var5).

Also, ist es möglich, Modellkombinationen zu begrenzen? Auf diese Weise würde ich unnötige Modelle vermeiden und Rechenzeit sparen.

Antwort

1

Ich weiß nicht, wie dies innerhalb MuMIn::dredge() (aber siehe meine Versuche unten).

set.seed(101) 
dd <- data.frame(x=rnorm(1000), 
       var1=rnorm(1000), 
       var2=rnorm(1000), 
       var3=rnorm(1000), 
       var4=sample(factor(sample(1:20,size=1000,replace=TRUE))), 
       var5=sample(factor(sample(1:20,size=1000,replace=TRUE))), 
       var6=sample(factor(sample(1:20,size=1000,replace=TRUE)))) 
library(lme4) 
m0 <- lmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),dd,REML=FALSE, 
      na.action=na.fail) 

Wenn wir versuchen, das m.lim Argument zu verwenden, um es nur die festen Effekte Teilmengen, lässt aber in allen zufälligen Effekt terms:

dredge(m0,m.lim=c(0,1)) 
## Model selection table 
## (Intrc)  var1  var2 var3 df logLik AICc delta weight 
## 1 0.02350        5 -1417.485 2845.0 0.00 0.412 
## 3 0.02389   -0.03256   6 -1416.981 2846.0 1.02 0.248 
## 5 0.02327     0.02168 6 -1417.254 2846.6 1.56 0.189 
## 2 0.02349 -0.002981     6 -1417.480 2847.0 2.02 0.151 
## Models ranked by AICc(x) 
## Random terms (all models): 
## ‘1 | var4’, ‘1 | var5’, ‘1 | var6’ 

demo(dredge.subset) Folgen, habe ich versucht, dies als Beispiel:

dredge(m0, 
    subset=expression(!((var1 && var2) || ((1|var4) && (1|var5))))) 

bekam aber

Error in dredge(m0, subset = expression(!((var1 && var2) || ((1 | var4) && : 
    unrecognized names in 'subset' expression: "var4" and "var5" 

Ich kann keine Dokumentation finden wie Bagger/Modell Mittelwertbildung mit MuMIn::dredge() über Modelle mit verschiedenen zufälligen Effekten (in der Tat, ich bin nicht davon überzeugt, dass dies eine gute Idee ist). Wenn Sie alle Modelle genau einen festen Effekt und genau ein Zufallseffekt Begriff, Sie könnten es tun, wie folgt passen wollte:

Richten Sie alle Kombinationen:

fvars <- paste0("var",1:3) 
gvars <- paste0("(1|var",4:6,")") 
combs <- as.matrix(expand.grid(fvars,gvars)) 

Jetzt passen sie:

mList <- list() 
for (i in 1:nrow(combs)) { 
    mList[[i]] <- update(m0, 
      formula=reformulate(combs[i,],response="x")) 
} 

Jetzt können Sie lapply oder sapply verwenden, um auf die Elemente der Liste zu arbeiten, zum Beispiel:

lapply(mList,formula) 
## [[1]] 
## x ~ var1 + (1 | var4) 
## 
## [[2]] 
## x ~ var2 + (1 | var4) 
## 
## [[3]] 
## x ~ var3 + (1 | var4) 
## 
## [[4]] 
## x ~ var1 + (1 | var5) 
## ... et cetera ... 

bbmle::AICtab(mList,weights=TRUE) 
##  dAIC df weight 
## model5 0.0 4 0.344 
## model6 0.5 4 0.262 
## model4 1.0 4 0.213 
## model8 4.1 4 0.044 
## ... et cetera ... 

... aber Sie müssen etwas härter arbeiten, um das Modell zu mitteln. Sie könnten versuchen [email protected], [email protected], oder E-Mail der Betreuer MuMIn (maintainer("MuMIn")) ...

+0

Vielen Dank Ben! Ich werde sie kontaktieren oder vielleicht alle möglichen Kombinationen machen und diejenigen ausschließen, die nicht wichtig sind; in Excel ist es möglich! – Teresa