临床信息去冗余 临床数据处理分组不同的GSE数据集有不同的临床信息,不同的分组技巧

news2024/12/25 13:46:22

最近,我发现学徒在学习GEO数据挖掘的过程中,遇到了第一个也是至关重要的一个难题就是对下载后的数据集进行合适的分组,因为只有对样本进行合适的分组,才有可能得到我们想要的信息。但是不同的GSE数据集有不同的临床信息,那么我们应该挑选合适的临床信息来进行分组呢? 这里面涉及到两个问题,首先是能否看懂数据集配套的文章,从而达到正确的生物学意义的分组,其次能否通过R代码实现这个分组。同样的我也是安排学徒完成了部分任务并且总结出来了! 下面看学徒的表演(PS: 图片较多的推文,排版真的是吓死人!)

Jimmy大神怎么说过,只有多做、多错,才能真正的掌握。所以下面通过几个实战来说明。

  1. 首先是通过对一篇文献Identification of potential core genes in triple negative breast cancer using bioinformatics analysis所用到的三个TNBC(Triple-Negative Breast Cancer)三阴性乳腺癌的三个数据集:GSE38959、GSE45827以及GSE62194进行分组,首先对GSE38959进行分析。
library(GEOquery)
# 这个包需要注意两个配置,一般来说自动化的配置是足够的。
#Setting options('download.file.method.GEOquery'='auto')
#Setting options('GEOquery.inmemory.gpl'=FALSE)
gset <- getGEO('GSE38959', destdir=".",
              AnnotGPL = F,     ## 注释文件
              getGPL = F)       ## 平台文件

class(gset)  #查看数据类型
length(gset)  #
class(gset[[1]])
# 因为这个GEO数据集只有一个GPL平台,所以下载到的是一个含有一个元素的list
a=gset[[1]] #
dat=exprs(a) #a现在是一个对象,取a这个对象通过看说明书知道要用exprs这个函数
dim(dat)#看一下dat这个矩阵的维度
dat[1:4,1:4] #查看dat这个矩阵的1至4行和1至4列,逗号前为行,逗号后为列
pd=pData(a) #通过查看说明书知道取对象a里的临床信息用pData

复制

pd就是这个数据集的临床信息,查看后如下

会发现有些信息是冗余的,有些是有效信息可以用来分组,但是表型记录太多,看起来会混淆,所以需要去除那些冗余信息,就是在所有样本里面表型记录都一致的列。如何去冗余,见原文对表型数据框进行去冗余。

阅读文章后发现原文把样本分为2组:肿瘤与正常,而且总共只有43个样本,而临床信息有47个样本,说明有效信息列含有3个或3个以上元素,可以再缩小范围。(注意!如果样本数刚好去冗余就行!)

pd1=pd[,apply(pd, 2, function(x){
length(unique(x))>2})]  #缩小范围
dim(pd1)
#[1] 47  9

复制

发现范围已经缩小很多。对数据框再用apply循环去查找文章作者是用哪一列来分组的

apply(pd1,2,table)

复制

通过循环,就可以清楚的知道该用哪一列来进行分组啦

然后是搜索关键字进行分组

TNBC=rownames(pd1[grepl('triple negative breast cancer cells',as.character(pd$`cell type:ch1`)),]) #肿瘤组
NOR=rownames(pd1[grepl('mammary gland ductal cells',as.character(pd$`cell type:ch1`)),]) #正常组

dat=dat[,c(TNBC,NOR)] #对表达矩阵取子集
group_list=c(rep('TNBC',length(TNBC)) ,
         rep('NOR',length(NOR))) #分组信息
table(group_list)
#group_list
#NOR TNBC 
#13   30 

复制


第二个数据集GSE45827同样的方法,重复的地方不赘述,从有差异的地方开始。

文中为了2组,用了52个样本。

然后是搜索关键字进行分组

TNBC=rownames(pd[grepl('Human Basal Tumor Sample',as.character(pd$source_name_ch1)),]) #肿瘤组
NOR=rownames(pd[grepl('Human Normal',as.character(pd$source_name_ch1)),]) #正常组

dat=dat[,c(TNBC,NOR)]  
group_list=c(rep('TNBC',length(TNBC)),
         rep('NOR',length(NOR)))  #分组信息

table(group_list)
#group_list
#NOR TNBC 
# 11   41

复制

第三个数据集同理


2.选取OTSCC(Oral Tongue Squamous Cell Carcinoma)口腔舌鳞癌Integrative analysis of gene expression profiles reveals distinct molecular characteristics in oral tongue squamous cell carcinoma的GSE13601, GSE31056 and GSE78060三个数据集

这里主要说一下GSE31056这一个数据集,需要一定的背景知识与细心才能正常分组,原文里

如果用我们之前的方法找是找不到的,因为细心点你会发现GSE给的位置不止tongue,还有mouth等,而文章只需要tongue。所以我们需要对数据集取子集。

