Hatena::ブログ(Diary)

驚異のアニヲタ社会復帰への道

Prima Project

2017-11-06

分娩後出血多量のトラネキサムは出血死亡を減らす

読んだ。

Lancet. 2017 May 27;389(10084):2105-2116.

読んだ印象としては日本ではあまり意味がないかもと思った。

 

パキスタンカメルーンなど発展途上国の21ヶ国193施設から、トラネキサム1g群10036人とプラセボ(生食)9985人がリクルートされて、出血多量死亡(経腟で500ml、帝王切開で1000ml)が155人 対 191人でリスク日0.81、p=0.045 で有意だった。患者背景と副作用、その他の死亡理由で有意差はなかった、と言っている。

 

まずこの試験では分娩死亡を2.5%、子宮摘出が2.5%、子宮摘出後に1%が死亡する、と見積もって、25% のリスク減を90%検出力で検出しようとして、15000人をリクルートしようとしている。当初のprimary outcome は全死亡および子宮摘出だったが、無作為化の時点で子宮摘出が行われているという現場の事情を考慮して、大量出血死亡をprimary outcome に変えている。この時点でp-hacking 感が否めない。

primary outcome を変えたあとのpower test は、少ない感じがするがこんな感じ。

power.prop.test(p1=0.025, p2=0.025*3/4, power=0.9)
     Two-sample comparison of proportions power calculation 

              n = 11508.8
             p1 = 0.025
             p2 = 0.01875
      sig.level = 0.05
          power = 0.9
    alternative = two.sided

NOTE: n is number in *each* group

データとしては、出血死亡が有意に減って、背景を調整してもp=0.03 と有意だった、とあるが、その他にしこたま検定を繰り返しているので多重検定感は否めないし、肝心のprimary outcome (もはや大量出血をprimary outcome と設定しなおしたのをprimary outcome と言ってしまっていいのかは疑問だが)も、p=0.045 だし、何も考えないでカイ自乗検定をすると

chisq.test(matrix(c(155, 10036-151, 191, 9985-191), 2))
	Pearson's Chi-squared test with Yates' continuity correction

data:  matrix(c(155, 10036 - 151, 191, 9985 - 191), 2)
X-squared = 3.801, df = 1, p-value = 0.05122

となって有意ではない。p-hacking の匂いがぷんぷんする。

 

そもそも2.5% のイベントを検出するのは大変なわけである。いくら検出力を計算したからと言っても大変である。そうなのだから検出力をまったく考えていない副作用についてp値を計算して有意じゃなかったから副作用の増加は認められなかったっておかしな話である。

敗血症死亡については人数だけ見たら15人 対 8人と発生率で2倍くらい差が出ているが、これは検出力不足有意ではない(RR 1.87, [0.79-4.40])。今回参加した病院の衛生レベルでは敗血症管理は大問題だろうから、Discussion でも

Because more than one quarter of deaths were not due to bleeding, the reduction in all-cause mortality with tranexamic acid, which is a weighted average of its effect on bleeding and non-bleeding deaths, was not statistically significant.

Indeed, considering that one quarter of deaths after postpartum haemorrhage are not bleeding related, it would require trials many times larger than ours to show a

statistically significant reduction in all-cause mortality.

Nevertheless, because the relative contributions of bleeding and non-bleeding (eg, sepsis) deaths to all-cause mortality will vary by region or between hospitals, the

effect on all-cause mortality is not generalisable. For example, tranexamic acid will have a larger effect on allcause mortality in hospitals where sepsis death is rare

than in hospitals where sepsis death is common. The effect of tranexamic acid on death due to bleeding is the generalisable measure.

と、母体死亡の1/4 は出血死以外の要因だから、トラネキサムの出血抑制(と思われる効果)で恩恵を受ける集団は、敗血症がより少ない集団だろう、と言っている。

で、日本はというと、母体死亡は疫学上、年間100万分娩に対して50人くらいである。その中で出血は半分くらいではなかろうか(要出典)。トラネキサム自体は安くて古典的によく使われているお薬なので、ルーティンで使用しても良さそうだが、仮に出血死亡が起きた時にトラネキサムを使用していなかったから、ということで訴えられても予防効果があったかは謎。

