欢迎光临散文网 会员登陆 & 注册

TCGA-19-临床数据整理及人群分组

2023-08-16 22:42 作者:演绎我是动情的  | 我要投稿

代码解释:


# 07 miRNA差异表达

rm(list = ls())

# miRNA数据下载及整理

library(TCGAbiolinks)

library(limma)


# 查看有哪些分类数据 project="TCGA-CHOL"

getProjectSummary("TCGA-CHOL")


query <- GDCquery(project = 'TCGA-CHOL', 

           data.category = "Transcriptome Profiling", 

           data.type = "miRNA Expression Quantification", 

           experimental.strategy = "miRNA-Seq",

           workflow.type = "BCGSC miRNA Profiling")

GDCdownload(query)


expData<- GDCprepare(query = query) 

#读取下载的query,用GDCprepare函数以SummarizedExperiment形式读入rstudio


expData[1:4,1:4] # counts第二列,rpm第三列

#这个代码的用处就是提取前4行和前4列展示出来,没用

dim(expData)

#查看维度,没用的代码


expr <- expData[,seq(2,136,3)]

#看OneNote解释

dim(expr)


colnames(expr) <- substring(colnames(expr),12)  

# substr()需要指定stop值,substring()不需要

#提取列标题的12位及以后的字符串作为标题


expr <- data.frame(expData$miRNA_ID,expr)

#expData中提取出来的miRNA_ID列与expr数据框合并,重新命名为expr

names(expr)[1] <- 'id'

#把exper列名命名为id


#这样就得到未处理的counts矩阵



# 筛选

expr=as.matrix(expr)

#强制转为矩阵

rownames(expr)=expr[,1]

#第一列命名为行名

expr.matrix=expr[,2:ncol(expr)]

#提取除第一列以外的所有列,命名为expr.matrix

dimnames=list(rownames(expr.matrix),colnames(expr.matrix))

#定义一个列表 名为dimnames

data=matrix(as.numeric(as.matrix(expr.matrix)),nrow=nrow(expr.matrix),dimnames=dimnames)

#定义一个矩阵,名为data,强制转为数值型矩阵

data=avereps(data)

#avereps()函数:去重复:对于行上出现的相同基因,取平均

data=data[rowMeans(data)>0,]

#去除低表达基因,同一行上数据的平均值大于零的留下


dim(data)


data1 <- rbind(colnames(data),data)

#把列名作为第一行,命名为data1

write.table(data1, file="CHOL-miRNA-matrix.txt", sep="\t", quote=F, col.names=F)

#导出data1位txt文件,名称为CHOL-miRNA-matrix


rm(list = ls())



# 导入数据

rt <- read.table("CHOL-miRNA-matrix.txt",sep="\t",header=T,check.names=F)

 #读取文件数据入R,check.names=TRUE检查变量名在R中是否有效


#数据处理

rownames(rt) <- rt[,1]

 #把第一列作为行名

rt <- rt[,-1]

 #删除第一列

dim(rt)

 #返回维度信息


# 用substr函数在TCGA数据中提取样本信息

group <- factor(ifelse(as.integer(substr(colnames(rt),14,15))<10,'tumor','normal'),

        levels = c('normal','tumor'))

  #提取第14和15位,用来判断是正常组还是肿瘤组

table(group)

  #table()函数——向量内元素频数统计,本例题是提取group中的频数统计




# 差异性分析

library(edgeR)


logFC_cutoff=1

padj=0.05

#定义两个变量:logFC_cutoff=1判断差异有显著差异的依据, padj是调整后的p值,


dge <- DGEList(counts=rt,group=group)  #将数据打包为edgeR包识别的数据 group=group表示分类的因子变量是刚刚定义的分组变量

dge$samples$lib.size <- colSums(dge$counts) #colsums()函数——计算列求和  lib.size一个向量,表示每个样本的总计数。

dge <- calcNormFactors(dge)  #标准化,消除量纲的影响

design <- model.matrix(~0+factor(group)) #看onenote解释

colnames(design) <- c('normal','tumor')

rownames(design)<-colnames(dge)

colnames(design)<-levels(group)


#这一段代码的目的看onenote

dge <- estimateGLMCommonDisp(dge,design)

dge <- estimateGLMTrendedDisp(dge, design)

dge <- estimateGLMTagwiseDisp(dge, design)

fit <- glmFit(dge, design)

fit1 <- glmLRT(fit, contrast=c(-1,1)) 

