R - Подмножество в драге (MuMin) - включает взаимодействие только с b, если также взаимодействие с

Я новичок в R и здесь впервые, поэтому прости меня, если я не совсем правильно сформулировал это…

Я хочу использовать dredge::MuMIn для изучения моих данных. Я только хочу включить взаимодействие между I(GISalt^2) и одна из других переменных среды, если есть также взаимодействие между переменной и GISalt,

например, я хотел бы сохранить:

(GISalt * Forest) AND (I(GISalt^2) * Forest)
mod1 <- glm(MLE2017 ~ MLE200405 + (GISalt * Forest) + Scrub + I(GISalt^2) * Forest)

а также

(GISalt * Forest) but NOT I(GISalt^2) * Forest)
mod2 <- glm(MLE2017 ~ MLE200405 + (GISalt * Forest) + Scrub)

и исключить:

I (GISalt ^ 2) * Forest), но НЕ GISalt * Forest) mod3 <- glm (MLE2017 ~ MLE200405 + Скраб + I (GISalt ^ 2) * Forest)

глобальная модель, содержащая все переменные для dredge()

globmod <- glm(MLE2017 ~ MLE200405 + GISalt * Forest + GISalt * Scrub 
    + GISalt * Meadow + GISalt * RiverLgthm + GISalt * DailySunHrs  + 
    I(GISalt^2) * Forest + I(GISalt^2) * Scrub + I(GISalt^2) * Meadow +
    I(GISalt^2) * RiverLgthm + I(GISalt^2) * DailySunHrs, 
    data = GLMdata, family = x.quasipoisson(link = "log"))

Спасибо заранее

1 ответ

Вам нужно выражение формы dc(I(A^2):B, A:B) или, более явно !{I(A^2):B} || {A:B}, т. е. "либо нет A ^ 2 * B, либо A * B", либо (обратите внимание, что A*B в формуле R является сокращением для A+B+A:B, где A:B фактический термин взаимодействия). Там нет готового пути в dredge расширить B до "любой другой переменной", но вы можете сгенерировать подходящее выражение для списка терминов.

Если общее выражение !{I(A^2):VARIABLE} || {A:VARIABLE}, ты можешь использовать substitute ну, замени имя VARIABLE с фактическим именем переменной.

substitute((!{I(A^2):VARIABLE} || {A:VARIABLE}), list(VARIABLE = as.name("B")))

доходность !{I(A^2):B} || {A:B}, Создайте такое выражение для каждой из "других переменных", используя && оператор. Оборачивая все это в функцию:

makeRule <- function(...) {
    exprList <- lapply(sys.call()[-1], function(x) substitute((! {I(A^2):VAR} || {A:VAR}), list(VAR = x)))
    rval <- exprList[[1]]
    for(x in exprList[-1]) rval <- call("&&", rval, x)
    rval
}

затем:

 subsetExpr <- makeRule(B,C,D,E)

 dredge(model, subset = subsetExpr)
Другие вопросы по тегам