Vous êtes sur la page 1sur 4

An Useful Chart of the Global Assessment in Clinical Trials

Zhongwei Zhou, Novartis Pharmaceuticals Co., East Hanover, NJ


Chuanchieh Hsu, Novartis Pharmaceuticals Co., East Hanover, NJ
J. Michael Hardin, University of Alabama, Tuscaloosa, AL

ABSTRACT
Global assessment is designed to measure the rating of the
overall safety, the overall efficacy, and/or the effectiveness of a
treatment. This assessment integrates the investigators or
patients overall impression about the change in the state of the
treatment, and is usually a scale of ordered categorical ratings.
This type of assessment is widely used in the pharmaceutical
industry. It is often an interesting and difficult task for a
researcher to visually display global assessment without loss of
important detailed information. This paper illustrates how to use
SAS/BASE, SAS/STAT, and SAS/Graph to generate a chart
which shows the proportion of the subjects in each rating
category as well as summaries and p-values of the statistical
analysis in the graph. This graph will be very helpful in assisting
investigators in visualizing global assessment between
treatments.

INTRODUCTION (HEADER 1)
A global assessment (GA) measures an overall safety and/or an
overall efficacy effect in a clinical trial, which usually is an
important secondary variable in a study. This type of
assessment has been widely used in the pharmaceutical industry.
The assessment is a subjective measure, that rates the global
safety or efficacy assessment of the study drug by either clinician
or by patient. The ratings often consists of categories, such as
poor, fair, good, very good, and excellent. Using the graphical
presented, a visual presentation of the global assessment
showing the difference between the treatment groups can be
developed. This paper illustrates how to use SAS/BASE and
SAS/Graph to generate a chart which shows the proportion of
the subjects in each rating category as well as summaries and pvalues of the statistical analysis in the graph.
THE DATA
The example used in this paper is patients global assessment
data from a fictitious clinical study with three treatment groups,
one placebo and two active treatments. Each patient is asked to
record how he/she feels regarding the effectiveness of the
treatment in the CRFs at the end of the study.
For convenience, we assume the data have been cleaned, and
are ready for the final efficacy report. There are several
intermediate datasets to be prepared in this paper for the process
of drawing the graphics, and they contain different variables as
shown below:
** Patient counts for each rating category by
treatment **;
data count;
input rx category count;
cards;
1 0 10
1 1 5
1 2 4
1 3 19
1 4 4
2 0 17
2 1 10
2 2 4
2 3 6
2 4 3
3 0 6

3 1 3
3 2 3
3 3 6
3 4 2
;
** Descriptive Stats and Total Number of
Subjects for each treatment **;
data stat;
input rx total mean std;
cards;
1 43 2.05 1.40
2 40 1.20 1.34
3 21 1.75 1.45
;
** P-values of Statistical Analysis **;
data pvalue;
input prob rxsite rmserr;
cards;
0.038 0.591 1.344
;
In pharmaceutical industry, the global assessment summary in
efficacy tables generated by programmers is usually presented
like the one shown below.
Efficacy Table 1.1 (Page 1 of 1)
Subjects Global Evaluation (ITT patients)
StudyDrug Comparator Placebo
(N=43)
(N=40)
(N=21) RMSE Trt Trt*Site
__________________________________________________
P (0) 10(23.3%) 17(42.5%) 6(28.6%)
F (1)
5(11.6%) 10(25.0%) 3(14.3%)
G (2)
4( 9.3%) 4(10.0%) 3(14.3%)
V (3) 19(44.2%) 6(15.0%) 6(28.6%)
E (4) 4( 9.3%)
3( 7.5%) 2( 9.5%)
MEAN
STD
MEDIAN
RANGE

2.05
1.40
3.00
(0, 4)

1.20
1.34
1.00
(0, 4)

1.75
1.45
2.00
(0, 4)

1.344 0.038* 0.591*

* p-values were computed from an ANOVA model.