トラネキサム自体は線溶系に影響するので、DVTとか、コメントでもDVT について寄せられているけどあまり読んでいない。

2017-02-04

薬の副作用の有無をAIが100% 的中

読んだ。

Machine learning-based prediction of adverse drug effects: an example of seizure-inducing compounds

プレスリリース

 

COI:なし

薬学も電気生理学情報科学も何ひとつ専門ではないけど、100%予測に釣られたので書く。

 

seizure (けいれん)を引き起こす副作用のある薬物を、Caffe を用いたdeep learning とSVM による機械学習で100% 予測しました、というweb ニュースがでているが、実際には、論文でけいれんが報告されているジフェンドラミン、エノキサシン、ストリキニーネ、テオフィリンの4剤とけいれんを絶対に起こすピクロトキシン1剤、けいれんの副作用はないということになっているアスピリン、シメチジン、デキストラン、ジアゼパムイブプロフェン、イミプラミン、ケタミンメタンフェタミン、オセルタミビルの9剤を判別するタスクをしている。

 

ここで、Mg の話だが、Mg細胞膜の電気的活動の安定性に関わっており、脳脊髄液(CSF) では1.2nM らしいが、0.1nM まで下げると勝手にseizure-like event SLE が起きやすくなるらしい。以下の実験ではMg 濃度は0.1nM でやっており、SLE は起きやすい状況になっているようである(Fig.1)。

 

クロトキシンの話だが、GABAという物質があって、これは神経接合部での神経活動の惹起を抑える働きがあるが、ピクロトキシンはこのGABAの働きを抑えることで、結果として興奮が起きやすくなる、ということで、ピクロトキシンの濃度を上げていくと確かにSLE が生じてけいれんが起きるということになっている(Fig.2)。

 

マウスから海馬を摘出し、上記の薬剤の臨床的な血中濃度から最大30倍くらいのオーダーの濃度まで5段階で適宜、脳脊髄液(CSF)還流液を調整して、SLE の信号が測定されるか観測している(Table.1)。その信号は、ピークとして0.1uV/ms を超えた前後 -200 から2070ms までを切り出して、227x227 ピクセルの画像にして、caffe に投げるということらしい。ということで、入力データは5濃度、14薬剤の70画像である。

 

ひとまずSLE の起きる様子をベタにプロットすると、けいれんを起こすと言われている次フェンドラミン、エノキサシン、ストリキニーネ、テオフィリンは濃度依存性にSLE の発生が多かった(Fig.3)。ケタミンメタンフェタミン、オセルタミビルでは電気活動があるように見えるけれども、発火がオシレーション様ではないのでSLE とは言わないらしい。これは専門でないのでよくわからん。

 

肝心の判定性能だが、総計70枚の、227x227ピクセルの画像を、2012年のLarge Scale Visual Recognition Challenge で事前に学習された6層判別器に入力している。結果として4096の長さの特徴量ベクトル(70*4096 行列)ができて、それをPCA することでごしゃっとデータをまとめている。PC1(37%)とPC2(21%)の軸だけ取り出し、SVM (線形)をやると、けいれんを起こす薬剤で、SLEを引き起こす濃度(ここがよくわからなかったがFig.4)の空間が線形分離できる、これが判別性能100% と言っている。

一応、LOOCV で1:13 の交差検証をやっても100% だし、けいれんを起こすことがわかっているイソニアジドとメトクロプラミドを判別しても、陽性判定だったので、外的妥当性も検証している、と言っていそう。

PCA空間をみると、けいれんを起こす薬剤のなかでジフェンドラミンだけが別クラスターになっており、これはSLE を見ると下がって上がるパターン(Fig.4)であり、ほかの4剤の上がって下がるパターンとは異なるので、おそらく薬理学的な違いが出ていて、これを考えるうえでも役に立ちそう、と言っている。

 

感じたこととして、ド素人だけど情報科学生物学医学の見地からまとめてみる。

 

