SASとHTMLアプリケーションによる
CDISC ADaM形式の解析用データセットを用いた
有害事象の解析帳票・グラフ簡易作成ツールの開発事例
2
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
3
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
発表の動機
– 臨床試験において、開発中の薬剤の安全性プロファイルを分析す
るために統計担当者が必ず作成する有害事象の集計表。全体、副
作用、発現時期別・・・(集計方法の数だけ山ほど)。
4
(個人的に)集計表だけで
は、有害事象発現プロファ
イルについて、対照群との
傾向の違い等、全体像をイ
メージするのが難しかっ
た。。
発表の動機
– 集計表と共にグラフを眺めてプロファイルを確認することで、
「
全体のイメージ」
を頭に直接インプットできると考えた。しかも
、SASには高品質なグラフを作成する機能が充実している。
5
どんな事象の発現率が
高い(低い)、対照薬
群と比べてどうかetc..
発表の動機
– 正式な解析結果にグラフを含めるわけではないのでお手軽に
、かつ高品質なグラフを作りたい。
– ユーザーフレンドリーな画面上でパラメータを入力して有害
事象の集計表とグラフを作りたい。
– 入力データ構造は標準化してその都度データセット名や変数
名を変更したくない(できれば集計方法も)。
– そんな贅沢な悩みを解決してくれる方法が・・・
6
発表の動機
– 正式な解析結果にグラフを含めるわけではないのでお手軽に
、かつ高品質なグラフを作りたい。
⇒SAS!
– ユーザーフレンドリーな画面上でパラメータを入力して有害
事象の集計表とグラフを作りたい。
⇒HTMLアプリケーション(HTA)!
– 入力データ構造は標準化してその都度データセット名や変数
名を変更したくない(できれば集計方法も)。
⇒CDISC!
7
8
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
CDISCのADaM形式
– CDISCとは、臨床試験や臨床研究において、データの収集、交換
、提出等の標準化を推進する団体
– 近年、米国では承認申請の際にFDAに提出するデータセット形式
として標準的に採用されつつある。
– ADaM(Analysis Data Model)は臨床試験の解析用データセ
ットの標準形式
– 2012年6月現在で、ADaMにおいては、
ADSL、ADAE、BDS
、ADTTE(条件付きでBDSの一部)
の標準構造がリリースされ
ている。データセット名は「AD」から始まる(8文字以内)。
– ADaMには4種類のメタデータ(Analysis dataset metadata,
Analysis variable metadata, Analysis parameter
value-level metadata, Analysis results metadata)が規定されてい
る。
CDISCのADaM形式
– ADaMの各データセットの概要
10
種類
概要
ADSL
被験者情報を格納している。被験者ごとに1レコードを持つ。
BDS
※基本的なADaMのデータセットの構造として定義され、臨床検査項
目等の解析項目とそれらの結果を縦方向に格納する。解析項目・時
点で1レコードを持つ。
ADAE
有害事象の情報を格納している。事象ごとに1レコードを持つ。
BDSの構造には準拠していない。
ADTTE 生存時間解析用の情報を格納している。基本的には被験者ごとに1レ
コードを持つ。BDSの構造に従ったデータセットとしてリリースさ
れている(イベントが1度しか発生せず、結果の2値データが変数
AVALに格納されている場合)。
今回想定する状況
– 並行群間比較試験での有害事象の発現プロファイルの比較
– 試験名:XXX-YYY
– 投不群はXXX 10mgとプラセボ群の2群
– 解析用データセットはADaMのADSLとADAE
11
ADSL
– 被験者情報を格納している。被験者ごとに1レコードを持つ。
– Analysis Variable Metadata(変数情報)
ADSL
– データ(抜粋)
ADAE
– 有害事象の情報を格納している。事象ごとに1レコードを持つ。
– Analysis Variable Metadata(変数情報)
ADAE
– データ(抜粋。AETERMは日本語です。。)
有害事象の集計に用いる主な変数
16
データセット 変数
属性
内容
ADAE、ADSL USUBJID
文字
被験者ID(申請単位で一意)
ADAE
TRTA
文字
投与群(文字、ADSLのTRT01Aと同じ値を格納)
ADAE
TRTAN
数値
投与群(数値、ADSLのTRT01ANと同じ値を格納)
ADAE
AEBODSYS
文字
MedDRAでコーディングされたSOC(System Organ Class)名
ADAE
AEDECOD
文字
MedDRAでコーディングされたPT(Preferred Term)名
ADAE
RELGR1N
数値
因果関係(1:Not Related、2:Related)
ADAE
SAFFL
文字
安全性解析対象フラグ(Y:採用)
ADAE
TRTEMFL
文字
治療期有害事象(TEAE)フラグ(Y:TEAE)
ADSL
TRT01A
文字
投与群(文字):Placebo、XXX 10mg
17
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
集計内容
– 本稿では、SOCごと・PTごとの集計のみを行う(SOCとPTを
同時には出力しない)。
– 有害事象の発現例数と発現率を算出する。
SASプログラムにおいて適用する条件・処理フロー
– SQLプロシジャの使用(発現例数と発現率を同時に算出)
– 安全性解析対象集団の絞り込み(SAFFL = "Y")
– 治療期に発現した有害事象の絞り込み(TRTEMFL = "Y")
– right joinによるADAE由来のデータセットとADSL由来のデー
タセットの外部結合
18
ADAEからPTごとに一意なデータを作成
投不群・PTごとに例数・発現率を算出
ADSLから解析対象例数を算出
SASプログラム
19
*** 有害事象の発現例数及び発現率を算出 ;
proc sql ;
create table _AECAL as
select B.TRTAN, B.TRTA, A.AEDECOD,
count(A.AEDECOD) as _N, _ALL,
count(A.AEDECOD)/_ALL*100 as _PCT
from
(select distinct SUBJID, TRTAN, TRTA, AEDECOD from ADAE
where SAFFL = "Y" and
TRTEMFL = "Y"
) as A
right join
(select TRT01AN as TRTAN, TRT01A as TRTA, count(SUBJID) as _ALL
from (select distinct SUBJID, TRT01AN, TRT01A from ADSL
where SAFFL = "Y"
)
group by TRT01AN, TRT01A) as B
on A.TRTA = B.TRTA and A.TRTAN = B.TRTAN
group by B.TRTAN, B.TRTA, A.AEDECOD
order by A.AEDECOD ;
quit ;
被験者ごとに一意なデータを生成
して、投不群ごとの例数を算出
被験者・事象ごとに一意なデータを生
成して、発現例数と発現率を算出
集計結果
– 投不群・事象ごとに発現例数と発現率が算出された。このデータセット
(_AECAL)が集計表やグラフを作成する際のベースとなる。
20
発現率(%)
発現例数
投不群
PT
21
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
有害事象に関するグラフの作成
– どのような事象が高頻度で発現しているか等を視覚的に容易に確認
できることから、安全性評価においては非常に有効な手段となる。
– SASには高品質なグラフを作成する機能が用意されている。
– 本稿で作成するグラフは下表の4種類。
22
グラフの種類
概要
プロシジャ
棒グラフ
各投不群の発現率の棒グラフを重ね合わせて出力する。SGPLOT
バタフライプロット 各投不群の発現率の棒グラフを逆方向に出力する。
SGPLOT
リスク比のプロット 各投不群の発現率、リスク比及び信頼区間のグラフを
出力する。
TEMPLATE
(GTL)
SGRENDER
タイルチャート
各PT(またはSOC)の発現例数に比例した大きさの
タイルを出力する。各タイルは発現率で色分けされる。
GTILE
棒グラフ
– 合計の発現率が高い順に各投不群の棒グラフを重ねて表示する。
– どの事象に投不群間で発現率の違いがあるか容易に確認できる。
– 集計結果を格納した_AECALから下記データセット_OUTを作成
しておく。
23
各群の発現例数
各群の発現率
PT
棒グラフ
– SGPLOTプロシジャのhbarステートメントを使用する。
24
ods graphics on / width=9in height=7in ; *--- グラフの大きさを指定 ;
proc sgplot data=_OUT ;
where _PAGE = 1 ; *--- 最初の26事象のみ出力 ;
hbar AEDECOD / response=_P2 barwidth=0.8 ; *--- XXX 10mg群 ;
hbar AEDECOD / response=_P1 barwidth=0.5 transparency=0.5 ; *--- Placebo群(透明) ;
yaxis discreteorder=DATA display=(nolabel) ; *--- 縦軸出力順(ラベル未出力) ;
xaxis values=(0 to 15 by 5) label='Incidence Rate(%)' ; *--- 横軸目盛り&ラベル指定 ;
run ;
ods graphics off ;
バタフライプロット
– 2つのカテゴリについて、それぞれ棒グラフを逆側に出力する。
25
*** バタフライプロット用の発現率変数作成 ; data _OUT_B ; set _OUT ; _P1x = -1*_P1 ; *--- プラセボ群の発現率(左向き用) ; label _P1x="&_TRTL1" ; run ; proc format ;picture _PCTF low - high = "009" ; *--- 全ての値を正の数出力 ;
run ;
*** バタフライプロットの作成 ;
title "Butterfly Plot for Treatment Emergent Adverse Events by Preferred Term" ;
ods graphics on / width=9in height=7in ; *--- グラフの大きさを指定 ;
proc sgplot data=_OUT_B ;
where _PAGE = 1 ; *--- 最初の26事象のみ出力 ;
hbar AEDECOD / response=_P1x fillattrs=(color=lightgray) ; *--- Placebo群 ;
hbar AEDECOD / response=_P2 fillattrs=(color=darkgray) ; *--- XXX 10mg群 ;
yaxis discreteorder=DATA display=(nolabel) ; *--- 縦軸出力順(ラベル未出力) ;
xaxis values=(-15 to 15 by 5) label='Incidence Rate (%)' ; *--- 横軸目盛り&ラベル指定 ;
format _P1x _P2 _PCTF. ; *--- 全ての値を正の数出力 ;
run ;
ods graphics off ; title ;
プラセボ群の発現率を
負の数に変換しておく。
負の数を正の数で表示
するようフォーマット
を作成しておく。
バタフライプロット
– 2つのカテゴリについて、それぞれ棒グラフを逆側に出力する。
26
プラセボ群
XXX 10mg群
有害事象の発現率及びリスク比プロット
– 左側にAEの各群の発現率プロット・右側にリスク比+信頼区間のプロットを出力
– どの事象が対照薬群に比べてリスク比が高いか容易に確認できる。
– GTLによりテンプレートを作成し、SGRENDERプロシジャで呼び出してグラフを出力
– あらかじめAEの発現率、リスク比と信頼区間を格納したデータセットを作成しておく!
27
有害事象の発現率及びリスク比プロット
– 左側にAEの各群の発現率プロット・右側にリスク比+信頼区間のプロットを出力
– どの事象が対照薬群に比べてリスク比が高いか容易に確認できる。
– GTLによりテンプレートを作成し、SGRENDERプロシジャで呼び出してグラフを出力
– あらかじめAEの発現率、リスク比と信頼区間を格納したデータセットを作成しておく!
28
各群の発現率(%)
リスク比(信頼下限・上限)
有害事象
出力順
Graphical Template Language (GTL)の記述
29
proc template ;
define statgraph _AEPCTRR ;
dynamic VAR1 VAR2 AE_NAME EST LOWER UPPER TITLE HLABEL ; begingraph ;
entrytitle TITLE ; layout lattice
/ columns=2 rows=1 columngutter=3px columnweights=(.5 .5) rowdatarange=unionall ;
rowaxes ; rowaxis ; endrowaxes ; columnaxes ; columnaxis / label=HLABEL ; endcolumnaxes ;
layout overlay / xaxisopts = (linearopts=(tickvaluesequence=(start=0 end=&_MAXP increment=5) tickvaluepriority=true)) yaxisopts = (display=(line ticks tickvalues)) ;
referenceline y=AE_NAME / lineattrs=(color=lightgray pattern=2) ; scatterplot x=VAR1 y=AE_NAME
/ markerattrs=(symbol=trianglefilled) name="T1" legendlabel="&_TRTL1" ; scatterplot x=VAR2 y=AE_NAME
/ markerattrs=(symbol=square) name="T2" legendlabel="&_TRTL2" ; discretelegend "T1" "T2" / valign=bottom ;
endlayout ;
layout overlay / xaxisopts = (type=log logopts=(base=2 tickintervalstyle=logexponent)) ; referenceline x=1 / lineattrs=(color=lightgray pattern=1) ;
referenceline y=AE_NAME / lineattrs=(color=lightgray pattern=2) ; scatterplot x=EST y=AE_NAME / xerrorlower = LOWER
xerrorupper = UPPER
errorbarattrs = (pattern=1 color=black)
markerattrs = (color=black symbol=circlefilled) ; endlayout ; endlayout ; endgraph ; end ; run ;
発
現
率
リ
ス
ク
比
SGRENDERプロシジャ
– templateでテンプレートを読み込んでグラフを作成
30
ods graphics on / width=9in height=7in ;
proc sgrender data=_PCTRR_OUT
template=_AEPCTRR
;
where _PAGE = 1 ; *--- 最初の26事象のみ出力 ;
label _P1 = "Percentage" Value = 'Relative Risk with 95% CI' AEDECOD = '' ;
*--- templateで定義されているdynamic変数の指定 ;
dynamic
VAR1 = "_P1" VAR2 = "_P2" AE_NAME = "AEDECOD"
EST = "Value" LOWER = "LowerCL" UPPER = "UpperCL"
TITLE = "Percentages and Relative Risks (Base=2)"
HLABEL = "Percentage and Relative Risks" ;
run ;
ods graphics off ;
動的変数(プロシジャ実行時に値を不える)
dynamic VAR1 VAR2 AE_NAME EST LOWER UPPER TITLE HLABEL ;
GTLではdynamic変
数として定義する。
出力結果(再掲)
31
発
現
率
リ
ス
ク
比
layout lattice / columns=2 rows=1 columngutter=5px columnweights=(.5 .5) rowdatarange=unionall ;
タイルチャート
– タイルと呼ばれる四角形の大きさで値の大小を表すグラフ
– 有害事象の集計においては、投不群・有害事象ごとの発現例数や
発現件数等をタイルの大きさで表すことができる。
– SASでは、GTILEプロシジャを使用してタイルチャートを作成
することができる。
32
goptions reset=all ftext="MS Gothic" hsize=9in vsize=7in htext=11pt device=javaimg ; ods pdf ;
title "Tile Chart for Treatment Emergent Adverse Events by Preferred Term" ; proc gtile data=_AE_TILE ;
label _N = "N" _PCT = 'Percentage (%)' TRTA_N = "Treatment" ; flow _N tileby=(TRTA_N AEDECOD)
/ detaillevel=2 labellevel=2 colorramp=(cxFFFFFF cxF5DEB3 cxFA8072) colorvar=_PCT ;
format TRTA_N _TRTF. ; run ; quit ; title ; ods pdf close ;
各タイルを発現率で色分け
flowステートメントで発現
例数を指定
タイルチャート(出力結果)
33
colorramp=(cxFFFFFF cxF5DEB3 cxFA8072) colorvar=_PCT
flow _N tileby=(TRTA_N AEDECOD)
プラセボ群 XXX 10mg群
タイルの大きさ:
発現例数
色の濃さ:
発現率
34
1.
有害事象の集計とグラフ
テストデータ(ADSLとADAE)
有害事象の集計
有害事象のグラフ
2.
HTMLアプリケーション(HTA)
HTAによるSASの実行
3.
有害事象の集計・グラフ作成を行うHTA「AEくん」の開
発事例
ADaMによる入力パラメータの簡略化
AEくんの構成・出力結果
4.
おわりに
HTAとは
– Windows上で動作するアプリケーションであり、その中にHTML、
JavaScript、Jscript等を組み込んでそれらの機能を実装することが
できる(拡張子はhta)。
– HTAの基本的な機能及びSASとの連携の詳細については、舟尾ら(
2008)を参照されたい。
– HTA導入のメリット
• ユーザーフレンドリーなGUIを構築できる。SASの実行も可能。
• Webサーバー等の導入が丌要であり、コストがかからない。
• HTMLやJavaScriptのごく基本的な知識のみで作成が可能。
35
HTML:画面
JavaScript:処理
詳細は舟尾ら(2008)
HTAによるSASマクロ変数の生成
– フォルダの参照、テキストボックス等で指定したパラメータをSAS
マクロ変数に変換する。
– 生成されたparameter.sasファイルは%letステートメントでマクロ
変数に値を格納するSASプログラムファイル。
36
filesフォルダの
parameter.sasファイル
HTA本体のフォルダ
HTA本体の画面
HTAによるSASの実行
– 前頁のHTAにSASの実行ロジックを追加し、実行ログを_EXE.logに
出力する。
– parameter.sasとあらかじめ作成しておいたhta_to_sas.sasを実行
する_EXE.sasを生成して実行する。
37
_EXE.sas
parameter.sas
hta_to_sas.sas
_EXE.log
%inc './files/parameter.sas' ;
%inc './files/hta_to_sas.sas' ;
%put *** _PATH: &_PATH *** ; %put *** _TEXT: &_TEXT *** ; %put *** _RADIO: &_RADIO *** ; %put *** _CHECK1: &_CHECK1 *** ; %put *** _CHECK2: &_CHECK2 *** ;
*** _PATH: C:/temp/ *** *** _TEXT: 文字列の入力 *** *** _RADIO: 1 ***
*** _CHECK1: 1 *** *** _CHECK2: 0 ***