''' Run models on ROI data ''' import os import numpy as N from scipy import io as sio import scipy.sandbox.models as SSM import scipy.interpolate as SI from neuroimaging.modalities.fmri import protocol from neuroimaging.modalities.fmri import hrf from neuroimaging.modalities.fmri import functions data_file = os.path.join('..', 'data', 'roi_data.mat') roi_data = sio.loadmat(data_file)['roi_data'] # Specify type of linear model to estimate model_type = SSM.regression.ar_model ar_rho = 3 ar_niter = 6 # Specify drift term for all models drift_window = (0,256) drift_df = 7 drift = functions.SplineConfound(df=drift_df, window=drift_window) drift_term = protocol.ExperimentalQuantitative( 'spline_drift', drift) analyses = {} for sb in range(roi_data.shape[0]): analyses[sb] = {} for ss in range(roi_data.shape[1]): data = roi_data[sb, ss] onsets = data.ons tr = data.TR y = data.y movements = data.movements # Adust onsets to seconds onsets *= tr # Create time vector T = N.arange(len(y)) * tr # Make event factor flashes = zip(['flash']*len(onsets), onsets) flash_factor = protocol.ExperimentalFactor('flash', flashes, delta=True) flash_factor.convolve(hrf.canonical) # Add movements by providing interpolator moves_interpolator = functions.InterpolatedConfound(T, movements.T) movement_term = protocol.ExperimentalQuantitative( 'movement', moves_interpolator) # Add factor, moves and drift term to model formula = flash_factor + movement_term + drift_term # Calculate design from model and time vector design = formula(time=T).T # Estimate design on time series data model = model_type(design, rho=ar_rho) result = model.iterative_fit(y, niter=ar_niter) analyses[sb][ss] = {'model': model, 'result': result}