元号が発表されたのでいままでの元号で使われた漢字の関係をみる

とおもってネットワーク解析をしようと思ってグラフを作ったはいいがigraph の扱いを完全に忘れているので保留。
その元号の年数もあるので適当にヒストグラムでも。

n <- read.delim("nengo.txt", stringsAsFactors=FALSE, header=FALSE)

library(stringr)
library(igraph)

v <- n$V1[nchar(n$V1) == 2]

el <- do.call(rbind, mapply(str_split, v, ""))
g <- graph_from_edgelist(el)
m <- get.adjacency(g)

f:id:MikuHatsune:20190401221206p:plain

平成	31
昭和	64
大正	15
明治	45
慶応	4
元治	2
文久	4
万延	2
安政	7
嘉永	7
弘化	5
天保	15
文政	13
文化	15
享和	4
寛政	13
天明	9
安永	10
明和	9
宝暦	14
寛延	4
延享	5
寛保	4
元文	6
享保	21
正徳	6
宝永	8
元禄	17
貞享	5
天和	4
延宝	9
寛文	13
万治	4
明暦	4
承応	4
慶安	5
正保	5
寛永	21
元和	10
慶長	20
文禄	5
天正	20
元亀	4
永禄	13
弘治	4
天文	24
享禄	5
大永	8
永正	18
文亀	4
明応	10
延徳	4
長享	3
文明	19
応仁	3
文正	2
寛正	7
長禄	4
康正	3
享徳	4
宝徳	4
文安	6
嘉吉	4
永享	13
正長	2
応永	35
明徳	5
康応	2
嘉慶	3
至徳	4
永徳	4
康暦	3
永和	5
応安	8
貞治	7
康安	2
延文	6
文和	5
観応	3
貞和	6
康永	4
暦応	5
元中	9
弘和	4
天授	7
文中	4
建徳	3
正平	25
興国	7
延元	5
建武	3
正慶	3
元弘	4
元徳	3
嘉暦	4
正中	3
元亨	4
元応	3
文保	3
正和	6
応長	2
延慶	4
徳治	3
嘉元	4
乾元	2
正安	4
永仁	7
正応	6
弘安	11
建治	4
文永	12
弘長	4
文応	2
正元	2
正嘉	3
康元	2
建長	8
宝治	3
寛元	5
仁治	4
延応	2
暦仁	2
嘉禎	4
文暦	2
天福	2
貞永	2
寛喜	4
安貞	3
嘉禄	3
元仁	2
貞応	3
承久	4
建保	7
建暦	3
承元	5
建永	2
元久	3
建仁	4
正治	3
建久	10
文治	6
元暦	2
寿永	3
養和	2
治承	5
安元	3
承安	5
嘉応	3
仁安	4
永万	2
長寛	3
応保	3
永暦	2
平治	2
保元	4
久寿	3
仁平	4
久安	7
天養	2
康治	3
永治	2
保延	7
長承	4
天承	2
大治	6
天治	3
保安	5
元永	3
永久	6
天永	4
天仁	3
嘉承	3
長治	3
康和	6
承徳	3
永長	2
嘉保	3
寛治	8
応徳	4
永保	4
承暦	5
承保	4
延久	6
治暦	5
康平	8
天喜	6
永承	8
寛徳	3
長久	5
長暦	4
長元	10
万寿	5
治安	4
寛仁	5
長和	6
寛弘	9
長保	6
長徳	5
正暦	6
永祚	2
永延	3
寛和	3
永観	3
天元	6
貞元	3
天延	4
天禄	4
安和	3
康保	5
応和	4
天徳	5
天暦	11
天慶	10
承平	8
延長	9
延喜	23
昌泰	4
寛平	10
仁和	5
元慶	9
貞観	19
天安	3
斉衡	4
仁寿	4
嘉祥	4
承和	15
天長	11
弘仁	15
大同	5
延暦	25
天応	2
宝亀	12
神護景雲	4
天平神護	3
天平宝字	9
天平勝宝	9
天平感宝	1
天平	21
神亀	6
養老	8
霊亀	3
和銅	8
慶雲	5
大宝	4
朱鳥	2
白雉	6
大化	6

合併症患者の麻酔スタンダード

読んだ。

合併症患者の麻酔スタンダード

合併症患者の麻酔スタンダード

読んだのは旧版だが新版が出ている。
新合併症患者の麻酔スタンダード―他科依頼にいかに答えるか

新合併症患者の麻酔スタンダード―他科依頼にいかに答えるか

各項目自体は数ページしかなく、さくさく読める。合併症患者の気をつけることだけでなく、ちょっとした生理学のまとめ(といっても普通のこと)が書いてあるので、お勉強にもよいと思う。

