A clinical neuroimaging platform for rapid, automated lesion detection and personalized post-stroke outcome prediction.
The 4 matches · 2 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
- [1] § Methods › Cognitive outcome-prediction model training ↔ run_modeling_gui.m, lines 1–103 · score 0.63 · misclassification cost, hyper parameter, cross validation, MATLAB, multivariate, stratified
- [2] § Methods › Cognitive outcome-prediction model training ↔ run_modeling_gui.m, lines 1–100 · score 0.63 · misclassification cost, hyper parameter, cross validation, MATLAB, multivariate, stratified
- [3] § Results › Cognitive outcome predictions ↔ plot_cognitive_outcome_models.ipynb, the whole file · a weak match · score 0.52 · fLNM, sLNM, unthresholded, impaired, class, map
- [4] § Methods › Cognitive outcome-prediction model evaluation ↔ model_code/ensemble/run_censemble_modeling.m, the whole file · a weak match · score 0.50 · tuned classification, score thresholds, ROC, AUC, optimized, predicted
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
MATLAB · 1,699 lines · 86 KB · GPL-3.0 · 1 match
- classdef run_modeling_gui < matlab.apps.AppBase
- % Properties that correspond to app components
- properties (Access = public)
- UIFigure matlab.ui.Figure
- IdPathFlag matlab.ui.control.CheckBox
- RankCorCheckBox matlab.ui.control.CheckBox
- RegressLesionVolumefromXandYCheckBox matlab.ui.control.CheckBox
- CatYCheckBox matlab.ui.control.CheckBox
- NuisanceRegressorCheckBox matlab.ui.control.CheckBox
- RegressLesionVolumefromYCheckBox matlab.ui.control.CheckBox
- SelectNuisanceRegressorsListBox matlab.ui.control.ListBox
- SelectNuisanceRegressorsListBoxLabel matlab.ui.control.Label
- SelectOutcomeVariableYListBox matlab.ui.control.ListBox
- SelectOutcomeVariableYListBoxLabel matlab.ui.control.Label
- MisclassificationCostsPanel matlab.ui.container.Panel
- MisClasCostG1 matlab.ui.control.NumericEditField
- Group1EditField_3Label matlab.ui.control.Label
- MisClasCostG2 matlab.ui.control.NumericEditField
- Group1EditField_4Label matlab.ui.control.Label
- StatisticalThresholdsPanel matlab.ui.container.Panel
- FDRLabel matlab.ui.control.Label
- FDRThresh matlab.ui.control.NumericEditField
- UncPThresh matlab.ui.control.NumericEditField
- UncEditFieldLabel matlab.ui.control.Label
- FweThresh matlab.ui.control.NumericEditField
- FWEEditFieldLabel matlab.ui.control.Label
- PermutationTestingPanel matlab.ui.container.Panel
- RegistryFlag matlab.ui.control.CheckBox
- OutDirText matlab.ui.control.TextArea
- SelectOutputDirectoryButton matlab.ui.control.Button
- RunAnalysisButton matlab.ui.control.Button
- MultivariateModelingToolAnalysisConfigurationLabel matlab.ui.control.Label
- UseParallelProcessingRecommendedCheckBox matlab.ui.control.CheckBox
- FitExplanatoryModelCheckBox matlab.ui.control.CheckBox
- ResultOptionsPanel matlab.ui.container.Panel
- WritePermutationImagesCheckBox matlab.ui.control.CheckBox
- WriteBootstrapImagesCheckBox matlab.ui.control.CheckBox
- SelectModelDropDown matlab.ui.control.DropDown
- SelectModelLabel matlab.ui.control.Label
- BrainMaskText matlab.ui.control.TextArea
- ImDirText matlab.ui.control.TextArea
- CSVTtext matlab.ui.control.TextArea
- PredictorTypeButtonGroup matlab.ui.container.ButtonGroup
- OtherPredButton matlab.ui.control.RadioButton
- LesionButton matlab.ui.control.RadioButton
- MinimumDataThresholdsPanel matlab.ui.container.Panel
- MinObs matlab.ui.control.NumericEditField
- MinimumObservationLabel matlab.ui.control.Label
- MinFreq matlab.ui.control.NumericEditField
- MinimumFrequencyLabel matlab.ui.control.Label
- SelectCSVfileButton matlab.ui.control.Button
- SelectDataDirectoryButton matlab.ui.control.Button
- HyperParameterTuningPanel matlab.ui.container.Panel
- OptimizeHyperparametersCheckBox matlab.ui.control.CheckBox
- HpOptRepeats matlab.ui.control.NumericEditField
- HpOptFolds matlab.ui.control.NumericEditField
- HpOptCvType matlab.ui.control.DropDown
- HpOptNumberofRepeatsLabel matlab.ui.control.Label
- HpOptNumberofFoldsLabel matlab.ui.control.Label
- HpOptCVStrategyLabel matlab.ui.control.Label
- SelectBrainMaskButton matlab.ui.control.Button
- PredictorModalityButtonGroup matlab.ui.container.ButtonGroup
- ArrayButton matlab.ui.control.RadioButton
- MatrixButton matlab.ui.control.RadioButton
- NIFTIButton matlab.ui.control.RadioButton
- CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel matlab.ui.container.Panel
- EnableModelStackingCheckBox matlab.ui.control.CheckBox
- CVPermIter matlab.ui.control.NumericEditField
- PermutationsEditField_2Label matlab.ui.control.Label
- CVPermPanel matlab.ui.container.Panel
- CVPermCheckBox matlab.ui.control.CheckBox
- RunCrossValidationCheckBox matlab.ui.control.CheckBox
- CrossValidationSettingsPanel matlab.ui.container.Panel
- OuterRepeats matlab.ui.control.NumericEditField
- OuterFolds matlab.ui.control.NumericEditField
- CVType matlab.ui.control.DropDown
- NumberofRepeatsLabel_2 matlab.ui.control.Label
- NumberofOuterFoldsLabel matlab.ui.control.Label
- CVStrategyLabel_2 matlab.ui.control.Label
- GeneralModelingOptionsPanel matlab.ui.container.Panel
- BootIter matlab.ui.control.NumericEditField
- BootAnalysesPanel matlab.ui.container.Panel
- BootstrapLabel matlab.ui.control.Label
- PermutationsEditFieldLabel matlab.ui.control.Label
- BootCheckBox matlab.ui.control.CheckBox
- PermCheckBox matlab.ui.control.CheckBox
- StratifyTrainTestSplitsonYCheckBox matlab.ui.control.CheckBox
- ConfIntWidth matlab.ui.control.NumericEditField
- PermIter matlab.ui.control.NumericEditField
- ConfIntLabel matlab.ui.control.Label
- BootCIsCheckBox matlab.ui.control.CheckBox
- PermVoxPValsCheckBox matlab.ui.control.CheckBox
- PermApplycFWECheckBox matlab.ui.control.CheckBox
- ApplyDTLVCCheckBox matlab.ui.control.CheckBox
- StandardizeXCheckBox matlab.ui.control.CheckBox
- StandardizeYCheckBox matlab.ui.control.CheckBox
- end
- % Callbacks that handle component events
- methods (Access = private)
- % Code that executes after component creation
- function startupFcn(app)
- model_dir = fileparts(which('run_modeling_gui.mlapp'));
- addpath(model_dir);
- end
- % Callback function: CSVTtext, SelectCSVfileButton
- function SelectCSVfileButtonPushed(app, event)
- model_dir = fileparts(which('run_modeling_gui.mlapp'));
- if isfile(fullfile(model_dir, 'default_paths.mat'))
- load(fullfile(model_dir, 'default_paths.mat'), 'csv_dir');
- [csv_file, csv_path] = uigetfile({'*.csv'; '*xls'; '*xlsx'; '*.'},...
- 'Select CSV file containing behavioral data', csv_dir);
- else
- [csv_file, csv_path] = uigetfile({'*.csv'; '*xls'; '*xlsx'; '*.'},...
- 'Select CSV file containing behavioral data');
- end
- if csv_file == 0
- error('No file selected; please try again');
- else
- app.CSVTtext.Value = fullfile(csv_path, csv_file);
- end
- my_csv = readtable(fullfile(csv_path, csv_file),'NumHeaderLines', 0, 'Delimiter', ',');
- my_vars = my_csv.Properties.VariableNames;
- my_vars = setdiff(my_vars, "study_id");
- app.SelectOutcomeVariableYListBox.Items = my_vars;
- if app.NuisanceRegressorCheckBox.Value == 1
- app.SelectNuisanceRegressorsListBox.Items = my_vars;
- end
- end
- % Button pushed function: SelectDataDirectoryButton
- function SelectDataDirectoryButtonPushed(app, event)
- model_dir = fileparts(which('run_modeling_gui.mlapp'));
- if isfile(fullfile(model_dir, 'default_paths.mat'))
- load(fullfile(model_dir, 'default_paths.mat'), 'data_dir');
- cfg.img_dir = uigetdir(data_dir, 'Select directory containing imaging data');
- else
- cfg.img_dir = uigetdir(pwd, 'Select directory containing imaging data');
- end
- if cfg.img_dir == 0
- error('No directory selected; please try again');
- else
- app.ImDirText.Value = cfg.img_dir;
- end
- end
- % Button pushed function: SelectBrainMaskButton
- function SelectBrainMaskButtonPushed(app, event)
- model_dir = fileparts(which('run_modeling_gui.mlapp'));
- if app.NIFTIButton.Value == 1
- if isfile(fullfile(model_dir, 'default_paths.mat'))
- load(fullfile(model_dir, 'default_paths.mat'), 'mask_file');
- [mask_file, mask_path] = uigetfile({'*.nii.gz'; '*.nii'; '*.'}, 'Select brain mask file',...
- mask_file);
- else
- [mask_file, mask_path] = uigetfile({'*.nii.gz'; '*.nii'; '*.'}, 'Select brain mask file', pwd);
- end
- if mask_file == 0
- error('No file selected; please try again');
- else
- app.BrainMaskText.Value = fullfile(mask_path, mask_file);
- end
- elseif app.MatrixButton.Value == 1
- [parcel_file, parcel_path] = uigetfile({'*.mat'}, 'Select parcellation_table',...
- pwd);
- if parcel_file == 0
- error('No file selected; please try again');
- else
- app.BrainMaskText.Value = fullfile(parcel_path, parcel_file);
- end
- end
- end
- % Button pushed function: RunAnalysisButton
- function RunAnalysisButtonPushed(app, event)
- % Get model directory
- model_dir = fileparts(which('run_modeling_gui.mlapp'));
- cfg.model_dir = fullfile(model_dir, 'model_code');
- % Add core functions to path
- addpath(fullfile(cfg.model_dir));
- addpath(genpath(fullfile(cfg.model_dir, 'common')));
- % Set analysis modality
- if app.LesionButton.Value == 1
- cfg.modality = 'lesion';
- else
- cfg.modality = 'other';
- end
- % Set imaging flag
- if app.NIFTIButton.Value == 1
- cfg.write_nifti_images = 1;
- cfg.mask_path = string(app.BrainMaskText.Value);
- elseif app.MatrixButton.Value == 1
- cfg.write_nifti_images = 0;
- cfg.parcel_table = string(app.BrainMaskText.Value);
- elseif app.ArrayButton.Value == 1
- cfg.write_nifti_images = 0;
- end
- % Set up basic cfg file
- cfg.model_spec = string(app.SelectModelDropDown.Value);
- cfg.fit_explanatory_model = app.FitExplanatoryModelCheckBox.Value;
- cfg.bootstrap = app.BootCheckBox.Value;
- cfg.jackknife = 0;
- cfg.permutation = app.PermCheckBox.Value;
- cfg.optimize_hyperparams = app.OptimizeHyperparametersCheckBox.Value;
- cfg.cross_validation = app.RunCrossValidationCheckBox.Value;
- cfg.out_dir = string(app.OutDirText.Value);
- cfg.stacked_model = app.EnableModelStackingCheckBox.Value;
- % Get default cfg
- cfg = get_default_model_cfg(cfg);
- %%%%%% Update defaults with user choices
- %%%% General analysis params
- % Data thresholds
- cfg.min_obs = app.MinObs.Value;
- cfg.freq_thresh = app.MinFreq.Value;
- % Standardization
- if app.StandardizeXCheckBox.Value == 1 && app.StandardizeYCheckBox.Value == 1
- cfg.standardize = 3;
- elseif app.StandardizeYCheckBox.Value == 1 && app.StandardizeXCheckBox.Value == 0
- cfg.standardize = 2;
- elseif app.StandardizeXCheckBox.Value == 1 && app.StandardizeYCheckBox.Value == 0
- cfg.standardize = 1;
- else
- cfg.standardize = 0;
- end
- % DTLVC
- cfg.dtlvc = app.ApplyDTLVCCheckBox.Value;
- % Hyperparameter optimization
- cfg.hp_opt.cv_type = string(app.HpOptCvType.Value);
- cfg.hp_opt.folds = app.HpOptFolds.Value;
- cfg.hp_opt.repeats = app.HpOptRepeats.Value;
- % Statistical testing
- cfg.boot.n_boot = app.BootIter.Value;
- cfg.perm.n_perm = app.PermIter.Value;
- if app.UncPThresh.Value ~= 0
- cfg.unc_thresh = app.UncPThresh.Value;
- else
- cfg.unc_thresh = 0.001;
- end
- if app.FDRThresh.Value ~= 0
- cfg.fdr_thresh = app.FDRThresh.Value;
- else
- cfg.fdr_thresh = 0.05;
- end
- if app.FweThresh.Value ~= 0
- cfg.fwe_thresh = app.FweThresh.Value;
- else
- cfg.fwe_thresh = 0.05;
- end
- cfg.perm.coeff_p = app.PermVoxPValsCheckBox.Value;
- if cfg.perm.coeff_p == 1
- cfg.perm.coeff_fdr = 1;
- cfg.perm.coeff_fwe = 1;
- end
- cfg.perm.coeff_cfwe = app.PermApplycFWECheckBox.Value;
- % Cross-validation
- if app.EnableModelStackingCheckBox == 1
- cfg.cv.stacked_model = 1;
- else
- cfg.cv.stacked_model = 0;
- end
- cfg.cv.cv_type = char(app.CVType.Value);
- cfg.cv.folds = app.OuterFolds.Value;
- cfg.cv.repeats = app.OuterRepeats.Value;
- cfg.cv.permutation = app.CVPermCheckBox.Value;
- cfg.cv.n_perm = app.CVPermIter.Value;
- % Parallel processing
- cfg.parallel = app.UseParallelProcessingRecommendedCheckBox.Value;
- % Image output
- cfg.perm.write_perm_images = app.WritePermutationImagesCheckBox.Value;
- cfg.boot.write_boot_images = app.WriteBootstrapImagesCheckBox.Value;
- cfg.jack.write_jack_images = 0;
- % Format and load behavioral and image data
- beh_csv = readtable(string(app.CSVTtext.Value), 'NumHeaderLines', 0, 'Delimiter', ',');
- beh_col = app.SelectOutcomeVariableYListBox.Value;
- id_col = "study_id";
- % Get data and put into cfg as long as predictors are NIFTI lesions
- if app.NIFTIButton.Value == 1
- data_dir = app.ImDirText.Value;
- if app.LesionButton.Value == 1
- if app.IdPathFlag.Value == 0
- cfg = get_and_format_lesion_data(beh_csv, id_col, beh_col, app.RegistryFlag.Value, data_dir, cfg);
- else
- cfg = get_and_format_lesion_data2(beh_csv, id_col, beh_col, cfg);
- end
- else
- if app.IdPathFlag.Value == 0
- cfg = get_and_format_nifti_data(beh_csv, id_col, beh_col, app.RegistryFlag.Value, data_dir, cfg);
- else
- cfg = get_and_format_nifti_data2(beh_csv, id_col, beh_col, cfg);
- end
- end
- elseif app.MatrixButton.Value == 1
- data_dir = app.ImDirText.Value;
- if app.IdPathFlag.Value == 0
- cfg = get_and_format_matrix_data(beh_csv, id_col, beh_col, app.RegistryFlag.Value, data_dir, cfg);
- else
- cfg = get_and_format_matrix_data2(beh_csv, id_col, beh_col, cfg);
- end
- elseif app.ArrayButton.Value == 1
- data_dir = app.ImDirText.Value;
- if app.IdPathFlag.Value == 0
- cfg = get_and_format_array_data(beh_csv, id_col, beh_col, app.RegistryFlag.Value, data_dir, cfg);
- else
- cfg = get_and_format_array_data2(beh_csv, id_col, beh_col, cfg);
- end
- end
- % Set up confounds for nuisance regression if indicated
- disp('Nuisance Regressors: ');
- cfg.confounds = [];
- for i = 1:length(app.SelectNuisanceRegressorsListBox.Value)
- disp(app.SelectNuisanceRegressorsListBox.Value{i});
- cfg.confounds(:,i) = beh_csv.(app.SelectNuisanceRegressorsListBox.Value{i});
- cfg.confound_names{i} = app.SelectNuisanceRegressorsListBox.Value{i};
- end
- if ~isempty(cfg.confounds)
- cfg.confounds = cfg.confounds(cfg.include_inds,:);
- if ~isempty(find(isnan(cfg.confounds)))
- disp('Checking nuisance regressors...')
- disp('Some subjects have missing data for nuisance regressors; removing subjects with missing data...');
- [cfg.confounds, cfg.missing_inds] = rmmissing(cfg.confounds, 1);
- cfg.X = cfg.X(cfg.missing_inds == 0, :);
- cfg.Y = cfg.Y(cfg.missing_inds == 0, :);
- if isfield(cfg, 'lvol')
- cfg.lvol = cfg.lvol(cfg.missing_inds == 0);
- end
- disp([num2str(numel(find(cfg.missing_inds==1))) ' subjects were removed due to missing data for nuisance regressors.']);
- disp('Removed subjects will have values of 1 in model_results.cfg.missing_inds');
- end
- end
- % Set up lesion volume confound if indicated
- if app.LesionButton.Value == 1
- if app.RegressLesionVolumefromYCheckBox.Value == 1 || app.RegressLesionVolumefromXandYCheckBox.Value == 1
- disp('Lesion volume')
- cfg.confounds = [cfg.confounds, zscore(cfg.lvol)];
- if app.RegressLesionVolumefromXandYCheckBox.Value == 1
- cfg.confound_opt = 'regress_both';
- end
- end
- else
- cfg.confounds = cfg.confounds;
- end
- % Do stratification on outcome if indicated
- if app.StratifyTrainTestSplitsonYCheckBox.Value == 1
- cfg.strat_var = cfg.Y;
- else
- cfg.strat_var = [];
- end
- % Set misclassification costs if relevant
- if cfg.cat_Y==1
- cfg.cost(1,2) = app.MisClasCostG1.Value;
- cfg.cost(2,1) = app.MisClasCostG2.Value;
- end
- % Set grouping flag for T-test
- if strcmp(cfg.model_spec, 'ttest')
- if app.CatYCheckBox.Value == 1
- cfg.group_var = 'Y';
- cfg.cat_Y = 1;
- else
- cfg.group_var = 'X';
- cfg.cat_Y = 0;
- end
- end
- % Train and evaluate model
- model_results = fit_and_evaluate_model(cfg);
- % Write out images if indicated
- if app.NIFTIButton.Value == 1
- write_model_weight_maps(model_results);
- elseif app.MatrixButton.Value == 1
- write_model_weights_connectome(model_results);
- end
- % Print main results to command window and save to text file
- cd(cfg.out_dir);
- % Print results for regression models
- if ~contains(cfg.model_spec, ["municorr", "bmunz", "ttest", "munilr", "muniolsr", "munimnr", "prop_sub"])
- if cfg.fit_explanatory_model == 1 && cfg.cat_Y == 0
- % Print model R-squared
- diary('explanatory_model_results.txt')
- disp('--------Model Result Summary-------');
- disp('-----Inferential Model Results-----');
- disp('-----------------------------------');
- disp('Warning - This R-squared statistic is from the model fit to the full dataset and may reflect overfitting.');
- disp('Interpret this result with extreme caution. It is recommended to use cross-validtion statistics for interpreting model performance.');
- disp(['Model R-squared: ' num2str(model_results.r2)]);
- % Print additional statistics depending on analysis settings
- if cfg.bootstrap == 1 && cfg.boot.get_cis == 1
- disp([num2str(100-(10*cfg.boot.ci_alpha_thresh_model)) '% Bootstrap CIs on R-squared:']);
- disp(['Lower: ' num2str(model_results.boot.r2_ci(1))]);
- disp(['Upper: ' num2str(model_results.boot.r2_ci(2))]);
- end
- if cfg.permutation == 1
- disp('----- Permutation Test Results -----')
- disp(['Permutation Test: p=' num2str(model_results.perm.model_pval)]);
- end
- if cfg.cross_validation == 1
- load(fullfile(cfg.out_dir, 'cv_results.mat'));
- disp('------ Cross-validation Test Results -------');
- disp(['Cross-validation Correlation: r=' num2str(cv_results.all.corr) ', p=' num2str(cv_results.all.corr_pval)]);
- if isfield(cv_results, 'perm_pval')
- disp('-----Predictive Model Results-----');
- disp(['Cross-Validation Permutation Test: p= ' num2str(cv_results.perm_pval)]);
- disp(['Mean cross-validation R-squared: ' num2str(mean(cv_results.avg.r2_ss(:)))]);
- end
- end
- diary('off');
- elseif cfg.fit_explanatory_model == 0 && cfg.cat_Y == 0 && cfg.cross_validation == 1
- load(fullfile(cfg.out_dir, 'cv_results.mat'));
- if isfield(cv_results, 'perm_pval')
- disp('-----Predictive Model Results-----');
- disp(['Cross-Validation Permutation Test: p= ' num2str(cv_results.perm_pval)]);
- disp(['Mean cross-validation R-squared: ' num2str(mean(cv_results.avg.r2_ss(:)))]);
- else
- disp('-----Predictive Model Results-----');
- disp(['Mean cross-validation R-squared: ' num2str(mean(cv_results.avg.r2_ss(:)))]);
- end
- end
- % Print results for classification models
- if cfg.fit_explanatory_model == 1 && cfg.cat_Y == 1
- % Print model R-squared
- diary('explanatory_model_results.txt')
- disp('--------Model Result Summary-------');
- disp('-----Inferential Model Results-----');
- disp('-----------------------------------');
- disp('Warning - These accuracy and ROC statistics are from the model fit to the full dataset and may reflect overfitting.');
- disp('Interpret these results with extreme caution. It is recommended to use cross-validtion statistics for interpreting model performance.');
- disp(['Model Accuracy (Group -1): ' num2str(model_results.classrate(1))]);
- disp(['Model Accuracy (Group 1): ' num2str(model_results.classrate(2))]);
- disp(['Model Accuracy (Overall): ' num2str(model_results.classrate(3))]);
- disp(['Model Area Under ROC Curve: ' num2str(model_results.roc_auc)]);
- % Print additional statistics depending on analysis settings
- if cfg.bootstrap == 1 && cfg.boot.get_cis == 1
- disp([num2str(100-(10*cfg.boot.ci_alpha_thresh_model)) '% Bootstrap CIs on Group -1 Classification Rate:']);
- disp(['Lower: ' num2str(model_results.boot.classrate_ci(1,1))]);
- disp(['Upper: ' num2str(model_results.boot.classrate_ci(2,1))]);
- disp([num2str(100-(10*cfg.boot.ci_alpha_thresh_model)) '% Bootstrap CIs on Group 1 Classification Rate:']);
- disp(['Lower: ' num2str(model_results.boot.classrate_ci(1,2))]);
- disp(['Upper: ' num2str(model_results.boot.classrate_ci(2,2))]);
- disp([num2str(100-(10*cfg.boot.ci_alpha_thresh_model)) '% Bootstrap CIs on Overall Classification Rate:']);
- disp(['Lower: ' num2str(model_results.boot.classrate_ci(1,3))]);
- disp(['Upper: ' num2str(model_results.boot.classrate_ci(2,3))]);
- disp([num2str(100-(10*cfg.boot.ci_alpha_thresh_model)) '% Bootstrap CIs on ROC Area Under Curve:']);
- disp(['Lower: ' num2str(model_results.boot.roc_auc_ci(1,1))]);
- disp(['Upper: ' num2str(model_results.boot.roc_auc_ci(2,1))]);
- end
- if cfg.permutation == 1
- disp ('------ Permutation Test Results --------')
- disp(['Permutation Test (AUC): p=' num2str(model_results.perm.model_pval)]);
- end
- if cfg.cross_validation == 1
- disp('------ Cross-Validation Test Results -------')
- load(fullfile(cfg.out_dir, 'cv_results.mat'));
- disp(['Cross-validation Fisher Exact Test: stat=' num2str(cv_results.all.fisher_stat.OddsRatio) ', p=' num2str(cv_results.all.fisher_pval)]);
- if isfield(cv_results, 'perm_pval')
- disp('-----Predictive Model Results-----');
- disp(['Cross-Validation Permutation Test: p= ' num2str(cv_results.perm_pval)]);
- disp(['Mean Cross-Validation Area Under ROC Curve: ' num2str(mean(cv_results.avg.roc_auc(:)))]);
- else
- disp('-----Predictive Model Results-----');
- disp(['Mean Cross-Validation Area Under ROC Curve: ' num2str(mean(cv_results.avg.roc_auc(:)))]);
- end
- end
- diary('off');
- elseif cfg.fit_explanatory_model == 0 && cfg.cat_Y == 1 && cfg.cross_validation == 1
- load(fullfile(cfg.out_dir, 'cv_results.mat'));
- if isfield(cv_results, 'perm_pval')
- disp('-----Predictive Model Results-----');
- disp(['Cross-Validation Permutation Test: p= ' num2str(cv_results.perm_pval)]);
- disp(['Mean Cross-Validation Area Under ROC Curve: ' num2str(mean(cv_results.avg.roc_auc(:)))]);
- else
- disp('-----Predictive Model Results-----');
- disp(['Mean Cross-Validation Area Under ROC Curve: ' num2str(mean(cv_results.avg.roc_auc(:)))]);
- end
- end
- end
- end
- % Button pushed function: SelectOutputDirectoryButton
- function SelectOutputDirectoryButtonPushed(app, event)
- [out_dir] = uigetdir(pwd, 'Select directory to save results');
- if out_dir == 0
- error('No directory selected; please try again');
- else
- app.OutDirText.Value = out_dir;
- end
- end
- % Value changed function: HpOptCvType
- function HpOptCvTypeValueChanged(app, event)
- value = app.HpOptCvType.Value;
- if strcmp(string(value), 'LOOCV')
- app.HpOptFolds.Enable = 'off';
- app.HpOptFolds.Value = 'N/A';
- app.HpOptRepeats.Value = 1;
- else
- app.HpOptFolds.Enable = 'on';
- app.HpOptFolds.Value = 5;
- app.HpOptRepeats.Value = 5;
- end
- end
- % Value changed function: StratifyTrainTestSplitsonYCheckBox
- function StratifyTrainTestSplitsonYCheckBoxValueChanged(app, event)
- end
- % Value changed function: PermCheckBox
- function PermCheckBoxValueChanged(app, event)
- value = app.PermCheckBox.Value;
- if value == 0
- app.PermIter.Enable = 'off';
- app.PermIter.Value = 0;
- app.PermApplycFWECheckBox.Enable = 'off';
- app.PermApplycFWECheckBox.Value = 0;
- app.WritePermutationImagesCheckBox.Enable = 'off';
- app.WritePermutationImagesCheckBox.Value = 0;
- if app.BootCheckBox.Value == 0
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'off';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'off';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'off';
- else
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'on';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'on';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'on';
- end
- else
- app.PermIter.Enable = 'on';
- app.PermIter.Value = 1000;
- app.PermApplycFWECheckBox.Enable = 'on';
- app.PermApplycFWECheckBox.Value = 1;
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'on';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'on';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'on';
- app.WritePermutationImagesCheckBox.Enable = 'on';
- app.WritePermutationImagesCheckBox.Value = 1;
- end
- end
- % Value changed function: BootCheckBox
- function BootCheckBoxValueChanged(app, event)
- value = app.BootCheckBox.Value;
- if value == 0
- app.BootIter.Enable = 'off';
- app.BootIter.Value = 0;
- app.BootCIsCheckBox.Enable = "off";
- app.BootCIsCheckBox.Value = 0;
- app.ConfIntWidth.Value = 0;
- app.ConfIntWidth.Enable = 'off';
- app.WriteBootstrapImagesCheckBox.Value = 0;
- app.WriteBootstrapImagesCheckBox.Enable = 0;
- if app.PermCheckBox.Value == 0
- app.WritePermutationImagesCheckBox.Value = 0;
- app.WritePermutationImagesCheckBox.Enable = 0;
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'off';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'off';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'off';
- else
- app.WritePermutationImagesCheckBox.Value = 1;
- app.WritePermutationImagesCheckBox.Enable = 1;
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'on';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'on';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'on';
- end
- else
- app.WriteBootstrapImagesCheckBox.Value = 1;
- app.WriteBootstrapImagesCheckBox.Enable = 1;
- app.BootIter.Enable = 'on';
- app.BootIter.Value = 1000;
- app.BootCIsCheckBox.Enable = 'on';
- app.BootCIsCheckBox.Value = 1;
- app.ConfIntWidth.Value = 95;
- app.ConfIntWidth.Enable = 'on';
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 'on';
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 'on';
- app.UncPThresh.Value = 0.001;
- app.UncPThresh.Enable = 'on';
- end
- end
- % Selection changed function: PredictorTypeButtonGroup
- function PredictorTypeButtonGroupSelectionChanged(app, event)
- if app.LesionButton.Value == 1 && ~contains(app.SelectModelDropDown.Value, ["ttest", "bmunz", "municorr", "munilr", "munimnr", "muniolsr", "prop_sub"])
- app.ApplyDTLVCCheckBox.Enable = "on";
- app.ApplyDTLVCCheckBox.Value = 0;
- app.RegressLesionVolumefromYCheckBox.Enable = "on";
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = "on";
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.MinFreq.Value = 4;
- app.MinObs.Value = 1;
- elseif app.LesionButton.Value == 1 && contains(app.SelectModelDropDown.Value, ["ttest", "bmunz", "municorr", "munilr", "munimnr", "muniolsr"])
- app.ApplyDTLVCCheckBox.Enable = "on";
- app.ApplyDTLVCCheckBox.Value = 0;
- app.RegressLesionVolumefromYCheckBox.Enable = "on";
- app.RegressLesionVolumefromYCheckBox.Value = 1;
- app.RegressLesionVolumefromXandYCheckBox.Enable = "off";
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.MinFreq.Value = 4;
- app.MinObs.Value = 1;
- else
- app.ApplyDTLVCCheckBox.Value = 0;
- app.ApplyDTLVCCheckBox.Enable = 'off';
- app.RegressLesionVolumefromYCheckBox.Enable = "off";
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = "on";
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.MinFreq.Value = 1;
- app.MinObs.Value = 0;
- end
- end
- % Value changed function: RunCrossValidationCheckBox
- function RunCrossValidationCheckBoxValueChanged(app, event)
- value = app.RunCrossValidationCheckBox.Value;
- if value == 1
- app.CVType.Enable = "on";
- app.CVType.Value = "KFold";
- app.CVPermIter.Enable = "on";
- app.CVPermIter.Value = 20;
- app.OuterFolds.Enable = "on";
- app.OuterFolds.Value = 5;
- app.OuterRepeats.Enable = "on";
- app.OuterRepeats.Value = 5;
- app.CVPermCheckBox.Enable = "on";
- app.CVPermIter.Enable = "on";
- else
- app.CVType.Enable = "off";
- app.CVType.Value = "KFold";
- app.CVPermIter.Enable = "off";
- app.CVPermIter.Value = 0;
- app.OuterFolds.Enable = "off";
- app.OuterFolds.Value = 0;
- app.OuterRepeats.Enable = "off";
- app.OuterRepeats.Value = 0;
- app.CVPermCheckBox.Enable = "off";
- app.CVPermIter.Enable = "off";
- end
- end
- % Value changed function: SelectModelDropDown
- function SelectModelDropDownValueChanged(app, event)
- value = app.SelectModelDropDown.Value;
- if ~contains(value, ["logistic", "pls_da", "svc", "censemble"])
- app.MisClasCostG1.Enable = 0;
- app.MisClasCostG2.Enable = 0;
- else
- app.MisClasCostG1.Enable = 1;
- app.MisClasCostG2.Enable = 1;
- end
- if app.LesionButton.Value == 1
- if contains(value, ["logistic", "pls_da", "svc", "censemble"])
- app.RegressLesionVolumefromYCheckBox.Text = 'Regress Lesion Volume from X';
- app.RegressLesionVolumefromXandYCheckBox.Visible = 0;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 0;
- elseif contains(value, ["muniolsr", "munilr", "munimnr", "municorr"])
- app.RegressLesionVolumefromYCheckBox.Text = 'Include Lesion Volume as Covariate';
- app.RegressLesionVolumefromXandYCheckBox.Visible = 0;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 0;
- else
- app.RegressLesionVolumefromYCheckBox.Text = 'Regress Lesion Volume from Y';
- app.RegressLesionVolumefromXandYCheckBox.Visible = 1;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 1;
- if ~contains(value, ["ttest", "bmunz", "prop_sub"])
- app.RegressLesionVolumefromXandYCheckBox.Text = 'Regress Lesion Volume from X & Y';
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 1;
- else
- app.RegressLesionVolumefromXandYCheckBox.Visible = 0;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 0;
- end
- end
- else
- app.RegressLesionVolumefromXandYCheckBox.Visible = 0;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 0;
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.RegressLesionVolumefromYCheckBox.Enable = 0;
- app.RegressLesionVolumefromYCheckBox.Visible = 0;
- end
- if contains(value, ["municorr", "ttest", "bmunz", "munilr", "muniolsr", "munimnr", ...
- 'prop_sub'])
- % Correlation options
- if strcmp(value, 'municorr')
- app.RankCorCheckBox.Visible = 1;
- app.RankCorCheckBox.Enable = 1;
- app.RankCorCheckBox.Value = 0;
- else
- app.RankCorCheckBox.Visible = 0;
- app.RankCorCheckBox.Enable = 0;
- app.RankCorCheckBox.Value = 0;
- end
- % Bootstrap options
- app.BootCheckBox.Enable = 0;
- app.BootCIsCheckBox.Enable = 0;
- app.BootstrapLabel.Enable = 0;
- app.BootCIsCheckBox.Enable = 0;
- app.BootIter.Enable = 0;
- app.BootIter.Value = 0;
- app.BootCheckBox.Value = 0;
- app.BootCIsCheckBox.Value = 0;
- app.ConfIntWidth.Enable = 0;
- app.WriteBootstrapImagesCheckBox.Enable = 0;
- app.WriteBootstrapImagesCheckBox.Value = 0;
- % Hyperparameter optimization options
- app.HpOptRepeats.Value = 0;
- app.HpOptFolds.Value = 0;
- app.OptimizeHyperparametersCheckBox.Value = 0;
- app.OptimizeHyperparametersCheckBox.Enable = 0;
- app.HpOptCvType.Enable = 0;
- app.HpOptFolds.Enable = 0;
- app.HpOptRepeats.Enable = 0;
- % Permutation testing options
- app.PermCheckBox.Value = 1;
- app.PermCheckBox.Enable = 1;
- app.PermApplycFWECheckBox.Value = 1;
- app.PermApplycFWECheckBox.Enable = 1;
- app.PermIter.Value = 10000;
- app.PermIter.Enable = 1;
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 1;
- app.WritePermutationImagesCheckBox.Value = 1;
- app.WritePermutationImagesCheckBox.Enable = 1;
- if ~strcmp(value, 'prop_sub')
- app.PermVoxPValsCheckBox.Value = 0;
- app.PermVoxPValsCheckBox.Enable = 1;
- app.StandardizeXCheckBox.Enable = 1;
- app.StandardizeXCheckBox.Value = 0;
- app.StandardizeYCheckBox.Enable = 1;
- app.StandardizeYCheckBox.Value = 0;
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 1;
- app.UncPThresh.Value = .001;
- app.UncPThresh.Enable = 1;
- app.ApplyDTLVCCheckBox.Enable = 1;
- app.ApplyDTLVCCheckBox.Value = 0;
- app.MinFreq.Value = 10;
- app.RegressLesionVolumefromYCheckBox.Enable = 1;
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.SelectNuisanceRegressorsListBox.Enable = 1;
- app.NuisanceRegressorCheckBox.Enable = 1;
- else
- app.PermVoxPValsCheckBox.Value = 0;
- app.PermVoxPValsCheckBox.Enable = 0;
- app.StandardizeXCheckBox.Enable = 0;
- app.StandardizeXCheckBox.Value = 0;
- app.StandardizeYCheckBox.Enable = 0;
- app.StandardizeYCheckBox.Value = 0;
- app.FDRThresh.Value = 0;
- app.FDRThresh.Enable = 0;
- app.FweThresh.Value = 0;
- app.FweThresh.Enable = 0;
- app.UncPThresh.Value = 0;
- app.UncPThresh.Enable = 0;
- app.ApplyDTLVCCheckBox.Enable = 0;
- app.ApplyDTLVCCheckBox.Value = 0;
- app.MinFreq.Value = 1;
- app.RegressLesionVolumefromYCheckBox.Enable = 0;
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.SelectNuisanceRegressorsListBox.Enable = 0;
- app.SelectNuisanceRegressorsListBox.Value = {};
- app.NuisanceRegressorCheckBox.Value = 0;
- app.NuisanceRegressorCheckBox.Enable = 0;
- end
- % Cross-validation options
- app.CVType.Enable = 0;
- app.CVPermPanel.Enable = 0;
- app.EnableModelStackingCheckBox.Enable = 0;
- app.StratifyTrainTestSplitsonYCheckBox.Enable = 0;
- app.RunCrossValidationCheckBox.Enable = 0;
- app.RunCrossValidationCheckBox.Value = 0;
- app.CVPermIter.Value = 0;
- app.CVPermIter.Enable = 0;
- app.EnableModelStackingCheckBox.Value = 0;
- app.OuterFolds.Value = 0;
- app.OuterFolds.Enable = 0;
- app.OuterRepeats.Value = 0;
- app.OuterRepeats.Enable = 0;
- % General options
- app.ApplyDTLVCCheckBox.Value = 0;
- % T-test options
- if strcmp(value, 'ttest')
- app.CatYCheckBox.Visible = 1;
- app.CatYCheckBox.Enable = 1;
- app.CatYCheckBox.Value = 1;
- else
- app.CatYCheckBox.Visible = 0;
- app.CatYCheckBox.Enable = 0;
- app.CatYCheckBox.Value = 0;
- end
- else
- % Bootstrap options
- app.BootCheckBox.Enable = 1;
- app.BootCIsCheckBox.Enable = 1;
- app.BootstrapLabel.Enable = 1;
- app.BootCIsCheckBox.Enable = 1;
- app.BootIter.Enable = 1;
- app.BootIter.Value = 1000;
- app.BootCheckBox.Value = 1;
- app.BootCIsCheckBox.Value = 1;
- app.ConfIntWidth.Enable = 1;
- app.WriteBootstrapImagesCheckBox.Enable = 1;
- app.WriteBootstrapImagesCheckBox.Value = 1;
- % Hyperparameter optimization options
- app.HpOptRepeats.Value = 5;
- app.HpOptFolds.Value = 5;
- app.OptimizeHyperparametersCheckBox.Value = 1;
- app.OptimizeHyperparametersCheckBox.Enable = 1;
- app.HpOptCvType.Enable = 1;
- app.HpOptFolds.Enable = 1;
- app.HpOptRepeats.Enable = 1;
- % Permutation testing options
- app.PermCheckBox.Value = 0;
- app.PermCheckBox.Enable = 1;
- app.PermApplycFWECheckBox.Value = 0;
- app.PermApplycFWECheckBox.Enable = 1;
- app.PermIter.Value = 0;
- app.PermIter.Enable = 1;
- app.PermVoxPValsCheckBox.Value = 0;
- app.PermVoxPValsCheckBox.Enable = 1;
- app.WritePermutationImagesCheckBox.Value = 0;
- app.WritePermutationImagesCheckBox.Enable = 1;
- % Cross-validation options
- app.CVType.Enable = 1;
- app.CVPermPanel.Enable = 1;
- app.EnableModelStackingCheckBox.Enable = 1;
- app.StratifyTrainTestSplitsonYCheckBox.Enable = 1;
- app.RunCrossValidationCheckBox.Enable = 1;
- app.RunCrossValidationCheckBox.Value = 1;
- app.CVPermIter.Value = 50;
- app.CVPermIter.Enable = 1;
- app.OuterFolds.Enable = 1;
- app.OuterFolds.Value = 5;
- app.OuterRepeats.Enable = 1;
- app.OuterRepeats.Value = 5;
- app.EnableModelStackingCheckBox.Value = 1;
- % T-test options
- app.CatYCheckBox.Visible = 0;
- app.CatYCheckBox.Enable = 0;
- app.CatYCheckBox.Value = 0;
- % Other
- app.StandardizeXCheckBox.Enable = 1;
- app.StandardizeXCheckBox.Value = 0;
- app.StandardizeYCheckBox.Enable = 1;
- app.StandardizeYCheckBox.Value = 0;
- app.FDRThresh.Value = 0.05;
- app.FDRThresh.Enable = 1;
- app.FweThresh.Value = 0.05;
- app.FweThresh.Enable = 1;
- app.UncPThresh.Value = .001;
- app.UncPThresh.Enable = 1;
- app.ApplyDTLVCCheckBox.Enable = 1;
- app.ApplyDTLVCCheckBox.Value = 0;
- app.MinFreq.Value = 10;
- app.RegressLesionVolumefromYCheckBox.Enable = 1;
- app.SelectNuisanceRegressorsListBox.Enable = 1;
- app.NuisanceRegressorCheckBox.Enable = 1;
- app.RankCorCheckBox.Visible = 0;
- app.RankCorCheckBox.Enable = 0;
- app.RankCorCheckBox.Value = 0;
- end
- end
- % Value changed function: OptimizeHyperparametersCheckBox
- function OptimizeHyperparametersCheckBoxValueChanged(app, event)
- value = app.OptimizeHyperparametersCheckBox.Value;
- if value == 1
- app.HpOptCvType.Enable = "on";
- app.HpOptFolds.Enable = "on";
- app.HpOptRepeats.Enable = "on";
- elseif value == 0
- app.HpOptCvType.Enable = "off";
- app.HpOptFolds.Enable = "off";
- app.HpOptRepeats.Enable = "off";
- end
- end
- % Value changed function: EnableModelStackingCheckBox
- function EnableModelStackingCheckBoxValueChanged(app, event)
- end
- % Button down function: PredictorModalityButtonGroup
- function PredictorModalityButtonGroupButtonDown(app, event)
- end
- % Selection changed function: PredictorModalityButtonGroup
- function PredictorModalityButtonGroupSelectionChanged(app, event)
- if app.MatrixButton.Value == 1
- app.BrainMaskText.Enable = 1;
- app.BrainMaskText.Editable = 1;
- app.BrainMaskText.Placeholder = 'Parcellation table not selected (required to write .node files)';
- app.SelectBrainMaskButton.Text = 'Select Parcel Table';
- app.SelectBrainMaskButton.Enable = 1;
- elseif app.NIFTIButton.Value == 1
- app.BrainMaskText.Enable = 1;
- app.BrainMaskText.Editable = 1;
- app.BrainMaskText.Placeholder = 'No mask selected';
- app.SelectBrainMaskButton.Text = 'Select Brain Mask';
- app.SelectBrainMaskButton.Enable = 1;
- elseif app.ArrayButton.Value == 1
- app.BrainMaskText.Enable = 0;
- app.BrainMaskText.Editable = 0;
- app.BrainMaskText.Placeholder = 'N/A';
- app.SelectBrainMaskButton.Text = 'N/A';
- app.SelectBrainMaskButton.Enable = 0;
- elseif app.TableButton.Value == 1
- app.BrainMaskText.Enable = 0;
- app.BrainMaskText.Enable = 0;
- app.BrainMaskText.Editable = 0;
- app.BrainMaskText.Placeholder = 'N/A';
- app.SelectBrainMaskButton.Text = 'N/A';
- app.SelectBrainMaskButton.Enable = 0;
- end
- end
- % Callback function
- function PredictorTypeButtonGroupButtonDown(app, event)
- end
- % Value changed function: CVPermCheckBox
- function CVPermCheckBoxValueChanged(app, event)
- value = app.CVPermCheckBox.Value;
- if value == 1
- app.CVPermIter.Enable = 1;
- app.CVPermIter.Value = 50;
- else
- app.CVPermIter.Enable = 0;
- app.CVPermIter.Value = 0;
- end
- end
- % Value changed function: CVType
- function CVTypeValueChanged(app, event)
- value = app.CVType.Value;
- if value == 1
- app.OuterFolds.Enable = 1;
- app.OuterFolds.Value = 5;
- app.HpOptRepeats.Enable = 1;
- app.HpOptRepeats.Value = 20;
- else
- app.OuterFolds.Enable = 0;
- app.OuterFolds.Value = 0;
- app.HpOptRepeats.Enable = 0;
- app.HpOptRepeats.Value = 0;
- end
- end
- % Value changed function: NuisanceRegressorCheckBox
- function NuisanceRegressorCheckBoxValueChanged(app, event)
- value = app.NuisanceRegressorCheckBox.Value;
- if value == 1
- app.SelectNuisanceRegressorsListBox.Enable = 1;
- app.SelectNuisanceRegressorsListBox.Items = setdiff(app.SelectOutcomeVariableYListBox.Items, app.SelectOutcomeVariableYListBox.Value);
- else
- app.SelectNuisanceRegressorsListBox.Enable = 0;
- app.SelectNuisanceRegressorsListBox.Items = string();
- app.SelectNuisanceRegressorsListBox.Value = {};
- end
- end
- % Value changed function: CatYCheckBox
- function CatYCheckBoxValueChanged(app, event)
- value = app.CatYCheckBox.Value;
- if value == 1
- app.RegressLesionVolumefromYCheckBox.Text = 'Regress lesion volume from X';
- else
- app.RegressLesionVolumefromYCheckBox.Text = 'Regress lesion volume from Y';
- end
- end
- % Value changed function: RegressLesionVolumefromYCheckBox
- function RegressLesionVolumefromYCheckBoxValueChanged(app, event)
- value = app.RegressLesionVolumefromYCheckBox.Value;
- if value == 1
- app.ApplyDTLVCCheckBox.Value = 0;
- app.ApplyDTLVCCheckBox.Enable = 0;
- else
- app.ApplyDTLVCCheckBox.Enable = 1;
- end
- end
- % Value changed function: RegressLesionVolumefromXandYCheckBox
- function RegressLesionVolumefromXandYCheckBoxValueChanged(app, event)
- value = app.RegressLesionVolumefromXandYCheckBox.Value;
- if value == 1
- app.ApplyDTLVCCheckBox.Value = 0;
- app.ApplyDTLVCCheckBox.Enable = 0;
- else
- app.ApplyDTLVCCheckBox.Enable = 1;
- end
- end
- % Value changed function: ApplyDTLVCCheckBox
- function ApplyDTLVCCheckBoxValueChanged(app, event)
- value = app.ApplyDTLVCCheckBox.Value;
- if value == 1
- app.RegressLesionVolumefromYCheckBox.Value = 0;
- app.RegressLesionVolumefromYCheckBox.Enable = 0;
- app.RegressLesionVolumefromXandYCheckBox.Value = 0;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 0;
- else
- app.RegressLesionVolumefromYCheckBox.Enable = 1;
- app.RegressLesionVolumefromXandYCheckBox.Enable = 1;
- end
- end
- % Value changed function: IdPathFlag
- function IdPathFlagValueChanged(app, event)
- value = app.IdPathFlag.Value;
- if value == 1
- app.SelectDataDirectoryButton.Enable = 0;
- app.ImDirText.Enable = 0;
- else
- app.SelectDataDirectoryButton.Enable = 1;
- app.ImDirText.Enable = 1;
- end
- end
- end
- % Component initialization
- methods (Access = private)
- % Create UIFigure and components
- function createComponents(app)
- % Create UIFigure and hide until all components are created
- app.UIFigure = uifigure('Visible', 'off');
- app.UIFigure.Position = [100 100 857 886];
- app.UIFigure.Name = 'MATLAB App';
- % Create GeneralModelingOptionsPanel
- app.GeneralModelingOptionsPanel = uipanel(app.UIFigure);
- app.GeneralModelingOptionsPanel.Title = 'General Modeling Options';
- app.GeneralModelingOptionsPanel.BackgroundColor = [0.9412 0.9412 0.9412];
- app.GeneralModelingOptionsPanel.FontWeight = 'bold';
- app.GeneralModelingOptionsPanel.FontSize = 14;
- app.GeneralModelingOptionsPanel.Position = [9 212 833 207];
- % Create StandardizeYCheckBox
- app.StandardizeYCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.StandardizeYCheckBox.Text = 'Standardize Y';
- app.StandardizeYCheckBox.Position = [6 152 97 22];
- % Create StandardizeXCheckBox
- app.StandardizeXCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.StandardizeXCheckBox.Text = 'Standardize X';
- app.StandardizeXCheckBox.Position = [108 152 97 22];
- % Create ApplyDTLVCCheckBox
- app.ApplyDTLVCCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.ApplyDTLVCCheckBox.ValueChangedFcn = createCallbackFcn(app, @ApplyDTLVCCheckBoxValueChanged, true);
- app.ApplyDTLVCCheckBox.Text = 'Apply DTLVC';
- app.ApplyDTLVCCheckBox.Position = [219 152 94 22];
- % Create PermApplycFWECheckBox
- app.PermApplycFWECheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.PermApplycFWECheckBox.Text = 'Apply cFWE';
- app.PermApplycFWECheckBox.Position = [413 47 88 22];
- % Create PermVoxPValsCheckBox
- app.PermVoxPValsCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.PermVoxPValsCheckBox.Enable = 'off';
- app.PermVoxPValsCheckBox.Visible = 'off';
- app.PermVoxPValsCheckBox.Text = 'Voxel p-values';
- app.PermVoxPValsCheckBox.Position = [413 19 100 22];
- % Create BootCIsCheckBox
- app.BootCIsCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.BootCIsCheckBox.Text = 'Bootstrap CIs';
- app.BootCIsCheckBox.Position = [550 47 95 22];
- app.BootCIsCheckBox.Value = true;
- % Create ConfIntLabel
- app.ConfIntLabel = uilabel(app.GeneralModelingOptionsPanel);
- app.ConfIntLabel.HorizontalAlignment = 'right';
- app.ConfIntLabel.Position = [544 22 73 22];
- app.ConfIntLabel.Text = 'CI Width (%)';
- % Create PermIter
- app.PermIter = uieditfield(app.GeneralModelingOptionsPanel, 'numeric');
- app.PermIter.Limits = [0 Inf];
- app.PermIter.Position = [492 71 46 22];
- app.PermIter.Value = 1000;
- % Create ConfIntWidth
- app.ConfIntWidth = uieditfield(app.GeneralModelingOptionsPanel, 'numeric');
- app.ConfIntWidth.Limits = [0 Inf];
- app.ConfIntWidth.Position = [625 22 37 22];
- app.ConfIntWidth.Value = 95;
- % Create StratifyTrainTestSplitsonYCheckBox
- app.StratifyTrainTestSplitsonYCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.StratifyTrainTestSplitsonYCheckBox.ValueChangedFcn = createCallbackFcn(app, @StratifyTrainTestSplitsonYCheckBoxValueChanged, true);
- app.StratifyTrainTestSplitsonYCheckBox.Text = 'Stratify Train/Test Splits on Y';
- app.StratifyTrainTestSplitsonYCheckBox.Position = [322 152 175 22];
- % Create PermCheckBox
- app.PermCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.PermCheckBox.ValueChangedFcn = createCallbackFcn(app, @PermCheckBoxValueChanged, true);
- app.PermCheckBox.Text = 'Run Permutations';
- app.PermCheckBox.Position = [414 94 118 22];
- app.PermCheckBox.Value = true;
- % Create BootCheckBox
- app.BootCheckBox = uicheckbox(app.GeneralModelingOptionsPanel);
- app.BootCheckBox.ValueChangedFcn = createCallbackFcn(app, @BootCheckBoxValueChanged, true);
- app.BootCheckBox.Text = 'Run Bootstraps';
- app.BootCheckBox.Position = [550 94 105 22];
- app.BootCheckBox.Value = true;
- % Create PermutationsEditFieldLabel
- app.PermutationsEditFieldLabel = uilabel(app.GeneralModelingOptionsPanel);
- app.PermutationsEditFieldLabel.HorizontalAlignment = 'right';
- app.PermutationsEditFieldLabel.Position = [408 71 76 22];
- app.PermutationsEditFieldLabel.Text = 'Permutations';
- % Create BootstrapLabel
- app.BootstrapLabel = uilabel(app.GeneralModelingOptionsPanel);
- app.BootstrapLabel.HorizontalAlignment = 'right';
- app.BootstrapLabel.Position = [545 71 62 22];
- app.BootstrapLabel.Text = 'Bootstraps';
- % Create BootAnalysesPanel
- app.BootAnalysesPanel = uipanel(app.GeneralModelingOptionsPanel);
- app.BootAnalysesPanel.BorderType = 'none';
- app.BootAnalysesPanel.Title = 'Bootstrap Analyses';
- app.BootAnalysesPanel.FontWeight = 'bold';
- app.BootAnalysesPanel.Position = [548 113 135 30];
- % Create BootIter
- app.BootIter = uieditfield(app.GeneralModelingOptionsPanel, 'numeric');
- app.BootIter.Limits = [0 Inf];
- app.BootIter.Position = [616 71 46 22];
- app.BootIter.Value = 1000;
- % Create CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel
- app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel = uipanel(app.UIFigure);
- app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel.Title = 'Cross-Validation Options (Nested if Hyper-Parameter Tuning Enabled)';
- app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel.FontWeight = 'bold';
- app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel.FontSize = 14;
- app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel.Position = [10 9 544 174];
- % Create CrossValidationSettingsPanel
- app.CrossValidationSettingsPanel = uipanel(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel);
- app.CrossValidationSettingsPanel.BorderType = 'none';
- app.CrossValidationSettingsPanel.Title = 'Cross-Validation Settings';
- app.CrossValidationSettingsPanel.FontWeight = 'bold';
- app.CrossValidationSettingsPanel.Position = [182 28 205 120];
- % Create CVStrategyLabel_2
- app.CVStrategyLabel_2 = uilabel(app.CrossValidationSettingsPanel);
- app.CVStrategyLabel_2.Position = [11 70 70 22];
- app.CVStrategyLabel_2.Text = 'CV Strategy';
- % Create NumberofOuterFoldsLabel
- app.NumberofOuterFoldsLabel = uilabel(app.CrossValidationSettingsPanel);
- app.NumberofOuterFoldsLabel.Position = [11 41 127 22];
- app.NumberofOuterFoldsLabel.Text = 'Number of Outer Folds';
- % Create NumberofRepeatsLabel_2
- app.NumberofRepeatsLabel_2 = uilabel(app.CrossValidationSettingsPanel);
- app.NumberofRepeatsLabel_2.Position = [11 11 109 22];
- app.NumberofRepeatsLabel_2.Text = 'Number of Repeats';
- % Create CVType
- app.CVType = uidropdown(app.CrossValidationSettingsPanel);
- app.CVType.Items = {'KFold', 'LOOCV'};
- app.CVType.Editable = 'on';
- app.CVType.ValueChangedFcn = createCallbackFcn(app, @CVTypeValueChanged, true);
- app.CVType.BackgroundColor = [1 1 1];
- app.CVType.Position = [131 70 69 22];
- app.CVType.Value = 'KFold';
- % Create OuterFolds
- app.OuterFolds = uieditfield(app.CrossValidationSettingsPanel, 'numeric');
- app.OuterFolds.Position = [167 41 33 22];
- app.OuterFolds.Value = 5;
- % Create OuterRepeats
- app.OuterRepeats = uieditfield(app.CrossValidationSettingsPanel, 'numeric');
- app.OuterRepeats.Position = [167 10 33 22];
- app.OuterRepeats.Value = 5;
- % Create RunCrossValidationCheckBox
- app.RunCrossValidationCheckBox = uicheckbox(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel);
- app.RunCrossValidationCheckBox.ValueChangedFcn = createCallbackFcn(app, @RunCrossValidationCheckBoxValueChanged, true);
- app.RunCrossValidationCheckBox.Text = 'Run Cross-Validation';
- app.RunCrossValidationCheckBox.Position = [7 124 135 22];
- app.RunCrossValidationCheckBox.Value = true;
- % Create CVPermPanel
- app.CVPermPanel = uipanel(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel);
- app.CVPermPanel.BorderType = 'none';
- app.CVPermPanel.Title = 'Permutation Testing';
- app.CVPermPanel.FontWeight = 'bold';
- app.CVPermPanel.Position = [395 89 143 59];
- % Create CVPermCheckBox
- app.CVPermCheckBox = uicheckbox(app.CVPermPanel);
- app.CVPermCheckBox.ValueChangedFcn = createCallbackFcn(app, @CVPermCheckBoxValueChanged, true);
- app.CVPermCheckBox.Text = 'Run Permutations';
- app.CVPermCheckBox.Position = [9 9 118 22];
- app.CVPermCheckBox.Value = true;
- % Create PermutationsEditField_2Label
- app.PermutationsEditField_2Label = uilabel(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel);
- app.PermutationsEditField_2Label.HorizontalAlignment = 'right';
- app.PermutationsEditField_2Label.Position = [397 68 76 22];
- app.PermutationsEditField_2Label.Text = 'Permutations';
- % Create CVPermIter
- app.CVPermIter = uieditfield(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel, 'numeric');
- app.CVPermIter.Position = [490 68 37 22];
- app.CVPermIter.Value = 50;
- % Create EnableModelStackingCheckBox
- app.EnableModelStackingCheckBox = uicheckbox(app.CrossValidationOptionsNestedifHyperParameterTuningEnabledPanel);
- app.EnableModelStackingCheckBox.ValueChangedFcn = createCallbackFcn(app, @EnableModelStackingCheckBoxValueChanged, true);
- app.EnableModelStackingCheckBox.Text = 'Enable Model Stacking';
- app.EnableModelStackingCheckBox.Position = [7 97 145 22];
- app.EnableModelStackingCheckBox.Value = true;
- % Create PredictorModalityButtonGroup
- app.PredictorModalityButtonGroup = uibuttongroup(app.UIFigure);
- app.PredictorModalityButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @PredictorModalityButtonGroupSelectionChanged, true);
- app.PredictorModalityButtonGroup.TitlePosition = 'centertop';
- app.PredictorModalityButtonGroup.Title = 'Predictor Modality';
- app.PredictorModalityButtonGroup.ButtonDownFcn = createCallbackFcn(app, @PredictorModalityButtonGroupButtonDown, true);
- app.PredictorModalityButtonGroup.FontWeight = 'bold';
- app.PredictorModalityButtonGroup.Position = [10 766 125 69];
- % Create NIFTIButton
- app.NIFTIButton = uiradiobutton(app.PredictorModalityButtonGroup);
- app.NIFTIButton.Text = 'NIFTI';
- app.NIFTIButton.Position = [11 23 52 22];
- app.NIFTIButton.Value = true;
- % Create MatrixButton
- app.MatrixButton = uiradiobutton(app.PredictorModalityButtonGroup);
- app.MatrixButton.Text = 'Matrix';
- app.MatrixButton.Position = [65 22 65 22];
- % Create ArrayButton
- app.ArrayButton = uiradiobutton(app.PredictorModalityButtonGroup);
- app.ArrayButton.Text = 'Array';
- app.ArrayButton.Position = [11 1 65 22];
- % Create SelectBrainMaskButton
- app.SelectBrainMaskButton = uibutton(app.UIFigure, 'push');
- app.SelectBrainMaskButton.ButtonPushedFcn = createCallbackFcn(app, @SelectBrainMaskButtonPushed, true);
- app.SelectBrainMaskButton.BackgroundColor = [0.651 0.651 0.651];
- app.SelectBrainMaskButton.Position = [163 687 135 23];
- app.SelectBrainMaskButton.Text = 'Select Brain Mask';
- % Create HyperParameterTuningPanel
- app.HyperParameterTuningPanel = uipanel(app.UIFigure);
- app.HyperParameterTuningPanel.BorderType = 'none';
- app.HyperParameterTuningPanel.Title = 'Hyper-Parameter Tuning';
- app.HyperParameterTuningPanel.FontWeight = 'bold';
- app.HyperParameterTuningPanel.Position = [199 221 205 134];
- % Create HpOptCVStrategyLabel
- app.HpOptCVStrategyLabel = uilabel(app.HyperParameterTuningPanel);
- app.HpOptCVStrategyLabel.Position = [11 65 70 22];
- app.HpOptCVStrategyLabel.Text = 'CV Strategy';
- % Create HpOptNumberofFoldsLabel
- app.HpOptNumberofFoldsLabel = uilabel(app.HyperParameterTuningPanel);
- app.HpOptNumberofFoldsLabel.Position = [11 36 94 22];
- app.HpOptNumberofFoldsLabel.Text = 'Number of Folds';
- % Create HpOptNumberofRepeatsLabel
- app.HpOptNumberofRepeatsLabel = uilabel(app.HyperParameterTuningPanel);
- app.HpOptNumberofRepeatsLabel.Position = [11 9 109 22];
- app.HpOptNumberofRepeatsLabel.Text = 'Number of Repeats';
- % Create HpOptCvType
- app.HpOptCvType = uidropdown(app.HyperParameterTuningPanel);
- app.HpOptCvType.Items = {'KFold', 'LOOCV'};
- app.HpOptCvType.ValueChangedFcn = createCallbackFcn(app, @HpOptCvTypeValueChanged, true);
- app.HpOptCvType.Position = [131 65 69 22];
- app.HpOptCvType.Value = 'KFold';
- % Create HpOptFolds
- app.HpOptFolds = uieditfield(app.HyperParameterTuningPanel, 'numeric');
- app.HpOptFolds.Position = [160 36 40 22];
- app.HpOptFolds.Value = 5;
- % Create HpOptRepeats
- app.HpOptRepeats = uieditfield(app.HyperParameterTuningPanel, 'numeric');
- app.HpOptRepeats.Position = [160 8 40 22];
- app.HpOptRepeats.Value = 5;
- % Create OptimizeHyperparametersCheckBox
- app.OptimizeHyperparametersCheckBox = uicheckbox(app.HyperParameterTuningPanel);
- app.OptimizeHyperparametersCheckBox.ValueChangedFcn = createCallbackFcn(app, @OptimizeHyperparametersCheckBoxValueChanged, true);
- app.OptimizeHyperparametersCheckBox.Text = 'Optimize Hyper-parameters';
- app.OptimizeHyperparametersCheckBox.Position = [11 89 169 22];
- app.OptimizeHyperparametersCheckBox.Value = true;
- % Create SelectDataDirectoryButton
- app.SelectDataDirectoryButton = uibutton(app.UIFigure, 'push');
- app.SelectDataDirectoryButton.ButtonPushedFcn = createCallbackFcn(app, @SelectDataDirectoryButtonPushed, true);
- app.SelectDataDirectoryButton.BackgroundColor = [0.651 0.651 0.651];
- app.SelectDataDirectoryButton.Position = [163 726 136 24];
- app.SelectDataDirectoryButton.Text = 'Select Data Directory';
- % Create SelectCSVfileButton
- app.SelectCSVfileButton = uibutton(app.UIFigure, 'push');
- app.SelectCSVfileButton.ButtonPushedFcn = createCallbackFcn(app, @SelectCSVfileButtonPushed, true);
- app.SelectCSVfileButton.BackgroundColor = [0.651 0.651 0.651];
- app.SelectCSVfileButton.Position = [164 811 134 23];
- app.SelectCSVfileButton.Text = 'Select CSV file';
- % Create MinimumDataThresholdsPanel
- app.MinimumDataThresholdsPanel = uipanel(app.UIFigure);
- app.MinimumDataThresholdsPanel.BorderType = 'none';
- app.MinimumDataThresholdsPanel.Title = 'Minimum Data Thresholds';
- app.MinimumDataThresholdsPanel.FontWeight = 'bold';
- app.MinimumDataThresholdsPanel.Position = [12 266 180 89];
- % Create MinimumFrequencyLabel
- app.MinimumFrequencyLabel = uilabel(app.MinimumDataThresholdsPanel);
- app.MinimumFrequencyLabel.Position = [10 10 114 22];
- app.MinimumFrequencyLabel.Text = 'Minimum Frequency';
- % Create MinFreq
- app.MinFreq = uieditfield(app.MinimumDataThresholdsPanel, 'numeric');
- app.MinFreq.Position = [142 10 39 22];
- app.MinFreq.Value = 10;
- % Create MinimumObservationLabel
- app.MinimumObservationLabel = uilabel(app.MinimumDataThresholdsPanel);
- app.MinimumObservationLabel.Position = [10 41 122 22];
- app.MinimumObservationLabel.Text = 'Minimum Observation';
- % Create MinObs
- app.MinObs = uieditfield(app.MinimumDataThresholdsPanel, 'numeric');
- app.MinObs.Position = [142 41 39 22];
- app.MinObs.Value = 1;
- % Create PredictorTypeButtonGroup
- app.PredictorTypeButtonGroup = uibuttongroup(app.UIFigure);
- app.PredictorTypeButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @PredictorTypeButtonGroupSelectionChanged, true);
- app.PredictorTypeButtonGroup.TitlePosition = 'centertop';
- app.PredictorTypeButtonGroup.Title = 'Predictor Type';
- app.PredictorTypeButtonGroup.FontWeight = 'bold';
- app.PredictorTypeButtonGroup.Position = [10 704 124 51];
- % Create LesionButton
- app.LesionButton = uiradiobutton(app.PredictorTypeButtonGroup);
- app.LesionButton.Text = 'Lesion';
- app.LesionButton.Position = [11 5 58 22];
- app.LesionButton.Value = true;
- % Create OtherPredButton
- app.OtherPredButton = uiradiobutton(app.PredictorTypeButtonGroup);
- app.OtherPredButton.Text = 'Other';
- app.OtherPredButton.Position = [69 5 65 22];
- % Create CSVTtext
- app.CSVTtext = uitextarea(app.UIFigure);
- app.CSVTtext.ValueChangedFcn = createCallbackFcn(app, @SelectCSVfileButtonPushed, true);
- app.CSVTtext.Placeholder = 'No file selected';
- app.CSVTtext.Position = [308 811 533 24];
- % Create ImDirText
- app.ImDirText = uitextarea(app.UIFigure);
- app.ImDirText.Placeholder = 'No directory selected';
- app.ImDirText.Position = [308 726 533 24];
- % Create BrainMaskText
- app.BrainMaskText = uitextarea(app.UIFigure);
- app.BrainMaskText.Placeholder = 'No mask selected (NIFTI Modality Only)';
- app.BrainMaskText.Position = [308 686 533 25];
- % Create SelectModelLabel
- app.SelectModelLabel = uilabel(app.UIFigure);
- app.SelectModelLabel.BackgroundColor = [0.9412 0.9412 0.9412];
- app.SelectModelLabel.HorizontalAlignment = 'right';
- app.SelectModelLabel.FontSize = 14;
- app.SelectModelLabel.Position = [9 446 90 22];
- app.SelectModelLabel.Text = 'Select Model:';
- % Create SelectModelDropDown
- app.SelectModelDropDown = uidropdown(app.UIFigure);
- app.SelectModelDropDown.Items = {'plsr', 'pls_da', 'ridge', 'logistic_ridge', 'linsvr', 'linsvc', 'kernsvr', 'kernsvc', 'rensemble', 'censemble', 'municorr', 'ttest', 'bmunz', 'munilr', 'munimnr', 'muniolsr', 'prop_sub'};
- app.SelectModelDropDown.ValueChangedFcn = createCallbackFcn(app, @SelectModelDropDownValueChanged, true);
- app.SelectModelDropDown.FontSize = 14;
- app.SelectModelDropDown.BackgroundColor = [0.651 0.651 0.651];
- app.SelectModelDropDown.Position = [103 442 100 30];
- app.SelectModelDropDown.Value = 'plsr';
- % Create ResultOptionsPanel
- app.ResultOptionsPanel = uipanel(app.UIFigure);
- app.ResultOptionsPanel.Title = 'Result Options';
- app.ResultOptionsPanel.FontWeight = 'bold';
- app.ResultOptionsPanel.FontSize = 14;
- app.ResultOptionsPanel.Position = [595 80 204 77];
- % Create WriteBootstrapImagesCheckBox
- app.WriteBootstrapImagesCheckBox = uicheckbox(app.ResultOptionsPanel);
- app.WriteBootstrapImagesCheckBox.Text = 'Write Bootstrap Images';
- app.WriteBootstrapImagesCheckBox.Position = [6 3 147 22];
- app.WriteBootstrapImagesCheckBox.Value = true;
- % Create WritePermutationImagesCheckBox
- app.WritePermutationImagesCheckBox = uicheckbox(app.ResultOptionsPanel);
- app.WritePermutationImagesCheckBox.Text = 'Write Permutation Images';
- app.WritePermutationImagesCheckBox.Position = [6 27 161 22];
- app.WritePermutationImagesCheckBox.Value = true;
- % Create FitExplanatoryModelCheckBox
- app.FitExplanatoryModelCheckBox = uicheckbox(app.UIFigure);
- app.FitExplanatoryModelCheckBox.Text = 'Fit Explanatory Model';
- app.FitExplanatoryModelCheckBox.FontSize = 14;
- app.FitExplanatoryModelCheckBox.Position = [218 444 157 22];
- app.FitExplanatoryModelCheckBox.Value = true;
- % Create UseParallelProcessingRecommendedCheckBox
- app.UseParallelProcessingRecommendedCheckBox = uicheckbox(app.UIFigure);
- app.UseParallelProcessingRecommendedCheckBox.Text = 'Use Parallel Processing (Recommended)';
- app.UseParallelProcessingRecommendedCheckBox.FontSize = 14;
- app.UseParallelProcessingRecommendedCheckBox.Position = [386 444 282 22];
- app.UseParallelProcessingRecommendedCheckBox.Value = true;
- % Create MultivariateModelingToolAnalysisConfigurationLabel
- app.MultivariateModelingToolAnalysisConfigurationLabel = uilabel(app.UIFigure);
- app.MultivariateModelingToolAnalysisConfigurationLabel.FontSize = 16;
- app.MultivariateModelingToolAnalysisConfigurationLabel.FontWeight = 'bold';
- app.MultivariateModelingToolAnalysisConfigurationLabel.Position = [11 860 503 22];
- app.MultivariateModelingToolAnalysisConfigurationLabel.Text = 'Multivariate Modeling Tool Analysis Configuration ';
- % Create RunAnalysisButton
- app.RunAnalysisButton = uibutton(app.UIFigure, 'push');
- app.RunAnalysisButton.ButtonPushedFcn = createCallbackFcn(app, @RunAnalysisButtonPushed, true);
- app.RunAnalysisButton.BackgroundColor = [0.651 0.651 0.651];
- app.RunAnalysisButton.FontSize = 18;
- app.RunAnalysisButton.FontWeight = 'bold';
- app.RunAnalysisButton.Position = [588 10 224 48];
- app.RunAnalysisButton.Text = 'Run Analysis';
- % Create SelectOutputDirectoryButton
- app.SelectOutputDirectoryButton = uibutton(app.UIFigure, 'push');
- app.SelectOutputDirectoryButton.ButtonPushedFcn = createCallbackFcn(app, @SelectOutputDirectoryButtonPushed, true);
- app.SelectOutputDirectoryButton.BackgroundColor = [0.651 0.651 0.651];
- app.SelectOutputDirectoryButton.Position = [163 643 135 24];
- app.SelectOutputDirectoryButton.Text = 'Select Output Directory';
- % Create OutDirText
- app.OutDirText = uitextarea(app.UIFigure);
- app.OutDirText.Placeholder = 'No directory selected';
- app.OutDirText.Position = [308 644 533 23];
- % Create RegistryFlag
- app.RegistryFlag = uicheckbox(app.UIFigure);
- app.RegistryFlag.Text = 'Registry Patients (select if subject IDs are provided as 4-digit numeric codes in CSV file)';
- app.RegistryFlag.FontSize = 14;
- app.RegistryFlag.Position = [167 782 580 22];
- % Create PermutationTestingPanel
- app.PermutationTestingPanel = uipanel(app.UIFigure);
- app.PermutationTestingPanel.BorderType = 'none';
- app.PermutationTestingPanel.Title = 'Permutation Testing';
- app.PermutationTestingPanel.FontWeight = 'bold';
- app.PermutationTestingPanel.Position = [413 325 135 30];
- % Create StatisticalThresholdsPanel
- app.StatisticalThresholdsPanel = uipanel(app.UIFigure);
- app.StatisticalThresholdsPanel.BorderType = 'none';
- app.StatisticalThresholdsPanel.Title = 'Statistical Thresholds';
- app.StatisticalThresholdsPanel.FontWeight = 'bold';
- app.StatisticalThresholdsPanel.Position = [699 231 135 124];
- % Create FWEEditFieldLabel
- app.FWEEditFieldLabel = uilabel(app.StatisticalThresholdsPanel);
- app.FWEEditFieldLabel.HorizontalAlignment = 'right';
- app.FWEEditFieldLabel.Position = [1 39 32 22];
- app.FWEEditFieldLabel.Text = 'FWE';
- % Create FweThresh
- app.FweThresh = uieditfield(app.StatisticalThresholdsPanel, 'numeric');
- app.FweThresh.Limits = [0 1];
- app.FweThresh.Position = [39 39 44 22];
- app.FweThresh.Value = 0.05;
- % Create UncEditFieldLabel
- app.UncEditFieldLabel = uilabel(app.StatisticalThresholdsPanel);
- app.UncEditFieldLabel.HorizontalAlignment = 'right';
- app.UncEditFieldLabel.Position = [3 74 30 22];
- app.UncEditFieldLabel.Text = 'Unc.';
- % Create UncPThresh
- app.UncPThresh = uieditfield(app.StatisticalThresholdsPanel, 'numeric');
- app.UncPThresh.Limits = [0 1];
- app.UncPThresh.Position = [39 74 44 22];
- app.UncPThresh.Value = 0.001;
- % Create FDRThresh
- app.FDRThresh = uieditfield(app.StatisticalThresholdsPanel, 'numeric');
- app.FDRThresh.Limits = [0 1];
- app.FDRThresh.Position = [39 6 44 22];
- app.FDRThresh.Value = 0.05;
- % Create FDRLabel
- app.FDRLabel = uilabel(app.StatisticalThresholdsPanel);
- app.FDRLabel.HorizontalAlignment = 'right';
- app.FDRLabel.Position = [1 8 30 22];
- app.FDRLabel.Text = 'FDR';
- % Create MisclassificationCostsPanel
- app.MisclassificationCostsPanel = uipanel(app.UIFigure);
- app.MisclassificationCostsPanel.BorderType = 'none';
- app.MisclassificationCostsPanel.Title = 'Misclassification Costs';
- app.MisclassificationCostsPanel.FontWeight = 'bold';
- app.MisclassificationCostsPanel.Position = [15 10 168 90];
- % Create Group1EditField_4Label
- app.Group1EditField_4Label = uilabel(app.MisclassificationCostsPanel);
- app.Group1EditField_4Label.HorizontalAlignment = 'right';
- app.Group1EditField_4Label.Position = [15 13 52 22];
- app.Group1EditField_4Label.Text = 'Group -1';
- % Create MisClasCostG2
- app.MisClasCostG2 = uieditfield(app.MisclassificationCostsPanel, 'numeric');
- app.MisClasCostG2.Limits = [0 100];
- app.MisClasCostG2.Enable = 'off';
- app.MisClasCostG2.Position = [74 13 22 22];
- app.MisClasCostG2.Value = 1;
- % Create Group1EditField_3Label
- app.Group1EditField_3Label = uilabel(app.MisclassificationCostsPanel);
- app.Group1EditField_3Label.HorizontalAlignment = 'right';
- app.Group1EditField_3Label.Position = [13 40 55 22];
- app.Group1EditField_3Label.Text = 'Group +1';
- % Create MisClasCostG1
- app.MisClasCostG1 = uieditfield(app.MisclassificationCostsPanel, 'numeric');
- app.MisClasCostG1.Limits = [0 1000];
- app.MisClasCostG1.Enable = 'off';
- app.MisClasCostG1.Position = [74 40 22 22];
- app.MisClasCostG1.Value = 1;
- % Create SelectOutcomeVariableYListBoxLabel
- app.SelectOutcomeVariableYListBoxLabel = uilabel(app.UIFigure);
- app.SelectOutcomeVariableYListBoxLabel.HorizontalAlignment = 'right';
- app.SelectOutcomeVariableYListBoxLabel.Position = [50 590 156 22];
- app.SelectOutcomeVariableYListBoxLabel.Text = 'Select Outcome Variable (Y)';
- % Create SelectOutcomeVariableYListBox
- app.SelectOutcomeVariableYListBox = uilistbox(app.UIFigure);
- app.SelectOutcomeVariableYListBox.Items = {};
- app.SelectOutcomeVariableYListBox.Position = [221 572 620 56];
- app.SelectOutcomeVariableYListBox.Value = {};
- % Create SelectNuisanceRegressorsListBoxLabel
- app.SelectNuisanceRegressorsListBoxLabel = uilabel(app.UIFigure);
- app.SelectNuisanceRegressorsListBoxLabel.HorizontalAlignment = 'right';
- app.SelectNuisanceRegressorsListBoxLabel.Position = [34 520 156 22];
- app.SelectNuisanceRegressorsListBoxLabel.Text = 'Select Nuisance Regressors';
- % Create SelectNuisanceRegressorsListBox
- app.SelectNuisanceRegressorsListBox = uilistbox(app.UIFigure);
- app.SelectNuisanceRegressorsListBox.Items = {};
- app.SelectNuisanceRegressorsListBox.Multiselect = 'on';
- app.SelectNuisanceRegressorsListBox.Position = [221 501 620 56];
- app.SelectNuisanceRegressorsListBox.Value = {};
- % Create RegressLesionVolumefromYCheckBox
- app.RegressLesionVolumefromYCheckBox = uicheckbox(app.UIFigure);
- app.RegressLesionVolumefromYCheckBox.ValueChangedFcn = createCallbackFcn(app, @RegressLesionVolumefromYCheckBoxValueChanged, true);
- app.RegressLesionVolumefromYCheckBox.Text = 'Regress Lesion Volume from Y';
- app.RegressLesionVolumefromYCheckBox.Position = [221 476 243 22];
- % Create NuisanceRegressorCheckBox
- app.NuisanceRegressorCheckBox = uicheckbox(app.UIFigure);
- app.NuisanceRegressorCheckBox.ValueChangedFcn = createCallbackFcn(app, @NuisanceRegressorCheckBoxValueChanged, true);
- app.NuisanceRegressorCheckBox.Text = '';
- app.NuisanceRegressorCheckBox.Position = [196 519 25 22];
- % Create CatYCheckBox
- app.CatYCheckBox = uicheckbox(app.UIFigure);
- app.CatYCheckBox.ValueChangedFcn = createCallbackFcn(app, @CatYCheckBoxValueChanged, true);
- app.CatYCheckBox.Enable = 'off';
- app.CatYCheckBox.Visible = 'off';
- app.CatYCheckBox.Text = 'Y is Grouping Variable';
- app.CatYCheckBox.Position = [217 421 141 22];
- % Create RegressLesionVolumefromXandYCheckBox
- app.RegressLesionVolumefromXandYCheckBox = uicheckbox(app.UIFigure);
- app.RegressLesionVolumefromXandYCheckBox.ValueChangedFcn = createCallbackFcn(app, @RegressLesionVolumefromXandYCheckBoxValueChanged, true);
- app.RegressLesionVolumefromXandYCheckBox.Text = 'Regress Lesion Volume from X and Y';
- app.RegressLesionVolumefromXandYCheckBox.Position = [466 477 301 22];
- % Create RankCorCheckBox
- app.RankCorCheckBox = uicheckbox(app.UIFigure);
- app.RankCorCheckBox.Enable = 'off';
- app.RankCorCheckBox.Visible = 'off';
- app.RankCorCheckBox.Text = 'Spearman Rank Correlation';
- app.RankCorCheckBox.Position = [217 421 228 22];
- % Create IdPathFlag
- app.IdPathFlag = uicheckbox(app.UIFigure);
- app.IdPathFlag.ValueChangedFcn = createCallbackFcn(app, @IdPathFlagValueChanged, true);
- app.IdPathFlag.Text = 'Subject IDs are full filepaths to imaging data';
- app.IdPathFlag.FontSize = 14;
- app.IdPathFlag.Position = [167 759 299 22];
- % Show the figure after all components are created
- app.UIFigure.Visible = 'on';
- end
- end
- % App creation and deletion
- methods (Access = public)
- % Construct app
- function app = run_modeling_gui
- % Create UIFigure and components
- createComponents(app)
- % Register the app with App Designer
- registerApp(app, app.UIFigure)
- % Execute the startup function
- runStartupFcn(app, @startupFcn)
- if nargout == 0
- clear app
- end
- end
- % Code that executes before app deletion
- function delete(app)
- % Delete UIFigure when app is deleted
- delete(app.UIFigure)
- end
- end
- end
run_modeling_gui.m at commit 389ea3e, under GPL-3.0 · at the source
Overview
- Department of Electrical and Computer Engineering, The University of Iowa, Iowa City, IA USA
- Department of Pediatrics, Carver College of Medicine, The University of Iowa, Iowa City, IA USA
- Department of Neurology, Carver College of Medicine, The University of Iowa, Iowa City, IA USA
- Department of Biomedical Engineering, The University of Iowa, Iowa City, IA USA
- Department of Psychiatry, Carver College of Medicine, The University of Iowa, Iowa City, IA USA
- Iowa Neuroscience Institute, The University of Iowa, Iowa City, IA USA
Abstract
Accurately predicting long-term outcomes after stroke remains a key challenge in personalized medicine. Here, we present a neuroimaging platform that forecasts individualized cognitive outcomes in patients with ischemic stroke using deep learning-based lesion segmentation and location-/
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.
Zenodo 15626633
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
- 28 September 2026: the link answers (HTTP 200)
4 files
- plot_cognitive_outcome_m
odels.ipynb , Jupyter, 51 lines, 1 match - plot_focus_outcomes.mlx, MATLAB, not shown here
- plot_results_demog.mlx, MATLAB, not shown here
- plot_results_full.mlx, MATLAB, not shown here
Zenodo 15610144
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
- 28 September 2026: the link answers (HTTP 200)
171 files
- model_code/
common/ , MATLAB, 56 linescheck_and_fill_cfg_field s.m - model_code/
common/ , MATLAB, 86 linescrossval/ get_hp_opts.m - model_code/
common/ , MATLAB, 32 linescrossval/ get_train_test_splits.m - model_code/
common/ , MATLAB, 66 linescrossval/ perm_nested_cv.m - model_code/
common/ , MATLAB, 69 linescrossval/ perm_stacked_cv.m - model_code/
common/ , MATLAB, 112 linescrossval/ preallocate_cv_results.m - model_code/
common/ , MATLAB, 44 linescrossval/ preallocate_cv_results_p erm.m - model_code/
common/ , MATLAB, 61 linescrossval/ predict_new.m - model_code/
common/ , MATLAB, 37 linescrossval/ rescale_dataset.m - model_code/
common/ , MATLAB, 106 linescrossval/ run_nested_cv.m - model_code/
common/ , MATLAB, 117 linescrossval/ run_new_partition_cv.m - model_code/
common/ , MATLAB, 90 linescrossval/ run_pre_partitioned_cv.m - model_code/
common/ , MATLAB, 42 linescrossval/ summarize_cv_results.m - model_code/
common/ , MATLAB, 12 linesdata_io/ extract_upper_triangles. m - model_code/
common/ , MATLAB, 12 linesdata_io/ gen_node_file.m - model_code/
common/ , MATLAB, 79 linesdata_io/ get_and_format_array_dat a.m - model_code/
common/ , MATLAB, 83 linesdata_io/ get_and_format_lesion_da ta.m - model_code/
common/ , MATLAB, 84 linesdata_io/ get_and_format_matrix_da ta.m - model_code/
common/ , MATLAB, 82 linesdata_io/ get_and_format_nifti_dat a.m - model_code/
common/ , MATLAB, 46 linesdata_io/ get_and_format_table_dat a.m - model_code/
common/ , MATLAB, 46 linesdata_io/ get_behavior_data.m - model_code/
common/ , MATLAB, 77 linesdata_io/ get_lmwv.m - model_code/
common/ , MATLAB, 154 linesdata_io/ write_connectome_weights _mlsm.m - model_code/
common/ , MATLAB, 172 linesdata_io/ write_connectome_weights _ulsm.m - model_code/
common/ , MATLAB, 37 linesdata_io/ write_edge_file.m - model_code/
common/ , MATLAB, 180 linesdata_io/ write_mass_uni_weight_ma ps.m - model_code/
common/ , MATLAB, 180 linesdata_io/ write_mass_unicorr_weigh t_maps.m - model_code/
common/ , MATLAB, 211 linesdata_io/ write_mlsm_weight_maps.m - model_code/
common/ , MATLAB, 27 linesdata_io/ write_model_weight_maps. m - model_code/
common/ , MATLAB, 173 linesdata_io/ write_model_weight_maps_ anat_prior.m - model_code/
common/ , MATLAB, 14 linesdata_io/ write_model_weights_conn ectome.m - model_code/
common/ , MATLAB, 29 linesexplanatory/ boot/ get_boot_cis_cl.m - model_code/
common/ , MATLAB, 26 linesexplanatory/ boot/ get_boot_cis_reg.m - model_code/
common/ , MATLAB, 29 linesexplanatory/ boot/ get_boot_pvals_cl.m - model_code/
common/ , MATLAB, 30 linesexplanatory/ boot/ get_boot_pvals_reg.m - model_code/
common/ , MATLAB, 39 linesexplanatory/ boot/ get_boot_statistics.m - model_code/
common/ , MATLAB, 97 linesexplanatory/ boot/ get_bootstrap_cis.m - model_code/
common/ , MATLAB, 12 linesexplanatory/ boot/ get_ci_thresholded_betas .m - model_code/
common/ , MATLAB, 119 linesexplanatory/ boot/ run_bootstrap_models.m - model_code/
common/ , MATLAB, 130 linesexplanatory/ fit_explanatory_model.m - model_code/
common/ , MATLAB, 98 linesexplanatory/ jack/ run_jackknife_models.m - model_code/
common/ , MATLAB, 18 linesexplanatory/ perm/ get_perm_beta_pvals.m - model_code/
common/ , MATLAB, 14 linesexplanatory/ perm/ get_permutation_coeffici ent_pvalues.m - model_code/
common/ , MATLAB, 30 linesexplanatory/ perm/ get_permutation_results. m - model_code/
common/ , MATLAB, 21 linesexplanatory/ perm/ get_wholebrain_cfwe_thre sh.m - model_code/
common/ , MATLAB, 140 linesfit_and_evaluate_model.m - model_code/
common/ , MATLAB, 349 linesgen_methods_text.m - model_code/
common/ , MATLAB, 99 linesgen_results_text.m - model_code/
common/ , MATLAB, 371 linesget_default_model_cfg.m - model_code/
common/ , MATLAB, 34 linesget_model_option_list.m - model_code/
common/ , MATLAB, 13 lineslsm/ get_freq_map.m - model_code/
common/ , MATLAB, 29 lineslsm/ get_lvol_map.m - model_code/
common/ , MATLAB, 12 linesmodel_eval/ get_explained_variance.m - model_code/
common/ , MATLAB, 9 linesmodel_eval/ get_model_r2.m - model_code/
common/ , MATLAB, 9 linesmodel_eval/ get_model_r2_train.m - model_code/
common/ , MATLAB, 8 linesmodel_eval/ get_mse.m - model_code/
common/ , MATLAB, 14 linesmodel_eval/ get_optimal_threshold.m - model_code/
common/ , MATLAB, 15 linespreproc/ apply_dtlvc.m - model_code/
common/ , MATLAB, 46 linespreproc/ check_Y_data.m - model_code/
common/ , MATLAB, 37 linespreproc/ check_for_missing_data.m - model_code/
common/ , MATLAB, 27 linespreproc/ get_quartile_groups.m - model_code/
common/ , MATLAB, 12 linespreproc/ regress_confounds_from_X .m - model_code/
common/ , MATLAB, 16 linespreproc/ regress_confounds_from_Y .m - model_code/
common/ , MATLAB, 10 linespreproc/ trim_X_data.m - model_code/
common/ , MATLAB, 52 linespreproc/ trim_input_data.m - model_code/
common/ , MATLAB, 21 linesrestore_model_path.m - model_code/
common/ , MATLAB, 118 linesstats/ bonf_holm.m - model_code/
ensemble/ , MATLAB, 97 linesrun_censemble_modeling.m - model_code/
ensemble/ , MATLAB, 90 linesrun_censemble_modeling_c v.m - model_code/
ensemble/ , MATLAB, 77 linesrun_rensemble_modeling.m - model_code/
ensemble/ , MATLAB, 77 linesrun_rensemble_modeling_c v.m - model_code/
mass_univariate/ , MATLAB, 113 linesapproxbrunnermunzel.m - model_code/
mass_univariate/ , MATLAB, 163 linesbrunner_munzel.m - model_code/
mass_univariate/ , MATLAB, 34 linesget_bootstrapped_cis_mun icorr.m - model_code/
mass_univariate/ , MATLAB, 52 linesget_bootstrapped_cis_mun ilr.m - model_code/
mass_univariate/ , MATLAB, 81 linesrun_brunner_munzel_test. m - model_code/
mass_univariate/ , MATLAB, 22 linesrun_mass_univariate_corr .m - model_code/
mass_univariate/ , MATLAB, 49 linesrun_mass_univariate_lr.m - model_code/
mass_univariate/ , MATLAB, 42 linesrun_mass_univariate_mnr. m - model_code/
mass_univariate/ , MATLAB, 41 linesrun_mass_univariate_olsr .m - model_code/
mass_univariate/ , MATLAB, 29 linesrun_ols_modeling.m - model_code/
mass_univariate/ , MATLAB, 46 linesrun_ols_modeling_cv.m - model_code/
mass_univariate/ , MATLAB, 47 linesrun_perm_mass_uni_corr.m - model_code/
mass_univariate/ , MATLAB, 71 linesrun_perm_mass_uni_lr.m - model_code/
mass_univariate/ , MATLAB, 62 linesrun_perm_mass_uni_mnr.m - model_code/
mass_univariate/ , MATLAB, 69 linesrun_perm_mass_uni_olsr.m - model_code/
mass_univariate/ , MATLAB, 59 linesrun_proportional_subtrac tion.m - model_code/
mass_univariate/ , MATLAB, 119 linesrun_ttests.m - model_code/
nlinsvr/ , MATLAB, 48 linesget_svr_hp_opts.m - model_code/
nlinsvr/ , MATLAB, 67 linesrun_boot_svc.m - model_code/
nlinsvr/ , MATLAB, 50 linesrun_boot_svr.m - model_code/
nlinsvr/ , MATLAB, 52 linesrun_bootstrap_svc.m - model_code/
nlinsvr/ , MATLAB, 42 linesrun_bootstrap_svr.m - model_code/
nlinsvr/ , MATLAB, 121 linesrun_perm_svc.m - model_code/
nlinsvr/ , MATLAB, 126 linesrun_perm_svr.m - model_code/
nlinsvr/ , MATLAB, 127 linesrun_svc_modeling.m - model_code/
nlinsvr/ , MATLAB, 118 linesrun_svc_modeling_cv.m - model_code/
nlinsvr/ , MATLAB, 105 linesrun_svr_modeling.m - model_code/
nlinsvr/ , MATLAB, 105 linesrun_svr_modeling_cv.m - model_code/
plsr/ , MATLAB, 38 linesfitplsda.m - model_code/
plsr/ , MATLAB, 20 linesfitplsrm.m - model_code/
plsr/ , MATLAB, 11 linesget_ci_thresholded_vips. m - model_code/
plsr/ , MATLAB, 41 linesrun_boot_plsda.m - model_code/
plsr/ , MATLAB, 32 linesrun_boot_plsr.m - model_code/
plsr/ , MATLAB, 36 linesrun_bootstrap_plsda.m - model_code/
plsr/ , MATLAB, 35 linesrun_bootstrap_plsr.m - model_code/
plsr/ , MATLAB, 137 linesrun_kfold_plsr.m - model_code/
plsr/ , MATLAB, 37 linesrun_loocv_plsr.m - model_code/
plsr/ , MATLAB, 90 linesrun_perm_plsda.m - model_code/
plsr/ , MATLAB, 96 linesrun_perm_plsr.m - model_code/
plsr/ , MATLAB, 37 linesrun_plsda_modeling.m - model_code/
plsr/ , MATLAB, 59 linesrun_plsda_modeling_cv.m - model_code/
plsr/ , MATLAB, 46 linesrun_plsr_modeling.m - model_code/
plsr/ , MATLAB, 52 linesrun_plsr_modeling_cv.m - model_code/
reglm/ , MATLAB, 118 linesget_regmdl_hp_opts.m - model_code/
reglm/ , MATLAB, 63 linesrun_boot_classmdl.m - model_code/
reglm/ , MATLAB, 45 linesrun_boot_regmdl.m - model_code/
reglm/ , MATLAB, 47 linesrun_bootstrap_class_line ar.m - model_code/
reglm/ , MATLAB, 45 linesrun_bootstrap_reg_linear .m - model_code/
reglm/ , MATLAB, 164 linesrun_class_linear_modelin g.m - model_code/
reglm/ , MATLAB, 153 linesrun_class_linear_modelin g_cv.m - model_code/
reglm/ , MATLAB, 98 linesrun_perm_classlm.m - model_code/
reglm/ , MATLAB, 111 linesrun_perm_reglm.m - model_code/
reglm/ , MATLAB, 143 linesrun_reg_linear_modeling. m - model_code/
reglm/ , MATLAB, 150 linesrun_reg_linear_modeling_ cv.m - model_code/
stacked_models/ , MATLAB, 136 linescreate_stacked_models.m - model_code/
stacked_models/ , MATLAB, 155 linescreate_stacked_reg_model s.m - model_code/
stacked_models/ , MATLAB, 190 linesget_default_stack_cfg.m - model_code/
stacked_models/ , MATLAB, 17 linesget_mean_prediction.m - model_code/
stacked_models/ , MATLAB, 27 linesget_mean_score_predictio n.m - model_code/
stacked_models/ , MATLAB, 27 linesget_mode_prediction.m - model_code/
stacked_models/ , MATLAB, 31 linesrun_model_stacking.m - model_code/
stacked_models/ , MATLAB, 184 linesrun_stacked_cv.m - model_code/
stacked_models/ , MATLAB, 66 linesstack_class_models_and_r un_cv.m - model_code/
stacked_models/ , MATLAB, 75 linesstack_reg_models_and_run _cv.m - run_modeling_gui.m, MATLAB, 1,547 lines, 1 match
- run_stacking_gui.m, MATLAB, 548 lines
- tutorials/
independent_predictions/ , MATLAB, not shown herelogistic_ridge_predictio n_tutorial.mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereplsda_prediction_tutoria l.mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereplsr_prediction_tutorial .mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereridge_prediction_tutoria l.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_bmunz_lesion_tutori al.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_correlation_lesion_ tutorial.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_logistic_regression _lesion_tutorial.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_olsr_lesion_tutoria l.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_ttest_lesion_tutori al.mlx - tutorials/
mass_univariate/ , MATLAB, not shown hereprop_subtraction_lesion_ tutorial.mlx - tutorials/
model_stacking/ , MATLAB, not shown heremodel_stacking_tutorial_ classification.mlx - tutorials/
model_stacking/ , MATLAB, not shown heremodel_stacking_tutorial_ regression.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ class_ensemble_tutorial_ parcel_damage.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ kernsvc_lesion_tutorial. mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ linsvc_lesion_tutorial.m lx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ logistic_lasso_lesion_tu torial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ logistic_ridge_lesion_tu torial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_discon_tutorial.ml x - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_flnm_tutorial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_lesion_tutorial.ml x - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ rlinsvc_lesion_tutorial. mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herelasso_lesion_tutorial.ml x - tutorials/
multivariate_regression/ , MATLAB, not shown herelinsvr_lesion_tutorial.m lx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_disconnectome_tutor ial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_flnm_tutorial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_lesion_tutorial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hererbf_svr_lesion_tutorial. mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herereg_ensemble_tutorial_pa rcel_damage.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herereg_ensemble_tutorial_pa rcel_damage2.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereridge_lesion_tutorial.ml x - tutorials/
multivariate_regression/ , MATLAB, not shown hererlinsvr_lesion_tutorial. mlx - LICENSE, License, 674 lines
- README.md, Text, 12 lines
- README.txt, Text, 23 lines
jcgriffis/ibb_toolkit
389ea3e672a115ecc0532a212208ccdee0ad7ade, 31 August 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
184 files
- model_code/
common/ , MATLAB, 56 linescheck_and_fill_cfg_field s.m - model_code/
common/ , MATLAB, 86 linescrossval/ get_hp_opts.m - model_code/
common/ , MATLAB, 32 linescrossval/ get_train_test_splits.m - model_code/
common/ , MATLAB, 66 linescrossval/ perm_nested_cv.m - model_code/
common/ , MATLAB, 69 linescrossval/ perm_stacked_cv.m - model_code/
common/ , MATLAB, 112 linescrossval/ preallocate_cv_results.m - model_code/
common/ , MATLAB, 44 linescrossval/ preallocate_cv_results_p erm.m - model_code/
common/ , MATLAB, 61 linescrossval/ predict_new.m - model_code/
common/ , MATLAB, 37 linescrossval/ rescale_dataset.m - model_code/
common/ , MATLAB, 110 linescrossval/ run_nested_cv.m - model_code/
common/ , MATLAB, 143 linescrossval/ run_new_partition_cv.m - model_code/
common/ , MATLAB, 116 linescrossval/ run_pre_partitioned_cv.m - model_code/
common/ , MATLAB, 42 linescrossval/ summarize_cv_results.m - model_code/
common/ , MATLAB, 12 linesdata_io/ extract_upper_triangles. m - model_code/
common/ , MATLAB, 12 linesdata_io/ gen_node_file.m - model_code/
common/ , MATLAB, 79 linesdata_io/ get_and_format_array_dat a.m - model_code/
common/ , MATLAB, 53 linesdata_io/ get_and_format_array_dat a2.m - model_code/
common/ , MATLAB, 87 linesdata_io/ get_and_format_lesion_da ta.m - model_code/
common/ , MATLAB, 61 linesdata_io/ get_and_format_lesion_da ta2.m - model_code/
common/ , MATLAB, 88 linesdata_io/ get_and_format_matrix_da ta.m - model_code/
common/ , MATLAB, 58 linesdata_io/ get_and_format_matrix_da ta2.m - model_code/
common/ , MATLAB, 85 linesdata_io/ get_and_format_nifti_dat a.m - model_code/
common/ , MATLAB, 60 linesdata_io/ get_and_format_nifti_dat a2.m - model_code/
common/ , MATLAB, 50 linesdata_io/ get_and_format_table_dat a.m - model_code/
common/ , MATLAB, 46 linesdata_io/ get_behavior_data.m - model_code/
common/ , MATLAB, 77 linesdata_io/ get_lmwv.m - model_code/
common/ , MATLAB, 154 linesdata_io/ write_connectome_weights _mlsm.m - model_code/
common/ , MATLAB, 172 linesdata_io/ write_connectome_weights _ulsm.m - model_code/
common/ , MATLAB, 37 linesdata_io/ write_edge_file.m - model_code/
common/ , MATLAB, 180 linesdata_io/ write_mass_uni_weight_ma ps.m - model_code/
common/ , MATLAB, 180 linesdata_io/ write_mass_unicorr_weigh t_maps.m - model_code/
common/ , MATLAB, 211 linesdata_io/ write_mlsm_weight_maps.m - model_code/
common/ , MATLAB, 27 linesdata_io/ write_model_weight_maps. m - model_code/
common/ , MATLAB, 173 linesdata_io/ write_model_weight_maps_ anat_prior.m - model_code/
common/ , MATLAB, 14 linesdata_io/ write_model_weights_conn ectome.m - model_code/
common/ , MATLAB, 29 linesexplanatory/ boot/ get_boot_cis_cl.m - model_code/
common/ , MATLAB, 26 linesexplanatory/ boot/ get_boot_cis_reg.m - model_code/
common/ , MATLAB, 29 linesexplanatory/ boot/ get_boot_pvals_cl.m - model_code/
common/ , MATLAB, 30 linesexplanatory/ boot/ get_boot_pvals_reg.m - model_code/
common/ , MATLAB, 39 linesexplanatory/ boot/ get_boot_statistics.m - model_code/
common/ , MATLAB, 97 linesexplanatory/ boot/ get_bootstrap_cis.m - model_code/
common/ , MATLAB, 12 linesexplanatory/ boot/ get_ci_thresholded_betas .m - model_code/
common/ , MATLAB, 101 linesexplanatory/ boot/ run_bootstrap_models.m - model_code/
common/ , MATLAB, 176 linesexplanatory/ fit_explanatory_model.m - model_code/
common/ , MATLAB, 98 linesexplanatory/ jack/ run_jackknife_models.m - model_code/
common/ , MATLAB, 18 linesexplanatory/ perm/ get_perm_beta_pvals.m - model_code/
common/ , MATLAB, 14 linesexplanatory/ perm/ get_permutation_coeffici ent_pvalues.m - model_code/
common/ , MATLAB, 30 linesexplanatory/ perm/ get_permutation_results. m - model_code/
common/ , MATLAB, 21 linesexplanatory/ perm/ get_wholebrain_cfwe_thre sh.m - model_code/
common/ , MATLAB, 177 linesfit_and_evaluate_model.m - model_code/
common/ , MATLAB, 372 linesgen_methods_text.m - model_code/
common/ , MATLAB, 99 linesgen_results_text.m - model_code/
common/ , MATLAB, 357 linesget_default_model_cfg.m - model_code/
common/ , MATLAB, 34 linesget_model_option_list.m - model_code/
common/ , MATLAB, 13 lineslsm/ get_freq_map.m - model_code/
common/ , MATLAB, 29 lineslsm/ get_lvol_map.m - model_code/
common/ , MATLAB, 12 linesmodel_eval/ get_explained_variance.m - model_code/
common/ , MATLAB, 9 linesmodel_eval/ get_model_r2.m - model_code/
common/ , MATLAB, 9 linesmodel_eval/ get_model_r2_train.m - model_code/
common/ , MATLAB, 8 linesmodel_eval/ get_mse.m - model_code/
common/ , MATLAB, 14 linesmodel_eval/ get_optimal_threshold.m - model_code/
common/ , MATLAB, 15 linespreproc/ apply_dtlvc.m - model_code/
common/ , MATLAB, 46 linespreproc/ check_Y_data.m - model_code/
common/ , MATLAB, 44 linespreproc/ check_for_missing_data.m - model_code/
common/ , MATLAB, 27 linespreproc/ get_quartile_groups.m - model_code/
common/ , MATLAB, 12 linespreproc/ regress_confounds_from_X .m - model_code/
common/ , MATLAB, 12 linespreproc/ regress_confounds_from_X _cv.m - model_code/
common/ , MATLAB, 16 linespreproc/ regress_confounds_from_Y .m - model_code/
common/ , MATLAB, 10 linespreproc/ trim_X_data.m - model_code/
common/ , MATLAB, 52 linespreproc/ trim_input_data.m - model_code/
common/ , MATLAB, 21 linesrestore_model_path.m - model_code/
common/ , MATLAB, 118 linesstats/ bonf_holm.m - model_code/
ensemble/ , MATLAB, 97 lines, 1 matchrun_censemble_modeling.m - model_code/
ensemble/ , MATLAB, 90 linesrun_censemble_modeling_c v.m - model_code/
ensemble/ , MATLAB, 77 linesrun_rensemble_modeling.m - model_code/
ensemble/ , MATLAB, 77 linesrun_rensemble_modeling_c v.m - model_code/
mass_univariate/ , MATLAB, 113 linesapproxbrunnermunzel.m - model_code/
mass_univariate/ , MATLAB, 163 linesbrunner_munzel.m - model_code/
mass_univariate/ , MATLAB, 34 linesget_bootstrapped_cis_mun icorr.m - model_code/
mass_univariate/ , MATLAB, 52 linesget_bootstrapped_cis_mun ilr.m - model_code/
mass_univariate/ , MATLAB, 81 linesrun_brunner_munzel_test. m - model_code/
mass_univariate/ , MATLAB, 43 linesrun_mass_univariate_corr .m - model_code/
mass_univariate/ , MATLAB, 68 linesrun_mass_univariate_corr _int.m - model_code/
mass_univariate/ , MATLAB, 51 linesrun_mass_univariate_lr.m - model_code/
mass_univariate/ , MATLAB, 50 linesrun_mass_univariate_lr_i nt.m - model_code/
mass_univariate/ , MATLAB, 72 linesrun_mass_univariate_mnr. m - model_code/
mass_univariate/ , MATLAB, 73 linesrun_mass_univariate_mnr_ int.m - model_code/
mass_univariate/ , MATLAB, 41 linesrun_mass_univariate_olsr .m - model_code/
mass_univariate/ , MATLAB, 42 linesrun_mass_univariate_olsr _int.m - model_code/
mass_univariate/ , MATLAB, 29 linesrun_ols_modeling.m - model_code/
mass_univariate/ , MATLAB, 46 linesrun_ols_modeling_cv.m - model_code/
mass_univariate/ , MATLAB, 83 linesrun_perm_mass_uni_corr.m - model_code/
mass_univariate/ , MATLAB, 66 linesrun_perm_mass_uni_corr_i nt.m - model_code/
mass_univariate/ , MATLAB, 77 linesrun_perm_mass_uni_lr.m - model_code/
mass_univariate/ , MATLAB, 78 linesrun_perm_mass_uni_lr_int .m - model_code/
mass_univariate/ , MATLAB, 92 linesrun_perm_mass_uni_mnr.m - model_code/
mass_univariate/ , MATLAB, 93 linesrun_perm_mass_uni_mnr_in t.m - model_code/
mass_univariate/ , MATLAB, 69 linesrun_perm_mass_uni_olsr.m - model_code/
mass_univariate/ , MATLAB, 69 linesrun_perm_mass_uni_olsr_i nt.m - model_code/
mass_univariate/ , MATLAB, 59 linesrun_proportional_subtrac tion.m - model_code/
mass_univariate/ , MATLAB, 119 linesrun_ttests.m - model_code/
nlinsvr/ , MATLAB, 48 linesget_svr_hp_opts.m - model_code/
nlinsvr/ , MATLAB, 67 linesrun_boot_svc.m - model_code/
nlinsvr/ , MATLAB, 51 linesrun_boot_svr.m - model_code/
nlinsvr/ , MATLAB, 52 linesrun_bootstrap_svc.m - model_code/
nlinsvr/ , MATLAB, 42 linesrun_bootstrap_svr.m - model_code/
nlinsvr/ , MATLAB, 121 linesrun_perm_svc.m - model_code/
nlinsvr/ , MATLAB, 126 linesrun_perm_svr.m - model_code/
nlinsvr/ , MATLAB, 139 linesrun_svc_modeling.m - model_code/
nlinsvr/ , MATLAB, 130 linesrun_svc_modeling_cv.m - model_code/
nlinsvr/ , MATLAB, 120 linesrun_svr_modeling.m - model_code/
nlinsvr/ , MATLAB, 120 linesrun_svr_modeling_cv.m - model_code/
plsr/ , MATLAB, 38 linesfitplsda.m - model_code/
plsr/ , MATLAB, 20 linesfitplsrm.m - model_code/
plsr/ , MATLAB, 11 linesget_ci_thresholded_vips. m - model_code/
plsr/ , MATLAB, 41 linesrun_boot_plsda.m - model_code/
plsr/ , MATLAB, 32 linesrun_boot_plsr.m - model_code/
plsr/ , MATLAB, 36 linesrun_bootstrap_plsda.m - model_code/
plsr/ , MATLAB, 35 linesrun_bootstrap_plsr.m - model_code/
plsr/ , MATLAB, 135 linesrun_kfold_plsr.m - model_code/
plsr/ , MATLAB, 37 linesrun_loocv_plsr.m - model_code/
plsr/ , MATLAB, 90 linesrun_perm_plsda.m - model_code/
plsr/ , MATLAB, 96 linesrun_perm_plsr.m - model_code/
plsr/ , MATLAB, 46 linesrun_plsda_modeling.m - model_code/
plsr/ , MATLAB, 63 linesrun_plsda_modeling_cv.m - model_code/
plsr/ , MATLAB, 64 linesrun_plsr_modeling.m - model_code/
plsr/ , MATLAB, 65 linesrun_plsr_modeling_cv.m - model_code/
reglm/ , MATLAB, 118 linesget_regmdl_hp_opts.m - model_code/
reglm/ , MATLAB, 63 linesrun_boot_classmdl.m - model_code/
reglm/ , MATLAB, 45 linesrun_boot_regmdl.m - model_code/
reglm/ , MATLAB, 47 linesrun_bootstrap_class_line ar.m - model_code/
reglm/ , MATLAB, 45 linesrun_bootstrap_reg_linear .m - model_code/
reglm/ , MATLAB, 164 linesrun_class_linear_modelin g.m - model_code/
reglm/ , MATLAB, 153 linesrun_class_linear_modelin g_cv.m - model_code/
reglm/ , MATLAB, 98 linesrun_perm_classlm.m - model_code/
reglm/ , MATLAB, 111 linesrun_perm_reglm.m - model_code/
reglm/ , MATLAB, 143 linesrun_reg_linear_modeling. m - model_code/
reglm/ , MATLAB, 150 linesrun_reg_linear_modeling_ cv.m - model_code/
stacked_models/ , MATLAB, 136 linescreate_stacked_models.m - model_code/
stacked_models/ , MATLAB, 155 linescreate_stacked_reg_model s.m - model_code/
stacked_models/ , MATLAB, 225 linesget_default_stack_cfg.m - model_code/
stacked_models/ , MATLAB, 17 linesget_mean_prediction.m - model_code/
stacked_models/ , MATLAB, 27 linesget_mean_score_predictio n.m - model_code/
stacked_models/ , MATLAB, 27 linesget_mode_prediction.m - model_code/
stacked_models/ , MATLAB, 83 linesrun_model_stacking.m - model_code/
stacked_models/ , MATLAB, 172 linesrun_stacked_cv.m - model_code/
stacked_models/ , MATLAB, 70 linesstack_class_models_and_r un_cv.m - model_code/
stacked_models/ , MATLAB, 78 linesstack_reg_models_and_run _cv.m - run_modeling_gui.m, MATLAB, 1,699 lines, 1 match
- run_stacking_gui.m, MATLAB, 548 lines
- tutorials/
independent_predictions/ , MATLAB, not shown herelogistic_ridge_predictio n_tutorial.mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereplsda_prediction_tutoria l.mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereplsr_prediction_tutorial .mlx - tutorials/
independent_predictions/ , MATLAB, not shown hereridge_prediction_tutoria l.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_bmunz_lesion_tutori al.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_correlation_lesion_ tutorial.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_logistic_regression _lesion_tutorial.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_olsr_lesion_tutoria l.mlx - tutorials/
mass_univariate/ , MATLAB, not shown heremass_ttest_lesion_tutori al.mlx - tutorials/
mass_univariate/ , MATLAB, not shown hereprop_subtraction_lesion_ tutorial.mlx - tutorials/
model_stacking/ , MATLAB, not shown heremodel_stacking_tutorial_ classification.mlx - tutorials/
model_stacking/ , MATLAB, not shown heremodel_stacking_tutorial_ regression.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ class_ensemble_tutorial_ parcel_damage.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ kernsvc_lesion_tutorial. mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ linsvc_lesion_tutorial.m lx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ logistic_lasso_lesion_tu torial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ logistic_ridge_lesion_tu torial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_discon_tutorial.ml x - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_flnm_tutorial.mlx - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ plsda_lesion_tutorial.ml x - tutorials/
multivariate_classificat , MATLAB, not shown hereion/ rlinsvc_lesion_tutorial. mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herelasso_lesion_tutorial.ml x - tutorials/
multivariate_regression/ , MATLAB, not shown herelinsvr_lesion_tutorial.m lx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_disconnectome_tutor ial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_flnm_tutorial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereplsr_lesion_tutorial.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hererbf_svr_lesion_tutorial. mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herereg_ensemble_tutorial_pa rcel_damage.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown herereg_ensemble_tutorial_pa rcel_damage2.mlx - tutorials/
multivariate_regression/ , MATLAB, not shown hereridge_lesion_tutorial.ml x - tutorials/
multivariate_regression/ , MATLAB, not shown hererlinsvr_lesion_tutorial. mlx - LICENSE, License, 674 lines
- README.md, Text, 12 lines
- README.txt, Text, 23 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 3 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 353 scripts, each with its path and the digest of its content;
- 4 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data availability
The software used for lesion modeling can be downloaded at the provided URL. Deidentified data from this study may be made available upon reasonable request to the corresponding author, subject to a data use agreement ensuring compliance with human subjects ethical standards. Trained machine learning models for outcome prediction may be shared, subject to a proper software use agreement protecting intellectual property rights. The IBB toolkit version used for training and evaluating the cognitive outcome-prediction models is archived along with the notebooks used for generating the outcome-prediction figures here: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 28 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 4 keywords, 4 funders, 71 references.
Cite
This paper
Brzus, M., Griffis, J., Riley, C. J., Bruss, J., Shea, C., Johnson, H. J., & Boes, A. D. (2026). A clinical neuroimaging platform for rapid, automated lesion detection and personalized post-stroke outcome prediction. NPJ digital medicine, 9(1), 646. https://
BibTeX
@article{brzus2026clinic
author = {Brzus, Michal and Griffis, Joseph and Riley, Cavan J and Bruss, Joel and Shea, Carrie and Johnson, Hans J and Boes, Aaron D},
title = {{A clinical neuroimaging platform for rapid, automated lesion detection and personalized post-stroke outcome prediction}},
journal = {NPJ digital medicine},
year = {2026},
month = may,
volume = {9},
number = {1},
pages = {646},
publisher = {Nature Publishing Group},
issn = {2398-6352},
doi = {10.1038/
url = {https://
pmid = {42204350},
pmcid = {PMC13493867}
}
RIS
TY - JOUR
AU - Brzus, Michal
AU - Griffis, Joseph
AU - Riley, Cavan J
AU - Bruss, Joel
AU - Shea, Carrie
AU - Johnson, Hans J
AU - Boes, Aaron D
TI - A clinical neuroimaging platform for rapid, automated lesion detection and personalized post-stroke outcome prediction
T2 - NPJ digital medicine
J2 - NPJ Digit Med
PY - 2026
DA - 2026/
VL - 9
IS - 1
SP - 646
SN - 2398-6352
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "A clinical neuroimaging platform for rapid, automated lesion detection and personalized post-stroke outcome prediction",
"container-title": "NPJ digital medicine",
"author": [
{
"family": "Brzus",
"given": "Michal"
},
{
"family": "Griffis",
"given": "Joseph"
},
{
"family": "Riley",
"given": "Cavan J"
},
{
"family": "Bruss",
"given": "Joel"
},
{
"family": "Shea",
"given": "Carrie"
},
{
"family": "Johnson",
"given": "Hans J"
},
{
"family": "Boes",
"given": "Aaron D"
}
],
"container-title-short":
"volume": "9",
"issue": "1",
"page": "646",
"DOI": "10.1038/
"PMID": "42204350",
"PMCID": "PMC13493867",
"ISSN": "2398-6352",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
27
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s41586-026-10631-3 [code]
- A prognostic human brain network for diffuse midline glioma.Journal: NatureIn common: Tools for NIfTI and ANALYZE image (MATLAB), Nilearn, Image Processing Toolbox, 4 other tools, clinical / translational, 4 references
- [2] doi:10.1002/cns.71114 [code]
- Dynamic Functional Connectivity Changes in Cortical and Cortico-Striatal Strokes in Mice.Journal: CNS neuroscience & therapeuticsIn common: Tools for NIfTI and ANALYZE image (MATLAB), NiBabel, pandas, 1 other tool, stroke, 5 references
- [3] doi:10.64898/2026.05.12.26353056 [code]
- Neuroimaging and behavioural biomarkers of post-stroke cognitive recovery outcomesJournal: medRxiv (preprint)In common: stroke, clinical / translational, 6 references
- [4] doi:10.1016/j.nicl.2026.104052 [code]
- Beyond one-to-one mappings: Modelling distributed lesion-symptom relationships with multilayer networks.Journal: NeuroImage. ClinicalIn common: pandas, NumPy, clinical / translational, 5 references
- [5] doi:10.1002/hbm.70602 [code]
- Neuroimaging Correlates of Post-Stroke Pain After Ischemic Stroke: Secondary Analysis of the INSPiRE-TMS Trial.Journal: Human brain mappingIn common: Tools for NIfTI and ANALYZE image (MATLAB), Image Processing Toolbox, NiBabel, 3 other tools, stroke, clinical / translational, 1 reference
- [6] doi:10.1016/j.xcrm.2026.102943 [code]
- Parent-of-origin effects in Alzheimer's liability dissociate neurocognitive and cardiovascular traits in at-risk individuals.Journal: Cell reports. MedicineIn common: Tools for NIfTI and ANALYZE image (MATLAB), Nilearn, Image Processing Toolbox, 4 other tools, clinical / translational
- [7] doi:10.1371/journal.pbio.3003856 [code]
- Aging and metabolism contribute separately to brain-body health.Journal: PLoS biologyIn common: Tools for NIfTI and ANALYZE image (MATLAB), Nilearn, Image Processing Toolbox, 4 other tools, clinical / translational
- [8] doi:10.1002/ana.78206 [code]
- Multimodal Image Guidance in Subthalamic Deep Brain Stimulation for Parkinson's Disease.Journal: Annals of neurologyIn common: Tools for NIfTI and ANALYZE image (MATLAB), Image Processing Toolbox, NiBabel, 3 other tools, clinical / translational, 1 reference
- [9] doi:10.1038/s41467-026-76452-0 [code]
- Music evokes shared neural representations of imagined narratives across sensory modalities.Journal: Nature communicationsIn common: Tools for NIfTI and ANALYZE image (MATLAB), Nilearn, Image Processing Toolbox, 4 other tools
- [10] doi:10.1016/j.isci.2026.116900 [code]
- Dog brain representations of human facial expressions: Encoding happiness and differentiating specific negative expressions.Journal: iScienceIn common: Tools for NIfTI and ANALYZE image (MATLAB), Nilearn, Image Processing Toolbox, 4 other tools
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 3 repositories of the authors' code, each at its verified commit and with its license, 353 scripts, and 4 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:5888560b4bffff1f…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
