2015-07-13 2 views
1

Мне нужно выполнить множественную линейную регрессию для многих векторов зависимых переменных на одной и той же матрице независимых переменных.R Множественные коэффициенты регрессии и извлечения

Например, я хочу создать 3 модели таким образом, что:

lm(d ~ a + b + c) 
lm(e ~ a + b + c) 
lm(f ~ a + b + c) 

из следующей матрицы (а, Ь, с независимыми переменными и D, E, F являются зависимыми переменными)

 [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
[1,] a1  b1  c1  d1  e1  f1 
[2,] a2  b2  c2  d2  e2  f2 
[3,] a3  b3  c3  d3  e3  f3 

Затем я хочу сохранить коэффициенты из регрессии в другой матрице (я уменьшил количество столбцов и векторов в моем примере для удобства объяснения).

+1

Пожалуйста, покажите пример, который [воспроизводимая] (http://stackoverflow.com/questions/5963269/how-to-make-a -Великолепный-р-воспроизводимый-пример). Кроме того, проверьте [здесь] (http://stackoverflow.com/questions/31377737/repeat-regression-with-varying-dependent-variable) – akrun

+0

Извините, я впервые пользователь. Ссылка похоже на то, что я пытаюсь сделать. Спасибо –

+0

Как выглядит эта другая матрица? Для зависимых переменных нет коэффициентов. –

ответ

1

Вот метод, который не очень общий, но будет работать, если вы замените свои собственные зависимые имена переменных в depvar и, конечно же, независимые переменные, общие для всех моделей во внутреннем вызове lm(), и, конечно же, имя набора данных. Здесь я показал на mtcars, встроенный в набор данных поставляется с R.

depvar <- c("mpg", "disp", "qsec") 
regresults <- lapply(depvar, function(dv) { 
    tmplm <- lm(get(dv) ~ cyl + hp + wt, data = mtcars) 
    coef(tmplm) 
}) 
# returns a list, where each element is a vector of coefficients 
# do.call(rbind,) will paste them together 
allresults <- data.frame(depvar = depvar, 
         do.call(rbind, regresults)) 
# tidy up name of intercept variable 
names(allresults)[2] <- "intercept" 
allresults 
## depvar intercept  cyl   hp  wt 
## 1 mpg 38.75179 -0.9416168 -0.01803810 -3.166973 
## 2 disp -179.04186 30.3212049 0.21555502 59.222023 
## 3 qsec 19.76879 -0.5825700 -0.01881199 1.381334 

Редактировать на основе предложения по Wise: @ Mike

Если вы хотите только числовой массив данных, но хотите сохранить идентификатор, вы можете добавить его в качестве row.name, как это:

allresults <- data.frame(do.call(rbind, regresults), 
         row.names = depvar) 
# tidy up name of intercept variable 
names(allresults)[1] <- "intercept" 
allresults 
##  intercept  cyl   hp  wt 
## mpg 38.75179 -0.9416168 -0.01803810 -3.166973 
## disp -179.04186 30.3212049 0.21555502 59.222023 
## qsec 19.76879 -0.5825700 -0.01881199 1.381334 
+1

Мне кажется, это то, что он имел в виду. Я думаю, что вопрос должен быть отредактирован и удалить зависимые столбцы переменных для этого ответа, чтобы соответствовать вопросу. –

+1

Спасибо, что вы правы - я добавил альтернативу, которая возвращает data.frame, состоящий только из коэффициентов. –

Смежные вопросы