P: Poor, F: Fair, G: Good, V: Very Good, E: Excellent
The above efficacy table shows the differences among the
groups. The proportion of global assessment within the treatment
groups are analyzed via an ANOVA model, and then summarized
by treatment group as in the above table. The purpose of the
table is to present the summary of the global assessment and the
difference among the treatment groups. The following chart,
however, helps statisticians and clinicians to visualise the
magnitude of each component of the global assessment for each
treatment.
After the data are read into SAS, the data, count and stat, are
sorted and merged by treatment group in order to calculate the
proportion of each rating category in each group, and transposed
as they are needed.

data freq;
merge count stat(keep=rx total);
by rx;
pct=count*100/total;
run;
proc transpose data=freq
out=cnt(drop=_name_) prefix=cnt;
by rx;
var count;
id category;
run;
proc transpose data=freq
out=pct(drop=_name_) prefix=pct;
by rx;
var pct;
id category;
run;
data stat;
merge cnt pct stat;
by rx;
run;
The main part of the program is given below. It uses SAS/Base
and SAS/Graph annotation for the graph. The first step of
making this GA chart is to add the titles and/or footnotes.
*** Set Goptions ***;
goptions reset=all ftext=swiss gunit=pct
gsfmode=replace device=cgmof97l
ctext=black ctitle=black;
*** Titles ***;
data titles(keep=xsys ysys hsys function x y
text position size);
length position xsys ysys hsys $1
function $8 text $80;
retain xsys ysys hsys '3' function 'label'
position '5' x 50 y;
size=2.5; y=97;
text="Interesting Drug Study"; output;
size=2; y=94;
text="Subject Global Evaluation";
output;
size=2; y=91.5;
text="Intent-to-Treat Subjects";
output;
run;
*** Footnotes ***;
data footnote(keep=xsys ysys hsys position
function size x y text);
length xsys ysys hsys position $1
function $8 text $180;
retain function 'label' xsys ysys hsys '3'
size 1.5 x 10 y 15 position '6';
text='(a) P-values from ANOVA model.';
output;
run;
The second step is to create the frame of the chart, generate the
label of x-axis and set up the legend to indicate the symbols in
the chart.

length xsys ysys hsys $1 function $8;


retain xsys ysys hsys '3' size 0.2
function x y;
function='move'; x=10; y=85; output;
function='draw'; x=90; output;
y=47; output;
x=10; output;
y=85; output;
run;
** Generating the label of x-axis **;
data xlabel(keep=angle xsys ysys hsys
position function size x y
text style);
length xsys ysys hsys position $1
function style $8 text $80;
retain xsys ysys hsys '3' angle 0
position function size x y style;
y=49; size=2; style='swiss';
function='label'; text="Poor - Fair";
position='4'; x=51; output;
style='';
size=0.1; function='move'; x=39; output;
function='draw'; x=25; output;
y=49; size=2; style='swiss';
function='label';
text="Good - Excellent";
position='6'; x=57; output;
style='';
size=0.1; function='move'; x=74; output;
function='draw'; x=83; output;
size=2; position='5'; style='marker';
function='label';
x=25; text='A'; output;
x=83; text='B'; output;
run;
*** Setting legend ***;
data legend(keep=xsys ysys hsys position
function size x y text line
style color);
length xsys ysys hsys position $1
function color style $8 text $80;
retain xsys ysys hsys '3' size position x
y function;
*** Frame ***;
size=0.1; function='move'; x=75; y=82;
output;
function='draw'; y=67.8; output;
x=88; output;
y=82; output;
x=75; output;
*** Patterns ***;
size=0.2;
function='move'; x=76; y=81.2; output;
function='bar'; x=79; y=80; style="x1";
line=0; color='green'; output;
style=''; color='black'; line=1;

** Creating frame of the Chart **;

function='move'; x=76; y=78.6; output;


function='bar'; x=79; y=77.4; style="l2";
line=0; color='red'; output;
style=''; color='black'; line=1;

data frame(keep=xsys ysys hsys function x y


size);

