demo fmri distatis

demo_up:

demo_fmri_distatis

%% Demo: DISTATIS
%
% The data used here is available from http://cosmomvpa.org/datadb.zip
%
% It is based on the following work:
% * Connolly et al (2012), Representation of biological classes in the human
%   brain. Journal of Neuroscience, doi 10.1523/JNEUROSCI.5547-11.2012
%
% Six categories (monkey, lemur, mallard, warbler, ladybug, lunamoth)
% during ten runs in an fMRI study.
%
% This example shows the application of DISTATIS, which tries to find an
% optimal 'compromise' dissimilarity matrix across a set of observations
% (participants)
%
% Reference:
%   - Abdi, H., Valentin, D., O?Toole, A. J., & Edelman, B. (2005).
%     DISTATIS: The analysis of multiple distance matrices. In
%     Proceedings of the IEEE Computer Society: International conference
%     on computer vision and pattern recognition, San Diego, CA, USA
%     (pp. 42?47).
%
% #   For CoSMoMVPA's copyright information and license terms,   #
% #   see the COPYING file distributed with CoSMoMVPA.           #

%% Set data paths
% The function cosmo_config() returns a struct containing paths to tutorial
% data. (Alternatively the paths can be set manually without using
% cosmo_config.)
config = cosmo_config();
study_path = fullfile(config.tutorial_data_path, 'ak6');
output_path = config.output_data_path;

readme_fn = fullfile(study_path, 'README');
cosmo_type(readme_fn);

% reset citation list
cosmo_check_external('-tic');

%% Preprocessing for DISTATIS: RSM analysis
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subject_ids = {'s01', 's02', 's03', 's04', 's05', 's06', 's07', 's08'};
nsubjects = numel(subject_ids);

mask_label = 'vt_mask';

ds_rsms = cell(nsubjects, 1); % allocate space for output
for subject_num = 1:nsubjects
    subject_id = subject_ids{subject_num};

    % Code from here is pretty much identical to that above >>>

    % set path for this subject
    data_path = fullfile(study_path, subject_id);

    % Define data locations and load data from even and odd runs
    mask_fn = fullfile(data_path, [mask_label '.nii']); % vt mask

    % Use odd runs only
    data_fn = fullfile(data_path, 'glm_T_stats_odd.nii');
    ds = cosmo_fmri_dataset(data_fn, 'mask', mask_fn, ...
                            'targets', 1:6, 'chunks', 1);

    ds_rsm = cosmo_dissimilarity_matrix_measure(ds);

    % set chunks (one chunk per subject)
    ds_rsm.sa.chunks = subject_num * ones(size(ds_rsm.samples, 1), 1);
    ds_rsms{subject_num} = ds_rsm;
end

% combine data from all subjects
all_ds = cosmo_stack(ds_rsms);

%% Run DISTATIS
distatis = cosmo_distatis(all_ds);

%% show compromise distance matrix
[compromise_matrix, dim_labels, values] = cosmo_unflatten(distatis, 1);

labels = {'monkey', 'lemur', 'mallard', 'warbler', 'ladybug', 'lunamoth'};
n_labels = numel(labels);
figure();
imagesc(compromise_matrix);
title('DSM');
set(gca, 'YTick', 1:n_labels, 'YTickLabel', labels);
set(gca, 'XTick', 1:n_labels, 'XTickLabel', labels);
ylabel(dim_labels{1});
xlabel(dim_labels{2});
colorbar;

% skip if stats toolbox is not present
if cosmo_check_external('@stats', false)
    figure();
    hclus = linkage(compromise_matrix);
    dendrogram(hclus, 'labels', labels, 'orientation', 'left');
    title('dendrogram');

    figure();
    F = cmdscale(squareform(compromise_matrix));
    text(F(:, 1), F(:, 2), labels);
    title('2D MDS plot');
    mx = max(abs(F(:)));
    xlim([-mx mx]);
    ylim([-mx mx]);
end

%% show citation information
cosmo_check_external('-cite');