Как я могу изменить этот код dplyr для множественной линейной регрессии путем комбинации всех переменных в R - PullRequest
0 голосов
/ 11 мая 2019

Допустим, у меня есть следующие данные

ind1 <- rnorm(99)
ind2 <- rnorm(99)
ind3 <- rnorm(99)
ind4 <- rnorm(99)
ind5 <- rnorm(99)
dep <- rnorm(99, mean=ind1)
group <- rep(c("A", "B", "C"), each=33)
df <- data.frame(dep,group, ind1, ind2, ind3, ind4, ind5)

следующий код вычисляет множественную линейную регрессию между зависимой переменной и 2 независимыми переменными по группам, что именно то, что я хочу сделать. Но я хочу регрессировать dep переменную против всех пар комбинации независимых переменных сразу. Итак, как я могу объединить другие модели в этом коде?

df %>% 
  nest(-group) %>% 
  mutate(fit = map(data, ~ lm(dep ~ ind1 + ind2, data = .)),
         results1 = map(fit, glance),
         results2 = map(fit, tidy)) %>% 
  unnest(results1) %>% 
  unnest(results2) %>% 
  select(group, term, estimate, r.squared, p.value, AIC) %>% 
  mutate(estimate = exp(estimate)) 

Заранее спасибо!

1 Ответ

2 голосов
/ 11 мая 2019

Не полный аккуратный ответ. Рассмотрите возможность создания всех возможных комбинаций линейных формул с rapply после первоначальной сборки с lapply и combn, затем перейдите к методу аккуратности:

indvar_list <- lapply(1:5, function(x) 
                 combn(paste0("ind", 1:5), x, , simplify = FALSE))

formulas_list <- rapply(indvar_list, function(x)
                   as.formula(paste("dep ~", paste(x, collapse="+"))))

run_model <- function(f) {    
    df %>% 
      nest(-group) %>% 
      mutate(fit = map(data, ~ lm(f, data = .)),
             results1 = map(fit, glance),
             results2 = map(fit, tidy)) %>% 
      unnest(results1) %>% 
      unnest(results2) %>% 
      select(group, term, estimate, r.squared, p.value, AIC) %>% 
      mutate(estimate = exp(estimate))
}

tibble_list <- lapply(formulas_list, run_model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...