R中具有多个因变量和自变量的线性回归

时间:2020-02-04 12:08:04

标签: r indexing regression lm

我希望在R中进行线性回归,以模拟5个独立变量对376列数据的影响。

我有一个名为'dd'的大型矩阵(541行和402列),我只想在回归中以IV和DV的形式插入矩阵中的某些列。从dd开始,我希望有376个特定列构成我的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 :(得分:0)

对于多变量响应,您需要提供一个矩阵:

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