#' Simple quantifySNPs function.
#'
#' quantifySNPs converts trinary snps to frequency data
#'
#' @param snps input matrix
#' @param freqthresh remove snps below this frequency
#' @param shiftit shift the snps to smooth the estimate
#' @param replaceWithF replaces snps with frequency values
#' @param traitvecin map snps to trait vector
#' @param trainvec defines training data
#' @return matrix is output
#' @author Avants BB
#' @examples
#'
#' mat <- matrix(c(0, 1, 2, 0, 0, 1, 2, 2, 2), ncol = 3)
#' wmat <- quantifySNPs(mat, freqthresh = 0)
#'
#' @export quantifySNPs
quantifySNPs <- function(
snps, freqthresh = 0.1,
shiftit = FALSE, replaceWithF = TRUE, traitvecin = NA, trainvec = NA) {
if (nargs() == 0) {
print("Usage: x_b<-quantifySNPs( x ) ")
return(1)
}
qsnps <- snps
okrow <- rep(FALSE, ncol(qsnps))
traitvec <- as.numeric(traitvecin)
NN <- ncol(qsnps)
progress <- txtProgressBar(min = 0, max = NN, style = 3)
for (y in 1:NN) # or dd for ADNI_SNPS
{
temp <- snps[, y]
if (sum(is.na(as.numeric(temp))) == 0) okrow[y] <- TRUE
if (okrow[y]) {
t1 <- which(temp == 0)
t2 <- which(temp == 1)
t3 <- which(temp == 2)
f1 <- length(t1) / length(temp)
f2 <- length(t2) / length(temp)
f3 <- length(t3) / length(temp)
if (f1 < freqthresh) okrow[y] <- FALSE
if (f2 < freqthresh) okrow[y] <- FALSE
if (f3 < freqthresh) okrow[y] <- FALSE
if (replaceWithF & is.na(traitvec)) {
qsnps[t1, y] <- f1
qsnps[t2, y] <- f2
qsnps[t3, y] <- f3
}
if (replaceWithF & !is.na(traitvec) & is.na(trainvec)) {
qsnps[t1, y] <- mean(traitvec[t1])
qsnps[t2, y] <- mean(traitvec[t2])
qsnps[t3, y] <- mean(traitvec[t3])
}
if (replaceWithF & !is.na(traitvec) & !is.na(trainvec)) {
t1tr <- which(temp == 0 & trainvec)
t2tr <- which(temp == 1 & trainvec)
t3tr <- which(temp == 2 & trainvec)
qsnps[t1, y] <- mean(traitvec[t1tr])
qsnps[t2, y] <- mean(traitvec[t2tr])
qsnps[t3, y] <- mean(traitvec[t3tr])
}
}
if (y %% 100 == 0 || y == NN) {
setTxtProgressBar(progress, y)
}
}
on.exit({
close(progress)
})
qsnps <- qsnps[, okrow]
if (shiftit & usePkg("magic")) {
qsnps <- qsnps + magic::ashift(qsnps, c(0, 1)) + magic::ashift(qsnps, c(0, -1))
qsnps <- qsnps + magic::ashift(qsnps, c(0, 1)) + magic::ashift(qsnps, c(0, -1))
}
return(qsnps)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.