17
LD vignette Measures of linkage disequilibrium David Clayton May 19, 2021 Calculating linkage disequilibrium statistics We shall first load some illustrative data. > data(ld.example) The data are drawn from the International HapMap Project and concern 603 SNPs over a 1mb region of chromosome 22 in sample of Europeans (ceph.1mb) and a sample of Africans (yri.1mb): > ceph.1mb A SnpMatrix with 90 rows and 603 columns Row names: NA06985 ... NA12892 Col names: rs5993821 ... rs5747302 > yri.1mb A SnpMatrix with 90 rows and 603 columns Row names: NA18500 ... NA19240 Col names: rs5993821 ... rs5747302 The details of these SNP are stored in the dataframe support.ld: > head(support.ld) dbSNPalleles Assignment Chromosome Position Strand rs5993821 G/T G/T chr22 15516658 + rs5993848 C/G C/G chr22 15529033 + rs361944 C/G C/G chr22 15544372 + rs361995 C/T C/T chr22 15544478 + rs361799 C/T C/T chr22 15544773 + rs361973 A/G A/G chr22 15549522 + 1

LD vignette Measures of linkage disequilibrium

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LD vignette Measures of linkage disequilibrium

LD vignetteMeasures of linkage disequilibrium

David Clayton

May 19, 2021

Calculating linkage disequilibrium statistics

We shall first load some illustrative data.

> data(ld.example)

The data are drawn from the International HapMap Project and concern 603 SNPs over a1mb region of chromosome 22 in sample of Europeans (ceph.1mb) and a sample of Africans(yri.1mb):

> ceph.1mb

A SnpMatrix with 90 rows and 603 columns

Row names: NA06985 ... NA12892

Col names: rs5993821 ... rs5747302

> yri.1mb

A SnpMatrix with 90 rows and 603 columns

Row names: NA18500 ... NA19240

Col names: rs5993821 ... rs5747302

The details of these SNP are stored in the dataframe support.ld:

> head(support.ld)

dbSNPalleles Assignment Chromosome Position Strand

rs5993821 G/T G/T chr22 15516658 +

rs5993848 C/G C/G chr22 15529033 +

rs361944 C/G C/G chr22 15544372 +

rs361995 C/T C/T chr22 15544478 +

rs361799 C/T C/T chr22 15544773 +

rs361973 A/G A/G chr22 15549522 +

1

Page 2: LD vignette Measures of linkage disequilibrium

The function for calculating measures of linkage disequilibrium (LD) in snpStats is ld. Thefollowing two commands call this function to calculate the D-prime and R-squared measuresof LD between pairs of SNPs for the European and African samples:

> ld.ceph <- ld(ceph.1mb, stats=c("D.prime", "R.squared"), depth=100)

> ld.yri <- ld(yri.1mb, stats=c("D.prime", "R.squared"), depth=100)

The argument depth specifies the maximum separation between pairs of SNPs to be con-sidered, so that depth=1 would have specified calculation of LD only between immediatelyadjacent SNPs.

Both ld.ceph and ld.yri are lists with two elements each, named D.prime and R.squared.These elements are (upper triangular) band matrices, stored in a packed form defined in theMatrix package. They are too large to be listed, but the Matrix package provides an image

method, a convenient way to examine patterns in the matrices. You should look at thesecarefully and note any differences.

> image(ld.ceph$D.prime, lwd=0)

2

Page 3: LD vignette Measures of linkage disequilibrium

Dimensions: 603 x 603

Column

Row

100

200

300

400

500

100 200 300 400 500

> image(ld.yri$D.prime, lwd=0)

3

Page 4: LD vignette Measures of linkage disequilibrium

Dimensions: 603 x 603

Column

Row

100

200

300

400

500

100 200 300 400 500

The important things to note are

1. there are fairly well-defined “blocks” of LD, and

2. LD is more pronounced in the Europeans than in the Africans.

