#' alffmap
#'
#' Amplitude of Low Frequency Fluctuations (ALFF; Zang et al., 2007) and
#' fractional Amplitude of Low Frequency Fluctuations (f/ALFF; Zou et al., 2008)
#' are related measures that quantify the amplitude of low frequency
#' oscillations (LFOs). This function outputs ALFF and fALFF for the input.
#'
#' @param x input vector for the time series of interest
#' @param flo low frequency, typically 0.01
#' @param fhi high frequency, typically 0.1
#' @param tr the period associated with the vector x (inverse of frequency)
#' @param detrend detrend the input time series
#' @param takesqrt take the sqrt of the computed values
#' @param kernel smoothing kernel in estimate, see \code{spec.pgram}
#' @return vector is output showing ALFF and fALFF values
#' @author Avants BB
#' @examples
#'
#'
#' set.seed(1)
#' mat <- matrix(rnorm(3000), ncol = 50)
#' fallf <- apply(mat, FUN = alffmap, MARGIN = 2)
#' k <- kernel("daniell", rep(2, 3))
#' fallf2 <- apply(mat, FUN = alffmap, MARGIN = 2, kernel = k)
#' testthat::expect_equal(mean(fallf2), 3.00367017972746)
#'
#' @export alffmap
alffmap <- function(x, flo = 0.01, fhi = 0.1, tr = 1,
detrend = TRUE,
takesqrt = FALSE,
kernel) {
args <- list(
x = stats::ts(x, frequency = 1.0 / tr),
taper = 0, fast = TRUE,
detrend = detrend, demean = FALSE, log = "n", plot = FALSE
)
if (!missing(kernel)) {
args$kernel <- kernel
}
temp <- do.call(stats::spec.pgram, args)
# if ( missing( "kernel") ) {
# temp = stats::spec.pgram(
# stats::ts( x, frequency = 1.0 / tr ), taper = 0, fast = TRUE,
# detrend = detrend, demean = FALSE, log = "n", plot = FALSE )
# } else {
# temp = stats::spec.pgram(
# stats::ts( x, frequency = 1.0 / tr ), taper = 0, fast = TRUE,
# detrend = detrend, demean = FALSE, log = "n", plot = FALSE,
# kernel = kernel )
# }
fselect <- (temp$freq >= flo & temp$freq <= fhi)
denom <- sum(temp$spec)
numer <- sum(temp$spec[fselect])
if (takesqrt) {
denom <- sqrt(denom)
numer <- sqrt(numer)
}
return(c(numer, numer / denom))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.