数理社会学: なぜ宣伝しなくても流行がおこるのか

vogue2015plot

社会を<モデル>でみる:数理社会学への招待
18章:なぜ宣伝しなくても流行がおこるのか。
モデルの説明:
x:流行に影響されていない人
y:流行に影響されている人
z:以前流行に影響されてが、もう影響されていない
t:時間
\delta x = -\alpha * x[t] * y[t] * \delta t
\delta y = (\alpha * x[t] * y[t] – \beta * y[t]) * \delta t
\delta z = \beta * y[t] * \delta t

# initialization
vogue<-function(alpha,beta,x.init,y.init,z.init,max_time){
  dt=0.01
  x=c(x.init,rep(0,max_time))
  y=c(y.init,rep(0,max_time))
  z=c(z.init,rep(0,max_time))
 # main loop
  for (t in 1:max_time) {
    x[(t+1)]=x[t]-alpha*x[t]*y[t]*dt
    y[(t+1)]=y[t]+(alpha*x[t]*y[t]-beta*y[t])*dt
    z[(t+1)]=z[t]+beta*y[t]*dt
  }
 return(data.frame(x,y,z))
}
vogue.plot<-function(dat) {
 plot(dat$x,type="l",lwd=4,col="blue", main="Typical Time Series of \"Vogue\" ",
  xlab="time", ylab="Number of People",cex.lab=1.3,ylim=c(0,dat$x[1]))
 lines(dat$y,type="l",lwd=4,col="red")
 lines(dat$z,type="l",lwd=4,col="green")
 legend("right", c("affected","not affected", "no longer affected"), 
  col=c("red","blue","green"),lty=rep(1,3),lwd=4)
}

# running functions
res<-vogue(0.0001,0.1,10000,100,0,5000)
vogue.plot(res)

Leave a Reply