大家好,我是邓飞。
平时在分析时,也有时候需要将外部准备好的数据,更新到plink数据中。plink有两种格式类型,二进制文件(bed,bim,fam)在fam文件的第六列,文本文件(ped,map)在ped文件的第六列。数据量小时,可以用excel打开,直接手动增加,如果数据量大,就需要编程实现,比如R语言,Perl或者Python。其实,plink自己有一个参数,可以自动更新表型数据,只需要将所要更新的表型数据准备好就行了。下面介绍一下操作流程。
1. plink文本文件更新表型数据
下面我们用plink示例数据来进行演示,这个数据很小,也可以自己生成。
「map数据:」
代码语言:javascript复制
$ cat toy.map
1 rs0 0 1000
1 rs10 0 1001
「ped数据:」
代码语言:javascript复制
$ cat toy.ped
1 1000000000 0 0 1 1 0 0 A A
1 1000000001 0 0 1 2 C C A G
上面的ped数据第六列就是表型数据,这里有两个个体,分别是1和2,这里我们将其更改为2和1。
如果想要用plink进行更新数据,需要提前准备好表型数据,格式:FID,IID,y,三列数据,没有行头,缺失值用-9,分隔符是空格或者tab。
「注意,跟新的个体要和ped一样,顺序可以变化,但是数目要对得上。」
「表型数据:」
代码语言:javascript复制
$ cat phenotype.txt
1 1000000000 2
1 1000000001 1
更新命令:
代码语言:javascript复制
plink --file toy --pheno phenotype.txt --recode --out re1
结果生成re1的plink文件,看一下ped的第六列,可以看到,已经更新了:
代码语言:javascript复制
$ cat re1.ped
1 1000000000 0 0 1 2 0 0 A A
1 1000000001 0 0 1 1 C C G A
2. plink二进制文件更新表型数据
首先,用toy生成二进制的plink文件
代码语言:javascript复制
plink --file toy --make-bed --out b
查看b.fam文件,里面第六列是表型数据。
代码语言:javascript复制
$ cat b.fam
1 1000000000 0 0 1 1
1 1000000001 0 0 1 2
表型数据整理,和文本格式的phenotype.txt格式一样。这里我们将其变为连续性状。
「注意:表型数据可以是1-2的case-contral,也可以是连续性状,操作方法没有区别」
代码语言:javascript复制
$ cat phenotype.txt
1 1000000000 2.5
1 1000000001 1.8
更细代码:
代码语言:javascript复制
plink --bfile b --pheno phenotype.txt --make-bed --out re2
查看re2.fam文件,看看表型数据已经更新成功:
代码语言:javascript复制
$ cat re2.fam
1 1000000000 0 0 1 2.5
1 1000000001 0 0 1 1.8
3. 为何要更新表型数据
初学者看到plink的ped第六列或者fam的第六列是表型数据,就想把自己的数据加进去。其实我们可以额外定义一个表型数据txt文件,自己整理数据就行,它的优势:
- 表型数据txt文件小,可以用excel编辑,修改
- 表型数据可以支持多列,比如有20个性状,可以依次排开,在进行分析时,指定所要分析的形状即可。默认是第三列是第一个性状。
- 缺失值可以用NA或者-9表示,不能为空
这一篇就是plink如何更新表型数据的教程。感觉不错,三连走起呀!