Rとcdisc@moss10 公開用

21
RCDISC 岡田 昌史

Transcript of Rとcdisc@moss10 公開用

Page 1: Rとcdisc@moss10 公開用

RとCDISC岡田 昌史

Page 2: Rとcdisc@moss10 公開用

CONTENTS

• Self Introduction

• CDISC Introduction and History

• R packages (R4CDISC)

• Other Softwares(OpenCDISC, OpenClinica)

Page 3: Rとcdisc@moss10 公開用

本日の発表• いかに楽をして、ミスのないデータ解析をするか?の方法論を研究

• 複数のツールを併用して、いままでになかった処理過程を生み出すには….製品にまで落とし込まれたソフトウェアは適していない

• API等を備えた柔軟な商用ソフトウェアもあるが、高価

• 方法論そのものを開発する研究にはオープンソースソフトウェアが適している

• やっぱりたくさんの人に使ってもらいたいしね

Page 4: Rとcdisc@moss10 公開用

RとCDISC• オープンソースツールを組み合わせて、いかに楽をして、ミスのないデータ解析をするか?

• 楽をできる≒ミスが起こりにくい≒シンプル

• 解析で一番大変な部分: データのもつ「値」に対応する「意味」すなわちメタデータを解析者が理解すること

• では、データに対応するメタデータを解析ソフトウェア自身が自動的に理解すればよい(セマンティックWeb, RDF/OWL, Archetypesと同様の発想)

• 解析ソフトウェア (R) にメタデータ標準(CDISC)を組み合わせてみる

Page 5: Rとcdisc@moss10 公開用

CDISCとは• CDISC(Clinical Data Interchange Standards) Consortium による医学領域での臨床試験データの標準規格

• データの収集、クリーニング、蓄積、解析、レポートまでを包括している

• 語彙(Terminology)の統一、メタデータ(測定日など)の厳密な記述に重点がおかれており、実用性が高い

• 日米(日本は2016年度より)の医薬品承認機関に新しい薬の有効性、安全性の根拠となる研究データを提出する際のフォーマットとなっている

Page 6: Rとcdisc@moss10 公開用

CDISCとは

• データマネジメント, 統計解析の過程では、規格群のうちSDTM(Study

Data Tabulation Model), AdAM(Analysis Data Model) が使われる

• 規格書ドラフトにアクセスするためには会員になる必要があるけれども、正式にリリースされた規格書は無料でダウンロードでき、使用できる。

• 臨床試験のデータを念頭に置いているが、CDASHなど観察研究にも適した規格もあり、臨床試験のみで使うのはもったいない。メタデータへのアクセス手法が標準化されるのは研究者にとってもメリットが大きい。

Page 7: Rとcdisc@moss10 公開用

CDISC Annual Report 2013 p.5 より引用

Page 8: Rとcdisc@moss10 公開用

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による規格表現)

Page 9: Rとcdisc@moss10 公開用

CDISCとRとのかかわり• CDISCでは、データはSAS xportフォーマットを用いることになっていた

• Rでは、foreignパッケージではxport形式のファイルを書き出せない(write.foreign(package=“SAS”)はカンマ区切りを読むSASコード自体を出力)

• 2007年にSASxportパッケージが登場してxport形式ファイルの書き出しができるようになった

• とはいえ、xport形式では日本語の扱いがどうなるのかはっきりしない、変数名の制限などがある…

• CDISCもODMベースのXMLによるデータ表現に移行(昨年リリースされたDataset-XML)

するので、今後Rとの親和性が上がるかも?

Page 10: Rとcdisc@moss10 公開用

Rについて

• GNU R

• 統計解析ソフトウェアのデファクトスタンダード

• 6789種の「パッケージ」による機能拡張

Page 11: Rとcdisc@moss10 公開用

解析とメタデータ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)

項目によって数値と判断すべきか、文字列とすべきかが異なる

メタデータを知らなければ解析できない

Page 12: Rとcdisc@moss10 公開用

CDISCのメタデータ定義• Define-XMLの導入

単なる表から、メタデータ(XMLで表現)付きのデータに。

• Dataset-level Metadata ― データセット全体に、どんな表が含まれていなれればならないか

• Variable-level Metadata ― それぞれの表に、どんな列が含まれているのか

• Value-level Metadata ― それぞれの列に、どんな値が含まれているのか

• Dataset-XMLの導入Defineと対になり、データベースそのものをXMLで表現(シリアライズ)

Page 13: Rとcdisc@moss10 公開用

関連するパッケージ• CRANに登録されているCDISC関連パッケージ

• ODMConverter, compareODM by Martin Dugas

• R4CDISC by Ippei Akiya LGPL-3, GitHubにあり

Page 14: Rとcdisc@moss10 公開用

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

Page 15: Rとcdisc@moss10 公開用

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

Page 16: Rとcdisc@moss10 公開用

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

Page 17: Rとcdisc@moss10 公開用

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

Page 18: Rとcdisc@moss10 公開用

R4CDISC

• Define-XMLからDataset Level Metadata, Variable

Level Metadata, Value Level Metadataをデータフレームの形で抽出できる

• Dataset-XMLをそのままデータフレームに変換できる

Page 19: Rとcdisc@moss10 公開用

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"

Page 20: Rとcdisc@moss10 公開用

CDISCに関係するオープンソースソフトウェア

• OpenCDISC http://www.opencdisc.org/

• SDTM, AdAMなどのデータセットが標準に適合しているかどうか

をチェックするバリデーションツール。AGPLのオープンソースツールであるが、商用版は業界のデファクトスタンダードになっている。

• OpenClinica http://www.openclinica.com/

• データ入力用の電子症例報告書の開発・運用ツール。LGPLで

GitHub上で開発が行われている。ODMでのデータ出力に対応。

Page 21: Rとcdisc@moss10 公開用

まとめ• 臨床試験のデータ表現においては、CDISCが標準の地位を確立する一方で、SASを利用することが最も簡単だったが、SASの外側の世界のツールを併用することは難しかった

• しかし、CDISCがODMをベースにしたXML表現を標準に位置付けつつあることで、SAS

データセットの形式に慣れずとも、Rプログラマが容易にかつ直接CDISCデータセットを取り扱うことが可能になってきている

• PhUSEなど、「クリニカルプログラマ」のコミュニティがあり、GitHub上でオープンソースツールの開発が行われるなど、いままであったかもしれない生物統計の世界の閉鎖的なイメージは変わりつつある

• オープンソースツールのみで、国際標準形式でのメタデータを伴った臨床試験データセットの作成、解析、検査が実施できるようになっている