Figure4A.m 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. clear all
  2. new_fs=150;
  3. t_ax=[-.1:1/new_fs:.4];
  4. baseline=[-.05 0.0133];
  5. timewin=[-.05 .25];
  6. t_ax_plot=t_ax(min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))));
  7. badchan=48;
  8. t_ax_short=t_ax_plot;
  9. load('C:\Users\Ryzard Auksztulewicz\Desktop\omissions_bmcbiol_repo\data\ryszard_preprocessed_20200413_LFP.mat')
  10. for p=[5 8:12]
  11. rates_exp=[];
  12. mean_response=[];
  13. seg_length=[];
  14. cols=cell(0);
  15. linestyles=cell(0);
  16. legendlabels=cell(0);
  17. for j=1:3
  18. data_present=length(preceding_all_lfp{p,j});
  19. if data_present>0
  20. notrls=size(preceding_all_lfp{p,j},3);
  21. preceding_all_lfp_bc{p,j}=preceding_all_lfp{p,j}-repmat(nanmean(preceding_all_lfp{p,j}(:,min(find(t_ax>=baseline(1))):max(find(t_ax<=baseline(2))),:),2),[1 size(preceding_all_lfp{p,j},2) 1]);
  22. omissions_all_lfp_bc{p,j}=omissions_all_lfp{p,j}-repmat(nanmean(omissions_all_lfp{p,j}(:,min(find(t_ax>=baseline(1))):max(find(t_ax<=baseline(2))),:),2),[1 size(omissions_all_lfp{p,j},2) 1]);
  23. preceding_all_lfp_bc{p,j}=preceding_all_lfp_bc{p,j}./repmat(nanstd(preceding_all_lfp_bc{p,j}(:,min(find(t_ax>=baseline(1))):max(find(t_ax<=baseline(2))),:),[],2),[1 size(preceding_all_lfp_bc{p,j},2) 1]);
  24. omissions_all_lfp_bc{p,j}=omissions_all_lfp_bc{p,j}./repmat(nanstd(omissions_all_lfp_bc{p,j}(:,min(find(t_ax>=baseline(1))):max(find(t_ax<=baseline(2))),:),[],2),[1 size(omissions_all_lfp_bc{p,j},2) 1]);
  25. end
  26. end
  27. mean_evoked=[];
  28. for j=1:3
  29. if length(preceding_all_lfp{p,j})>0
  30. mean_evoked=[mean_evoked nanmean(preceding_all_lfp_bc{p,j}(:,min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))),:),3)];
  31. end
  32. end
  33. totalrange=range(mean_evoked,2);
  34. for j=1:3
  35. if length(preceding_all_lfp{p,j})>0
  36. preceding_all_lfp_bc{p,j}=preceding_all_lfp_bc{p,j}./repmat(totalrange,[1 size(preceding_all_lfp_bc{p,j},2) size(preceding_all_lfp_bc{p,j},3)]);
  37. omissions_all_lfp_bc{p,j}=omissions_all_lfp_bc{p,j}./repmat(totalrange,[1 size(omissions_all_lfp_bc{p,j},2) size(omissions_all_lfp_bc{p,j},3)]);
  38. end
  39. end
  40. allstd=[];
  41. for j=1:size(preceding_all_lfp_bc,2)
  42. try
  43. allstd=[allstd; squeeze(mean(std(omissions_all_lfp_bc{p,j}(setdiff(1:64,badchan),find(t_ax>=timewin(1)&t_ax<=timewin(2)),:),[],2),1))];
  44. catch
  45. end
  46. end
  47. stdcutoff=median(allstd)+3*std(allstd);
  48. for j=1:size(preceding_all_lfp_bc,2)
  49. try
  50. badtrls=find(squeeze(mean(std(omissions_all_lfp_bc{p,j}(setdiff(1:64,badchan),find(t_ax>=timewin(1)&t_ax<=timewin(2)),:),[],2),1))>stdcutoff);
  51. omissions_all_lfp_bc{p,j}(:,:,badtrls)=NaN;
  52. catch
  53. end
  54. end
  55. allstd=[];
  56. for j=1:size(preceding_all_lfp_bc,2)
  57. try
  58. allstd=[allstd; squeeze(mean(std(preceding_all_lfp_bc{p,j}(setdiff(1:64,badchan),find(t_ax>=timewin(1)&t_ax<=timewin(2)),:),[],2),1))];
  59. catch
  60. end
  61. end
  62. stdcutoff=median(allstd)+3*std(allstd);
  63. for j=1:size(preceding_all_lfp_bc,2)
  64. try
  65. badtrls=find(squeeze(mean(std(preceding_all_lfp_bc{p,j}(setdiff(1:64,badchan),find(t_ax>=timewin(1)&t_ax<=timewin(2)),:),[],2),1))>stdcutoff);
  66. preceding_all_lfp_bc{p,j}(:,:,badtrls)=NaN;
  67. catch
  68. end
  69. end
  70. for j=1:3
  71. if length(preceding_all_lfp{p,j})>0
  72. mean_response=[mean_response nanmean(preceding_all_lfp_bc{p,j}(:,min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))),:),3) nanmean(omissions_all_lfp_bc{p,j}(:,min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))),:),3)];
  73. rates_exp=[rates_exp j+1];
  74. seg_length=[seg_length size(nanmean(preceding_all_lfp_bc{p,j}(:,min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))),:),3),2) size(nanmean(omissions_all_lfp_bc{p,j}(:,min(find(t_ax>=timewin(1))):max(find(t_ax<=timewin(2))),:),3),2)];
  75. end
  76. end
  77. mean_response(badchan,:)=0;
  78. for c=1:64
  79. alltrls=[];
  80. for k=1:size(preceding_all_lfp_bc,2)
  81. try
  82. alltrls=[alltrls nanmean(squeeze(preceding_all_lfp_bc{p,k}(c,find(t_ax>=0&t_ax<=timewin(2)),:)),1)];
  83. catch
  84. end
  85. end
  86. [h,p_prec(c),ci,stats]=ttest(alltrls);
  87. end
  88. for c=1:64
  89. alltrls=[];
  90. for k=1:size(omissions_all_lfp_bc,2)
  91. try
  92. alltrls=[alltrls nanmean(squeeze(omissions_all_lfp_bc{p,k}(c,find(t_ax>=0&t_ax<=timewin(2)),:)),1)];
  93. catch
  94. end
  95. end
  96. [h,p_omi(c),ci,stats]=ttest(alltrls);
  97. end
  98. p_sort=sort([p_prec p_omi]);
  99. for i=1:length(p_sort)
  100. if p_sort(i)<=.05*i/length(p_sort)
  101. p_fdr(i)=1;
  102. else
  103. p_fdr(i)=0;
  104. end
  105. end
  106. p_fdr_thresh=p_sort(max(find(p_fdr==1)));
  107. if length(p_fdr_thresh)==0
  108. p_fdr_thresh=0;
  109. end
  110. selchans=setdiff(find(p_omi<p_fdr_thresh&p_prec<p_fdr_thresh),badchan);
  111. % selchans=setdiff(1:64,badchan);
  112. try
  113. amps_all=[];
  114. lats_all=[];
  115. for c=selchans
  116. mean_conds=reshape(mean_response(c,:),[45 size(mean_response,2)/45]);
  117. if mean(sign(mean(mean_conds)))<0
  118. [p c]
  119. mean_conds=-mean_conds;
  120. mean_response(c,:)=-mean_response(c,:);
  121. end
  122. for k=1:size(mean_response,2)/45
  123. [amps,lats]=findpeaks(mean_conds(:,k));
  124. lats_all(c,k)=t_ax_short(lats(find(abs(amps)==max(abs(amps)))));
  125. amps_all(c,k)=amps(find(abs(amps)==max(abs(amps))));
  126. end
  127. end
  128. lats_all=lats_all(selchans,:);
  129. amps_all=amps_all(selchans,:);
  130. mean_conds_all{p}=mean_response;
  131. mean_lats_all{p}=lats_all;
  132. mean_amps_all{p}=amps_all;
  133. selchans_all{p}=selchans;
  134. rates_all{p}=rates_exp;
  135. catch
  136. mean_conds_all{p}=0;
  137. mean_lats_all{p}=0;
  138. mean_amps_all{p}=0;
  139. selchans_all{p}=0;
  140. rates_all{p}=0;
  141. p
  142. end
  143. end
  144. choose_rates=[2 3 4];
  145. anova_lats=[];
  146. anova_amps=[];
  147. anova_rats=[];
  148. anova_rate=[];
  149. anova_stim=[];
  150. anova_chan=[];
  151. ppoi=[5 9:12];
  152. colscols=[0 0 .5; 0 0 1; .5 .5 1];
  153. for i=ppoi
  154. if length(rates_all{i})>0 && length([find(rates_all{i}==choose_rates(1)) find(rates_all{i}==choose_rates(2))])==2
  155. selchoi=find(median(mean_amps_all{i}(:,[2 4 6]),2)<0);
  156. mean_lats_all{i}(selchoi,:)=NaN;
  157. mean_amps_all{i}(selchoi,:)=NaN;
  158. for r=1:length(choose_rates)
  159. rateind=find(rates_all{i}==choose_rates(r));
  160. nchans=length(find(~isnan(mean_lats_all{i}(:,(rateind-1)*2+1))));
  161. anova_lats=[anova_lats; mean_lats_all{i}(find(~isnan(mean_lats_all{i}(:,(rateind-1)*2+1))),(rateind-1)*2+1)];
  162. anova_amps=[anova_amps; mean_amps_all{i}(find(~isnan(mean_amps_all{i}(:,(rateind-1)*2+1))),(rateind-1)*2+1)];
  163. anova_rats=[anova_rats; ones(nchans,1)*i];
  164. anova_rate=[anova_rate; ones(nchans,1)*r];
  165. anova_stim=[anova_stim; ones(nchans,1)*1];
  166. anova_chan=[anova_chan; (1:nchans)'];
  167. anova_lats=[anova_lats; mean_lats_all{i}(find(~isnan(mean_lats_all{i}(:,(rateind-1)*2+2))),(rateind-1)*2+2)];
  168. anova_amps=[anova_amps; mean_amps_all{i}(find(~isnan(mean_amps_all{i}(:,(rateind-1)*2+2))),(rateind-1)*2+2)];
  169. anova_rats=[anova_rats; ones(nchans,1)*i];
  170. anova_rate=[anova_rate; ones(nchans,1)*r];
  171. anova_stim=[anova_stim; ones(nchans,1)*2];
  172. anova_chan=[anova_chan; (1:nchans)'];
  173. end
  174. end
  175. end
  176. figure;
  177. subplot(2,2,2)
  178. hold on
  179. for i=1:3
  180. scatter(anova_amps(find(anova_stim==1&anova_rate==i)),anova_amps(find(anova_stim==2&anova_rate==i)),25,colscols(i,:),'filled');
  181. [B,BINT] = regress(anova_amps(find(anova_stim==2&anova_rate==i)),[anova_amps(find(anova_stim==1&anova_rate==i))*0+1 anova_amps(find(anova_stim==1&anova_rate==i))]);
  182. mdl=fitlm(anova_amps(find(anova_stim==1&anova_rate==i)),anova_amps(find(anova_stim==2&anova_rate==i)));
  183. t_cookd = 3*mean(mdl.Diagnostics.CooksDistance,'omitnan');
  184. outlrs=find(mdl.Diagnostics.CooksDistance > t_cookd);
  185. outlrs=[];
  186. Xcorr=anova_amps(find(anova_stim==1&anova_rate==i));
  187. Ycorr=anova_amps(find(anova_stim==2&anova_rate==i));
  188. [r,p]=corr(Xcorr(setdiff(1:length(Xcorr),outlrs)),Ycorr(setdiff(1:length(Ycorr),outlrs)))
  189. if p<.05
  190. plot([-.5 1.5],[-.5 1.5]*B(2)+B(1),'color',colscols(i,:),'linestyle','-')
  191. else
  192. plot([-.5 1.5],[-.5 1.5]*B(2)+B(1),'color',colscols(i,:),'linestyle','--')
  193. end
  194. end
  195. xlim([-.5 1.5])
  196. ylim([-.5 1.5])
  197. line([-.5 1.5],[0 0],'linestyle','--','color',[.5 .5 .5])
  198. line([0 0],[-.5 1.5],'linestyle','--','color',[.5 .5 .5])
  199. sfh1 = subplot(2,2,4)
  200. hold on
  201. for i=1:3
  202. a=hist(anova_amps(find(anova_stim==1&anova_rate==i)),-.5:.25:1.5);
  203. line([-.5:.25:1.5],-a/sum(a),'color',colscols(i,:))
  204. end
  205. xlim([-.5 1.5])
  206. set(gca,'ytick',[])
  207. ylim([-.5 0])
  208. sfh1.Position(2)=sfh1.Position(2)+sfh1.Position(4)/2;
  209. sfh1.Position(4)=sfh1.Position(4)/2;
  210. sfh2 = subplot(2,2,1)
  211. hold on
  212. for i=1:3
  213. a=hist(anova_amps(find(anova_stim==2&anova_rate==i)),-.5:.25:1.5);
  214. line(-a/sum(a),[-.5:.25:1.5],'color',colscols(i,:))
  215. end
  216. ylim([-.5 1.5])
  217. set(gca,'xtick',[])
  218. xlim([-.5 0])
  219. sfh2.Position(1)=sfh2.Position(1)+sfh1.Position(3)/2;
  220. sfh2.Position(3)=sfh1.Position(3)/2;