Skip to contents

Generates synthetic 4D fMRI data with realistic spatiotemporal properties including temporal autocorrelation, spatial smoothness, heteroscedasticity, and optional global signal fluctuations and latent components.

Usage

simulate_fmri(
  mask,
  n_time,
  TR = 2,
  spatial_fwhm = 6,
  ar_mean = 0.45,
  ar_sd = 0.08,
  noise_sd = 1,
  hetero_fwhm = 20,
  hetero_strength = 0.6,
  global_amp = 0.2,
  global_rho = 0.85,
  n_factors = 4,
  factor_fwhm = 12,
  factor_rho = 0.8,
  seed = NULL,
  return_centered = TRUE
)

Arguments

mask

A NeuroVol object defining the brain mask region. Can be binary or continuous (non-zero values define the mask).

n_time

Integer specifying the number of time points to simulate.

TR

Numeric value for the repetition time in seconds (default = 2.0). Currently used only for metadata.

spatial_fwhm

Numeric value specifying the spatial smoothness in mm (full width at half maximum) applied to each timepoint (default = 6).

ar_mean

Numeric value for the mean of the AR(1) coefficient distribution across voxels (default = 0.45).

ar_sd

Numeric value for the standard deviation of the AR(1) coefficient distribution (default = 0.08).

noise_sd

Numeric value for the baseline noise standard deviation (default = 1.0).

hetero_fwhm

Numeric value for the spatial scale (FWHM in mm) of the heteroscedasticity field (default = 20).

hetero_strength

Numeric value controlling the strength of spatial heteroscedasticity on log scale (default = 0.6).

global_amp

Numeric value for the amplitude of global signal fluctuations as a fraction of median noise (default = 0.2). Set to 0 to disable.

global_rho

Numeric value for the AR(1) coefficient of global signal (default = 0.85).

n_factors

Integer specifying the number of latent spatial components (default = 4). Set to 0 to disable.

factor_fwhm

Numeric value for the spatial smoothness (FWHM in mm) of latent component maps (default = 12).

factor_rho

Numeric value for the AR(1) coefficient of latent component time courses (default = 0.8).

seed

Integer seed for random number generation (default = NULL for no seed).

return_centered

Logical indicating whether to center each voxel's time series to mean zero (default = TRUE).

Value

A NeuroVec object containing the simulated 4D fMRI data.

Details

The simulation combines several realistic features:

  • Voxel-wise AR(1) temporal autocorrelation with spatial variation

  • Spatial smoothing applied to innovations for realistic spatial correlation

  • Heteroscedastic noise with smooth spatial modulation

  • Optional low-frequency global signal fluctuations

  • Optional latent spatial components resembling resting-state networks

The spatial smoothing uses the package's optimized gaussian_blur function for efficiency.

References

Welvaert, M., & Rosseel, Y. (2013). On the definition of signal-to-noise ratio and contrast-to-noise ratio for fMRI data. PloS one, 8(11), e77089.

Examples

# Create a simple spherical mask
dims <- c(32, 32, 20)
mask_array <- array(FALSE, dims)
center <- dims / 2
for (i in 1:dims[1]) {
  for (j in 1:dims[2]) {
    for (k in 1:dims[3]) {
      if (sum(((c(i,j,k) - center) / (dims/3))^2) <= 1) {
        mask_array[i,j,k] <- TRUE
      }
    }
  }
}

mask <- NeuroVol(mask_array, NeuroSpace(dims, c(3,3,3)))

# Simulate 100 time points
sim_data <- simulate_fmri(mask, n_time = 100, seed = 42)

# Check dimensions
dim(sim_data)  # Should be c(32, 32, 20, 100)
#> [1]  32  32  20 100