如何生成像cor()

时间:2015-05-31 15:28:44

标签: r dataframe linear-regression

我有一个如下数据框:

  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()中有没有办法获得相同类型的矩阵?

感谢。

1 个答案:

答案 0 :(得分:4)

这是一个非常一般的策略

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))相同