GEO数据挖掘系列,第10篇学习笔记:了解下载的数据,其中表达矩阵需要关注是否有异常样本或异常值
为了无缝衔接上一篇学习笔记,该文中的序号将接着上一篇来标注
2.了解数据
经过上一篇的学习,此时我们在Rstudio中得到eSet数据框;在正式进行分析之前,我们需要充分了解eSet中都有哪些东西,以及这些东西中哪些是我们后续分析时需要的
2.1 eSet里面是什么
表达矩阵、临床信息、GPL编号
2.1.1认识数据结构
ExpressionSet
首先研究eSet的数据结构、数据类型,用如下代码
class(eSet)# 如果返回的是"list",这种数据结构是不能使用的
length(eSet)# 因为其长度只有1个
eSet = eSet[[1]]# 将list的壳子拆掉
class(eSet)
?ExpressionSet# 同理学习函数,我们也可以这样来学习ExpressionSet
根据
class()
得到的结果,
ExpressionSet
这种数据结构是我们想要的,它是复杂的对象,出自
Biobase
包,复杂的对象需要函数
exprs()
来提取
图1
2.1.2 eSet里面包含的数据
①点击右上角eSet旁边的三角符号,能查看里面都有什么
图2
②或者直接点右上角的eSet这个变量名,能更方便的查看
图3
我们想要的表达矩阵、临床信息、GPL编号都在里面
图4
图5
可以用如图2用@符号一级一级的提取,但推荐用函数提取,如下
2.2提取表达矩阵exp
exp <- exprs(eSet)# 提取表达矩阵
dim(exp)# 查看exp维度
查看exp的维度,如果结果是空的即exp表格中什么都没有,说明我们用的不是芯片数据;高通量数据是转录组或单细胞的,array才是芯片的
图6
检查exp中是否有异常样本
range(exp) #看数据范围决定是否需要log,是否有负值或异常值
exp = log2(exp+1) #需要log才log,不用log就把这句代码注释掉,不要运行它
# log时需要+1,为了避免出现负数的情况,因为负数在此没有意义
boxplot(exp,las = 2) #看是否有异常样本
log完后,+1可避免数值为0或数值为负数,如图7
图7
2.2.1表达矩阵有异常样本
第一个办法:删掉异常样本
第二个办法:
exp = limma::normalizeBetweenArrays(exp)
简单处理
如图8右下角黄框所示,这6个箱线图代表6个样本的所有基因表达量,而黄框箱线图与其他箱线图相差太多,说明黄框这个样本所有的基因表达量都下调明显,这是不可能的(因为如管家基因它们基本不变),所以它是异常样本
图8
2.2.2表达矩阵有负值
对于负值,不是一概而论的
取过log后有负值
:是可以接受的程度,原本0-20是取过log后的范围,而上传数据的人在log时没有+1,则会导致数据有负值
没取log但有负值
:这是错误的,表达矩阵的原理是光信号值,光信号值不会是负数;如果实在想用这个数据,就将所有的负数改为0,但不推荐这个做法;对于这种数据,要么舍弃,要么从原始数据开始处理,详见
表达矩阵有负值?从原始数据cel文件做起
一文
有一半负值
:如图8,这是因为做了标准化这个处理,它将数据修正成中位数为0,便有了图8的-3到3、-2到2这种范围。舍弃或处理cel文件