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

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, inits, max_time){
  dt=0.01
  max_timeR = max_time - 1
  x=c(inits[1], rep(0, max_timeR))
  y=c(inits[2], rep(0, max_timeR))
  z=c(inits[3], rep(0, max_timeR))
  # main loop
  for (t in 1:max_timeR) {
    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, c(10000, 100, 0), 5000)
vogue.plot(res)

Leave a Reply