c++矩阵类_R包corrplot绘图相关系数矩阵

今天分享一个相关分析可视化实战!

8bb135559d32f5010474ede3797857f7.png

之前我们分享了关于相关分析的原理,还有ggcorrplot包的使用。

  • 相关性分析方法基础:Spearman、Kendall和Pearson

  • R相关矩阵可视化包ggcorrplot

今天推出相关分析的第三讲,corrplot实战与绘图。

corrplot简介与安装

corrplot是一个绘制相关矩阵和置信区间的包,它也包含了一些矩阵排序的算法。

安装也非常简单,如果在Rstudio中,直接安装:

install.packages("corrplot")

本节选学内容,让工作体验更美好!

如果使用rstudio的数据源下载太慢,可以使用国内清华镜像安装,反正我在科技网,或方正宽带下载都会快10倍以上。

install.packages("corrplot",
repos="https://mirrors.tuna.tsinghua.edu.cn/CRAN")

此外还可以devtools工具从作者的github源安装,名称为taiyun/corrplot,追求最新版本的朋友自行尝试,这里不再赘述。

简单的相关分析及绘图实例

我们library加载包,使用cor计算内部数据mtcars汽车数据列间相关系数矩阵,再绘图。

library(corrplot)
M = cor(mtcars)
corrplot(M, order = "hclust", addrect = 2)

简单三句话,美美哒相关分析结果是出来了。

793ca840e215cfa92cea37ad85688b7b.png

实例精华讲解

我们现在对原始数据、分析结果和可视化参数进行解释。

我们看一下输入数据格式:使用head查看数据前6行预览:

head(mtcars)

                  mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

本质上是一个行为样本名,列为属性的数值表格。其实我们大部分的数据都是这种格式的文件,只需要使用read.table读入。

cor函数对mtcars数据按列进行两两相关性计算,默认使用pearson方法,当然理论解读中提前的spearmankendall方法也都支持。

比如我们选spearman方法计算相关系数矩阵:

cor(mtcars, method = "spearman")

           mpg        cyl       disp         hp        drat         wt        qsec         vs          am       gear        carb
mpg   1.0000000 -0.9108013 -0.9088824 -0.8946646  0.65145546 -0.8864220  0.46693575  0.7065968  0.56200569  0.5427816 -0.65749764
cyl  -0.9108013  1.0000000  0.9276516  0.9017909 -0.67888119  0.8577282 -0.57235095 -0.8137890 -0.52207118 -0.5643105  0.58006798
disp -0.9088824  0.9276516  1.0000000  0.8510426 -0.68359210  0.8977064 -0.45978176 -0.7236643 -0.62406767 -0.5944703  0.53977806
hp   -0.8946646  0.9017909  0.8510426  1.0000000 -0.52012499  0.7746767 -0.66660602 -0.7515934 -0.36232756 -0.3314016  0.73337937
drat  0.6514555 -0.6788812 -0.6835921 -0.5201250  1.00000000 -0.7503904  0.09186863  0.4474575  0.68657079  0.7448162 -0.12522294
wt   -0.8864220  0.8577282  0.8977064  0.7746767 -0.75039041  1.0000000 -0.22540120 -0.5870162 -0.73771259 -0.6761284  0.49981205
qsec  0.4669358 -0.5723509 -0.4597818 -0.6666060  0.09186863 -0.2254012  1.00000000  0.7915715 -0.20333211 -0.1481997 -0.65871814
vs    0.7065968 -0.8137890 -0.7236643 -0.7515934  0.44745745 -0.5870162  0.79157148  1.0000000  0.16834512  0.2826617 -0.63369482
am    0.5620057 -0.5220712 -0.6240677 -0.3623276  0.68657079 -0.7377126 -0.20333211  0.1683451  1.00000000  0.8076880 -0.06436525
gear  0.5427816 -0.5643105 -0.5944703 -0.3314016  0.74481617 -0.6761284 -0.14819967  0.2826617  0.80768800  1.0000000  0.11488698
carb -0.6574976  0.5800680  0.5397781  0.7333794 -0.12522294  0.4998120 -0.65871814 -0.6336948 -0.06436525  0.1148870  1.00000000

相关系数矩阵的特点:

相关系数矩阵数值范围是-1到1,分别 代表完全负相关或正相关;
对角线全为1,因为自身完全相同即100%s相关;
矩阵中上、下三角阵中数值沿对角线是对称。

corrplot命令解释

可视化时,默认的方法为直接corrplot()可视化矩阵即可,如下:

corrplot(M)

