colBinnedSmoothing.matrix | R Documentation |
Binned smoothing of a matrix column by column.
## S3 method for class 'matrix' colBinnedSmoothing(Y, x=seq_len(nrow(Y)), w=NULL, xOut=NULL, xOutRange=NULL, from=min(x, na.rm = TRUE), to=max(x, na.rm = TRUE), by=NULL, length.out=length(x), na.rm=TRUE, FUN="median", ..., verbose=FALSE)
Y |
A |
x |
A (optional) |
w |
A optional |
xOut |
Optional |
xOutRange |
Optional Kx2 |
from, to, by, length.out |
If neither |
FUN |
A |
na.rm |
If |
... |
Not used. |
verbose |
See |
Note that all zero-length bins [x0,x1) will get result
in an NA
value, because such bins contain no data points.
This also means that colBinnedSmoothing(Y, x=x, xOut=xOut)
where xOut
contains duplicated values, will result in
some zero-length bins and hence NA
values.
Returns a numeric
KxI matrix
(or a vector
of length K) where
K is the total number of bins.
The following attributes are also returned:
xOut
The center locations of each bin.
xOutRange
The bin boundaries.
count
The number of data points within each bin
(based solely on argument x
).
binWidth
The average bin width.
Henrik Bengtsson
*colKernelSmoothing()
.
# Number of tracks I <- 4 # Number of data points per track J <- 100 # Simulate data with a gain in track 2 and 3 x <- 1:J Y <- matrix(rnorm(I*J, sd=1/2), ncol=I) Y[30:50,2:3] <- Y[30:50,2:3] + 3 # Uniformly distributed equal-sized bins Ys3 <- colBinnedSmoothing(Y, x=x, from=2, by=3) Ys5 <- colBinnedSmoothing(Y, x=x, from=3, by=5) # Custom bins xOutRange <- t(matrix(c( 1, 11, 11, 31, 31, 41, 41, 51, 51, 81, 81, 91, 91,101 ), nrow=2)) YsC <- colBinnedSmoothing(Y, x=x, xOutRange=xOutRange) # Custom bins specified by center locations with # maximized width relative to the neighboring bins. xOut <- c(6, 21, 36, 46, 66, 86, 96) YsD <- colBinnedSmoothing(Y, x=x, xOut=xOut) xlim <- range(x) ylim <- c(-3,5) layout(matrix(1:I, ncol=1)) par(mar=c(3,3,1,1)+0.1, pch=19) for (ii in 1:I) { plot(NA, xlim=xlim, ylim=ylim) points(x, Y[,ii], col="#999999") xOut <- attr(Ys3, "xOut") lines(xOut, Ys3[,ii], col=2) points(xOut, Ys3[,ii], col=2) xOut <- attr(Ys5, "xOut") lines(xOut, Ys5[,ii], col=3) points(xOut, Ys5[,ii], col=3) xOut <- attr(YsC, "xOut") lines(xOut, YsC[,ii], col=4) points(xOut, YsC[,ii], col=4, pch=15) xOut <- attr(YsD, "xOut") lines(xOut, YsD[,ii], col=5) points(xOut, YsD[,ii], col=5, pch=15) if (ii == 1) { legend("topright", pch=c(19,19,15,15), col=c(2,3,4,5), c("by=3", "by=5", "Custom #1", "Custom #2"), horiz=TRUE, bty="n") } } # Sanity checks xOut <- x YsT <- colBinnedSmoothing(Y, x=x, xOut=xOut) stopifnot(all(YsT == Y)) stopifnot(all(attr(YsT, "counts") == 1)) xOut <- attr(YsD, "xOut") YsE <- colBinnedSmoothing(YsD, x=xOut, xOut=xOut) stopifnot(all(YsE == YsD)) stopifnot(all(attr(YsE, "xOutRange") == attr(YsD, "xOutRange"))) stopifnot(all(attr(YsE, "counts") == 1)) # Scramble ordering of loci idxs <- sample(x) x2 <- x[idxs] Y2 <- Y[idxs,,drop=FALSE] Y2s <- colBinnedSmoothing(Y2, x=x2, xOut=x2) stopifnot(all(attr(Y2s, "xOut") == x2)) stopifnot(all(attr(Y2s, "counts") == 1)) stopifnot(all(Y2s == Y2)) xOut <- x[seq(from=2, to=J, by=3)] YsT <- colBinnedSmoothing(Y, x=x, xOut=xOut) stopifnot(all(YsT == Ys3)) stopifnot(all(attr(YsT, "counts") == 3)) xOut <- x[seq(from=3, to=J, by=5)] YsT <- colBinnedSmoothing(Y, x=x, xOut=xOut) stopifnot(all(YsT == Ys5)) stopifnot(all(attr(YsT, "counts") == 5))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.