在数据收集的时候,不可避免的会有些样本的表型(特征)会丢失或者无法测量,如果想保证数据表的完整就要涉及数据的填补。
对于连续型数据来说,取一列数据的平均值作为填补是最简单的,但是很容易造成数据方差有偏,无法还原真实数据情况。
对于分类型舒俱来说,取一列中的众数作为填补是最简单的,但是无法还原真实数据情况。
此时,使用机器学习方法对缺失数据进行预测是一种比较好的方法。最常用的方法包括 KNN(K-邻近法),RF(随机森林)。两种方法的学习不含缺失值的列(回归)来预测缺失列进行填补。
在实际测试的时候,有文献说明使用随机森林方法填补缺失值更加准确,随之而来的是数据量变大,程序运行时间增加的更多。
R 包 missForest 的使用
1 | data(iris) |
R 包 missMDA 的使用
1 | data(orange) |
基因型填补
基因型填补相对于普通数据填补要困难,常用的软件有 begle(HMM) 和 linkimputeR(KNN)。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31java -jar begle.jar gt=test.vcf ne=1000 out=imputation.vcf # ne 有效种群大小
>>>cat accuracy.ini
[Input]
filename = test.vcf
save = filtered.vcf
[InputFilters]
maf=0.05
positionmissing = 0.8
exacthw=0.01
[Global]
depth = 2
[Stats]
root = ./
level = table
eachmasked = yes
[Output]
control = ./impute.xml
[Log]
file = log.txt
level = debug
[Accuracy]
numbermasked = 1000
>>>java -jar LinkImputeR.jar -s accuracy.ini
>>>java -jar LinkImputeR.jar impute.xml 'Case 1' result.vcf