フェンタニルの持続静注と部位効果濃度

フェンタニルの持続静注をすることで術後鎮痛を行うことがあるが、フェンタニルを低用量で開始するだけでは目標とする鎮痛濃度に達するにはものすごい時間がかかる。
例えば、身長160cm、体重50kg、年齢40歳の男性に20ug/hr でフェンタニルの持続静注をすると、効果部位の平衡濃度(の0.05 ng/ml 誤差範囲)に達するのに27時間程度かかる。
f:id:MikuHatsune:20190309210243p:plain
術後鎮痛に必要なフェンタニルの部位効果濃度は1-3 ng/ml 程度らしいので20ug/hr の投与はそもそも足りてないのだが、こんなものである。
というわけで、投与前もしくは投与してから早めの段階で、けっこうな用量をボーラス投与して、部位効果濃度を高くする。
体重と同用量の投与(この場合は50ug のフェンタニル)では、24時間
f:id:MikuHatsune:20190309210304p:plain

x3 (150ug)では、15時間
f:id:MikuHatsune:20190309210319p:plain
x5 (250ug)では、4時間程度になる。
f:id:MikuHatsune:20190309210339p:plain

library(shiny)
library(shinyTime)
library(googleVis)
# Define server logic required to draw a histogram
weight <- 50
height <- 160
age <- 40
hour <- 60
Cont_conc <- 20 # 持続静注の濃度 ug/hr
starttime <- strptime("09:00:00", "%T")
gender <-  "M"
iv1 <- 3*weight
comp <- c(1:3, "e")
cname <- c("Bolus", "Cont", sprintf("A%s", comp), mapply(function(z) sprintf("dA%s_%d", comp, z), 1:4), sprintf("C%s", comp))
X <- matrix(0, hour*60, length(cname), dimnames=list(NULL, cname))
X <- as.data.frame(X)
timestep <- 60
k_1N <- c(0.0827, 0.471, 0.225)
k_N1 <- c(0.102, 0.006)
k_e0 <- 0.114
k <- c(k_1N, k_N1, k_e0)/(60/timestep)
# remifentanyl
# k <- c(0.562, 0.488, 0.018, 0.242, 0.014, 0.595)/(60/timestep)
names(k) <- c(sprintf("k1%d", c(0, 2, 3)), sprintf("k%d1", 2:3), "ke0")
LBM <- ifelse(gender == "M", 1.1*weight-128*(weight/height)^2,1.07*weight-148*(weight/height)^2)
k1 <- k["k10"] + k["k12"] + k["k13"]
V1 <- 0.105*weight
# V1 <- 5.1-0.0201*(age-40)+0.072*(LBM-55)
CLs <- k[c("k10", "k12", "k13")]*(60/timestep)*V1
V2 <- CLs[2]/(k["k21"]*(60/timestep))
V3 <- CLs[3]/(k["k31"]*(60/timestep))
t0 <- starttime - 61*0
tx <- t0 + (seq(nrow(X))-1)*60
X[, "Cont"] <- Cont_conc/60*1000
X <- na.omit(X)
X <- rbind(0, X)
X[2, "Bolus"] <- iv1*1000*(60/timestep)
for(i in 1:(nrow(X)-1)){
  X$dA1_1[i+1] <- k["k21"]*X$A2[i]+k["k31"]*X$A3[i]-k1*X$A1[i]+X$Cont[i+1]/(60/timestep)
  X$dA2_1[i+1] <- k["k12"]*X$A1[i] - k["k21"]*X$A2[i]
  X$dA3_1[i+1] <- k["k13"]*X$A1[i] - k["k31"]*X$A3[i]
  X$dAe_1[i+1] <- k["ke0"]*(X$A1[i] - X$Ae[i])
  X$dA1_2[i+1] <- k["k21"]*(X$A2[i]+X$dA2_1[i+1]/2)+k["k31"]*(X$A3[i]+X$dA3_1[i+1]/2)-k1*(X$A1[i]+X$dA1_1[i+1]/2)+X$Cont[i+1]/(60/timestep)
  X$dA2_2[i+1] <- k["k12"]*(X$A1[i]+X$dA1_1[i+1]/2) - k["k21"]*(X$A2[i]+X$dA2_1[i+1]/2)
  X$dA3_2[i+1] <- k["k13"]*(X$A1[i]+X$dA1_1[i+1]/2) - k["k31"]*(X$A3[i]+X$dA3_1[i+1]/2)
  X$dAe_2[i+1] <- k["ke0"]*(X$A1[i]+X$dA1_1[i+1]/2 - (X$Ae[i]+X$dAe_1[i+1]/2))
  X$dA1_3[i+1] <- k["k21"]*(X$A2[i]+X$dA2_2[i+1]/2)+k["k31"]*(X$A3[i]+X$dA3_2[i+1]/2)-k1*(X$A1[i]+X$dA1_2[i+1]/2)+X$Cont[i+1]/(60/timestep)
  X$dA2_3[i+1] <- k["k12"]*(X$A1[i]+X$dA1_2[i+1]/2) - k["k21"]*(X$A2[i]+X$dA2_2[i+1]/2)
  X$dA3_3[i+1] <- k["k13"]*(X$A1[i]+X$dA1_2[i+1]/2) - k["k31"]*(X$A3[i]+X$dA3_2[i+1]/2)
  X$dAe_3[i+1] <- k["ke0"]*(X$A1[i]+X$dA1_2[i+1]/2 - (X$Ae[i]+X$dAe_2[i+1]/2))
  X$dA1_4[i+1] <- k["k21"]*(X$A2[i]+X$dA2_3[i+1])+k["k31"]*(X$A3[i]+X$dA3_3[i+1])-k1*(X$A1[i]+X$dA1_3[i+1])+X$Cont[i+1]/(60/timestep)
  X$dA2_4[i+1] <- k["k12"]*(X$A1[i]+X$dA1_3[i+1]) - k["k21"]*(X$A2[i]+X$dA2_3[i+1])
  X$dA3_4[i+1] <- k["k13"]*(X$A1[i]+X$dA1_3[i+1]) - k["k31"]*(X$A3[i]+X$dA3_3[i+1])
  X$dAe_4[i+1] <- k["ke0"]*(X$A1[i]+X$dA1_3[i+1] - (X$Ae[i]+X$dAe_3[i+1]))
  X$A1[i+1]    <- X$A1[i]+(X$dA1_1[i+1]+2*X$dA1_2[i+1]+2*X$dA1_3[i+1]+X$dA1_4[i+1])/6+X$Bolus[i+1]/(60/timestep)
  X$A2[i+1]    <- X$A2[i]+(X$dA2_1[i+1]+2*X$dA2_2[i+1]+2*X$dA2_3[i+1]+X$dA2_4[i+1])/6
  X$A3[i+1]    <- X$A3[i]+(X$dA3_1[i+1]+2*X$dA3_2[i+1]+2*X$dA3_3[i+1]+X$dA3_4[i+1])/6
  X$Ae[i+1]    <- X$Ae[i]+(X$dAe_1[i+1]+2*X$dAe_2[i+1]+2*X$dAe_3[i+1]+X$dAe_4[i+1])/6
  X$Ce[i+1]    <- X$Ae[i+1]/V1/1000
  X$C1[i+1]    <- X$A1[i+1]/V1/1000
  X$C2[i+1]    <- X$A2[i+1]/V2/1000
  X$C3[i+1]    <- X$A3[i+1]/V3/1000
}
X <- X[-1,]
# yl <- c(0, max(X$Ce))
yl <- c(0, 2)
par(mar=c(5, 5, 2, 1), las=1, cex.lab=1.5)
plot(tx, X$Ce, type="n", ylim=yl, xlab="Time", ylab="Effect concentratoin [ng/ml]")
lines(tx, X$Ce, lwd=7)
abline(h=1.0, lty=3)
abline(h=2.0, lty=3, col="red", lwd=2)
abline(v=seq.POSIXt(tx[1], tail(tx, 1)+100, by=15*60), lty=3)
X <- data.frame(time=tx, X)
plot(X$time, X$Ce, type="l")
Cs <- grep("C[123e]", colnames(X), value=TRUE)
matplot(tx, X[, Cs], type="l")
cols <- c("yellow", "orange", "hotpink", "blue")
h24 <- seq.POSIXt(tx[1], tail(tx, 1)+100, by=60*60*24)
par(mar=c(5, 5, 2, 1), las=1, cex.lab=1.5)
plot(tx, X$Ce, type="n", ylim=yl, xlab="Time", ylab="Effect concentratoin [ng/ml]", xaxt="n")
for(i in seq(Cs)) lines(tx, X[, Cs[i]], lwd=7, col=cols[i])
axis(1, at=h24, labels=24*(seq_along(h24)-1))
abline(h=1.0, lty=3)
abline(h=2.0, lty=3, col="red", lwd=2)
abline(v=seq.POSIXt(tx[1], tail(tx, 1)+100, by=120*60), lty=3)
abline(v=h24[-1], lty=1, lwd=3)
legend("bottomright", legend=Cs, col=cols, pch=15, cex=2, bg="white")
xd <- tail(which(abs(X$Ce-tail(X$Ce, 1)) > 0.05), 1) # 0.05 ng/ml の誤差範囲
abline(v=tx[xd], col=2)
eqt <- difftime(tx[xd], tx[1], units="hours")
text(tx[xd], par()$usr[4], sprintf("%0.2f hrs", eqt), pos=3, xpd=TRUE)

