Github开源生信云平台 DEMO
.fam
-9
pheno.txt
--pheno-name
是的,FID 和 IID 必须与 .fam 文件中的前两列一致,PLINK 就是通过这两个字段来匹配样本的。
FID
IID
你给出的 .fam 文件类似于:
FID IID PID MID SEX PHENO 1 XJSCZ002 0 0 1 -9 2 XJSCZ003 0 0 2 -9 3 XJSCZ004 0 0 2 -9 4 XJSCZ006 0 0 1 -9 5 XJSCZ005 0 0 2 -9 6 SYSCZ010 0 0 2 -9
那么 pheno.txt 就应该写成:
FID IID SCZ 1 XJSCZ002 2 2 XJSCZ003 2 3 XJSCZ004 1 4 XJSCZ006 2 5 XJSCZ005 1 6 SYSCZ010 2
这里:
1、2、3、4、5、6
XJSCZ002、XJSCZ003...
(FID, IID)
可以,但必须同时修改 .fam 和所有相关文件。
例如很多项目都会把 .fam 改成:
XJSCZ002 XJSCZ002 0 0 1 -9 XJSCZ003 XJSCZ003 0 0 2 -9 XJSCZ004 XJSCZ004 0 0 2 -9
对应的 pheno.txt:
FID IID SCZ XJSCZ002 XJSCZ002 2 XJSCZ003 XJSCZ003 2 XJSCZ004 XJSCZ004 1
这样也是完全合法的。
例如 .fam 是:
1 XJSCZ002
而 pheno.txt 是:
XJSCZ002 XJSCZ002 2
那么 (FID, IID) 分别是:
(1, XJSCZ002)
(XJSCZ002, XJSCZ002)
由于 FID 不同,PLINK 会认为这是两个不同的样本,结果就是:
运行:
plink \ --bfile 890S \ --pheno pheno.txt \ --make-bed \ --out test
查看 test.log,如果出现类似:
test.log
0 phenotype values present after --pheno.
说明没有匹配成功,通常就是 FID 或 IID 不一致导致的。
既然第一列已经是数字 1、2、3...,最简单、最稳妥的做法就是:
1、2、3...
covar.txt
保证 FID 和 IID 与 .fam 完全一致,这样 PLINK 能够正确匹配所有样本。
是的,这属于 PLINK 的正常行为。
如果你的 .ped 文件第 6 列(PHENOTYPE)是 0,经过:
.ped
0
plink --file 890S --make-bed --out 890S
生成的 .fam 可能会变成:
# ped 1 XJSCZ002 0 0 1 0 2 XJSCZ003 0 0 2 0 # fam 1 XJSCZ002 0 0 1 -9 2 XJSCZ003 0 0 2 -9
这是因为 PLINK 将 0 和 -9 都视为“缺失表型(missing phenotype)”,在某些转换过程中会统一规范化为 -9。
对于二分类或一般表型,PLINK 的约定是:
1
2
因此:
0 == Missing -9 == Missing
两者在大多数情况下没有本质区别,PLINK 内部可能会将它们统一保存为 -9。
很多人容易误以为:
0 = Control 1 = Case
但在 PLINK 中这是错误的。
例如:
1 XJSCZ002 0 0 1 0
这里表示的是:
SEX=1
而不是对照组。
如果你运行:
plink --bfile 890S --logistic
这个样本会因为没有表型而被排除。
推荐直接在 .ped 或 .fam 中填写:
FID IID PID MID SEX PHENO 1 XJSCZ002 0 0 1 2 # Case 2 XJSCZ003 0 0 2 1 # Control 3 XJSCZ004 0 0 1 2 # Case 4 XJSCZ005 0 0 2 1 # Control
对应关系:
1 -> Control 2 -> Case
不要使用 0 表示对照。
这是很常见的情况,说明目前所有样本的表型都是缺失的。有两种处理方式:
把:
1 XJSCZ002 0 0 1 -9 2 XJSCZ003 0 0 2 -9
改成:
1 XJSCZ002 0 0 1 2 2 XJSCZ003 0 0 2 1
FID IID PHENO 1 XJSCZ002 2 2 XJSCZ003 1
然后运行:
plink \ --bfile 890S \ --pheno pheno.txt \ --logistic \ --out gwas
此时 pheno.txt 中的表型会覆盖 .fam 中的缺失值。
1 = Control
2 = Case
不一定需要,取决于你的使用方式。
1 XJSCZ002 2 2 XJSCZ003 2 3 XJSCZ004 1 4 XJSCZ006 2
直接运行:
PLINK 会默认认为:
这种写法没有任何问题。
FID IID SCZ 1 XJSCZ002 2 2 XJSCZ003 2 3 XJSCZ004 1 4 XJSCZ006 2
如果有多个表型,还可以写成:
FID IID SCZ BMI AGE 1 XJSCZ002 2 23.5 45 2 XJSCZ003 1 21.8 38 3 XJSCZ004 2 26.1 41
然后指定要使用哪一列:
plink \ --bfile 890S \ --pheno pheno.txt \ --pheno-name SCZ \ --logistic \ --out gwas
这里 --pheno-name SCZ 就是根据表头找到 SCZ 这一列。
--pheno-name SCZ
SCZ
如果只有一个表型列,例如:
很多版本的 PLINK 也能够正确识别并跳过表头,直接使用 PHENO 列进行分析。
PHENO
但是,如果有多个表型列,建议显式使用 --pheno-name 指定列名,避免歧义。
如果只是做一次 SCZ 的病例-对照 GWAS,推荐使用带表头的格式:
并运行:
plink \ --bfile 890S \ --pheno pheno.txt \ --pheno-name SCZ \ --covar covar.txt \ --logistic \ --out gwas
这种方式可读性更好,将来如果增加 BMI、年龄等其他表型列,也不需要修改文件格式,只需调整 --pheno-name 即可。