本
文
摘
要
数据检查的基本流程概述
这一系列主要是以Deep-Learning-with-PyTorch这本教材为主大家可以直接去github上搜索,这本教材是开源的
除了一些基本的代码问题(简单的问题希望大家可以独立的学会应用网络资源),
任何在学习过程中(无论是否在本教材内),都可以发送邮件来和我探讨(避免微信上看到消息然后我以为我回复了)如果代码和流程存在任何疑问或者问题,请联系yuansh3354@163.com正文
本来这一篇是打算开始进行pythorch 的教程,但是我发现很多朋友在做数据分析的时候都不知道自己的目的是什么, 并且有意思的是,大部分的孩子,甚至是统计学或者生信相关专业的小朋友竟然连基本的数据分析的流程都不知道。因为这一部分设计的数理逻辑知识比较多,我本是不愿意在教程中体现的,但是因为咨询的人实在太多,因此我在这里进行统一的整理回答
Attention, from this chapter all code annotion will be in English.
Take it easy, my vocabulary is less than 10,000
# import mytorch.py (All common function stored in this file) from mytorch import * # allways check version of pytorch torch.version.__version__ # Set Global Option randoms = 42 batch_size = 512 %matplotlib inline %config InlineBackend.figure_format = svg 1.7.0+cu110直接进入正题
明确实验的目的,选择合适的模型
无论是什么时候,什么地方,作为一个合格的数据分析师。
当我们拿到数据的时候一定要和数据的提供者(这里指的不是测序公司,而是老板或者医院的医生)进行深度的交流, 以便明确我们的分析目的到底是什么。
在生物信息学领域,数据分析大概率可以归纳为以下几种:
样本分类问题
这类的问题极为常见,例如突变位点识别,癌症样本分类,癌症早期诊断等等
在分类任务中,最最常见的还是二分类模型,例如判断患者的IDH基因是否突变,那么只会有两种情况,突变或者不突变进阶一点就是多分类问题,例如拷贝数变异的识别,判断一段序列是拷贝数扩增,不变,缺失 更要命的就是多标签分类问题,例如判断一些患者的IDH,TP53,EGRF等是否突变的问题
回归问题
相比于其他类型的问题,回归问题在生物信息学上比较少见,通常情况下为癌症病情预测,预后稳定性评估等等
异常检测问题
这个问题有点类似于样本分类问题,例如癌症样本的识别,差异基因识别,突变位点识别,与样本分类问题不同,异常检测问题的负样本数通常远少于正样本数,即正常样本远大于癌症样本
特征提取问题
特征提取问题一般情况下都是结合异常检测或者样本分类问题进行统一评估
其中最为常见的就是差异基因,差异通路等等的识别在明确问题后我们即可采取合适的模型进行训练然后加以评估
第二步,我们需要做的就是对数据的检查
我们以表达谱为例子,通常情况下数据检查要检查两个部分,
第一个部分是count矩阵第二个部分是meta矩阵那么数据检查检查的是什么呢?
明确数据类型:
字符类型变量(meta矩阵)
离散型数值变量(meta矩阵) 注意,离散型数值变量分为等级变量和非等级变量,通常情况下等级变量会用字母表示,并且可以数值化
连续型数字变量(count矩阵,meta矩阵)在连续性数字变量中还要清楚这些数据的特征属性,例如,非负型,整数型,上下界等等
举例来说
# Load dataset meta = pd.read_hdf(tcga-gtex.h5,key=meta) meta.head()sampleIDTissuelabel在 meta 中的Tissue就是离散型非等级变量,那么什么是离散型等级变量呢,举例来说,meta矩阵中储存了患者的肿瘤分级信息 I,II,III,IV期等等,这种情况下我们就可以对这些等级变量进行数值化,将其转换为1,2,3,4。
但是注意!!在本例子中Tissue记录的是患者的组织信息,是属于离散型非等级变量,这种情况下原则上是不允许数字化的,因为数值化有天然的缺陷——这些数据本身具有等级信息,例如1<2<3<4,这种情况下只能生成哑变量。
我这里说原则上不允许,因此要注意,如果对数据进行装换的时候仅仅只是为了好看,并且没有将数据用于模型分类或者评估的时候。这时候你爱怎么搞怎么搞
通常情况下,我们对于离散型变量采用的评估模式是比例柱状图或者频率分布直方图来观察比各个组分之间的比例构成差异
import matplotlib.pyplot as plt import matplotlib as mpl x = [1,2] y = [0.5669291338582677,0.49624060150375937] y1 = [0.3937007874015748,0.34868421052631576] y2 = [0.03937007874015748,0.1550751879699248] plt.bar(x, y, align="center", color="orange", tick_label=[Normal,Tumor], label="KIRC") plt.bar(x, y1, align="center", bottom=y, color="#91B493", label="LIHC") for i in range(0, len(y)): y1[i] = y1[i] + y[i] plt.bar(x, y2, align="center", bottom=y1, color="#F6C555", label="GBM") plt.ylim(0,1) plt.legend() plt.show();此外我们还需要检查一下meta矩阵中各个组分之间是否存在其他关系,对于连续型变量通常我们关注的是散点图
x1 = np.array(expr.loc[EGFR-AS1,meta[label] == 1]) y1 = np.array(expr.loc[TP53TG3F,meta[label] == 1]) plt.scatter(x1, y1, alpha=0.4) plt.show();那么,从上图中可以看出,在疾病组中,EGFR-AS1 与 TP53TG3F 的表达毫无关系 实际上,散点图可以给我们提供很多的情报,例如 两个变量之间的(正负相关性,周期性,对称性,在某种条件下的单调性), 简单的一句话,散点图可以很直观的看出两个变量组成的函数映射关系,在有关系的情况下,可以考虑各种函数属性。
绝大部分的人使用的就是相关系数,那么这里要注意一下几点
我们通常情况下使用的相关系数就三种,分别是:皮尔森(pearson)相关系数、斯皮尔曼(spearman)相关系数、肯德尔(kendall)相关系数. 通常情况下通过以下取值范围判断变量的相关强度(取绝对值后):
这里一定要注意一点,相关系数会附带P值,请各位理解什么叫附带,相关系数是先考虑的,P值先不显著通常情况下不是很重要,有的教程会认为相关系数0.01,但是p值<0.05的也叫做显著相关,我是真的吐了。
| 相关系数 | 相关强度 | | ----------- | ---------------- | | 0.75-1.0 | 极强相关 | | 0.65-0.75 | 强相关 | | 0.4-0.65 | 中等程度相关 | | 0.2-0.4 | 弱相关 | | 0.0-0.2 | 极弱相关或无相关 |
那么讲一下三个相关系数的区别 spearman和kendall是属于秩相关,pearson相关系数是基于正态总体假设的,并容易受到异常值的影响
第三步,缺失值和异常样本的处理
缺失值的话分为两种情况,一种是count矩阵的缺失值,一种是meta矩阵的缺失值 通常情况下,如果是count矩阵的缺失值,在不是很多的情况下使用0值进行补充,如果是meta矩阵的缺失值,这种情况一般情况不做处理,等到分析的时候将该样本剔除
异常值的识别最好的可视化方式就是箱型图,通常情况下检测异常值的常用原则有如下三种: 1. 以1.5IQR作为评估指标,超出1.5IQR的认为是异常样本 2. 5%或者95%分位数作为评估指标,落在5%或者95%以外的记为异常值 3. 3σ原则
然后一定要注意,异常样本也不要随意提出,一定要和数据提供者商量才可以,因为提出异常样本的一个重要因素是生物学背景
异常值的处理: 1. 直接删除 2. 数据装换,通常情况下使用log转换或者开三次方根
第四部,数据处理和样本过滤
上面三个步骤,都是针对单一样本或者特征之间的关系进行评估,并没有对数据整体进行概览,因此,第四步的数据处理和样本过滤就是对整个数据整体进行评估和可视化
也有人把这个步骤叫做质控,就比如最常见的情况就是在单细胞数据中,通常情况下我们会评估例如线粒体,核糖体,外源基因等等的占比
再比如,很多情况下我们会整合不止一套样本,这是后需要进行去批次处理
那么比较常见的批次效应是什么呢?先看一下批次效应的定义:
不同时间、不同操作者、不同试剂、不同仪器等等导致的实验误差
因此,除非这个数据在同一个时间点,由同一个人在同一个地点用同一个设备跑出来的结果外,任何情况都会产生批次效应,因此批次效应在某种程度上是无法去除的,只能在一定程度上减弱。
那么应该如何评估批次效应呢?
通常情况下我们有两种方法判断,例如随机抽取几个样本绘制总的基因表达值箱型图观察是否一致 PCA或者TSNE结果观察,样本组间差异是否大于数据集间的差异等等
一般情况下是需要对批次效应进行矫正,但是切记,不要过分的强调批次效应的,因为我们在进行深度学习的一个重要原因就是要解决批次效应的问题,提高我们的模型泛化能力,因此不要过分强调批次效应的矫正
对于样本过滤问题,尤其是在单细胞测序数据中,请务必记住,样本过滤是没有任何的金标准,你可以使用极为严格的标准过滤掉99%细胞,也可以完全不过滤,这个完全是看课题组的需求
因此关于这一部分我真的无法给出任何的建议,很多文章卡的标准也没有给出理由,都是强行硬卡
Best Regards, Yuan.SH --------------------------------------- School of Basic Medical Sciences, Fujian Medical University, Fuzhou, Fujian, China. please contact with me via the following ways: (a) e-mail :yuansh3354@163.com