2015-12-07 3 views
5

Я поместил Обобщенную модель добавок с использованием gam из пакета mgcv. У меня есть таблица данных, содержащая мою зависимую переменную Y, независимую переменную X, другие независимые переменные Oth и двухуровневый коэффициент Fac. Я хотел бы, чтобы соответствовать следующей моделиR: GAM с поправкой на подмножество данных

Y ~ s(X) + Oth

, но с дополнительным ограничением, что s(X) термин годен лишь на одном из двух уровней фактора, скажем Fac==1. Остальные условия Oth должны соответствовать всем данным.

Я попытался исследовать s(X,by=Fac), но это уклоняется от соответствия Oth. Другими словами, я хотел бы выразить убеждение, что X относится к Y только если Fac==1, в противном случае нет смысла модели X.

ответ

1

Если я правильно понимаю, что вы думаете о какой-то модели с взаимодействием, как это:

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

Если вы хотите, чтобы «выразить уверенность в том, что X относится к Y только если Fac==1» Дон 't обрабатывают Fac как factor, но как переменную numeric. В этом случае вы получите взаимодействие numeric и только один набор coefficients (когда это factor там, где два). Этот тип модели - varying coefficient model.

# 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) 

Смотрите документацию для by опции в документации ?s

+0

Просьба привести рабочий пример. Бонусный вопрос: что, если моя модель более сложная, и у меня уже есть другой фактор в моей модели, скажем 's (X, by = Fac2)'. Как я могу включить вышеупомянутый дизайн? Могу ли я делать 's (X, by = c (Fac, Fac2))'? Док, похоже, не допускает этого. – yannick

+0

Я добавляю пример. Со вторым фактором зависит то, чего вы хотите достичь? Какова модель в этом случае? Например, если 'X' относится к' Y' только тогда, когда 'Fac == 0' и' Fac2 == 0', вы можете создать новую переменную 'New_Fac = Fac * Fac1', а затем использовать' s (X, by = New_Fac) '. Пожалуйста, примите ответ, если это было полезно. если вы дадите мне спецификацию вашей модели, я могу подумать об этом :) – Maju116

+0

Ваш ответ, который является правильным, не позволяет сделать соответствие на уровень фактора 'Fac2' в дополнение к тому, что здесь показано, а именно исключить случай' Фак == 0 '. Я не упоминал об этом в вопросе, но это то, что мне нужно в моем приложении, и я сохранил его для ясности. Поэтому я приму свой приветственный ответ, но было бы здорово, если бы вы могли предложить решение для этого. Я также могу изменить вопрос, если вы предпочитаете. – yannick

5

Дешевый трюк: используйте вспомогательную переменную, которая равна X, если Fac == 1 и 0 в другом месте.

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

Если бы это был правильный ответ, значение вы даете вспомогательной переменной в случае, когда предсказатель не должна быть смоделирована (здесь 0) не должны влиять на подгонку перехвата. Однако, если вы установите его, скажем, 10, вы увидите, что перехват сильно меняется. – yannick

+0

Несомненно, @yannick, это всего лишь трюк, чтобы «обмануть» функцию gam, чтобы создать «model.matrix» по мере необходимости. Я не уверен, как это сделать в противном случае. – qenvio

Смежные вопросы