function='move'; x=76; y=76; output;


function='bar'; x=79; y=74.8; style="x3";

line=0; color='purple'; output;


style=''; color='black'; line=1;
function='move'; x=76; y=73.4; output;
function='bar'; x=79; y=72.2; style="l3";
line=0; color='cyan'; output;
style=''; color='black'; line=1;
function='move'; x=76; y=70.8; output;
function='bar'; x=79; y=70; style="x4";
line=0; color='blue'; output;
style=''; color='black'; line=1;
*** Category Name ***;
size=1.8; position='6'; function='label';
x=79.5; style='swiss';
y=80.8; text='Poor(0)'; output;
y=78.2; text='Fair(1)'; output;
y=75.6; text='Good(2)'; output;
y=73;
text='Very Good(3)'; output;
y=70.4; text='Excellent(4)'; output;
run;
The most difficult and complicated step is to create the summary
table within the graph. It consists of three sub-tasks: (1) Draw the
cells (data table); (2) Show the descriptive statistics (data text);
(3) Show the p-values of statistical analysis (data pvtext). The
dataset ANNO for the annotation of this chart is thus created by
merging all of the datasets since the first major step.
data table(keep=xsys ysys hsys function x y
text position size style);
length position xsys ysys $1
function style $8 text $133;
retain xsys ysys hsys "3" position x y
function size;
***** Frame *****;
size=0.1; function='move';
x=10; y=45; output;
function='draw'; x=90; output;
y=17; output;
x=10; output;
y=45; output;
***** Horizonal Lines *****;
function='move'; x=27; y=41; output;
function='draw'; x=90; output;
do i=1 to 3;
function='move'; x=10;
y=45-(i+1)*4; output;
function='draw'; x=90; output;
end;
function='move'; x=10; y=25; output;
function='draw'; x=90; output;
function='move'; x=27; y=21; output;
function='draw'; x=90; output;
***** Vertical Lines *****;
x=27; function='move'; y=45; output;
function='draw'; y=25; output;
do i=1 to 6;
x=27+i*9;
function='move'; y=41; output;
function='draw'; y=25; output;
end;
do j=1 to 3;
x=27+(j-1)*21;

function='move'; y=25; output;


function='draw'; y=17; output;
end;
*** Generating Text ***;
function='label'; size=2; style='swiss';
position='3'; x=10.5; y=38;
text="Treatment"; output;
position='5'; x=58.5; y=43.2;
text="Number (%) of Subjects in Each
Category"; output;
y=39.2;
do i=0 to 6;
if i=6 then text='S.D.';
else if i=5 then text='Mean';
else text=trim(left(put(i, 8.)));
x=27+(i+0.5)*9; output;
end;
*** Labels of p-values ***;
position='6'; x=10.5; y=21;
text="P-values"; output;
size=1.7; position='5'; y=23.2; x=37.5;
text='Treatment Pv (a)'; output;
x=58.5; text='Trt*Site Pv (a)'; output;
x=79.5; text='RMS Error (a)'; output;
run;
data text(keep=xsys ysys hsys position
function size x y text style);
length xsys ysys hsys position $1
function style $8 text $30;
retain function 'label' xsys ysys hsys "3"
style 'swiss' x y size position;
set stat;
by rx;
array cnts{0:4} cnt0-cnt4;
array pcts{0:4} pct0-pct4;
*** Treatment Names ***;
size=2; x=10.5;
text=trim(left(put(rx, rx.)))||' (n='||
trim(left(put(total, 8.)))||')';
position='6'; y=45-(rx+1.5)*4; output;
position='5'; size=2; y=45-(rx+1.5)*4;
do j=0 to 4;
x=27+(j+0.5)*9;
text=trim(left(put(cnts{j}, 8.)))||
' ('||trim(left(put(pcts{j}, 8.1)))||
'%)';
output;
end;
x=76.5; text=trim(left(put(mean, 8.2)));
output;
x=85.5; text=trim(left(put(std, 8.2)));
output;
run;
data pvtext(keep=function xsys hsys text ysys
position x y size style);
length xsys ysys hsys position $1
function style $8 text $20;
retain function 'label' xsys ysys hsys "3"
position '5' style 'swiss' size 2
y 20.2 x;
set pvalue;
array pvals{3} prob rxsite rmserr;
do i=1 to 3;
x=27+(i-0.5)*21;

