前回求めたRORにおいては1薬剤に対して1症状という1:1対応であったり、また年代・性別などは考慮できなかったが、一般化線形回帰モデルを使ってこの辺りについて求めてみる。
前回とは異なり、「NSAIDsとニューキノロン系抗菌薬の併用で痙攣が増える」という既知の話について、JADERデータで「NSAIDsとニューキノロン系の交互作用の時に痙攣の報告が(他の薬よりも)多くなる」ということを示してみたい。
1。有害事象・薬剤の検索
#
まず有害事象ADRについては、痙攣orてんかんに当てはまる有害事象で検索すると、
> reac_t <- reac[ grep("痙攣|てんかん", reac[["有害事象"]]) , ] ; table(reac_t[,4])てんかん てんかんにおける原因不明の突然死 てんかんの前兆 てんかん重積状態1047 11 3 297てんかん性脳症 てんかん精神病 ミオクロニーてんかん 外傷後てんかん2 9 57 1間代性痙攣 眼瞼痙攣 顔面痙攣 気管支痙攣111 32 29 125強直性痙攣 局在性痙攣 血管痙攣 口腔咽頭痙攣187 7 6 2喉頭痙攣 抗痙攣剤濃度減少 抗痙攣剤濃度治療量以下 抗痙攣剤濃度治療量以上39 5 1 3抗痙攣剤濃度増加 子宮痙攣 若年性ミオクロニーてんかん 小児痙攣36 1 4 6小発作てんかん 食道痙攣 新生児痙攣 先天性てんかん42 2 21 1前頭葉てんかん 側頭葉てんかん 胎児抗痙攣剤症候群 低カルシウム血症性痙攣3 12 21 3低ナトリウム血性痙攣 低血糖性痙攣 点頭てんかん 特発性全般てんかん3 68 13 1乳児重症ミオクロニーてんかん 熱性痙攣 熱痙攣 脳卒中後てんかん1 221 1 1脳卒中後痙攣発作 薬物離脱性痙攣 良性ローランドてんかん 痙攣性発声障害1 12 1 1痙攣発作3189
という分布なので、簡便のために「痙攣発作」だけ拾ってみることにする。
(*十分に網羅的ではないので本来はダメだが、ここでは簡易に示すdemonstrationとして)
R codeでは、
となる。> demo[ intersect(demo$ID, reac[ reac[["有害事象"]] %in% c("痙攣発作") , "ID"]) , "seizure"] <- 1 #> demo$seizure <- ifelse( is.na(demo$seizure)==T, 0, 1)> table(demo$seizure)0 1370831 3189
#
またニューキノロン系抗菌薬の種類としては、「フロキサシン」「キサシン」に当てはまる薬剤を拾ってみると:
> drug_t <- drug[ grep("フロキサシン|キサシン", drug[["医薬品.一般名."]]) , ] ; table(drug_t[,5]) エノキサシン水和物 オフロキサシン ガチフロキサシン水和物 ガレノキサシン 1 83 212 1 シタフロキサシン シタフロキサシン水和物 シノキサシン シプロフロキサシン 1 119 2 361 シプロフロキサシン塩酸塩水和物 スパルフロキサシン トスフロキサシントシル酸塩水和物 ナジフロキサシン 190 25 458 13 ノルフロキサシン パズフロキサシンメシル酸塩 プルリフロキサシン フレロキサシン 33 375 89 4 メシル酸ガレノキサシン水和物 モキシフロキサシン塩酸塩 ラスクフロキサシン塩酸塩 レボフロキサシン 1370 504 3 4 レボフロキサシン水和物 塩酸シプロフロキサシン 塩酸ロメフロキサシン 2373 1 30とあるので、点眼・軟膏などもあるのはここでは承知の上で、
ある程度多い薬だけ(「レボフロキサシン」「シプロフロキサシン」「ガレノキサシン」「モキシフロキサシン」「トスフロキサシン」「パズフロキサシン」「ガチフロキサシン」)を拾ってみることにする。codeでは、
となる。> demo[ intersect(demo$ID, drug[ grep( "レボフロキサシン|シプロフロキサシン|ガレノキサシン|モキシフロキサシン|トスフロキサシン|パズフロキサシン|ガチフロキサシン" , drug[["医薬品.一般名."]] ) , "ID"]), "quinolone"] <- 1 #> demo$quinolone <- ifelse( is.na(demo$quinolone )==T, 0, 1)> table(demo[,c("quinolone")])0 1368250 5770
#
さらにNSAIDsは色々あるが、よく使われるやつとして
あたりから見繕ってみることにする。(*これも本当はダメだが(以下略))> drug_t <- drug[ grep("アスピリン|ロキソプロフェン|イブプロフェン|ジクロフェナク", drug[["医薬品.一般名."]]) , ] ; table(drug_t[,5])アスピリン アスピリン・アスコルビン酸3494 5アスピリン・ダイアルミネート アスピリン・ダイアルミネート小児用308 10アスピリン・ボノプラザンフマル酸塩配合剤 アスピリン・ランソプラゾール配合剤1 89イブプロフェン イブプロフェン L−リシン259 61イブプロフェン, リン酸ジヒドロコデイン, dl−塩酸メチルエフェドリン イブプロフェンピコノール1 3クロピドグレル硫酸塩・アスピリン ジクロフェナクナトリウム33 1915ロキソプロフェン ロキソプロフェンナトリウム1 2ロキソプロフェンナトリウム水和物 低用量アスピリン3411 1
codeでは、
> demo[ intersect(demo$ID, drug[ grep( "アスピリン|ロキソプロフェン|イブプロフェンジクロフェナク" , drug[["医薬品.一般名."]] ) , "ID"]), "NSAIDs"] <- 1 #> demo$NSAIDs <- ifelse( is.na(demo$NSAIDs )==T, 0, 1)> table(demo[,c("NSAIDs")])0 1366763 7257
となる。
・seizure=「痙攣発作」の有無(時期・程度は問わない)
・quinolone=選択したキノロン系のいずれかの内服の有無(重複・時期は問わない)
・NSAIDs=選択したNSAIDsのいずれかの内服の有無(重複・時期は問わない)
という2値変数が3つ得られたことになる。
2。年代・性別の前処理
多変量でやるので年代・性別の情報も含められるように前処理しておく。
年代は、10歳代→数値の10、30歳代→数値の30、というように変換してみるとして(階級中央値にする手もある)、また10歳未満や超高齢、また「成人」など曖昧な例は除外することにすると、一例としては
demo$age_decades <- NAdemo[ grep( "10歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 10Ldemo[ grep( "20歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 20Ldemo[ grep( "30歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 30Ldemo[ grep( "40歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 40Ldemo[ grep( "50歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 50Ldemo[ grep( "60歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 60Ldemo[ grep( "70歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 70Ldemo[ grep( "80歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 80Ldemo[ grep( "90歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 90Ldemo[ grep( "100歳代" , ( demo[,"年齢"] ) ) , "age_decades"] <- 100L
で変換できる。
性別は、女性=1, 男性=0として、不明例はNAとするならば、
で変換できる。 性別は、女性=1, 男性=0として、不明例はNAとするならば、
demo$genderF <- NAdemo[ grep( "男性", demo[,"性別"] ) ,"genderF"] <- 0Ldemo[ grep( "女性", demo[,"性別"] ) ,"genderF"] <- 1L
3。一般化線形回帰モデル
ここで、seizureの有無に対して、NSAIDs内服、キノロン内服、またこれらを同時に服用しているかどうか、で回帰させてみる。
よくある一般化線形回帰モデルを使う。2値なのでfamily="binomial" を忘れないようにする。
> glm1 <- glm( seizure ~ quinolone + NSAIDs + quinolone:NSAIDs + genderF + age_decades , data = demo ,family="binomial" )> cbind( exp(coef(glm1)), as.data.frame(summary(glm1)$coefficients) )exp(coef(glm1)) Estimate Std. Error z value Pr(>|z|)(Intercept) 0.01910913 -3.957589264 0.0593437475 -66.6892374 0.000000e+00quinolone 3.48584338 1.248710019 0.0903187102 13.8255962 1.786263e-43NSAIDs 0.32123680 -1.135576725 0.2683226327 -4.2321317 2.314868e-05genderF 0.99450365 -0.005511512 0.0405749404 -0.1358354 8.919514e-01age_decades 0.98197728 -0.018187105 0.0009944565 -18.2884877 1.022117e-74quinolone:NSAIDs 7.66209507 2.036285454 0.3534272323 5.7615409 8.334946e-09
左端の列が、各要素についてのseizureに対する調整後Odds比に相当するものであり、一番下のquinolone:NSAIDs(つまりこれらの交互作用項)は有意でROR>1、しかも一番高いORである。
つまり併用でseizureが増えるかもしれないという仮説をこの結果からは唱えることができており、現在の既知の相互作用で痙攣が増えるという知見と矛盾しない結果である。
(またこれは付け足しの解釈になるが、上記結果では年代も有意な因子となっており、係数<1であるから、年代が高いほどseizure報告数はわずかに少なくなる、という結果となっている。)
今回の検討自体はすでに先行研究で知られていることをあえて検証してみただけであるが、実際に研究として役立てる場合には、まだ相互作用や副作用の実態があまり知られていない新薬について、臨床的な経験(1-2例程度とか)から得られたヒントが、統計的に同じようなことが言えそうなのかこのデータベースで少し検証してみる、という使い方になる。それで実際統計的にそうかもしれないということであれば、これを検証すべき仮説として、さらに服用した全員についての観察研究などで調べてみる、という流れになる。
AAA
# <pre class="prettyprint"> </pre>