今天小编想通过该推文为大家介绍一下,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=T
GSEdata <- 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 Symbol
annotation <- 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 name
express <- 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)
我的盆友加油奥。。。。。。。。。。。。。。。。。。。。。。。,哈哈哈 ,叮叮叮
微信扫一扫
关注该公众号