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

Performing linear regressions using columns of two matrices in R

我有两个维度相同的大矩阵,例如:

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

对于每一列,我想 运行 两个矩阵(A 和 B)之间的线性回归,如果可能的话,我想将 lm 的输出放入数据框,例如对于每一列的回归,我想知道 lm r^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 a 等等

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]
       )
     })

这是咕噜声documentation。解释 map2_df 是如何工作的非常清楚。它基本上同时在两个列表上循环执行一个函数并返回 data.frame.