在许多变量之间运行交互矩阵

时间:2017-07-17 14:17:04

标签: r matrix correlation interaction

我有一个包含70个列变量的数据集,每个变量都是0-1个虚拟变量,3500个观察值。我希望看到一个变量中“成功”的观察与另一个变量匹配的频率。换句话说,它在变量1中具有成功虚拟,它在变量2中也经常成功,所以对于所有变量都是如此。我已经找到了如何创建一个矩阵表,显示仅涉及两列时的交互,但是我找不到涉及许多列的任何内容。理想情况下,我喜欢在70个变量和70个变量的交互矩阵中表示这一点。以下是数据集的概念:

Dat A B C D XX 1 1 1 1 XY 0 1 0 1 XZ 0 0 1 1

我希望的输出是:

Out A   B   C   D
A   0   1   1   1
B       0   1   2
C           0   2
D               0

显示(A,B)配对(B,C)的次数是配对等等。

我尝试过使用table()命令以及as.matrix,但似乎这些需要将数据组织为两列,并且在引用许多列变量时无法理解数据。我对R很新,所以如果我的问题不清楚或可能很简单,我会道歉。

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:1)

这里是如何创建不确定大小的相关矩阵。首先创建一个可重现的数据集示例...

dat <- matrix(sample(0:1, size = 700, replace = TRUE), ncol = 70)
dat <- data.frame(dat)

然后计算相关性......

dat <- cor(dat)

然后直观地绘制相关性......

library(corrplot)
corrplot(dat, method = "square")

A massive correlation matrix with colored squares

您还可以使用数字而不是颜色来绘制相关性...

corrplot(dat, method = "number")

A massive correlation matrix with numbers

显然,在将这些图表用于出版物之前,您需要对这些图表进行精细处理。 corrplot为图表外观提供了大量选项。

答案 1 :(得分:0)

您可以尝试:

res <- apply(combn(2:ncol(df), 2), 2, function(x, y) sum(rowSums(y[, x]) == 2), df)
m <- diag(x=0, ncol(df)-1)
m[upper.tri(m)] <- res
m[lower.tri(m)] <- NA
dimnames(m) <- list(colnames(df)[-1], colnames(df)[-1])
   A  B  C D
A  0  1  1 1
B NA  0  1 2
C NA NA  0 2
D NA NA NA 0