The second point is demonstrated by extracting the D-prime values from the matrices (theyare to be found in a slot named x) and calculating quartiles of their distribution:

> quantile(ld.ceph$D.prime@x, na.rm=TRUE)

0% 25% 50% 75% 100%

0.0000000 0.1284461 0.2966520 0.6373923 1.0000000

4

Page 5: LD vignette Measures of linkage disequilibrium

> quantile(ld.yri$D.prime@x, na.rm=TRUE)

0% 25% 50% 75% 100%

0.0000000 0.1066341 0.2438494 0.5098348 1.0000000

If preferred, image can produce colour plots. We first create a set of 10 colours rangingfrom yellow (for low values) to red (for high values)

> spectrum <- rainbow(10, start=0, end=1/6)[10:1]

and plot the image, with a colour key down its right hand side

> image(ld.ceph$D.prime, lwd=0, cuts=9, col.regions=spectrum, colorkey=TRUE)

Dimensions: 603 x 603

Column

Row

100

200

300

400

500

100 200 300 400 500

0.0

0.2

0.4

0.6

0.8

1.0

5

Page 6: LD vignette Measures of linkage disequilibrium

The R-squared matrices provide similar pictures, although they are rather less regular.To show this clearly, we focus on the 200 SNPs starting from the 75-th, using the Europeandata

> use <- 75:274

> image(ld.ceph$D.prime[use,use], lwd=0)

Dimensions: 200 x 200

Column

Row

50

100

150

50 100 150

> image(ld.ceph$R.squared[use,use], lwd=0)

6

Page 7: LD vignette Measures of linkage disequilibrium

Dimensions: 200 x 200

Column

Row

50

100

150

50 100 150

The R-squared values are smaller and there are “holes” in the LD blocks; SNPs within an LDblock do not necessarily have large R-squared between them. This is further demonstratedin the next section.

D-prime, R-squared, and distance

To examine the relationship between LD and physical distance, we first need to construct asimilar matrix holding the physical distances. This is carried out, by first calculating eachoff-diagonal, and then combining them into a band matrix

7

Page 8: LD vignette Measures of linkage disequilibrium

> pos <- support.ld$Position

> diags <- vector("list", 100)

> for (i in 1:100) diags[[i]] <- pos[(i+1):603] - pos[1:(603-i)]

> dist <- bandSparse(603, k=1:100, diagonals=diags)

The values in the body of the band matrix are contained in a slot named x, so the follow-ing commands extract the physical distances and the corresponding LD statistics for theEuropeans:

> distance <- dist@x

> D.prime <- ld.ceph$D.prime@x

> R.squared <- ld.ceph$R.squared@x

These are very long vectors so we use the hexbin package to produce abreviated plots. Wefirst demonstrate the relationship between D-prime and R-squared

> plot(hexbin(D.prime^2, R.squared))

8

Page 9: LD vignette Measures of linkage disequilibrium

0 0.2 0.4 0.6 0.8 1

0

0.2

0.4

0.6

0.8

1

D.prime^2

R.s

quar

ed

18541706255934124264511759696822767585279380

1023211085119381279013643

Counts

We see that the square of D-prime provides an upper bound for R-squared; a high D-primeindicates the potential for two SNPs to be highly correlated, but they need not be. Thefollowing commands examine the relationship between the two LD measures and physicaldistance

> plot(hexbin(distance, D.prime, xbin=10))

9

Page 10: LD vignette Measures of linkage disequilibrium

50000 1e+05 150000

0

0.2

0.4

0.6

0.8

1

distance

D.p

rime

112023835747659471383295010691188130714251544166317811900

Counts

> plot(hexbin(distance, R.squared, xbin=10))

10

Page 11: LD vignette Measures of linkage disequilibrium

50000 1e+05 150000

0

0.2

0.4

0.6

0.8

1

distance

R.s

quar

ed

135871510721428178521422499285632133570392742844640499753545711

Counts

Although the data are very noisy, the first plot is consistent with an approximately expo-nential decline in mean D-prime with distance, as predicted by the Malecot model.