情報科学の見地からは、まず、時刻t で観測され続けているであろうSLE の時系列データE(t) を、画像にしてしまうことにいったいどれほどの意味があるのだろうか。現象的には、ベクター画像をラスター画像にして解析しているような感覚だが、それでもけいれんの有無を判別できるというのは、それはそれでこのやり方はできないことはないのだろう。なんとなく、音声信号をスペクトログラムにしてdeep learning にぶちこめば例えば声帯結節あり/なしがわかる、みたいなゴリ押し感はある。

ただし、これは「見た目が違っていて、なんとなく違いが判別できる」という定性的な概念になってしまうので、できれば、定量的にSLE のスパイクの形成具合のどことどことで数値的にどうなったらこれはてんかん、と言いたい感じはある。また、事前に学習したモデルって、背景とか馬とかだと思うけど、SLE シグナルみたいな「ただの線」にその学習モデルを使うというのは許容されているアルゴリズムなんだろうか。

 

入力が70ってどうなんですかね。また、caffe で4096の長さの特徴量ベクトルを作ったならそのままdeep learning で判別器作ればいいと思うし、PCA で次元を落として、って、それならば画像データにして無駄に次元を変えたりデータ量を変えたりして削減するという流れがいまいちよくわからなかった。有名な論文みたいだけど、わざわざ問題を難しく解かなくても…という気はする。プレリミ的には全次元で判別したらSVM でうまく分離できなかったらしい。PCA でノイズが減るのは減ると思うけど、難しいことをしすぎではないか。

「けいれんを起こす薬剤」という判定基準が雑な気がする。ジフェンドラミン、エノキサシン、ストリキニーネ、テオフィリンは論文ベースで探したようだが、例えばケタミンでも報告はあるし、何を基準に論文サーベイしたのかわからなかった。普通に考えて、精神に作用するメタンフェタミンがけいれんを起こさない薬物に最初から分類されているのが(薬学は専門でないので)よくわからなかったし、ケタミンメタンフェタミンの2剤がSLE を起こしていないというのも(生理学は専門でないので)よくわからなかった。究極的に意味がわからなかったのが、イミプラミンは0.3-0.6% で臨床的にけいれんを起こす、と書いてあるのに、SLE を起こさなかったのでけいれんを起こさない薬剤と判定していることだった。

けいれんを起こすか、Yes/No の二択での判定の限界というか別にいい手法はあるのか、というのは議論で指摘されていた。

 

生物学的な見地からは、おそらく、どんな薬物でも高濃度にすれば、けいれんというか細胞の異常発火は引き起こしうる。今回の濃度設定は、ヒトの臨床的な血中濃度の報告を元に、それをいい感じで含むように濃度調整をして、マウスで実験している。設定した濃度の範囲外でSLE が生じる可能性があることは議論でも述べられているが、この手の毒性/副作用予測論文ではやはり、ヒトとモデル生物間での飛躍がどうしても避けられない。例えば細胞レベルやマウスレベルのでの毒性試験がヒトでも毒性があるかというとそうでもないことは多いし、「けいれん予測」が「その薬剤を内服したヒトで起こるか」ではなく、「マウス海馬を溶液にひたしてSLE が起こるか」ということの予測であることは注意しておくべきだろう。

あと、マウス海馬を切って浸してSLE を測定するというこの実験系、ハイスループットにできるのか謎だった。

 

医学的な見地からは、メトクロプラミドがけいれんを起こす薬剤の外的妥当性の検証として使われているが、この薬、けいれんを起こすと判定されたから危ない薬かというと、死ぬほど処方されているプリンペラン(吐き気止め)である。添付文書を読んでみるとたしかにけいれんは書いてあるのだが、神経学的副作用には頻度すら書いていない。では世の中の医者がけいれんのリスクを認識してメトクロプラミドを処方しているかというと、たぶんしていない。クスリはリスクというくらいではあるが、リスクベネフィットを勘案してクスリは処方されるわけで、元論文をみてもoverdose の例らしいので、このあたり、情報科学的見地でも述べたように、陽性例の設定基準があやふやと言わざるをえない。

 

(元論文を見たが、「イソニアジド(抗結核薬)とメトクロプラミドは両者ともけいれんを起こしうると報告されている」と引用されていたのに、引用にはイソニアジドのことしか書かれていなくてメトクロプラミドをgrep したけど書いていなかったようである、読んでいないのでもしかしたら別名で書いてあるのかもしれない。また、メトクロプラミドの濃度を決めたという論文も抄録ではメトクロプラミドがけいれんを引き起こすことは書いていない。本文は知らない)

