Skip to content

Instantly share code, notes, and snippets.

@tslumley
Last active October 3, 2021 02:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tslumley/e07b28de1d2cb08275a31542071484a5 to your computer and use it in GitHub Desktop.
Save tslumley/e07b28de1d2cb08275a31542071484a5 to your computer and use it in GitHub Desktop.
Shows the potential impact of spatial structure on community immunity for a disease
pop<-matrix(0,102,102)
## uniform
vax<-matrix(rbinom(102*102,1,.83),102,102)
## vertical stripes
vax<-matrix(rep(c(0,1,1,1,1,1,1,0,1,1,1,1),length=102*102),102,102)
## high-risk square
#vax<-matrix(rbinom(102*102,1,.9),102,102); vax[1:41,1:42]<-rbinom(41*42,1,.5)
## grid
vax<-matrix(1,102,102);vax[seq(1,102,by=12),]<-0;vax[,seq(1,102,by=12)]<-0
xy<-matrix(sample(100,2,replace=TRUE,prob=150:51),nrow=1)+1
pop[xy]<-1
f<-function(sourcex,sourcey,destx,desty){
(1-vax[cbind(sourcex,sourcey)]/2)*(1-vax[cbind(destx,desty)]*3/4)
}
image(((pop>0)+2*vax)[2:101,2:101], col=c("grey","red","blue","purple"))
for(i in 1:100){
id<-which((pop==1),arr.ind=TRUE)
id1<-id[,1,drop=FALSE]
id2<-id[,2,drop=FALSE]
n<-nrow(id)
pop[id1,id2]<-10
pop[cbind(id1-1,id2-1)]<-pop[cbind(id1-1,id2-1)]+rbinom(n,size=1,prob= f(id1,id2,id1-1,id2-1))
pop[cbind(id1-0,id2-1)]<-pop[cbind(id1-0,id2-1)]+rbinom(n,size=1,prob= f(id1,id2,id1-0,id2-1))
pop[cbind(id1+1,id2-1)]<-pop[cbind(id1+1,id2-1)]+rbinom(n,size=1,prob= f(id1,id2,id1+1,id2-1))
pop[cbind(id1-1,id2-0)]<-pop[cbind(id1-1,id2-0)]+rbinom(n,size=1,prob= f(id1,id2,id1-1,id2-0))
pop[cbind(id1+1,id2-0)]<-pop[cbind(id1+1,id2-0)]+rbinom(n,size=1,prob= f(id1,id2,id1+1,id2-0))
pop[cbind(id1-1,id2+1)]<-pop[cbind(id1-1,id2+1)]+rbinom(n,size=1,prob= f(id1,id2,id1-1,id2+1))
pop[cbind(id1-0,id2+1)]<-pop[cbind(id1-0,id2+1)]+rbinom(n,size=1,prob= f(id1,id2,id1-0,id2+1))
pop[cbind(id1+1,id2+1)]<-pop[cbind(id1+1,id2+1)]+rbinom(n,size=1,prob= f(id1,id2,id1+1,id2+1))
pop[1,]<-0
pop[102,]<-0
pop[,1]<-0
pop[,102]<-0
nvax<-sum(vax[pop>0])
nunvax<-sum((1-vax)[pop>0])
pop[pop>0 & pop<10]<-1
image(((pop>0)+2*vax), col=c("grey","red","blue","purple"))
title(paste(nvax+nunvax,"total cases:",nvax,"vaccinated",nunvax,"unvaxed"))
if (sum(pop==1)==0) break
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment