如何读取相关矩阵并在 R 中形成散点图矩阵
How to read a Correlation matrix and form a Scatterplot matrix in R
我在 excel 中有一个相关矩阵如下:
dfA <- read.table(text=
"beta1 beta2 beta3 beta4 beta5 beta6 X X2 X3
beta1 1.0000 -0.2515 -0.2157 0.7209 -0.7205 0.4679 0.1025 -0.3606 -0.0356
beta2 -0.2515 1.0000 0.9831 0.1629 -0.1654 -0.5595 -0.0316 0.0946 0.0829
beta3 -0.2157 0.9831 1.0000 0.1529 -0.1559 -0.4976 -0.0266 0.0383 0.0738
beta4 0.7209 0.1629 0.1529 1.0000 -1.0000 -0.2753 0.0837 -0.1445 0.0080
beta5 0.4679 -0.5595 -0.4976 -0.2753 1.0000 0.2757 0.0354 -0.3149 -0.0596
beta6 -0.7205 -0.1654 -0.1559 -1.0000 0.2757 1.0000 -0.0837 0.1451 -0.0081
X 0.1025 -0.0316 -0.0266 0.0837 -0.0837 0.0354 1.0000 0.0278 -0.0875
X2 -0.3606 0.0946 0.0383 -0.1445 0.1451 -0.3149 0.0278 1.0000 0.2047
X3 -0.0356 0.0829 0.0738 0.0080 -0.0081 -0.0596 -0.0875 0.2047 1.0000",
header=TRUE)
我只有相关矩阵而不是形成矩阵的原始数据,因此,我尝试使用以下代码将此矩阵读入 R 中的矩阵:
B <- as.matrix(dfA)
但是当我尝试使用以下代码形成散点图矩阵时:
library(corrplot)
corrplot(B, method="circle")
我收到错误
Error in corrplot(B, method = "circle") : The matrix is not in [-1, 1]!
请帮我解决这个问题。
corrplot() 解
根据 user20650 的上述评论更新我的第一个 post 使用 ggplot。 user20650 显示错误的可能来源是舍入错误导致某些数字超出允许的 [-1,1] 范围,舍入解决了这个问题。我也能够使用 corrplot() 生成一个图。
此时,运行 corrplot() 生成以下图:
corMat<-as.matrix(dfA)
library('corrplot')
corrplot(corMat, method='circle')
ggplot() 解法
您也可以在 ggplot2 中通过一些额外的步骤来完成此操作。我个人认为它看起来好多了。
1)我去掉了矩阵下三角的冗余信息
corMat[lower.tri(corMat)]<-NA
> print(corMat)
beta1 beta2 beta3 beta4 beta5 beta6 X X2 X3
beta1 1 -0.2515 -0.2157 0.7209 0.4679 -0.7205 0.1025 -0.3606 -0.0356
beta2 NA 1.0000 0.9831 0.1629 -0.5595 -0.1654 -0.0316 0.0946 0.0829
beta3 NA NA 1.0000 0.1529 -0.4976 -0.1559 -0.0266 0.0383 0.0738
beta4 NA NA NA 1.0000 -0.2753 -1.0000 0.0837 -0.1445 0.0080
beta5 NA NA NA NA 1.0000 0.2757 -0.0837 0.1451 -0.0081
beta6 NA NA NA NA NA 1.0000 0.0354 -0.3149 -0.0596
X NA NA NA NA NA NA 1.0000 0.0278 -0.0875
X2 NA NA NA NA NA NA NA 1.0000 0.2047
X3 NA NA NA NA NA NA NA NA 1.0000
2) 然后我使用 reshape2::melt() 将矩阵转换为长格式,并创建一个只显示小数点后两位的格式化版本的值。这对情节很有用。
library(reshape2)
m<-melt(corMat)
m<-data.frame(m[!is.na(m[,3]),]) # get rid of the NA matrix entries
m$value_lab<-sprintf('%.2f',m$value)
数据如下:
> head(m)
Var1 Var2 value value_lab
1 beta1 beta1 1.0000 1.00
10 beta1 beta2 -0.2515 -0.25
11 beta2 beta2 1.0000 1.00
19 beta1 beta3 -0.2157 -0.22
20 beta2 beta3 0.9831 0.98
21 beta3 beta3 1.0000 1.00
3) 最后,我将这些数据输入到 ggplot2 - 主要依靠 geom_tile() 打印矩阵和 geom_text() 在每个图块上打印标签。如果你愿意,你可以把它打扮得更漂亮。
library(ggplot2)
ggplot(m, aes(Var2, Var1, fill = value, label=value_lab),color='blue') +
geom_tile() +
geom_text() +
xlab('')+
ylab('')+
theme_minimal()
我在 excel 中有一个相关矩阵如下:
dfA <- read.table(text=
"beta1 beta2 beta3 beta4 beta5 beta6 X X2 X3
beta1 1.0000 -0.2515 -0.2157 0.7209 -0.7205 0.4679 0.1025 -0.3606 -0.0356
beta2 -0.2515 1.0000 0.9831 0.1629 -0.1654 -0.5595 -0.0316 0.0946 0.0829
beta3 -0.2157 0.9831 1.0000 0.1529 -0.1559 -0.4976 -0.0266 0.0383 0.0738
beta4 0.7209 0.1629 0.1529 1.0000 -1.0000 -0.2753 0.0837 -0.1445 0.0080
beta5 0.4679 -0.5595 -0.4976 -0.2753 1.0000 0.2757 0.0354 -0.3149 -0.0596
beta6 -0.7205 -0.1654 -0.1559 -1.0000 0.2757 1.0000 -0.0837 0.1451 -0.0081
X 0.1025 -0.0316 -0.0266 0.0837 -0.0837 0.0354 1.0000 0.0278 -0.0875
X2 -0.3606 0.0946 0.0383 -0.1445 0.1451 -0.3149 0.0278 1.0000 0.2047
X3 -0.0356 0.0829 0.0738 0.0080 -0.0081 -0.0596 -0.0875 0.2047 1.0000",
header=TRUE)
我只有相关矩阵而不是形成矩阵的原始数据,因此,我尝试使用以下代码将此矩阵读入 R 中的矩阵:
B <- as.matrix(dfA)
但是当我尝试使用以下代码形成散点图矩阵时:
library(corrplot)
corrplot(B, method="circle")
我收到错误
Error in corrplot(B, method = "circle") : The matrix is not in [-1, 1]!
请帮我解决这个问题。
corrplot() 解
根据 user20650 的上述评论更新我的第一个 post 使用 ggplot。 user20650 显示错误的可能来源是舍入错误导致某些数字超出允许的 [-1,1] 范围,舍入解决了这个问题。我也能够使用 corrplot() 生成一个图。
此时,运行 corrplot() 生成以下图:
corMat<-as.matrix(dfA)
library('corrplot')
corrplot(corMat, method='circle')
ggplot() 解法
您也可以在 ggplot2 中通过一些额外的步骤来完成此操作。我个人认为它看起来好多了。
1)我去掉了矩阵下三角的冗余信息
corMat[lower.tri(corMat)]<-NA
> print(corMat)
beta1 beta2 beta3 beta4 beta5 beta6 X X2 X3
beta1 1 -0.2515 -0.2157 0.7209 0.4679 -0.7205 0.1025 -0.3606 -0.0356
beta2 NA 1.0000 0.9831 0.1629 -0.5595 -0.1654 -0.0316 0.0946 0.0829
beta3 NA NA 1.0000 0.1529 -0.4976 -0.1559 -0.0266 0.0383 0.0738
beta4 NA NA NA 1.0000 -0.2753 -1.0000 0.0837 -0.1445 0.0080
beta5 NA NA NA NA 1.0000 0.2757 -0.0837 0.1451 -0.0081
beta6 NA NA NA NA NA 1.0000 0.0354 -0.3149 -0.0596
X NA NA NA NA NA NA 1.0000 0.0278 -0.0875
X2 NA NA NA NA NA NA NA 1.0000 0.2047
X3 NA NA NA NA NA NA NA NA 1.0000
2) 然后我使用 reshape2::melt() 将矩阵转换为长格式,并创建一个只显示小数点后两位的格式化版本的值。这对情节很有用。
library(reshape2)
m<-melt(corMat)
m<-data.frame(m[!is.na(m[,3]),]) # get rid of the NA matrix entries
m$value_lab<-sprintf('%.2f',m$value)
数据如下:
> head(m)
Var1 Var2 value value_lab
1 beta1 beta1 1.0000 1.00
10 beta1 beta2 -0.2515 -0.25
11 beta2 beta2 1.0000 1.00
19 beta1 beta3 -0.2157 -0.22
20 beta2 beta3 0.9831 0.98
21 beta3 beta3 1.0000 1.00
3) 最后,我将这些数据输入到 ggplot2 - 主要依靠 geom_tile() 打印矩阵和 geom_text() 在每个图块上打印标签。如果你愿意,你可以把它打扮得更漂亮。
library(ggplot2)
ggplot(m, aes(Var2, Var1, fill = value, label=value_lab),color='blue') +
geom_tile() +
geom_text() +
xlab('')+
ylab('')+
theme_minimal()