差异分析完整解决方案升级版(更正版)

写在前面

上次的推送差异分析完整解决方案升级版存在一个致命错误,这里我先给大家道歉,由于我的疏忽正态检验过程我没有进行分组正态检验,这将造成大量的数据原本正态分布,却误判。今天我来给大家带来忏悔版本的差异分析完整解决方案。

我本来想自己写一个多组正态检验的函数的,但是出于谨慎,我在网上搜了一下,得到了shapiro.test.multi函数。就不用重复造轮子了。我将输出做一个修改,同修改差异分析函数内容。这里我放上作者的链接https://blog.csdn.net/yanlingbin/article/details/81194134。有兴趣的朋友点击查看

文末提供这个原始数据和代码及其测试脚本。

shapiro.test.multi <- function( #定义函数名
data, #定义函数第一个参数
value, #第2参数
group) #第3参数
{ #开始计算

require(magrittr) #按需要加载管道函数包

table(data[,group]) %>% #提取分组信息,此处即为统计group中值出现的次数,达到了去重的目的
data.frame(.) -> a1 #将提取信息从table格式转为数据库data.frame并存为a1,这样才能提取其中一列转为向量

a2 <- as.vector(a1[,1]) #将a1数据的第一列转为向量,这一列即为不重复的分组信息

data = data.frame(group = data[,group], #对数据集进行关键变量的提取,提取分组变量为data数据集的group变量
value = data[,value]) #提取计算值为data数据集的value

test.result <- data.frame(No=0, #行号
Name=0, #分组名
W=0, #W值
p.value=0, #p值
norm.test=0) #检测结果

for (i in (1:length(a2))){ #定义for循环计算,从1到a2的长度值这样一个区间,a2的长度即为分组的数量
subset(data, #指定取数据集 换行写代码使层次更清晰
group == a2[i], #定义去子集的条件,“==”为判断
select = value) %>% #定义需要取集的变量/列,“=”为定义
.[,1] %>% # "."定义计算结果放置的位置
shapiro.test(.) -> t.r #进行正态检验分布并存储为t.r

test.result[i,1] = i #存储组序号
test.result[i,2] = a2[i] #存储分组名
test.result[i,3] = t.r$statistic #存储W统计量
test.result[i,4] = t.r$p.value #存储计算的p值

if #if判断
(t.r$p.value > 0.05) #判断条件
test.result[i,5] = "Norm" #通过判断后的命令
else
test.result[i,5] = "Other_situation" #未通过判断执行的命令
} #结束循环计算

test.result[nrow( test.result)+1,1] = "Test Method:" #给数据框加上检验正态分布方法信息,在最后一行之后加上一行,在第1列放入次数据
test.result[nrow( test.result),2] = "Shapiro-Wilk" #同上行,存在第二列

test.result #显示用于存储计算结果的数据框
} #脚本结束

一行代码就跑过去了,这里我提取了判断指标,也就是全部分组都满足正态分布才被判断为真。

length(a$p.value[-dim(a)[1]][!a$p.value[-dim(a)[1]] >= 0.05]) == 0

我看见过最全的差异分析教程,但是好像还没有最智能的,机械的差异分析教程。因为这些标准都是死的,我们完全可以使用 if 来解放我们的大脑。

之前我有一篇推送:R语言一键批量完成差异统计和可视化 提供了这个差异检测编码流程,但是做的比较粗糙,代码冗余过多,出现错误向上排查比较困难。所以这次我将本来1000行的代码修改到了300行,精简了许多。

一张神图,解决科研统计80%的问题。 如果如作者所言:神图,解决科研统计80%的问题,那么我的这个流程把这张图90%的内容都进行了自动化数据识别和自动分析。顺便画张图,还有两种出图方式任你选择(建议箱线图,更准确)。

同时有几个地方我进行了升级:

  1. aov添加多种多重比较的方法,并映射到图形上。

  2. 提供两种作图方式,两种差异展示方式。

  3. 提供表格形式的结果文件方便查看。

这次代码升级有几个地方需要认真编写:

1. 柱状图的差异分析line形式的差异自动添加:如图:

这里我还是本来想使用ggpubr进行做的,发现这里面根本就没有柱状图添加line形式的差异的方法,最后还是使用了ggsignif包,其实就这一个包就够了。

