def test_ar_modeling(): # Compare against standard routines rng = np.random.RandomState(20110903) N = 10 Y = rng.normal(size=(N,1)) * 10 + 100 X = np.c_[np.linspace(-1,1,N), np.ones((N,))] my_model = OLSModel(X) results = my_model.fit(Y) # fmristat wrapper rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2,)) assert_true(np.all(np.abs(rhos <= 1))) # standard routine rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8) # Make 2D and 3D Y Y = rng.normal(size=(N,4)) * 10 + 100 results = my_model.fit(Y) rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2,4)) assert_true(np.all(np.abs(rhos <= 1))) rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8) # 3D results.resid = np.reshape(results.resid, (N,2,2)) rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2,2,2)) assert_true(np.all(np.abs(rhos <= 1))) rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8)
def test_ar_modeling(): # Compare against standard routines rng = np.random.RandomState(20110903) N = 10 Y = rng.normal(size=(N, 1)) * 10 + 100 X = np.c_[np.linspace(-1, 1, N), np.ones((N, ))] my_model = OLSModel(X) results = my_model.fit(Y) # fmristat wrapper rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2, )) assert_true(np.all(np.abs(rhos <= 1))) # standard routine rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8) # Make 2D and 3D Y Y = rng.normal(size=(N, 4)) * 10 + 100 results = my_model.fit(Y) rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2, 4)) assert_true(np.all(np.abs(rhos <= 1))) rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8) # 3D results.resid = np.reshape(results.resid, (N, 2, 2)) rhos = estimateAR(results.resid, my_model.design, order=2) assert_equal(rhos.shape, (2, 2, 2)) assert_true(np.all(np.abs(rhos <= 1))) rhos2 = ar_bias_correct(results, 2) assert_array_almost_equal(rhos, rhos2, 8)
def test_altprotocol(): block, bT, bF = protocol(descriptions['block'], 'block', *delay.spectral) event, eT, eF = protocol(descriptions['event'], 'event', *delay.spectral) blocka, baT, baF = altprotocol(altdescr['block'], 'block', *delay.spectral) eventa, eaT, eaF = altprotocol(altdescr['event'], 'event', *delay.spectral) for c in bT.keys(): baf = baT[c] if not isinstance(baf, formulae.Formula): baf = formulae.Formula([baf]) bf = bT[c] if not isinstance(bf, formulae.Formula): bf = formulae.Formula([bf]) X = baf.design(t, return_float=True) Y = bf.design(t, return_float=True) if X.ndim == 1: X.shape = (X.shape[0], 1) m = OLSModel(X) r = m.fit(Y) remaining = (r.resid**2).sum() / (Y**2).sum() assert_almost_equal(remaining, 0) for c in bF.keys(): baf = baF[c] if not isinstance(baf, formulae.Formula): baf = formulae.Formula([baf]) bf = bF[c] if not isinstance(bf, formulae.Formula): bf = formulae.Formula([bf]) X = baf.design(t, return_float=True) Y = bf.design(t, return_float=True) if X.ndim == 1: X.shape = (X.shape[0], 1) m = OLSModel(X) r = m.fit(Y) remaining = (r.resid**2).sum() / (Y**2).sum() assert_almost_equal(remaining, 0)
def test_altprotocol(): block, bT, bF = protocol(descriptions['block'], 'block', *delay.spectral) event, eT, eF = protocol(descriptions['event'], 'event', *delay.spectral) blocka, baT, baF = altprotocol(altdescr['block'], 'block', *delay.spectral) eventa, eaT, eaF = altprotocol(altdescr['event'], 'event', *delay.spectral) for c in bT.keys(): baf = baT[c] if not isinstance(baf, formulae.Formula): baf = formulae.Formula([baf]) bf = bT[c] if not isinstance(bf, formulae.Formula): bf = formulae.Formula([bf]) X = baf.design(t, return_float=True) Y = bf.design(t, return_float=True) if X.ndim == 1: X.shape = (X.shape[0], 1) m = OLSModel(X) r = m.fit(Y) remaining = (r.resid**2).sum() / (Y**2).sum() assert_almost_equal(remaining, 0) for c in bF.keys(): baf = baF[c] if not isinstance(baf, formulae.Formula): baf = formulae.Formula([baf]) bf = bF[c] if not isinstance(bf, formulae.Formula): bf = formulae.Formula([bf]) X = baf.design(t, return_float=True) Y = bf.design(t, return_float=True) if X.ndim == 1: X.shape = (X.shape[0], 1) m = OLSModel(X) r = m.fit(Y) remaining = (r.resid**2).sum() / (Y**2).sum() assert_almost_equal(remaining, 0)
tempdict[v] = np.zeros(mask_array.sum()) output[contrast_id] = tempdict ######################################## # Perform a GLM analysis ######################################## print 'Fitting a GLM (this takes time)...' fmri_image = load(data_path) Y = fmri_image.get_data()[mask_array] X = design_matrix.matrix m = OLSModel(X) # Fit the model, storing an estimate of an AR(1) parameter at each voxel result = m.fit(Y.T) ar1 = ((result.resid[1:] * result.resid[:-1]).sum(0) / (result.resid ** 2).sum(0)) ar1 *= 100 ar1 = ar1.astype(np.int) / 100. for val in np.unique(ar1): armask = np.equal(ar1, val) m = ARModel(X, val) d = Y[armask] results = m.fit(d.T) # Output the results for each contrast for (contrast_id, contrast_val) in contrasts.items(): resT = results.Tcontrast(contrast_val)