In neuroimaging the typical analysis approach is a “mass univariate”, where a univariate model is independently fit to each voxel (volume element) in parallel. This approach can be applied to a large range of datasets including: functional MRI, anatomical MRI (with Voxel-Based Morphometry), PET, EEG and MEG data.
The three major software analysis package for neuroimaging: SPM (Statistical Parametric Mapping) and FSL (FMRIB Software Library) and AFNI (AFNI) provide implementations of mass univariate analyses. While there are many commonalities across software packages, there are also software-specific outputs that can be of interest for the end-user.
This document describes the encoding of results of a mass univariate neuroimaging analysis using the NIDM data model ([[!KEATORNI13]]). The goal of this specification is to provide a unified representation of neuroimaging results across analysis software. When a piece of information is only available in a specific software, software-specific extensions are provided.
NIDM-Results is a NIDM compliant structured representation of the results of a massively univariate neuroimaging study.
NIDM-Results specification formally describes the encoding of the massively univariate neuroimaging results into a NIDM representation. Extensions are provided to describe software-specific objects for SPM (Statistical Parametric Mapping) and FSL (FMRIB Software Library) analysis software.
Section 2 provides an overview of NIDM-Results, distinguishing a core set of types and relations, commonly found in provenance, from extended structures catering for more specific uses. It also introduces a modular organization of the data model in components.
Section 3 illustrates how NIDM-Results can be used to express the results of a neuroimaging study in SPM and FSL.
Section 4 provides the definitions (and examples) of NIDM-Results concepts, structured according to three components.
The key word "OPTIONAL" in this document is to be interpreted as described in [RFC2119].
Examples throughout this document use the PROV-N Provenance Notation, specified in a separate document [[prov-n]].
The following namespaces prefixes are used throughout this document.
prefix | namespace IRI | definition |
nidm | http://www.incf.org/ns/nidash/nidm# | The NIDM namespace |
prov | http://www.w3.org/ns/prov# | The PROV namespace [[prov-dm]] |
xsd | http://www.w3.org/2000/10/XMLSchema# | XML Schema Namespace [[XMLSCHEMA11-2]] |
(others) | (various) | All other namespace prefixes are used in examples only. In particular, IRIs starting with "http://example.com" represent some application-dependent IRI [[RFC3987]] |
This section introduces neuroimaging results concepts with informal explanations and illustrative examples (e.g. see SPM results). NIDM-Results distinguishes software-agnostic structures, forming the essence of the results, from software-specific structures catering for more specific uses of results by different analysis software. Core and extended structures are respectively presented in Section 2.1 and Section 2.2.
NIDM-Results is concerned with the modelling of model fitting and inference in the context of massively univariate analyses. A typical example is the analysis of functional MRI data but studies involving other modalities (such as PET) and sequences (e.g. anatomical MRI through VBM) can also be modelled. The domain covered by NIDM-Results data model is represented in .
The concepts found in the core of NIDM-Results are introduced in the rest of this section.
PROV relations used in NIDM-Results are summarized in Table 2.
NIDM-Results Concepts | Types or Relation (PROV concepts) | Name | Overview |
Generation | PROV Relations |
WasGeneratedBy | PROV-DM wasGeneratedBy |
Usage | Used | PROV-DM used | |
Derivation | WasDerivedFrom | PROV-DM wasDerivedFrom |
NIDM-Results Concepts | Types or Relation (PROV concepts) | Name |
nidm:Map | NIDM-Results Types (PROV Entity) |
nidm:Map |
entity(niiri:coordinate_space_id_1, [prov:type = 'nidm:CoordinateSpace', prov:label = "Coordinate space 1" %% xsd:string, nidm:voxelToWorldMapping = "[[-3, 0, 0, 78],[0, 3, 0, -112],[0, 0, 3, -50],[0, 0, 0, 1]]" %% xsd:string, nidm:voxelUnits = "['mm', 'mm', 'mm']" %% xsd:string, nidm:voxelSize = "[3, 3, 3]" %% xsd:string, nidm:inWorldCoordinateSystem = 'nidm:MNICoordinateSystem', nidm:numberOfDimensions = "3" %% xsd:int, nidm:dimensionsInVoxels = "[53,63,46]" %% xsd:string])
NIDM-Results Concepts | Types or Relation (PROV concepts) | Name |
nidm:ModelParametersEstimation | NIDM-Results Types (PROV Activity) |
nidm:ModelParametersEstimation |
nidm:CustomMaskMap | NIDM-Results Types (PROV Entity) |
nidm:CustomMaskMap |
nidm:Data | nidm:Data | |
nidm:DesignMatrix | nidm:DesignMatrix | |
nidm:GrandMeanMap | nidm:GrandMeanMap | |
nidm:MaskMap | nidm:MaskMap | |
nidm:NoiseModel | nidm:NoiseModel | |
nidm:ParameterEstimateMap | nidm:ParameterEstimateMap | |
nidm:ResidualMeanSquaresMap | nidm:ResidualMeanSquaresMap |
activity(niiri:model_pe_id, [prov:type = 'nidm:ModelParametersEstimation', prov:label = "Model parameters estimation", nidm:withEstimationMethod = 'nidm:OrdinaryLeastSquares' ])
entity(niiri:custom_mask_id_1, [prov:type = 'nidm:CustomMaskMap', prov:location = "file:///path/to/CustomMask.nii.gz" %% xsd:anyURI, nidm:filename = "CustomMask.nii.gz" %% xsd:string, dct:format = "image/nifti", prov:label = "Custom mask" %% xsd:string, nidm:atCoordinateSpace = 'niiri:coordinate_space_id_1', crypto:sha512 = "e43b6e01b0463fe7d40782137867a..." %% xsd:string])
entity(niiri:data_id, [prov:type = 'nidm:Data', prov:type = 'prov:Collection', prov:label = "Data" %% xsd:string, nidm:grandMeanScaling = "true" %%xsd:boolean, nidm:targetIntensity = "100" %% xsd:float])
entity(niiri:design_matrix_id, [prov:type = 'nidm:DesignMatrix', prov:location = "file:///path/to/DesignMatrix.csv" %% xsd:anyURI, dct:format = "text/csv", nidm:filename = "DesignMatrix.csv", nidm:visualisation = 'niiri:design_matrix_png_id', prov:label = "Design Matrix" %% xsd:string])
entity(niiri:design_matrix_png_id, [prov:type = 'nidm:Image', prov:location = "file:///path/to/DesignMatrix.png" %% xsd:anyURI, nidm:filename = "DesignMatrix.png", dct:format = "image/png"])
entity(niiri:maximum_intensity_projection_id, [prov:type = 'nidm:Image', prov:location = "file:///path/to/MaximumIntensityProjection.png" %% xsd:anyURI, nidm:filename = "MaximumIntensityProjection.png" %% xsd:string, dct:format = "image/png"])
entity(niiri:grand_mean_map_id, [prov:type = 'nidm:GrandMeanMap', prov:location = "file:///path/to/GrandMean.nii.gz" %% xsd:anyURI, nidm:filename = "GrandMean.nii.gz" %% xsd:string, dct:format = "image/nifti", prov:label = "Grand Mean Map" %% xsd:string, nidm:maskedMedian = "115" %% xsd:float, nidm:atCoordinateSpace = 'niiri:coordinate_space_id_1', crypto:sha512 = "e43b6e01b0463fe7d40782137867a..." %% xsd:string])
entity(niiri:mask_id_2, [prov:type = 'nidm:MaskMap', prov:location = "file:///path/to/Mask.nii.gz" %% xsd:anyURI, nidm:filename = "Mask.nii.gz" %% xsd:string, dct:format = "image/nifti", prov:label = "Mask" %% xsd:string, nidm:atCoordinateSpace = 'niiri:coordinate_space_id_1', crypto:sha512 = "e43b6e01b0463fe7d40782137867a..." %% xsd:string])
entity(niiri:noise_model_id, [prov:type = 'nidm:NoiseModel', nidm:hasNoiseDistribution = 'nidm:GaussianDistribution', nidm:noiseVarianceHomogeneous = "true" %%xsd:boolean, nidm:varianceSpatialModel = 'nidm:SpatiallyLocal', nidm:hasNoiseDependence = 'nidm:IndependentNoise', nidm:dependenceSpatialModel = 'nidm:SpatiallyLocal'])