【问题标题】:Replace the values in the diagonal of a (correlation) matrix with zero, but keep all other 1 values in the matrix将(相关)矩阵的对角线中的值替换为零,但保留矩阵中的所有其他 1 值
【发布时间】:2021-05-12 17:36:23
【问题描述】:

我有一个相关矩阵,并使用它来确定变量与其他变量完全相关的位置,知道相关 = 1 是完全匹配的。为了更好地解释,这里是一些模拟数据,用于创建一些值相同的变量。

set.seed(123)
df <- data.frame(replicate(11,sample(1:1000,10,rep=TRUE)))
df <- cbind(df,df[,1:3],df[,1] )
names(df) <- c(paste0("X", 1:15))
cor_matrix <- round(cor(df, use="complete.obs", method="pearson"),2)
cor_matrix
> cor_matrix
       X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11   X12   X13   X14   X15
X1   1.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  1.00  0.08 -0.69  1.00
X2   0.08  1.00 -0.11  0.15 -0.30 -0.41  0.05  0.09 -0.70  0.67 -0.10  0.08  1.00 -0.11  0.08
X3  -0.69 -0.11  1.00 -0.18 -0.05  0.29 -0.42 -0.10 -0.01 -0.12  0.03 -0.69 -0.11  1.00 -0.69
X4   0.10  0.15 -0.18  1.00  0.24  0.37  0.31  0.18  0.03 -0.09  0.28  0.10  0.15 -0.18  0.10
X5  -0.35 -0.30 -0.05  0.24  1.00  0.33  0.36  0.27  0.34 -0.08 -0.21 -0.35 -0.30 -0.05 -0.35
X6  -0.39 -0.41  0.29  0.37  0.33  1.00 -0.55  0.11  0.55 -0.78  0.15 -0.39 -0.41  0.29 -0.39
X7   0.26  0.05 -0.42  0.31  0.36 -0.55  1.00  0.01 -0.25  0.54  0.10  0.26  0.05 -0.42  0.26
X8  -0.17  0.09 -0.10  0.18  0.27  0.11  0.01  1.00  0.06  0.02 -0.47 -0.17  0.09 -0.10 -0.17
X9   0.06 -0.70 -0.01  0.03  0.34  0.55 -0.25  0.06  1.00 -0.82 -0.26  0.06 -0.70 -0.01  0.06
X10 -0.03  0.67 -0.12 -0.09 -0.08 -0.78  0.54  0.02 -0.82  1.00 -0.17 -0.03  0.67 -0.12 -0.03
X11  0.12 -0.10  0.03  0.28 -0.21  0.15  0.10 -0.47 -0.26 -0.17  1.00  0.12 -0.10  0.03  0.12
X12  1.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  1.00  0.08 -0.69  1.00
X13  0.08  1.00 -0.11  0.15 -0.30 -0.41  0.05  0.09 -0.70  0.67 -0.10  0.08  1.00 -0.11  0.08
X14 -0.69 -0.11  1.00 -0.18 -0.05  0.29 -0.42 -0.10 -0.01 -0.12  0.03 -0.69 -0.11  1.00 -0.69
X15  1.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  1.00  0.08 -0.69  1.00

如您所见,X1 与 X12 和 X15 的相关值为 1。 X2 和 X13、X3 和 X14。 我想要做的是删除矩阵中所有不是 1 的值(用零替换不需要的值),但需要删除对角线上的 1,它与自身直接相关。任何帮助或想法将不胜感激。非常感谢

【问题讨论】:

  • diag(cor_matrix) &lt;- 0 之后,您可以使用which(cor_matrix==1, arr.ind=TRUE) 定位1,这比将其余值分配给0 并查看矩阵更方便。

标签: r


【解决方案1】:

我们可以将diag 元素分配给0

diag(cor_matrix) <- 0

-输出

cor_matrix
       X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11   X12   X13   X14   X15
X1   0.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  1.00  0.08 -0.69  1.00
X2   0.08  0.00 -0.11  0.15 -0.30 -0.41  0.05  0.09 -0.70  0.67 -0.10  0.08  1.00 -0.11  0.08
X3  -0.69 -0.11  0.00 -0.18 -0.05  0.29 -0.42 -0.10 -0.01 -0.12  0.03 -0.69 -0.11  1.00 -0.69
X4   0.10  0.15 -0.18  0.00  0.24  0.37  0.31  0.18  0.03 -0.09  0.28  0.10  0.15 -0.18  0.10
X5  -0.35 -0.30 -0.05  0.24  0.00  0.33  0.36  0.27  0.34 -0.08 -0.21 -0.35 -0.30 -0.05 -0.35
X6  -0.39 -0.41  0.29  0.37  0.33  0.00 -0.55  0.11  0.55 -0.78  0.15 -0.39 -0.41  0.29 -0.39
X7   0.26  0.05 -0.42  0.31  0.36 -0.55  0.00  0.01 -0.25  0.54  0.10  0.26  0.05 -0.42  0.26
X8  -0.17  0.09 -0.10  0.18  0.27  0.11  0.01  0.00  0.06  0.02 -0.47 -0.17  0.09 -0.10 -0.17
X9   0.06 -0.70 -0.01  0.03  0.34  0.55 -0.25  0.06  0.00 -0.82 -0.26  0.06 -0.70 -0.01  0.06
X10 -0.03  0.67 -0.12 -0.09 -0.08 -0.78  0.54  0.02 -0.82  0.00 -0.17 -0.03  0.67 -0.12 -0.03
X11  0.12 -0.10  0.03  0.28 -0.21  0.15  0.10 -0.47 -0.26 -0.17  0.00  0.12 -0.10  0.03  0.12
X12  1.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  0.00  0.08 -0.69  1.00
X13  0.08  1.00 -0.11  0.15 -0.30 -0.41  0.05  0.09 -0.70  0.67 -0.10  0.08  0.00 -0.11  0.08
X14 -0.69 -0.11  1.00 -0.18 -0.05  0.29 -0.42 -0.10 -0.01 -0.12  0.03 -0.69 -0.11  0.00 -0.69
X15  1.00  0.08 -0.69  0.10 -0.35 -0.39  0.26 -0.17  0.06 -0.03  0.12  1.00  0.08 -0.69  0.00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2012-03-15
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多