Rとcdisc@moss10 公開用
-
Upload
masafumi-okada -
Category
Science
-
view
134 -
download
3
Transcript of Rとcdisc@moss10 公開用
RとCDISC岡田 昌史
CONTENTS
• Self Introduction
• CDISC Introduction and History
• R packages (R4CDISC)
• Other Softwares(OpenCDISC, OpenClinica)
本日の発表• いかに楽をして、ミスのないデータ解析をするか?の方法論を研究
• 複数のツールを併用して、いままでになかった処理過程を生み出すには….製品にまで落とし込まれたソフトウェアは適していない
• API等を備えた柔軟な商用ソフトウェアもあるが、高価
• 方法論そのものを開発する研究にはオープンソースソフトウェアが適している
• やっぱりたくさんの人に使ってもらいたいしね
RとCDISC• オープンソースツールを組み合わせて、いかに楽をして、ミスのないデータ解析をするか?
• 楽をできる≒ミスが起こりにくい≒シンプル
• 解析で一番大変な部分: データのもつ「値」に対応する「意味」すなわちメタデータを解析者が理解すること
• では、データに対応するメタデータを解析ソフトウェア自身が自動的に理解すればよい(セマンティックWeb, RDF/OWL, Archetypesと同様の発想)
• 解析ソフトウェア (R) にメタデータ標準(CDISC)を組み合わせてみる
CDISCとは• CDISC(Clinical Data Interchange Standards) Consortium による医学領域での臨床試験データの標準規格
• データの収集、クリーニング、蓄積、解析、レポートまでを包括している
• 語彙(Terminology)の統一、メタデータ(測定日など)の厳密な記述に重点がおかれており、実用性が高い
• 日米(日本は2016年度より)の医薬品承認機関に新しい薬の有効性、安全性の根拠となる研究データを提出する際のフォーマットとなっている
CDISCとは
• データマネジメント, 統計解析の過程では、規格群のうちSDTM(Study
Data Tabulation Model), AdAM(Analysis Data Model) が使われる
• 規格書ドラフトにアクセスするためには会員になる必要があるけれども、正式にリリースされた規格書は無料でダウンロードでき、使用できる。
• 臨床試験のデータを念頭に置いているが、CDASHなど観察研究にも適した規格もあり、臨床試験のみで使うのはもったいない。メタデータへのアクセス手法が標準化されるのは研究者にとってもメリットが大きい。
CDISC Annual Report 2013 p.5 より引用
CDISCの歴史• 1997年にVolunteer Groupとして設立
• 2000年にNPOに
• 2001年ごろからOperational Data Model(ODM): XMLによるデータ転送
• 2002年にAdAM
• 2003年にSDTM
• 2005年にDefine.xml(ODMによるメタデータ表現)
• 2008年にCDASH(症例報告書の標準化)
• 2014年 Dataset-XML(ODMによるデータ表現), SHARE(Resource Description Frameworkによる規格表現)
CDISCとRとのかかわり• CDISCでは、データはSAS xportフォーマットを用いることになっていた
• Rでは、foreignパッケージではxport形式のファイルを書き出せない(write.foreign(package=“SAS”)はカンマ区切りを読むSASコード自体を出力)
• 2007年にSASxportパッケージが登場してxport形式ファイルの書き出しができるようになった
• とはいえ、xport形式では日本語の扱いがどうなるのかはっきりしない、変数名の制限などがある…
• CDISCもODMベースのXMLによるデータ表現に移行(昨年リリースされたDataset-XML)
するので、今後Rとの親和性が上がるかも?
Rについて
• GNU R
• 統計解析ソフトウェアのデファクトスタンダード
• 6789種の「パッケージ」による機能拡張
解析とメタデータSTUDYID DOMAIN USUBJID DASEQ DATESTCD DATEST DAORRES DAORRESU"CDISC01
" "DA" "CDISC01.100008" 1 "DISPAMT" "Dispense
d Amount" "40" "TABLET"
"CDISC01" "DA" "CDISC01
.100008" 2 "DISPAMT" "Dispensed Amount" "80" "TABLET"
"CDISC01" "DA" "CDISC01
.100008" 3 "RETAMT" "Returned Amount" "22" "TABLET"
"CDISC01" "DA" "CDISC01
.100008" 4 "RETAMT" "Returned Amount" "35" "TABLET"
"CDISC01" "DA" "CDISC01
.100014" 1 "DISPAMT" "Dispensed Amount" "80" "TABLET"
"CDISC01" "DA" "CDISC01
.100014" 2 "DISPAMT" "Dispensed Amount" "80" "TABLET"
USUBJIDは重複は許されない
名前は標準用語に従っている
(CDISC Terminology)
別々の項目が同じ列に入っている
(CDISC Normalized Data)
項目によって数値と判断すべきか、文字列とすべきかが異なる
メタデータを知らなければ解析できない
CDISCのメタデータ定義• Define-XMLの導入
単なる表から、メタデータ(XMLで表現)付きのデータに。
• Dataset-level Metadata ― データセット全体に、どんな表が含まれていなれればならないか
• Variable-level Metadata ― それぞれの表に、どんな列が含まれているのか
• Value-level Metadata ― それぞれの列に、どんな値が含まれているのか
• Dataset-XMLの導入Defineと対になり、データベースそのものをXMLで表現(シリアライズ)
関連するパッケージ• CRANに登録されているCDISC関連パッケージ
• ODMConverter, compareODM by Martin Dugas
• R4CDISC by Ippei Akiya LGPL-3, GitHubにあり
R4CDISC• Define-XML 2.0を読み込ませて、Dataset Level Metadataを抽出
> str(getDLMD("define2-0-0-example-sdtm.xml"))
$ IGD_OID : chr "IG.TA" "IG.TE" "IG.TI" "IG.TS" ...
$ IGD_Domain : chr "TA" "TE" "TI" "TS" ...
$ IGD_Name : chr "TA" "TE" "TI" "TS" ...
$ IGD_Repeating : chr "No" "No" "No" "No" ...
$ IGD_IsReferenceData : chr "Yes" "Yes" "Yes" "Yes" ...
$ IGD_SASDatasetName : chr "TA" "TE" "TI" "TS" ...
$ IGD_Purpose : chr "Tabulation" "Tabulation" "Tabulation" "Tabulation" ...
$ IGD_Structure : chr "One record per planned Element per Arm" "One record per planned Element" "One record per I/E criterion" "One record per trial summary parameter value" ...
$ IGD_Class : chr "TRIAL DESIGN" "TRIAL DESIGN" "TRIAL DESIGN" "TRIAL DESIGN" ...
$ IGD_ArchiveLocationID: chr "LF.TA" "LF.TE" "LF.TI" "LF.TS" ...
$ IGD_Description : chr "Trial Arms" "Trial Elements" "Trial Inclusion/Exclusion Criteria" "Trial Summary" ...
$ IGD_title : chr "Trial Arms" "Trial Elements" "Trial Inclusion/Exclusion Criteria" "Trial Summary" ...
R4CDISC• Define-XML 2.0を読み込ませて、Variable Level Metadataを抽出
> str(getVarMD("define2-0-0-example-sdtm.xml"))
'data.frame': 414 obs. of 10 variables:
$ IR_ItemOID : chr "IT.STUDYID" "IT.AE.DOMAIN" "IT.USUBJID" "IT.AE.AESEQ" ...
$ IGD_Name : chr "AE" "AE" "AE" "AE" ...
$ IR_OrderNumber : int 1 2 3 4 5 6 7 8 9 10 ...
$ IR_Mandatory : chr "Yes" "Yes" "Yes" "Yes" ...
$ IR_KeySequence : int 1 NA 2 NA NA NA NA 3 NA NA ...
$ ID_Name : chr "STUDYID" "DOMAIN" "USUBJID" "AESEQ" ...
$ ID_Length : chr "7" "2" "14" "1" ...
$ ID_DataType : chr "text" "text" "text" "integer" ...
$ ID_Label : chr "Study Identifier" "Domain Abbreviation" "Unique Subject Identifier" "Sequence Number" ...
$ ID_SASFieldName: chr "STUDYID" "DOMAIN" "USUBJID" "AESEQ" ...
R4CDISC• Define-XML 2.0を読み込ませて、Value Level Metadata(ある列のデータの値によって、別の列のメタデータが決まるような場合)を抽出
> str(getValMD("define2-0-0-example-sdtm.xml"))
'data.frame': 121 obs. of 9 variables:
$ IR_ItemOID : chr "IT.DA.DAORRES.DISPAMT" "IT.DA.DAORRES.RETAMT" "IT.EG.EGORRES.INTP" "IT.EG.EGORRES.PRMEAN" ...
$ ValueListOID : chr "VL.DA.DAORRES" "VL.DA.DAORRES" "VL.EG.EGORRES" "VL.EG.EGORRES" ...
$ IR_OrderNumber : int 1 2 1 2 3 4 5 1 2 1 ...
$ IR_Mandatory : chr "Yes" "No" "No" "No" ...
$ ID_Name : chr "DA.DISPAMT" "DA.RETAMT" "EG.INTP.ORRES" "EG.PRMEAN.ORRES" ...
$ ID_Length : chr "2" "2" "8" "3" ...
$ ID_DataType : chr "integer" "integer" "text" "integer" ...
$ ID_Label : chr "Dispensed Amount" "Returned Amount" "Interpretation: Original Results" "Summary (Mean) PR Duration (Orig U)" ...
$ ID_SASFieldName: chr "DISPAMT" "RETAMT" "INTPOR" "PRMEANOR" ...
R4CDISC• Dataset-XMLを読み込ませて、データフレームにする
> read.dataset.xml(dataset_xml=”da.xml", define_xml=”define2-0-0-example-sdtm(2013-11-09).xml")
STUDYID DOMAIN USUBJID DASEQ DATESTCD DATEST DAORRES
1 CDISC01 DA CDISC01.100008 1 DISPAMT Dispensed Amount 40
2 CDISC01 DA CDISC01.100008 2 DISPAMT Dispensed Amount 80
3 CDISC01 DA CDISC01.100008 3 RETAMT Returned Amount 22
4 CDISC01 DA CDISC01.100008 4 RETAMT Returned Amount 35
5 CDISC01 DA CDISC01.100014 1 DISPAMT Dispensed Amount 80
6 CDISC01 DA CDISC01.100014 2 DISPAMT Dispensed Amount 80
7 CDISC01 DA CDISC01.100014 3 RETAMT Returned Amount 44
8 CDISC01 DA CDISC01.100014 4 RETAMT Returned Amount 44
9 CDISC01 DA CDISC01.200001 1 DISPAMT Dispensed Amount 40
R4CDISC
• Define-XMLからDataset Level Metadata, Variable
Level Metadata, Value Level Metadataをデータフレームの形で抽出できる
• Dataset-XMLをそのままデータフレームに変換できる
R4CDISC• たとえば、データセットをみていて、その項目の説明を知りたい
> head(ds)
STUDYID DOMAIN USUBJID DASEQ DATESTCD DATEST DAORRES
1 CDISC01 DA CDISC01.100008 1 DISPAMT Dispensed Amount 40
2 CDISC01 DA CDISC01.100008 2 DISPAMT Dispensed Amount 80
> subset(varMD, ID_SASFieldName=="DAORRES")$ID_Label
[1] "Assessment Result in Original Units"
• DATESTCD==“DISPAMT” の場合、それがMandatoryかどうかを知りたい
> subset(valMD, ID_SASFieldName==“DISPAMT”)$"IR_Mandatory"
[1] "Yes"
CDISCに関係するオープンソースソフトウェア
• OpenCDISC http://www.opencdisc.org/
• SDTM, AdAMなどのデータセットが標準に適合しているかどうか
をチェックするバリデーションツール。AGPLのオープンソースツールであるが、商用版は業界のデファクトスタンダードになっている。
• OpenClinica http://www.openclinica.com/
• データ入力用の電子症例報告書の開発・運用ツール。LGPLで
GitHub上で開発が行われている。ODMでのデータ出力に対応。
まとめ• 臨床試験のデータ表現においては、CDISCが標準の地位を確立する一方で、SASを利用することが最も簡単だったが、SASの外側の世界のツールを併用することは難しかった
• しかし、CDISCがODMをベースにしたXML表現を標準に位置付けつつあることで、SAS
データセットの形式に慣れずとも、Rプログラマが容易にかつ直接CDISCデータセットを取り扱うことが可能になってきている
• PhUSEなど、「クリニカルプログラマ」のコミュニティがあり、GitHub上でオープンソースツールの開発が行われるなど、いままであったかもしれない生物統計の世界の閉鎖的なイメージは変わりつつある
• オープンソースツールのみで、国際標準形式でのメタデータを伴った臨床試験データセットの作成、解析、検査が実施できるようになっている