(やっぱり気になって元論文を読んだが、17歳男性が失恋時に30錠くらいのイソニアジドを飲んだ時の管理という症例報告で、イソニアジドの肝機能障害は有名だけどけいれんや昏睡などの精神症状に気をつけてね、という話で、補助療法で活性炭など使うといいよとあったが消化管症状など読んでもメトクロプラミドは出てきていなかったし、メトクロプラミドとけいれんの話はどこに書いてあるのかわからなかった。)

 

なのでここでも、「in virto でAI がけいれんが起こると判定する」ことと、「実臨床でけいれんが起こる」ことがびっくりするくらい乖離している。また、「けいれんが起こった薬剤」というのは、因果関係がわからないけれども、「少なくとも投与した後にけいれんが生じた」場合には、珍しい/重症な副作用は報告する義務があるので、けいれんを起こすという薬剤が本当にけいれんを起こしているのかは実臨床レベルでは不明な事が多い(と思う)。

また、薬物単体で副作用を起こすだけではなく、相互作用で起きる場合や、上の例でいれば「相互作用で起きた、もしくは犯人でもないのに巻き添えで犯人扱いされている」場合もないことはないと思われるので、けいれんを起こす/起こさない薬剤の選定は非常に難しい、はず。

 

という感じで、モヤモヤ感がはんぱなかった。

 

見かけたツイート

前者はそうだけど、後者は必ずしも(現実問題には)当てはまりません。例えば正規分布は、取りうる値は(-¥infty,¥infty)であるが、現実的には99.9% くらいの区間で適当な有限値になるはず。仮に、「新生児と20歳の男性を身長で判別する」問題を考えるとき、新生児はたかだか平均50cm に適当な分散なので、20歳男性の身長からは100% 判別されるはず。もちろん、20歳男性が例えば低形成症だとしても、普通にサンプリングすれば平均170cm に適当な分散になるので、新生児は実データ上は完全に分離される。もちろん、170cm と入力すべきところを1.7m と勘違いして1.7 と入力したり、本当にすごい症例報告レベル(確率10^{-1000}くらいな)の身長がいたりすれば別だけど。ということで、今回のけいれんで言えば、「けいれん薬剤のSLE は、けいれんでない薬剤のSLE とはもう本当に違いうる」ということがあれば、100% 判別ニキでもおかしくはない。これは結局安全域が狭い薬剤なのか広い薬剤なのかという話だと思うけど。

ただ、けいれん有無の薬剤の選び方とか、SLE の判定とかよくわからんことが多いので、交差検証とかしてモデルの妥当性を解析していても、モヤモヤ感は残る。

 

既存の薬剤で、副作用としてけいれんがある、と言われているものを判別しています。ただ、2つだけで、どちらも臨床的には普通に使われている薬剤なので、何をもってけいれんの副作用を言っているのかはちょっとよくわかりませんでした。

2014-07-16

MikuHatsune2014-07-16

処方量のタイトレーションが

こんな感じのデータを見た。

基本的に痛み止めとして処方されている量から、急に痛みが出た時の頓服量(レスキュー)を知りたいわけだが、データがこんな感じなので予測ができず、タイトレーションは適宜やってみて決める、という話。

相関係数がなぜかspearmanでとってて、実際のデータは0.55程度だった。

V1	V2
50	48
50	52
100	52
100	130
50	163
50	146
100	163
100	231
100	259
50	261
100	354
100	378
200	333
400	547
400	409
300	373
200	488
200	490
300	348
300	497
300	518
300	584
200	589
100	706
50	715
100	795
300	797
500	779
900	800
700	100
300	607
300	474
200	347
500	350
500	491
200	425
800	200
800	100
500	376
700	800
400	224
100	462
100	286
100	244
50	167
100	279
200	352
200	617
300	669
400	696
300	301
400	293
400	415
300	477
300	566
300	634
300	455
200	404
100	221
50	116
50	333
100	394
50	190
50	101
100	247
100	348
200	402
300	565
300	636
300	694
100	547
100	617
100	673
200	734
100	751
xl <- c(0, 1000)
yl <- c(0, 800)
plot(xy, xlim=xl, ylim=yl ,pch=16, xlab="Base opioid dose", ylab="Fentanyl oral dose")
abline(h=seq(0, 800, by=50), v=seq(0, 1000, by=100), lty=3)
lm0 <- lm(xy[,2] ~ 0 + xy[,1])
abline(0, lm0$coefficients, col=2)
cor(xy[,1], xy[,2], method="spearman")
[1] 0.3737153

