Запуск нескольких регрессий с изменением переменной результата в R - PullRequest
0 голосов
/ 10 октября 2019

У меня есть фрейм данных (df), который выглядит следующим образом:

condition  dv1  dv2  dv3
1          2    4    3
2          5    7    4
3          7    1    2

Чтобы запустить несколько регрессий одновременно, я использовал такой код:

dfdv <- df[,2:4]  
output <- lm(as.matrix(dfdv) ~ condition, data = df)
summary(output)

Thisдает мне все регрессии состояния dv ~ для dv1, dv2 и dv3. Вот те регрессии, которые приведены в выходных данных:

dv1 ~ condition
dv2 ~ condition
dv3 ~ condition

Однако теперь я хотел бы контролировать различные условия регрессии. В частности, я хотел бы выяснить способ эффективного выполнения следующих регрессий.

dv1 ~ condition + dv1
dv1 ~ condition + dv2
dv1 ~ condition + dv3

Я попробовал следующее, используя принцип, аналогичный тому, что работал выше, и он не работал.

dfdv <- df[,2:4]  
output2 <- lm(dv1 ~ condition + as.matrix(dfdv), data = df)
summary(output2)

Это дало мне одну регрессию, используя все dv в этой одной регрессии, в отличие от регрессий, которые я хотел. Вот что он мне дал:

dv1 ~ condition + dv1 + dv2 + dv3

Кто-нибудь знает, как я могу выполнить этот регрессионный анализ, используя простой код? У меня есть несколько больше в моем фактическом наборе данных, чем я включаю в этом примере.

1 Ответ

0 голосов
/ 10 октября 2019

Мы можем использовать lapply для этого. Переберите имена столбцов, которые являются 'dv', создайте формулу с reformulate, указав ответ и зависимую переменную, и примените lm

v1 <- grep('^dv\\d+$", names(df), value = TRUE)
lapply(v1, function(dv) lm(reformulate(c(dv, "condition"),
           dv), data = df))

Или создайте формулу с paste

lapply(v1, function(dv) lm(paste0(dv, " ~ ", "condition + ", dv), data = df))
...