零基础入门转录组数据分析——基因Wilcoxon秩和检验

news2024/11/15 4:50:31

零基础入门转录组数据分析——基因Wilcoxon秩和检验

目录

  • 零基础入门转录组数据分析——基因Wilcoxon秩和检验
    • 1. 单基因Wilcoxon秩和检验的基础知识
    • 2. 基因Wilcoxon秩和检验(Rstudio)——代码实操
      • 2. 1 数据处理
      • 2. 2 基因Wilcoxon秩和检验
      • 2. 3 Wilcoxon秩和检验简单可视化



1. 单基因Wilcoxon秩和检验的基础知识

1.1 Wilcoxon秩和检验是什么?
Wilcoxon秩和检验(也称为Mann-Whitney U检验)是一种非参数检验,用于比较两个独立样本的中位数是否存在显著差异,这种检验不假设数据来自正态分布,因此非常适合于小样本或非正态分布的数据。

1.2 Wilcoxon秩和检验的假设?

  • 原假设 —— 两个样本的总体中位数相等
  • 备择假设 —— 两个样本的总体中位数不相等

1.3 p值的意义?
P值表示在零假设为真时,观察到当前或更极端结果的概率。通常,如果P值小于选定的显著性水平(如0.05),则拒绝原假设,认为两个总体的中位数存在显著差异。

1.4 Wilcoxon秩和检验和limma,DESeq2的区别是什么?
最主要的区别就在于Wilcoxon秩和检验不依赖于数据的分布形状,适用于提取出来小部分基因单独进行差异分析,而limma和DESeq2方法则是从宏观整体的层次来分析基因间的差异,会考虑基因彼此间的相互干扰。

综上所述: Wilcoxon秩和检验就是评估两组间基因表达中位值是否存在显著差异,适用于基因数目比较少的情况,例如:通过基因筛选之后仅剩10个左右基因的时候就可以用Wilcoxon秩和检验来比较组间差异了。

注意:做Wilcoxon秩和检验的时候如果数据中存在明显的异常值,需要先进行数据清洗或转换。



2. 基因Wilcoxon秩和检验(Rstudio)——代码实操

本项目以TCGA——肺腺癌为例展开分析
物种:人类(Homo sapiens)
R版本:4.2.2
R包:tidyverse, rstatix

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./20_Wilcoxon')){
  dir.create('./20_Wilcoxon')
} 
setwd('./20_Wilcoxon/') 

加载包:

library(rstatix)
library(tidyverse)

