Multi-platform circular binary segmentation for analysis of DNA copy number data.

Share:

Description

This library contains functions that perform multi-platform circular binary segmentation for detecting DNA copy number changes using intensity data from multiple platforms or technical replictes from the same platform. The fineness of the segmnetation (i.e. the number of change-points) can be determined either using a modified BIC criterion or a pre-set weighted chi-square threshold.

Details

Package: mpcbs
Type: Package
Version: 1.0
Date: 2009-07-23
License: Academic
LazyLoad: yes

The main segmentation functions are "mpcbs" and "mpcbs.mbic". The function "mpcbs" does multiplatform segmentation with user defined stopping criterion, and the function "mpcbs.mbic" does multiplatform segmentation with stopping criterion determined by the BIC criterion. After segmentation, the function "cross.platform.consensus" computes the platform specific response ratios and gives a cross-platform consensus copy number estimate for each segment. These two functions ("mpcbs"/"mpcbs.mbic" and "cross.platform.consensus") can be iterated for better performance.

Several plotting functions for visualizing multi-platform data are also provided. The most useful of these is plott.crossplatform. Also, scatter.ci and scatter.cpfit are useful for diagnosing the fit given by cross.platform.consensus.

An additional function, mpscan, does not do circular binary segmentation but simply does a sliding window scan, with varying window width, using the projected chi-square statistic.

Author(s)

Nancy R. Zhang <nrzhang@stanford.edu>

References

Zhang, NR, Senbabaoglu, Y. and Li, J.Z. (2009) Joint Estimation of DNA Copy Number from Multiple Platforms. Under review, download manuscript from http://www-stat.stanford.edu/~nzhang/web_multiplatform/

See Also

msscan

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
data(mpcbs.example)

# there are 3 platforms represented in this data example: Illumina, Affymetrix, and Agilent.
names(mpcbs.example)

# K is the number of platforms.
K=3

# Store the chromosome positions in vector pos,
# the intensities in vector y:

pos=vector("list",K)
pos[[1]] = mpcbs.example$illu[,1]
pos[[2]] = mpcbs.example$affy[,1]
pos[[3]] = mpcbs.example$agil[,1]

y = vector("list",K)
y[[1]] = mpcbs.example$illu[,2]
y[[2]] = mpcbs.example$affy[,2]
y[[3]] = mpcbs.example$agil[,2]

# Names of the platforms:
platform.names=c("Illumina","Affymetrix","Agilent")

# Get the anchor set.
anchor = merge.pos(pos)

# Perform the segmentation.
seg<-mpcbs.mbic(y,pos,anchor, MAX.CHPTS=10, platform.names=platform.names,plots=TRUE)

# Compute platform specific variance terms.
sigma2 = rep(0,K)
for(k in 1:K) sigma2[k] = compute.var(y[[k]])
# When data from multiple chromosomes are available,
# put them in the list "segs".  Now, the list has length 1.
segs=vector("list",1)
segs[[1]] = seg
res=cross.platform.consensus(segs, sigma2, platform.names, plots=TRUE)
consensus.cn = res$consensus.cn[[1]]    # consensus.cn[t] is consensus copy number estimate at anchor$merged.pos[t]

# Finally, plot the cross platform consensus.

# Set parameter num.panels to K+1 (default is K), because we will plot consensus in (K+1)th panel.
plot.crossplatform(pos,y, yhat=seg$yhat, anchor=anchor,platform.names=platform.names, num.panels=K+1, col="darkgray")
plot(anchor$merged.pos, consensus.cn, type="l", lwd=2, col="red", 
        xlab="Genome Position", ylab="Log Ratio", main="Consensus Copy Number Estimate", cex.lab=2)
    
# Zoom in:
xmin=5.4e7; xmax=5.7e7
plot.crossplatform(pos,y, yhat=seg$yhat, anchor=anchor,platform.names=platform.names, num.panels=K+1, xlim=c(xmin,xmax), col="darkgray")
plot(anchor$merged.pos, consensus.cn, type="l", lwd=2, col="red", 
        xlab="Genome Position", ylab="Log Ratio", main="Consensus Copy Number Estimate", cex.lab=2, xlim=c(xmin,xmax))