R запускать регрессии последовательно

#r #data.table #sapply #mapply

#r #data.table #sapply #Отображение

Вопрос:

  set.seed(1)
   data=data.frame(
    
    student=1:5000,
    alfa =runif(5000), 
    bravo =runif(5000), 
    charlie =runif(5000), 
    delta =runif(5000), 
    echo =runif(5000), 
    foxtrot =runif(5000), 
    golf =runif(5000), 
    hotel =runif(5000), 
    india =runif(5000), 
    juliett =runif(5000), 
    kilo =runif(5000), 
    lima =runif(5000), 
    mike =runif(5000), 
    november =runif(5000), 
    oscar =runif(5000), 
    papa =runif(5000), 
    GROUP = sample(0:1, r=T))
  

##########################

 COVS1 = c(golf, hotel, india)
COVS2 = c(juliett, kilo)
COVS3 = c(lima, mike, november, oscar, papa)


## OVERALL
lm(alpha ~ delta    golf   hotel   india, data = data)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo, data = data)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(alpha ~ echo    golf   hotel   india, data = data)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo, data = data)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(alpha ~ foxtrot    golf   hotel   india, data = data)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo, data = data)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(bravo ~ delta    golf   hotel   india, data = data)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo, data = data)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(bravo ~ echo    golf   hotel   india, data = data)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo, data = data)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(bravo ~ foxtrot    golf   hotel   india, data = data)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo, data = data)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(charlie ~ delta    golf   hotel   india, data = data)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo, data = data)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(charlie ~ echo    golf   hotel   india, data = data)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo, data = data)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)
lm(charlie ~ foxtrot    golf   hotel   india, data = data)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo, data = data)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data = data)

## GROUP == 0
lm(alpha ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 0)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 0)

## GROUP == 1
lm(alpha ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(alpha ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(bravo ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ delta    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ echo    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot    golf   hotel   india, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo, data ~ subset(data, GROUP == 1)
lm(charlie ~ foxtrot    golf   hotel   india   juliett   kilo   lima   mike   november   oscar   papa, data ~ subset(data, GROUP == 1)
  

Мне интересно, как можно запустить все эти регрессии, используя какую-то функцию?
В основном регрессии регрессируют «альфа» на COVS1, затем «альфа» на COVS1 и COVS2, а затем «альфа» на COVS1 и COVS2 и COVS3. Это делается для всех данных, а затем отдельно для GROUP == 0 и GROUP == 1. Повторяется тот же процесс, когда вы заменяете ‘alpha’ на ‘bravo’, а затем ‘charlie’, поэтому я просто хочу запустить все это, затем сохранить оценки модели и коэффициентов и стандартные ошибки для всех выходных данных..

Комментарии:

1. @akrun да, это переменные ответа

Ответ №1:

Мы могли бы создать цикл для этого

 COVS1 <- c('golf', 'hotel', 'india')
COVS2 <- c('juliett', 'kilo')
COVS3 <- c('lima', 'mike', 'november', 'oscar', 'papa')
    
COVS <- list(COVS1, COVS2, COVS3)
    
df1 <- expand.grid(resp = c('alfa', 'bravo', 'charlie'),
     pred = c('delta', 'echo', 'foxtrot'), stringsAsFactors = FALSE)
    
df1 <- df1[order(df1$resp),]



library(broom)
lst_mod <-  lapply(seq_along(COVS), function(i) 
      lapply(seq_along(COVS), function(j) {

      fmla <- reformulate(c(df1$pred[i], unlist(COVS[seq_len(j)])), 
            response = df1$resp[i])
      tidy(lm(fmla, data = data))
 }))
  

Или, если нам нужен один набор данных

 library(dplyr)
library(purrr)
out_dat <- lapply(seq_along(COVS), function(i) 
  map_dfr(seq_along(COVS), ~ {

  fmla <- reformulate(c(df1$pred[i], unlist(COVS[seq_len(.x)])), 
        response = df1$resp[i])
  tidy(lm(fmla, data = data)) %>% 
        mutate(response_variable = df1$resp[i], formula = list(fmla))
    })) %>%
       bind_rows
  

Если нам нужно применить lm к subset данным, подмножество данных

 dat0 <- subset(data, GROUP == 0)
dat1 <- subset(data, GROUP == 1)
  

и измените data in lm на ‘dat0’, ‘dat1’

Комментарии:

1. я думаю, что это на самом деле идеально, спасибо вам!!! теперь как насчет извлечения coef и стандартной ошибки в data.table, чтобы я мог видеть, из какой модели и коэффициента она взята???

2. @bvowe вы можете обернуть tidy lm объект (из broom ), чтобы получить его в виде таблицы. Обновлено

3. @bvowe конечно, дайте мне знать, когда будете в Сети

4. @bvowe извините, сейчас я немного занят. будет говорить через два часа

5. @bvowe Привет, ты здесь