PT_tDCS_figures_plot.m 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. %Figure 3D: boxplots of change in node strenght relative to baseline
  2. %get data
  3. cd 'D:\Labor\Analyses\Toolbox\fMRI'
  4. addpath('FSLNets')
  5. addpath('L1precision')
  6. addpath('pwling')
  7. addpath('../Tools/BCT')
  8. folder_idx = pwd; % get folder ID to store data
  9. files_idx = dir([folder_idx,'/*mat']); % list data2load
  10. baseFileName = files_idx.name;
  11. fullFileName = fullfile(folder_idx, baseFileName);
  12. dirInfos = dir(fullFileName);
  13. clear ('folder_idx','files_idx','baseFileName','fullFileName');
  14. cd 'D:\Labor\Projects\Stroke_tDCS_rsfmri\B_rsfmri_stroke_tDCS_mice\data';
  15. targetFolder=pwd;
  16. clear 'data';
  17. load data.mat;
  18. load labels.mat;
  19. group_name = {'Control','PT','PT_tDCS'};
  20. %% get individual node values
  21. tick = 1;
  22. for i = 1:size(data,2)
  23. group = data(i).group;
  24. for k = 1:size(data(i).subj,2)
  25. sbj = data(i).subj(k).ID;
  26. for t = 1:size(data(i).subj(k).tp,2)
  27. mat = data(i).subj(k).tp(t).mNet;
  28. if ~isempty(mat)
  29. for node = 1:length(labels.nr14)
  30. node_strength = sum(mat(labels.nr14(node),labels.nr14),'omitnan');
  31. master{tick,node+3} = node_strength;
  32. end
  33. master{tick,1} = group;
  34. master{tick,2} = sbj;
  35. master{tick,3} = num2str(t);
  36. tick = tick+1;
  37. end
  38. end
  39. end
  40. end
  41. header = {'group','subject','timepoint'};
  42. for kx = 1:length(labels.ROI14_short)
  43. header(kx+3)=labels.ROI14_short(kx);
  44. end
  45. master_tab = cell2table(master,'VariableNames',header);
  46. master_tab.group = categorical(master_tab.group);
  47. master_tab.subject = categorical(master_tab.subject);
  48. master_tab.timepoint = categorical(master_tab.timepoint);
  49. %%
  50. tack = 1;
  51. for ix = 1:length(group_name)
  52. subdata= master_tab(master_tab.group == group_name{ix},:);
  53. IDlist = unique(subdata.subject);
  54. % get group mean baseline values
  55. for ox = 1:length(labels.nr14)
  56. baseValues(ox) = mean(cell2mat(table2cell(subdata(subdata.timepoint=='1',ox+3))));
  57. end
  58. % loop over single subjects
  59. for mx = 1:length(IDlist)
  60. %determine if subject data at timepoint is available
  61. if sum(subdata.subject==IDlist(mx) & subdata.timepoint=='3')~=0
  62. IDdata = cell2mat(table2cell(subdata(subdata.subject==IDlist(mx) & subdata.timepoint=='3',4:end)));
  63. % determine if subject has individual baseline
  64. if sum(subdata.subject==IDlist(mx) & subdata.timepoint=='1')~= 0
  65. baseData = cell2mat(table2cell(subdata(subdata.subject==IDlist(mx) & subdata.timepoint=='1',4:end)));
  66. deltaValues = IDdata - baseData;
  67. else
  68. deltaValues = IDdata - baseValues;
  69. end
  70. Delta{tack,1} = group_name{ix};
  71. Delta{tack,2} = string(IDlist(mx));
  72. for lx = 1:length(labels.ROI14_short)
  73. Delta{tack,lx+3} = deltaValues(lx);
  74. end
  75. tack = tack+1;
  76. end
  77. end
  78. end
  79. %% get control shift
  80. for ox = 1:length(labels.nr14)
  81. baseValues(1,ox) = mean(cell2mat(table2cell(...
  82. master_tab(master_tab.group == 'Control' & ...
  83. master_tab.timepoint =='1',ox+3)...
  84. )));
  85. baseValues(2,ox) = mean(cell2mat(table2cell(...
  86. master_tab(master_tab.group == 'Control' & ...
  87. master_tab.timepoint =='3',ox+3)...
  88. )));
  89. end
  90. Delta_base = baseValues(2,:)-baseValues(1,:);
  91. % Delta(:,4:end) = cell2mat(Delta(:,4:end)) - Delta_base;
  92. %%
  93. % get concanated list of data
  94. for kx = 1:length(labels.ROI14_short)
  95. subseg = Delta(:,[1:3 kx+3]);
  96. DeltaList([1+(kx-1)*size(subseg,1):(kx*size(subseg,1))],:)= subseg;
  97. DeltaList([1+(kx-1)*size(subseg,1):(kx*size(subseg,1))],3)= labels.ROI14_short(kx);
  98. end
  99. % transform cell to Table
  100. DeltaHead = {'group','subject','ROI','value'};
  101. Delta_Tab = cell2table(DeltaList,'VariableNames',DeltaHead);
  102. Delta_Tab.ROI = categorical(Delta_Tab.ROI);
  103. bpColors (1,:) = hex2rgb('777777');
  104. bpColors (2,:) = hex2rgb('D95319');
  105. bpColors (3,:) = hex2rgb('0072BD');
  106. %%
  107. PT_Delta = Delta;
  108. GroupID = categorical(PT_Delta(:,1));
  109. rawdata = cell2mat(PT_Delta(GroupID=='PT_tDCS',3:end));
  110. for r = 1:size(rawdata,2)
  111. pd = fitdist(rawdata(:,r),'Normal');
  112. ci = paramci(pd);
  113. statPT(4,r) = pd.mean;
  114. statPT(5:6,r) = ci(:,1);
  115. end
  116. statPT ([1 4],:) = statPT([1 4],:)- Delta_base;
  117. tabNodePT = array2table(statPT,'VariableNames',labels.ROI14_short)
  118. %% Permutaion Based Statistics (PBS) of node strength
  119. eval = squeeze(mean(cell2mat(PT_Delta(GroupID=='PT',3:end)))) - ...
  120. squeeze(mean(cell2mat(PT_Delta(GroupID=='PT_tDCS',3:end)))) ;
  121. % number of permutations
  122. n_permutes = 1000;
  123. conc_data= cell2mat(PT_Delta(:,3:end));
  124. nx=2;%*size(conc_data,2); % Anzahl an tests; Bonferroni Korrektur?
  125. zval_5 = abs(norminv(0.05/nx)); % for p=0.05
  126. zval_1 = abs(norminv(0.01/nx)); % for p=0.01
  127. zval_01 = abs(norminv(0.001/nx)); % for p=0.01
  128. zval=abs(norminv(0.025));
  129. for i=50000:-1:1
  130. p=i/100000;
  131. pval(i)=abs(norminv(p));
  132. end
  133. for permi=1:n_permutes
  134. randorder = randperm(size(conc_data,1));
  135. temp = conc_data(randorder,:);
  136. perm_map(permi,:) = squeeze(mean(temp(1:floor(size(conc_data,1)/2),:))) - ...
  137. squeeze(mean(temp(ceil(size(conc_data,1)/2):end,:)));
  138. end
  139. mean_h0 = squeeze(mean(perm_map,1));
  140. std_h0 = std(perm_map,1);
  141. zstat = abs(eval-mean_h0)./(std_h0);
  142. idx=zstat>zval_5;
  143. imx=zstat>zval;
  144. mat=eval.*idx;
  145. for i=1:size(zstat,1)
  146. for k=1:size(zstat,2)
  147. [c idx] = min(abs(pval-zstat(i,k)));
  148. pstat(i,k)=idx/100000;
  149. end
  150. end
  151. FDR=5;
  152. fr=FDR/100;
  153. [hidx, crit_p, adj_ci_cvrg, adj_p]=fdr_bh(pstat,fr,'dep');
  154. hidx
  155. %%
  156. [B,I] = sort(eval,'descend');
  157. ROI_order = labels.ROI14_short(I);
  158. Delta_Tab.ROI = categorical(Delta_Tab.ROI,ROI_order);
  159. figure
  160. b = boxchart(Delta_Tab.ROI,Delta_Tab.value,'GroupByColor',Delta_Tab.group,'BoxWidth',0.75);
  161. for bx=1:3
  162. b(bx).BoxFaceColor = bpColors(bx,:);
  163. b(bx).MarkerColor = bpColors(bx,:);
  164. end
  165. ylabel('Delta Node Strength (Day 14)');
  166. legend({'Control','PT sham','PT tDCS'})
  167. ax = gca;
  168. ax.FontName = 'Times';
  169. ax.FontSize = 22;
  170. %%
  171. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  172. %Figure 3E-F: Group Mean Boxplots of sensorimotor network
  173. %%
  174. master_tab = DataPTrsfmri;
  175. group_name = {'control','PT sham','PT tDCS'};
  176. %% get control shift
  177. for ox = 1:length(group_name)
  178. baseValues(1,:) = squeeze(mean(cell2mat(table2cell(...
  179. master_tab(master_tab.Group == group_name(ox) & ...
  180. master_tab.Time =='baseline',3:end)...
  181. )),1,'omitnan'));
  182. baseValues(2,:) = squeeze(mean(cell2mat(table2cell(...
  183. master_tab(master_tab.Group == group_name(ox) & ...
  184. master_tab.Time =='Day 28',3:end)...
  185. )),1,'omitnan'));
  186. Delta_base(ox,:) = baseValues(2,:)-baseValues(1,:);
  187. end
  188. % Delta(:,4:end) = cell2mat(Delta(:,4:end)) - Delta_base;
  189. %%
  190. rawdata = cell2mat(table2cell(master_tab(master_tab.Group=='control'...
  191. & master_tab.Time=="Day 28",3:end)));
  192. for r = 1:size(rawdata,2)
  193. pd = fitdist(rawdata(:,r),'Normal');
  194. ci = paramci(pd);
  195. stat(1,r) = pd.mean;
  196. stat([2 3],r) = ci(:,1);
  197. end
  198. % statPT ([1 4],:) = statPT([1 4],:)- Delta_base;
  199. %
  200. % tabNodePT = array2table(statPT,'VariableNames',labels.ROI14_short)
  201. %%
  202. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  203. %Figure 3A-D: Group Mean Boxplots of sensorimotor network
  204. %get data
  205. cd 'D:\Labor\Analyses\Toolbox\fMRI'
  206. addpath('FSLNets')
  207. addpath('L1precision')
  208. addpath('pwling')
  209. addpath('../Tools/BCT')
  210. folder_idx = pwd; % get folder ID to store data
  211. files_idx = dir([folder_idx,'/*mat']); % list data2load
  212. baseFileName = files_idx.name;
  213. fullFileName = fullfile(folder_idx, baseFileName);
  214. dirInfos = dir(fullFileName);
  215. clear ('folder_idx','files_idx','baseFileName','fullFileName');
  216. cd 'D:\Labor\Projects\Stroke_tDCS_rsfmri\B_rsfmri_stroke_tDCS_mice\data';
  217. targetFolder=pwd;
  218. clear 'data';
  219. load data.mat;
  220. load labels.mat;
  221. group_name = {'Control','PT','PT_tDCS'};
  222. %%
  223. for ri = 1:size(data,2)
  224. for li = 1:size(data(ri).subj,2)
  225. for ti = 1:size(data(ri).subj(li).tp,2)
  226. mnx=data(ri).subj(li).tp(ti).mNet;
  227. if ~isempty(mnx)
  228. mNet(:,:,(ri-1)*4+ti,li)=mnx;
  229. end
  230. end
  231. % rnx=data(ri).subj(li).mNet;
  232. % ROI(:,:,li,ri)=rnx;
  233. end
  234. end
  235. mNet(mNet==0)=nan;
  236. clear ('mnx','rnx','li','ri');
  237. mNet_mean = squeeze(mean(mNet,4,'omitnan'));
  238. for i = 1:3
  239. for k=1:4
  240. DeltaBaseline (:,:,k+(i-1)*4) = mNet_mean(:,:,k+(i-1)*4)-mNet_mean(:,:,1+(i-1)*4);
  241. end
  242. end
  243. ROI_Delta = DeltaBaseline(labels.nr14,labels.nr14,:);
  244. %%
  245. for i = 1:size(ROI_Delta,3)
  246. plotmat_values_rsfMRI(ROI_Delta(:,:,i),targetFolder,dirInfos,[-.75 .75],0,labels.ROI14_short);
  247. hold on
  248. axis square;
  249. plot(get(gca,'xlim'),[mean(get(gca,'ylim')), mean(get(gca,'ylim'))],'k-','linewidth',2);
  250. plot([mean(get(gca,'xlim')), mean(get(gca,'xlim'))], get(gca,'ylim'),'k-','linewidth',2);
  251. title(num2str(i))
  252. % title(strcat(name))%,'; mean node strength = ', num2str(norm_ROI_delta(ix*4+k))));
  253. ax=gca;
  254. ax.FontSize=20;
  255. ax.FontName='Times';
  256. end