JMPSURV Poster Handout

Report
A System for Analyzing Drug
Safety Data Using JMP®
JMP Discovery 2011 Conference
September 14, 2011
Peter Mroz
Manager, Statistical Programmer
Methods and Analysis
J&J Pharmaceutical Development, LLC, United States
The views expressed are my own and do not necessarily represent the views of J&J or any of its operating companies. This presentation is not meant to
endorse any product or company including the conference organization.
Introduction
• JMP® 9-based system analyzes drug safety data.
• Uses enhanced and easy to understand data manipulation and
visualization techniques
• Allows medically trained personnel to explore safety data and
identify adverse events of interest for a given drug.
• New features in JMP 9 provided significant advantages
– Add-ins for menus and application distribution
– Cell colorization
– Separate windows for each object.
• Advantages of using JMP
–
–
–
–
–
–
Computational speed
Interactivity
Linking between objects
Drill-down to underlying data
Data filtering
Ability to create user-friendly interfaces.
System Overview:
• Investigates adverse events for a drug
• Input data filtered by user to focus on area of interest
• Disproportionality analysis compares Reporting Fraction (RF) of events in
different periods
 Current RF = # Current Events for one PT / Total Current Cases
 Previous RF = # Previous Events for one PT / Total Previous Cases
 FRR = Current RF / Previous RF
• Users define MedDRA coding dictionary categories to group data
• Drill-down to underlying data
 Launch safety application for a selected case
 Retrieve additional case information for selected cases from safety
