我有两个尺寸相同的大型矩阵,例如:
#dummy matrices
A <- matrix(c(1:3288),nrow=12)
B <- matrix(c(3289:6576),nrow=12)
对于每列,我想在两个矩阵(A和B)之间进行线性回归,如果可能的话,我想将lm的输出输入数据帧,例如对于每列的回归,我想知道lm r ^ 2,斜率,截距等。
任何帮助表示赞赏。
答案 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。