plink如何更新表型数据

2022-12-13 17:51:28 浏览数 (3)

大家好,我是邓飞。

平时在分析时,也有时候需要将外部准备好的数据,更新到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如何更新表型数据的教程。感觉不错,三连走起呀!

1 人点赞