application
• Visualization via barcharts, trend plots and heat map grid
MedDRA Coding Dictionary
• MedDRA - Medical Dictionary for Regulatory Activities
• Standardizes medical terminology used to classify adverse
event information
SMQ: Standard MedDRA Query
• Hierarchy:
SMQs are groupings of terms that relate
to a defined medical condition or area
of interest
SOC: System Organ Class
HLGT: High Level Group Term
HLT: High Level Term
PT: Preferred Term
LLT: Low Level Term
Partial Sample MedDRA Hierarchy for PT=HEADACHE
Verbatim Term
LLT Name
PT Name
HLT Name
HLGT Name
SOC Name
SEVERE PALPITATIONS IN THE HEAD
HEAD THROBBING
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
FEELING OF FULLNESS IN HEAD
FULLNESS HEAD
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
SEVERE HEAD PRESSURE
HEAD PRESSURE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
FUZZY HEADACHE
HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
TEMPOROMANDIBULAR JOINT HEADACHE
TEMPORAL HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
EPISODES OF HEADACHE PRIOR TO REACHING ORGASM
HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
PRE-EXITING HEAD PAIN
HEAD PAIN
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
NITROGLYCERIN INDUCED HEADACHE
DRUG-INDUCED HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
PAIN IN BRAIN
PAIN HEAD
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
RELAPSED PAIN IN BRAIN
PAIN HEAD
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
ELECTRICAL SHOOTING PAINS IN HER HEAD
HEAD PAIN
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
OCCASIONAL BREAKTHROUGH HEADACHE
INTERMITTENT HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
INTERMITTENT PAIN IN FOREHEAD
FOREHEAD HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
HEADACHE PAROXYSMAL
HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
UNABLE TO LAY ON LEFT SIDE OF HEAD DUE TO HEAD PAIN
HEAD PAIN
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
ORTHOSTATIC POSITIONAL HEADACHE
HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
FRONTOTEMPORAL BILATERAL CEPHALEA
CEPHALGIA
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
PRESSURE HEADACHE THAT WAS WORSE THAN A MIGRAINE
HEAD PRESSURE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
CHRONIC HEADACHE WITH SUPERIMPOSED MIGRAINES
CHRONIC HEADACHES
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
ICE PICK HEADACHE
ICE PICK HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
INCREASE IN BREAKTHROUGH HEADACHE
HEADACHE AGGRAVATED
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
SEVERE BASAL HEADACHE
HEADACHE
HEADACHE
HEADACHES NEC
HEADACHES
NERVOUS SYSTEM DISORDERS
Tables Used by System
•
•
•
•
PT: Preferred Term summary table
HLT: High-Level Term summary table
DME: Designated Medical Events summary table
MedCat: MedDRA Category summary table for
user-defined MedDRA coding dictionary groupings
• Cell colorization used to distinguish time periods,
subtotals, trends
• Summary tables linked to main table by special JSL
code
Tables Used by System (cont)
Main data table
PT-level
summary table
HLT-level
summary table
DME-level
summary table
Custom
MedDRA-level
summary table
Table Cell Acts Like a Hyperlink
•
•
•
Users click on a single cell in the Case Number column.
Safety application is launched for that Case Number
A column formula does the work:
surv_col_names = surv_dataset << get column names(string);
if (!contains(surv_col_names, "Select Logic"),
// then
surv_dataset << new column("Select Logic", character,
formula(
// Need the table names inside the formula, esp for JMP 9 because of scoping
dst = current data table();
If (Selected(),
sel_cols = dst << get selected columns;
sel_rows = dst << get selected rows;
if (islist(sel_cols),
// then
if (nitems(sel_cols) == 1 & nrows(sel_rows) == 1 &
uppercase(char(sel_cols[1])) == "CASE NUMBER",
// then
one_case_no = column(dst, "Case Number")[sel_rows[1]];
myapp_url = "http://myapp.com/abcde/caseno=" ||
char(one_case_no);
web(myapp_url);
// Launches web browser for URL
);
// end 1 col, 1 row, AER col
// end islist
);
// end if selected
"x";
// Need a dummy value for the column
);
// end forumula
);
// end new column
column(surv_dataset, "Select Logic") << hide;
// Move the cursor to the first cell
surv_dataset << go to row(1) << Clear Select << go to(:Case Number)
<< clear column selection;
); // end if Select Logic column
);
Link Two Tables Not Normally Linked
• Summary tables derived from original dataset, but
not linked
• SDF dataset  Tabulations + Calculated Columns  PT
Summary Table
• Clicking rows in PT summary table highlights all rows
in main dataset containing selected PTs
• Clicking cells in Current, Previous, Cumulative
column sections highlights rows in main dataset for
PT + corresponding time period.
Link Two Tables Not Normally Linked (part 1)
/* File Name: Surveillance Cross Highlight.JSL
Description: Adds a formula to the tabulated data to link it back to the raw data table
*/
pt_col_names = surv_tab_dt << get column names(string);
if (!contains(pt_col_names, "Select Logic"),
// then
surv_tab_dt << new column("Select Logic", character,
formula(
// Need the table names inside the formula, esp for JMP 9 because of scoping
dt
= Data Table( ::surv_name );
dtab = Data Table( ::surv_name || " PT Worksheet" );
If (Selected(),
selected_cols = dtab << get selected columns;
selected_rows = dtab << get selected rows;
// Only perform the actions for the first selected row –
// the other rows are in the selected_rows list
if (row() == selected_rows[1],
// then
// Put all selected PT values into a list
ptx_list = column(dtab, "PT")[selected_rows];
Link Two Tables Not Normally Linked (part 2)
where_list = {};
// If no columns selected, JMP v8 returns Scriptable[], JMP v9 returns a list {}
if (islist(selected_cols) & nitems(selected_cols) > 0,
// then columns have been selected
for (k = 1, k <= nitems(selected_cols), k++,
one_col = char(selected_cols[k]);
//-------------------------------------------------------------------------------// Current column selected
if (one_col == "Curr Case Count" |
one_col == "Curr %",
insertinto(where_list, "(:Time Period == \!"Current\!")");
);
// end if Curr
if (one_col == "Curr Serious" |
one_col == "Curr % Serious",
insertinto(where_list, "(:Time Period == \!"Current\!" " ||
" & :Serious == \!"Y\!")");
);
// end if Curr Serious
if (one_col == "Curr Label" |
one_col == "Curr % Label",
insertinto(where_list, "(:Time Period == \!"Current\!" " ||
" & :Labeled == \!"Y\!")");
);
// end if Curr labeled
//-------------------------------------------------------------------------------// Similar logic for Previous and Cumulative column selections
);
// end loop over selected columns
);
// end if columns selected
Link Two Tables Not Normally Linked (part 3)
//--------------------------------------------------------------------------------
// OK we've figured out PTs that were selected and put any
// column selections into where_list. Build a complete
// where clause and execute it
select_expr = "dt << select where(contains(ptx_list, :PT
Name)";
if (nitems(where_list) > 0,
// then
// Convert list to a delimited string
where_clause = concat items(where_list, " | ");
select_expr = select_expr || " & (" || where_clause || "))";
// else
,
select_expr = select_expr || ")";
);
// Finally perform the select
eval(parse(select_expr));
);
// end if this is the first selected row
);
// end if selected()
"x";
// return a value - you get an error message without this.
);
// end formula definition
);
// new column
);
// end if column exists
// Hide this new column
:Select Logic << hide;
// end Surveillance Cross Highlight V3.JSL
MedDRA Category Builder
• Allow users to define drug-specific grouping of
data
• MedDRA categories defined by different
MedDRA levels: SOC, HLGT, HLT, PT, SMQ
• Picklists are loaded from Oracle database
• Summary table created for custom categories
• Can trend on custom categories
MedDRA Category Builder (cont)
Heat Map Grid Plot
•
•
•
•
Shows all PT/HLT values for entire time period
One PT/HLT per cell
Horizontal axis within cell shows time
Color indicates height of PT/HLT count or
reporting fraction
• Idea from last year’s Discovery conference!
Heat Map Grid Plot (cont)
• Click on cell
of interest
• Click Trend
Chart Button
Heat Map Grid Plot (trend chart)
• Trend chart created for Neutropenias HLT
Trend Chart
• Users can plot trends of PT, HLT, DME,
MedCAT values
• Y axis can be Case Count or Reporting
Percentage
• X axis can be Month, Quarter or Year
Trend Chart (cont)
• Trend chart showing 3 MedDRA
Categories by month
Conclusions
• JMP has powerful data manipulation and
visualization abilities
• With some JSL scripting it is possible to make
JMP jump!

similar documents