plot_comparisons_choice_prob.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. function [binary_nngt_comp,nnmd_diff_comp,nnmn_diff_comp,Zlengths] = plot_comparisons_choice_prob(...
  2. Zstruct_trwise,save_folder_path,filename_suffix)
  3. addpath(genpath('../../../../my-tools'));
  4. Nccs=size(Zstruct_trwise.Z_b1_LL_trwise,2);
  5. sidestr={'Left','Right'};
  6. casestr={'_b1_LL','_b1_LR','_b2_LL','_b2_LR'};
  7. ttlab={'SV_L delay2 LookL','SV_L delay2 LookR','SV_R delay2 LookL','SV_R delay2 LookR'};
  8. binary_nngt_comp=nan(4,Nccs); nnmd_diff_comp=nan(4,Nccs); nnmn_diff_comp=nan(4,Nccs);
  9. Zlengths=nan(4,Nccs,4);
  10. for cases=1:4
  11. Z1rnm=nanmean(eval(['Zstruct_trwise.Z' casestr{cases} '_trwise(:,:,:,1)']),3);
  12. Z2rnm=nanmean(eval(['Zstruct_trwise.Z' casestr{cases} '_trwise(:,:,:,2)']),3);
  13. Z3rnm=nanmean(eval(['Zstruct_trwise.Z' casestr{cases} '_trwise(:,:,:,3)']),3);
  14. Z4rnm=nanmean(eval(['Zstruct_trwise.Z' casestr{cases} '_trwise(:,:,:,4)']),3);
  15. parfor cc=1:Nccs
  16. Z1rnm_cc=rmnans(Z1rnm(:,cc)); Z2rnm_cc=rmnans(Z2rnm(:,cc));
  17. Z3rnm_cc=rmnans(Z3rnm(:,cc)); Z4rnm_cc=rmnans(Z4rnm(:,cc));
  18. ZD11=nan; ZD21=nan; ZD31=nan;
  19. ZD12=nan; ZD22=nan; ZD32=nan;
  20. csw=(cases<=2)-(cases>2); % switches LookL>LookR in SVL to LookR>LookL in SVR
  21. Zlengths(cases,cc,:)=[length(Z1rnm_cc) length(Z2rnm_cc) length(Z3rnm_cc) length(Z4rnm_cc)];
  22. if ~isempty(Z1rnm_cc) && ~isempty(Z3rnm) % beta1 is positive: increasing p(chL), hence chL > chR
  23. [ZD11,ZD21,ZD31,~,ZD51]=vecdiffsubsamp(csw*Z1rnm_cc,csw.*Z3rnm_cc,100);
  24. end
  25. if ~isempty(Z2rnm_cc) && ~isempty(Z4rnm_cc) % beta1 is negative: increasing p(chR), hence chL < chR
  26. [ZD12,ZD22,ZD32,~,ZD52]=vecdiffsubsamp(csw.*Z4rnm_cc,csw.*Z2rnm_cc,100);
  27. end
  28. if cases==1 || cases==4
  29. binary_nngt_comp(cases,cc)=nanmax([ZD11 ZD12]);%nanmean(ZDiff>0,'all');
  30. else
  31. binary_nngt_comp(cases,cc)=nanmin([ZD11 ZD12]);%nanmean(ZDiff>0,'all');
  32. end
  33. nnmd_diff_comp(cases,cc)=nanmean([ZD21 ZD22]);%nanmedian(ZDiff,'all');
  34. nnmn_diff_comp(cases,cc)=nanmean([ZD31 ZD32]);%nanmedian(ZDiff,'all');
  35. %binary_nngt_comp2D(cases,cc,:)=[ZD11 ZD12];
  36. %clearvars ZD* Z1 Z2 Z3 Z4
  37. end
  38. fprintf('computing case:%d/4 %s\n',cases,ttlab{cases})
  39. end
  40. %% Quick safety checks
  41. %save('FTPN.mat','TP','FP','TN','FN')
  42. %FPR=nansum(FP,2)./(nansum(TN,2)+nansum(FP,2))
  43. %TPR=nansum(TP,2)./(nansum(FN,2)+nansum(TP,2))
  44. %nanmean(AUC1)
  45. %nanmean(FPR1)
  46. %nanmean(TPR1)
  47. %plot(nanmean(FPR1),nanmean(TPR1),'k','linewidth',1.5); hold on
  48. %plot([0 1],[0 1]); hold on
  49. %error
  50. hff=fullfig([0 0 .5 .5]); clo=colororder();
  51. for cs=1:4
  52. subplot(2,2,cs); hold on
  53. if cs==2
  54. subplot(2,2,3);
  55. elseif cs==3
  56. subplot(2,2,2);
  57. end
  58. if cs==1 || cs==4; pvtail='right'; else pvtail='left'; end
  59. xvnm=(nnmn_diff_comp(cs,:)); pvnm=ranksum(xvnm,zeros(size(xvnm)),'tail',pvtail);
  60. xvnd=(nnmd_diff_comp(cs,:)); pvnd=ranksum(xvnd,zeros(size(xvnd)),'tail',pvtail);
  61. histogram(xvnm,-1e-3:2e-5:1e-3,'edgecolor','none','normalization','count'); hold on;
  62. histogram(xvnd,-1e-3:2e-5:1e-3,'edgecolor',[.5 .5 .5],'normalization','count','facecolor','none'); hold on; % ylim([0 20]);
  63. plot(nanmedian(xvnm),max(get(gca,'YLim')),'v','markeredgecolor',clo(1,:)); plotvline(0,'k-');
  64. plot(nanmedian(xvnd),max(get(gca,'YLim')),'v','markeredgecolor',[.5 .5 .5]); plotvline(0,'k-');
  65. text(min(get(gca,'XLim')).*.9,max(get(gca,'YLim')).*.9,sprintf('p=%.2i %s',pvnm,getpstars(pvnm)),'color',clo(1,:));
  66. text(min(get(gca,'XLim')).*.9,max(get(gca,'YLim')).*.8,sprintf('p=%.2i %s',pvnd,getpstars(pvnd)),'color',[.5 .5 .5]);
  67. xlabel('resudials difference'); ylabel('cell count'); box off;
  68. title(ttlab{cs}); legend({'mean','median'},'box','off')
  69. end
  70. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-4p' filename_suffix '.fig']);
  71. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-4p' filename_suffix '.svg']);
  72. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-4p' filename_suffix '.png']);
  73. hff=fullfig([.5 .25 .5 .25]);
  74. for cs=1:2
  75. subplot(1,2,cs); hold on
  76. xvnm=(nnmn_diff_comp(2*(cs-1)+1,:))-(nnmn_diff_comp(2*(cs-1)+2,:));
  77. if cs==2; xvnm=-xvnm; end
  78. pvnm=ranksum(xvnm,zeros(size(xvnm)),'tail','right');
  79. histogram(xvnm,-2e-3:5e-5:2e-3,'facecolor',clo(1,:),'edgecolor','none','normalization','count'); hold on; ylim([0 28]);
  80. plot(nanmedian(xvnm),max(get(gca,'YLim')),'rv','markeredgecolor',clo(1,:)); plotvline(0,'k-');
  81. xvnd=nnmd_diff_comp(2*(cs-1)+1,:)-nnmd_diff_comp(2*(cs-1)+2,:);
  82. if cs==2; xvnd=-xvnd; end
  83. pvnd=ranksum(xvnd,zeros(size(xvnd)),'tail','right');
  84. histogram(xvnd,-2e-3:5e-5:2e-3,'facecolor','none','edgecolor',[.3 .3 .3],'normalization','count'); hold on; ylim([0 28]);
  85. plot(nanmedian(xvnd),max(get(gca,'YLim')),'rv','markeredgecolor',[.3 .3 .3]); plotvline(0,'k-');
  86. text(-1.8e-3,max(get(gca,'YLim')).*.9,sprintf('p=%.2i %s',pvnm,getpstars(pvnm)),'color',clo(1,:));
  87. text(-1.8e-3,max(get(gca,'YLim')).*.8,sprintf('p=%.2i %s',pvnd,getpstars(pvnd)),'color',[.3 .3 .3]);
  88. xlabel('resudials difference'); ylabel('cell count');
  89. if cs==1
  90. title([ttlab{2*(cs-1)+1}(1:end-5) '(LookL - LookR)']);
  91. else
  92. title([ttlab{2*(cs-1)+1}(1:end-5) '(LookR - LookL)']);
  93. end
  94. end
  95. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p' filename_suffix '.fig']);
  96. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p' filename_suffix '.svg']);
  97. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p' filename_suffix '.png']);
  98. hff=fullfig([.5 0 .5 .25]); comb=[1 4; 2 3];
  99. for cs=1:2
  100. subplot(1,2,cs); hold on
  101. xvnm=[nnmn_diff_comp(comb(cs,1),:) nnmn_diff_comp(comb(cs,2),:)];
  102. %if cs==2; xvnm=-xvnm; end
  103. histogram(xvnm,-2e-3:2e-5:2e-3,'facecolor',[.5 .5 .5],'edgecolor','none','normalization','count'); hold on; ylim([0 38]);
  104. plot(nanmedian(xvnm),max(get(gca,'YLim')),'rv','markeredgecolor',[.5 .5 .5]); plotvline(0,'k-');
  105. xvnd=[nnmd_diff_comp(comb(cs,1),:) nnmd_diff_comp(comb(cs,2),:)];
  106. %if cs==2; xvnd=-xvnd; end
  107. histogram(xvnd,-2e-3:2e-5:2e-3,'facecolor',clo(1,:),'edgecolor','none','normalization','count'); hold on; ylim([0 38]);
  108. plot(nanmedian(xvnd),max(get(gca,'YLim')),'rv','markeredgecolor',clo(1,:)); plotvline(0,'k-');
  109. if cs==1
  110. pvnm=ranksum(xvnm,zeros(size(xvnm)),'tail','right');
  111. pvnd=ranksum(xvnd,zeros(size(xvnd)),'tail','right');
  112. else
  113. pvnm=ranksum(xvnm,zeros(size(xvnm)),'tail','left');
  114. pvnd=ranksum(xvnd,zeros(size(xvnd)),'tail','left');
  115. end
  116. xlim([-1.5e-3 1.5e-3]);
  117. text(min(get(gca,'XLim'))*.9,max(get(gca,'YLim')).*.9,sprintf('p=%.2i %s',pvnm,getpstars(pvnm)),'color',[.5 .5 .5]);
  118. text(min(get(gca,'XLim'))*.9,max(get(gca,'YLim')).*.8,sprintf('p=%.2i %s',pvnd,getpstars(pvnd)),'color',clo(1,:));
  119. xlabel('resudials difference (ch. ipsil. - ch. contral.)'); ylabel('cell count');
  120. if cs==1
  121. title('delay2 encoding (SV_L LookL, SV_R LookR)');
  122. else
  123. title('delay2 encoding (SV_L LookR, SV_R LookL)');
  124. end
  125. end
  126. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p-sides-' filename_suffix '.fig']);
  127. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p-sides-' filename_suffix '.svg']);
  128. saveas(hff,[save_folder_path 'ChoiceProb-SV-Look-2p-sides-' filename_suffix '.png']);
  129. hff=fullfig([0 .5 .5 .5]); clo=colororder(); clo(1:2,:)=flipud(clo(1:2,:));
  130. for cs=1:4
  131. subplot(2,2,cs);
  132. if cs==2; subplot(2,2,3); elseif cs==3; subplot(2,2,2); end
  133. xv=binary_nngt_comp(cs,:);
  134. if mod(cs,3)==1
  135. pv=ranksum(xv,.5*ones(size(xv)),'tail','right');
  136. text(0,14,sprintf('>.5 p=%.2i %s',pv,getpstars(pv)));
  137. else
  138. pv=ranksum(xv,.5*ones(size(xv)),'tail','left');
  139. text(0,14,sprintf('<.5 p=%.2i %s',pv,getpstars(pv)));
  140. end
  141. text(.25,25,sprintf('n=%2.0d',sum(xv<.5)),'color',clo(1,:)); hold on
  142. text(.75,25,sprintf('n=%2.0d',sum(xv>=.5)),'color',clo(2,:));
  143. histogram(xv(xv<.5),0:.01:1,'edgecolor','none','normalization','count','facecolor',clo(1,:)); hold on
  144. histogram(xv(xv>=.5),0:.01:1,'edgecolor','none','normalization','count','facecolor',clo(2,:)); hold on
  145. ylim([0 30]); plotvline(0.5,'k-'); ylim([0 30]);
  146. title(ttlab{cs}); xlabel([sidestr{ceil(cs/2)} ' choice probability']); ylabel('cell count'); box off
  147. end
  148. saveas(hff,[save_folder_path 'ChoicePref-SV-Look' filename_suffix '.fig']);
  149. saveas(hff,[save_folder_path 'ChoicePref-SV-Look' filename_suffix '.svg']);
  150. saveas(hff,[save_folder_path 'ChoicePref-SV-Look' filename_suffix '.png']);
  151. hff=fullfig([.5 0 .5 .25]); clo=colororder(); clo(1:2,:)=flipud(clo(1:2,:));
  152. for cs=1:2
  153. subplot(1,2,cs); hold on; plotcmapdots(clo);
  154. histogram(binary_nngt_comp(2*(cs-1)+1,:),0:7e-3:1,'edgecolor','none','normalization','count','facecolor',clo(1,:)); hold on
  155. histogram(binary_nngt_comp(2*(cs-1)+2,:),0:7e-3:1,'edgecolor','none','normalization','count','facecolor',clo(2,:)); hold on
  156. ylim([0 20]);
  157. nm1=nanmean(binary_nngt_comp(2*(cs-1)+1,:)); nsd1=nanstd(binary_nngt_comp(2*(cs-1)+1,:));
  158. nm2=nanmean(binary_nngt_comp(2*(cs-1)+2,:)); nsd2=nanstd(binary_nngt_comp(2*(cs-1)+2,:));
  159. plot(0:7e-3:1,Nccs*normpdf(0:7e-3:1,nm1,nsd1)*7e-3,'color',clo(1,:));
  160. plot(0:7e-3:1,Nccs*normpdf(0:7e-3:1,nm2,nsd2)*7e-3,'color',clo(2,:));
  161. plot(nanmedian(binary_nngt_comp(2*(cs-1)+1,:)),max(get(gca,'YLim')),'v','markeredgecolor','none','markerfacecolor',clo(1,:));
  162. plot([1 1].*nanmedian(binary_nngt_comp(2*(cs-1)+1,:)),get(gca,'YLim'),':','color',clo(1,:));
  163. plot(nanmedian(binary_nngt_comp(2*(cs-1)+2,:)),max(get(gca,'YLim')),'v','markeredgecolor','none','markerfacecolor',clo(2,:));
  164. plot([1 1].*nanmedian(binary_nngt_comp(2*(cs-1)+2,:)),get(gca,'YLim'),':','color',clo(2,:)); plotvline(.5,'k:')
  165. if cs==1
  166. pv=ranksum(binary_nngt_comp(2*(cs-1)+1,:),binary_nngt_comp(2*(cs-1)+2,:),'tail','right');
  167. else
  168. pv=ranksum(binary_nngt_comp(2*(cs-1)+1,:),binary_nngt_comp(2*(cs-1)+2,:),'tail','left');
  169. end
  170. %plotvline(0.5,'k-');
  171. text(0,14,sprintf('p=%.2i %s',pv,getpstars(pv)));
  172. title(ttlab{2*(cs-1)+1}(1:end-6)); xlabel([sidestr{cs} ' choice probability']); ylabel('cell count'); box off
  173. legend({'LookL','LookR'},'Location','northeast','box','off')
  174. end
  175. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison' filename_suffix '.fig']);
  176. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison' filename_suffix '.svg']);
  177. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison' filename_suffix '.png']);
  178. hff=fullfig([.5 .25 .5 .25]); xorder=[1 2 4 3];
  179. for cs=1:2
  180. subplot(1,2,cs);
  181. X1=binary_nngt_comp(xorder((cs-1)*2+1),:);
  182. X2=binary_nngt_comp(xorder((cs-1)*2+2),:);
  183. Y=0:.001:1;
  184. FP=sum(X2>Y',2);
  185. TP=sum(X1>Y',2);
  186. FN=sum(X1<Y',2);
  187. TN=sum(X2<Y',2);
  188. FPR=FP./(TN+FP);
  189. TPR=TP./(FN+TP);
  190. plot(FPR,TPR); hold on; plot([0 1],[0 1]); daspect([1 1 1]);
  191. xlabel('False positive rate'); ylabel('True positive rate');
  192. text(.3,.1,sprintf('AUC = %.3f',max(cumtrapz(flip(FPR),flip(TPR)))));
  193. title(['ROC ch=' sidestr{cs}(1) ', ' ttlab{xorder((cs-1)*2+1)} ' vs ' ttlab{xorder((cs-1)*2+2)}(end-4:end)]);
  194. end
  195. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison-ROC' filename_suffix '.fig']);
  196. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison-ROC' filename_suffix '.svg']);
  197. saveas(hff,[save_folder_path 'ChoicePref-SV-Look-comparison-ROC' filename_suffix '.png']);
  198. end