A view of the calculations

To understand the calculations let us consider the first and fifth SNPs in the Europeans. Weshall first converting these to character data for legibility, and then tabulate the two-SNPgenotypes, saving the 3 × 3 table of genotype frequencies as tab33:

11

Page 12: LD vignette Measures of linkage disequilibrium

> snp1 <- as(ceph.1mb[,1], "character")

> snp5 <- as(ceph.1mb[,5], "character")

> tab33 <- table(snp1, snp5)

> tab33

snp5

snp1 A/A A/B B/B

A/A 6 21 17

A/B 2 18 17

B/B 0 2 7

These two SNPs have a moderately high D-prime, but a very low R-squared:

> ld.ceph$D.prime[1,5]

[1] 0.570161

> ld.ceph$R.squared[1,5]

[1] 0.06628534

The LD measures cannot be directly calculated from the 3 × 3 table above, but from a2 × 2 table of haplotype frequencies. In only eight cells around the periphery of the tablewe can unambiguously count haplotypes and these give us the following table of haplotypefrequencies:

rs361799rs5993821 A B

A 35 72B 4 33

However, in the central cell of the 3×3 table (i.e. tab33[2,2]) we have 18 doubly heterozy-gous subjects, whose genotype could correspond either to the pair of haplotypes A-A/B-B orto the pair of haplotypes A-B/B-A. These are said to have unknown phase. The expectedsplit between these possible phases is determined by a further measure of LD — the oddsratio. If the odds ratio is θ, we expect a proportion θ/(1 + θ) of the doubly heterozygoussubjects to be A-A/B-B, and a proportion 1/(1 + θ) to be A-B/B-A.

We next use ld to obtain an estimate of this odds ratio1 and, using this, we partition thedoubly heterozygous individuals between the two possible phases:

> OR <- ld(ceph.1mb[,1], ceph.1mb[,5], stats="OR")

> OR

1Here ld is called with two arguments of class SnpStats and, since only the odds ratio is to be calculated,it returns the odds ratio rather than a list.

12

Page 13: LD vignette Measures of linkage disequilibrium

rs361799

rs5993821 4.163

> AABB <- tab33[2,2]*OR/(1+OR)

> ABBA <- tab33[2,2]*1/(1+OR)

> AABB

rs361799

rs5993821 14.51

> ABBA

rs361799

rs5993821 3.486

We are now able to construct the table of haplotype frequencies:

rs361799rs5993821 A B

A 49.51 75.49B 7.486 47.51

It is easy to confirm that the odds ratio in this table, (49.51 × 47.51)/(75.49 × 7.486),corresponds closely with that given by the ld function. Having obtained the 2 × 2 table ofhaplotype frequencies, any LD statistic may be calculated.

Of course, there is a circularity here; we needed to know the odds ratio in order to be ableto construct the 2 × 2 table from which it is calculated! That is why these calculations arenot simple. The usual method involves iterative solution using an EM algorithm: an initialguess at the odds ratio is used, as in the calculations above, to compute a new estimate,and these calculations are repeated until the estimate stabilizes. However, in snpStats theestimate is calculated in one step, by solving a cubic equation.

The extent of LD around a point

Often we wish to guage how far LD extends from a given point (for example, from a SNPwhich is associated with disease incidence). For illustrative purposes we shall consider theregion surroung the 168-th SNP, rs2385786. We first calculate D-prime values for the 100SNPs on either side of rs2385786, and their positions:

> lr100 <- c(68:167, 169:268)

> D.prime <- ld(ceph.1mb[,168], ceph.1mb[,lr100], stats="D.prime")

> where <- pos[lr100]

We now plot D.prime against position, adding a simple smoother:

13

Page 14: LD vignette Measures of linkage disequilibrium

> plot(where, D.prime)

> lines(where, smooth(D.prime))

15700000 15800000 15900000 16000000

0.0

0.2

0.4

0.6

0.8

1.0

where

