GEO数据挖掘生信GEO

12.GEO数据集的R语言差异分析和代码解析—1.数据下载和整理

2021-07-05  本文已影响0人  NiKasu

一、举例介绍

本节下载GSE1009数据集,使用limma包进行差异分析举例。

GSE1009  

样本量:共6个样本,其中3个为糖尿病肾病(DN)肾小球样本,另3个为正常肾小球样本。

使用芯片:Affymetrix Human Genome U95 Version 2 Array。

平台:GPL8300。

二、差异分析举例:

###第一步:GEO数据下载

>setwd("D:\\Rfile")  

#设置工作目录为D 盘的Rfile文件夹,大家可根据自己需要设置工作目录。

>rm(list = ls()) 

#清除所有变量

>options(stringsAsFactors=F)

#R导入数据时不自动转换为因子变量

##下面需要安装GEOquery包,用于下载GEO数据库的文件,已经安装GEOquery包不需要重复安装,直接调用GEOquery包。

#安装命令如下(本人已经安装了,所以只给出安装命令,去掉前面的注释符号即可安装):

#if (!requireNamespace("BiocManager", quietly = TRUE))

#install.packages("BiocManager")

#BiocManager::install("GEOquery")

#bioconductor中的包的安装命令经常更新,如果大家怕安装命令已经更新了,现在的命令不能运行,可以百度“GEOquerybioconductor”进入主页,下拉到安装命令处,将网站上的最新安装命令复制即可,这就是最新的安装命令,其他bioconductor中的包的安装是一样的道理。具体如下:

复制上面红色这段即可。

##下面是用GEOquery包下载数据

>library(GEOquery) 

#加载GEOquery包

>gset <- getGEO("GSE1009",destdir = ".",AnnotGPL = F,getGPL = F)                

#下载GSE1009表达矩阵文件并赋值给gset变量,destdir = "."表示下载后的文件放在什么地方,默认为当前工作目录。AnnotGPL = F表示不下载注释文件,getGPL = F表示不下载平台文件。我们这里为了下载速度,就设置成不下载平台文件和注释文件。

#下载好后打开D盘,可看到Rfile中有一个“GSE1009_series_matrix.txt.gz”文件。

>save(gset,file = 'GSE1009.gset.Rdata')

#将gset(也就是下载后的GSE1009矩阵文件)保存为R文件,文件名为“GSE1009.gset”方便以后调用。

>gset[["GSE1009_series_matrix.txt.gz"]]@annotation

#查看GSE1009_series_matrix矩阵的平台文件

>gpl <- getGEO('GPL8300', destdir=".")

#下载这个平台文件。用于后面基因symbol注释。

总体先看看上面数据下载代码:

代码运行过程及结果:

运行代码后Rfile中的文件:

###第二步:数据整理(将探针ID给为基因symbol)

>a=gset[[1]]

#提取gset中第一个元素(包含基因表达矩阵和注释信息),并赋值给变量a

>dat=exprs(a)

#提取a中的表达矩阵并赋值给dat,这时的表达矩阵的基因名字为探针ID

>head(dat)

#展示表达矩阵的前6行,看下数据是否经过log转换,一般数据在20以内,是经过log转换的,若有成百上千的数据,表示这个数据还需要进一步log处理。

>ex <- dat

qx <- as.numeric(quantile(ex, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))

LogC <- (qx[5] > 100) ||

  (qx[6]-qx[1] > 50 && qx[2] > 0) ||

  (qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)

if (LogC) { ex[which(ex <= 0)] <- NA

dat <- log2(ex)

print("log2 transform finished")}else{print("log2 transform not needed")}

#也可以输入上面这段代码,如果数据已经经log后,显示log2 transform not needed;如果数据没有尽行log,需要log程序按照代码尽行log转换,完成后显示log2 transform finished。

再看看转换后的数据:

不是成千上百的啦。

>pd=pData(a)

#查看a的临床信息,为后面选择用于分组的变量做准备

>View(pd)

#查看pd

本例中pd共有26个变量(未完全展示),我们可以看到只有title下的字段可以分为正常、疾病,其余变量下的字段都是一样的,所以我们选择title字段用于后续分组。

