% Chau BK, Law CK, Lopez-Persem A, Klein-Flugge MC, & Rushworth MF (2020) Consistent patterns of distractor effects during decision making. eLife 9. % Script to generate results of Figure 8 % Written by Bolton K. H. Chau, 7/2020. clear all;%close all; fig='8a'; % fig='8b'; % fig='8c'; % fig='8d'; colour_significance=0; load('eye_exp8');eye_data=1; for s=1:length(data.behavior.accuracy) valid_mean(s)=mean(data.eye.valid_proportion{s}); end; subj=find(valid_mean>0.85); condition=['eye_incl']; %% parameter 1 exclude_criteria=10; labels=fieldnames(data.behavior); if eye_data labels_fix=fieldnames(data.fix); end; condition=[condition ' & trial_type==2']; %% parameter 1 condition=[condition ' & HV>0']; %% parameter 1 for s=subj for x=1:length(labels) eval([labels{x} '=data.behavior.' labels{x} '{s};']); end; if eye_data for x=1:length(labels_fix) eval([labels_fix{x} '=data.fix.' labels_fix{x} '{s};']); end; end; eye_incl=(~isnan(accuracy) & HV-LV>0 & data.eye.valid_proportion{s}>0.85); %========= calculations ======== D_chosen=choice_pos==abs(data.behavior.pos_probs{s}(:,3)); if eye_data aoi_convert=[1 -1 2 -2 3 -3]; valid_mean(s)=mean(data.eye.valid_proportion{s}); for x=unique(fix_aoi)' fix_aoi(find(fix_aoi==x))=aoi_convert(x); end; for t=trial' fix_num(t,1)=length((find(fix_trial==t))); fix_aoi_temp=fix_aoi(find(fix_trial==t)); fix_HVLV_num(t,1)=sum((abs(fix_aoi_temp(2:end))==1 & abs(fix_aoi_temp(1:end-1))==2) | (abs(fix_aoi_temp(2:end))==2 & abs(fix_aoi_temp(1:end-1))==1)); fix_HVD_num(t,1)=sum((abs(fix_aoi_temp(2:end))==1 & abs(fix_aoi_temp(1:end-1))==3) | (abs(fix_aoi_temp(2:end))==3 & abs(fix_aoi_temp(1:end-1))==1)); fix_LVD_num(t,1)=sum((abs(fix_aoi_temp(2:end))==2 & abs(fix_aoi_temp(1:end-1))==3) | (abs(fix_aoi_temp(2:end))==3 & abs(fix_aoi_temp(1:end-1))==2)); fix_D2HV_num(t,1)=sum(abs(fix_aoi_temp(2:end))==1 & abs(fix_aoi_temp(1:end-1))==3); fix_D2LV_num(t,1)=sum(abs(fix_aoi_temp(2:end))==2 & abs(fix_aoi_temp(1:end-1))==3); fix_HV2D_num(t,1)=sum(abs(fix_aoi_temp(2:end))==3 & abs(fix_aoi_temp(1:end-1))==1); fix_LV2D_num(t,1)=sum(abs(fix_aoi_temp(2:end))==3 & abs(fix_aoi_temp(1:end-1))==2); fix_HV2LV_num(t,1)=sum(abs(fix_aoi_temp(2:end))==2 & abs(fix_aoi_temp(1:end-1))==1); fix_LV2HV_num(t,1)=sum(abs(fix_aoi_temp(2:end))==1 & abs(fix_aoi_temp(1:end-1))==2); fix_D_num(t,1)=length(find(abs(fix_aoi_temp)==3)); fix_HV_num(t,1)=length(find(abs(fix_aoi_temp)==optnum_HV(t,1))); fix_LV_num(t,1)=length(find(abs(fix_aoi_temp)==optnum_LV(t,1))); end; end; %========= set regressors here ======== switch fig case '8a' regressors=[HV-LV HV+LV D]; dependent_variable=[fix_HV_num fix_LV_num fix_D_num]; regression_type='mv'; case '8b' regressors{1}=[fix_HV_num fix_LV_num fix_D_num]; regressors{2}=[HV-LV HV+LV D]; dependent_variable=[fix_HVLV_num fix_HVD_num fix_LVD_num ]; regression_type='mv'; case '8c' regressors{1}=[fix_HV_num fix_LV_num fix_D_num]; regressors{2}=[HV-LV HV+LV D]; dependent_variable=[fix_D2HV_num fix_D2LV_num fix_HV2D_num fix_LV2D_num]; regression_type='mv'; case '8d' regressors{1}=[HV-LV HV+LV D]; regressors{2}=[fix_D2HV_num fix_D2LV_num fix_HV2D_num fix_LV2D_num fix_LV2HV_num fix_HV2LV_num]; dependent_variable=accuracy; dv_label={'dist';'Acc(obj)'}; regression_type='binomial'; end; %========= select condition ========= eval(['dependent_variable=dependent_variable(find(' condition '),:);']); if ~iscell(regressors) eval(['regressors=regressors(find(' condition '),:);']); iv{s}=regressors; dv{s}=dependent_variable; regressors=normalise(regressors); else for x=1:length(regressors) eval(['regressors{x}=regressors{x}(find(' condition '),:);']); iv{s}=regressors; dv{s}=dependent_variable; regressors{x}=normalise(regressors{x}); end; end; eval(['mean_rt(s)=mean(RT(find(' condition ')));']); %===================================== if strcmp(regression_type,'') dependent_variable=normalise(dependent_variable); elseif strcmp(regression_type,'binomial') dependent_variable=[dependent_variable ones(length(dependent_variable),1)]; elseif strcmp(regression_type,'mnr') || strcmp(regression_type,'mv') dependent_variable=dependent_variable; else error('Check dv'); end; corr_check=[]; if ~iscell(regressors) switch regression_type case {'','binomial'} [betas(s,:),~,~]=glmfit(regressors,dependent_variable,regression_type); case 'mnr' temp=mnrfit(regressors,dependent_variable); betas(s,:)=temp(:); case 'mv' [betas(s,:,:),~,~]=mvregress(regressors,dependent_variable); otherwise error('error setting regression_type'); end; corr_check=regressors; else temp_beta=[]; for x=1:length(regressors) if x>1 if strcmp(regression_type,'binomial') regression_type=''; end; dependent_variable=temp_resid; end; switch regression_type case {'','binomial'} [temp,~,stats]=glmfit(regressors{x},dependent_variable,regression_type); temp_resid=stats.resid; case 'mnr' [temp,~,stats]=mnrfit(regressors{x},dependent_variable); temp_resid=stats.resid; case 'mv' [temp,~,stats,~,~]=mvregress(regressors{x},dependent_variable); temp_resid=stats; temp=reshape(temp,[],1); %check if this looks ok!! otherwise error('error setting regression_type'); end; if x>1 && ~strcmp(regression_type,'mv') temp=temp(2:end); end; temp_beta=[temp_beta;temp]; corr_check=[corr_check regressors{x}]; end; betas(s,:)=temp_beta'; end; r(:,:,s)=corrcoef(corr_check); end; r(find(r==0))=NaN; switch fig case '8a' betas=permute(betas,[1 3 2]); end; betas=reshape(betas,size(betas,1),[],1); switch fig case '8b' betas=betas(:,[10 13 16 11 14 17 12 15 18]); case '8c' betas=betas(:,[13 16 19 22 14 17 20 23 15 18 21 24]); case '8d' betas=betas(:,[5:end]); end; % exclude subjects and remove outliers ind=(abs(betas)>exclude_criteria); ind=find(sum(ind,2)>0); betas(ind,:)=NaN; betas(find(betas==0))=NaN; betas(size(betas,1)+1:length(data.behavior.accuracy),:)=NaN; %%%%%%%%%%%%%%%%%%%%%% regr_stats(1,:)=nanmean(betas(subj,:)); regr_stats(2,:)=nanstd(betas(subj,:)); [~,regr_stats(5,:),~,temp]=ttest(betas(subj,:),0,0.05,'both'); regr_stats(3,:)=temp.tstat; regr_stats(4,:)=temp.df; regr_results=[]; regr_results{1,1}='mean'; regr_results{2,1}='SD'; regr_results{3,1}='t'; regr_results{4,1}='df'; regr_results{5,1}='p'; temp=mat2cell(regr_stats,ones(size(regr_stats,1),1),ones(size(regr_stats,2),1)); regr_results=[regr_results temp]; %displays%% regr_r=nanmean(r,3) regr_results %%%%%%%%%%%%%%% figure; hold on; title(condition,'interpreter','none'); se=regr_stats(2,:)./sqrt(length(subj)); if colour_significance ind=find(regr_stats(5,:)>0.1); if ~isempty(ind) bar(ind,regr_stats(1,ind),'r','barwidth',0.2); eb=errorbar(ind,regr_stats(1,ind),se(ind),'xk'); set(eb,'LineStyle','none','marker','none','LineWidth',2,'Color',[0 0 0]); end; ind=find(regr_stats(5,:)>0.05 & regr_stats(5,:)<=0.1); if ~isempty(ind) bar(ind,regr_stats(1,ind),'b','barwidth',0.2); eb=errorbar(ind,regr_stats(1,ind),se(ind),'xk'); set(eb,'LineStyle','none','marker','none','LineWidth',2,'Color',[0 0 0]); end; ind=find(regr_stats(5,:)<.05); if ~isempty(ind) bar(ind,regr_stats(1,ind),'g','barwidth',0.2); eb=errorbar(ind,regr_stats(1,ind),se(ind),'xk'); set(eb,'LineStyle','none','marker','none','LineWidth',2,'Color',[0 0 0]); end; else bar(regr_stats(1,:),'g','barwidth',0.2); eb=errorbar(regr_stats(1,:),se,'xk'); end; ylabel('BETA weight'); hold off;