Как выбрать два фактора и выполнить регрессию - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть такой набор данных:

library(tidyverse)
set.seed(123)
Data <- data.frame(
        X = sample(c("A", "B", "C"), 20, replace = TRUE),
    Y = sample(1:20)
)
Data%>%
    arrange(X)

Я бы хотел запустить серию регрессий таким образом, чтобы DV было Y, но независимые переменные для каждой регрессии - это факторы, взятые по два за раз. Например, A & B, A & C, B & A, B & C Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 17 апреля 2020

Для линейной регрессии:

> combos <- as.data.frame(x = combn(x = c("A", "B", "C"), m = 2))
names(combos) <- sapply(
  X = 1:3, 
  FUN = function(x){paste(combos[,x], collapse = "")}
)

> fit.list <- list()
> for (combo in names(combos)){
  fit.list[[combo]] <- subset(Data, X %in% combos[,combo]) %>% 
    lm(formula = .$Y ~ .$X, data = .)
}

> fit.list
$AB

Call:
lm(formula = .$Y ~ .$X, data = .)

Coefficients:
(Intercept)         .$XB  
       10.4          3.6  


$AC

Call:
lm(formula = .$Y ~ .$X, data = .)

Coefficients:
(Intercept)         .$XC  
       10.4         -2.9  


$BC

Call:
lm(formula = .$Y ~ .$X, data = .)

Coefficients:
(Intercept)         .$XC  
       14.0         -6.5 

РЕДАКТИРОВАТЬ Для добавления ковариаты (например, Z), один из способов - добавить новый столбец в data.frame, затем добавить Имя столбца для модели:

> set.seed(123)
> Data <- data.frame(
  X = sample(c("A", "B", "C"), 20, replace = TRUE),
  Y = sample(1:20),
  Z = sample(1:20)
)

> fit.list <- list()
> for (combo in names(combos)){
  fit.list[[combo]] <- subset(Data, X %in% combos[,combo]) %>% 
    lm(formula = .$Y ~ .$X + .$Z, data = .)
}
> fit.list
$AB

Call:
lm(formula = .$Y ~ .$X + .$Z, data = .)

Coefficients:
(Intercept)         .$XB          .$Z  
     3.6697       3.1921       0.5099  


$AC

Call:
lm(formula = .$Y ~ .$X + .$Z, data = .)

Coefficients:
(Intercept)         .$XC          .$Z  
     7.9306      -1.5063       0.1871  


$BC

Call:
lm(formula = .$Y ~ .$X + .$Z, data = .)

Coefficients:
(Intercept)         .$XC          .$Z  
   14.89888     -7.02970     -0.06421 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...