-
Notifications
You must be signed in to change notification settings - Fork 0
/
support_PlotDynBLCorrMap.m
181 lines (138 loc) · 8.11 KB
/
support_PlotDynBLCorrMap.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
function support_PlotDynBLCorrMap(TEPREveryParticipant, Config, Meta)
% NOTE: Not intended to be used for p-hacking. This is for exporatory
% data-driven analyses, mainly to help develop better feature extraction
% methods for machine learning, for use in between-subjects regression
dv_cols = [Config.DynBLCorrMap.DVFrom Config.DynBLCorrMap.DVTo];
T = readtable(Config.DynBLCorrMap.BehavDF);
num_dv = (dv_cols(2)-dv_cols(1)+1);
for dv = 1:num_dv % cycle through dependent variable
ErrorsEnc = false;
if Config.DynBLCorrMap.SmallOrLarge
hmat = Config.AnalyzeLenSample;
wmat = Config.AnalyzeLenSample;
blFrom = 1;
cTo = Config.AnalyzeLenSample;
else
hmat = ceil(1.5 *Config.AnalyzeLenSample);
wmat = ceil(1.5 *Config.AnalyzeLenSample);
blFrom = (1 -ceil(Config.AnalyzeLenSample/2));
cTo = (Config.AnalyzeLenSample +ceil(Config.AnalyzeLenSample/2));
end
correl_map_rho = NaN(hmat, wmat);
correl_map_pval = NaN(hmat, wmat);
for blAt = blFrom:Config.AnalyzeLenSample % loop to change baseline sample index
% for blAt = 1:(Config.AnalyzeLenSample +ceil(Config.AnalyzeLenSample/2)) % loop to change baseline sample index
singleMapTic = tic;
for cAt = 1:cTo
% skip trivial (repeating) correlations of:
% lower left triangle
% upper left triangle
% upper right triangle
% lower right triangle
if (cAt < ceil(Config.AnalyzeLenSample/2) && blAt+cAt < 1 ) || ...
(blAt > cAt) || ...
(blAt > ceil(Config.AnalyzeLenSample/2) && blAt + cAt > 2*Config.AnalyzeLenSample) || ...
(cAt > blAt + Config.AnalyzeLenSample )
continue;
end
subtractFrom = cAt;
subtractVal = blAt;
if subtractFrom < 1
subtractFrom = subtractFrom + Config.AnalyzeLenSample;
end
if subtractVal < 1
subtractVal = subtractVal + Config.AnalyzeLenSample;
end
if subtractFrom > Config.AnalyzeLenSample
subtractFrom = subtractFrom - Config.AnalyzeLenSample;
end
if subtractVal > Config.AnalyzeLenSample
subtractVal = subtractVal - Config.AnalyzeLenSample;
end
statAtDelta = ...
TEPREveryParticipant(:, subtractFrom ) - ...
TEPREveryParticipant(:, subtractVal );
try
[RHO,PVAL] = corr(T{:,(dv_cols(1)+dv-1)}, statAtDelta, 'Type', Config.DynBLCorrMap.CorrelMethod, 'rows','complete'); % omits NaN
catch ME
ErrorsEnc = true;
RHO = NaN; PVAL = NaN;
end
correl_map_rho(blAt -blFrom+1, cAt) = RHO;
correl_map_pval(blAt -blFrom+1, cAt) = PVAL;
end
clear statAtDelta;
steptime=toc(singleMapTic); % step time
if ( blAt == round(Config.AnalyzeLenSample/50) || mod(blAt, round(Config.AnalyzeLenSample/5) )==0 )
log_i([ num2str(dv) '@ ' 'Processing at: ' num2str( round(blAt/Config.AnalyzeLenSample*100) ) '%, estimated time remaining: ' num2str( (Config.AnalyzeLenSample-blAt)*steptime ) ' seconds' ]);
end
end
clear singleMapTic steptime;
hck = pcolor(correl_map_rho);
% hck = pcolor(correl_map_pval);
set(hck,'EdgeColor','none');
set(gca, 'Layer', 'top');
% ylim([-1 1]);
xticks_desired = 0:0.2:( (Config.AnalyzeLenSample/Meta.NomSRate)-mod( (Config.AnalyzeLenSample/Meta.NomSRate), 0.2));
xticks_sampleMapped = zeros(1, length(xticks_desired));
for i=1:length(xticks_desired)
xticks_sampleMapped(i) = (xticks_desired(i)/(Config.AnalyzeLenSample/Meta.NomSRate) *Config.AnalyzeLenSample);
end
xticks_sampleMapped = xticks_sampleMapped + abs(xticks_sampleMapped(1)/2);
% for i=1:length(xticks_sampleMapped)
% xp = [xticks_sampleMapped(i) xticks_sampleMapped(i)];
% yp = [xticks_sampleMapped(i) Config.AnalyzeLenSample];
% line(xp, yp, 'Color', [0.8 0.8 0.8], 'LineWidth', 1);
% % xticks_sampleMapped(i) = (xticks_desired(i)/(Config.AnalyzeLenSample/Meta.NomSRate) *Config.AnalyzeLenSample);
% end
if Config.Plots.Markings.Enabled == true
grayB = 0.7;
for s = 0:(Config.AnalyzeLenSample-1)
if mod(s-Config.AnalyzeFromSample, Config.ISISample) == 0
if Config.AlignToStimOrResp == true % STIMULUS ALIGNED
xline(s, 'Color', [grayB grayB grayB]);
yline(s, 'Color', [grayB grayB grayB]);
text((s)-round(Config.AnalyzeLenSample/40),(s)+round(Config.AnalyzeLenSample/40),'S', 'Color', [grayB grayB grayB])
xline(s-Config.FixBeforeStimSample, 'Color', [grayB grayB grayB]);
yline(s-Config.FixBeforeStimSample, 'Color', [grayB grayB grayB]);
text((s-Config.FixBeforeStimSample)-round(Config.AnalyzeLenSample/40),(s-Config.FixBeforeStimSample)+round(Config.AnalyzeLenSample/40),'T', 'Color', [grayB grayB grayB])
else % RESPONSE ALIGNED
xline(s, 'Color', [grayB grayB grayB]);
yline(s, 'Color', [grayB grayB grayB]);
text((s)-round(Config.AnalyzeLenSample/40),(s)+round(Config.AnalyzeLenSample/40),'R', 'Color', [grayB grayB grayB])
end
end
end
end
if ErrorsEnc
log_w(['Could not compute correlation in at least one point']);
end
xticks(xticks_sampleMapped);
xticklabels(xticks_desired);
xlabel(['Timepoint of value correlated [sec]']);
yticks(xticks_sampleMapped);
yticklabels(xticks_desired);
% yline(stimPresentedAtSec *Meta.NomSRate);
ylabel(['Timepoint of baseline [sec]']);
% if y axis is better on the right
% set(gca, 'YAxisLocation', 'right');
hcb = colorbar;
% if color bar on the left
% set(hcb, 'Location', 'westoutside');
colormap(parula(256));
caxis([-0.8 0.8]);
hold on
visboundaries(correl_map_pval<=0.05, 'Color', [0.8500 0.3250 0.0980], 'EnhanceVisibility',false);
visboundaries(correl_map_pval<=0.01, 'Color', [0.4660 0.6740 0.1880], 'EnhanceVisibility',false);
visboundaries(correl_map_pval<=0.001, 'Color', [0.6350 0.0780 0.1840], 'EnhanceVisibility',false);
hold off
title(strrep(['Baseline corrected TEPR value (' Config.Filter.Behav.FriendlyName ') x ' T.Properties.VariableNames{Config.DynBLCorrMap.DVFrom+dv-1}],'_','-'));
OutFilePath = ['~RESULTS/' Meta.RootDirTag '/' 'TEPR dyn baseline corr maps' ' Config.AlignToStimOrResp=' num2str(Config.AlignToStimOrResp) ' filt=' num2str(Config.Filter.Behav.Enabled) ' (' Config.Filter.Behav.FriendlyName ')' '/' ];
OutFileName = ['TEPR-corrmap' '-' Config.DynBLCorrMap.CorrelMethod '_' 'dep-var=' T.Properties.VariableNames{Config.DynBLCorrMap.DVFrom+dv-1} ' filt=' num2str(Config.Filter.Behav.Enabled) ' (' Config.Filter.Behav.FriendlyName ')' '.png'];
mkdir(OutFilePath);
% set(gcf, 'Position', get(0, 'Screensize'));
set(gcf, 'Position', get(0, 'Screensize')*Config.Plots.ScaleFactor);
pbaspect([1 1 1]) % looks like a square, better readable
saveas(gcf,[OutFilePath OutFileName]);
end
end