美文网首页
对TNBC做GEO数据挖掘

对TNBC做GEO数据挖掘

作者: Forest_Lee | 来源:发表于2019-04-09 15:50 被阅读0次

原文名称:Identification of Key Genes and Pathways in Triple-Negative Breast Cancer by Integrated Bioinformatics Analysis
GEO编号:GSE76275

rm(list = ls()) 
options()$repos #更改镜像
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options()$BioC_mirror
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))

## 下载GEO数据
library(GEOquery) #需提前安装
gset <- getGEO('GSE76275', destdir=".",
               AnnotGPL = F,     ## 注释文件
               getGPL = F)       ## 平台文件 由于我这边下载GPL总是报错,故F,后面另下载。

gset <- gset[[1]] #降级处理
exprSet <- exprs(gset) #获取表达矩阵
dim(exprSet)
pdata <- pData(gset) #获取样本信息
colnames(pdata)
group_list <- pdata[,67] #通过观察得知该分组信息在pdata的第67列,提取出来
table(group_list) # 对group_list进行统计,有67个not TN,198个TN
NOT_TN_expr <- exprSet[,grep("not TN",group_list)] #根据group_list的分组把not TN的表达矩阵提取出来
TN_expr     = exprSet[, !(colnames(exprSet) %in% colnames(NOT_TN_expr))] #根据group_list的分组把TN的表达矩阵提取出来
dim(NOT_TN_expr)
dim(TN_expr)
exprSet <- cbind(NOT_TN_expr,TN_expr) #将两者重新合并,得到的是顺序排列的表达矩阵 此表达矩阵原本就按照先not TN,后TN的顺序排列,这一步骤是为了规范化,对无序的表达矩阵同样适用
group_list = c(rep('not_TN',ncol(NOT_TN_expr)), 
               rep('TN', ncol(TN_expr))) #在排好序的表达矩阵的基础上,对group_list进行排序 注意理解 两组无序的数据通过table等使之有序
table(group_list)
save(exprSet,group_list,file = "exprSet_by_group.Rdata") #保存排好序的表达矩阵和分组信息
load("exprSet_by_group.Rdata") #加载

GPL570 <- getGEO("GPL570",destdir = ".") #下载注释信息
GPL570_a <- Table(GPL570) #提取注释信息
GPL570_b <- GPL570_a[,c(1,11)] #通过观察 第一列ID和第11列gene symbol为我们所需 提取出来
ids = GPL570_b[GPL570_b[,2] != '',] # 去除空白的基因名 留下的数据赋值给ids
dim(ids)

# 部分探针对应多个基因,需要将其提取出来
library(plyr)
a <- strsplit(as.character(ids[,2]),"///") #将基因用///分割
tmp <- mapply(cbind, ids[,1],a) #分割后的基因与探针重新合并 成三列
df <- ldply(tmp,data.frame) #将tmp转化为数据框
ID2gene <- df[,2:3] #二选一 已经删除未被注释的ID
save(ID2gene,file="ID2gene.Rdata") #保存
load("ID2gene.Rdata")

## 将表达矩阵中未被注释的探针去除
exprSet <- exprSet[row.names(exprSet)%in%ID2gene[,1],] #对两者进行匹配
ID2gene <- ID2gene[match(rownames(exprSet),ID2gene[,1]),]
colnames(ID2gene) <- c("id","gene") #修改ID2gene的列名
dim(exprSet)
dim(ID2gene) #两者列数相同

tail(sort(table(ID2gene$gene))) # 同一个基因存在不同的表达量,我们需要对其进行筛选,一般只保留最大值
{
  MAX = by(exprSet, ID2gene[,2], 
           function(x) rownames(x)[ which.max(rowMeans(x))])
  MAX = as.character(MAX)    
  exprSet = exprSet[rownames(exprSet) %in% MAX,]  #筛选出最大值的表达矩阵
  rownames( exprSet ) = ID2gene[ match( rownames( exprSet ), ID2gene[ , 1 ] ), 2 ]
}
dim(exprSet)
exprSet[1:5,1:5]  
save(exprSet, group_list, file = 'finalSet.Rdata')  ## 数据调整全部完成,保存最终数据

## 做PCA分析
load("finalSet.Rdata")
library(ggfortify) #加载R包,需提前安装
data <- as.data.frame(t(exprSet)) #行太大,不要View
dim(data)
data$group <- group_list #给data加列
png("pca_plot.png",res=100)
autoplot(prcomp(data[, 1:(ncol(data)-1)]), data = data, colour = 'group') + theme_bw() 
dev.off() ## 保存png图,完成PCA分析,可以查看一下png

## 用limma包做差异分析
library(limma)
design <- model.matrix(~0+factor(group_list))
colnames(design) <- levels(factor(group_list))
row.names(design) <- colnames(exprSet)
design
contrast.matrix <- makeContrasts("TN-not_TN", levels = design) 
contrast.matrix
load("ID2gene.Rdata")
{
  fit <- lmFit(exprSet, design)  
  fit2 <- contrasts.fit(fit, contrast.matrix)  
  fit2 <- eBayes( fit2 )   ## Empirical Bayes Statistics for Differential Expression
  nrDEG = topTable( fit2, coef = 1, n = Inf ) #产生差异表达矩阵
  write.table( nrDEG, file = "nrDEG.out")
}
head(nrDEG)

## 之后可做热图,可画火山图,可行注释

参考来源:生信技能树

友情链接:

课程分享
生信技能树全球公益巡讲
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
B站公益74小时生信工程师教学视频合辑
https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
招学徒:
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

欢迎关注公众号:青岛生信菜鸟团

相关文章

网友评论

      本文标题:对TNBC做GEO数据挖掘

      本文链接:https://www.haomeiwen.com/subject/iixiiqtx.html