モデル
Nerlove と Arrow(読み方はネルロフとアロウでいいのかな?)が提案したらしい広告に対する市場の販売のモデルというのがあり、これは以下の通り教科書に出てくる「一階線形常微分方程式」そのものの形をしている。
- A(t)が時刻 tでの売上
- q(t)が広告費用
を表しており、売上の増加は広告費用に比例し、いっぽうで売上は定常的に減少する、というシンプルな仮定を置いている。
典型的な解の例
最初は製品のことをだれもしらないので、売上 A(t)の初期値は 0 とする。
モデル1
製品のリリース後しばらく(時刻 τまで)は同じだけの広告費用をかけ、しばらくしたら(時刻 τ以降)広告を打ち切るような場合 を考え、q(t)を以下のようにする。
A(t)は以下のようになる。
#R のコード NAmodel0_ex <-function(t,b,k,tau){ ifelse(t<=tau, b*(1-exp(-k*t))/k, b*(exp(k*tau)-1)*exp(-k*t)/k )} par(mfrow=c(2,1)) curve(ifelse(x<10,1,0),0,20,xlab="t",ylab="",main="q(t)") curve(NAmodel0_ex(x,5*1,0.2,10),0,20,xlab="t",ylab="",main="A(t)")
モデル2
製品のリリース時はいっぱい広告費用をかけるが、直線的に減少していくような場合を考え、q(t)に以下のような線形の式を置く。
#R のコード NAmodel1_ex <-function(t,pars){ q0 <- pars[1] alpha <- pars[2] b <- pars[3] k <- pars[4] ifelse( t<q0/alpha, b*(k*(q0-alpha*t)+alpha)/(k^2)-(k*q0+alpha)*b*exp(-k*t)/(k^2),((b*alpha)*exp(k*q0/alpha)/(k^2)-(k*q0+alpha)*b/(k^2))*exp(-k*t))} curve(ifelse(x<20/0.5,20-0.5*x,0),0,60,xlab="t",ylab="",main="q(t)") pars <- c(q0=20,alpha=0.5,b=1,k=1/10) curve(NAmodel1_ex(x,pars),0,60,xlab="t",ylab="",main="A(t)")
シミュレーション
モデル 2 でパラメータをいろいろ変えてみる。
pars1 <- c(q0=20,alpha=0.5,b=2,k=1/5) curve(NAmodel1_ex(x,pars1),0,60,xlab="t",ylab="A(t)",lwd=3) pars2 <- c(q0=20,alpha=0.5,b=1,k=1/10) curve(NAmodel1_ex(x,pars2),col="red",add=TRUE,lwd=3) pars3 <- c(q0=20,alpha=0.5,b=1,k=1/5) curve(NAmodel1_ex(x,pars3),col="blue",add=TRUE,lwd=3) pars4 <- c(q0=20,alpha=1,b=1,k=1/5) curve(NAmodel1_ex(x,pars4),col="orange",add=TRUE,lwd=3)
deSolve パッケージで確かめ算
deSolve パッケージで数値的に解いた値と解析解が一致することを確かめる。
曲線が解析解。マルが数値解。
モデル1
library(deSolve) NAmodel0<-function(Time, State, Pars){ with(as.list(c(State, Pars)),{ q1 <- ifelse(Time <10,5,0) dA <- b*q1-k*A list(dA)})} ini <- c(A =0) times <- seq(from=0, to=20,by=0.1) pars <- c(b=1,k=0.2) out <- ode(y=ini,times=times,func = NAmodel0,parms =pars) curve(NAmodel0_ex(x,5*1,0.2,10),0,20,xlab="t",ylab="",main="A(t)",lwd=2) points(out)
モデル2
NAmodel1<-function(Time, State, Pars){ with(as.list(c(State, Pars)),{ q1 <- ifelse(Time<q0/alpha,q0-alpha*Time,0) dA <- b*q1-k*A list(dA)})} ini <- c(A =0) ts <- seq(from=0, to=60,by=1) pars <- c(q0=20,alpha=0.5,b=1,k=1/10) out <- ode(y=ini,times=ts,func = NAmodel1,parms =pars) curve(NAmodel1_ex(x,pars),0,60,xlab="t",ylab="",main="A(t)",lwd=2) points(out)
参考文献
- 作者:デヴィッド・バージェス・モラグ・ボリー,垣田 高夫,大町 比佐栄
- 出版社/メーカー:日本評論社
- 発売日: 1990/04/09
- メディア:単行本
- 購入: 15人 クリック: 101回
- この商品を含むブログ (5件) を見る