PLINK: Whole genome data analysis toolset plink...
Latest PLINK release is v1.03 (10-Jun-2008)

Whole genome association analysis toolset

Introduction | Basics | Download | Reference | Formats | Data management | Summary stats | Filters | Stratification | IBS/IBD | Association | Family-based | Permutation | Haplotypes | Conditional tests | Proxy association | Imputation | Clumping | Epistasis | Copy Number Variation | R-plugins | SNP annotation | Simulation | Profiles | Resources | Misc. | FAQ | gPLINK

1. Introduction

2. Basic information

3. Download and general notes

4. Command reference table

5. Basic usage/data formats 6. Data management

7. Summary stats 8. Inclusion thresholds 9. Population stratification 10. IBS/IBD estimation 11. Association 12. Family-based association 13. Permutation procedures 14. Multimarker tests 15. Conditional haplotype tests 16. Proxy association 17. Full imputation (beta) 18. LD-based results clumping 19. Epistasis 20. Copy Number Variation 21. R-plugins 22. SNP annotation lookup 23. Simulation tools 24. Profile scoring 25. Resources 26. Miscellaneous 27. FAQ & Hints

28. gPLINK
 

LD-based result clumping procedure

This page describes PLINK's ability to group SNP-based results across one or more datasets or analyses, based on empirical estimates of linkage disequilibrium between SNPs. The basic procedure was inspired by a script written by Ben Voight.

There are probably two main applications for this method:
  • To report the top X single SNP results from a genome-wide scan in terms of a smaller number of clumps of correlated SNPs (i.e. to assess how many independent loci are associated, for example)
  • To provide a quick way to combine sets of results from two or more studies, when the studies might also be genotyped on different marker sets

Basic usage for LD-based clumping

The --clump command is used to specify one or more result files (i.e. precomputed analyses of some kind). By default, PLINK scans these files and extracts fields with the headers SNP and P. For example:

plink --file mydata --clump mytest1.assoc

which generates a file
     plink.clumped
The actual genotype dataset specified here (i.e. the mydata.* fileset) may or may not be the same dataset that was used to generate the results in mytest1.assoc. The mydata fileset is only used to calculate linkage disequilibrium between the SNPs that feature in mytest1.assoc (i.e. the analyses are not re-run).

There are four main parameters that determine the level of clumping, listed here in terms of the command flag used to change them and their default values:
     --clump-p1 0.0001            Significance threshold for index SNPs
     
     --clump-p2 0.01              Secondary significance threshold for clumped SNPs
 
     --clump-r2 0.50              LD threshold for clumping

     --clump-kb 250               Physical distance threshold for clumping
The clumping procedure takes all SNPs that are significant at threshold p1 that have not already been clumped (denoting these as index SNPs) and forms clumps of all other SNPs that are within a certain kb distance from the index SNP (default 250kb) and that are in linkage disequilibrium with the index SNP, based on an r-squared threshold (default 0.50). These SNPs are then subsetted based on the result for that SNP, as illustrated below. This is a greedy algorithm and so each SNP will only appear in a single clump, if at all.

In the default, non-verbose mode, the default output lists all index SNPs and a summary of the other SNPs that are clumped with this SNP: (note, SNP IDs and positions are made-up in the example below):

    CHR  F         SNP         BP         P  TOTAL   NSIG    S05    S01   S001  S0001    SP2
      8  1   rs1234564   15716326  5.01e-07      0      0      0      0      0      0   NONE
     14  1   rs1205236   69831825  1.46e-06      0      0      0      0      0      0   NONE
      2  1  rs16331058  114547107  2.33e-06      3      0      0      0      0      3   rs2366902(1),rs1274528(1),rs3200591(1)
      2  1    rs759966   54902416  9.28e-06      4      0      0      0      3      1   rs12538389(1),rs30488140(1),rs27152432(1)
     11  1   rs8031586   44633498  9.75e-06      1      0      0      0      0      1   rs802328(1)
     12  1  rs12431413   30028246  9.89e-06      0      0      0      0      0      0   NONE
      6  1  rs14966070   62091121  1.07e-05      0      0      0      0      0      0   NONE
where the fields are as follows

     CHR     Chromosome code
     F       Results fileset code (1,2,...)
     SNP     SNP identifier
     BP      Physical position of SNP (base-pairs)
     TOTAL   Total number of other SNPs in clump (i.e. passing --clump-kb and --clump-r2 thresholds)
     NSIG    Number of clumped SNPs that are not significant ( p > 0.05 )
     S05     Number of clumped SNPs 0.01 < p < 0.05
     S01     Number of clumped SNPs 0.001 < p < 0.01
     S001    Number of clumped SNPs 0.0001 < p < 0.001 
     S0001   Number of clumped SNPs p < 0.0001
     SP2     List of SNPs names (and fileset code) clumped and significant at --clump-p2
That is, the TOTAL field lists all SNPs that are clumped with the index SNP, irrespective of the p-value for those SNPs. This number is then split into those clumped SNPs that are not significant (p>0.05) and various other groups defined by significance thresholds. For SNPs that are significant at the p2 threshold, they are listed explicitly. The (1) after each SNP name refers to the results file they came from (in this case, there is only a single result file specified, so all values are 1).

To specify more than a single result file, use a comma-delimited list after --clump (without any spaces between file names), for example:
plink --bfile mydata --clump mytest1.assoc,mytest2.assoc

To specify a field labelled other than P, use the command
plink --bfile mydata --clump mytest1.assoc --clump-field P_CMH

for example.

NOTE The same fields are extracted from all results files (e.g. SNP and P) -- i.e. it is not possible to specify different fields from different files.

