使用R中两个矩阵的列执行线性回归

时间:2019-01-21 20:06:40

标签: r matrix lm

我有两个尺寸相同的大型矩阵,例如:

#dummy matrices
A <- matrix(c(1:3288),nrow=12) 
B <- matrix(c(3289:6576),nrow=12)

对于每列,我想在两个矩阵(A和B)之间进行线性回归,如果可能的话,我想将lm的输出输入数据帧,例如对于每列的回归,我想知道lm r ^ 2,斜率,截距等。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

假设您将适合任意两个列组合之间的回归,那么这可能是一个解决方案。请记住,根据最终想要在结果data.frame中使用的内容,代码将更改。

A <- matrix(c(1:3288),nrow=12) 
B <- matrix(c(3289:6576),nrow=12)


library(broom)
library(dplyr)

results <- NULL

for (i in 1:ncol(A)){
  for (j in 1:ncol(B)){
    model_<-lm(A[,i]~B[,j])

    results<-bind_rows(results,
                       bind_cols(columnx = i, 
                                 columny = j,
                                 glance(model_),
                                 intercept=model_$coefficients[1],
                                 slope=model_$coefficients[2]
                       )
    )
  }
}

如果只需要成对回归,则将A中的第1列与B中的第1列,2和2等匹配,则可以使用purr包中的map编写更优雅的解决方案。希望这会有所帮助。

编辑:仅将A中的1与B中的1进行拟合

library(purrr)
library(dplyr)
library(broom)


A<-data.frame(A)
B<-data.frame(B)

results <- map2_df(.x = A,
     .y = B, ~ {

       model_<-lm(.y ~ .x)
       bind_cols(glance(model_),
                 intercept=model_$coefficients[1],
                 slope=model_$coefficients[2]
       )
     })

这是the documentation。解释map2_df的工作原理非常清楚。基本上,它同时循环执行两个列表,执行一个功能并返回一个data.frame。