Hi Robert, I didn't know about the names until I looked them up recently. I've been using jerk to predict growth in bacterial fermentations for several years. And yes, by looking at the peaks of the derivatives, you can see in which phase of the pandemic a country is. Predictive power is good at the beginning (depending on the fitting algorithm) and gets better as more data comes available. I've seen more variation in a 100ml lactic acid fermentation jar than with the epidemic here in The Netherlands.
I found the problem with R today. It turns out that you need to set R_HOME environment variable. Then it works fine. jqt didn't report it, but I used jconsole and I found it. load 'stats/r/rserver' Ropen'' etc. BR Dimitri On Sat, Mar 28, 2020 at 3:29 PM Robert Herman <[email protected]> wrote: > Don't forget snap, crackle, and pop! I design machinery for entertainment, > and we deal with jerk, the third derivative of displacement, and sometime > snap, the fourth derivative. I never thought of them applied this way, but > I guess it makes sense that you can now that I think about it. Interesting. > > I just started using R/RStudio in the past few months. I'd be very > interested in the J and R connection. > > Thank you! > > On Sat, 28 Mar 2020 at 07:18, Dimitri Georganas <[email protected]> wrote: > > > Hi, > > I've been modeling the spread of the disease using a Gompertz function > and > > its 1st, 2nd and 3d derivative to determine rate, acceleration and > 'jerk', > > but I couldn't get the R addon to work with my J installation, so I did > > this part in R. (I couldn't find Levenberg Marquardt curve > > fitting libraries/addons in J) Then I used the a,b,c I got from the R > code > > in a J script to estimate the number of IC beds required, assuming a 10% > > critical cases scenario. Well, Houston, we have a problem. > > > > I could port the R code to J if I could either get the R addon to work or > > find a Levenberg-Marquardt implementation in J. > > > > IC impact code https://github.com/dimgeo/IC-covid > > R code with Gompertz curve fitting and derivative > > https://github.com/dimgeo/covid > > > > Best regards, > > > > Dimitri > > > > On Fri, Mar 27, 2020 at 7:24 PM 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 > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