f:id:MikuHatsune:20140716212520p:image

 

相関が低いので、痛み止めの基本処方量からレスキュー量は決められません、と言っているわりには、図では線形回帰で求めた直線が引いてある。実際の直線は右下の外れ値にかなり引っ張られていて、もっと寝た直線になっている。やりたいならロバスト回帰なんてのもあったかも知れない。

比例関係にない、というのはそんな感じだが、無理やりMICでもとればそこそこの相関がある。

library(minerva)
mine(xy[,1], xy[,2], alpha=0.9)$MIC
[1] 0.8035229

f:id:MikuHatsune:20140716212519p:image

 

たぶんこういうデータを見たら、薬理学的に考えても普通はシグモイドを考える。結構無理やりだけどフッティングさせたらこんな感じ。

library(drc)
ll <- drm(xy[,2] ~ xy[,1], fct=L.4(fixed=c(-0.01, 50, 800, NA)), robust="median")
plot(ll, log="", type="none", xlim=xl, ylim=yl, col=2, xlab="Base opioid dose", ylab="Fentanyl oral dose")
points(xy, pch=16)
abline(h=seq(0, 800, by=50), v=seq(0, 1000, by=100), lty=3)

f:id:MikuHatsune:20140716212518p:image

 

実際の使い方は50μgから使い始めて量を増やす、ということになっているらしい。この使い方でうまくいくのならこれでいいんだろう(適当

2013-09-09

MikuHatsune2013-09-09

タンパク質間相互作用と分子動力学シミュレーション

タンパク質間相互作用分子動力学法をやるプログラムの簡単なセミナーに出たのでやってみる。

たぶん日本語のブログでは初の記事ではないかと制作者も言っていた。

必要なプログラムのインストールは一番下。推奨OSはUbuntu 12.04 LTS。

リリース 12.04 (precise) 64-bit
カーネル Linux 3.2.0-52-generic
GNOME 3.4.2
メモリ: 11.6 GiB
プロセッサ: Intel Core i5-2540M CPU @ 2.60GHz × 4

MEGADOCK: タンパク質間相互作用シミュレーション

CafeMol: 分子動力学シミュレーション

 

2012-09-10

MikuHatsune2012-09-10

酸素解離曲線 その2

酸素解離曲線をやっていたのだが、SpO2が100%になるときの推定が設定不十分だったので、パラメータを設定して推定しなおした。

SpO2=100%とPaO2=98Torrが対応するらしいのでその値も加えた。

曲線の形がなんかうまくいかなかったのでこちらはLL.4による推定にした。

低PaO2の領域は、理論上はヘモグロビンの結合具合から計算云々とサイトに書いてあるが、臨床上、実のところどうなっているのかは測定不能(それやったら死んでる)なので、立ち上がり具合が本当にS字曲線になるのだろうか…

library(drc)
SpO2 <- c(0, 50, 75, 85, 88, 90, 93, 95, 98) #SpO2の値
PaO2 <- c(0, 27, 40, 50, 55, 60, 70, 80, 100) #PaO2の値

sig2 <- drm(SpO2 ~ PaO2, fct=LL.4(fixed=c(NA, NA, 100, NA)))
plot(sig2, xlim=c(0, 100), ylim=c(0, 100), log="")
sig2
A 'drc' model.

Call:
drm(formula = SpO2 ~ PaO2, fct = LL.4(fixed = c(NA, NA, 100,     NA)))

Coefficients:
b:(Intercept)  c:(Intercept)  e:(Intercept)  
     -2.77761       -0.02002       26.96873  

f:id:MikuHatsune:20120910230308p:image