if pvals{i}=. then text="N/A";


else if pvals{i}<0.001 then
text='< 0.001';
else
text=trim(left(put(pvals{i}, 8.3)));
output;
end;
run;
*** Annotate Dataset ***;
data anno;
set titles footnote pvtext frame legend
xlabel table text;
run;
The Proc gchart is used to make this GA chart with the titles,
legend and annotation for summary tables after the first two
rating categories are reversed. Also note that the order of the
color and value in the first two pattern statements is also
reversed from those in the data legend.
*** Generating graph ***;
data stat(keep=rx var pct);
set stat;
var=0; pct=-pct1; output;
var=1; pct=-pct0; output;
var=2; pct=pct2; output;
var=3; pct=pct3; output;
var=4; pct=pct4; output;
run;
pattern1
pattern2
pattern3
pattern4
pattern5

value=l2
value=x1
value=x3
value=l3
value=x4

color=red repeat=1;
color=green repeat=1;
color=purple repeat=1;
color=cyan repeat=1;
color=blue repeat=1;

axis1 label=none origin=(24, 55) minor=none


major=(h=-1) length=60
order=(-100 to 100 by 25)
value=(h=2 tick=1 j=c '100'
tick=2 j=c '75'
tick=3 j=c '50'
tick=4 j=c '25'
tick=5 j=c '0'
tick=6 j=c '25'
tick=7 j=c '50'
tick=8 j=c '75'
tick=9 j=c '100');
axis2 label=none style=0 value=(h=2);
proc gchart data=stat;
format rx rx.;
hbar rx / type=sum sumvar=pct maxis=axis2
raxis=axis1 nostats space=2
discrete nolegend annotate=anno
subgroup=var;
run;
Finally, the global assessment is complete and shown in Figure
1.

CONCLUSION
Since global assessment is widely used in the pharmaceutical
industry, several different ways have been proposed to
summarize the data and draw the graph. For example, a vertical
bar chart (either using SAS or Microsoft Excel) can be used to
show the proportions of each category of the global assessment
by treatment group. Some clinicians only like to plot the
categories of good, very good, and excellent since those are the
categories that they find of most interest. However, we would
argue that this is a partial picture of the results, especially if only
those 3 categories are shown. It is better to have a summary of
the assessment presented with the graph and the results of the
statistical analysis since this tells all in one graph, and is very
easy for clinicians and statisticians to interpret for a given study.

REFERENCES
SAS Institute Inc., SAS/GRAPH software, Volumes 1 & 2:
Reference Version 6, First Edition, Cary NC: SAS Institute Inc.,
1990.
SAS Institute Inc., SAS/BASE Users Guide, Version 6, Fouth
Edition, Cary NC: SAS Institute Inc., 1990.

CONTACT INFORMATION
Your comments and questions are valued and encouraged.
Contact the author at:
Zhongwei Zhou
Novartis Pharmaceuticals Co.
One Health Plaza
East Hanover, NJ 07936
Work Phone: (973) 781-5652
Fax: (973) 781-3032
Email: zhongwei.zhou@pharma.novartis.com
Jay Hsu, Ph.D
Novartis Pharmaceuticals Co.
One Health Plaza
East Hanover, NJ 07936
Work Phone: (973) 781-8520
Fax: (973) 781-6498
Email: jay.hsu@pharma.novartis.com
SAS and all other SAS Institute Inc. product or service names are
registered trademarks or trademarks of SAS Institute Inc. in the
USA and other countries. indicates USA registration.
Other brand and product names are trademarks of their
respective companies.

Vous aimerez peut-être aussi