美文网首页
CEO数据挖掘的常规套路

CEO数据挖掘的常规套路

作者: 养猪场小老板 | 来源:发表于2021-05-24 12:15 被阅读0次

    00_pre_install_R_package


    切换镜像

    options("repos"="https://mirrors.ustc.edu.cn/CRAN/")
    if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)
    options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")

    安装cran的R包

    cran_packages <- c('tidyr',
    'tibble',
    'dplyr',
    'stringr',
    'ggplot2',
    'ggpubr',
    'factoextra',
    'FactoMineR',
    'devtools',
    'patchwork')

    安装bioconductor的R包

    Biocductor_packages <- c('GEOquery',
    'hgu133plus2.db',
    'ggnewscale',
    "KEGG.db",
    "limma",
    "impute",
    "GSEABase",
    "GSVA",
    "clusterProfiler",
    "org.Hs.eg.db",
    "preprocessCore",
    "enrichplot",
    "ggplotify")

    循环语句安装cran的R包 #require就是加载的意思

    for (pkg in cran_packages){
    if (! require(pkg,character.only=T) ) {
    install.packages(pkg,ask = F,update = F)
    require(pkg,character.only=T)
    }
    }

    循环语句安装bioconductor的R包

    for (pkg in Biocductor_packages){
    if (! require(pkg,character.only=T) ) {
    BiocManager::install(pkg,ask = F,update = F)
    require(pkg,character.only=T)
    }
    }

    前面的所有提示和报错都先不要管。主要看这里

    for (pkg in c(Biocductor_packages,cran_packages)){
    require(pkg,character.only=T)
    }

    没有任何提示就是成功!

    这是github里面的包

    if(!require(AnnoProbe))devtools::install_local("./AnnoProbe-master.zip",upgrade = F)
    library(AnnoProbe)

    01_GEO表达矩阵和临床信息下载

    #数据下载
    rm(list = ls())
    options(stringsAsFactors = F)
    library(GEOquery)
    gse_number = "GSE56649"
    eSet <- getGEO(gse_number, #根据GSE编号下载数据
                   destdir = '.', 
                   getGPL = F)
    class(eSet)#查看一下eSet的类型
    length(eSet)#长度
    eSet = eSet[[1]]#扒掉列表成为表达矩阵
    class(eSet)#确认下类型
    
    #(1)提取表达矩阵exp
    exp <- exprs(eSet)#提取表达矩阵
    exp[1:4,1:4]#查看下数据的形式
    
    #表达数据如果是几百上千的话,是没有必要进行log的
    exp = log2(exp+1)#+1是以防原始数据有0的情况
    boxplot(exp)#箱式图查看下数据的是否大概一致
    #有离群数据记得去掉
    
    #(2)提取临床信息
    #提取临床信息只能用该函数
    pd <- pData(eSet)
    
    #(3)调整pd的行名顺序与exp列名完全一致
    #调整表达矩阵的列名和临床信息表格的行名(都是样本名)一一对应
    p = identical(rownames(pd),colnames(exp));p
    if(!p) exp = exp[,match(rownames(pd),colnames(exp))]
    #match(rownames(pd),colnames(exp))表示返回前者的元素在后者元素中的位置值 
    
    #(4)提取芯片平台编号
    #记住这里是用@,而不是$($提取的是pdata中的数据)
    gpl_number <- eSet@annotation
    save(gse_number,pd,exp,gpl_number,
         file = "step1output.Rdata")
    

    02_分组和注释

    # Group(实验分组)和ids(探针注释)
    rm(list = ls())
    
    #加载第一步的数据
    load(file = "step1output.Rdata")
    library(stringr)
    # 1.Group----每个数据的分组信息不一样,分为以下几种情况。
    #本次的芯片中只包含有两个组:患者组和对照组
    #产生分组的方法有多种,现在我们介绍三种,第一和第二种适合样本少的,
    #第三种利用关键字匹配分组适合所有
    
    
    # 第一类,有现成的可以用来分组的列
    if(F) Group = pd$`disease state:ch1` 
    
    #第二类,自己生成
    if(F){
      Group=c(rep("RA",times=13),
              rep("control",times=9))
    }
    #或者Group=rep(c("RA","control"),times = c(13,9))
    
    #第三类,匹配关键词,自行分类
    ##这种分组方式大力推荐,因为我们只要根据关键词提取信息,从而分组
    Group =ifelse(str_detect(pd$source_name_ch1,"control"),"control","RA")
    #该语句的意思是:如果在pd$source_name_ch1列中找到control的话就是T,
    #返回一个字符“control”#否则就返回“RA”
    
    
    #这丽需要非常注意
    #注意设置参考水平,指定levels,
    #注意:对照组在前,处理组在后#这和后面logFC中患者组/对照组有关
    
    Group = factor(Group,
                   levels = c("control","RA"))
    Group#和临川信息pd中确认一下是否一一对应
    
    
    
    
    # 注意levels与因子内容必须对应一致
    # Group = pd$`disease state:ch1`
    # Group = factor(Group,
    #                 levels = c("healthy control","rheumatoid arthritis"))
    
    
    
    #2.ids-----------------
    #GEO的ids注释有4种方法,第一种:利用GPL平台对应的R包(推荐)
    #第二种:读取GPL平台的soft文件,按列取子集
    
    
    #方法1 BioconductorR包(最常用):里面包含基因探针和gene名对应的情况
    gpl_number #找寻平台信息
    #通过平台信息,可以找寻到相对应的注释包
    #这里平台信息是GPL_570,对应的注释包为hgu133plus2.db,下面链接有多个平台对应的信息
    #http://www.bio-info-trainee.com/1399.html
    #这部分主要是把探针的ID切换成基因的ID,我一般喜欢用基因的entrez ID
    
    #获取有注释信息的芯片平台
    if(!require(hgu133plus2.db))BiocManager::install("hgu133plus2.db")
    library(hgu133plus2.db)
    ls("package:hgu133plus2.db")
    #用的是SYMBOL,代表就是基因名
    ids <- toTable(hgu133plus2SYMBOL)
    head(ids)
    
    
    # 方法2 读取GPL平台的soft文件,按列取子集
    ##https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL570
    if(F){
      #注:soft文件列名不统一,活学活用,有的GPL平台没有提供注释,如GPL16956
      a = getGEO(gpl_number,destdir = ".")
      b = a@dataTable@table
      colnames(b)
      ids2 = b[,c("ID","Gene Symbol")]
      colnames(ids2) = c("probe_id","symbol")
      ids2 = ids2[ids2$symbol!="" & !str_detect(ids2$symbol,"///"),]#去除空格和检测到带有///的基因名
    }
    # 方法3 官网下载,文件读取
    ##http://www.affymetrix.com/support/technical/byproduct.affx?product=hg-u133-plus
    # 方法4 自主注释 
    #https://mp.weixin.qq.com/s/mrtjpN8yDKUdCSvSUuUwcA
    save(exp,Group,ids,gse_number,file = "step2output.Rdata")
    

    03_PCA主成分分析和热图简介

    rm(list = ls()) 
    #加载前两步的数据
    load(file = "step1output.Rdata")
    load(file = "step2output.Rdata")
    #输入数据:exp和Group
    #Principal Component Analysis主成分分析
    #下面的链接讲了有关主成分分析的内容和R包的代码
    #http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/112-pca-principal-component-analysis-essentials
    #上图该网站中有多种示例数据和相关代码
    
    
    # 1.PCA 图----
    #转置t()
    #转换成数据框
    dat=as.data.frame(t(exp))
    
    library(FactoMineR)#FactoMineR:用于计算主成分方法;
    library(factoextra) #factoextra:用于提取,可视化和解释结果。
    dat.pca <- PCA(dat, graph = FALSE)
    pca_plot <- fviz_pca_ind(dat.pca,
                             geom.ind = "point", # show points only (nbut not "text")
                             col.ind = Group, # color by groups
                             palette = c("#00AFBB", "#E7B800"),
                             addEllipses = TRUE, # Concentration ellipses
                             legend.title = "Groups"
    )
    pca_plot#画图
    #保存图片
    ggsave(plot = pca_plot,
           filename = paste0(gse_number,"_PCA.png"))
    save(pca_plot,file = "pca_plot.Rdata")
    
    # 2.top 1000 sd 热图---- 
    cg=names(tail(sort(apply(exp,1,sd)),1000))
    n=exp[cg,]
    
    # 直接画热图,对比不鲜明
    library(pheatmap)
    annotation_col=data.frame(group=Group)
    rownames(annotation_col)=colnames(n) 
    pheatmap(n,
             show_colnames =F,
             show_rownames = F,
             annotation_col=annotation_col
    )
    
    # 用标准化的数据画热图,两种方法的比较:https://mp.weixin.qq.com/s/jW59ujbmsKcZ2_CM5qRuAg
    #
    
    ## 1.使用热图参数
    pheatmap(n,
             show_colnames =F,
             show_rownames = F,
             annotation_col=annotation_col,
             scale = "row",#画图数据进行标准化画图。按行进行标准化,牺牲了一行基因与另一行基因的比较,保存在不同样本间的比较,有利于热图的鲜明化
             breaks = seq(-3,3,length.out = 100)
    ) #breaks 参数解读在上面链接
    dev.off()
    
    ## 2.自行标准化再画热图
    n2 = t(scale(t(n)))#注意按列标准化,函数的限定
    pheatmap(n2,
             show_colnames =F,
             show_rownames = F,
             annotation_col=annotation_col,
             breaks = seq(-2,2,length.out = 100)
    )
    dev.off()
    
    # 关于scale的进一步探索:zz.scale.R
    
    # 3.相关性热图---- 
    
    pheatmap::pheatmap(cor(n2),
                       annotation_col = annotation_col
    )
    
    dev.off()
    
    # 关于相关性背后的故事:https://mp.weixin.qq.com/s/IqMW6Qjf64dn30F4RQg5kQ
    

    04_差异表达

    相关文章

      网友评论

          本文标题:CEO数据挖掘的常规套路

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