放射性核種の体内動態解析のためのデータと関数の使い方

作者: @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))

plot of chunk unnamed-chunk-19

時刻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))

plot of chunk unnamed-chunk-20

ベクトル値関数を作る

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))

plot of chunk unnamed-chunk-24

微分

一日あたり排出割合を求めるには, 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)

plot of chunk unnamed-chunk-28

積分

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))

plot of chunk unnamed-chunk-33

甲状腺MRT(日)を求める

g(Inf)
## [1] 3.043

igraphパッケージによるダイヤグラムの描画

グラフ理論を扱うigraphパッケージを使って体内動態図を描く

library(igraph)
g <- graph.data.frame(param$transfer.coefficient[, c("from", "to")])
plot(g)

plot of chunk unnamed-chunk-36