年齢層別のSEIRモデルをコーディングしようとしています。つまり、私の微分方程式には、20歳以上のベータ*(感染率)*(影響を受けやすい数)の合計である質量作用のパラメーターがあります。透過係数(ベータ)は、接触マトリックスから計算されます。接触マトリックスには、年齢クラス(rows = person i、columns = person j)を表す20の列と行があり、任意の年齢クラスの2人の接触の確率が含まれています。私はそれを設計してRに読み込みました。私の問題は、deSolveを使用してパラメーター内で行列を使用する方法(または使用するかどうか)がわからないことです。私が書いた以下のコードは機能しません、私はマトリックスのために信じています/私はこのエラーを受け取ります:
Error in beta * S : non-numeric argument to binary operator
あまり騙される前に、このモデルのパラメーターとしてこのような行列を使用できるかどうかを知りたいと思います。
mat <-as.matrix(read.csv("H:/IBS 796R/contactmatrix.csv", header=F))
times <- seq(0,20,by=1/52)
parameters <- c(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15)
xstart <- c(S=0.06,E=0,I=0.001,R=0)
SEIR0 <- function(t,x,parameters){
S=x[1]
E=x[2]
I=x[3]
R=x[4]
with(as.list(parameters), {
dS=v*S -beta*S*I/N -delta*S
dE=beta*S*1/N -E*(sigma+delta)
dI=sigma*E -I*(gamma+delta)
dR=gamma*I-delta*R
res=c(dS,dE,dI,dR)
list(res)
})
}
out <- as.data.frame(lsoda(xstart,times,SEIR0,parameters))
また、パラメータを印刷すると、ベータは次のようになります。
$beta.V1
[1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04
[12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03
$beta.V2
[1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04
[12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03
....$beta.V20を介して。つまり、それぞれが20個の引数を持つ20個のベクトルを作成していると思います...それぞれが元の行列「mat」に定数0.04を掛けた行だと思いますか?ただし、「パラメータ」の外側でmat * 0.04を乗算すると、期待される行列が得られます。deSolveを使用してこれらの方程式を実現する方法に少し苦労しており、それが可能かどうかについてアドバイスをいただければ幸いです。前もって感謝します。