【问题标题】:Using R to do a regression with multiple dependent and multiple independent variables使用 R 对多个因变量和多个自变量进行回归
【发布时间】:2013-08-05 20:11:58
【问题描述】:

我正在尝试使用多个因变量和多个自变量进行回归。基本上我在整个美国的县级都有House Prices,这是我的IV。然后我有几个县级的其他变量(GDPconstruction employment),这些构成了我的因变量。我想知道是否有一种有效的方法可以同时进行所有这些回归。我想得到:

lm(IV1 ~ DV11 + DV21)
lm(IV2 ~ DV12 + DV22)

我想为每个自变量和每个因变量执行此操作。

编辑: OP 添加此信息以响应我的回答,现已删除,这误解了问题。

我认为我没有很好地解释这个问题,我很抱歉。每个因变量都有 2 个与之关联的自变量,它们是唯一的。因此,如果我有 500 个因变量,我就有 500 个唯一的自变量 1 和 500 个唯一的自变量 2。

好的,我会再试一次,如果我不能再次解释自己,我可能会放弃(哈哈)。我不知道你所说的来自 R 的 mtcars 是什么意思,尽管 [这是参考 Metrics 的答案],所以让我试试这种方式。我将有 3 个数据向量,每个向量大约 500 行。我正在尝试从每行数据中构建回归。假设向量 1 是我的因变量(我试图预测的变量),向量 2 和 3 构成了我的自变量。因此,第一个回归将包含每个向量的第 1 行值,第二个回归将包含每个向量的第 2 行值,依此类推。再次感谢大家。

【问题讨论】:

  • “因变量”是指您要预测的数字,“自变量”是您想要用来进行预测的数字吗?请注意,在 R 的公式语法中,因变量在波浪号的左侧,而 IV 在 RHS 上(lm(DV ~ IV))。
  • PLS regression 是一种选择。
  • 对不起,我确实说反了。我切换了我的 IV 和 DV。我还标记了我的问题以将其移至堆栈溢出,因为我主要研究如何在 R 中实现它,因为我理解它背后的概念。谢谢你。
  • 寻找比单独回归更有效的方法的原因是什么?是的,效率有所损失,但无论如何解决方案都非常迅速,似乎收效甚微。
  • 因为我每个季度都在尝试为 500 多个县执行此操作,如果我必须单独运行其中的每一个,该项目将变得不可行,因为它需要时间。我试图看看我是否可以基本上导入 1-2 个大型数据矩阵,并自动进行回归,但我不确定这是否可能。

标签: r


【解决方案1】:

我假设您有数据框作为 mydata。

mydata<-mtcars #mtcars is the data in R

dep<-c("mpg~","cyl~","disp~") # list of unique dependent variables with ~ 
indep1<-c("hp","drat","wt")  # list of first unique independent variables 
indep2<-c("qsec","vs","am") # list of second unique independent variables 
> myvar<-cbind(dep,indep1,indep2) # matrix of variables
> myvar
     dep     indep1 indep2
[1,] "mpg~"  "hp"   "qsec"
[2,] "cyl~"  "drat" "vs"  
[3,] "disp~" "wt"   "am" 



for (i in 1:dim(myvar)[1]){
print(paste("This is", i, "regression", "with dependent var",gsub("~","",myvar[i,1])))
k[[i]]<-lm(as.formula(paste(myvar[i,1],paste(myvar[i,2:3],collapse="+"))),mydata)
print(k[[i]]
}



 [1] "This is 1 regression with dependent var mpg"

Call:
lm(formula = as.formula(paste(myvar[i, 1], paste(myvar[i, 2:3], 
    collapse = "+"))), data = mydata)

Coefficients:
(Intercept)           hp         qsec  
   48.32371     -0.08459     -0.88658  

[1] "This is 2 regression with dependent var cyl"

Call:
lm(formula = as.formula(paste(myvar[i, 1], paste(myvar[i, 2:3], 
    collapse = "+"))), data = mydata)

Coefficients:
(Intercept)         drat           vs  
     12.265       -1.421       -2.209  

[1] "This is 3 regression with dependent var disp"

Call:
lm(formula = as.formula(paste(myvar[i, 1], paste(myvar[i, 2:3], 
    collapse = "+"))), data = mydata)

Coefficients:
(Intercept)           wt           am  
    -148.59       116.47        11.31  

注意:您可以对大量变量使用相同的过程。

替代方法:

受到哈德利的回答here的启发,我使用函数Map来解决上述问题:

dep<-list("mpg~","cyl~","disp~") # list of unique dependent variables with ~ 
indep1<-list("hp","drat","wt")  # list of first unique independent variables 
indep2<-list("qsec","vs","am") # list of second unique independent variables
Map(function(x,y,z) lm(as.formula(paste(x,paste(list(y,z),collapse="+"))),data=mtcars),dep,indep1,indep2)
[[1]]

Call:
lm(formula = as.formula(paste(x, paste(list(y, z), collapse = "+"))), 
    data = mtcars)

Coefficients:
(Intercept)           hp         qsec  
   48.32371     -0.08459     -0.88658  


[[2]]

Call:
lm(formula = as.formula(paste(x, paste(list(y, z), collapse = "+"))), 
    data = mtcars)

Coefficients:
(Intercept)         drat           vs  
     12.265       -1.421       -2.209  


[[3]]

Call:
lm(formula = as.formula(paste(x, paste(list(y, z), collapse = "+"))), 
    data = mtcars)

Coefficients:
(Intercept)           wt           am  
    -148.59       116.47        11.31  

【讨论】:

  • @user2355903: mtcars 是 R 内置的示例数据集。您应该能够自己运行此代码来尝试一下,看看它是否是您需要的。根据您的描述(尽管 SeñorO 的问题确实需要澄清),将公式粘贴在一起并在循环中一起运行它们(正如 Metrics 建议的那样)可能是要走的路。
  • 我不明白在这些循环方法中结果之间的相关性在哪里考虑
猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2013-11-14
  • 2020-03-06
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多