Learn R Programming

aroma.core (version 2.4.1)

colBinnedSmoothing.matrix: Binned smoothing of a matrix column by column

Description

Binned smoothing of a matrix column by column.

Usage

## S3 method for class 'matrix':
colBinnedSmoothing(Y, x=seq(length = ncol(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)

Arguments

Y
A numeric JxI matrix (or a vector of length J.)
x
A (optional) numeric vector specifying the positions of the J entries. The default is to assume uniformly distributed positions.
w
A optional numeric vector of prior weights for each of the J entries.
xOut
Optional numeric vector of K bin center locations.
xOutRange
Optional Kx2 matrix specifying the boundary locations for bins. If not specified, the boundaries are set to be the midpoints of the bin centers, such that the bins have maximum lengths
from, to, by, length.out
If neither xOut nor xOutRange is specified, the xOut is generated uniformly from these arguments, which specify the center location of the first and the last bin, and the distance between the center
FUN
na.rm
If TRUE, missing values are excluded, otherwise not.
...
Not used.
verbose
See Verbose.

Value

  • 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.}
  • xOutRangeThe bin boundaries.
  • countThe number of data points within each bin (based solely on argument x).
  • binWidthThe average bin width.

See Also

*colKernelSmoothing().

Examples

Run this code
# 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 <- 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))

Run the code above in your browser using DataLab