Sorry found the syntax error, due to line wraps again, these 3 lines in the 
email are in fact 1 lines as below, assuming this doesn’t wrap … (sorry to have 
missed that)…

> 1 (I.recovered_to_susceptible>?ppl$0)} 4
> (I.infectious_to_recovered>?ppl$0)} 0 (I.infectious_to_dead>?ppl$0)} 3
> (I.exposed_to_infectious>?ppl$0)} 2 (I.susceptible_to_exposed>?ppl$0)} y

ie 
1 (I.recovered_to_susceptible>?ppl$0)} 4 (I.infectious_to_recovered>?ppl$0)} 0 
(I.infectious_to_dead>?ppl$0)} 3 (I.exposed_to_infectious>?ppl$0)} 2 
(I.susceptible_to_exposed>?ppl$0)} y


Thanks, Rob (but a good exercise to see if you can attach the TXT file 
anyway)…/Rob

> On 28 Mar 2020, at 9:03 am, Robert Herman <[email protected]> wrote:
> 
> The code format is rendering with *'s for italics. Here is hopefully a more
> legible paste:
> 
> load 'viewmat'
> coinsert'jgl2'
> 
> wd 'pc Covid-19-Sim closeok'        NB. parent control (window) named 'w0'
> wd 'minwh 500 500; cc g0 isidraw;'  NB. add an 'isidraw' child control
> named 'g0'
> wd 'pshow; pmove 40 510 0 0'        NB. show the window at the given
> coordinates.
> wd 'sm focus term'                  NB. session manager: bring terminal to
> front
> wd 'psel Covid-19-Sim; ptop'        NB. bring our window to front
> 
> vmcc =: viewmatcc_jviewmat_   NB. viewmat to a child control
> step =: render @ update       NB. each step, we'll call those two in
> sequence
> 
> RGB=: (#:i.8) { 0 255
> DSEIR =: (0 7 6 4 2 { RGB)
> 
> update =: verb define
>  im =: 12 12 $ infect_display starting_pop
> )
> 
> render =: verb define
>  DSEIR vmcc im;'g0'
>  glpaint''
> )
> 
> sys_timer_z_ =: step_base_
> wd 'timer 0'
> 
> ppl =: 144           NB. How many people are in our simulation?
> 
> Beta  =: 0.106271    NB. The rate at which susceptible people become
> exposed. RPH - dependent on R0 = 2.2 3/25/2020
> Sigma =: 0.066967    NB. The rate at which exposed people become
> infectious. RPH - (1-sigma)^10=0.5, 10 is incubation period.
> Gamma =: 0.056126    NB. The rate at which infectious people recover. RPH -
> adjusted to 12 days, so (1-Gamma)^12=0.5.
> Xi    =: 0.02284     NB. The rate at which recovered people lose immunity
> and become susceptible. RPH - 30 days
>    NB. is partially based upon man on Diamond Princess who presented
> symptoms around 30 days otherwise made up.
> R     =: 2.2         NB. How many people will 1 person infect? RPH - based
> on latest CDC estimate 3/25/2020
> CFR   =: 0.015       NB. Case Fatality Rate - RPH based upon 0.25% to 3%
> from CDC, so 1.5% is higher than average.
> D     =: 0.0011619   NB. Death rate per day while symptomatic - RPH based
> upon 13 days to death as seen and per CDC.
> 
> ClosenessStdDev =: 5 % 3
> ClosenessMean =: 1
> 
> rand_norm =: 3 : '(2&o. 2p1 * ? y) * %: _2 * ^. ? y'
> closeness =: 4 %~ 2 %~ (+ |:) ClosenessMean + ClosenessStdDev * rand_norm
> (ppl,ppl) $ 0
> risk =: closeness - closeness * =i.ppl
> NB. risk =: (ppl,ppl)$0
> 
> NB. 0 = Dead
> NB. 1 = Susceptible
> NB. 2 = Exposed
> NB. 3 = Infectious
> NB. 4 = Recovered
> starting_pop =: 2 , (ppl - 1) $ 1
> 
> infect =: 3 : 0
> can_spread =. (1&< *. 4&>) y
> susceptible =. y = 1
> exposed     =. y = 2
> infectious  =. y = 3
> recovered   =. y = 4
> 
> infectiousness =. can_spread ,./ . * risk
> 
> susceptible_to_exposed =. (Beta * susceptible) * (+/ can_spread) %~ +/ |:
> susceptible * infectiousness
> exposed_to_infectious =. Sigma * exposed
> infectious_to_recovered =. Gamma * infectious
> infectious_to_dead =. D * infectious
> recovered_to_susceptible =. Xi * recovered
> 
> 1 (I.recovered_to_susceptible>?ppl$0)} 4
> (I.infectious_to_recovered>?ppl$0)} 0 (I.infectious_to_dead>?ppl$0)} 3
> (I.exposed_to_infectious>?ppl$0)} 2 (I.susceptible_to_exposed>?ppl$0)} y
> )
> 
> infect_display =: 3 : 0
> out =. infect y
> smoutput out
> smoutput
> ('Susceptible';'Exposed';'Infectious';'Recovered';'Dead'),:(+/1=out);(+/2=out);(+/3=out);(+/4=out);(+/0=out)
> out
> )
> 
> On Fri, 27 Mar 2020 at 14:24, Robert Herman <[email protected]> wrote:
> 
>> I found this article:
>> 
>> Modeling the COVID-19 Outbreak with J
>> <https://datakinds.github.io/2020/03/15/modeling-the-coronavirus-outbreak-with-j>
>> 
>> I took the author's code, which is a modified SEIR model (The_SEIR_model
>> <https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_model>),
>> and updated some of the data and recalculated the variables. I then
>> pilfered some of Michal's (Tangentstorm, you rock!) code for animating
>> things in J from his talks. This is helping me to push my learning of J,
>> and keep it interesting.
>> 
>> Two disclaimers: The author of the linked article doesn't claim to be an
>> epidemiologist, and I am only doing this to learn J, and cannot comment on
>> any of the validity of the algorithm or simulations it produces.
>> 
>> Now, on to my two issues (full code at end):
>> 
>> 1. I know I have to figure out a way to have the* infect_display^:144
>> starting population* call feed the *update* loop, otherwise it is trying
>> to run all 144 days of simulation in one call to update at a frequency set
>> by *wd 'timer 600'*. I am working on this, and realize I somehow have to
>> run it outside of update, and then feed update "a day at a time". The goal
>> is to see the same person (grid location) evolve over the simulation. I
>> know this is simple, but i haven't gotten there yet. Any tips will be
>> appreciated!
>> 
>> 2. When I had initially set up the code to run 25 people instead of 144,
>> the color index I had setup with the DSEIR variable exhibit two strange
>> glitches. First, squares that were supposed to be 1=White, were rendering
>> as 0=Black=Dead, and sometimes colors appeared "blended". An yellowish,
>> off-white for yellow, and at times bright yellow. When I went to 144 people
>> and it is trying to run in update, the grid appears to be correctly
>> indexing and not moving askew from frame to frame, but the colors are
>> inconsistent.
>> 
>> BTW, thanks to Linda's article in Journal of J - Vol.4, No.1 for the RGB
>> list to then pull my desired colors from in the DSEIR variable (Dead,
>> Susceptible, Exposed, Infectious, Recovered):
>> 
>> *RGB=: (#:i.8) { 0 255*
>> 
>> 
>> *DSEIR =: (0 7 6 4 2 { RGB)*
>> 
>> Here is my integration of the two sources of code to try and animate the
>> outbreak per the article, and thanks!:
>> 
>> *load 'viewmat'*
>> 
>> *coinsert'jgl2'*
>> 
>> 
>> *wd 'pc Covid-19-Sim closeok' NB. parent control (window) named 'w0'*
>> 
>> *wd 'minwh 500 500; cc g0 isidraw;' NB. add an 'isidraw' child control
>> named 'g0'*
>> 
>> *wd 'pshow; pmove 40 510 0 0' NB. show the window at the given
>> coordinates.*
>> 
>> *wd 'sm focus term' NB. session manager: bring terminal to front*
>> 
>> *wd 'psel Covid-19-Sim; ptop' NB. bring our window to front*
>> 
>> 
>> *vmcc =: viewmatcc_jviewmat_ NB. viewmat to a child control*
>> 
>> 
>> *step =: render @ update NB. each step, we'll call those two in sequence*
>> 
>> 
>> *RGB=: (#:i.8) { 0 255*
>> 
>> 
>> *DSEIR =: (0 7 6 4 2 { RGB)*
>> 
>> 
>> *update =: verb define*
>> 
>> * im =: 12 12 $ infect_display^:144 starting_pop*
>> 
>> *)*
>> 
>> 
>> *render =: verb define*
>> 
>> * DSEIR vmcc im;'g0'*
>> 
>> * glpaint''*
>> 
>> *)*
>> 
>> 
>> *sys_timer_z_ =: step_base_*
>> 
>> *wd 'timer 600'*
>> 
>> 
>> *ppl =: 144 NB. How many people are in our simulation?*
>> 
>> 
>> *Beta =: 0.106271 NB. The rate at which susceptible people become exposed.
>> RPH - dependent on R0 = 2.2 3/25/2020*
>> 
>> *Sigma =: 0.066967 NB. The rate at which exposed people become infectious.
>> RPH - (1-sigma)^10=0.5, 10 is incubation period.*
>> 
>> *Gamma =: 0.056126 NB. The rate at which infectious people recover. RPH -
>> adjusted to 12 days, so (1-Gamma)^12=0.5.*
>> 
>> *Xi =: 0.02284 NB. The rate at which recovered people lose immunity and
>> become susceptible. RPH - 30 days*
>> 
>> * NB. is partially based upon man on Diamond Princess who presented
>> symptoms around 30 days otherwise made up.*
>> 
>> *R =: 2.2 NB. How many people will 1 person infect? RPH - based on latest
>> CDC estimate 3/25/2020*
>> 
>> *CFR =: 0.015 NB. Case Fatality Rate - RPH based upon 0.25% to 3% from
>> CDC, so 1.5% is higher than average.*
>> 
>> *D =: 0.0011619 NB. Death rate per day while symptomatic - RPH based upon
>> 13 days to death as seen and per CDC.*
>> 
>> 
>> *ClosenessStdDev =: 5 % 3*
>> 
>> *ClosenessMean =: 1*
>> 
>> 
>> *rand_norm =: 3 : '(2&o. 2p1 * ? y) * %: _2 * ^. ? y'*
>> 
>> *closeness =: 4 %~ 2 %~ (+ |:) ClosenessMean + ClosenessStdDev * rand_norm
>> (ppl,ppl) $ 0*
>> 
>> *risk =: closeness - closeness * =i.ppl *
>> 
>> *NB. risk =: (ppl,ppl)$0*
>> 
>> 
>> *NB. 0 = Dead*
>> 
>> *NB. 1 = Susceptible*
>> 
>> *NB. 2 = Exposed*
>> 
>> *NB. 3 = Infectious*
>> 
>> *NB. 4 = Recovered*
>> 
>> *starting_pop =: 2 , (ppl - 1) $ 1*
>> 
>> 
>> *infect =: 3 : 0*
>> 
>> * can_spread =. (1&< *. 4&>) y*
>> 
>> * susceptible =. y = 1*
>> 
>> * exposed =. y = 2*
>> 
>> * infectious =. y = 3*
>> 
>> * recovered =. y = 4*
>> 
>> 
>> * infectiousness =. can_spread ,./ . * risk*
>> 
>> 
>> * susceptible_to_exposed =. (Beta * susceptible) * (+/ can_spread) %~ +/
>> |: susceptible * infectiousness*
>> 
>> * exposed_to_infectious =. Sigma * exposed*
>> 
>> * infectious_to_recovered =. Gamma * infectious*
>> 
>> * infectious_to_dead =. D * infectious*
>> 
>> * recovered_to_susceptible =. Xi * recovered*
>> 
>> * 1 (I.recovered_to_susceptible>?ppl$0)} 4
>> (I.infectious_to_recovered>?ppl$0)} 0 (I.infectious_to_dead>?ppl$0)} 3
>> (I.exposed_to_infectious>?ppl$0)} 2 (I.susceptible_to_exposed>?ppl$0)} y*
>> 
>> *)*
>> 
>> 
>> *infect_display =: 3 : 0*
>> 
>> * out =. infect y*
>> 
>> * smoutput out*
>> 
>> * smoutput
>> ('Susceptible';'Exposed';'Infectious';'Recovered';'Dead'),:(+/1=out);(+/2=out);(+/3=out);(+/4=out);(+/0=out)*
>> 
>> * out*
>> 
>> *)*
>> 
>> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to