Skip to content

Commit

Permalink
Improved tests for priors and add example dataset + parsing (#73)
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisRackauckas authored Jul 14, 2023
1 parent 61919b3 commit dea20aa
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 7 deletions.
91 changes: 91 additions & 0 deletions examples/dataset.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
timestamp,Ailing,Diagnosed,Extinct,Healed,Infected,Recognized,Susceptible,Threatened
0,3.983930696449534e-07,1.0311159712728113e-06,1.727546057594953e-11,1.582136377464849e-07,4.6258805923571344e-06,1.730537206867666e-07,0.9999932050704956,5.817323067702773e-09
1,8.230218213611806e-07,1.938670266099507e-06,1.339597044403007e-10,4.0463845607519033e-07,6.571713583980454e-06,5.214378688833676e-07,0.9999898672103882,2.5052340646425364e-08
2,1.3538003713620128e-06,3.1750726066093198e-06,4.938329190018463e-10,7.790225140524853e-07,9.443735507375097e-06,1.1221927707083523e-06,0.9999850988388062,6.562756027506111e-08
3,2.069160700557404e-06,4.90781258122297e-06,1.317333575556745e-09,1.339167624792026e-06,1.3647154446516652e-05,2.054124252026668e-06,0.9999759197235109,1.3832605816332946e-07
4,3.0715234515810157e-06,7.374052074737847e-06,2.930399034539732e-09,2.168507307942491e-06,1.977349529624917e-05,3.443197101660189e-06,0.9999631643295288,2.581216733688052e-07
5,4.503739546635188e-06,1.091633748728782e-05,5.810196324063099e-09,3.3886196888488485e-06,2.868835326808039e-05,5.480377240019152e-06,0.9999468326568604,4.4645119601227634e-07
6,6.568698154296726e-06,1.6029222024371848e-05,1.0648313342187521e-08,5.175827027414925e-06,4.164934580330737e-05,8.447693289781455e-06,0.999921441078186,7.341330388044298e-07
7,9.558439160173292e-06,2.342981861147564e-05,1.8447337879479164e-08,7.786386959196534e-06,6.048529394320212e-05,1.2758498996845448e-05,0.9998846650123596,1.1657707545964513e-06
8,1.3895277334086131e-05,3.415858373045921e-05,3.066041287524968e-08,1.159264866146259e-05,8.785355021245778e-05,1.901579526020214e-05,0.9998312592506408,1.8060427464661188e-06
9,2.0191300791339017e-05,4.972590249963105e-05,4.9393484857773735e-08,1.7135411326307803e-05,0.000127612875076,2.8097098038415425e-05,0.9997544884681702,2.7488142677611904e-06
10,2.933433097496163e-05,7.232384086819366e-05,7.770064769374585e-08,2.5200059099006467e-05,0.000185364158824,4.127809370402247e-05,0.9996423125267028,4.130364686716348e-06
11,4.2612806282704696e-05,0.0001051348444889,1.2001351024082396e-07,3.692723112180829e-05,0.000269235111773,6.041246160748415e-05,0.9994794130325316,6.148640295577934e-06
12,6.189566920511425e-05,0.0001527765707578,1.8276305979725294e-07,5.397274799179286e-05,0.0003910099330823,8.819218055577949e-05,0.999242901802063,9.091088941204362e-06
13,8.989298657979816e-05,0.0002219464658992,2.7528503210305644e-07,7.87395256338641e-05,0.000567759561818,0.0001285253383684,0.9988991618156432,1.3375105481827632e-05
14,0.0001305304758716,0.0003223506209906,4.111306850518304e-07,0.0001147124785347,0.0008241782779805,0.0001870820124167,0.9984010457992554,1.960656481969636e-05
15,0.0001894887245725,0.0004680394777096,6.099708116380498e-07,0.0001669412886258,0.0011959181865677,0.0002720847260206,0.9976769089698792,2.8664675483014435e-05
16,0.000274969410384,0.0006793185602873,9.003550189845555e-07,0.0002427367580821,0.0017343000508844,0.0003954410203732,0.9966305494308472,4.182429984211922e-05
17,0.0003987844393122,0.0009854593081399,1.3236933682492236e-06,0.0003526579821482,0.0025128831621259,0.0005743794608861,0.9951131939888,6.093257616157644e-05
18,0.0005778737249784,0.001428515301086,1.940033371283789e-06,0.0005119259585626,0.0036364505067467,0.0008337693870998,0.9929208755493164,8.866242569638416e-05
19,0.0008363877423107,0.002068581758067,2.836344037859817e-06,0.0007423926726914,0.0052528972737491,0.0012094068806618,0.9897590279579164,0.0001288738712901
20,0.001208460656926,0.0029908982105553,4.13845054936246e-06,0.0010752736125141,0.0075681828893721,0.0017525968141853,0.9852133989334106,0.0001871275744633
21,0.0017417214112356,0.0043150489218533,6.028010375302984e-06,0.0015548029914498,0.0108633898198604,0.0025364318862557,0.978711187839508,0.0002714013389777
22,0.0025013978593051,0.006206105928868,8.76657031767536e-06,0.0022429779637604,0.0155106801539659,0.0036641049664467,0.969474196434021,0.000393077469198
23,0.0035743664484471,0.0088866436854004,1.272927511308808e-05,0.0032253200188279,0.0219801012426614,0.0052794832736253,0.9564734101295472,0.0005682714399881
24,0.0050715296529233,0.0126463044434785,1.84510245162528e-05,0.004617073573172,0.030822280794382,0.0075794602744281,0.938425362110138,0.0008195308037102
25,0.0071254740469157,0.017842723056674,2.66887200268684e-05,0.0065685440786182,0.0426009260118007,0.0108265001326799,0.9138312339782716,0.0011779199121519
26,0.0098783625289797,0.0248819217085838,3.8501322705997154e-05,0.0092666652053594,0.0577452778816223,0.0153573844581842,0.8811466097831726,0.0016852872213348
27,0.0134540814906358,0.0341650210320949,5.53493810002692e-05,0.0129287084564566,0.0763047784566879,0.0215816013514995,0.8391140699386597,0.0023963404819369
28,0.0179110579192638,0.0459878854453563,7.920717325760052e-05,0.0177833717316389,0.0976431667804718,0.029958913102746,0.7872570753097534,0.0033797551877796
29,0.0231819190084934,0.0604014620184898,0.0001126776478486,0.0240371450781822,0.1202083677053451,0.0409472025930881,0.7263938784599304,0.0047172927297651
30,0.0290221776813268,0.0770718604326248,0.0001590874744579,0.0318309180438518,0.1415931135416031,0.0549180284142494,0.6589045524597168,0.0064999219030141
31,0.0350024364888668,0.0952116474509239,0.0002225359494332,0.0412003882229328,0.1590310633182525,0.0720536038279533,0.5884571671485901,0.0088205253705382
32,0.0405694358050823,0.1136474385857582,0.0003078702720813,0.0520581863820552,0.1702007204294204,0.0922569409012794,0.5191952586174011,0.0117640094831585
33,0.0451659597456455,0.1310282051563263,0.0004205766599625,0.0642065852880477,0.1739306598901748,0.1151116341352462,0.4547386467456817,0.015396942384541
34,0.0483604297041893,0.1460959017276764,0.0005665883654728,0.0773764848709106,0.170432835817337,0.1399133503437042,0.397495299577713,0.0197592042386531
35,0.0499324910342693,0.1579117029905319,0.0007520409999415,0.0912749394774437,0.1610127985477447,0.1657625436782837,0.3484929800033569,0.0248593091964721
36,0.0498874299228191,0.1659679263830185,0.0009830170311033,0.1056249886751174,0.1475123614072799,0.191690906882286,0.3076587915420532,0.0306745022535324
37,0.0484128110110759,0.1701776683330536,0.0012652776204049,0.1201889961957931,0.1317890882492065,0.2167761623859405,0.2742359340190887,0.0371539928019046
38,0.0458062887191772,0.1707891523838043,0.0016040706541389,0.1347782611846923,0.1153930947184562,0.2402318269014358,0.2471722513437271,0.0442248880863189
39,0.0424049571156501,0.168268010020256,0.0020039672963321,0.1492514908313751,0.09944599121809,0.2614540457725525,0.2253724932670593,0.0517988242208957
40,0.0385317504405975,0.1631877571344375,0.0024687526747584,0.163507267832756,0.0846560820937156,0.2800341844558716,0.2078351527452469,0.0597782470285892
41,0.0344629287719726,0.1561467200517654,0.0030014030635356,0.1774786710739135,0.0713967084884643,0.2957447469234466,0.1937057375907898,0.0680630058050155
42,0.030415128916502,0.147707313299179,0.0036040262784808,0.1911208480596542,0.0598016679286956,0.3085148930549621,0.1822833567857742,0.0765532031655311
43,0.0265437569469213,0.1383681893348693,0.0042779594659805,0.2044086903333664,0.0498481690883636,0.3183937072753906,0.173004999756813,0.0851544067263603
44,0.0229501314461231,0.1285468488931656,0.0050237369723618,0.2173291593790054,0.041422214359045,0.3255220949649811,0.1654264479875564,0.0937788635492324
45,0.0196912735700607,0.1185792386531829,0.0058412249200046,0.2298799753189087,0.0343640930950641,0.3300988972187042,0.1591978669166565,0.1023473739624023
46,0.0167904142290353,0.1087252050638198,0.0067296680063009,0.2420624643564224,0.0284985080361366,0.3323599696159363,0.1540435552597046,0.1107898876070976
47,0.0142467701807618,0.0991769433021545,0.0076877297833561,0.2538839876651764,0.0236528329551219,0.332558125257492,0.1497475504875183,0.1190460100769996
48,0.0120436046272516,0.0900698155164718,0.0087136598303914,0.2653539180755615,0.0196669120341539,0.3309479057788849,0.1461401134729385,0.1270640194416046
49,0.0101544745266437,0.0814929977059364,0.0098052965477108,0.2764827311038971,0.0163980815559625,0.3277774751186371,0.1430872678756714,0.1348014324903488
50,0.0085480250418186,0.073498360812664,0.0109601095318794,0.2872833609580993,0.0137225128710269,0.3232813775539398,0.1404828429222107,0.1422233432531356
51,0.0071912123821675,0.0661099925637245,0.01217539049685,0.2977671027183532,0.0115346834063529,0.3176759779453277,0.1382429301738739,0.14930260181427
52,0.0060515799559652,0.059330228716135,0.0134481759741902,0.3079465925693512,0.0097459712997078,0.3111581802368164,0.1363006681203842,0.1560183316469192
53,0.0050986316055059,0.0531461127102375,0.0147753646597266,0.3178338706493377,0.0082826921716332,0.3039047122001648,0.1346026062965393,0.162355899810791
54,0.0043045165948569,0.0475335493683815,0.0161537993699312,0.3274406790733337,0.007084066979587,0.2960719168186188,0.1331069618463516,0.1683053523302078
55,0.0036445118021219,0.0424617752432823,0.0175801757723093,0.3367771208286285,0.0061002532020211,0.2877964973449707,0.1317781209945678,0.1738614737987518
56,0.0030969283543527,0.0378951840102672,0.0190512165427207,0.3458553254604339,0.0052906018681824,0.2791984677314758,0.1305896341800689,0.1790225803852081
57,0.002643080195412,0.0337962470948696,0.0205636359751224,0.3546848595142364,0.0046220496296882,0.2703805565834045,0.1295191049575805,0.1837903261184692
58,0.0022670244798064,0.0301267802715301,0.0221141744405031,0.3632754385471344,0.0040677995420992,0.2614310085773468,0.1285485327243805,0.1881692111492157
59,0.0019552868325263,0.0268491320312023,0.02369961515069,0.3716360330581665,0.0036061708815395,0.2524246275424957,0.1276633739471435,0.192165732383728
60,0.0016965663526207,0.0239269938319921,0.0253168065100908,0.3797751367092132,0.00321965967305,0.243424654006958,0.1268517822027206,0.1957883387804031
61,0.0014814431779086,0.021325908601284,0.0269626658409833,0.3877009749412536,0.0028941449709236,0.2344838231801986,0.1261040121316909,0.1990469694137573
62,0.0013021088670939,0.019013624638319,0.0286342147737741,0.3954211175441742,0.0026182495057582,0.225645899772644,0.1254120469093322,0.2019526809453964
63,0.0011521178530529,0.0169602409005165,0.0303285866975784,0.4029425382614136,0.0023828083649277,0.2169467061758041,0.1247690394520759,0.2045173048973083
64,0.0010261740535497,0.0151383066549897,0.0320428572595119,0.4102730751037597,0.0021804438438266,0.2084152102470398,0.1241702735424041,0.2067541033029556
65,0.0009199290652759,0.0135226659476757,0.0337745361030101,0.4174169600009918,0.0020052078180015,0.2000746726989746,0.1236103102564811,0.2086752504110336
66,0.0008298339671455,0.0120906541123986,0.0355209633708,0.4243825376033783,0.0018523199250921,0.1919431388378143,0.1230855360627174,0.2102949321269989
67,0.000752990017645,0.0108216991648077,0.0372796580195426,0.4311744570732116,0.0017179140122607,0.1840341687202453,0.1225927323102951,0.2116263061761856
68,0.0006870363140478,0.0096973497420549,0.0390483029186725,0.4377985000610351,0.0015988766681402,0.176358088850975,0.1221288666129112,0.212683230638504
69,0.0006300530512817,0.0087010199204087,0.0408246591687202,0.4442589879035949,0.0014926852891221,0.1689215451478958,0.1216920316219329,0.2134788483381271
70,0.0005804790416732,0.0078179836273193,0.0426066033542156,0.4505621194839477,0.0013973050517961,0.1617287695407867,0.1212795749306678,0.2140271067619323
71,0.0005370447179302,0.0070350659079849,0.0443921573460102,0.4567119777202606,0.0013110786676406,0.1547822058200836,0.1208897903561592,0.2143408358097076
72,0.0004987197462469,0.0063405614346265,0.046179361641407,0.4627128839492798,0.0012326617725193,0.1480816900730133,0.1205212995409965,0.2144329398870468
73,0.0004646650049835,0.0057241083122789,0.0479664467275142,0.4685691595077514,0.0011609534267336,0.1416260749101638,0.1201723217964172,0.2143162339925766
74,0.0004341994062997,0.0051765232346951,0.0497517324984073,0.474285215139389,0.0010950523428618,0.1354128122329712,0.1198418065905571,0.2140026092529297
75,0.0004067668924108,0.0046896953135728,0.0515336617827415,0.4798646867275238,0.0010342189343646,0.1294380277395248,0.1195283532142639,0.2135045379400253
76,0.0003819144621957,0.0042564454488456,0.0533107332885265,0.4853119850158691,0.000977840158157,0.123697429895401,0.1192312687635421,0.2128331959247589
77,0.0003592704888433,0.0038704657927155,0.0550814308226108,0.4906291663646698,0.0009254040196537,0.1181859672069549,0.1189490184187889,0.2119992077350616
78,0.0003385312738828,0.0035261730663478,0.0568445809185504,0.4958212971687317,0.0008764877566136,0.1128978952765464,0.1186812296509742,0.2110137492418289
79,0.0003194460878148,0.0032186675816774,0.0585988871753215,0.5008910894393921,0.0008307314128614,0.1078271120786666,0.1184269711375236,0.2098868936300277
80,0.000301808147924,0.0029436363838613,0.060343325138092,0.5058417916297913,0.000787831726484,0.1029673963785171,0.118185319006443,0.2086287587881088
81,0.0002854457416106,0.0026972773484885,0.0620767176151275,0.5106761455535889,0.0007475292659364,0.0983122438192367,0.1179557293653488,0.2072483301162719
82,0.0002702150668483,0.0024762605316936,0.0637981295585632,0.5153985619544983,0.0007096008630469,0.0938547104597091,0.1177375614643096,0.2057548910379409
83,0.000255996332271,0.0022776457481086,0.065506711602211,0.5200103521347046,0.0006738540250808,0.089588426053524,0.1175299808382988,0.2041568160057068
84,0.0002426879800623,0.0020988553296774,0.0672014355659484,0.5245151519775391,0.0006401184946298,0.0855063796043396,0.1173329055309295,0.2024624198675155
85,0.0002302035863976,0.0019376239506527,0.0688817426562309,0.5289153456687927,0.0006082469481043,0.0816019549965858,0.1171453148126602,0.2006794810295105
86,0.0002184696058975,0.0017919611418619,0.0705468133091926,0.5332136154174805,0.0005781087093055,0.0778687819838523,0.1169669479131698,0.1988152265548706
87,0.0002074220974463,0.0016601126408204,0.0721960663795471,0.5374128818511963,0.0005495847435668,0.0742999464273452,0.1167971715331077,0.1968767046928405
88,0.0001970060693565,0.0015405436279252,0.0738288387656211,0.5415146946907043,0.0005225704517215,0.0708892196416854,0.1166358143091201,0.1948712617158889
89,0.0001871728454716,0.0014318958856165,0.075444646179676,0.5455223917961121,0.0004969697911292,0.0676303133368492,0.1164822503924369,0.1928044855594635
18 changes: 13 additions & 5 deletions src/SimulationService.jl
Original file line number Diff line number Diff line change
Expand Up @@ -174,20 +174,28 @@ function amr_get(obj::Config, ::Type{ODESystem})
end

# priors
function amr_get(obj::Config, sys::ODESystem, ::Val{:priors})
paramlist = parameters(sys)
function amr_get(amr::Config, sys::ODESystem, ::Val{:priors})
paramlist = EasyModelAnalysis.ModelingToolkit.parameters(sys)
namelist = nameof.(paramlist)

map(amr.semantics.ode.parameters) do p
@assert p.distribution.type === "StandardUniform1"
dist = Uniform(p.distribution.parameters.minimum, p.distribution.parameters.maximum)
dist = EasyModelAnalysis.Distributions.Uniform(p.distribution.parameters.minimum, p.distribution.parameters.maximum)
paramlist[findfirst(x->x==Symbol(p.id),namelist)] => dist
end
end

# data
function amr_get(obj::Config, ::Val{:data})
error("TODO: amr_get for :data")
function amr_get(df::DataFrame, sys::ODESystem, ::Val{:data})
df = CSV.read(here("examples", "dataset.csv"), DataFrame)
statelist = states(sys)
statenames = string.(statelist)
statenames = map(statenames) do n; n[1:end-3]; end # there's a better way to do this
tvals = df[:,"timestamp"]

map(statelist, statenames) do s,n
s => (tvals,df[:,n])
end
end

#-----------------------------------------------------------------------------# job endpoints
Expand Down
4 changes: 2 additions & 2 deletions src/operations.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ end
struct Calibrate <: Operation
sys::ODESystem
timespan::Tuple{Float64, Float64}
priors::Any # ???
priors::Vector{Pair{SymbolicUtils.BasicSymbolic{Real}, Uniform{Float64}}}
data::Any # ???
end

function Calibrate(o::OperationRequest)
sys = amr_get(o.model, ODESystem)
priors = amr_get(o.model, sys, Val(:priors))
data = o.df
data = amr_get(o.df, sys, Val(:data))
Calibrate(sys, o.timespan, priors, data)
end

Expand Down
11 changes: 11 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,17 @@ end
@test string.(states(sys)) == ["Susceptible(t)", "Diagnosed(t)", "Infected(t)", "Ailing(t)", "Recognized(t)", "Healed(t)", "Threatened(t)", "Extinct(t)"]
@test string.(parameters(sys)) == ["beta", "gamma", "delta", "alpha", "epsilon", "zeta", "lambda", "eta", "rho", "theta", "kappa", "mu", "nu", "xi", "tau", "sigma"]
@test map(x->string(x.lhs), observed(sys)) == ["Cases(t)", "Hospitalizations(t)", "Deaths(t)"]

priors = SimulationService.amr_get(amr, sys, Val(:priors))
@test priors isa Vector{Pair{SymbolicUtils.BasicSymbolic{Real}, Uniform{Float64}}}
@test string.(first.(priors)) == string.(parameters(sys))
@test last.(priors) isa Vector{Uniform{Float64}}

df = CSV.read(here("examples", "dataset.csv"), DataFrame)
data = SimulationService.amr_get(df, sys, Val(:data))
@test data isa Vector{Pair{SymbolicUtils.BasicSymbolic{Real}, Tuple{Vector{Int64}, Vector{Float64}}}}
@test string.(first.(data)) == string.(states(sys))
@test all(all.(map(first.(last.(data))) do x; x .== 0:89; end))
end

#-----------------------------------------------------------# DataServiceModel and OperationRequest
Expand Down

0 comments on commit dea20aa

Please sign in to comment.