pd1=pd[,apply(pd, 2, function(x){
length(unique(x))>1})]
pd1=pd1[grepl('tongue',as.character(pd$characteristics_ch1.2)),]
apply(pd1,2,table)

复制

根据生物学相关知识,margin其实就属于normal,所以就找出了分组。

所以可以看到生物学知识多么重要:没有生物学背景的数据分析很危险

TU=rownames(pd1[grepl('tumor',as.character(pd1$`site:ch1`)),]) #肿瘤
NOR=rownames(pd1[grepl('margin',as.character(pd1$`site:ch1`)),])#正常
dat=dat[,c(TU,NOR)]#取子集
group_list=c(rep('TU',length(TU)), #分组信息
         rep('NOR',length(NOR)))
         table(group_list)
          #group_list
          #NOR  TU 
          # 39  12 

复制


3.分析关于ccRCC (clear cell renal cell carcinoma)肾透明细胞癌的一个GSE子集GSE53757

下载数据、提取表达矩阵与临床信息方法与前面一直,这里就不赘述,也是从有差异的地方开始。这里文章作者只需要第三期的正常与肿瘤组的样本

table(pd$`tissue:ch1`)
table(pd$`tumor stage:ch1`)
table(pd$source_name_ch1)

复制

通过table函数,我们看到总共144个样本,其中有72个正常与72个肿瘤样本;第三期肿瘤和正常样本总各有14个,下面我们就需要提取我们需要的数据

patient_t = pd[pd$`tissue:ch1`=='clear cell renal cell carcinoma' & 
 pd$`tumor stage:ch1`=='stage 3', ] #通过向量取交集的方式来取
patient_n=pd[pd$source_name_ch1=='normal match to Stage 3 ccRCC',]

colnames(dat)=as.character(pd[,1]) #表达矩阵的列名就是临床信息的第一列
dat=dat[,c(patient_t[,1],patient_n[,1])]#取子集
group_list=rep(c('ccRCC','normal'),each=14) #分组信息
table(group_list)
#group_list
#ccRCC normal 
#14     14 

复制


总结一下,我们可以根据自己的需求选取合适的代码去进行有效的分组,在不同的情况下选取最合适当下的方法,方便自己去做后续的数据分析。

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

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

相关文章

SpringCloud全系列知识(4)——统一网关Gateway

统一网关Gateway 一 认识网关 1.网关的功能 1.身份认证和权限校验 2.服务路由&#xff0c;负载均衡 3.请求限流 2.技术实现 Gatewayzuul 二 Gateway的使用 1.搭建网关服务 1.创建新的Module,引入 Gateway 和 Nacos 服务发现依赖。 <!--nacos服务发现依赖-->…

天宇优配|研判明年下半年投资机会或更大 险资看好“安全”与“发展”

上海证券报记者昨日获悉&#xff0c;多家稳妥资管公司已经拟定2023年出资战略&#xff0c;跟着本年以来多项稳经济方针逐步落地&#xff0c;险资遍及看好下一年经济复苏带来的商场出资时机。 权益出资方面&#xff0c;险资以为&#xff0c;当时股票商场估值处于前史较低水平&am…

Java语言有多少优势(总结版)

现在有越来越多的新技术工具、新语言涌现&#xff0c;面对林林总总的语言&#xff0c;总会有人问&#xff1a; 这么多语言应该先学哪一种&#xff1f; 什么语言值得我们长时间地学习&#xff1f; 学完之后职业发展前景大吗&#xff1f; 那么&#xff0c;我给出的答案是Java …

C++手敲Roberts_Prewitt_Sobel实现阈值分割

使用OPENCV,编写代码&#xff0c;学习图像二值化算法&#xff0c;以及边缘检测算法&#xff0c;进行图像的分割。 下面主要介绍Robert算子的实现过程&#xff1a; ①任务分析 调入并显示图像&#xff1b;使用Roberts 算子对图像进行边缘检测处理&#xff1b; Roberts 算子为…

【Scala专栏】字符串与集合

本文索引一、String/StringBuilder二、Array三、List四、Set五、Map六、TupleScala中的字符串在本质上就是Java的字符串String&#xff0c; 所以在用法上除了要符合Scala的语法以外&#xff0c;其他方面是如出一辙的。   Scala中的集合分为可变和不可变&#xff0c;默认声明…

内核编译 --- 链接器

先回顾一下编译知识 将一个程序的编译分为两个大的阶段&#xff1a;编译阶段和链接阶段 编译阶段又分为三个步骤&#xff1a;预编译&#xff0c;编译&#xff08;此编译和上面程序的编译不是同一个意思… 上面那个是指宽泛的编译&#xff09;和汇编 编译阶段经过预编译、编译…

笔记 vue3如何引入iconfont

