有过数据处理经验的你们,一定是吃过缺失值的苦头,比如相关性分析,PCA分析,Mfuzz分析,甚至绘制热图啥的,一个缺失值都让你的分析全面崩盘!如果你的表达矩阵里面的基因数量超级过部分基因缺失问题,可以把整个基因都删除,但是如果基因缺失比例很大,这个时候强行删除就会带来偏差啦!
首先需要去上游(数据如何产生的)弄清楚缺失值的来源,然后要理解不同形式的缺失值,如下:
- 完全随机缺失(MCAR,Missing Completely At Random),指的是数据的缺失不依赖于自身或者其他变量,完全是随机的。
- 随机缺失(MAR,Missing At Random),指的是数据的缺失不是完全随机的,该类数据的缺失依赖于其他观测变量。
- 非随机缺失(MNAR,Missing Not At Random),指的是数据的缺失依赖于观测变量自身。
值得注意的是,也有人认为MCAR和MAR二者没啥区别,或者认为MCAR是MAR的一个特例(doi:10.1186/1471-2105-13-S16-S5)。 然后给你一个思考题,你觉得单细胞转录组数据里面的drop-out现象属于上面的哪一种?
最常用的是用impute包的imput.knn函数
比如甲基化数据分析教程,就是使用了它:
require(GEOquery)
require(Biobase)
library("impute")
# 就走下面的fread流程,读取data.txt这个甲基化信号值矩阵
a=fread("data.txt",data.table = F )
a[1:4,1:4]
rownames(a)=a[,1]
a=a[,-1]
beta=as.matrix(a)
beta=impute.knn(beta)
# impute.knn(data ,k = 10, rowmax = 0.5, colmax = 0.8, maxp = 1500, rng.seed=362436069)
betaData=beta$data
betaData=betaData+0.00001
a=betaData
这个impute包的imput.knn函数有3个参数需要理解一下:
- 默认的k = 10, 选择K个邻居的值平均或者加权后填充
- 默认的rowmax = 0.5, 就是说该行的缺失值比例超过50%就使用平均值而不是K个邻居
- 默认的colmax = 0.8,意思是该列缺失值超过80%就报错
所以对我们的表达矩阵来说,一定要是列是样本,行是基因哦!
其它方法大家感兴趣的可以去搜索R教程
好用的方法掌握一种就好,如果你对算法什么的情有独钟,就自行搜索学习哈。
文末友情宣传
强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:
- 底裤价转录组产品线(还送数据分析培训)(八九百一个样品)
- 三维基因组学分析实战培训班,线上直播课,2天仅需399(生信技能树粉丝特权价格)
- 生信技能树的2019年终总结 ,你的生物信息学成长宝藏
- 2020学习主旋律,B站74小时免费教学视频为你领路