如何解决R - 具有不同数据帧中变量的线性线性回归
我有 4 个大小相同的大矩阵 A,B,C 和 D 。每个矩阵有 n 个样本(列)和 n 个观测值(行)。
A <- structure(list(S1 = c(0L,0L,1L,1L),S2 = c(0L,0L),S3 = c(0L,1L)),class = "data.frame",row.names = c("Ob1","Ob2","Ob3","Ob4"))
# S1 S2 S3
# Ob1 0 0 0
# Ob2 0 1 0
# Ob3 1 0 0
# Ob4 1 0 1
B <- structure(list(S1 = c(0L,8L,"Ob4"))
# S1 S2 S3
# Ob1 0 0 0
# Ob2 1 8 0
# Ob3 1 0 0
# Ob4 1 0 1
C <- structure(list(S1 = c(0L,4L,S2 = c(2L,2L),"Ob4"))
# S1 S2 S3
# Ob1 0 2 0
# Ob2 0 1 0
# Ob3 4 0 0
# Ob4 1 2 1
D <- structure(list(S1 = c(0L,S2 = c(8L,5L,"Ob4"))
# S1 S2 S3
# Ob1 0 8 0
# Ob2 0 1 0
# Ob3 4 5 0
# Ob4 1 0 1
每个矩阵包含一个不同的变量。我想对每个样本和矩阵的观察执行 4 个变量的线性回归。我不想要任何样本和观察值组合之间的线性回归,只是矩阵 A 中第 1 列和第 1 行形式的成对回归将与矩阵 B、C 和 D 中的第 1 列和第 1 行拟合;第 2 列和第 2 行与第 2 列和第 2 行,依此类推。
lm 模型:
lm(A ~ B * C + D)
我想要:
lm(A$S1_Obs1 ~ B$S1_Obs1 * C$S1_Obs1 + D$S1_Obs1)
lm(A$S1_Obs2 ~ B$S1_Obs2 * C$S1_Obs2 + D$S1_Obs2)
lm(A$S1_Obs3 ~ B$S1_Obs3 * C$S1_Obs3 + D$S1_Obs3)
lm(A$S2_Obs1 ~ B$S2_Obs1 * C$S2_Obs1 + D$S2_Obs1)
lm(A$S2_Obs2 ~ B$S2_Obs2 * C$S2_Obs2 + D$S2_Obs2)
lm(A$S2_Obs3 ~ B$S2_Obs3 * C$S2_Obs3 + D$S2_Obs3)
...
感谢任何帮助。
解决方法
我们可以使用 asplit
按行拆分,然后通过循环 Map
中的每个拆分元素来构建线性模型
out <- Map(function(a,b,c,d) lm(a ~ b * c + d),asplit(A,1),asplit(B,asplit(C,asplit(D,1))
,
这里是一种使用 purrr
包的方法,它也分配名称:
library(purrr)
seq_along(A) %>%
map(~ lm(A[.] ~ B[.] * C[.] + D[.])) %>%
set_names(map(seq_along(.),~ arrayInd(.x,dim(A)) %>%
paste(collapse = "_")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。