googlevis をはてなブログにそのまま貼れる

前にこんな話をした。
mikuhatsune.hatenadiary.com
はてなダイアリーではhtml の扱いがよくわからなかったので、グラフ上の値を取得できるreactive なグラフはよくわからなかった。
はてなブログではhtml の扱いが強化されているっぽいので、googlevisやplotly といったhtml ベースのグラフはRや、Rで実行した時にブラウザで表示されるような感じではてなブログ内に埋め込むことができる。
はてなブログでは編集モードを最初に決めたものでしか以降の編集はできないようなので、html強者ならばhtmlそのままモードで、弱者ならはてな記法markdown記法モードで記事作成を始めて、Rオブジェクトとして作成したグラフデータ(これはhtmlである)をそのままコピペするとよい。
 
コードはこのように作って

library(googleVis)
dat <- data.frame(year=seq(tsp(Nile)[1], tsp(Nile)[2]), flow=Nile@.Data)
opt <- list(lineWidth=3, width=800, height=300, legend="none", title="Nile flow", vAxis="{title: 'Flow'}", hAxis="{title:'Year'}")
g <- gvisLineChart(dat, xvar="year", yvar="flow", options=opt)
plot(g)
g$html$caption <- NULL
g$html$footer <- NULL

グラフの結果は以下にコピペして貼る。


