社会を<モデル>でみる:数理社会学への招待
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)
