查看原文
其他

3种缺失值情况需要区别对待

生信技能树 生信技能树 2022-06-07
有过数据处理经验的你们,一定是吃过缺失值的苦头,比如相关性分析,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,多一点数据认知,让他们的科研上一个台阶:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存