2012-02-14 16 views
5

Son adım modeli oluşturmayı otomatikleştirmeye çalışıyordum. Yordayıcıları iki ayrı modelden bir son modele birleştirmek istiyorum. update.formula() ile oynadım, ancak eski bir lmfit $ çağrısını yeni bir taneye, örneğin update.formula(lmfit$call,lmfitnew$call)'a güncelleyebileceğimi farkettim. Burada ben iki modelde gelen kiraz toplama değişkenlere ihtiyaç ve bu benim son modelde istiyorum ne Kestiricileri iki farklı doğrusal modelden biriyle nasıl birleştirebiliriz?

lmfit1 <- lm(y~ x1+x2+x3, data = modelready) 
best.ngc_fit <- stepAIC(lmfit1, direction="backward") 
best.ngc_fit$call 

lm(formula = y~ x2+x3, data = modelready) 

lmfit2 <- lm(y ~ a+b+c+d+f, data=fcstmodel) 
best.fcst_fit <- stepAIC(lmfit2, direction ="backward") 
best.fcst_fit$call 

lm(formula = y~ a+c+d+f, data = fcstmodel) 

bir final

çalıştırmak

best.full_fit <- lm(y~x2+x3+a+c+d+f, data = fullmodel) 
el bir sorun olmadan bunu yapabilir

, ama tüm süreci daha az yorucu hale getirmek için onu otomatikleştirmek istiyorum. Bu her bir modelin bileşenleri çıkarma ve yeni bir tasarım matris içine bunları birleştirmek meselesi ise

Herhangi bir yardım çok

+0

Neden verileri birleştirmek ve ilk bütünsel model oluşturma denemiyorsunuz? X1, x2, x3 = 0 ayarlarının yapıldığı a, b, c, d, f> 0 ve tersi. Yani, değişkenler 0 uygun olarak doldurulduğu x1, x2, x3, x4, a, b, c, d, f sütunlarını içeren bir data.frame kullanın. –

+0

Brandon, girişiniz için teşekkürler, bu model orijinal olarak SAS'da yazılmıştır. Modelin yapılandırıldığı yol, iki en iyi modeli birleştirmektir. İlk en iyi modelden olan tahmin ediciler, makroekonomik değişkenler ile ilgili fiyat endeksinden (örn. Konut fiyat endeksi), ikinci en iyi modelin tahmin edicileri, işsizlik oranı ve benzeri iş gücü endeksi ile ilgilidir. Veri akışının temel yapısını modele dönüştürme özgürlüğüm yok. Bunu yaparsam, bunu üst yönetime satamam. ABD'de lider bir BANK için çalışıyorum, yaptığımız birçok şey bize anlam ifade etmiyor ve halka açık. – Anand

cevap

4

Fomulaların daha ileri düzeyde manipülasyonu için Formula paketini kullanabilirsiniz.

formula(as.Formula(terms(lm1),formula(Formula(terms(lm2)), lhs=0)), collapse=TRUE) 

y ~ X1 + X2 + X3 + (X5 + X7) 
5

takdir edilecektir ve aşağıdaki sen stepAIC kullanılan gerçeğinin bakılmaksızın, çalışması gerekir:

dfrm <- data.frame(y=rnorm(100), replicate(7, rnorm(100))) 
lm1 <- lm(y ~ X1+X2+X3, dfrm) 
lm2 <- lm(y ~ X5+X7, dfrm) 
lm1.fm <- attr(terms(lm1), "term.labels") 
lm2.fm <- attr(terms(lm2), "term.labels") 
lm3.fm <- as.formula(paste("y ~ ", paste(c(lm1.fm, lm2.fm), collapse= "+"))) 
lm3 <- lm(lm3.fm, dfrm) 

burada wha hakkında daha fazla bilgi almak için help(terms.object) Bkz

> names(dfrm) 
[1] "y" "X1" "X2" "X3" "X4" "X5" "X6" "X7" 
> lm3.fm 
y ~ X1 + X2 + X3 + X5 + X7 

var, fikir düzeltmek için t döndürür. Örneğinizle, ve lm2 ile lm1'u best.fcst_fit ile değiştirmeniz gerekecektir.

+0

Christophe, teşekkürler efendim. Bu çok iyi çalıştı ve lm() 'nin yarattığı nesneyi derinlemesine kazarak öğrenmemde bana yardımcı oldu. Web sitenizi ziyaret ettiniz ve R kazasında sınıflar veren harika bir öğretmen olduğunu fark ettiniz. Herhangi bir çevrimiçi dersiniz varsa lütfen bize bildirin. Tekrar teşekkürler. – Anand

+0

Bunu duyduğuma sevindim, R nesnelerine derinlemesine bakmanıza yardımcı oluyor. R isteminde basit bir 'str (your.object)' yazmanın yanı sıra, bir fonksiyon tarafından ne döndürüldüğünü kontrol etmek için R çevrimiçi yardımına bakmanızı tavsiye ederim. Kurslarım hakkındaki yorumunuz için teşekkürler (en son slaytlar [burada] (http://www.aliquote.org/cours/2012_biomed/), fakat bu Fransızcadır, muhtemelen başka birçok iyi/daha iyi öğretici bulabileceksiniz. biraz googling ile :-) – chl