Комбинации переменных, которые производят наименьшее количество в функции R - PullRequest
1 голос
/ 07 ноября 2019

Мне интересно узнать, какая комбинация переменных (binge followup sreport age) в моей модели ниже дает наименьшую статистику I2 в порядке ранжирования (от наименьшего к наибольшему). I2 для каждой модели получается следующим образом:

I2 <- function(x)as.double(x$mod_info$I.2).

Есть ли способ автоматизировать это в R с помощью цикла по формулам?

Пример: Сначала подгонка effectsize ~ binge, затем effectsize ~ binge + followup, затем ...

Примечание: предположим, что имена всех переменных хранятся какитак: var.names = c("binge", "followup", "sreport", "age").

library(robumeta)

fit <- robu(effectsize ~ binge + followup + sreport + age, data = get(data(hierdat)), 
            study = studyid, var = var)

# Get the `I2` for the above model:

I2(fit) # gives 63.993

# Note: I think `lapply(seq_along(var.names), function(i)combn(var.names, i))` can 
                        # give us each combination that should be used in the formula.

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете создать все комбинации ваших объясняющих переменных, как вы предлагаете, с небольшим изменением (чтобы исключить нерекурсивный список), а затем преобразовать в формулы:

combos <- unlist(lapply(seq_along(var.names), 
                        function(i) combn(var.names, i, simplify = FALSE)),
                 recursive = FALSE)

formulae <- lapply(combos, 
                   function(x) paste('effectsize ~', paste(x, collapse = '+')))

Затем применить каждую формулу к вашим данным:

fit <- lapply(formulae, function(f) 
                         robu(as.formula(f), data = get(data(hierdat))))

Затем вы можете получить свой I2 для каждого члена подгонки, а затем which.min () даст вам тот, у которого наименьший I2.

...