Для линейной регрессии:
> 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