【问题标题】:Linear regression with several dependent and independent variables in RR中具有多个因变量和自变量的线性回归
【发布时间】:2020-05-20 06:20:33
【问题描述】:

我希望在 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)

但收到以下错误:[[&lt;-.data.frame(*tmp*, i, value = c(2113L, 2031L, 1971L, : 替换有203040行,数据有540

无论如何我可以解决这个错误吗?我知道这可能是因为我的 IV 和 DV 保存在不同的矩阵中?

我尝试在回归函数中直接索引 dd:

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

只会收到同样的错误。

非常感谢任何帮助,谢谢!

【问题讨论】:

  • 您的任何值是否嵌套?你能做 str(dd[,DVind]) 吗?
  • 好像没有? str(dd[,DVind]) 的输出是 chr [1:541, 1:376] NA "10443.250768" "10433.625258" ... - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:376] "NZMean_10" "NZMean_11" "NZMean_12" "NZMean_13" ...

标签: r indexing regression lm


【解决方案1】:

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

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

【讨论】:

  • 我已经尝试使用 as.matrix 将 IV 和 DV 指定为矩阵,但仍然收到错误。原来我的问题是 R 一直将我的数据集中的值作为字符读取,即使我一直尝试使用 as.matrix。反过来,我指定的 IV 和 DV i 也被保留为字符。最后我使用: data.matrix(data.frame(IV, stringsAsFactors = FALSE)) 将我的变量变成数字,我的问题就解决了。感谢您的帮助,您的代码帮助我了解了我需要的数据格式。
  • 好的,我明白了,是的,下次检查列。总是有助于做一些模拟:)
猜你喜欢
  • 2018-07-13
  • 2023-03-23
  • 2020-03-06
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2021-11-28
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多