Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition.
The 5 matches
- [1] § Materials and Methods › Preliminary Analysis › Stop Signal Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 170–220 · score 0.83 · 80–1000 ms, Failed go trials, successful go trials, 80 ms, 2.5 deg, Successful stop signal
- [2] § Materials and Methods › Preliminary Analysis › IOR Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 170–220 · score 0.74 · 80–1000 ms, target onset, 80 ms, anticipatory, delayed, amplitude
- [3] § Materials and Methods › Preliminary Analysis › IOR Task ↔ Archive of OSF Storage/analysis/IORanalysis.m, lines 112–132 · score 0.69 · left quadrant, right quadrant, invalid trials, right hemifield, cue, patients
- [4] § Materials and Methods › Preliminary Analysis › Stop Signal Task ↔ Archive of OSF Storage/analysis/ctltaskanalysis.m, lines 109–140 · score 0.60 · target position, saccade amplitudes, target location, angular
- [5] § Materials and Methods › Procedure › Stop Signal Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 280–284 · score 0.56 · stop signal onset, stop signal delay, SSD
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,090 lines · 45 KB · no license · 3 matches
- % -------------------------------------------------------------------------
- % MATLAB analysis scripts for: Dorsal posterior parietal cortex lesions disrupt spatial- but not motor-based inhibition
- %
- % Copyright (c) 2026 Julie Ouerfelli-Ethier, Aarlenne Z. Khan and Laure
- % Pisella
- %
- % This code is licensed under the MIT License.
- % You may use, modify, and distribute this code in accordance with the license.
- % See the LICENCE file in the /licences folder for full terms:
- % https://spdx.org/licenses/MIT.html
- % ---------------------------------------------------------------------
- %% Analysis for stop signal task
- % The analysis has the following workflow:
- % 1) Data preprocessing
- % 2) SSRT estimation using the integration method
- % 3) Statistical analysis with modified t-tests
- % 4) Data visualization (plots for each patient and their controls)
- %% Data structure description
- % Each row of the param corresponds to one trial.
- % Columns are:
- % ---- Subject information ----
- % 1 = subject ID
- % ---- Trial information -----
- % 2 = block ID
- % 3 = ratio of stop signal during the block: 20 = 20%, 40 = 40%
- % 4 = trial ID
- % 5 = trial validity based on visual inspection: invalid (0) and valid (1)
- % 6 = trial condition: 0 = stop signal; 1 = go trials
- % 7 = fixation position x (pixels coordinates, origin at top-left corner)
- % 8 = fixation position y (pixels coordinates, origin at top-left corner)
- % 9 = trial start times (ms)
- % 10 = target onset times (ms)
- % 11 = stop signal onset times (ms)
- % 12 = ITI onset times (ms)
- % 13 = trial end times (ms)
- % 14 = target durations (duration between target onset and stop signal
- % onset) or stop signal delay (SSD)
- % 15 = responses during stop trials: NaN = go trial, 0 = incorrect (failed stop), 1 = correct (successful stop)
- % 16 = target location in hemifield: 1 = right; 2 = left
- % ---- Information about first saccade (sac 1 below) detected ----
- % If no saccade is detected columns 17-25 contain NaNs
- % All timings are relative to trial start.
- %
- % 17 = sac 1 onset (ms)
- % 18 = sac 1 peak time (ms)
- % 19 = sac 1 offset (ms)
- % 20 = sac 1 x start (deg of visual angle)
- % 21 = sac 1 y start (deg of visual angle)
- % 22 = sac 1 x end (deg of visual angle)
- % 23 = sac 1 y end (deg of visual angle)
- % 24 = sac 1 peak velocity (deg of visual angle/second)
- % 25 = sac 1 duration (ms)
- % ---- Information about second saccade (sac 2 below) detected ----
- % If no saccade is detected columns 26-34 contain NaNs
- % All timings are relative to trial start.
- %
- % 26 = sac 2 onset (ms)
- % 27 = sac 2 peak time (ms)
- % 28 = sac 2 offset (ms)
- % 29 = sac 2 x start (deg of visual angle)
- % 30 = sac 2 y start (deg of visual angle)
- % 31 = sac 2 x end (deg of visual angle)
- % 32 = sac 2 y end (deg of visual angle)
- % 33 = sac 2 peak velocity (deg of visual angle/second)
- % 34 = sac 2 duration (ms)
- % ---- Variables computed in the present script ----
- % 35 = saccade reaction times (ms, saccade onset relative to target onset)
- % 36 = saccade amplitudes (deg of visual angle)
- % 37 = saccade direction (polar coordinates, 0 to 360°)
- % 38 = target location in angle degree (polar coordinates, 0 = right, 1 = left)
- % 39 = absolute direction error (deg of visual angle, difference between
- % saccade landing position and target position)
- % 40 = trial types (see comments): 1 = successful go, 2 = failed go (no
- % response), 3 = successful stop, 4 = failed stop, 5= failed go
- % (anticipatory or delayed response), 6-7: reserved/error codes (should not occur; indicate unexpected data).
- % 42 = Participant groups: 1 = cf; 2 = cf's controls, 3 = ig, 4 = ig's controls
- % 43 = new SSDs calculated (accounting for screen delays during experiment)
- %%
- clear all;
- close all;
- %% ================= USER PARAMETERS =================
- % Instructions: Choose parameter here for analysis of I.G. groups (bilateral)
- % and C.F. groups for left or right hemifields. Hemifields here correspond
- % to where targets were presented.
- analysis_mode = "IG_groups";
- % "CF_groups_L"
- % "CF_groups_R"
- %% load param
- load paramstopsignal.txt;
- param = paramstopsignal;
- %% Subjects IDs and Task parameters
- sub = unique(param(:,1)); % subject ID
- ratio = [20 40]; % stop signal ratios
- %% ---- Data preprocessing ---- %%
- %% Remove trials marked as invalid after visual inspection
- % During visual inspection, trials marked as "invalid" are assigned 0 in
- % column 5.
- ind = find(param(:,5)==0);
- param1 = param(ind,:);
- %% Calculate saccade reaction times (SRTs) relative to target onset
- % SRTs are calculated as follows: saccade onset time - target onset time
- param1(:,35) = param1(:,17) - param1(:,10);
- %% Calculate saccade amplitude and saccade direction
- % Saccade amplitude is in degree of visual angle
- % Saccade direction is in radians, then converted into polar coordinates
- [theta(:,1), param1(:,36)] = cart2pol(param1(:,22)-param1(:,20), param1(:,23)-param1(:,21));
- % Saccade direction (radians) is converted in polar coordinates (degrees)
- theta(:,2) = degrees(theta(:,1));
- % Safeguard to ensure, polar coordinates span across 360 degrees (no
- % negatives)
- for i=1:length(theta(:,1)) % convert to 360 degrees
- if theta(i,2)<-25, param1(i,37) = theta(i,2)+360; theta(i,3) = theta(i,2)+360;
- else
- param1(i,37) = theta(i,2); theta(i,3) = theta(i,2);
- end
- end
- % Recompute target position in the hemifield in polar coordinates (angular
- % degrees).
- % 0° = target is on the right side of the screen
- % 180° = target is on the left side of the screen
- for i = 1:length(param1(:,1))
- if param1(i,16) == 1, param1(i,38) = 0; % right
- elseif param1(i,16) == 2, param1(i,38) = 180; % left
- end
- end
- % Calculate directional error of the saccade relative to target positions
- % This is calculated as follows: target location in polar coordinates -
- % saccade direction in polar coordinates
- param1(:,39) = abs(param1(:,38) - param1(:,37));
- %% % Filtering trials based on saccade amplitude and saccade direction
- % This section removes all trials with big amplitudes and big directional errors
- % - Amplitudes over 15° are removed
- % - Directional errors over 45° for normal saccades between 2.5° and 15° (exclusive)
- % Inititalize column 40
- param1(:,40)=1;
- for i = 1:length(param1(:,1))
- if param1(i,36) > 15, param1(i,40)=0; end % Removing any saccades that have big amplitudes
- if param1(i,39) > 45 && param1(i,36) > 2.5 && param1(i,36) < 15, param1(i,40)=0; end % Removing regular saccades to the targets wrong direction
- end
- % Build new param without filtered out trials
- ind = find(param1(:,40) == 1);
- param2 = param1(ind,:);
- %% Trial sorting
- % each trial is assigned a number according to trial type (go vs. stop) and
- % whether specific conditions are met to define it as successful or failed,
- % as follows:
- % 1 = successful go trials = go trial and SRTs above 80 ms and above mean+2SD of all go trials and amplitude more than 2.5 degrees and less than 15 degrees and abs error less than 45 deg
- % 2 = failed go trials = go trial and SRTS above mean+2SD (go omission, to take on the MAX good go trials srts)
- % 2 = failed go trials = go trial and no saccade was made (go omission, to take on the MAX good go trials srts)
- % 2 = failed go trials = go trial and saccades with amplitude less than 2.5 deg (go omission, to take on MAX good go trial srts)
- % 5 = failed go trials = go trial and saccades made before 80ms (to remove from analysis)
- % 3 = successful stop trials = stop trial and no saccade was made
- % 3 = successful stop trials = stop trial and SRT above mean+2SD of all go trials
- % 3 = successful stop trials = stop trial and amplitude less than 2.5 deg
- % 4 = failed stop trials = stop trial and saccades made before 80ms (to remove from analysis)
- % 6-7 = unexpected value. Used for diagnostics.
- % Trial sorted per subject, stop signal ratio and block
- param2(:,40)=NaN; % Initialize the column
- for j=1:length(sub) % subject ID
- for r= 1:2 % stop signal ratio
- for b = 1:11 % block ID
- s = sub(j);
- indgo = find(param2(:,1)==s & param2(:,6)==1 & param2(:,3) == ratio(r) & param2(:,2) == b);
- meansrt = nanmean(param1(indgo,35));
- sdsrt = nanstd(param1(indgo,35));
- % go trials
- for i = 1:length(indgo)
- if isnan(param2(indgo(i),35)), param2(indgo(i),40) = 2; % failed go trial (go omission, no saccade was made)
- elseif param2(indgo(i),36)<=2.5, param2(indgo(i),40) = 2; % failed go trial (go ommision, no saccade was made)
- elseif param2(indgo(i),35) > 79 && param2(indgo(i),35) < 1000 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 1; % successful go trial (saccades made between 80 ms and 1000 ms from target onset)
- elseif param2(indgo(i),35) >= 1000 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 5; % failed go trial (delayed saccade)
- elseif param2(indgo(i),35)< 80 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 5; % failed go trial (anticipatory saccade)
- else
- param2(indgo(i),40) = 6; % Unexpected value
- end
- end
- % stop trials
- indstop = find(param2(:,1)==s & param2(:,6)==0 & param2(:,3) == ratio(r) & param2(:,2) == b);
- for i=1:length(indstop)
- if isnan(param2(indstop(i),35)), param2(indstop(i),40) = 3; % successful stop (no saccade)
- elseif param2(indstop(i),35) < 1000 && param2(indstop(i),36) > 2.5, param2(indstop(i),40) = 4; % failed stop trial (a saccade was made)
- elseif param2(indstop(i),35) < 1000 && param2(indstop(i),36) <= 2.5, param2(indstop(i),40) = 3; % successful stop (barely a saccade)
- elseif param2(indstop(i),35) >= 1000, param2(indstop(i),40) = 3; % successful stop
- else
- param2(indstop(i),40) = 7; % Unexpected value
- end
- end
- end
- end
- end
- %% Sort go omissions
- % Go omissions reaction times are changed to maxSRT (for each participant and ratio separately)
- % Note: This method is only used to replace trials without a saccade,
- % anticipatory and delayed responses are kept as such (based on Verbruggen
- % et al., 2019)
- for j = 1:length(sub) % subject ID
- for r = 1:2 % stop signal ratio
- for b = 1:11 % block ID
- s = sub(j);
- % identify maximum RT for successful go trials for each ratio and participant
- indmaxgo = find(param2(:,1) == s & param2(:,40) == 1 & param2(:,3) == ratio(r) & param2(:,2) == b);
- maximum = max(param2(indmaxgo,35));
- ind = find(param2(:,1) == s & param2(:,40) == 2 & param2(:,3)==ratio(r) & param2(:,2) == b);
- % replace go omissions by the maximum
- for i=1:length(ind)
- param2(ind(i),35) = maximum;
- end
- end
- end
- end
- %% Optional data check: number of trials per participant/trial type
- % Thi section was used to verify the number of trials per stop signal ratio
- % and trial type for each participant.
- numtrials = [];
- for i = 1:length(sub) % subject ID
- for r = 1:2 % stop signal ratio
- for type = 1:4 % trial type (successful go, failed go, successful stop, failed stop)
- s = sub(i);
- ind = find(param2(:,1)==s & param2(:,40)==type & param2(:,3)==ratio(r));
- % numtrials has this structure (each row is subject ID x stop signal ratio x trial type).
- % Columns are:
- % 1 = subject ID
- % 2 = stop signal ratio
- % 3 = trial type
- % 4 = number of trials
- numtrials = [numtrials; s ratio(r) type length(ind)];
- end
- end
- end
- %% Sort participants into groups
- % 1 = cf
- % 2 = cf's controls
- % 3 = ig
- % 4 = ig's controls
- for i = 1:length(param2(:,1))
- if param2(i,1) == 1, param2(i,42) = 1; % cf
- elseif param2(i,1) > 1 && param2(i,1) < 13, param2(i,42) = 2; % cf's controls: subject ID 2 to 12
- elseif param2(i,1) == 13, param2(i,42) = 3; % ig
- elseif param2(i,1) > 13 && param2(i,1) < 24, param2(i,42) = 4; % ig's 's controls: subject ID 14 to 23
- else
- disp('Subject ID not assigned to a group!') % safeguard
- end
- end
- %% Adjust stop signal delays (col 14) to account for delays related to screen and computer
- % New SSDs are calculated as follows: signal onset time - target onset time
- param2(:,43)=param2(:,11)-param2(:,10);
- param3=param2;
- %% Calculate proportions of trials per participant per block
- meanpropblock = [];
- for i = 1:length(sub) % subject ID
- for t = 1:4 % trial type (successful go, failed go, successful stop, failed stop)
- for r = 1:2 % stop signal ratio
- for b = 1:11 % block ID
- s = sub(i);
- ind = find(param3(:,1) == s & param3(:,40) == t & param3(:,3) == ratio(r) & param3(:,2) == b); % total per group
- if ~isempty(ind)
- indgo = find(param3(:,1) == s & param3(:,40) < 3 & param3(:,3) == ratio(r) & param3(:,2) == b); % total go trials (failed + successful)
- indstop = find(param3(:,1) == s & param3(:,40) > 2 & param3(:,40) < 5 & param3(:,3) == ratio(r) & param3(:,2) == b); % total stop trials (failed + successful)
- % meanpropblock has this structure (each row is subject
- % ID x trial type)
- % columns are:
- % 1 = subject ID
- % 2 = trial type
- % 3 = stop signal ratio
- % 4 = block ID
- % 5 = mean SRT
- % 6 = number of trials per trial type
- % 7 = number of go trials
- % 8 = number of stop trials
- % 9 = proportion of go trials
- % 10 = proportion of stop trials,
- meanpropblock = [meanpropblock; s t ratio(r) b ...
- nanmean(param3(ind,35)) length(ind) length(indgo) length(indstop)...
- length(ind)/length(indgo) length(ind)/length(indstop)];
- end
- end
- end
- end
- end
- %% Accoridng to analysis_mode, proceed with measures of the stop signal task
- switch analysis_mode
- case "IG_groups"
- % No hemifield filtering for I.G.
- param4 = param3;
- case "CF_groups_L"
- % left hemifield for C.F. groups
- analysis_ind = param3(:, 16) == 2;
- param4 = param3(analysis_ind,:);
- case "CF_groups_R"
- % right hemifield for C.F. groups
- analysis_ind = param3(:,16) == 1;
- param4 = param3(analysis_ind,:);
- otherwise
- error('Invalid analysis_mode. Please check the spelling!')
- end
- %% ---- Estimating SSRT ----- %%
- %% SSRT is estimated using the integration method (Verbruggen et al., 2019).
- % This method is based on the independence assumption of the race model (Logan et al., 1984),
- % which states that the finishing time of the go process is independent of
- % the stopping process. Under this assumption the distribution of RTs on
- % stop trials is the same as the RT distribution on go trials.
- %
- % SSRT is calculated as the finishing time of the stopping process minus the
- % starting time of the sopping process. This estimation is achieved through
- % the three steps outlined below.
- %
- % FIRST STEP: The starting time of the stopping process is estimated as the mean
- % stop-signal delay (SSD) for each participant.
- %
- % SECOND STEP: The finishing time of the stopping process is estimated using the
- % integration procedure. First, we compute the proportion of failed stop
- % trials (p(respond|signal)). Then, we sort the RTs from the correct go
- % trials and compute their cumulative distribution. We next identify the RT
- % corresponding to the percentile of the go RT distribution equal to
- % p(respond|signal). This RT represents the estimated finishing time of the
- % go process at which stopping fails.
- %
- % THIRD STEP: Finally, SSRTs are calculated per participant and per signal
- % stop ratio as follows: SSRT = RT percentile - mean SSD
- %% FIRST STEP: Calculate the mean SSD for each participant for each ratio. This is the start time of the stopping process
- meanssd = [];
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub) % subject ID
- s = sub(i);
- ind = find(param4(:,1) == s & param4(:,6) == 0 & param4(:,3) == ratio(r)); % stop signal trials
- % meanssd has the following structure (each row is subject ID x stop signal ratio:
- % columns are:
- % 1 = subject ID
- % 2 = stop signal ratio
- % 3 = mean SSD
- % 4 = sem SSD
- % 5 = number of trials
- meanssd = [meanssd; s ratio(r) nanmean(param4(ind,43)) nansem(param4(ind,43)) length(ind)];
- end
- end
- %% SECOND STEP: calculate the finishing time of the stopping process.
- % 2.1. Calculate the cumulative distribution for each subject for each stop signal ratio
- % 2.1.1. Calculate the number of trials for each SRT bin for go and stop trials
- % Go SRT distributions (trial types 1-2, & 5)
- bins = 80:5:1500;
- meansrtbin = [];
- for r = 1:2 % ratio condition
- for i = 1:length(sub)
- for b = 1:length(bins)-1
- s = sub(i);
- ind = find(param4(:,1) == s & (param4(:,40) < 3 | param4(:,40) == 5) & param4(:,3) == ratio(r) & param4(:,35)>=bins(b) & param4(:,35)<bins(b+1));
- meansrtbin = [meansrtbin; s ratio(r) (bins(b) + bins(b+1))/2 length(ind)];
- end
- end
- end
- % Failed stop SRT distributions (trial type 4)
- meanfailsrtbin = [];
- for r = 1:2 % ratio condition
- for i = 1:length(sub)
- for b = 1:length(bins)-1
- s = sub(i);
- ind = find(param4(:,1) == s & param4(:,40) == 4 & param4(:,3) == ratio(r) & param4(:,35)>=bins(b) & param4(:,35)<bins(b+1));
- meanfailsrtbin = [meanfailsrtbin; s ratio(r) (bins(b) + bins(b+1))/2 length(ind)];
- end
- end
- end
- % 2.1.2. Based on SRT distributions calculated above, calculate the cumulative proportion of trials
- % go SRT distribution
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub) % signal ID
- s = sub(i);
- ind = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
- indsum = sum(meansrtbin(ind,4)); % sum of trials per sub
- meansrtbin(ind,6) = cumsum(meansrtbin(ind,4)/indsum); % cumulative proportion
- end
- end
- % Failed stop distribution
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub) % subject ID
- s = sub(i);
- ind = find(meanfailsrtbin(:,1) == s & meanfailsrtbin(:,2) == ratio(r));
- indsum = sum(meanfailsrtbin(ind,4)); % sum of trials per sub
- meanfailsrtbin(ind,6) = cumsum(meanfailsrtbin(ind,4)/indsum); % cumulative proportion
- end
- end
- %% 2.2. Calculate proportions of trials overall
- % This section computes the proportion of go and stop trials for each
- % participant, trial type, and stop signal tation. These proportions are
- % lated used to estimate SSRT by identifying the SRT bin where the
- % proporition of go trials matches the proportion of failed stop trials.
- meanprop = []; % initialize matrix
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub) % subject ID
- for t = 1:4 % trial type
- s = sub(i);
- ind = find(param4(:,1) == s & param4(:,40) == t & param4(:,3) == ratio(r)); % total per group
- indgo = find(param4(:,1) == s & (param4(:,40) <3 | param4(:,40) == 5) & param4(:,3) == ratio(r)); % total go trials (failed + successful), cases 1, 2 and 5
- indstop = find(param4(:,1) == s & param4(:,40) >2 & param4(:,40) < 5 & param4(:,3) == ratio(r)); % total stop trials (failed + successful), cases 3 and 4
- % meanprop has the following structure (one row per subject X trial type x ratio):
- % The columns are:
- % 1 = subject ID
- % 2 = trial type
- % 3 = stop signal ratio
- % 4 = participant group
- % 5 = mean SRT
- % 6 = total number of trials
- % 7 = number of go trials (trial types 1, 2 and 5)
- % 8 = number of stop trials (trial types 3 and 4)
- % 9 = proportion of trials for each trial type over total number of go trials
- % 10 = proportion of trials for each trial type over total
- % number of stop trials.
- meanprop = [meanprop; s t ratio(r) ...
- nanmean(param4(ind,42)) nanmean(param4(ind,35)) length(ind) length(indgo) length(indstop)...
- length(ind)/length(indgo) length(ind)/length(indstop)];
- end
- end
- end
- %
- % Here we add the proportion of failed stop trials to meansrtbin.
- % This value is constant for each participant and stop signal ratio and
- % will later be compared to the cumulative proportion of go trials in each
- % SRT bin.
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub) % subject ID
- s = sub(i);
- ind = find(meanprop(:,1) == s & meanprop(:,2) == 4 & meanprop(:,3) == ratio(r)); % proportion of failed stop trials for a given ratio
- ind2 = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
- meansrtbin(ind2,7) = meanprop(ind,10);
- end
- end
- % Compute the absolute difference between:
- % 1) proportion of failed stop, and;
- % 2) proportion of go trials in each SRT bin
- % The SRT bin with the smallest difference approximates the point where the
- % probabilities are equal.
- meansrtbin(:,8) = abs(meansrtbin(:,7) - meansrtbin(:,6));
- %% THIRD STEP: Estimate SSRT using the integration method:
- % 1) we identify the SRT bin where the proportion of go trials is closest to the
- % proportion of failed stop signals.
- % 2) we use the SRT value in this bin.
- % 3) we subtract the participant's mean SSD to obtain SSRT.
- ssrt = [];
- for r = 1:2 % ratio condition
- for i = 1:length(sub)
- s = sub(i);
- ind = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
- ind2 = find(meansrtbin(ind,8) == nanmin(meansrtbin(ind,8)));
- ind3 = find(meanssd(:,1)== s & meanssd(:,2)==ratio(r));
- if ~isempty(ind2)
- % SSRT structure (each row is a subject x stop signal ratio):
- % Columns are:
- % 1 = Subject ID
- % 2 = Stop signal ratio
- % 3 = SRT bin
- % 4 = SSRT (srt bin - mean ssd)
- ssrt = [ssrt; s ratio(r) meansrtbin(ind(ind2(1)), 3) - meanssd(ind3, 3)];
- else
- ssrt = [ssrt; s ratio(r) NaN];
- end
- end
- end
- %% Build a matrix with all stop signal task measures for analysis
- meansall = []; % initialize meansall
- for r = 1:2 % stop signal ratio
- for i = 1:length(sub)
- s = sub(i);
- ind = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 1); % successful go trials
- ind2 = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 3); % successful stop trials
- ind3 = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 4); % failed stop trials
- ind4 = find(ssrt(:,1)== s & ssrt(:,2)==ratio(r)); % mean ssrt for each participant and ratio
- % Meansall structure (each row is a subject ID x stop signal ration)
- % Columns are:
- % 1 = subject ID
- % 2 = stop signal ratio
- % 3 = successful go proportion
- % 4 = successful go SRT (in ms)
- % 5 = successful stop proportion
- % 6 = failed stop SRT (in ms)
- % 7 = SSRT
- % 8 = participant group
- meansall = [meansall; s ratio(r) meanprop(ind,9) meanprop(ind,5)...
- meanprop(ind2,10) meanprop(ind3,5) ssrt(ind4,3)...
- meanprop(ind3,4)]; %
- end
- end
- %% ---- Data analysis: Case study statistics ---- %%
- % Stats are performed according to analysis_mode defined at L. 80
- % Specify constants
- alpha = 0.05;
- n_IG = numel(unique(param4(param4(:,42) == 4, 1))); % number of controls for IG
- n_CF = numel(unique(param4(param4(:,42) == 2, 1))); % number of controls for CF
- if analysis_mode == "IG_groups"
- % Specify constants
- patient_group = 3;
- ctl_group = 4;
- ss_ratio = 20;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- fprintf('\nAnalysis mode: %s\n', analysis_mode)
- disp('---------------------------------------')
- % -- 20 % stop ratio -- %
- disp('Analysis for 20% stop signal ratio...');
- % successful go proportion
- Xm_IG = nanmean(controls(:,3));
- Xs_IG = nanstd(controls(:,3));
- Xc_IG = patient(:,3);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_IG = nanmean(controls(:,4));
- Xs_IG = nanstd(controls(:,4));
- Xc_IG = patient(:,4);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_IG = nanmean(controls(:,5));
- Xs_IG = nanstd(controls(:,5));
- Xc_IG = patient(:,5);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_IG = nanmean(controls(:,6));
- Xs_IG = nanstd(controls(:,6));
- Xc_IG = patient(:,6);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_IG = nanmean(controls(:,7));
- Xs_IG = nanstd(controls(:,7));
- Xc_IG = patient(:,7);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- 40 % stop ratio -- %
- % Specify constants
- ss_ratio = 40;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- disp('Analysis for 40% stop signal ratio...');
- % successful go proportion
- Xm_IG = nanmean(controls(:,3));
- Xs_IG = nanstd(controls(:,3));
- Xc_IG = patient(:,3);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_IG = nanmean(controls(:,4));
- Xs_IG = nanstd(controls(:,4));
- Xc_IG = patient(:,4);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_IG = nanmean(controls(:,5));
- Xs_IG = nanstd(controls(:,5));
- Xc_IG = patient(:,5);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_IG = nanmean(controls(:,6));
- Xs_IG = nanstd(controls(:,6));
- Xc_IG = patient(:,7);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_IG = nanmean(controls(:,7));
- Xs_IG = nanstd(controls(:,7));
- Xc_IG = patient(:,8);
- [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- Difference in ssrts for 20% vs. 40% -- %
- % Specify constants
- ss20ratio = 20;
- data20 = meansall(meansall(:,2) == ss20ratio, :);
- controls20 = data20(data20(:,8) == ctl_group, :);
- patient20 = data20(data20(:,8) == patient_group, :);
- ss40ratio = 40;
- data40 = meansall(meansall(:,2) == ss40ratio, :);
- controls40 = data40(data40(:,8) == ctl_group, :);
- patient40 = data40(data40(:,8) == patient_group, :);
- Xm = nanmean(controls20(:,7));
- Xs = nanstd(controls20(:,7));
- Xc = patient20(:,7);
- Ym = nanmean(controls40(:,7));
- Ys = nanstd(controls40(:,7));
- Yc = patient40(:,7);
- r = corrcoef(controls20(:,7), controls40(:,7));
- [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_IG, r(2), alpha);
- fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- elseif analysis_mode == "CF_groups_L"
- % Specify constants
- patient_group = 1;
- ctl_group = 2;
- ss_ratio = 20;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- fprintf('\nAnalysis mode: %s\n', analysis_mode)
- disp('---------------------------------------')
- % -- 20 % stop ratio -- %
- disp('Analysis for 20% stop signal ratio...');
- % successful go proportion
- Xm_CF = nanmean(controls(:,3));
- Xs_CF = nanstd(controls(:,3));
- Xc_CF = patient(:,3);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_CF = nanmean(controls(:,4));
- Xs_CF = nanstd(controls(:,4));
- Xc_CF = patient(:,4);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_CF = nanmean(controls(:,5));
- Xs_CF = nanstd(controls(:,5));
- Xc_CF = patient(:,5);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_CF = nanmean(controls(:,6));
- Xs_CF = nanstd(controls(:,6));
- Xc_CF = patient(:,6);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_CF = nanmean(controls(:,7));
- Xs_CF = nanstd(controls(:,7));
- Xc_CF = patient(:,7);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- 40 % stop ratio -- %
- % Specify constants
- ss_ratio = 40;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- disp('Analysis for 40% stop signal ratio...');
- % successful go proportion
- Xm_CF = nanmean(controls(:,3));
- Xs_CF = nanstd(controls(:,3));
- Xc_CF = patient(:,3);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_CF = nanmean(controls(:,4));
- Xs_CF = nanstd(controls(:,4));
- Xc_CF = patient(:,4);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_CF = nanmean(controls(:,5));
- Xs_CF = nanstd(controls(:,5));
- Xc_CF = patient(:,5);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_CF = nanmean(controls(:,6));
- Xs_CF = nanstd(controls(:,6));
- Xc_CF = patient(:,6);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_CF = nanmean(controls(:,7));
- Xs_CF = nanstd(controls(:,7));
- Xc_CF = patient(:,7);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- Difference in ssrts for 20% vs. 40% -- %
- ss20ratio = 20;
- data20 = meansall(meansall(:,2) == ss20ratio, :);
- controls20 = data20(data20(:,8) == ctl_group, :);
- patient20 = data20(data20(:,8) == patient_group, :);
- ss40ratio = 40;
- data40 = meansall(meansall(:,2) == ss40ratio, :);
- controls40 = data40(data40(:,8) == ctl_group, :);
- patient40 = data40(data40(:,8) == patient_group, :);
- Xm = nanmean(controls20(:,7));
- Xs = nanstd(controls20(:,7));
- Xc = patient20(:,7);
- Ym = nanmean(controls40(:,7));
- Ys = nanstd(controls40(:,7));
- Yc = patient40(:,7);
- r = corrcoef(controls20(:,7), controls40(:,7));
- [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_CF, r(2), alpha);
- fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- elseif analysis_mode == "CF_groups_R"
- % Specify constants
- patient_group = 1;
- ctl_group = 2;
- ss_ratio = 20;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- fprintf('\nAnalysis mode: %s\n', analysis_mode)
- disp('---------------------------------------')
- % -- 20 % stop ratio -- %
- disp('Analysis for 20% stop signal ratio...');
- % successful go proportion
- Xm_CF = nanmean(controls(:,3));
- Xs_CF = nanstd(controls(:,3));
- Xc_CF = patient(:,3);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_CF = nanmean(controls(:,4));
- Xs_CF = nanstd(controls(:,4));
- Xc_CF = patient(:,4);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_CF = nanmean(controls(:,5));
- Xs_CF = nanstd(controls(:,5));
- Xc_CF = patient(:,5);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_CF = nanmean(controls(:,6));
- Xs_CF = nanstd(controls(:,6));
- Xc_CF = patient(:,6);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_CF = nanmean(controls(:,7));
- Xs_CF = nanstd(controls(:,7));
- Xc_CF = patient(:,7);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- 40 % stop ratio -- %
- % specify constants
- ss_ratio = 40;
- data = meansall(meansall(:,2) == ss_ratio, :);
- controls = data(data(:,8) == ctl_group, :);
- patient = data(data(:,8) == patient_group, :);
- disp('---------------------------------------')
- disp('Analysis for 40% stop signal ratio...');
- % successful go proportion
- Xm_CF = nanmean(controls(:,3));
- Xs_CF = nanstd(controls(:,3));
- Xc_CF = patient(:,3);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful go SRTs (ms)
- Xm_CF = nanmean(controls(:,4));
- Xs_CF = nanstd(controls(:,4));
- Xc_CF = patient(:,4);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go SRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % successful stop proportion
- Xm_CF = nanmean(controls(:,5));
- Xs_CF = nanstd(controls(:,5));
- Xc_CF = patient(:,5);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful stop proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % failed stop SRTs (ms)
- Xm_CF = nanmean(controls(:,6));
- Xs_CF = nanstd(controls(:,6));
- Xc_CF = patient(:,6);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('Successful go proportion\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % SSRTs (ms)
- Xm_CF = nanmean(controls(:,7));
- Xs_CF = nanstd(controls(:,7));
- Xc_CF = patient(:,7);
- [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
- fprintf('SSRTs (ms)\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- % -- Difference in ssrts for 20% vs. 40% -- %
- %Specify constants
- ss20ratio = 20;
- data20 = meansall(meansall(:,2) == ss20ratio, :);
- controls20 = data20(data20(:,8) == ctl_group, :);
- patient20 = data20(data20(:,8) == patient_group, :);
- ss40ratio = 40;
- data40 = meansall(meansall(:,2) == ss40ratio, :);
- controls40 = data40(data40(:,8) == ctl_group, :);
- patient40 = data40(data40(:,8) == patient_group, :);
- Xm = nanmean(controls20(:,7));
- Xs = nanstd(controls20(:,7));
- Xc = patient20(:,7);
- Ym = nanmean(controls40(:,7));
- Ys = nanstd(controls40(:,7));
- Yc = patient40(:,7);
- r = corrcoef(controls20(:,7), controls40(:,7));
- [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_CF, r(2), alpha);
- fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
- fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
- end
- %% ---- Data visualization ---- %%
- % Standard deviation (SD) is hidden in the plots below to match the manuscripts
- % figures, which display mean values with 95% confidence intervals only.
- if analysis_mode == "IG_groups"
- color_patient = [0 0.6 0];
- color_ctl = [0.4 0.4 0.4];
- patient_label = 'IG';
- ctl_label = 'ctls';
- datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 3);
- datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 4);
- datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 3);
- datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 4);
- elseif analysis_mode == "CF_groups_L"
- color_patient = 'r';
- color_ctl = [1 1 1];
- patient_label = 'CF left';
- ctl_label = 'ctls';
- datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 1);
- datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 2);
- datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 1);
- datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 2);
- elseif analysis_mode == "CF_groups_R"
- color_patient = 'r';
- color_ctl = [1 1 1];
- patient_label = 'CF right';
- ctl_label = 'ctls';
- datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 1);
- datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 2);
- datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 1);
- datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 2);
- end
- % Go proportition plot
- figure()
- hold on;
- datapoint = plot(1, meansall(datapatient20, 3), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h = notBoxPlot(meansall(datactl20 , 3), 2);
- set([h.sdPtch], 'visible', 'off');
- set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h.data, 'MarkerFaceColor', color_ctl)
- set(h.mu, 'Color', 'k')
- hold on;
- plot(3, meansall(datapatient40, 3), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h1 = notBoxPlot(meansall(datactl40, 3), 4);
- set([h1.sdPtch], 'visible', 'off');
- set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h1.data, 'MarkerFaceColor', color_ctl)
- set(h1.mu, 'Color', 'k')
- set(gca, 'XTick', [1.5 3.5])
- set(gca, 'XTickLabel', {'20%', '40%'})
- xlabel('Stop signal ratio');
- ylabel('Proportion');
- axis([0 5 0.90 1.1]);
- legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
- title('Go proportion');
- % Go SRTs (ms) plot
- figure()
- hold on;
- datapoint = plot(1, meansall(datapatient20, 4), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h = notBoxPlot(meansall(datactl20 , 4), 2);
- set([h.sdPtch], 'visible', 'off');
- set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h.data, 'MarkerFaceColor', color_ctl)
- set(h.mu, 'Color', 'k')
- hold on;
- plot(3, meansall(datapatient40, 4), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h1 = notBoxPlot(meansall(datactl40, 4), 4);
- set([h1.sdPtch], 'visible', 'off');
- set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h1.data, 'MarkerFaceColor', color_ctl)
- set(h1.mu, 'Color', 'k')
- set(gca, 'XTick', [1.5 3.5])
- set(gca, 'XTickLabel', {'20%', '40%'})
- xlabel('Stop signal ratio');
- ylabel('Go SRTs (ms)');
- axis([0 5 0 500]);
- legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label}, 'Location', 'northwest')
- title('Go SRT(ms) across stop signal ratios');
- % Stop proportion plot
- figure()
- hold on;
- datapoint = plot(1, meansall(datapatient20, 5), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h = notBoxPlot(meansall(datactl20, 5), 2);
- set([h.sdPtch], 'visible', 'off');
- set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h.data, 'MarkerFaceColor', color_ctl)
- set(h.mu, 'Color', 'k')
- hold on;
- plot(3, meansall(datapatient40, 5), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h1 = notBoxPlot(meansall(datactl40, 5), 4);
- set([h1.sdPtch], 'visible', 'off');
- set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h1.data, 'MarkerFaceColor', color_ctl)
- set(h1.mu, 'Color', 'k')
- set(gca, 'XTick', [1.5 3.5])
- set(gca, 'XTickLabel', {'20%', '40%'})
- xlabel('Stop signal ratio');
- ylabel('Proportion');
- axis([0 5 0.10 0.90]);
- legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
- title('Successful stop proportion');
- % Stop SRTs (ms) plot
- figure()
- hold on;
- datapoint = plot(1, meansall(datapatient20, 6), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h = notBoxPlot(meansall(datactl20 , 6), 2);
- set([h.sdPtch], 'visible', 'off');
- set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h.data, 'MarkerFaceColor', color_ctl)
- set(h.mu, 'Color', 'k')
- hold on;
- plot(3, meansall(datapatient40, 6), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h1 = notBoxPlot(meansall(datactl40, 6), 4);
- set([h1.sdPtch], 'visible', 'off');
- set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h1.data, 'MarkerFaceColor', color_ctl)
- set(h1.mu, 'Color', 'k')
- set(gca, 'XTick', [1.5 3.5])
- set(gca, 'XTickLabel', {'20%', '40%'})
- xlabel('Stop signal ratio');
- ylabel('Failed stop SRTs (ms)');
- axis([0 5 0 500]);
- legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
- title('Failed stop SRT (ms) across stop signal ratios');
- % SSRT (ms) plot
- figure()
- hold on;
- datapoint = plot(1, meansall(datapatient20, 7), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h = notBoxPlot(meansall(datactl20, 7), 2);
- set([h.sdPtch], 'visible', 'off');
- set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h.data, 'MarkerFaceColor', color_ctl)
- set(h.mu, 'Color', 'k')
- hold on;
- plot(3, meansall(datapatient40, 7), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
- h1 = notBoxPlot(meansall(datactl40, 7), 4);
- set([h1.sdPtch], 'visible', 'off');
- set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
- set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
- set(h1.data, 'MarkerFaceColor', color_ctl)
- set(h1.mu, 'Color', 'k')
- set(gca, 'XTick', [1.5 3.5])
- set(gca, 'XTickLabel', {'20%', '40%'})
- xlabel('Stop signal ratio');
- ylabel('SSRT (ms)');
- axis([0 5 0 400]);
- legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
- title('SSRTs across stop signal ratios');
ssanalysis.m, no license · at the source
Overview
- Université Claude Bernard Lyon 1, Centre de Recherche en Neurosciences de Lyon CRNL, INSERM U1028, CNRS UMR5292, Trajectoires, Centre Hospitalier Le Vinatier, Bâtiment 336 Bron France
- École d'Optométrie Université de Montréal Montréal Québec Canada
Abstract
Spatial and response inhibition are two different types of inhibition processes. Spatial inhibition refers to the suppression of a specific location, whereas response inhibition involves cancelling a planned movement and is motor based. Here we examined the effects of lesions on the dorsal posterior parietal cortex on performance during two saccade tasks that separately assessed spatial (inhibition of return task) and response inhibition (stop signal task). We tested two stroke patients, one with unilateral and one with bilateral lesions to the dorsal posterior parietal cortex, as well as 21 age‐matched controls. In our spatial inhibition task, control participants showed the typical inhibition of return effect, whereas patients exhibited no inhibition of return in their ataxic hemifields. In contrast, patients and their matched controls performed similarly on the stop signal task. These results reveal a simple dissociation in our patients, where motor‐based inhibition is preserved following damage to the dorsal posterior parietal cortex, whereas spatial inhibition is impaired. This highlights the specific role of the dorsal posterior parietal cortex in spatial inhibition, notably related to spatial attentional mechanisms.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 5 matches between paragraphs and lines of code.
OSF bnh9e
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
15 files
- Archive of OSF Storage/
analysis/ , MATLAB, 699 lines, 1 matchIORanalysis.m - Archive of OSF Storage/
analysis/ , MATLAB, 288 lines, 1 matchctltaskanalysis.m - Archive of OSF Storage/
analysis/ , MATLAB, 1,090 lines, 3 matchesssanalysis.m - Archive of OSF Storage/
functions/ , MATLAB, 13 linesdeg2rad.m - Archive of OSF Storage/
functions/ , MATLAB, 17 linesdegrees.m - Archive of OSF Storage/
functions/ , MATLAB, 67 linesnanmax.m - Archive of OSF Storage/
functions/ , MATLAB, 54 linesnanmean.m - Archive of OSF Storage/
functions/ , MATLAB, 54 linesnanmean2.m - Archive of OSF Storage/
functions/ , MATLAB, 78 linesnanmedian.m - Archive of OSF Storage/
functions/ , MATLAB, 67 linesnanmin.m - Archive of OSF Storage/
functions/ , MATLAB, 49 linesnansem.m - Archive of OSF Storage/
functions/ , MATLAB, 80 linesnanstd.m - Archive of OSF Storage/
functions/ , MATLAB, 80 linesnanstd2.m - Archive of OSF Storage/
functions/ , MATLAB, 51 linesnansum.m - Archive of OSF Storage/
functions/ , MATLAB, 17 linesradians.m
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:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 15 scripts, each with its path and the digest of its content;
- 5 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 Statement
The data and analysis scripts required to reproduce the results and figures are available on the Open Science Framework repository at the following link: 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 2, 28 September 2026
- Publisher: n/a → Wiley
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 5 keywords, 13 MeSH terms, 6 funders, 115 references.
Cite
This paper
Ouerfelli‐Ethier, J., Jurkiewicz, T., Comtois‐Bona, I., Carrier, T., Khan, A. Z., & Pisella, L. (2026). Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition. The European journal of neuroscience, 63(9), e70528. https://
BibTeX
@article{ouerfelliethier
author = {Ouerfelli‐Ethier, Julie and Jurkiewicz, Tristan and Comtois‐Bona, Isabella and Carrier, Thomas and Khan, Aarlenne Z. and Pisella, Laure},
title = {{Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition}},
journal = {The European journal of neuroscience},
year = {2026},
month = may,
volume = {63},
number = {9},
pages = {e70528},
publisher = {Wiley},
issn = {0953-816X},
doi = {10.1111/
url = {https://
pmid = {42087821},
pmcid = {PMC13147234}
}
RIS
TY - JOUR
AU - Ouerfelli‐Ethier, Julie
AU - Jurkiewicz, Tristan
AU - Comtois‐Bona, Isabella
AU - Carrier, Thomas
AU - Khan, Aarlenne Z.
AU - Pisella, Laure
TI - Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition
T2 - The European journal of neuroscience
J2 - Eur J Neurosci
PY - 2026
DA - 2026/
VL - 63
IS - 9
SP - e70528
SN - 0953-816X
PB - Wiley
DO - 10.1111/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1111/
"type": "article-journal",
"title": "Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition",
"container-title": "The European journal of neuroscience",
"author": [
{
"family": "Ouerfelli‐Ethier",
"given": "Julie"
},
{
"family": "Jurkiewicz",
"given": "Tristan"
},
{
"family": "Comtois‐Bona",
"given": "Isabella"
},
{
"family": "Carrier",
"given": "Thomas"
},
{
"family": "Khan",
"given": "Aarlenne Z."
},
{
"family": "Pisella",
"given": "Laure"
}
],
"container-title-short":
"volume": "63",
"issue": "9",
"page": "e70528",
"DOI": "10.1111/
"PMID": "42087821",
"PMCID": "PMC13147234",
"ISSN": "0953-816X",
"publisher": "Wiley",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
1
]
]
}
}
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.1016/j.isci.2026.116034
- Distinct temporal patterns of beta bursts differentiate successful and failed movement cancellation.Journal: iScienceIn common: cognitive, 8 references
- [2] doi:10.1371/journal.pbio.3003635 [code]
- A cortico-subthalamic circuit rapidly engages and releases inhibition of specific movements depending on the environmental context.Journal: PLoS biologyIn common: 7 references
- [3] doi: [code]
- Neural Correlates of Inhibitory Control in Impulsivity Traits in Non-Ecological Human–Computer Tasks: An ALE Meta-AnalysisJournal: Brain sciencesIn common: cognitive, 6 references
- [4] doi:10.7554/elife.109842 [code]
- Dissociable neural substrates of integration and segregation in exogenous attention.Journal: eLifeIn common: cognitive, 5 references
- [5] doi:10.1038/s41467-026-71404-0 [code]
- Nonergodicity and Simpson's paradox in neurocognitive dynamics of cognitive control.Journal: Nature communicationsIn common: cognitive, 5 references
- [6] doi:10.1111/psyp.70397 [code]
- Cortical Contributions to Attentional Orienting and Response Cancellation in Action Stopping.Journal: PsychophysiologyIn common: cognitive, 4 references
- [7] doi:10.3758/s13415-026-01439-9
- Stimulation success!? Improved response inhibition performance after prefrontal single-site and condition-and-perturb transcranial magnetic stimulation.Journal: Cognitive, affective & behavioral neuroscienceIn common: 4 references
- [8] doi:10.3758/s13415-026-01428-y
- Role of the inferior frontal gyrus and impulsivity in approach motivation: A low-frequency repetitive transcranial magnetic stimulation study.Journal: Cognitive, affective & behavioral neuroscienceIn common: 4 references
- [9] doi:10.1371/journal.pbio.3003779 [code]
- Past and present goals are represented concurrently during visual search.Journal: PLoS biologyIn common: cognitive, 3 references
- [10] doi:10.1002/gps3.70042 [code]
- Effects of single-session transcranial direct current stimulation on response inhibition in stop-signal task performance: A meta-analysis and systematic review.Journal: General psychiatryIn common: cognitive, 3 references
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: 1 repository of the authors' code, each at its verified commit and with its license, 15 scripts, and 5 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:19271d0d384eae69…
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
[.
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.