本次采用的免费字体图标是iconfont 1、点我进入官网 2、具体流程 1、 需要什么图标在上面搜索框查找&#xff0c;然后加入购物车&#xff0c;选完后再点右上角的购物车 2、添加到项目中&#xff0c;有项目就选项目添加&#xff0c;没有就创建项目 3、确定后进入你的项目(可以…

契约测试理论篇

契约测试理论篇 目录契约测试理论篇什么是契约测试契约测试存在一些的问题契约测试的主要实践总结随着 Web 系统的大规模发展&#xff0c;Web API 已经成为了一种广泛使用的技术&#xff0c;再加上微服务和云系统的普及&#xff0c;Web API 的数量呈几何增长。比如在一个大型 W…

pandas 将一行拆分为多行,将多行合并为一行

需求描述 在今天的数据需求&#xff0c;现在要统计各个场景下的类目种类数&#xff0c;并列出对应都有哪些类目。 现在面临的问题是&#xff1a;每个客户的应用场景不同&#xff0c;购买的类目也有多种。 &#x1f39e;&#x1f39e;&#x1f39e;&#x1f39e;&#x1f39e;&…

postgres源码解析38 表创建执行全流程梳理--4

本文讲解非系统表的创建逻辑&#xff08;[<fontcolor0000dd>普通表和索引表]&#xff09;&#xff0c;其入口函数为heap_create&#xff0c;内部公共接口函数为RelationBuildLocalRelation和RelationCreateStorage相关知识回顾见&#xff1a; postgres源码解析38 表创建执…

宝宝入托,爸妈要避开这5种心态

孩子入托&#xff0c;父母也要做好心理准备&#xff0c;尤其需要避免以下5种常见的、不良心理状态&#xff0c;否则会加重孩子入托的困难度。 01.“生离死别式”的入托状态 即每次送孩子入园&#xff0c;就像一场生离死别。宝宝屋里哭&#xff0c;家长屋外哭&#xff0c;最后多…

大数据编程实验四:SparkStreaming编程

大数据编程实验四&#xff1a;SparkStreaming编程 文章目录大数据编程实验四&#xff1a;SparkStreaming编程一、实验目的与要求二、实验内容三、实验步骤1、利用Spark Streaming对不同类型数据源的数据进行处理2、完成DStream的两种有状态转换操作3、完成把DStream的数据输出保…

推荐一个对pytorch代码详细注释的github项目

今天在无意间找一个pytorch代码和注释的Github项目。 先上项目&#xff1a; https://github.com/labmlai/annotated_deep_learning_paper_implementations 这个项目还有个网站&#xff0c;地址&#xff1a;https://nn.labml.ai/ 这个项目将论文和pytorch代码结合起来&#xff…

jsp源码商城系统Myeclipse开发mysql数据库servlet开发java编程计算机网页项目

一、源码特点 JSP 源码商城系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用serlvetdaobean mvc 模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

想学习如何把excel图片转表格?1分钟教会你图片转表格怎么转

应该有不少小伙伴接收过上司或领导以图片格式发送过来的excel表格吧&#xff1f;并且还会要求我们将里面的内容整理为电子档&#xff0c;便于后期的内容编辑以及数据修改。 而当你们收到这种任务时&#xff0c;是怎么去操作的呢&#xff1f;是不是大部分人会选择手动重新制作&a…

【数据可视化】第四章—— 基于pandas的数据可视化(pandas数据结构)

文章目录前言1. Pandas库的引用2. Pandas库的数据类型2.1 Series类型2.2 Series创建方式2.3 Series类型的基本操作2.3.1 Series类型的切片和索引2.3.2 Series类型的对齐操作2.3.3 Series类型的name属性2.3.4 Series类型的修改2.4 DataFrame类型2.5 DataFrame类型创建2.6 DataFr…

毕设选题推荐基于python的django框架医院预约挂号系统

精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; Java实战项目专栏 Python实…

公网SSH远程连接内网Ubuntu主机【cpolar内网穿透】

SSH为建立在应用层基础上的安全协议&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。但在没有公网IP的环境下&#xff0c;只能在同个局域网下远程。 本篇教程主要实现通过内网穿透&#xff0c;在公网环境下SSH远程登录内网的Ubuntu主机&#xff0c;突破局域网的…

manjaro gnome 记录 3 配置国内镜像源

manjaro gnome 记录 3 配置国内镜像源初manjaro 记录 3 配置国内镜像源更改这个文件设置源初 希望能写一些简单的教程和案例分享给需要的人 manjaro 记录 3 配置国内镜像源 打开图像界面的软件管理&#xff0c;点击右上角&#xff1a;三个点的图标 点击首选项 输入管理员密…

Day17-购物车页面-收获地址-初步封装my-address组件

1.创建收货地址组件&#xff08;my-address&#xff09; 我的操作&#xff1a; 1>在uni_modules文件夹右键新建一个组件 2>还需要自己补全代码 1>和2>的阶段效果图&#xff1a; my-address组件已经被渲染成功了。 *********************************************…