GWAS --covar-name --pheno-name

最后发布时间 : 2026-06-26 11:10:30 浏览量 :

会。

默认情况下,如果你指定了 --covar covar.txt,但没有指定 --covar-name,PLINK2 会自动使用协变量文件中的所有协变量列(除去样本 ID 列)。

例如 covar.txt

IID Age Sex PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
SYSCZ034 35 1 0.012 -0.032 ...
SYSCZ037 29 2 -0.021 0.018 ...

执行:

plink2 \
    --pfile gwas_input \
    --covar covar.txt \
    --glm

等价于使用:

  • Age
  • Sex
  • PC1
  • PC2
  • ...
  • PC10

作为协变量。


什么时候需要 --covar-name

当你的协变量文件中包含不想用于本次分析的列时,可以指定:

例如:

IID Age Sex Batch PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 Center

如果你只想用

  • Age
  • Sex
  • PC1-PC10

而不使用

  • Batch
  • Center

可以写:

--covar-name Age,Sex,PC1-PC10

或者

--covar-name Age,Sex,PC1,PC2,PC3

推荐做法

虽然不写 --covar-name 也能运行,但在正式 GWAS 中建议明确指定,原因有几点:

  1. 结果更可重复:别人一看命令就知道用了哪些协变量。
  2. 避免误用:如果以后 covar.txt 增加了新列(如 Batch、Center、RIN 等),默认会全部加入模型,可能改变分析结果。
  3. 便于维护:不同分析可以方便地选择不同协变量组合。

例如:

plink2 \
    --pfile gwas_input \
    --pheno pheno.txt \
    --covar covar.txt \
    --covar-name Age,Sex,PC1-PC10 \
    --glm \
    --threads 20 \
    --out gwas

这是 GWAS 中最常见、也最推荐的写法。

不会。

如果你指定了:

--covar covar.txt \
--covar-name Age,Sex

那么 PLINK2 只会使用 AgeSex 两列作为协变量不会自动加入 PC1PC2 等主成分

例如,covar.txt

IID Age Sex PC1 PC2 PC3 PC4 PC5
SYSCZ034 35 1 0.012 -0.032 0.001 0.005 -0.003
SYSCZ037 29 2 -0.021 0.018 0.004 -0.002 0.007

不同命令对应的协变量如下:

命令实际使用的协变量
--covar covar.txtAge、Sex、PC1、PC2、PC3、PC4、PC5(全部)
--covar covar.txt --covar-name Age,Sex仅 Age、Sex
--covar covar.txt --covar-name PC1-PC10仅 PC1–PC10
--covar covar.txt --covar-name Age,Sex,PC1-PC10Age、Sex、PC1–PC10

PC1-PC10 的简写

如果列名连续:

PC1
PC2
...
PC10

可以直接写:

--covar-name Age,Sex,PC1-PC10

PLINK2 会展开为:

Age
Sex
PC1
PC2
...
PC10

建议

对于 GWAS,通常推荐明确指定协变量,例如:

plink2 \
    --pfile gwas_input \
    --pheno pheno.txt \
    --covar covar.txt \
    --covar-name Age,Sex,PC1-PC10 \
    --glm \
    --threads 20 \
    --out gwas

这样可以避免因 covar.txt 增加了其他列而导致模型发生变化,也使分析过程更加清晰和可复现。

可以,但不能直接这样写。

原因是 --pheno--covar 在 PLINK2 中是两个独立的数据源

  • --pheno:用于提供待分析的表型(phenotype)
  • --covar:用于提供协变量(covariates)

--covar-name 只能引用 --covar 文件中的列不能引用 --pheno 文件中的列

因此,你现在的命令:

--pheno pheno.txt
--covar gwas_input.eigenvec
--covar-name age,gender,PC1-PC10

要求的是:

  • agegender 必须存在于 gwas_input.eigenvec
  • PC1PC10 也必须存在于 gwas_input.eigenvec

如果 gwas_input.eigenvec 只有:

IID PC1 PC2 ... PC10

那么 PLINK 会报类似错误:

Error: Covariate 'age' not found.

推荐做法:合并成一个 covariate 文件

通常 GWAS 都会把所有协变量放到一个文件中,例如:

IID age gender PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
SYSCZ034 35 1 0.012 -0.031 ...
SYSCZ037 29 2 -0.021 0.018 ...

然后:

plink2 \
    --pfile gwas_input \
    --pheno pheno.txt \
    --pheno-name Topic \
    --covar covar.txt \
    --covar-name age,gender,PC1-PC10 \
    --glm \
    --threads 50 \
    --out gwas

这是最常见、也是官方推荐的方式。


如果 age 和 gender 已经在 pheno.txt 中怎么办?

例如:

IID Topic age gender
SYSCZ034 0.43 35 1
SYSCZ037 0.27 29 2

PLINK 不会自动把 agegender 当作协变量。

它只会把 Topic(由 --pheno-name Topic 指定)当作表型,其余列不会因为在 pheno.txt 中就自动成为协变量。

因此,如果想把 agegender 用作协变量,需要:

  1. 将它们复制到 covar.txt;或
  2. 直接生成一个包含 agegenderPC1PC10 的综合 covar.txt

针对你的数据

你现在有:

  • pheno.txtIID Topic age gender
  • gwas_input.eigenvecIID PC1 ... PC10

建议在分析前先按 IID 合并为一个 covar.txt

IID age gender PC1 PC2 ... PC10

然后:

--pheno pheno.txt
--pheno-name Topic
--covar covar.txt
--covar-name age,gender,PC1-PC10

这是标准的 GWAS 输入方式,也最方便维护和复现。