6161 % ranking_statistic [String]: Test statistic that will be used in ranking
6262
6363 import nla.TriMatrix nla.TriMatrixDiag
64+ if nargin == 0
65+ return
66+ end
6467
6568 if nargin == 6
6669 obj.test_name = test_name ;
@@ -187,17 +190,6 @@ function runDiagnosticPlots(obj, edge_test_options, updated_test_options, edge_t
187190 )];
188191 end
189192
190- function previous_result_data = loadPreviousData(obj , file )
191- try
192- results_file = load(file );
193- if isa(results_file .results , ' nla.ResultPool' ) && ~(isfield(results_file .results_as_struct , ' net_atlas' ) && isfield(results_file .results_as_struct , ' input_struct' ))
194- previous_result_data = results_file .results ;
195- end
196- catch
197-
198- end
199- end
200-
201193 %%
202194 % getters for dependent properties
203195 function value = get .permutation_count(obj )
@@ -217,6 +209,12 @@ function runDiagnosticPlots(obj, edge_test_options, updated_test_options, edge_t
217209 % Convenience method to determine if inputs were correlation coefficients, or "significance" values
218210 value = any(strcmp(obj .noncorrelation_input_tests , obj .test_name ));
219211 end
212+
213+ function set .is_noncorrelation_input(obj , ~)
214+ end
215+
216+ function set .permutation_count(obj , ~)
217+ end
220218 %%
221219 end
222220
@@ -343,20 +341,24 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
343341 end
344342 end
345343
346- function converted_data_struct = loadOldVersionData(results_struct )
347- import nla.net.test.results. NetworkTestResult, nla.TriMatrix, nla.TriMatrixDiag
344+ function converted_data_struct = loadOldVersionData(result_struct )
345+ import nla.net.result. NetworkTestResult nla.TriMatrix nla.TriMatrixDiag nla.NetworkAtlas
348346
349- number_of_results = numel(results_struct .net_results );
347+ number_of_results = numel(result_struct .net_results );
350348 test_options = result_struct .input_struct ;
351349
352350 network_test_options = result_struct .net_input_struct ;
353351 network_test_options.ranking_method = " Uncorrected" ;
354- network_test_options.no_permutations = result_struct .nonpermuted ;
355- network_test_options.full_connectome = result_struct .full_conn ;
356- network_test_options.within_network_pair = result_struct . show_within_net_pair ;
352+ network_test_options.no_permutations = network_test_options .nonpermuted ;
353+ network_test_options.full_connectome = network_test_options .full_conn ;
354+ network_test_options.within_network_pair = network_test_options . within_net_pair ;
357355 network_test_options = rmfield(network_test_options , [" nonpermuted" , " full_conn" , " within_net_pair" ]);
358356
359- network_atlas = result_struct .net_atlas ;
357+ network_atlas = NetworkAtlas();
358+ fields = fieldnames(result_struct .net_atlas );
359+ for field_index = 1 : numel(fields )
360+ network_atlas.(fields{field_index }) = result_struct .net_atlas.(fields{field_index });
361+ end
360362 number_of_networks = network_atlas .numNets();
361363
362364 converted_data_struct = struct(...
@@ -368,9 +370,13 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
368370 ' commit' , result_struct .commit ,...
369371 ' commit_short' , result_struct .commit_short ...
370372 );
373+
374+ converted_data_struct.permutation_network_test_results = {};
375+ d = false ;
376+ single_sample_d = false ;
371377
372- for result_number = number_of_results
373- switch results_struct .perm_net_results{result_number }.name
378+ for result_number = 1 : number_of_results
379+ switch result_struct .perm_net_results{result_number }.name
374380 case " Chi-Squared"
375381 test_name = " chi_squared" ;
376382 test_display_name = " Chi-Squared" ;
@@ -401,46 +407,113 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
401407 test_display_name = " Wilcoxon Rank Sum" ;
402408 ranking_statistic = " z_statistic" ;
403409 is_noncorrelation_input = 0 ;
410+ case " Cohen's D"
411+ d = TriMatrix(number_of_networks , TriMatrixDiag .KEEP_DIAGONAL );
412+ d.v = result_struct.perm_net_results{result_number }.d.v;
413+ single_sample_d = TriMatrix(number_of_networks , TriMatrixDiag .KEEP_DIAGONAL );
414+ single_sample_d.v = result_struct.perm_net_results{result_number }.within_np_d.v;
404415 end
405416 new_results_struct = struct(...
406- " test_name" , test_name ,...
417+ ' test_name' , test_name ,...
407418 " test_display_name" , test_display_name ,...
408419 " ranking_statistic" , ranking_statistic ,...
409420 " is_noncorrelation_input" , is_noncorrelation_input ,...
410- " permutation_count" , results_struct .perm_net_results{result_number }.perm_count,...
411- " network_test_results " , {} ...
421+ " permutation_count" , result_struct .perm_net_results{result_number }.perm_count,...
422+ " test_options " , test_options ...
412423 );
413- test_methods = [];
414424 no_permutation = struct();
415425 full_connectome = struct();
416426 within_network_pair = struct();
417- if results_struct.perm_net_results{result_number }.has_nonpermuted
418- test_methods = [test_methods " no_permutations" ];
427+ if result_struct.perm_net_results{result_number }.has_nonpermuted
419428 no_permutation.uncorrected_single_sample_p_value = TriMatrix(number_of_networks , TriMatrixDiag .KEEP_DIAGONAL );
420- no_permutation.uncorrected_single_sample_p_value.v = results_struct .perm_net_results{result_number }.prob.v;
429+ no_permutation.uncorrected_single_sample_p_value.v = result_struct .perm_net_results{result_number }.prob.v;
421430 end
422- if results_struct .perm_net_results .has_full_conn
423- test_methods = [test_methods " full_connectome" ];
431+ if result_struct.perm_net_results{result_number }.has_full_conn
432+ if ~isequal(d , false )
433+ full_connectome.d = d ;
434+ end
424435 full_connectome.uncorrected_two_sample_p_value = TriMatrix(number_of_networks , TriMatrixDiag .KEEP_DIAGONAL );
425- full_connectome.uncorrected_two_sample_p_value.v = results_struct .perm_net_results{result_number }.perm_prob.v;
436+ full_connectome.uncorrected_two_sample_p_value.v = result_struct .perm_net_results{result_number }.perm_prob.v;
426437 end
427- if results_struct .perm_net_results .has_within_net_pair
428- test_methods = [test_methods " within_network_pair" ];
438+ if result_struct.perm_net_results{result_number }.has_within_net_pair
439+ if ~isequal(single_sample_d , false )
440+ within_network_pair.single_sample_d = single_sample_d ;
441+ end
429442 within_network_pair.uncorrected_single_sample_p_value = TriMatrix(number_of_networks , TriMatrixDiag .KEEP_DIAGONAL );
430- within_network_pair.uncorrected_single_sample_p_value.v = results_struct .perm_net_results{result_number }.within_np_prob.v;
443+ within_network_pair.uncorrected_single_sample_p_value.v = result_struct .perm_net_results{result_number }.within_np_prob.v;
431444 end
432- new_results_struct.test_methods = test_methods ;
433- new_results_struct.test_options = test_options ;
434-
435- permutation_network_test_results = {...
436- " no_permutation" , no_permutations ,...
437- " full_connectome" , full_connectome ,...
438- " within_network_pair" , within_network_pair ,...
439- " test_methods" , test_methods ,...
440- " test_options" , test_options ...
441- };
442- new_results_struct.permutation_network_test_results = permutation_network_test_results ;
445+ new_results_struct.no_permutation = no_permutation ;
446+ new_results_struct.full_connectome = full_connectome ;
447+ new_results_struct.within_network_pair = within_network_pair ;
448+ converted_data_struct.permutation_network_test_results = [converted_data_struct .permutation_network_test_results new_results_struct ];
443449 end
444450 end
451+
452+ function [previous_result_data , old_data ] = loadPreviousData(file )
453+ import nla .net .result .NetworkTestResult
454+
455+ try
456+ results_file = load(file );
457+
458+ % This shouldn't happen, but just in case...
459+ if isa(results_file .results , ' nla.ResultPool' ) && ~(isfield(results_file .results_as_struct , ' net_atlas' ) && isfield(results_file .results_as_struct , ' input_struct' ))
460+ previous_result_data = results_file .results ;
461+ old_data = false ;
462+ else
463+
464+ % Turn off some warnings we know are going to trigger with old results
465+ warning(' off' , ' MATLAB:class:EnumerationNameMissing' );
466+ warning(' off' , ' MATLAB:load:classNotFound' );
467+ previous_result_struct = NetworkTestResult().loadOldVersionData(results_file .results_as_struct );
468+ previous_result_struct_edge_class = NetworkTestResult().edgeResultsStructToClasses(previous_result_struct );
469+ previous_result_struct_class = NetworkTestResult().permutationResultsStructToClasses(previous_result_struct_edge_class );
470+ previous_result_data = nla .ResultPool();
471+ props = properties(previous_result_data );
472+ for prop = 1 : numel(props )
473+ if isfield(previous_result_struct_class , props{prop })
474+ previous_result_data.(props{prop }) = previous_result_struct_class.(props{prop });
475+ end
476+ end
477+ old_data = true ;
478+ end
479+ catch
480+ error(" Failure to load results file" );
481+ end
482+ warning(' on' , ' MATLAB:class:EnumerationNameMissing' );
483+ warning(' on' , ' MATLAB:load:classNotFound' );
484+ end
485+
486+ function class_results = permutationResultsStructToClasses(structure_in )
487+ new_network_results = cell(1 ,numel(structure_in .permutation_network_test_results ));
488+ for result = 1 : numel(structure_in .permutation_network_test_results )
489+ network_result = nla .net .result .NetworkTestResult();
490+ fields = fieldnames(network_result );
491+ for field_index = 1 : numel(fields )
492+ if isfield(structure_in.permutation_network_test_results{result }, (fields{field_index })) && ~isequal(fields{field_index }, " test_methods" )
493+ network_result.(fields{field_index }) = structure_in.permutation_network_test_results{result }.(fields{field_index });
494+ end
495+ end
496+ new_network_results{result } = network_result ;
497+ end
498+ structure_in.permutation_network_test_results = new_network_results ;
499+ class_results = structure_in ;
500+ end
501+
502+ function class_results = edgeResultsStructToClasses(structure_in )
503+ edge_result = nla .edge .result .Base();
504+ fields = fieldnames(edge_result );
505+ for field_index = 1 : numel(fields )
506+ if isfield(structure_in .edge_test_results , fields{field_index })
507+ if isequal(fields{field_index }, " coeff" ) || isequal(fields{field_index }, " prob" ) || isequal(fields{field_index }, " prob_sig" )
508+ edge_result.(fields{field_index }) = nla .TriMatrix(structure_in .edge_test_results .coeff .size , nla .TriMatrixDiag .KEEP_DIAGONAL );
509+ edge_result.(fields{field_index }).v = structure_in .edge_test_results.(fields{field_index }).v;
510+ else
511+ edge_result.(fields{field_index }) = structure_in .edge_test_results.(fields{field_index });
512+ end
513+ end
514+ end
515+ structure_in.edge_test_results = edge_result ;
516+ class_results = structure_in ;
517+ end
445518 end
446519end
0 commit comments