430a7f8595d345b21555201e95969fd5.png

默认:圆形颜色渐变效果展示相关系数

示例中order按hclust聚类方式排序,addrect是添加分组矩形,可自定义分组类,类似于平时热图的kmean分组方式。用于表现研究对象可分类的特点,方便继续分类讨论或研究

corrplot(M, order = "hclust", addrect = 2)

2cbc4f7d07684031467c94b4bf0fae90.png

corrplot中参数详解

corrplot(corr, method = c("circle", "square", "ellipse", "number", "shade",  "color", "pie"), type = c("full", "lower", "upper"), add = FALSE,  col = NULL, bg = "white", title = "", is.corr = TRUE, diag = TRUE,  outline = FALSE, mar = c(0, 0, 0, 0), addgrid.col = NULL,  addCoef.col = NULL, addCoefasPercent = FALSE, order = c("original",  "AOE", "FPC", "hclust", "alphabet"), hclust.method = c("complete", "ward",  "ward.D", "ward.D2", "single", "average", "mcquitty", "median", "centroid"),  addrect = NULL, rect.col = "black", rect.lwd = 2, tl.pos = NULL,  tl.cex = 1, tl.col = "red", tl.offset = 0.4, tl.srt = 90,  cl.pos = NULL, cl.lim = NULL, cl.length = NULL, cl.cex = 0.8,  cl.ratio = 0.15, cl.align.text = "c", cl.offset = 0.5, number.cex = 1,  number.font = 2, number.digits = NULL, addshade = c("negative",  "positive", "all"), shade.lwd = 1, shade.col = "white", p.mat = NULL,  sig.level = 0.05, insig = c("pch", "p-value", "blank", "n", "label_sig"),  pch = 4, pch.col = "black", pch.cex = 3, plotCI = c("n", "square",  "circle", "rect"), lowCI.mat = NULL, uppCI.mat = NULL, na.label = "?",  na.label.col = "black", win.asp = 1, ...)

是不是有点多,功能实在太强大了,我们挑几个常用的说明。

corr: 用于绘图的矩阵,必须是正方形矩阵,如果是普通的矩阵,需要设置is.corr=FALSE

method: 可视化的方法,默认是圆circle,还有正方形square、椭圆ellipse、数字number、阴影shade、颜色color和饼pie可选。文章开篇处的示例即为饼形,类似月亮周期的大小变化。

type:展示类型,默认全显full,还有下三角lower,或上三角upper可选。

col:颜色设置,可设置颜色起、中、终点颜色。

is.corr:逻辑值,若为TRUE,不强制要求矩阵是正方形的相关系数矩阵,图例范围也会随数据变化

diag:是否显示对角线值。因为对角线全为1,显示只是美观,实际意义不大

tl.cex:名称标签字体大小

tl.col:名称标签字体颜色

cl.lim:值域范围

addrect:设置分组数量,添加矩形

官方教程

公众号只是信息传播和推荐的作用,让你知道什么东西可以干什么事。具体更深入的学习,作者的官方教程一般都是比较不错的教材,很少有人比作者更了解它的软件使用。

作者在CRAN上包主页的vignettes中提供了非常详细的图片教程,有几十种画法展示,简直像自选超市,大家需要哪种选哪种。

下面我只举几个粟子:

1. 画上三角矩阵

corrplot(M, type = "upper")

3458d0edec7fadd3a0b3e5a287e543d4.png

2. 图形和数值混合矩阵

corrplot.mixed(M)

7f4abe61c16e30ac62d2713279354b9b.png

文字看不清,可以设置文字为黑色和大小

corrplot.mixed(M, lower.col = "black", number.cex = .7)

3. 修改颜色

col3 corrplot(M, order = "hclust", addrect = 2, col = col3(20))

22beb801ce676971ac709124833865f4.png

4. 图例标签控制

关闭图例和标签

corrplot(M, order = "AOE", cl.pos = "n", tl.pos = "n")

16a37f6fc749d610dc2b2a32a2b7bc8a.png

还可以控制对角标签旋转45度

corrplot(M, type = "lower", order = "hclust", tl.col = "black", tl.srt = 45)

e4edcdb8c5c672ff97352f9a8149595c.png

修改图例范围

corrplot(abs(M),order = "AOE", col = col3(200), cl.lim = c(0, 1))

2b91d6682dbe88b4cb4d2ac965d82093.png

5. 显著性标记

设置没通过统计的相关性结果打X

res1 corrplot(M, p.mat = res1$p, sig.level = .01)

