-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathC5_Permuting_all_classifciation_windows.m
145 lines (139 loc) · 9.56 KB
/
C5_Permuting_all_classifciation_windows.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
% This code shuffles contact labels and recalcualtes the classification
% performance (AUCs) 1000 times to generate the null distribution for statistical
% inference: this was done for all of the six classifications we performed including
% Within-patient classification (interictal and ictal)
% Across-patient generalisation (interictal and ictal)
% Across-time generalisation (interictal to ictal and vice versa)]
% INPUTS: classification data from C5_Permuting_all_classifciation_windows
% OUTPUTS: classification data + random data to be plotted by C6_Plotting_classification_and_feature_importance
%%
clc;
clear all;
close all;
%% 1 and 2: within-patient classification
ictal_or_inter='interictal';
load(['Within_subject_performance_sepnorm',ictal_or_inter,'_all_feats_crcted_feats_imp_100_10.mat'])
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for fld=1:size(Ground_truth,5) % folds
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_within_inter(ff,iter_equalis,p,iter_rand,fld,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions{ff,iter_equalis,p,iter_rand,fld});
[~,~,~,Performance_within_inter(ff,iter_equalis,p,iter_rand,fld,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions{ff,iter_equalis,p,iter_rand,fld},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,fld},length(Predictions{ff,iter_equalis,p,iter_rand,fld}));
Performance_rand_within_inter(ff,iter_equalis,p,iter_rand,fld,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions_tmp);
[~,~,~,Performance_rand_within_inter(ff,iter_equalis,p,iter_rand,fld,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions_tmp,1);
end
end
end
[fld]
end
Performance_within_inter=squeeze(nanmean(nanmean(Performance_within_inter),5));
Performance_rand_within_inter=squeeze(nanmean(nanmean(Performance_rand_within_inter),5));
[1]
ictal_or_inter='ictal';
load(['Within_subject_performance_sepnorm',ictal_or_inter,'_all_feats_crcted_feats_imp_100_10.mat'])
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for fld=1:size(Ground_truth,5) % folds
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_within_ictal(ff,iter_equalis,p,iter_rand,fld,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions{ff,iter_equalis,p,iter_rand,fld});
[~,~,~,Performance_within_ictal(ff,iter_equalis,p,iter_rand,fld,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions{ff,iter_equalis,p,iter_rand,fld},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,fld},length(Predictions{ff,iter_equalis,p,iter_rand,fld}));
Performance_rand_within_ictal(ff,iter_equalis,p,iter_rand,fld,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions_tmp);
[~,~,~,Performance_rand_within_ictal(ff,iter_equalis,p,iter_rand,fld,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand,fld},Predictions_tmp,1);
end
end
end
[fld]
end
Performance_within_ictal=squeeze(nanmean(nanmean(Performance_within_ictal),5));
Performance_rand_within_ictal=squeeze(nanmean(nanmean(Performance_rand_within_ictal),5));
[2]
%% 3 and 4: across-patient generalisation
ictal_or_inter='interictal';
load(['Generalisation_performance_across_subjects_',ictal_or_inter,'_all_feats_comb_crcted_feats_ovrsmp_imp_100_10.mat'])
classif=1; % 1= decision-tree classification
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_acrss_subj_inter(ff,iter_equalis,p,iter_rand,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif});
[~,~,~,Performance_acrss_subj_inter(ff,iter_equalis,p,iter_rand,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,classif},length(Predictions{ff,iter_equalis,p,iter_rand,classif}));
Performance_rand_acrss_subj_inter(ff,iter_equalis,p,iter_rand,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp);
[~,~,~,Performance_rand_acrss_subj_inter(ff,iter_equalis,p,iter_rand,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp,1);
end
end
end
Performance_acrss_subj_inter=squeeze(Performance_acrss_subj_inter);
Performance_rand_acrss_subj_inter=squeeze(Performance_rand_acrss_subj_inter);
[3]
ictal_or_inter='ictal';
load(['Generalisation_performance_across_subjects_',ictal_or_inter,'_all_feats_comb_crcted_feats_ovrsmp_imp_100_10.mat'])
classif=1; % 1= decision-tree classification
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_acrss_subj_ictal(ff,iter_equalis,p,iter_rand,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif});
[~,~,~,Performance_acrss_subj_ictal(ff,iter_equalis,p,iter_rand,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,classif},length(Predictions{ff,iter_equalis,p,iter_rand,classif}));
Performance_rand_acrss_subj_ictal(ff,iter_equalis,p,iter_rand,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp);
[~,~,~,Performance_rand_acrss_subj_ictal(ff,iter_equalis,p,iter_rand,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp,1);
end
end
end
Performance_acrss_subj_ictal=squeeze(Performance_acrss_subj_ictal);
Performance_rand_acrss_subj_ictal=squeeze(Performance_rand_acrss_subj_ictal);
[4]
%% 5 and 6: across-time generalisation
load(['Generalisation_performance_across_time_all_feats_comb_crcted_feats_ovrsmp_imp_100_10.mat'])
classif=1; % 1= decision-tree classification
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_acrss_time_inter(ff,iter_equalis,p,iter_rand,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif});
[~,~,~,Performance_acrss_time_inter(ff,iter_equalis,p,iter_rand,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,classif},length(Predictions{ff,iter_equalis,p,iter_rand,classif}));
Performance_rand_acrss_time_inter(ff,iter_equalis,p,iter_rand,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp);
[~,~,~,Performance_rand_acrss_time_inter(ff,iter_equalis,p,iter_rand,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp,1);
end
end
end
Performance_acrss_time_inter=squeeze(Performance_acrss_time_inter);
Performance_rand_acrss_time_inter=squeeze(Performance_rand_acrss_time_inter);
[5]
load(['Generalisation_performance_across_time_ict_to_int_all_feats_comb_crcted_feats_ovrsmp_imp_100_10.mat'])
classif=1; % 1= decision-tree classification
ff=1; % 1= all feaures included
iter_rand=1; % 1= number of iterations
for iter_equalis=1:size(Ground_truth,2) % iterations
for p=1:size(Ground_truth,3) % patients
Performance_acrss_time_ictal(ff,iter_equalis,p,iter_rand,1:7)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif});
[~,~,~,Performance_acrss_time_ictal(ff,iter_equalis,p,iter_rand,8)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions{ff,iter_equalis,p,iter_rand,classif},1);
for rep=1:1000 % repititions
Predictions_tmp=randsample(Predictions{ff,iter_equalis,p,iter_rand,classif},length(Predictions{ff,iter_equalis,p,iter_rand,classif}));
Performance_rand_acrss_time_ictal(ff,iter_equalis,p,iter_rand,1:7,rep)=Evaluate(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp);
[~,~,~,Performance_rand_acrss_time_ictal(ff,iter_equalis,p,iter_rand,8,rep)]=perfcurve(Ground_truth{ff,iter_equalis,p,iter_rand},Predictions_tmp,1);
end
end
end
Performance_acrss_time_ictal=squeeze(Performance_acrss_time_ictal);
Performance_rand_acrss_time_ictal=squeeze(Performance_rand_acrss_time_ictal);
[6]
%% Saving the data and the permuted null data for all 6 classifications
save('random_permutations.mat',...
'Performance_acrss_subj_ictal','Performance_acrss_subj_inter',...
'Performance_acrss_time_ictal','Performance_acrss_time_inter',...
'Performance_rand_acrss_subj_ictal','Performance_rand_acrss_subj_inter',...
'Performance_rand_acrss_time_ictal','Performance_rand_acrss_time_inter',...
'Performance_rand_within_ictal','Performance_rand_within_inter',...
'Performance_within_ictal','Performance_within_inter','-v7.3')