2016-03-26 11 views
0

Karma model yapıyorum ve 4 değişkeni var, x1-x4 bağımlı değişken ile birlikte y. Sınıf değişkeni cla olarak adlandırılır. Mevcut modelleme yapısı sadece seçebilir, böylece ben bu kod dinamik hale nasılImer formülünü dinamik olarak nasıl oluşturabilirim?

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

Benim sorum şu biçime modelini değiştirmek istediğinizi varsayalım,

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

olduğunu Ama değişken ve modele dahil edilir. Sadece 4 değişken için çok zor değil. Ancak, değişkenlerin manuel olarak eklenmesiyle daha fazla sayıda değişken için oldukça vergilendirilebilir.

Teşekkürler!

cevap

3

Formülün bazı bölümlerini önceden hazırlayın, bunları birbirine yapıştırın ve bir formula nesnesine zorlayın. Sen, kendi değişken oluşturan parçaların hazırlamak onlara öngörülebilir bir şey (x2, x37, x4 ) so that you can automatically find them using ls (pattern = "") . You fetch each object using olsun , pass that to macun işte birlikte et onları tutkal , use a collapse` argüman adlandırabilirsiniz.

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) 
daha az manuel kontrol istiyorsanız

, sen bir "boş" rastgele bir kısmının yapılması uygun sayıda ekleyebilir ve dinlenme yukarıda aynıdır olabilir.

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

çok teşekkürler Roma! Bu benim mükemmel bir zaman. – Beta

+0

@Beta I'v biraz daha büyük ölçekli bir yöntem gösterme sorusunu düzenledi. –

+0

Düzenlenen biri çok daha iyiydi :) Teşekkürler! – Beta

İlgili konular