2016-03-26 9 views
0

Ich mache gemischtes Modell und habe 4 Variablen, x1-x4 mit abhängiger Variable y. Die Klassenvariable heißt cla. Die vorliegende Modellstruktur istWie Formel für Imer dynamisch erstellen?

md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x4|cla),data=mydata) 

Aber ich nehme an, das Modell zu folgendem Format

md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x3|cla)+(1+x4|cla),data=mydata) 

Meine Frage ist, geändert werden soll, wie könnte ich diesen Code dynamisch zu machen, so dass ich nur wählen Variable, und es wird in das Modell integriert. Für nur 4 Variablen ist es nicht sehr schwierig. Aber für eine größere Anzahl von Variablen ist das manuelle Hinzufügen von Variablen ziemlich anstrengend.

Danke!

Antwort

3

Bereiten Sie Teile der Formel im Voraus vor, kleben Sie sie zusammen und erzwingen Sie sie zu einem formula Objekt. Sie können einzelne Teile in eine eigene Variable vorbereiten, nennen sie etwas vorhersehbar (x2, x37, x4 ) so that you can automatically find them using ls (pattern = "") . You fetch each object using erhalten , pass that to Paste , use a collapse` Argument sie zusammen et voila zu kleben.

fixed.part <- "y ~ x1 + x2 + x3" 

x2 <-"(1+x2|cla)" 
x3 <- "(1+x3|cla)" 
x4 <- "(1+x4|cla)" 

random.part <- paste(sapply(ls(pattern = "^x"), get), collapse = " + ") 
formula(paste(fixed.part, random.part, sep = " + ")) 

y ~ x1 + x2 + x3 + (1 + x2 | cla) + (1 + x3 | cla) + (1 + x4 | cla) 

Wenn Sie weniger manuelle Steuerung möchten, können Sie einen „leeren“ random Teil eine entsprechende Anzahl und der Rest ist das gleiche wie oben.

x <- "(1+x%s|cla)" 
random.part <- paste(sprintf(x, 1:10), collapse = " + ") 
formula(paste(fixed.part, random.part, sep = " + ")) 

y ~ x1 + x2 + x3 + (1 + x1 | cla) + (1 + x2 | cla) + (1 + x3 | 
    cla) + (1 + x4 | cla) + (1 + x5 | cla) + (1 + x6 | cla) + 
    (1 + x7 | cla) + (1 + x8 | cla) + (1 + x9 | cla) + (1 + x10 | 
    cla) 
+0

vielen Dank Roman! das funktioniert perfekt mit mir konstruieren, fügen. – Beta

+0

@Beta Ich habe die Frage bearbeitet, um eine Methode für einen etwas größeren Maßstab zu zeigen. –

+0

Die bearbeitete ist viel besser :) Danke! – Beta