Handy Forest Plots for Interpreting Clinical Data Graphically

Forest plots can be handy in interpreting multiple studies data or data from subgroups in a understandable graphical representation.

Forest plots for Meta-Analysis:

  • Forest plots show the information from the individual studies that went into the meta­analysis at a glance.
  • They show the amount of variation between the studies and an estimate of the overall result.
  • In case of medical research, it is a graphical display designed to illustrate the relative strength of treatment effects in multiple quantitative scientific studies addressing the same question.
  • It was developed for use in medical research as a means of graphically representing a meta-analysis of the results of randomized controlled trials.

For example: A Forest plot is shown in the figure below.

  • It is for a study conducted in different countries. Odds ratio with 95% CI were calculated for each region and overall using meta-analysis.
  • Size for square box is showing the %weight of study for that particular region.
  • Endpoints of Line through square box represent Confidence interval.
  • Diamond at the end is representing the odds ratio for overall study.

forestplot1

Forest plots for Subgroup Analysis:

  • Purpose of Subgroup Analysis: Determining whether or not there is heterogeneity in a treatment effect—ie, that a treatment works better in some subgroups than others—is fraught with statistical difficulties and has led to much misinterpretation.
  • Subgroup analysis should concentrate on differences from the average overall treatment effect, via tests of heterogeneity or interaction, and that it is inappropriate to assess the effects of treatment on a single subgroup by examination of the 95% CI for that subgroup (as referred in Figure below).
  • Confidence intervals in subgroups are always wider than those for the main effect because of smaller numbers.
  • If the interval for a subgroup crosses the no effect point, this is widely misinterpreted as a lack of effect in the subgroup even when the overall effect is significant.
  • The correct approach is to determine whether the effect size for different subgroups varies significantly from the main effect by a test for heterogeneity.
  • Forest plots have become useful, yet in their standard presentation, they tend to encourage misinterpretation.
  • Interpretation of subgroup effects would be helped if this line was de-emphasized or omitted and replaced by a bold vertical line at the overall treatment effect level, making it easier to see if a subgroup confidence interval differed significantly from the overall effect.

forestplot2

Sample Code:


/* Set the graphics environment */

goptions reset=all cback=white border htitle=12pt htext=10pt;

/* Create sample data for forest plot. */

data test;

   input yvar $ 1-10 lower_limit rate upper_limit;

   datalines;

Sohn 2002   1.2  1.5  2.2

Raine 2003  2.2  2.5  3.0

Snow 1999   0.8  1.3  4.4

; run;

/* Create an annotate data set to draw the lines. */

data anno;

   length function style color $8;

   retain xsys ysys '2' when 'a';

   set test;

   /* Draw the horizontal line from lower_limit to upper_limit */

   function='move'; xsys='2'; ysys='2'; yc=yvar; x=lower_limit; color='black'; output;

   function='draw'; x=upper_limit; color='black'; size=1; output;

   /* Draw the tick line for the lower_limit value */

   function='move';xsys='2'; ysys='2';yc=yvar; x=lower_limit; color='black'; output;

   function='draw';x=lower_limit; ysys='9'; y=+1; size=1; output;

   function='draw';x=lower_limit; y=-2; size=1;output;

   /* Draw the tick line for the upper_limit value */

   function='move';xsys='2'; ysys='2'; yc=yvar; x=upper_limit; color='black'; output;

   function='draw';x=upper_limit; ysys='9'; y=+1; size=1; output;

   function='draw';x=upper_limit; y=-2; size=1; output;

run;

title1 'Forest Plot with PROC GPLOT';

axis1 label=none

      minor=none

      offset=(5,5);

axis2 order=(0 to 4.5 by 0.5)

      label=('Odds Ratio')

      minor=none;

symbol1 interpol=none color=black value=dot height=1.5;

proc gplot data=test;

   plot yvar*rate / annotate=anno

      nolegend

      vaxis=axis1

      haxis=axis2

      href = 1

      lhref = 2;

run;

quit;