2015-12-07 13 views
5

paketini kullanarak mgcv paketini kullanarak Genelleştirilmiş Katkı Modeli uygularım. Bağımsız değişkenim Y, bağımsız değişken X, diğer bağımsız değişkenler Oth ve iki düzeyli bir faktör Fac içeren bir veri tablom var. BenR: GAM veri alt kümesine sığdırıldı

Y ~ s(X) + Oth

AMA s(X) terim sadece faktör iki düzeyde birinde uygun olduğunu ilave kısıtlama ile, Fac==1 söylemek şu modelden sığdırmak istiyorum. Diğer terimler Oth tüm verilerle uyumlu olmalıdır.

s(X,by=Fac) incelemeyi denedim, ancak bu Oth için uygun önyargıdır. Diğer bir deyişle, X'un Y ile ilişkili olduğunu ancak Fac==1 ile ilgili olduğunu belirtmek isterim, aksi takdirde X modelini anlamlandırmaz.

cevap

1

, böyle etkileşimi ile bazı model hakkında düşündüğünüzü:

Y ~ 0th + (Fac==1)*s(X) 

İsterseniz "X yalnızca Y ilgilidir inancını ifade Fac==1" Don Fac'u factor olarak, ancak numeric değişken olarak ele alın. Bu durumda, numeric etkileşimini ve sadece bir tane coefficients (bir factor burada iki olduğunda) alırsınız. Bu tür bir model varying coefficient model'dur. Bu doğru cevap, sen belirleyicisi burada (modellenecek olmaması halinde yardımcı değişkene vermek değeri, 0 idiyse

# some data 
data <- data.frame(th = runif(100), 
       X = runif(100), 
       Y = runif(100), 
       Fac = sample(0:1, 100, TRUE)) 
data$Fac<-as.numeric(as.character(data$Fac)) #change to numeric 
# then run model 
gam(Y~s(X, by=Fac)+th,data=data) 

belgelerinde ?s

+0

Lütfen bir çalışma örneği verin. Bonus sorusu: eğer benim modelim daha karmaşıksa ve modelimde başka bir faktör var ise, '' (X, = Fac2) 'deyin. Yukarıda belirtilen tasarımı nasıl ekleyebilirim? Yapabilir miyim (X, by = c (Fac, Fac2)) '? Doktor buna izin vermiyor gibi görünüyor. – yannick

+0

Örneği ekledim. İkinci faktör ile ne elde etmek istediğinize bağlıdır? Bu durumda model nedir? Örneğin, eğer 'X' sadece "Y" ile ilişkiliyse, sadece "Fac == 0" ve "Fac2 == 0" olduğunda yeni değişken yaratabilirsiniz "New_Fac = Fac * Fac1" ve sonra 's (X, by = New_Fac) '. Yardımcı olduysa lütfen cevabı kabul edin. Bana modelini verirsem bunun hakkında düşünebilirim :) – Maju116

+0

Doğru olan cevabınız, burada açık olana ek olarak “Fac2” faktörünün her seviye için uygun hale getirilmesine izin vermez; Fak == 0'. Ben bu konuda bahsetmedim, ama benim uygulamada ihtiyaç duyduğum bir şey var ve bunu açıklığa kavuşturdum. Bu yüzden çok hoş bir cevabınızı kabul edeceğim ama bunun için bir çözüm önerebilirseniz harika olur. İstersen soruyu değiştirebilirim. – yannick

5

Ucuz hile: X'in bir faktörü X = Fac == 1 ve 0 başka bir yerde kullanır. Ben doğru anlamak

library("mgcv") 
library("ggplot2") 


# simulate data 

N <- 1e3 

dat <- data.frame(covariate = runif(N), 
        predictor = runif(N), 
        group = factor(sample(0:1, N, TRUE))) 

dat$outcome <- rnorm(N, 
        1 * dat$covariate + 
        ifelse(dat$group == 1, 
          .5 * dat$predictor + 
          1.5 * sin(dat$predictor * pi), 
          0), .1) 

# some plots 

ggplot(dat, aes(x = predictor, y = outcome, 
       col = group, group = group)) + 
    geom_point() 

ggplot(dat, aes(x = covariate, y = outcome, 
       col = group, group = group)) + 
    geom_point() 

# create auxiliary variable 

dat$aux <- ifelse(dat$group == 1, 
        dat$predictor, 
        0) 

# fit the data 

fit1 <- gam(outcome ~ covariate + s(predictor, by = group), 
      data = dat) 

fit2 <- gam(outcome ~ covariate + s(aux, by = group), 
      data = dat) 

# compare fits 

summary(fit1) 

summary(fit2) 
+0

yılında by seçenek için belgelere bakın) intercept'in uyumu üzerinde bir etkisi olmamalıdır. Ancak, eğer 10 olarak ayarlarsanız, kesişmenin büyük ölçüde değiştiğini göreceksiniz. – yannick

+0

Sure @yannick, bu, ihtiyacınız olan "model.matrix" i oluşturmak için gam işlevini "aldatmak" için sadece bir hiledir. Aksi halde nasıl yapacağından emin değilim. – qenvio

İlgili konular