作者: @habari2011dunia (twitter)
E-mail: habari2011dunia@gmail.com
2013年6月9日
ここからダウンロード可能: コンパートメントモデル(Google Drive)
これらのファイルを作業フォルダに置き,
source("functions.R")
で関数定義コードを読み込む
ModelParameters()を使う
134Cs 成人公衆 経口摂取(ICRP現行モデル)に関するデータのリストを取得する
param <- ModelParameters(134, "Cs")
リストは4つのオブジェクトからなる
移行係数(1/日)
param$transfer.coefficient
## model proposed.by year element age sex intake type
## 1 Biokinetic ICRP.publ.67 1992 Cs 20y All Ing All
## 2 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 3 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 4 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 5 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 6 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 7 Biokinetic ICRP.publ.67 1992 Cs 20y All All All
## 8 UBM ICRP.publ.67 1992 All 20y All All All
## 9 GITM ICRP.publ.30 1979 All All All All All
## 10 GITM ICRP.publ.30 1979 All All All All All
## 11 GITM ICRP.publ.30 1979 All All All All All
## 12 GITM ICRP.publ.30 1979 All All All All All
## from to transfer.coefficient
## 1 Small.Intestine Blood 5.940e+02
## 2 Blood Body.Tissue.A 2.773e-01
## 3 Blood Body.Tissue.B 2.495e+00
## 4 Body.Tissue.A Bladder 2.773e-01
## 5 Body.Tissue.A Upper.Large.Intestine 6.931e-02
## 6 Body.Tissue.B Bladder 5.041e-03
## 7 Body.Tissue.B Upper.Large.Intestine 1.260e-03
## 8 Bladder Urine 1.200e+01
## 9 Stomach Small.Intestine 2.400e+01
## 10 Small.Intestine Upper.Large.Intestine 6.000e+00
## 11 Upper.Large.Intestine Lower.Large.Intestine 1.800e+00
## 12 Lower.Large.Intestine Feces 1.000e+00
初期値
param$initial.value
## compartment initial.value
## 1 Stomach 1
崩壊定数(1/日)
param$decay.constant
## [1] 0.0009191
預託実効線量係数(Sv/Bq)
param$dose.coefficient
## [1] 1.9e-08
137Cs 成人作業者 吸入摂取 エアロゾル タイプF 粒径1μm(ICRP現行モデル)
ModelParameters(134, "Cs", intake = "Inh", type = "Aerosol.Type.F", size = 1,
worker = TRUE)
131I 1才 吸入摂取 単体ヨウ素蒸気(ICRP現行モデル)
ModelParameters(131, "I", "1y", "Inh", "Elemental.Iodine.Vapour")
131I 1才 吸入摂取 ヨウ化メチル(ICRP現行モデル)
ModelParameters(131, "I", "1y", "Inh", "Methyl.Iodide")
134Cs 経口摂取 成人男性公衆 (Leggettら(2003)によるモデル)
ModelParameters(134, "Cs", model = "Leggett2003")
パラメータを取得しておく
param <- ModelParameters(134, "Cs")
コンパートメント名の文字列ベクトルを得る
CompartmentNames(param)
## [1] "Small.Intestine" "Blood"
## [3] "Body.Tissue.A" "Body.Tissue.B"
## [5] "Bladder" "Stomach"
## [7] "Upper.Large.Intestine" "Lower.Large.Intestine"
## [9] "Urine" "Feces"
体内コンパートメント名のみ
CompartmentNames(param, part = "in")
## [1] "Small.Intestine" "Blood" "Body.Tissue.A"
## [4] "Body.Tissue.B" "Bladder" "Stomach"
## [7] "Upper.Large.Intestine" "Lower.Large.Intestine"
体外コンパートメント名のみ
CompartmentNames(param, part = "ex")
## [1] "Urine" "Feces"
移行係数行列をつくる
TCMatrix(param)
## Small.Intestine Blood Body.Tissue.A Body.Tissue.B
## Small.Intestine -600 0.0000 0.00000 0.000000
## Blood 594 -2.7735 0.00000 0.000000
## Body.Tissue.A 0 0.2773 -0.34749 0.000000
## Body.Tissue.B 0 2.4953 0.00000 -0.007220
## Bladder 0 0.0000 0.27726 0.005041
## Stomach 0 0.0000 0.00000 0.000000
## Upper.Large.Intestine 6 0.0000 0.06931 0.001260
## Lower.Large.Intestine 0 0.0000 0.00000 0.000000
## Urine 0 0.0000 0.00000 0.000000
## Feces 0 0.0000 0.00000 0.000000
## Bladder Stomach Upper.Large.Intestine
## Small.Intestine 0 24 0.000
## Blood 0 0 0.000
## Body.Tissue.A 0 0 0.000
## Body.Tissue.B 0 0 0.000
## Bladder -12 0 0.000
## Stomach 0 -24 0.000
## Upper.Large.Intestine 0 0 -1.801
## Lower.Large.Intestine 0 0 1.800
## Urine 12 0 0.000
## Feces 0 0 0.000
## Lower.Large.Intestine Urine Feces
## Small.Intestine 0.000 0.0000000 0.0000000
## Blood 0.000 0.0000000 0.0000000
## Body.Tissue.A 0.000 0.0000000 0.0000000
## Body.Tissue.B 0.000 0.0000000 0.0000000
## Bladder 0.000 0.0000000 0.0000000
## Stomach 0.000 0.0000000 0.0000000
## Upper.Large.Intestine 0.000 0.0000000 0.0000000
## Lower.Large.Intestine -1.001 0.0000000 0.0000000
## Urine 0.000 -0.0009191 0.0000000
## Feces 1.000 0.0000000 -0.0009191
初期値ベクトルをつくる
InitialVector(param)
## Small.Intestine Blood Body.Tissue.A
## 0 0 0
## Body.Tissue.B Bladder Stomach
## 0 0 1
## Upper.Large.Intestine Lower.Large.Intestine Urine
## 0 0 0
## Feces
## 0
残留割合の時間関数を作るにはRetentionFunction()を用いる
f <- RetentionFunction(param)
プロット
curve(f, xlim = c(-40, 200))
時刻t = 0日, 1日, 2日, 3日, 4日に1Bqずつ摂取したときの全身残留量
g <- function(t) f(t) + f(t - 1) + f(t - 2) + f(t - 3) + f(t - 4)
curve(g, xlim = c(-3, 30))
ベクトル値関数を作る
f <- RetentionFunction(param, vectorValue = TRUE)
摂取3日後の体内分布は?
f(3)
## [,1]
## Small.Intestine 2.236e-33
## Blood 2.738e-04
## Body.Tissue.A 4.047e-02
## Body.Tissue.B 8.739e-01
## Bladder 1.330e-03
## Stomach 5.365e-32
## Upper.Large.Intestine 2.523e-03
## Lower.Large.Intestine 5.531e-03
時間ベクトルに対しては行列値を返す
f(c(0, 1, 10, 100))
## [,1] [,2] [,3] [,4]
## Small.Intestine 0 1.572e-12 2.427e-106 0.000e+00
## Blood 0 7.022e-02 1.013e-12 3.972e-121
## Body.Tissue.A 0 7.312e-02 3.557e-03 9.306e-17
## Body.Tissue.B 0 8.235e-01 8.310e-01 4.339e-01
## Bladder 0 2.028e-03 4.339e-04 1.824e-04
## Stomach 1 3.772e-11 5.825e-105 0.000e+00
## Upper.Large.Intestine 0 4.208e-03 7.535e-04 3.049e-04
## Lower.Large.Intestine 0 6.156e-03 1.524e-03 5.523e-04
compartment変数を指定することで特定のコンパートメントのみの残留割合関数を作れる
Bloodコンパートメントの残留割合
f <- RetentionFunction(param, compartment = "Blood")
curve(f, xlim = c(0, 1))
一日あたり排出割合を求めるには, derivativeオプションを使って導関数を作る
尿と糞の排出割合の和
f <- RetentionFunction(param, c("Urine", "Feces"), derivative = TRUE)
尿の排出割合
f1 <- RetentionFunction(param, "Urine", derivative = TRUE)
糞の排出割合
f2 <- RetentionFunction(param, "Feces", derivative = TRUE)
プロット
curve(f, xlim = c(0, 12))
curve(f1, add = TRUE, lty = 2)
curve(f2, add = TRUE, lty = 3)
eigenanalysisオプションを使うと固有値解析によって残留割合関数を作る
まず131ヨウ素経口(成人)のデータを取得
param <- ModelParameters(131, "I")
甲状腺残留割合の時間関数を固有値解析を用いて作る
f <- RetentionFunction(param, "Thyroid", eigenanalysis = TRUE)
その積分を求める. 固有値解析の場合, integralオプションが使える.
g <- RetentionFunction(param, "Thyroid", eigenanalysis = TRUE, integral = TRUE)
プロット
par(mfrow = c(2, 1))
plot(f, xlim = c(-3, 30))
plot(g, xlim = c(-3, 30))
甲状腺MRT(日)を求める
g(Inf)
## [1] 3.043
グラフ理論を扱うigraphパッケージを使って体内動態図を描く
library(igraph)
g <- graph.data.frame(param$transfer.coefficient[, c("from", "to")])
plot(g)