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. LD calculations
15. Multimarker tests
16. Conditional haplotype tests
17. Proxy association
18. Imputation (beta)
19. Dosage data
20. Meta-analysis
21. Annotation
22. LD-based results clumping
23. Gene-based report
24. Epistasis
25. Rare CNVs
26. Common CNPs
27. R-plugins
28. Annotation web-lookup
29. Simulation tools
30. Profile scoring
31. ID helper
32. Resources
33. Flow-chart
34. Miscellaneous
35. FAQ & Hints
36. 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),...
2 1 rs759966 54902416 9.28e-06 4 0 0 0 3 1 rs12538389(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.
Annotation by SNP details and genomic co-ordinates
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).
A further option is --clump-range, which takes a gene-list or region-list file as a parameter. For example, this might be a list of
all RefSeq genes, as available here. The command
plink --bfile mydata --clump myresults.assoc --clump-range glist-hg18
would, for example, generate the additional file
plink.clumped.ranges
which has the fields
CHR Chromosome code
SNP Index SNP per clump
P p-value
N Number of clumped SNPs
POS Genomic co-ordinates
KB kb span of clumped SNPs
RANGES List of ranges/genes that intersect the clumped region
For example, the first four rows of a simulated, random study are:
CHR SNP P N POS KB RANGES
17 rs9944528 1.927e-05 2 chr17:77894039..77933018 38.979 [UTS2R,SKIP,FLJ35767]
9 rs17534370 1.958e-05 1 chr9:70297172..70297172 0 [PGM5]
11 rs12418173 1.965e-05 7 chr11:112102294..112133479 31.185 []
which indicates that rs9944528 has one other SNP that clumps with it (N=2), which is just under 40kb away, spanning three genes;
the next SNP doesn't have any clumped partners and falls in the PGM5 gene; the third SNP has 6 other clumped SNPs, spanning just over
30kb, but no genes are in that interval.
If the --clump-range flag is added in --clump-verbose mode, the output looks slightly different. In this case,
the special plink.clumped.ranges file is not produced: now all the output is in the plink.clumped file:
CHR F SNP BP P TOTAL NSIG S05 S01 S001 S0001
17 1 rs9944528 77894039 1.93e-05 1 0 0 0 0 1
KB RSQ ALLELES F P
(INDEX) rs9944528 0 1.000 C 1 1.93e-05
rs7207095 39 0.648 CG/GA 1 2.83e-05
RANGE: chr17:77894039..77933018
SPAN: 38kb
GENES w/SNPs: SKIP
GENES: UTS2R,SKIP,FLJ35767
------------------------------------------------------------------
CHR F SNP BP P TOTAL NSIG S05 S01 S001 S0001
9 1 rs17534370 70297172 1.96e-05 0 0 0 0 0 0
GENES: PGM5
------------------------------------------------------------------
CHR F SNP BP P TOTAL NSIG S05 S01 S001 S0001
11 1 rs12418173 112133479 1.96e-05 6 0 0 0 2 4
KB RSQ ALLELES F P
(INDEX) rs12418173 0 1.000 G 1 1.96e-05
rs12800322 -31.2 0.902 GG/AC 1 0.000133
rs1870496 -30.7 0.853 GC/AT 1 0.000267
rs2199197 -20.1 1 GG/AA 1 9.76e-05
rs7931135 -16.7 1 GG/AA 1 1.96e-05
rs12418739 -10.8 1 GA/AC 1 3.5e-05
rs898311 -4.98 1 GT/AC 1 1.96e-05
RANGE: chr11:112102294..112133479
SPAN: 31kb
GENES w/SNPs:
GENES:
------------------------------------------------------------------
Note, if there is more than 1 SNP in a clump, we distinguish here
between whether or not one of the clumped SNPs is actually within the
a specified region or gene (GENES w/SNPs) versus whether that
gene or region is just within the general clumped range
(GENES).
Naturally, any file can be used with --clump-range -- the regions do not have to correspond to
actual genes, but they could be regions of interest identified by other means.
Finally, the command
--clump-range-border 20
adds a 20kb border to the start and stop of each gene or region.
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).
Selecting the single best proxy
The command
--clump-best
produces an additional file
plink.clumped.best
which contains the fields
INDEX Index SNP identifier
PSNP Best proxy SNP
RSQ LD (r-squared) between index and proxy
KB Physical distance between index and proxy
P p-value for proxy SNP
ALLELES The associated haplotypes for the index and proxy SNP
F Which file (from --clump) this result came from
For example, if we use the command
plink --bfile mydata --clump myresults-a.assoc,myresults-b.assoc --clump-best
based on dummy simulated data result files myresults-a.assoc
and myresults-b.assoc, the first few lines of plink.clumped are as follows:
CHR F SNP BP P TOTAL NSIG S05 S01 S001 S0001 SP2
11 1 rs2513514 75922141 2.27e-07 3 0 0 0 1 2 rs2508756(1),...
20 1 rs6110115 13911728 8.24e-07 9 0 2 3 2 2 rs6079243(1),...
11 1 rs2508756 75921549 1.07e-06 0 0 0 0 0 0 NONE
15 1 rs16976702 54120691 1.15e-06 1 0 0 0 1 0 rs16976702(2)
The corresponding plink.clumped.best file shows the single
best proxy SNP for each index SNP. This information could have been
extracted manually after using the --clump-verbose, but the
--clump-best option simply makes this easier.
INDEX PSNP RSQ KB P ALLELES F
rs2513514 rs2513514 1 0 8.04e-05 AA/GG 2
rs6110115 rs6110115 1 0 0.00145 CC/AA 2
rs2508756 NA NA NA NA NA NA
rs16976702 rs16976702 1 0 0.0009 GG/CC 2
For example, the best SNP, rs2513514 (which had the lowest p-value in
this case for F 1, i.e. myresults-a.assoc) has a
single best proxy of rs2513514, the same SNP, but in F 2,
i.e. myresults-b.assoc. The third SNP here, rs2508756, does
not have any proxy SNP that meets the criteria for clumping
(--clump-r2, --clump-p2, etc).
Warning If the same SNP existed in both myresults-a.assoc and
myresults-b.assoc then the P value and ALLELES would always,
arbitrarily be selected from the first file. See the note below also.
One might often want to add the three options
--clump-index-first
--clump-replicate
--clump-allow-overlap
along with --clump-best. This would pose the question: what
is the best proxy in myresults-b.assoc
(i.e. --clump-replicate forces a cross-file proxy) for the
top results in myresults-a.assoc
(e.g. --clump-index-first forces the first-listed file to
contain index SNPs only). The --clump-allow-overlap will mean
that a proxy SNP can be selected for more than one index SNP, if it is
the best. These may sometimes be the same SNP, if it is present in
both result sets, otherwise it will rely on all SNPs being present in
the mydata fileset, and will use LD information to select the
best proxy.
NOTE By best proxy, we mean the SNP with the
strongest LD to the index, rather than the best p-value. Which SNP has
the greatest LD will be based on the genotype data and will therefore
be the same for all result files. As such, this command should be
used in such a way that only one result file is being queried for the
best proxy at a time. That is, used
without --clump-replicate, only a single result file should
be specified with --clump. If used
with --clump-replicate then a) --clump-index-first
should always be used and no more than two result files should be
specified with --clump. That is, in this second usage, this
command will try to find the best proxy in the second result file for
each index SNP selected from the first file. Otherwise, if the same
SNP is present in more than one result file, only details for the first
encountered will be reported.
Overall, the most command usage of this will be to select the best SNP
proxy in file B for the hits in A, i.e. in the form:
./plink --bfile mydata
--clump myresults-a.assoc,myresults-b.assoc
--clump-best
--clump-replicate
--clump-index-first
--clump-allow-overlap
--clump-p1 1e-4
--clump-p2 1
--clump-kb 250
--clump-r2 0.2
That is: this will select the SNP from B that is in highest LD with
each SNP in A that has a p-value less than 1e-4
in A. The same SNP in B is allowed to be the best
proxy for more than one SNP in A
(--clump-allow-overlap). The best proxy will be reported no
matter what p-value it has in B (--clump-p2 1)
although it must satisfy the criteria of being at least above r-sq of
0.2 and within 250kb.
|
|