如何生成像 cor() 这样的线性回归矩阵
how to generate a linear regression matrix like cor()
我有一个如下所示的数据框:
a1 a2 a3 a4
1 3 3 5 5
2 4 3 5 5
3 5 4 6 5
4 6 5 7 3
我想对数据框中的每两列进行线性回归,并将intercept
设置为0。
换句话说,我想得到lm(a1~a2+0), lm(a1~a3+0), lm(a1~a4+0), lm(a2~a1+0), lm(a2~a3+0)...
的系数
在cor()
中,如果我输入一个数据帧,我会得到一个矩阵,例如下面,
a1 a2 a3 a4
a1 1.0000000 0.9467293 0.8944272 0.2045983
a2 0.9467293 1.0000000 0.9622504 0.4989222
a3 0.8944272 0.9622504 1.0000000 0.4574957
a4 0.2045983 0.4989222 0.4574957 1.0000000
在lm()
中有没有办法得到同种矩阵?
谢谢。
这是一个非常通用的策略
dd<-read.table(text="a1 a2 a3 a4
1 3 3 5 5
2 4 3 5 5
3 5 4 6 5
4 6 5 7 3", header=T)
mm<-diag(ncol(dd))
mm[lower.tri(mm)] <- combn(dd, 2, function(x) coef(lm(x[,2]~x[,1]+0)))
mm[upper.tri(mm)] <- rev(combn(dd[length(dd):1], 2, function(x) coef(lm(x[,2]~x[,1]+0))))
这给出了矩阵
mm
# [,1] [,2] [,3] [,4]
# [1,] 1.0000000 1.202381 0.7738095 0.9285714
# [2,] 0.8255814 1.000000 0.6592593 0.7925926
# [3,] 1.2441860 1.508475 1.0000000 1.2033898
# [4,] 0.9069767 1.101695 0.7481481 1.0000000
其中元素 [4,1] 与 coef(lm(a4~a1+0, dd))
相同,元素 [2,3] 与 coef(lm(a2~a3+0, dd))
相同
我有一个如下所示的数据框:
a1 a2 a3 a4
1 3 3 5 5
2 4 3 5 5
3 5 4 6 5
4 6 5 7 3
我想对数据框中的每两列进行线性回归,并将intercept
设置为0。
换句话说,我想得到lm(a1~a2+0), lm(a1~a3+0), lm(a1~a4+0), lm(a2~a1+0), lm(a2~a3+0)...
在cor()
中,如果我输入一个数据帧,我会得到一个矩阵,例如下面,
a1 a2 a3 a4
a1 1.0000000 0.9467293 0.8944272 0.2045983
a2 0.9467293 1.0000000 0.9622504 0.4989222
a3 0.8944272 0.9622504 1.0000000 0.4574957
a4 0.2045983 0.4989222 0.4574957 1.0000000
在lm()
中有没有办法得到同种矩阵?
谢谢。
这是一个非常通用的策略
dd<-read.table(text="a1 a2 a3 a4
1 3 3 5 5
2 4 3 5 5
3 5 4 6 5
4 6 5 7 3", header=T)
mm<-diag(ncol(dd))
mm[lower.tri(mm)] <- combn(dd, 2, function(x) coef(lm(x[,2]~x[,1]+0)))
mm[upper.tri(mm)] <- rev(combn(dd[length(dd):1], 2, function(x) coef(lm(x[,2]~x[,1]+0))))
这给出了矩阵
mm
# [,1] [,2] [,3] [,4]
# [1,] 1.0000000 1.202381 0.7738095 0.9285714
# [2,] 0.8255814 1.000000 0.6592593 0.7925926
# [3,] 1.2441860 1.508475 1.0000000 1.2033898
# [4,] 0.9069767 1.101695 0.7481481 1.0000000
其中元素 [4,1] 与 coef(lm(a4~a1+0, dd))
相同,元素 [2,3] 与 coef(lm(a2~a3+0, dd))