如何在R中读取相关矩阵并形成散点图矩阵
我在excel中有一个相关矩阵,如下所示:如何在R中读取相关矩阵并形成散点图矩阵,r,matrix,r-corrplot,R,Matrix,R Corrplot,我在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
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)
我收到错误消息
Error in corrplot(B, method = "circle") : The matrix is not in [-1, 1]!
请帮我解决这个问题。corrplot()解决方案
根据上面用户20650的评论,使用ggplot更新我的第一篇文章。user20650表明,可能的错误源是四舍五入错误,导致一些数字超出允许的[-1,1]范围,四舍五入解决了这个问题。我还可以使用corrplot()生成绘图
此时,运行corrplot()将生成以下绘图:
corMat<-as.matrix(dfA)
library('corrplot')
corrplot(corMat, method='circle')
3) 最后,我将这些数据输入ggplot2,主要依靠geom_tile()打印矩阵,geom_text()打印每个tile上的标签。如果你想的话,你可以把它打扮得更漂亮些
library(ggplot2)
ggplot(m, aes(Var2, Var1, fill = value, label=value_lab),color='blue') +
geom_tile() +
geom_text() +
xlab('')+
ylab('')+
theme_minimal()
我可能误解了,但我认为您正在创建一个由Excel制作的相关矩阵图的相关矩阵,该图不会飞起来。您只能使用“整洁”数据来执行相关矩阵。在这种情况下,Tidy意味着您需要独特的观察结果,如行和beta1、beta2、beta3等。。。这是你的专栏。希望这能有所帮助。@BGA实际上我在excel中有一个相关矩阵,所以,我正试图用这个相关矩阵制作一个散点图矩阵图。啊。但概念是一样的。我相信您仍然需要原始数据来执行散点图矩阵。你不再有原始数据了吗?如果可以访问,则很容易将其作为csv或excel中的数据框带入r。@BGA我没有原始数据。所以,做散点图是没有希望的?你现在只是从十进制数字中创建圆,这不再是散点图了。@user20650哦,太酷了。我在看到你对这个问题的评论之前提交了我的答案。我将更新我的帖子以包含corrplot()。还有,为什么我需要byrow论证?matrix()似乎已经将值正确地放入了corMat。好眼力。我将使用OP的新read.table()import进行更新。它工作得非常好(我制作了两个散点图矩阵),感谢您的回答和这样的逐步代码解释。实际上,ggplot比基于圆的散点图看起来要好得多。我对我提供数据的方式表示歉意。您能帮助我如何将相关矩阵导入矩阵格式的R中吗?
corMat<-as.matrix(dfA)
library('corrplot')
corrplot(corMat, method='circle')
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
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
library(ggplot2)
ggplot(m, aes(Var2, Var1, fill = value, label=value_lab),color='blue') +
geom_tile() +
geom_text() +
xlab('')+
ylab('')+
theme_minimal()