导入要分析的表达矩阵TrainRawData,并对TrainRawData的列名进行处理(这是因为在读入的时候系统会默认把样本id中的“-”替换成“.”,所以要给替换回去

TrainRawData <- read.csv("./data_fpkm.csv", row.names = 1, check.names = F)  # 行名为全部基因名,每列为样本名
colnames(TrainRawData) <- gsub('.', '-', colnames(TrainRawData), fixed = T)

TrainRawData如下图所示,行为基因名(symbol),列为样本名
在这里插入图片描述
导入分组信息表TrainGroup

TrainGroup <- read.csv("./data_group.csv", row.names = 1) # 为每个样本的分组信息(tumor和control)
colnames(TrainGroup) <- c('sample', 'group')

TrainGroup 如下图所示,第一列sample为样本名,第二列为样本对应的分组 (分组为二分类变量:disease和control)
在这里插入图片描述
导入要用于分析的基因HubGene (10个基因,这里用10个基因作为展示)

HubGene <- data.frame(symbol = c('VPS13D', 'MFF', 'ACSL1', 'VDAC1', 'PRELID1', 'BAK1',
                                 'CYCS', 'BCL2L10', 'MPV17L', 'PHB'))

HubGene 如下图所示,只有一列:10个基因的基因名
在这里插入图片描述
TrainRawData中取出10个基因对应的表达矩阵,并且与之前准备的分组信息表TrainGroup进行合并

TrainData <- TrainRawData[HubGene$symbol, ] %>% t() %>% as.data.frame()
TrainData <- merge(TrainGroup, TrainData, by.x = "sample", by.y = 'row.names')

TrainData 如下图所示,第一列为样本名,第二列为分组情况,后面的都是基因表达量。。
在这里插入图片描述

之后将TrainData 转成长格式数据,关于长宽数据

TrainData <- TrainData %>% 
  pivot_longer(
    cols = -c("sample", "group"),
    names_to = "symbol",
    values_to = "Expression"
  )

转换后的TrainData 如下图所示第一列为样本名,第二列是对应的样本分组,第三列为基因的名称,第四列为不同基因对应的表达量。
在这里插入图片描述

2. 2 基因Wilcoxon秩和检验

接下来用处理好的TrainData 进行Wilcoxon秩和检验

  • group_by(symbol) —— 是dplyr包中的一个函数,用于按symbol列对数据进行分组。这意味着接下来的操作(如Wilcoxon检验)将针对每个不同的基因独立进行。
  • wilcox_test(Expression ~ group) —— 是rstatix包中的一个函数,用于执行Wilcoxon秩和检验。这里,它比较了Expression(表达量)在不同group(组别)之间的差异。
  • adjust_pvalue(method = ‘fdr’) —— 是rstatix包中的一个函数,用于调整p值以控制假发现率(False Discovery Rate, FDR)。使用FDR方法(也称为Benjamini-Hochberg方法)来调整p值,以减少由于多重测试而产生的假阳性结果
WilcoxonResults <- TrainData%>%
  group_by(symbol)%>%
  wilcox_test(Expression ~ group)%>%
  adjust_pvalue(method = 'fdr')

WilcoxonResults 如下图所示,symbol为基因名称;n1和n2分别对应对照和疾病的样本数量;最关键的就是最后两列,p和p.adj对应的是wilcoxon的显著性结果。
(* 表明 p < 0.05,** 表明 p < 0.01, *** 表明 p < 0.001,ns表明没有显著差异)
注意:这里p和p.adj选一个即可,看个人需求

在这里插入图片描述

2. 3 Wilcoxon秩和检验简单可视化

接下来一步就是要对Wilcoxon秩和检验结果进行简单可视化,毕竟文字的展示效果不如图片更加直观。

ggplot(TrainData, aes(x = symbol, y = Expression, fill = group)) +
  stat_boxplot(geom = "errorbar",
               width = 0.1,
               position = position_dodge(0.9)) +
  geom_boxplot(aes(x = symbol, y = Expression, fill = group),
               width = 0.2,
               position = position_dodge(0.9), 
               outlier.shape = NA, 
               outlier.colour = NA)+ 
  scale_fill_manual(values = c('#355783', "gold"), name = "Group")+
  labs(title = "", x = "", y = "Expression", size = 20) +
  stat_compare_means(data = TrainData,
                     mapping = aes(group = group),
                     label = "p.signif",
                     method = 'wilcox.test',
                     paired = F) +
  theme_bw()+
  theme(plot.title = element_text(hjust = 0.5, colour = "black", face = "bold", size = 18),
        axis.text.x = element_text(angle = 45, hjust=1, colour = "black", face = "bold", size = 10), 
        axis.text.y = element_text(hjust = 0.5, colour ="black", face="bold", size=12), 
        axis.title.x = element_text(size = 16, face = "bold"),
        axis.title.y = element_text(size = 16, face = "bold"),
        legend.text = element_text(face = "bold", hjust = 0.5, colour = "black", size = 12),
        legend.title = element_text(face = "bold", size = 12),
        legend.position = "top",
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

Wilcoxon秩和检验结果如下图所示,横坐标为不同的基因名称,纵坐标为不同基因的表达水平,图中黄色的箱子表示疾病组,蓝色的箱子表示对照组,最上方的*表示显著性结果。
在这里插入图片描述



结语:

以上就是基因Wilcoxon秩和检验的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

如果觉得本教程对你有所帮助,希望广大学习者能够花点自己的小钱支持一下(点赞旁的打赏按钮)作者创作(可以的话一杯蜜雪奶茶即可),感谢大家的支持~~~~~~ ^_^ !!!

祝大家能够开心学习,轻松学习,在学习的路上少一些坎坷~~~

请添加图片描述


  • 目录部分跳转链接:零基础入门生信数据分析——导读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS学习笔记—①堆与栈

在嵌入式系统中&#xff0c;堆与栈通常表示操作系统对进程占用的两种管理方式&#xff0c;而RTOS中栈更为重要&#xff0c;每一个链路都要有自己的栈。因此对堆和栈的概念进行了些区分和了解。以下是自己学习总结的一些&#xff0c;如有不对的地方请指正&#xff1a; &#xf…

算法打卡 Day25(二叉树)-修剪二叉搜索树 + 将有序数组转换为二叉搜索树 + 把二叉搜索树转换为累加树

文章目录 Leetcode 669-修剪二叉搜索树题目描述解题思路 Leetcode 108-将有序数组转换为二叉搜索树题目描述解题思路 Leetcode 538-把二叉搜索树转换为累加树题目描述解题思路 Leetcode 669-修剪二叉搜索树 题目描述 https://leetcode.cn/problems/trim-a-binary-search-tree…

elementUI——checkbox复选框监听不到change事件,通过watch监听来解决——基础积累

今天在写后台管理系统的时候&#xff0c;遇到一个需求&#xff0c;就是要求监听复选框的change事件&#xff0c;场景就是&#xff1a;两个复选框互斥&#xff0c;且可以取消勾选。 就是这两个复选框可以同时都不勾选&#xff0c;如果勾选的话&#xff0c;另一个一定要取消勾选。…

​如何通过Kimi强化论文写作中的数据分析?

在学术研究领域&#xff0c;数据分析是验证假设、发现新知识和撰写高质量论文的关键环节。Kimi&#xff0c;作为一款先进的人工智能助手&#xff0c;能够在整个论文写作过程中提供支持&#xff0c;从文献综述到数据分析&#xff0c;再到最终的论文修订。本文将详细介绍如何将Ki…

OceanBase 的ODP OBproxy 的记录

OceanBase 的ODP的路由说明一、简述为什么使用ODP的原因 &#xff08;强一致性情况下&#xff09; 1.分布式数据库在SQL解析这块存在本地执行计划&#xff0c;远程执行计划&#xff0c;分布式执行计划。 本地执行计划&#xff1a;整个SQL的表都在session所在的Observer 节点上。…

ABAP 结构体变量的嵌套INCLUDE TYPE 和 INCLUDE STRUCTURE

文章目录 创建程序语法格式程序测试AS SPFLI_NAME2 RENAMING WITH SUFFIX _NAME2 后缀变量的结构程序结构类型嵌套表和结构字段类型TYPES嵌套类型程序 创建程序 语法格式 程序测试 AS SPFLI_NAME2 RENAMING WITH SUFFIX _NAME2 后缀 变量的结构 程序 *&------------------…

Java进阶13讲__第六讲

算法&#xff1a; 冒泡排序 选择排序 二分查找 1. 冒泡排序 1.1 定义 1.2 代码示例 Java业务逻辑-1(冒泡排序)-CSDN博客https://blog.csdn.net/XiaomeiGuiSnJs/article/details/140880229 2. 选择排序 2.1 定义 2.2 代码示例 package cn.hdc.itWork.d5.d2;import java.uti…

【C语言】详解数组

文章目录 前言一、数组的概念二、一维数组1.一维数组的创建2.一维数组的初始化3. 一维数组的使用4.一维数组在内存中的存储 三、二维数组1.二维数组的创建2. 二维数组的初始化3. 二维数组的使用4.二维数组在内存中的存储 前言 一、数组的概念&#xff08;数组是一组相同类型元素…

精准设计与高效开发:用六西格玛设计DFSS实现新能源汽车开发突破

快速变化的市场需求和激烈的竞争迫使制造企业不得不持续创新和优化产品开发流程。如何在保证产品质量的前提下&#xff0c;加快产品开发周期&#xff0c;成为许多企业亟待解决的问题。六西格玛中的DFSS&#xff08;Design for Six Sigma&#xff09;模型提供了一种系统的方法&a…

维信小程序禁止截屏/录屏

一、维信小程序禁止截屏/录屏 //录屏截屏,禁用wx.setVisualEffectOnCapture({visualEffect:hidden});wx.setVisualEffectOnCapture(Object object) 测试安卓手机&#xff1a; 用户截屏&#xff0c;被禁用 用户录屏&#xff0c;录制的是空白内容/黑色内容的视频。 二、微信小…

RS-FS-N01风速变送器简明教程(485通信类型变送器)

该文章仅供参考&#xff0c;编写人不对任何实验设备、人员及测量结果负责&#xff01;&#xff01;&#xff01; 文章主要介绍变送器的硬件连接、软件配置、数据读写以温湿度计算。 1 硬件连接 2 软件配置 将变送器硬件部分正确连接后 打开“485 参数配置工具.exe” 对风速…

hello树先生——红黑树

红黑树 一.什么是红黑树二.红黑树的实现1.创建树节点结构2.插入功能的实现 三.提供一些常见二叉树接口四.进行平衡测试 一.什么是红黑树 红黑树是一种自平衡的二叉搜索树&#xff0c;具有以下特性&#xff1a; 节点颜色&#xff1a;每个节点要么是红色&#xff0c;要么是黑色。…

从模型到实践:新时代【数学建模竞赛论文】的结构、规范与创新解析

目录 1. 数学建模竞赛论文的重要作用 1.1 论文是竞赛成果的书面形式 1.2 论文是评判参赛成绩的唯一依据 1.3 论文写作是科技论文写作的基本训练 1.4 数学建模竞赛论文的综合性 1.5 数学建模竞赛论文与学术研究的联系 1.6 数学建模竞赛论文的重要性在评委眼中 1.7 数学建…

Leetcode3248. 矩阵中的蛇

Every day a Leetcode 题目来源&#xff1a;3248. 矩阵中的蛇 解法1&#xff1a;模拟 遍历字符串数组 commands&#xff0c;模拟&#x1f40d;的移动过程。 如果最后&#x1f40d;的位置为 (i, j)&#xff0c;则编号为 (i * n) j。 代码&#xff1a; /** lc appleetcode…

[Hive]五、Hive 源码编译

G:\Bigdata\2.hive\大数据技术之Hive源码编译 第1章 部署Hadoop和Hive 1.1 版本测试 Hadoop3.3.6 和Hive3.1.3 运行hive客户端时报错: java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V 查看Ha…

计算机的错误计算(八十一)

摘要 讨论双曲正弦函数 sinh(x)的计算精度问题。 例1. 计算 sinh(312.08) . 若在Python下计算&#xff0c;则有&#xff1a; 若在Excel单元格中计算&#xff0c;则有&#xff1a; 事实上&#xff0c;16位的正确值是 0.1712347549914620e136&#xff08;ISRealsoft 提供&…

MLLM(一)| 文/图生视频任务大升级,BigModel 开源了视频模型CogVideoX

CogVideoX的体验地址&#xff1a;https://bigmodel.cn/console/trialcenter?modelCodecogvideox 自2021年起&#xff0c;智谱 AI 技术团队便开始着手布局包括 text-2-img、text-2-video、img-2-text、video-2-text 在内的多模态模型&#xff0c;并陆续研发并开源了CogView、Co…

0基础学习爬虫系列:Python环境搭建

1.背景 当前网络资源更新非常快&#xff0c;然后对应自己感兴趣的内容&#xff0c;每天盯着刷网站又太费时间。我在尝试借助Ai&#xff0c;搭建一套自己知识抓取更新提醒的系统&#xff0c;这样可以用极少的时间&#xff0c;关注到自己感兴趣的信息。 其实&#xff0c;这套逻辑…

C++使用日志库经验总结

1、log4cpp日志源文件路径设置 在 Visual Studio 中&#xff0c;C 项目的日志格式可以通过设置项目的属性来调整。如果你想要使用完整路径来显示诊断消息&#xff0c;可以在项目属性中的“C/C”选项卡下的“高级”属性页中找到“使用完整路径”&#xff08;/FC&#xff09;选项…

幂等的通用实现方案

文章目录 一、幂等的概念1.1 什么是幂等1.2 举个例子 二、幂等问题的解决方案2.1 准备&#xff1a;先添加2张表&#xff08;账户表、充值订单表&#xff09;2.2 方案1&#xff1a;update时将status0作为条件判断解决原理源码 2.3 方案2&#xff1a;乐观锁原理源码 2.4 方案3&am…