1 / 20

A System for Analyzing Drug Safety Data Using JMP®

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.

dinh
Download Presentation

A System for Analyzing Drug Safety Data Using JMP®

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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.

  3. 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

  4. MedDRA Coding Dictionary • MedDRA - Medical Dictionary for Regulatory Activities • Standardizes medical terminology used to classify adverse event information • Hierarchy: SMQ: Standard MedDRA Query 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

  5. Partial Sample MedDRA Hierarchy for PT=HEADACHE

  6. Tables Used by System • PT: Preferred Term summary table • HLT: High-Level Term summary table • DME: Designated Medical Events summary table • MedCat: MedDRACategory 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

  7. 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

  8. 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

  9. 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.

  10. 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 rawdata 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];

  11. 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

  12. 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

  13. 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

  14. MedDRA Category Builder (cont)

  15. 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!

  16. Heat Map Grid Plot (cont) • Click on cell of interest • Click Trend Chart Button

  17. Heat Map Grid Plot (trend chart) • Trend chart created for Neutropenias HLT

  18. 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

  19. Trend Chart (cont) • Trend chart showing 3 MedDRA Categories by month

  20. Conclusions • JMP has powerful data manipulation and visualization abilities • With some JSL scripting it is possible to make JMP jump!

More Related