D.p

rime

Although the data are somewhat noisy (the sample size is small), the region of LD is fairlyclearly delineated.

Selecting tag SNPs

Several ways have been suggested to select a set of “tag” SNPs which can be used to testfor associations in a given region. That described below is based upon a heirarchical cluster

14

Page 15: LD vignette Measures of linkage disequilibrium

analysis. We shall apply it to the region of high LD identified in the previous section, whichlies between positions 1.579 × 107 and 1.587 × 107.

The following commands identify which SNPs lie in this region, and extracts the relevantpart of the R2 matrix, as a symmetric matrix rather than as an upper triangular matrix.

> use <- pos>=1.579e7 & pos<=1.587e7

> r2 <- forceSymmetric(ld.ceph$R.squared[use, use])

The next step is to convert (1 − R2) into a distance matrix, stored as required for thehierachical clustering function hclust, and to carry out a complete linkage cluster analysis

> D <- as.dist(1-r2)

> hc <- hclust(D, method="complete")

To plot the dendrogram, we must first adjust the character size for legibility:

> par(cex=0.5)

> plot(hc)

15

Page 16: LD vignette Measures of linkage disequilibrium

rs11

9132

27rs

1698

1924

rs48

1993

4rs

4819

936

rs23

8578

5rs

5748

748

rs57

4874

9 rs11

7045

37rs

1773

3785

rs11

9140

17rs

5748

756

rs22

1572

5rs

1981

707

rs57

4876

1rs

1108

9387

rs59

9260

0rs

5994

097

rs59

9411

0rs

9618

953

rs19

8170

8rs

7510

758

rs59

9260

1rs

5992

607

rs57

4876

9rs

7291

404

rs59

9259

0rs

5748

744

rs59

9409

3rs

5994

095

rs59

9258

9rs

9306

242

rs59

9259

3rs

5748

762

rs96

1895

4rs

5748

759

rs96

1894

8rs

7287

116

rs57

4877

3rs

8137

298

rs59

9259

8rs

5748

771

rs57

4876

6rs

1108

9388

rs23

9915

2rs

7136

73rs

5994

098

rs93

3461

rs57

4875

2rs

5748

755

rs57

4874

7rs

5748

750

rs23

8578

6rs

1024

731

rs57

4876

5rs

1216

7026

rs96

1893

7rs

5994

104

rs59

9260

4rs

5748

798

rs48

1954

5rs

9606

559

rs20

4160

7rs

3948

637

rs10

2473

2rs

4819

923

rs19

9048

3

0.0

0.2

0.4

0.6

0.8

1.0

Cluster Dendrogram

hclust (*, "complete")D

Hei

ght

The interpretation of this dendrogram is that, if we were to draw a horizontal line at a“height” of 0.5, then this would divide the SNPs into clusters in such a way that the valueof (1 − R2) between any pair of SNPs in a cluster would be no more than 0.5 (so that R2

would be at least 0.5). This can be carried out using the cutree function, which returns thecluster membership of each SNP:

> clusters <- cutree(hc, h=0.5)

> head(clusters)

rs5994093 rs5748744 rs5992589 rs9306242 rs5994095 rs5992590

1 1 1 1 1 2

16

Page 17: LD vignette Measures of linkage disequilibrium

> table(clusters)

clusters

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

5 1 7 1 3 6 2 2 6 1 9 12 3 1 1 1 4 1

It can be seen that there are 18 clusters. To have a reasonable chance of picking up anassociation with the SNPs in this 80kb region, we would need to type a SNP from each oneof these clusters. Of these, 7 SNPs would only tag themselves!

A threshold R2 of 0.5 might seem rather low. However, this is a “worst case” figure andmost values of R2 would be substantially better than this, particularly if an effort is madeto choose tag SNPs which are in the center of clusters rather than on their edges. Also, thisprocess has only considered tagging by single SNPs; it can be that two or more tag SNPs,taken together, can provide substantially better prediction than any one of them alone.

17