BCPNNについて
BCPNN (A Bayesian Confidence Neural Network) 1の集計手法について概要を記します。その例として、PMDA (Pharmaceuticals and Medical Devices Agency)が公開するJADER (Japanese Adverse Drug Event Report database) データベースで、WHOが使用するシグナル検出の手法であるBCPNN (A Bayesian Confidence Neural Network) 1を計算しました。結果はこちらのページに示します。<https://wp.me/P9b6zl-gt>
BCPNNをSQLでデータ集計
SELECT Drug201711.識別番号, Drug201711.医薬品(一般名), Drug201711.医薬品の関与, Reac201711.有害事象 INTO [0010 AnalysisLineList]
FROM Drug201711 INNER JOIN Reac201711 ON Drug201711.識別番号 = Reac201711.識別番号
GROUP BY Drug201711.識別番号, Drug201711.医薬品(一般名), Drug201711.医薬品の関与, Reac201711.有害事象
HAVING (((Drug201711.医薬品の関与)=”被疑薬”));
SELECT [0010 AnalysisLineList].医薬品(一般名) AS drug, [0010 AnalysisLineList].有害事象 AS event, Count([0010 AnalysisLineList].識別番号) AS 識別番号のカウント INTO [0020 PhViDdata]
FROM [0010 AnalysisLineList]
GROUP BY [0010 AnalysisLineList].医薬品(一般名), [0010 AnalysisLineList].有害事象;
元データに入っている『”』の様な余計なごみを削除して、つぎのRスクリプトへ
Rを用いたBCPNNによるデータマイニング
setwd(“C:/Users/Oshima/Documents/2017/PMDA”)
library(PhViD)JADERdata <- read.csv(“0020PhViDdata.csv”, head=T)
PhViDdata <- as.PhViD(JADERdata)
res <- BCPNN(PhViDdata, MIN.n11=3, DECISION = 3,
RANKSTAT = 2)write.table(res$ALLSIGNALS, “BCPNN_out.csv”, quote=F, col.names=T, append=F, sep=”,”)
本質的にはこれでOK。BCPNNではない、同様の手法であるGPSでもRORも出力できますが、その辺の設定を変える場合はPhViDの取説参照。また、WHOはシグナル検出に用いる手法の軸足をBCPNNから、vigiRankという手法に移してきている模様です。
以前のs社にいたときに、これと同じ動作をするプログラムを、F社が「本当なら億の価値があるヤツだが、一緒に開発してもらうことを前提に2000万円ほどで開発しますよ」と持ちかけてきました。以前よりこんな感じのスクリプトを自分で作ってデータを見ていましたから、当然お断りしました。
コメント失礼致します。
現在大学院で、FAERSを使用して、シグナル探索を行っているものです。
これまでの研究では、RORとPRRで解析を行っていたのですが、
BCPNNやGPSを用いてシグナル探索を行い解析を行いたいと考えています。
そこで、本ページを参照し、PhViDパッケージの存在を知り、解析しようと試みたのですが、 as.PhViD(JADERdata)を実行するプログラムがなかなかうまく行きません。
どのようなデータフレームを使用していますか?
PhViDパッケージにて、
【data.frameは次のように構成する必要があります
1列目:薬のラベル
2列目:有害事象のラベル
3列目:対応するカップルの薬物有害事象の自発的報告の数】
の説明があったのですが、理解が追いつかない状態です。
Oshima様は、SQLでデータ集計を行っていらっしゃると思うのですが、SASとRしか使ったことがなく、データ集計後のデータ構造の想像がつきません。
Rにて、as.PhViD(JADERdata)のJADERdataのデータ構造について教えていただければ、幸いです。
長文となってしまい恐縮です。
お時間のある時に、返信いただければと思います。
コメントありがとうございます
library(“PhViD”)
head(PhViDdata.frame)
として出力される物と同じ構造です。
Oshima様
データ構造がわかることが出来、解析出来ました。
ありがとうございます。
BCPNN <- BCPNN(DataBase, MIN.n11 = 3, DECISION = 3, RANKSTAT = 2)とした場合、
シグナル検出基準は、Q_0.025(log(IC))の値が0以上であるとき、となるという解釈で大丈夫でしょうか?
また、IC値を算出させることは難しいですか?