library(googleVis)
dat <- data.frame(year=seq(tsp(Nile)[1], tsp(Nile)[2]), flow=Nile@.Data)
opt <- list(lineWidth=3, width=800, height=300, legend="none", title="Nile flow", vAxis="{title: 'Flow'}", hAxis="{title:'Year'}")
g <- gvisLineChart(dat, xvar="year", yvar="flow", options=opt)
plot(g)

術中に麻薬を使っても術後鎮痛にはあまり効果がないのかもしれない

読んだ。

www.ncbi.nlm.nih.gov

術中麻薬を使う群と使わない群で、術後の鎮痛効果をNRSで比較したメタアナリシス。

副次評価としてPONVの発生率を比較している。

術中に麻薬を使わないのがよくわからないのでよくわからない内容だった。術中に麻薬を使う群は、基本はレミフェンタニルで、ほかはフェンタニルやアフェンタニル、スフェンタニルなど。対照は生食やNoneなど。本当にこんなので術中管理できるのか、レミフェンタニルしか使ったことがないのでよくわからなかった。手術内容は扁桃腺摘出、婦人科手術、腹部外科などそこそこの侵襲があると思われる手術。

結局術後鎮痛にモルヒネフェンタニルのivPCAを使っている。

PONVの発生率は麻薬使用で24%、未使用で19%だった。上記のような手術ならば(海外ならば)術後すぐに退院という流れなので、PONVの発生は入院期間を延長するので医療経済的によくないので減った方がよさそうだが、大手術で1週間くらい入院するなら術中麻薬漬けにしてしまうなあと思った。

 レミフェンタニルフェンタニル半減期を考えると、持続投与されないと術後鎮痛には効果がないのは当然だと思うが。。。

PENG ブロック

MikuHatsune2019-01-08

読んだ。
Pericapsular Nerve Group (PENG) Block for Hip Fracture.
Reg Anesth Pain Med. 2018 Nov;43(8):859-863.
骨頭置換のときに腸骨筋膜下ブロック(FIB)をすることがあるが、股関節の神経支配は大腿神経関節枝、閉鎖神経(前枝)、副閉鎖神経をブロックしないと痛いので、FIBでは疼痛管理が不十分で麻薬使用量があまり減らないことがあるらしい。
PENG ブロックは関節包周辺の神経をブロックするということでこの名前が付いている。Peng さんも著者にいるが関係なさそう。
Ultrasonography-guided articular branch of femoral nerve and anterior obturator nerve block for perioperative pain in hip surgery
 
腸骨稜から鼠径靭帯より頭側にコンベックス型プローブを当てると、骨盤と大腿神経が見える。報告では腸腰筋の腱が見えるようだが大腿神経がよく見えるような気がするのだが。
0.25% ブピバカイン 20ml に40万倍希釈のエピネフリンを添加して作用時間の延長を図っている。0.1-0.2% レボブピバカイン 20ml に3.3mg デキサメタゾンを使うことが多い。
 
こんな感じで見える。中央が坐骨神経、ひだりの黒丸が大腿動脈で、画面みぎ側が外側にあたる。針は画面みぎ上から刺入する。