今天小编想通过该推文为大家介绍一下,GEO数据集下载和处理,对处理后的表达矩阵利用limma包进行差异分析,非常适合小白,有需要的小伙伴可以借鉴学习,接下来小编开始今天的分享内容。
安装需要的R包
BiocManager::install("GEOquery")install.packages("tidyverse")install.packages("ggplot2")BiocManager::install("sva")BiocManager::install("limma")BiocManager::install("preprocessCore")
2.加载需要的R包library(GEOquery)library(tidyverse)library(ggplot2)library(sva)library(preprocessCore)library(limma)
3.GEO数据查询
小编一般通过两种方法进行相关疾病数据查询,第一种方法是通过NCBI GEO DataSets 数据库下载,可以直接输入想查询的疾病名称或者缩写就可以进行搜索获得相应的数据,网址:https://www.ncbi.nlm.nih.gov/gds
第二种方法通过已发表的文献来查询相关疾病的GEO ID,通过PubMed来查询,只需要输入相关疾病关键字和GEO就可以搜索到相关文章和GEO ID,网址:https://pubmed.ncbi.nlm.nih.gov/
4. GSE1919 RA数据集下载与处理
#通过GSE1919 这个GEO ID直接进行数据搜索,查看数据详情,主要查看样本信息,可以看到一共有15个样本。
#点击Analyze with GEO2R 查看样本信息,5个正常样本,5个OA样本,5个RA样本。
#数据下载,只下载表达矩阵参数:GSEMatrix=TGSEdata <- getGEO("GSE1919", GSEMatrix=T, AnnotGPL=FALSE)eset <- GSEdata[[1]]#提取表达矩阵,通过exprs函数提取,行名为探针ID,列名为样本名exprSet <- as.data.frame(exprs(eset))# 提取GSM ID作为样品名,pData函数来获取样本信息GSMID <- pData(eset)[,c(1,2,8,10,12)]#利用fData函数提取基因注释信息annotation<-fData(eset)[,c(1,11,12)]#有些探针组对应多个基因,使用“///”分割,保留第一个基因annotation[,2]<-data.frame(sapply(annotation[,2],function(x) unlist(strsplit(x,'///'))[1]),stringsAsFactors = F)[,1]annotation[,3]<-data.frame(sapply(annotation[,3],function(x) unlist(strsplit(x,'///'))[1]),stringsAsFactors = F)[,1]# 把整理好的探针组ID、Gene symbol、ENTREZ ID对应关系保存到文件里colnames(annotation) <- c("probe_id", "gsym", "entrez_id")write.csv(annotation, "gplTOgene.csv", row.names = F)#把表达矩阵的探针ID换成Gene Symbolannotation <- read.csv("gplTOgene.csv")#将探针信息和表达矩阵合并exprSet$probe_id <- rownames(exprSet)express <- merge(x = exprSet, y = annotation[,c(1:2)], by = "probe_id", all.x = T)#去除probe_id这列信息express$probe_id <- NULL# 有些gene对应多个探针组,此处保留其中表达量最大值rowMeans <- apply(express, 1, function(x) mean(as.numeric(x), na.rm = T))express <- express[order(rowMeans, decreasing =T),]express <- express[!duplicated(express[, ncol(express)]),] #express的最后一列为gene nameexpress <- na.omit(express)#将最后一列作为行名rownames(express) <- express[,ncol(express)]#删除最后一列express <- express[,-(ncol(express))]#筛选正常样本和RA样本表达矩阵,去除了OA样本。GSE1919<-select(express,-c("GSM34393","GSM34394","GSM34395","GSM34396","GSM34397"))
5.limma包进行差异分析GSE1919<-log2(GSE1919+1)GSE1919.norm <- normalize.quantiles(as.matrix(GSE1919))colnames(GSE1919.norm) <- colnames(GSE1919)rownames(GSE1919.norm) <- rownames(GSE1919)group <- rep(c("normal","RA"), times=c(5,5))design <- model.matrix(~0+factor(group))colnames(design) <- levels(factor(group))rownames(design) <- colnames(GSE1919.norm)contrast.matrix <- makeContrasts(paste0(unique(group),collapse = "-"), levels = design)fit <- lmFit(GSE1919.norm,design)fit2 <- contrasts.fit(fit,contrast.matrix)fit2 <- eBayes(fit2)temp <- topTable(fit2,coef = 1,n=Inf,sort.by="P")DEG <- na.omit(temp)DEG$symbol <- rownames(DEG)write.table(DEG, "normal_RA_DEG.txt",sep = '\t', quote = FALSE, col.names = T, row.names = FALSE)
我的盆友加油奥。。。。。。。。。。。。。。。。。。。。。。。,哈哈哈 ,叮叮叮
微信扫一扫
关注该公众号