NOTE All results are interpreted as p-values -- i.e. it is not possible to specify a Z-statistic, as significance is always defined as less than the threshold. Finally, by default a SNP is not allowed to appear in more than one clump, either as an index or non-index SNP. If you add the command, then a SNP that has appeared as a non-index SNP in one clump can appear as a non-index SNP in other clumps:
     --clump-allow-overlap

Verbose report

For a more detailed report of the SNPs in each clump, add the flag --clump-verbose
plink --bfile mydata --clump mytest1.assoc --clump-verbose

which produces a report as follows:
 CHR    F             SNP         BP          P    TOTAL   NSIG    S05    S01   S001  S0001
   8    1       rs1234564   15716326  5.019e-07        0      0      0      0      0      0

------------------------------------------------------------------

 CHR    F             SNP         BP          P    TOTAL   NSIG    S05    S01   S001  S0001
  14    1       rs1205236   69831825  1.469e-06        0      0      0      0      0      0

------------------------------------------------------------------

 CHR    F             SNP         BP          P    TOTAL   NSIG    S05    S01   S001  S0001  
   2    1      rs16331058  114547107  2.337e-06        3      0      0      0      0      3

                                  KB      RSQ  ALLELES    F            P 
  (INDEX)      rs16331058        0.0    1.000        A    1     2.34e-06 

                rs2366902      -75.4    0.611    AT/GC    1     4.42e-05 
                rs1274528      -47.4    0.555    AC/GT    1     1.28e-05
                rs3200591      -22.3    0.964    AT/GC    1     2.68e-05

------------------------------------------------------------------

  etc
For example, for the third SNP, rs16331058 we see there are 3 other SNPs that fulfil the specified criteria (kb distance less than 250kb, r-squared greater then 0.5 and p-value of less than p2 threshold of 0.01), and they are listed explicitly in verbose mode. As well as the kb and r-squared for each SNP (relative to rs16331058) we see listed the fileset which the result comes from (F -- in this case, all are listed 1, as there was only one result file specified) and p-value. Also, the alleles column indicates for the index SNP what the minor allele is (A); for the other SNPs, the two haplotypes that are more common than expected are listed (e.g. for SNPs A/B and 1/2, then if P(A1) > P(A)P(1) it will list A1/B2, otherwise A2/B1.

Another useful verbose-mode option is --clump-anotate which takes as a parameter a comma-delimited list of header names, e.g.
     --clump-annotate A1,OR
and will then list these items in the verbose report mode (e.g. minor allele and odds ratio, in this case, if the results file were a plink.assoc file). The output would then appear as, for example,
 CHR    F             SNP         BP          P    TOTAL   NSIG    S05    S01   S001  S0001  
   2    1      rs16331058  114547107  2.337e-06        3      0      0      0      0      3

                                  KB      RSQ  ALLELES    F            P       ANNOT
  (INDEX)      rs16331058        0.0    1.000        A    1     2.34e-06     A, 1.23

                rs2366902      -75.4    0.611    AT/GC    1     4.42e-05     T, 1.17
                rs1274528      -47.4    0.555    AC/GT    1     1.28e-05     C, 1.22
                rs3200591      -22.3    0.964    AT/GC    1     2.68e-05     T, 1.19
i.e. here we can see that for rs2366902 the minor allele T had an odds ratio of 1.17; this is consistent with the index SNP, as the haplotype AT is more common than expected (i.e. indicating the direction of the LD).

NOTE The allele coding in the ALLELES field is taken directly from the specified genotype data, i.e. mydata.* in this case, whereas the allele coding in the ANNOT field is taken (if available and --clump-annotate selects an allele field) from the results file. It is up to the user to ensure that these match to be interpretable (i.e. in terms of number versus letter coding, but more importantly in terms of strand, etc, which might be an issue if the genotype data is a file different from that which the results were calculated on, e.g. see below for an example).

Combining multiple result files (potentially from different SNP panels)

When more than one output file is specified, e.g. as
plink --bfile mydata --clump mytest1.assoc,mytest2.assoc,mytest3.assoc

there are two other options that can modify the behaviour of --clump. First,
     --clump-index-first
indicates that index SNPs should only taken from the first result file listed (mytest1.assoc in the example above). In other words, this allows for an asymmetric comparison, in which we ask only whether or not a result in a particular file has any other SNPs (in that same, or in different files) that could be clumped.

Second, the additional option
     --clump-replicate
means that only clumps containing clumped SNPs with p2-significant results in more than one result file are shown. This could be used in the following context: imagine one had data for two different whole-genome scans, for the same phenotype but performed on different platforms, e.g. Affymetrix and Illumina. A quick way to compare these sets of results would be to use the HapMap as a common dataset (i.e. containing all SNPs on both platforms, or the majority of these in any case) as follows:
plink --bfile hapmap --clump affymetrix.assoc,illumina.assoc --clump-verbose --clump-replicate

This assumes that you have made the fileset hapmap.* to contain all SNPs for one of the analysis panels, e.g. CEU. In this context, we are only interested in hits (e.g. p-values less than 1e-3) that are seen across the studies, by using the --clump-replicate flag (i.e. only clumps where F is seen to have values of both 1 and 2 for p2-significant SNPs). In this case, it also probably makes sense to equate the p1 and p2 thresholds, by adding, for example,
     --clump-p1 1e-3 --clump-p2 1e-3 
Finally, by also adding the
     --clump-annotate A1,OR
flag, you can see whether or not there appears to be a consistent direction of effect also (by putting together the direction of odds ratios with the over-represented haplotype to tie together the two or three SNPs).

 
This document last modified Wednesday, 11-Jun-2008 18:14:43 EDT