Перебор столбцов для анализа различных зависимых переменных

Вот мой фрейм данных (воспроизводимый пример)

   set.seed(42)  
n <- 6
dat <- data.frame(id=rep(1:n, 2), 
                  group= as.factor(rep(LETTERS[1:2], n/2)),
                  VD1 = rnorm(n),
                  VD2 = runif(n*2, min=0, max=100), 
                  VD3 = runif(n*2, min=0, max=100),
                  VD4 = runif(n*2, min=0, max=100),
                  VD5 = runif(n*2, min=0, max=100)) 

Я подгоняю следующую млм для одной зависимой переменной VD1

> mlm_VD1  <- lmer(formula = VD1 ~ group + (1|id)
>                   , data = dat) 

    summary(mlm_VD1)

Я хотел бы автоматизировать анализ всех других зависимых переменных VD2, VD3, VD4, VD5, создав цикл по всем столбцам моего фрейма данных (dat[, 4:ncol(dat)])

Затем я хотел бы сохранить все сводки разных млм (mlm_VD1, mlm_VD2, mlm_VD3, mlm_VD4, mlm_VD5) в файле pdf для чтения вне среды R.

Спасибо!


person Gianluca    schedule 19.03.2021    source источник


Ответы (2)


Добавление к решению, предоставленному akrun..

library(broom.mixed)
library(lme4)
library(purrr)

Индексация столбцов как 3:7

var_names <- names(dat)[3:7]

output <- map_dfr(var_names,
                  function(x){
                    formula_mlm = as.formula(paste0(x,"~ group + (1|id)"));
                    model_fit = lmer(formula_mlm,data=dat) %>% 
                      tidy(.) %>% 
                      dplyr::mutate(variable = x);
                    return(model_fit)
                    
                  })
output %>% 
+   head(.)


   # A tibble: 6 x 7
  effect   group    term            estimate std.error statistic variable
  <chr>    <chr>    <chr>              <dbl>     <dbl>     <dbl> <chr>   
1 fixed    NA       (Intercept)      7.80e-1     0.223      3.50 VD1     
2 fixed    NA       groupB          -7.59e-1     0.315     -2.41 VD1     
3 ran_pars id       sd__(Intercept)  3.74e-1    NA         NA    VD1     
4 ran_pars Residual sd__Observation  2.10e-8    NA         NA    VD1     
5 fixed    NA       (Intercept)      7.91e+1    13.2        5.98 VD2     
6 fixed    NA       groupB          -2.97e+1    18.7       -1.59 VD2
person jsv    schedule 19.03.2021
comment
Еще раз, спасибо! что, если вместо определения вручную c(VD1,VD2,VD3,VD4,VD5) я хотел бы просто указать позиции столбцов, а затем я хочу, чтобы строка заголовка этих столбцов отображалась в переменной столбца вывода ? - person Gianluca; 19.03.2021

Мы можем использовать петлю. Подмножьте имена столбцов, т.е. имена столбцов, которые начинаются с «VD», за которыми следуют некоторые цифры, затем выполните цикл по этим «nm1», создайте formula с paste, примените lmer и получите summary

library(lme4)
nm1 <- grep('^VD\\d+', names(dat), value = TRUE)
out <- lapply(nm1, function(nm)
     summary(lmer(as.formula(paste(nm, '~ group + (1|id)')), data = dat)))

Если это должно быть по положению. Затем используйте

i1 <- 3:7
out <- lapply(i1, function(i) 
        summary(lmer(as.formula(paste(names(dat)[i],
           '~ group + (1|id)')), data = dat)))
person akrun    schedule 19.03.2021
comment
Спасибо, а как мне индексировать столбцы не по имени, а по положению в фрейме данных для nm1 - person Gianluca; 19.03.2021
comment
@Gianluca обновил пост - person akrun; 19.03.2021
comment
Большое спасибо, это работает. Как я могу сохранить сводную таблицу различных млм в формате PDF - person Gianluca; 19.03.2021
comment
@Gianluca Вы имели в виду сводную таблицу в напечатанном виде или в виде data.frame? - person akrun; 19.03.2021
comment
сводная таблица в распечатанном виде - person Gianluca; 19.03.2021
comment
@ Джанлука похоже, что вы получили еще один ответ как принятый. Так что наверное решаемо - person akrun; 19.03.2021