Title变量中的记录为control 1a....Diabetes 1a.......,中间用空格分割,我们需要提取出Control和Diabetes作为分组,所以需要用字符分割包来实现。

##安装字符分割包stringr包,命令如下,已经安装过的可以直接调用,不用重复安装。

#install.packages("stringr")

>library(stringr)

#调用stringr包

>group_list=str_split(pd$title,' ',simplify = T)[,1]

#把pd中title变量的字段,按照空格分割,为了给大家展示,我们先运行分割代码,分割后如下图所示,所以我们选择分割后的第一列即为分组状态

>table(group_list)

#计数每一组个数

>gpl1<-Table(gpl)

>save(gpl1,file = 'gpl1.Rdata')

#我们将平台文件转为list格式,并赋值给gpl1,将gpl1保存为R文件,方便以后调用。

>colnames(Table(gpl))

#查看平台文件的列名,我们看到有ID和gene symbol,记住gene symbol在第几列,我们这里在第11列。

>View(gpl1)

#再了解一下平台文件的数据,当然这里大家可以直接选择gene symbol字段也行,主要了解一下symbol中基因symbol值是否只有一个。

我们这里的gene symbol字段中的symbol,有的基因就不止一个名称,///后面有重名,我们需要第一个名字,所以需要用字符分割包再处理一下,原理同上面处理title一样。

>gpl1$`Gene Symbol`=str_split(gpl1[,11],'///',simplify = T)[,1]

现在是不是变成唯一啦。

>probe2symbol_df<-gpl1[,c(1,11)]

#提取平台文件gpl1中的ID和gene symbol,并赋值给probe2symbol_df

>colnames(probe2symbol_df)=c('probe_id','symbol')

#将列名改为probe_id和symbol

#这两步是因为我懒,不想再调整代码,为了方便后面代码运行,我改的,大家也可以不改。

>length(unique(probe2symbol_df$symbol))

#查看symbol为唯一值的个数

>table(sort(table(probe2symbol_df$symbol)))

#查看每个基因出现n次的个数,我们可以看到,symbol出现一次的基因有7050个,出现2次有1493个。。。

>ids=probe2symbol_df[probe2symbol_df$symbol != '',]

#去掉没有注释symbol的探针(其实这里没有注释的探针数量即为上面出现次数最多的基因440,也就是说有440个探针没有symbol)

>ids=probe2symbol_df[probe2symbol_df$probe_id %in%  rownames(dat),]   

##%in%用于判断是否匹配,

#注意这里dat是gset表达矩阵的数据,这一步就是把平台文件的ID和矩阵中的ID匹配。

>dat=dat[ids$probe_id,]

#取表达矩阵中可以与探针名匹配的那些,去掉无法匹配的表达数据

>ids$mean=apply(dat,1,mean)  

#ids新建mean这一列,列名为mean,同时对dat这个矩阵按行操作,取每一行(即每个样本在这个探针上的)的均值,将结果给到mean这一列的每一行,这里也可以改为中位值,median.

>ids=ids[order(ids$symbol,ids$mean,decreasing = T),]    

#即先按symbol排序,相同的symbol再按照均值从大到小排列,方便后续保留第一个值。

>ids=ids[!duplicated(ids$symbol),]  

#将symbol这一列取出重复项,'!'为否,即取出不重复的项,去除重复的gene

#取median的话,这样就保留每个基因最大表达量结果.最后得到n个基因。

>dat=dat[ids$probe_id,]

#新的ids取出probe_id这一列,将dat按照取出的这一列,用他们的每一行组成一个新的dat

>rownames(dat)=ids$symbol  

#把ids的symbol这一列中的每一行给dat作为dat的行名

>View(dat)

现在就得到行名为基因名,列名为样本名字的矩阵啦。

>dat<-dat[-9173,]

但是我们看到矩阵最后一行,是没有symbol名字的,我们把他去掉,数字自己更改。

>save(dat,group_list,file = 'GSE1009.Rdata')

>write.csv(dat,file="GSE1009expressionmetrix_GSE.csv")

#最后我们把结果保存。下一节会讲解差异分析。

现在看看,整体代码如下:

运行后的Rfile中的文件如下:

整理好的数据如下:

上一篇下一篇

猜你喜欢

热点阅读