示例#1
0
    def _run_interface(self, runtime):

        assert len(self.inputs.onsets) == len(self.inputs.events)

        self.inputs.onsets, self.inputs.events = [
            list(e) for e in zip(*sorted(zip(self.inputs.onsets, self.inputs.events)))
        ]

        if self.inputs.n_blocks == 0:
            self.inputs.n_blocks = int(np.sqrt(len(self.inputs.onsets)))

        image = nb.load(self.inputs.data)
        data = image.get_data()
        self.data_shape = image.shape

        length_block = self.data_shape[-1] / self.inputs.n_blocks

        paradigm = EventRelatedParadigm(self.inputs.events, self.inputs.onsets)
        frametimes = np.arange(0, self.data_shape[-1] * self.inputs.TR, self.inputs.TR)
        X, names = dm.dmtx_light(frametimes, paradigm, drift_model="polynomial", hfcut=128, hrf_model="canonical")

        for i in np.arange(0, self.data_shape[-1] + 1, length_block)[:-1]:
            save(X[i : i + length_block, :], os.path.abspath("./design_matrices_%s.hdf5" % (i / length_block)))
            #            nb.save(nb.Nifti1Image(data[:, :, :, i:i+length_block], image.get_affine(), image.get_header()), os.path.abspath('data_%s.nii.gz' % (i/length_block)))
            nb.save(
                nb.Nifti1Image(data[..., i : i + length_block], image.get_affine(), image.get_header()),
                os.path.abspath("data_%s.nii.gz" % (i / length_block)),
            )

        return runtime
示例#2
0
    def _run_interface(self, runtime):

        data_list = [nb.load(fn).get_data() for fn in self.inputs.data_files]
        onsets = self.inputs.onsets

        paradigm = EventRelatedParadigm(["a"] * len(onsets), onsets)
        frametimes = np.arange(0, data_list[0].shape[-1] * self.inputs.TR, self.inputs.TR)
        X, names = dm.dmtx_light(frametimes, paradigm, drift_model="polynomial", hfcut=128, hrf_model="canonical")

        self.X = X

        X_T_inv = np.linalg.pinv(np.dot(X.T, X))
        calc_beta = np.dot(X_T_inv, X.T)

        # Do OLS
        mean_data = np.mean(data_list, 0)
        self.ols_beta = np.dot(calc_beta, mean_data.reshape(np.prod(mean_data.shape[:-1]), mean_data.shape[-1]).T)
        predicted = np.dot(X, self.ols_beta).T.reshape(mean_data.shape)
        resid = mean_data - predicted
        ss = bottleneck.ss(resid, -1)
        self.ols_var = np.outer(X_T_inv, ss)

        # Create individual residuals for sandwhich:
        self.sss = np.zeros(ss.shape)
        self.residuals = []
        for data in data_list:
            beta = np.dot(calc_beta, data.reshape(np.prod(data.shape[:-1]), mean_data.shape[-1]).T)
            self.predicted = np.dot(X, self.ols_beta).T.reshape(mean_data.shape)
            resid = mean_data - self.predicted
            self.residuals.append(resid)
            self.sss += bottleneck.ss(resid, -1)

        if len(data_list) > 5:
            self.sss = self.sss / (len(data_list) - 1)
        else:
            self.sss = self.sss / len(data_list)

        self.sandwich_var = np.outer(np.dot(calc_beta, calc_beta.T), self.sss) / len(data_list)

        self.contrasts = np.array(self.inputs.contrasts)

        self.residuals = np.array(self.residuals).swapaxes(0, -1)

        self.sandwich_var = self.sandwich_var.T.reshape(mean_data.shape[:-1] + (-1,))

        self.ols_beta = self.ols_beta.T.reshape(mean_data.shape[:-1] + (-1,))
        self.ols_var = self.ols_var.T.reshape(mean_data.shape[:-1] + (-1,))

        if self.inputs.variance_to_use == "ols":
            self.z = (self.ols_beta[:, :, 0] / (np.sqrt(self.ols_var[:, :, 0]) / np.sqrt(len(data_list)))).squeeze()
        else:
            self.z = (
                self.ols_beta[:, :, 0] / (np.sqrt(self.sandwich_var[:, :, 0]) / np.sqrt(len(data_list)))
            ).squeeze()

        self.z = self.z.T.reshape(mean_data.shape[:-1] + (-1,))

        nb.save(nb.Nifti1Image(self.ols_beta, np.identity(4)), "ols_beta.nii.gz")
        nb.save(nb.Nifti1Image(self.ols_var, np.identity(4)), "ols_var.nii.gz")
        nb.save(nb.Nifti1Image(self.sandwich_var, np.identity(4)), "sandwich_var.nii.gz")
        nb.save(nb.Nifti1Image(self.z, np.identity(4)), "z_%s.nii.gz" % self.inputs.variance_to_use)
        nb.save(nb.Nifti1Image(self.residuals, np.identity(4)), "residuals.nii.gz")

        save(self.X, "design_matrix.hdf5")

        return runtime