BCPNN – Potential Safety Signal of Medical Product

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万円ほどで開発しますよ」と持ちかけてきました。以前よりこんな感じのスクリプトを自分で作ってデータを見ていましたから、当然お断りしました。

Reference

1.
Bate A, Lindquist M, Edwards I, et al. A Bayesian neural network method for adverse drug reaction signal generation. Eur J Clin Pharmacol. 1998;54(4):315-321. [PubMed]

3件のコメント

  1. コメント失礼致します。
    現在大学院で、FAERSを使用して、シグナル探索を行っているものです。
    これまでの研究では、RORとPRRで解析を行っていたのですが、
    BCPNNやGPSを用いてシグナル探索を行い解析を行いたいと考えています。

    そこで、本ページを参照し、PhViDパッケージの存在を知り、解析しようと試みたのですが、 as.PhViD(JADERdata)を実行するプログラムがなかなかうまく行きません。
    どのようなデータフレームを使用していますか?

    PhViDパッケージにて、
    【data.frameは次のように構成する必要があります
    1列目:薬のラベル
    2列目:有害事象のラベル
    3列目:対応するカップルの薬物有害事象の自発的報告の数】
    の説明があったのですが、理解が追いつかない状態です。

    Oshima様は、SQLでデータ集計を行っていらっしゃると思うのですが、SASとRしか使ったことがなく、データ集計後のデータ構造の想像がつきません。

    Rにて、as.PhViD(JADERdata)のJADERdataのデータ構造について教えていただければ、幸いです。

    長文となってしまい恐縮です。
    お時間のある時に、返信いただければと思います。

    1. コメントありがとうございます

      library(“PhViD”)
      head(PhViDdata.frame)

      として出力される物と同じ構造です。

  2. Oshima様
    データ構造がわかることが出来、解析出来ました。
    ありがとうございます。
    BCPNN <- BCPNN(DataBase, MIN.n11 = 3, DECISION = 3, RANKSTAT = 2)とした場合、
    シグナル検出基準は、Q_0.025(log(IC))の値が0以上であるとき、となるという解釈で大丈夫でしょうか?
    また、IC値を算出させることは難しいですか?

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Translate »