Линейная регрессия с несколькими зависимыми и независимыми переменными в R - PullRequest
1 голос
/ 04 февраля 2020

Я рассчитываю провести линейную регрессию в R для моделирования влияния 5 независимых переменных на 376 столбцов данных.

У меня большая матрица (541 строка и 402 столбца) с именем 'dd' и я хочу подключить только определенные столбцы из матрицы как IV и DV в регрессии. От dd я хочу 376 указанных c столбцов для формирования моих DV и 5 столбцов для формирования моих IV. Я использовал имена каждого столбца (например, «column_42») в качестве индексов, отдельно для IV и DV:

IVind=paste0('column_',c(4,14,15,24,43)) #index for IV

DVind=paste0('column_',c(10:13, 17:18, 26, 28, 49:54, 58, 60, 1001:1180, 2001:2180)) #index for DV

IV <-(dd[,IVind]) #save independent variables in 'IV'
DV <-(dd[,DVind]) #save independent variables in 'DV'

Я пробовал подключать IV и DV к линейной регрессии, например так:

try <- lm(DV~IV)

, но получили следующую ошибку: Ошибка в [[<-.data.frame (*tmp*, i, значение = c (2113L, 2031L, 1971L,: замена имеет 203040 строк, данные имеют 540

Можно ли как-нибудь обойти эту ошибку? Я понимаю, что это может быть связано с тем, что мои IV и DV были сохранены в отдельных матрицах?

Я пытался индексировать dd непосредственно в функции регрессии:

lm(dd[,DVind]~dd[,IVind])

только для получения той же ошибки.

Любая помощь высоко ценится, спасибо!

1 Ответ

0 голосов
/ 04 февраля 2020

Для многовариантного ответа вам необходимо предоставить матрицу:

dd = data.frame(matrix(rnorm(2180*1000),ncol=2180))
colnames(dd) = paste0("column_",1:ncol(dd))

IVind=paste0('column_',c(4,14,15,24,43)) #index for IV
DVind=paste0('column_',c(10:13, 17:18, 26, 28, 49:54, 58, 60, 1001:1180, 2001:2180))

IV <-as.matrix(dd[,IVind]) #save independent variables in 'IV'
DV <-as.matrix(dd[,DVind]) #save independent variables in 'DV'

fit= lm(IV~DV)

Если вы хотите, чтобы коэффициенты выглядели лучше, мы указываем зависимые переменные слева, используя cbind, разделенные ",". Затем мы подставляем данные только в вашу заинтересованную зависимую / независимую переменную:

LHS = paste("cbind(",paste(IVind,collapse=","),")")
print(LHS)
"cbind( column_4,column_14,column_15,column_24,column_43 )"

FORM = as.formula(paste(LHS,"~."))
print(FORM)
"cbind(column_4, column_14, column_15, column_24, column_43) ~ ."

fit = lm(FORM,data=dd[,c(IVind,DVind)])

head(fit$coefficients)
               column_4    column_14    column_15    column_24
(Intercept)  0.04386386 -0.044541800  0.005439126  0.033074816
column_10   -0.01849133  0.041040752  0.015390150  0.019472339
column_11   -0.05201253 -0.004719325  0.052012943 -0.027946384
column_12   -0.01194646 -0.063251091  0.017792048  0.004709211
column_13    0.15284270 -0.097150447 -0.038294054  0.003509769
column_17   -0.03693076  0.025828749 -0.039618893  0.023351389
               column_43
(Intercept)  0.003076990
column_10   -0.092318249
column_11   -0.049421542
column_12   -0.065078169
column_13   -0.013206731
column_17    0.006969634
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...