function bubble(data); % This program is part of the GRASP package [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY % ACROSS AGING STUDIES] % Copyright Notice % [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING STUDIES] % ? 2009 Wake Forest University Health Sciences. All Rights Reserved. % Disclaimer % [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING STUDIES] IS AN EXPERIMENTAL % RESEARCH PRODUCT. WAKE FOREST UNIVERSITY HEALTH SCIENCES (WFUHS) EXPRESSLY DISCLAIMS ANY WARRANTY % FOR [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING STUDIES], ANY RELATED % DOCUMENTATION, AND RELATED MATERIALS ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER % EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OR MERCHANTABILITY, % FITNESS FOR A PARTICULAR PURPOSE, OR NONINFRINGEMENT. WFUHS MAKES NO WARRANTY WITH RESPECT TO THE % ACCURACY OR COMPLETENESS OF [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING % STUDIES], AND SHALL HAVE NO LIABILITY BASED ON CLAIMS OF ERRORS. THE ENTIRE RISK ARISING OUT OF % THE USE OR PERFORMANCE OF [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING % STUDIES] REMAINS WITH THE USER OF SUCH PROGRAMS. % % In no event shall WFUHS be liable for any damages whatsoever (including, without limitation, % damages for loss of life or other pecuniary loss) arising out of the use of or inability to use % [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY ACROSS AGING STUDIES], even if WFUHS has % been advised of the possibility of such damages. Because some states/jurisdictions do not allow the % exclusion or limitation of liability for consequential or incidental damages, the above limitation % may not apply to you. IN NO EVENT SHALL THE TOTAL LIABILITY OF WFUHS, ITS DIRECTORS, OFFICERS, % TRUSTEES, PERSONNEL, AGENTS, EMPLOYEES, STUDENTS, SUCCESSORS AND ASSIGNS OF WAKE FOREST UNIVERSITY % HEALTH SCIENCES UNDER THIS AGREEMENT OR OTHERWISE IN CONNECTION WITH [EXPLORATORY META ANALYSIS ON % UNIFORM ASSESSMENT BATTERY ACROSS AGING STUDIES], FOR ANY REASON, EXCEED THE AMOUNT OF THE LICENSE % FEE PAID BY USER TO WFUHS FOR USE OF [EXPLORATORY META ANALYSIS ON UNIFORM ASSESSMENT BATTERY % ACROSS AGING STUDIES]. % HELP % INPUT: % data: specify input data (output from SAS) and location. % For example: data = 'C:\tt.xls'; % OUTPUT: % bubble plots for biomarkers or other measures. [num, txt, M]=xlsread(data); M = M(2:end,:); b = num(:,1); % Reg coeff; p = num(:,2); % P value; ss = num(:,3); % Sample Size; Ntotal = length(b); studyid = M(:,1); studyidu = unique(studyid); Nstudy = length(studyidu); study = nan(Ntotal,1); for s = 1:Nstudy; id = strcmp(studyid, studyidu(s)); study(id) = s; end; outcome = M(:,6); outcomeu = unique(outcome); Noutcome = length(outcomeu); y = nan(Ntotal,1); for i = 1:Noutcome; id = strcmp(outcome, outcomeu(i)); y(id) = i; end; bm = M(:,2); %biomarker; bmu = unique(bm); Nbm = length(bmu); bmy = nan(Ntotal,1); Xset = 1:Noutcome; whitebg('k'); C = [255 255 255; 153 0 0; 225 204 0; 0 153 0; 0 0 204]/255; ttl = bmu; MS = 7; for m = 1:length(bmu); figure(m); clf; hold on; for i = 1:Noutcome; lg(i) = sum(y ==i & strcmp(bm,bmu(m)) & isnan(ss)==0); [aa bb]=max(lg); end; obs0 = find(y == bb & strcmp(bm,bmu(m)) & isnan(ss)==0); [a c]=sort(ss(obs0),'descend'); so = study(obs0); porder = so(c); %plot order; for i = 1:Noutcome; for n = [porder(2:end)]'; plot(100,100,'o','MarkerSize',15,'MarkerFaceColor',C(n,:),'MarkerEdgeColor','none'); hold on; end; plot(100,100,'w-','LineWidth',2); plot([0.5,5],[0 0],'w:'); hold on; for j = [porder(2:end)]'; obs = find(study==j & y ==i & strcmp(bm,bmu(m))); if ss(obs) > 0; plot(y(obs),b(obs), 'o','MarkerSize',ss(obs)/MS,'MarkerEdgeColor','none','MarkerFaceColor',C(j,:)); end; end; for j = porder(1); obs = find(study==j & y ==i & strcmp(bm,bmu(m))); plot([y(obs)-.25,y(obs)+0.25], [b(obs) b(obs)],'-','LineWidth',2,'Color',C(j,:)); text(y(obs)+0.3, b(obs), ['p = ' num2str(p(obs),'%6.4f')], 'FontSize',10); end; end; set(gca, 'XTick',[1 2 3 4], 'XTickLabel', outcomeu,'FontSize',12, 'Xlim',[0.5 5],'Ylim',[min(b)-1 max(b)+1]); ylabel('Regression Coefficient','FontSize',12); legend(studyidu([porder(2:end)' porder(1)]), 'Orientation', ... 'Horizantal', 'Location',[0.15 0.01 0.7 0.05]); % legend('boxoff'); title(ttl(m)); box on; set(gcf,'Color','k','InvertHardcopy','off'); end; return;