朋友圈选美大赛
半年前我做了一个课程:0元,10小时教学视频直播《跟着百度李彦宏学习肿瘤基因组测序数据分析》 ,有意思的是没有一个人提交课程笔记,让我非常伤心,计划国庆节就解散钉钉群,删除钉钉群里面的录屏啦。但是昨晚逛朋友圈看到该课程的一个学生在他的公众号:《 医学僧的科研日记》,写了一个笔记:突变特征(Mutational signatures),让我很感动,就翻了翻 他的朋友圈,发现一个超级有意思的图及配文《朋友圈选美大赛》:
4位美女
我觉得好好玩,就转发到了自己的朋友圈,果然感兴趣的小伙伴超级多,太多人询问如何绘制这张图,我就委托公众号:《 医学僧的科研日记》写一个笔记,如下:
我们经常会碰到连续变量的多组比较,比如比较基因在不同分组(如分期、分级和亚型等)的表达差异。两个分组之间的比较可以使用T检验或Wilcox秩和检验,三个及三个以上分组的比较可以使用方差检验和kruskal检验。同样的,我们可以将不同分组的差异结果进行可视化,比如这里我们模拟一个基因在肿瘤四种AJCC分期的表达情况。同样的,我们可以将不同分组的差异结果进行可视化。这里,可以想象有一个选美比赛,一共有4个lady参加这个比赛,有30个评委需要对这4个lady进行评价,打分(Beauty值)在(-5,5)分区间内, 我们这里比较以下30个评委的打分分布来判断4个lady谁能获得冠军。
# 生成随机数
set.seed(39)
data <- data.frame(Beauty=c(rnorm(30,0,1.3),rnorm(30,0.5,1.6),
rnorm(30,1,1.9),rnorm(30,1.5,1.9)),
Lady=c(rep(paste0('Lady-',1:4),each=30)))
# 开始可视化+统计分析:
library(ggplot2)
library(ggsci)
library(ggpubr)
ggplot(data,aes(Lady,Beauty,fill=Lady))+
geom_boxplot(outlier.colour = NA,notch = T,size = 0.4)+
geom_jitter(shape = 21,size=2,width = 0.2)+
geom_violin(position = position_dodge(width = .75),
size = 0.4,alpha = 0.4,trim = T)+
theme_classic()+
theme(legend.position = 'none',
axis.title.y = element_text(size=12),
axis.text = element_text(size=12),
axis.title.x = element_blank())+
scale_fill_npg()+
stat_compare_means(comparisons = list(c('Lady-1','Lady-2'),c('Lady-1','Lady-3'),
c('Lady-1','Lady-4'),c('Lady-2','Lady-3'),
c('Lady-2','Lady-4'),c('Lady-3','Lady-4')),
label = 'p.signif')+
stat_compare_means(label.y = max(data$Beauty)+5.5)
ggsave('LadyFirst.pdf',width = 4,height = 4)
从统计结果来看,这4位选手的Beauty值是有差异的(Kruskal−Wallis, p = 0.00061),但是Lady2与Lady3, Lady2与Lady4以及Lady3与Lady4两两之间是没有统计学差异的。Of note!Lady1的Beauty值要显著低于其他三个Lady,那如果有一个选丑比赛,then we have a winner!但既然是比赛嘛,总得有个胜负,所以我们比较以下她们Beauty value的中位值,发现,Lady-4的Beauty值 最高,followed by Lady-3 and Lady-2. 所以我们的冠军是Lady-4,亚军是Lady-3,季军是Lady-2, Lady-1也得到了一张参与卡片,上面写的是“谢谢惠顾”。
- HBase行锁探索
- Spring Cloud构建微服务架构:分布式服务跟踪(抽样收集)【Dalston版】
- HBase client访问ZooKeeper获取root-region-server DeadLock问题(zookeeper.ClientCnxn Unable to get data of zn
- zookeeper学习系列:四、Paxos算法和zookeeper的关系
- 有了phonegap你还android吗?
- zookeeper学习系列:三、利用zookeeper做选举和锁
- Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
- zookeeper学习系列:二、api实践
- Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
- Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】
- 困扰我多年的Connection reset问题
- scala学习笔记
- jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www
- 使用 Java Service Wrapper 启动java后台进程服务
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何在keras中添加自己的优化器(如adam等)
- python实现将中文日期转换为数字日期
- PHP中使用CURL发送get/post请求上传图片批处理功能
- django filter过滤器实现显示某个类型指定字段不同值方式
- PHP中使用mpdf 导出PDF文件的实现方法
- PyTorch实现重写/改写Dataset并载入Dataloader
- 详细分析Python垃圾回收机制
- PHP实现用session来实现记录用户登陆信息
- django序列化时使用外键的真实值操作
- 网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
- 如何基于Python爬取隐秘的角落评论
- PHP微信网页授权的配置文件操作分析
- php微信公众号开发之关键词回复
- Python 抓取数据存储到Redis中的操作
- PHP常见字符串操作函数与用法总结