R/clusterTimeSeries.R

Defines functions clusterTimeSeries

Documented in clusterTimeSeries

#' Split time series image into k distinct images
#'
#' Uses clustering methods to split a time series into similar subsets.
#'
#'
#' @param mat input time series matrix
#' @param krange k cluster range to explore
#' @param nsvddims eg 2
#' @param criterion for clustering see pamk
#' @return matrix is output
#' @author Avants BB
#' @examples
#'
#' \dontrun{
#'   if (!exists("fn") ) fn<-getANTsRData("pcasl")
#'    # high motion subject
#'   asl<-antsImageRead(fn,4)
#'   tr<-antsGetSpacing(asl)[4]
#'   aslmean<-getAverageOfTimeSeries( asl )
#'   aslmask<-getMask(aslmean,lowThresh=mean(aslmean),cleanup=TRUE)
#'   omat<-timeseries2matrix(asl, aslmask )
#'   clustasl<-clusterTimeSeries( omat, krange=4:10 )
#'   for ( ct in 1:max(clustasl$clusters) )
#'     {
#'     sel<-clustasl$clusters != ct
#'     img<-matrix2timeseries( asl, aslmask, omat[sel,] )
#'     perf <- aslPerfusion( img, 
#'       dorobust=0.9, useDenoiser=4, skip=10, useBayesian=0,
#'       moreaccurate=0, verbose=F, mask=aslmask )
#'     perfp <- list( sequence="pcasl", m0=perf$m0 )
#'     cbf <- quantifyCBF( perf$perfusion, perf$mask, perfp )
#'     }
#'   }
#'
#' @export clusterTimeSeries
clusterTimeSeries <- function(mat, krange = 2:10,
  nsvddims = NA, criterion = "asw") {
  if (nargs() == 0) {
    print(args(clusterTimeSeries))
    return(1)
  }
  if ( !usePkg("fpc") ) { print("Need fpc package"); return(NULL) }
  if (is.na(nsvddims))
    nsvddims <- (max(krange) * 2)
  # mat<-timeseries2matrix( img, mask )
  if (nsvddims > nrow(mat))
    nsvddims <- nrow(mat)/2
  matsvd <- svd(mat, nu = nsvddims, nv = 0)
  pk <- fpc::pamk(mat, krange = krange, criterion = criterion)
  clusters <- pk$pamobject$clustering
  tsimagelist <- list()
  for (i in 1:max(clusters)) {
    kmat <- mat[clusters != i, ]
    tsimagelist[[i]] <- kmat
    # matrix2timeseries( img, mask, kmat )
  }
  return(list(kimgs = tsimagelist, clusters = clusters))
}
neuroconductor-devel/ANTsR documentation built on April 1, 2021, 1:02 p.m.