if (sig_show == "line") {
zuhe = combn(aa$group,2)
xxxx <- tapply(zuhe,rep(1:ncol(zuhe),each=nrow(zuhe)),function(i)i)
xxxx
sig_lis = rep("a",dim(zuhe)[2])
for (i in 1:dim(zuhe)[2]) {
library(tidyverse)
library("ggsignif")

if (filter(aa, group == xxxx[[i]][1])$groups == filter(aa, group == xxxx[[i]][2])$groups) {
sig_lis[i] = "no_sig"
}

if (filter(aa, group == xxxx[[i]][1])$groups != filter(aa, group == xxxx[[i]][2])$groups) {
sig_lis[i] = "*"
}

}

2. 两两非参数检验结果是成对的,之前我可能提高多如何将成对差异结果表示为字母,这是本次升级的又一个技巧:multcompLetters函数。

names(wilcox_levels) = paste(xx$group1,xx$group2,sep = "-")

wilcox.labels <- data.frame(multcompLetters(wilcox_levels, threshold = 0.05)['Letters'])
colnames(wilcox.labels) = "groups"
aa = wilcox.labels

3. 那如果将字母形式的显著性标记结果转化为两两比较的结果呢,这里有我自己编写了一个脚本,做了这个转化;

zuhe = combn(aa$group,2)
xxxx <- tapply(zuhe,rep(1:ncol(zuhe),each=nrow(zuhe)),function(i)i)
xxxx
sig_lis = rep("a",dim(zuhe)[2])
for (i in 1:dim(zuhe)[2]) {
library(tidyverse)
library("ggsignif")

if (filter(aa, group == xxxx[[i]][1])$groups == filter(aa, group == xxxx[[i]][2])$groups) {
sig_lis[i] = "no_sig"
}

if (filter(aa, group == xxxx[[i]][1])$groups != filter(aa, group == xxxx[[i]][2])$groups) {
sig_lis[i] = "*"
}

}

到这里我们似乎就没什么难度了,将整个函数编写完毕,运行不同的参数进行调试即可:

01. 导入数据

# 读入实验设计
data_wt = read.table("./cs.txt", header=T, sep="\t");head(data_wt)
##数据由长变宽
data_wt = dcast(data_wt,ID +group ~ grou, value.var = "count")
#这里备注所需的数据格式
#前量列从第一列开始是ID,第二列是分组信息,剩下的列均为数据列
head(data_wt)

02. 下面运行函数,首先测试五种多重比较方法


single_diff_and_plot (data_wt,plotname = "南京农业大学_",plot = "bar",method_Mc ="LSD")
single_diff_and_plot (data_wt,plotname = "南京农业大学_",plot = "bar",method_Mc ="scheffe")
single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc ="LSD" )
single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc = "scheffe" )
method_Mc == "Duncan"
single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc = "Duncan" )

03. 接着测试显著性标注方式

single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc = "Duncan",sig_show = "abc" )

single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc = "Duncan",sig_show = "line" )
single_diff_and_plot (data_wt,plotname = "资源与环境科学学院_",plot = "box",method_Mc = "Duncan",sig_show = "abc" )

函数默认参数如下:

data_wt = data_wt,##默认数据集
plotname = "wentao_",#出图同意带有这个前缀
plot = "bar",#出图形式为bar

#method_cv: 方差齐心方法选择,有两种方法:method_cv == "leveneTest",method_cv == "bartlett.test"
method_cv = "bartlett.test"
,
method_Mc = "Tukey",
sig_show = "abc"

04. 成图和差异表格列表欣赏

更正版函数

https://github.com/taowenmicro/easyMicrobiome

(0)

相关推荐

  • trendsceek || 识别基因空间表达趋势

    男, 一个长大了才会遇到的帅哥, 稳健,潇洒,大方,靠谱. 一段生信缘,一棵技能树. 生信技能树核心成员,单细胞天地特约撰稿人,简书创作者,单细胞数据科学家. Identification of sp ...

  • MPB:陈同等-ImageGP在微生物组可视化中的应用

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  • 差异分析完整解决方案升级版

    我看见过最全的差异分析教程,但是好像还没有最智能的,机械的差异分析教程.因为这些标准都是死的,我们完全可以使用if来解放我们的大脑. 之前我有一篇推送: R语言一键批量完成差异统计和可视化(https ...

  • EasyStat 差异分析完整解决方案

    (用这次的教程就可以了,之前我推动的教程可以都不用功看了,我会逐渐删除) 本次更新: 修改整个R包,包括包名:安装EasyStat包,本次安装包只要你可以用下载,应该可以安装成功.因为我已经将全部的依 ...

  • 差异分析完整解决方案:Easystat

    差异分析完整解决方案:Easystat 本次更新: 修改整个R包,包括包名: 安装EasyStat包,本次安装包只要你可以用下载,应该可以安装成功. 因为我已经将全部的依赖都写好了. 增加多组展示同一 ...

  • EasyStat_差异分析完整解决方案(2021.1)

    wentao 2021/11/02 本次更新关键词:显著性标记顺序按照丰度排布 EasyStat 使用指南 安装R包 library(devtools) remotes::install_github ...

  • 重磅!官方最新出台《“烂尾楼”整理处理办法》,提供完整解决方案!(全文 解读)

    来源:网络 [概述]"烂尾楼"一般怎么处理?很多情况下,都是走法院拍卖或者直接搁置不管,这种情况将有所改变,珠海市近期印发<珠海市"烂尾楼"整治处理办法& ...

  • 新格元方南:自动化的细胞分离和测序前完整解决方案是我们最核心的壁垒 | 专访

    对单细胞的 DNA 和 RNA 进行深度测序就能够以更高的分辨率.更全面地掌握细胞的功能,尤其解决复杂系统如肿瘤.神经系统和免疫系统的异质性问题. 传统的基因芯片或者二代测序技术(next-gener ...

  • 中考物理:功率(更正版)

    前几天推送的一篇物理功率内容,其中有一部分出现了错误,经过他人提示后发现已无法更改,鉴于只能修改几个错别字的情况,为避免误导大家,原文章已删除,今天重新推送一次. (1)输入功率,需要知道输入电压和输 ...

  • 黑河石友刘忠实精美藏石(更正版)

    点击上方bhmns111关注我们 特此更正 本公众号昨日所发<黑河石友刘忠实精美藏石>图片有误!由于操作失误,将水~自然老师的石头误编到了刘忠实老师的文章里.     今日重新发布,并向刘 ...

  • 嫌弃毫米波?高通已有完整解决方案,全球运营商都在拥抱它

    众所周知,自从5G技术方案中,有了毫米波与厘米波,且毫米波目前只在美国使用后,国内的网友就一直看不起毫米波,称下雨都影响效果,一片树叶就阻挡了. 特别是国网一些人认为Sub-6厘米波是我国自主研发的, ...