Más contenido relacionado
La actualidad más candente (12)
Similar a Rとcdisc@moss10 公開用 (20)
Más de Masafumi Okada (6)
Rとcdisc@moss10 公開用
- 5. CDISCとは
• CDISC(Clinical Data Interchange Standards) Consortium による医学領域での臨
床試験データの標準規格
• データの収集、クリーニング、蓄積、解析、レポートまでを包括している
• 語彙(Terminology)の統一、メタデータ(測定日など)の厳密な記述に重点が
おかれており、実用性が高い
• 日米(日本は2016年度より)の医薬品承認機関に新しい薬の有効性、安全性
の根拠となる研究データを提出する際のフォーマットとなっている
- 8. 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による規格表現)
- 9. CDISCとRとのかかわり
• CDISCでは、データはSAS xportフォーマットを用いることになっていた
• Rでは、foreignパッケージではxport形式のファイルを書き出せない
(write.foreign(package=“SAS”)はカンマ区切りを読むSASコード自体を出力)
• 2007年にSASxportパッケージが登場してxport形式ファイルの書き出しができるように
なった
• とはいえ、xport形式では日本語の扱いがどうなるのかはっきりしない、変数名の制限
などがある…
• CDISCもODMベースのXMLによるデータ表現に移行(昨年リリースされたDataset-XML)
するので、今後Rとの親和性が上がるかも?
- 11. 解析とメタデータ
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"
"Dispense
d 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"
"Dispense
d Amount"
"80" "TABLET"
"CDISC01
"
"DA"
"CDISC01
.100014"
2 "DISPAMT"
"Dispense
d Amount"
"80" "TABLET"
USUBJIDは重複
は許されない
名前は標準用語
に従っている
(CDISC
Terminology)
別々の項目が同じ
列に入っている
(CDISC Normalized
Data)
項目によって数
値と判断すべき
か、文字列とす
べきかが異なる
メタデータを知らなければ解析できない
- 14. 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" ...
- 15. 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" ...
- 16. 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" ...
- 17. 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
- 19. 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"