赞
踩
title: “Biotrainee Note7 GEO Entry Level”
author: “yuluyang”
date: “2024-03-15”
生信技能树数据挖掘课程笔记~小洁老师授课
不同数据库来源的数据读取方式可能存在差异
不用硬性规定一定是哪个数据库来源
GEO
GENE EXPRESSION OMNIBUS,基因表达数据库
收录了世界各国研究机构提交的基因表达数据,主要包括肿瘤、非肿瘤、芯片、NGS、差异分析、分子验证等各种公开数据
NHANES
National Health and Nutrition Examination Survey,美国国家健康与营养调查
一项基于全美各层次人群的横断面调查,旨在收集有关美国家庭人口健康、营养和社会学信息
TCGA
The Cancer Genome Atlas,肿瘤基因组图谱
涵盖癌症病人各种各样的测序数据,如RNA sequencing、MicroRNA sequencing、DNA sequencing、SNP-based platforms、Array-based DNA methylation sequencing、Reverse-phase array
ICGC
International Cancer Genome Consortium,国际肿瘤基因组联盟
与TCGA数据库类似之处:都进行多组学研究;不同之处:ICGC数据库的数据来源更加丰富,涵盖了多个国家和地区的数据,包括亚洲人的数据
CCLE
Cancer Cell Line Encyclopedia,癌症细胞系百科全书
一个癌症细胞系数据库,内含超过1000种细胞系的mRNA、miRNA表达、外显子突变、H3组蛋白尾部修饰与部分代谢物丰度数据
SEER(only WIN)
The Surveillance, Epidemiology, and End Results Program,监测、统计流行病学和最终结果
收录了美国约30%人口的癌症诊断、治疗和生存数据,在人群特征、病理、免疫组化、放化疗以及随访等多方面均有统计,以临床回顾性数据总结归纳
pheatmap
包matrix
/data.frame
logFC
,P.Value
,FDR
Pvalue
即P值,因为基因和基因并不是相互独立的,通常都要进行校正来降低结果的假阳性adj.P.Val
、qvalue
是校正后的P值,常用的校正方法为FDR校正LogFC
,纵坐标通常是-log10(qvalue)
——即P值越小,这个值就越大log10
转换来放大差异logFC
即log2(foldchange)
差异倍数,Foldchange
处理组表达量平均值/对照组表达量平均值 *用原始的
foldchange描述上调方便[1,+∞),下调不方便(0, 1),绘制图片中上调占的空间太多而下调空间太少,所以一般会做
log2`转换*log2(x/y) = log2(x) - log2(y)
,logFC
>0即处理组表达量上升,<0即表达量下降log2(x/y) = 5
是上调了2^5即32倍,log2(x/y) = -4
是下调2^4即1/16log2(x/y)
的正常范围应该是0~20之间 (2^20=1048576)VALUE
值大于24,则需要自己取过log后再分析Foldchange
没有那么明显的时候,横轴可以直接选择展示Foldchange
,不取log2https://mp.weixin.qq.com/s/NR8Ou372l7Ule0lO6Hkpog
Expression profiling by array
Expression profiling by high throughput sequencing
Download family
栏目下Series Matrix File
点进去看见GSE000000 series matrix.txt.gz
Supplementary file
栏目下GSE000000 RAW.tar
VALUE
值,如果有一半是负值可能有问题GENE-SYMBOL
就更简单)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_packages <- c('tidyr', 'tibble', 'dplyr', 'stringr', 'ggplot2', 'ggpubr', 'factoextra', 'FactoMineR', 'devtools', 'cowplot', 'patchwork', 'basetheme', 'paletteer', 'AnnoProbe', 'ggthemes', 'VennDiagram', 'tinyarray') # `cran`里面的R包 Biocductor_packages <- c('GEOquery', 'hgu133plus2.db', 'ggnewscale', "limma", "impute", "GSEABase", "GSVA", "clusterProfiler", "org.Hs.eg.db", "preprocessCore", "enrichplot") # `Biocductor`里面的R包 for (pkg in cran_packages){ # `quietly = T`的意思是不要返回`warning` if (! require(pkg,character.only=T,quietly = T) ) { # 放进循环的时候`character.only=T`这句代码一定要记得带上 install.packages(pkg,ask = F,update = F) # 为什么用`require()`而不用`library()`呢 require(pkg,character.only=T) # 遇到安装失败`library()`会报错,从而导致整个循环终止,而`require()`只会`warning` } } for (pkg in Biocductor_packages){ if (! require(pkg,character.only=T,quietly = 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) } #没有任何提示就是成功了,如果有warning xx包不存在,用library检查一下。 #library报错,就单独安装。
# 下载前建议先清空环境 rm(list = ls()) # 打破下载时间的限制,改前60秒,改后10w秒 options(timeout = 100000) options(scipen = 20) # 不要以科学计数法表示 # 传统下载方式 library(GEOquery) eSet = getGEO("GSE7305", destdir = '.', getGPL = F) # 其他下载方式 ## 1. 从网页上下载/发链接让别人帮忙下,放在工作目录里 ## 2. 试试`geoChina`,只能下载2019年前的表达芯片数据 ## library(AnnoProbe) ## eSet = geoChina("GSE7305") # 选择性代替`eSet = getGEO("GSE7305", destdir = '.', getGPL = F)` # 研究一下这个eSet class(eSet) # 返回结果`list` length(eSet) # 长度是1,即只有一个元素的列表 ## 当一个列表里面只放了一个元素,那么就不再需要列表这个外壳 eSet = eSet[[1]] # 取出唯一的一个元素,这个代码只能运行一遍哦,不可以重复 class(eSet) # 返回结果`ExpressionSet` ## 不认识的东东就`?`问下 ## `ExpressionSet`是`Biobase`包里面规定的数据结构
只要最后数据在工作目录里即可,无所谓下载方式
‼️一个工作目录里面不要放两个数据集
R包里面不止有函数,还有它定义的数据类型
由R包作者定义的、以某种方式组织起来的、存放特定数据的数据结构
GSE
内的信息# 提取表达矩阵exp
exp <- exprs(eSet) # `exprs()`函数提取表达矩阵
dim(exp) # 查看表达矩阵维度
range(exp) # 看数据范围决定是否需要`log`,是否有负值、异常值
exp = log2(exp+1) # 由上一步决定需要`log`才`log`
# 如果`log`出来所有值都在2-4,可能你取了两次或者这个数据本身就不需要取`log`
boxplot(exp,las = 2) # 通过箱线图看是否有异常样本
# 如果存在某一个样本值异常低,可以考虑剔除或者运行标准化代码
exp=limma::normalizeBetweenArrays(exp)
# 提取临床信息
pd <- pData(eSet)
# 阅读理解环节,把分组信息提取出来
## 只可意会不可言传,仔细读样本名称来确定分组
如果一个数据集有一半左右是负值,中位数在0左右,且所有数据集中在-5~5或-10~10,则不正常
如果一个数据集出现这个情况是不适合做差异分析的,需要从原始数据开始处理
如果不处理原始数据,那么这个数据集最多只能用来作热图和生存分析
仅有少量负值为正常
# 让exp列名与pd的行名顺序完全一致
# 即:表达矩阵的行名和临床信息的列名(样品名)一一对应
# 为了准确传递分组信息
p = identical(rownames(pd),colnames(exp));p # `identical()`判断是否一致
if(!p) { # 一致的话`(!p)`就是`False`,那么后面的代码就不运行啦
s = intersect(rownames(pd),colnames(exp)) # `intersect()`取交集 ## 非常重要的一个函数
exp = exp[,s] # 表达矩阵按列取
pd = pd[s,] # 临床信息按行取
}
gpl_number <- eSet@annotation;gpl_number # 有些是用`@`,有些是用`$`
save(pd,exp,gpl_number,file = "step1output.Rdata") # 知道平台,后续才能知道探针注释
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。