DEG=topTags(fit1, n=nrow(rt))

DEG=as.data.frame(DEG)




# 输出有显著差异的结果

significant = DEG[(

 (DEG$FDR < padj) & (abs(DEG$logFC) > logFC_cutoff)

),] # 筛选显著差异的基因

write.table(significant, file="significant.xls",sep="\t",quote=F)


# 输出表达上调的结果

upregulation = DEG[(DEG$FDR < padj & (DEG$logFC>logFC_cutoff)),]

write.table(upregulation, file="upregulation.xls",sep="\t",quote=F)


# 输出表达下调的结果

downregulation = DEG[(DEG$FDR < padj & (DEG$logFC<(-logFC_cutoff))),]

write.table(downregulation, file="downregulation.xls",sep="\t",quote=F)




# 添加显著性标签

DEG$change <- factor(ifelse(DEG$PValue < padj & abs(DEG$logFC) > logFC_cutoff,

              ifelse(DEG$logFC > logFC_cutoff ,'UP','DOWN'),

              'NOT'))

#这个代码的目的是再DEG数据框中添加名称位change的列,用于显示基因表达是上调了下降了还是不变


# 输出结果

write.csv(DEG,file="miRNA-edgeR.csv")



# 结果可视化:火山图 and 热图

# ggplot2绘制火山图 volcano

library(ggplot2)

g <- ggplot(DEG,aes(logFC,-log10(as.numeric(FDR)),color=change))


g + geom_point()


g + geom_point(size = 1) + 

 labs(x = 'log2 Fold Change', y = '-log10 adjust p-value', title = 'volcano_plot') + 

 theme(plot.title = element_text(hjust = 0.5, size = 20,color = 'firebrick'), 

    panel.grid = element_blank(), 

    panel.background = element_rect(color = 'black', fill = 'transparent'), 

    legend.key = element_rect(fill = 'transparent')) + 

 geom_vline(xintercept = c(-logFC_cutoff, logFC_cutoff), lty = 2, color = 'black') + #添加阈值线

 geom_hline(yintercept = -log10(padj), lty = 2, color = 'black') 


library(ggrepel)# ggrepel包给点添加点标签的包

significant = subset(DEG,abs(logFC)>3 & -log10(as.numeric(FDR)) > 5)

#生成significant变量,里面的值决定了到底给哪些点添加标签

#geom_text_repel函数才是给点添加标签的函数


g + geom_point(size = 1) + 

 labs(x = 'log2 Fold Change', y = '-log10 adjust p-value', title = 'volcano_plot') + 

 theme(plot.title = element_text(hjust = 0.5, size = 20,color = 'firebrick'), 

    panel.grid = element_blank(), 

    panel.background = element_rect(color = 'black', fill = 'transparent'), 

    legend.key = element_rect(fill = 'transparent')) + 

 geom_vline(xintercept = c(-logFC_cutoff, logFC_cutoff), lty = 2, color = 'black') + #添加阈值线

 geom_hline(yintercept = -log10(padj), lty = 2, color = 'black') +

 geom_text_repel(data = significant,aes(label = rownames(significant)),

         max.overlaps = 10000, # 最大覆盖率,当点很多时,有些标记会被覆盖,调大该值则不被覆盖

         size=3,col = 'black')

#视频解释:【TCGA-09-miRNA差异表达】 【精准空降到 11:07】 https://www.bilibili.com/video/BV1Zv4y1J7D7/?share_source=copy_web&;vd_source=3d598f1156bea5867cef7412e80ded78&t=667


# 绘制热图heatmap

# df <- tibble::column_to_rownames(df,var = 'id')

pheatmap::pheatmap(rt, 

          #annotation_row=dfGene, # (可选)指定行分组文件

          #annotation_col=dfSample, # (可选)指定列分组文件

          show_colnames = TRUE, # 是否显示列名

          show_rownames=TRUE, # 是否显示行名

          fontsize=1, # 字体大小

          color = colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(50), # 指定热图的颜色

          #annotation_legend=TRUE, # 是否显示图例

          border_color=NA, # 边框颜色 NA表示没有

          scale="row", # 指定归一化的方式。"row"按行归一化,"column"按列归一化,"none"不处理

          cluster_rows = TRUE, # 是否对行聚类

          cluster_cols = TRUE # 是否对列聚类

)


rm(list = ls())


TCGA-19-临床数据整理及人群分组的评论 (共 条)

分享到微博请遵守国家法律