690e61c622d8f2330d143091f81e33b7.png

还可设置不显著的空白,或显示p值;更可以利用此方法显示所有p值,或用*数量代表显示性

## leave blank on no significant coefficient
corrplot(M, p.mat = res1$p, insig = "blank")

## add p-values on no significant coefficient
corrplot(M, p.mat = res1$p, insig = "p-value")

## add all p-values
corrplot(M, p.mat = res1$p, insig = "p-value", sig.level = -1)

## star level
corrplot(M, p.mat = res1$p, insig = "label_sig",
        sig.level = c(.001, .01, .05), pch.cex = .9, pch.col = "white")

6. 画蓝色亮30天的变化

文章开篇的蓝月亮是如何画的呢?

原理:生成一个1-15和15-1的30个数且每行10个的矩阵,利用corrplot可视,方法为饼形,矩阵为非对称,去除标签和图例,设置图例范围

dat = matrix(c(1:15,15:1), nrow = 10)
corrplot(t(dat), "pie", is.corr = F, cl.pos = "n", tl.pos = "n", cl.lim = c(1,15)

1117d6aff5d019384d0c37357b5e7063.png

今天就到这里,更多教程,请阅读引文链接。

Reference

如何引用

citation("corrplot")

Taiyun Wei and Viliam Simko (2017). R package “corrplot”:
 Visualization of a Correlation Matrix (Version 0.84).
 Available from https://github.com/taiyun/corrplot

官方教程 https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html

孙老师相关性矩阵可视化工具corrplot https://baijiahao.baidu.com/s?id=1576699211067823610&wfr=spider&for=pc

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘  

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。

8e09da4b2eae8ece60cd576adf29d1ff.png

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

2f580dcca74bb77f8409047cd2468b29.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 QT C++ 中显示相关系数矩阵,你需要先计算相关系数矩阵。可以使用 QT C++ 中的 QStandardItemModel 来显示矩阵。 以下是一个示例代码,可以计算出三个变量之间的相关系数矩阵,并将其显示在一个 QTableView 控件中: ```c++ #include <QStandardItemModel> #include <QTableView> #include <vector> #include <cmath> using namespace std; // 计算相关系数矩阵 vector<vector<double>> calculateCorrelationMatrix(const vector<vector<double>>& data) { int n = data.size(); int m = data[0].size(); // 计算每个变量的平均值 vector<double> means(m); for (int j = 0; j < m; j++) { double sum = 0.0; for (int i = 0; i < n; i++) { sum += data[i][j]; } means[j] = sum / n; } // 计算每个变量的标准差 vector<double> stdDevs(m); for (int j = 0; j < m; j++) { double sum = 0.0; for (int i = 0; i < n; i++) { sum += pow(data[i][j] - means[j], 2.0); } stdDevs[j] = sqrt(sum / (n - 1)); } // 计算相关系数矩阵 vector<vector<double>> corrMatrix(m, vector<double>(m)); for (int j1 = 0; j1 < m; j1++) { for (int j2 = 0; j2 < m; j2++) { double sum = 0.0; for (int i = 0; i < n; i++) { sum += (data[i][j1] - means[j1]) * (data[i][j2] - means[j2]); } corrMatrix[j1][j2] = sum / ((n - 1) * stdDevs[j1] * stdDevs[j2]); } } return corrMatrix; } int main(int argc, char *argv[]) { QApplication app(argc, argv); // 构造测试数据 vector<vector<double>> data = { {1.0, 2.0, 3.0}, {2.0, 4.0, 6.0}, {3.0, 6.0, 9.0}, {4.0, 8.0, 12.0}, {5.0, 10.0, 15.0}, }; // 计算相关系数矩阵 vector<vector<double>> corrMatrix = calculateCorrelationMatrix(data); // 创建 QStandardItemModel 用于显示矩阵 int n = corrMatrix.size(); QStandardItemModel model(n, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { model.setData(model.index(i, j), corrMatrix[i][j]); } } // 创建 QTableView 控件并设置模型 QTableView tableView; tableView.setModel(&model); // 显示窗口 tableView.show(); return app.exec(); } ``` 在上面的代码中,`calculateCorrelationMatrix` 函数计算相关系数矩阵,然后将其存储为一个二维数组 `corrMatrix`。接下来,使用 QStandardItemModel 创建一个 n × n 的矩阵模型,并将 `corrMatrix` 中的数据填充到模型中。最后,将模型设置为一个 QTableView 控件的数据源,并显示窗口。 这样就可以在 QT C++ 中显示相关系数矩阵了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值