Load the ilmtools package...


In [1]:
include("ilmtools.jl")


Out[1]:
create_loglikelihood (generic function with 1 method)

Generate a population from a bi-variate uniform distribution...


In [2]:
pop_db1 = create_pop_db_univariates(100, Uniform(0,10), Uniform(0,10))


Out[2]:
ind_idxy
114.19593071411485058.345040165635586
220.7578559495021622.8627572180673333
330.68679873784694314.994887655952017
447.2961958613004295.160499597359864
551.60847755900687127.937516460440543
667.181596148456650.8084079030469238
778.4500150499466071.9899835909128916
885.3674459100801823.502961934477753
991.92793917230956512.9981330856735533
10100.86331871288348743.89319942952856
11110.072714486823057816.708507256143637
12128.5674414777332679.509432856860327
13130.90201169785759653.399215417995618
14145.254155178796622.4701519813766093
15152.07092129428561036.147927749582873
16169.4515414105612512.4957134143648507
17177.4098504106755584.660549787000139
18189.8817651181084087.136547301380782
19193.9214589547007872.2803619566965283
20201.6909963214310428.476806412018693
21211.34682859112439826.956183225178854
22229.6972560057579645.878702209204876
23238.0591905364163658.462256451002052
24241.10204205201402060.674768351108157
25258.880327902752435.206400278134051
26263.10265527700398955.543952647485863
27276.9907538215034269.517107980418231
28280.077874128708164134.214877739481945
29292.1738875885101377.213152348451124
30304.3555458943272273.969627194635257
&vellip&vellip&vellip&vellip

Generate the initial infection and propagate infection through population (SIR model) in continuous time with parameters $\alpha=2, \beta=6, \gamma=5$


In [3]:
evdb = infect_recover_loop(pop_db1, "discrete", "SIR", 2, 6, 5)


Out[3]:
edb(100x4 DataFrame
| Row | ind_id | s | i    | r    |
|-----|--------|---|------|------|
| 1   | 1      | 0 | 10.0 | 11.0 |
| 2   | 2      | 0 | 8.0  | 9.0  |
| 3   | 3      | 0 | 8.0  | 9.0  |
| 4   | 4      | 0 | 4.0  | 10.0 |
| 5   | 5      | 0 | 9.0  | 15.0 |
| 6   | 6      | 0 | 4.0  | 7.0  |
| 7   | 7      | 0 | 3.0  | 6.0  |
| 8   | 8      | 0 | 4.0  | 6.0  |
| 9   | 9      | 0 | 6.0  | 7.0  |
| 10  | 10     | 0 | 7.0  | 11.0 |
| 11  | 11     | 0 | 9.0  | 14.0 |
⋮
| 89  | 89     | 0 | 6.0  | 19.0 |
| 90  | 90     | 0 | 3.0  | 10.0 |
| 91  | 91     | 0 | 4.0  | 8.0  |
| 92  | 92     | 0 | 2.0  | 7.0  |
| 93  | 93     | 0 | 9.0  | 12.0 |
| 94  | 94     | 0 | 8.0  | 11.0 |
| 95  | 95     | 0 | 4.0  | 9.0  |
| 96  | 96     | 0 | 8.0  | 20.0 |
| 97  | 97     | 0 | 8.0  | 12.0 |
| 98  | 98     | 0 | 7.0  | 8.0  |
| 99  | 99     | 0 | 11.0 | 31.0 |
| 100 | 100    | 0 | 10.0 | 15.0 |,[1.0,2.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0  …  18.0,18.0,19.0,19.0,19.0,20.0,20.0,26.0,31.0,41.0],"discrete")

Generate the efficient log likelihood function


In [4]:
ll = create_loglikelihood(pop_db1, evdb)


Out[4]:
dSIR_ll (generic function with 1 method)

Time the log likelihood function (run twice)


In [5]:
ll((2, 6, 5))
@time ll((2, 6, 5))


elapsed time: 0.000945815 seconds (306736 bytes allocated)
Out[5]:
-334.73176378026545

Run MCMC


In [6]:
n = 20000
burnin = 10000
sim = Chains(n, 3, names = ["alpha", "beta", "gamma"])
theta = AMMVariate([2.0, 6.0, 5])
SigmaF = cholfact(eye(3))
@time for i in 1:n
    amm!(theta, SigmaF, ll, adapt = (i <= burnin))
    sim[i,:,1] = theta[1:3]
end
Mamba.describe(sim)


elapsed time: 50.989012571 seconds (11789386316 bytes allocated, 24.36% gc time)
Iterations = 1:20000
Thinning interval = 1
Chains = 1
Samples per chain = 20000

Empirical Posterior Estimates:
4x6 Array{Any,2}:
 ""        "Mean"   "SD"      "Naive SE"   "MCSE"         "ESS"
 "alpha"  1.48586  0.324372  0.00229365   0.00666812  6879.46  
 "beta"   5.41494  0.489484  0.00346117   0.01091     6344.96  
 "gamma"  5.29738  0.485908  0.00343589   0.0120808   5688.17  

Quantiles:
4x6 Array{Any,2}:
 ""        "2.5%"    "25.0%"   "50.0%"   "75.0%"   "97.5%"
 "alpha"  0.949197  1.24934   1.45223   1.68763   2.19406 
 "beta"   4.53964   5.05828   5.39032   5.74214   6.42832 
 "gamma"  4.46216   4.96115   5.25849   5.59741   6.33642 

Produce trace plots of $\alpha$, $\beta$, and $\gamma$


In [7]:
plot(x=burnin:n, y=sim.value[burnin:n, 1, 1], Geom.line)


Out[7]:
x -5.0×10³ 0 5.0×10³ 1.0×10⁴ 1.5×10⁴ 2.0×10⁴ 2.5×10⁴ 3.0×10⁴ 3.5×10⁴ 0 5.00×10² 1.00×10³ 1.50×10³ 2.00×10³ 2.50×10³ 3.00×10³ 3.50×10³ 4.00×10³ 4.50×10³ 5.00×10³ 5.50×10³ 6.00×10³ 6.50×10³ 7.00×10³ 7.50×10³ 8.00×10³ 8.50×10³ 9.00×10³ 9.50×10³ 1.00×10⁴ 1.05×10⁴ 1.10×10⁴ 1.15×10⁴ 1.20×10⁴ 1.25×10⁴ 1.30×10⁴ 1.35×10⁴ 1.40×10⁴ 1.45×10⁴ 1.50×10⁴ 1.55×10⁴ 1.60×10⁴ 1.65×10⁴ 1.70×10⁴ 1.75×10⁴ 1.80×10⁴ 1.85×10⁴ 1.90×10⁴ 1.95×10⁴ 2.00×10⁴ 2.05×10⁴ 2.10×10⁴ 2.15×10⁴ 2.20×10⁴ 2.25×10⁴ 2.30×10⁴ 2.35×10⁴ 2.40×10⁴ 2.45×10⁴ 2.50×10⁴ 2.55×10⁴ 2.60×10⁴ 2.65×10⁴ 2.70×10⁴ 2.75×10⁴ 2.80×10⁴ 2.85×10⁴ 2.90×10⁴ 2.95×10⁴ 3.00×10⁴ 0 1×10⁴ 2×10⁴ 3×10⁴ 0 1.0×10³ 2.0×10³ 3.0×10³ 4.0×10³ 5.0×10³ 6.0×10³ 7.0×10³ 8.0×10³ 9.0×10³ 1.0×10⁴ 1.1×10⁴ 1.2×10⁴ 1.3×10⁴ 1.4×10⁴ 1.5×10⁴ 1.6×10⁴ 1.7×10⁴ 1.8×10⁴ 1.9×10⁴ 2.0×10⁴ 2.1×10⁴ 2.2×10⁴ 2.3×10⁴ 2.4×10⁴ 2.5×10⁴ 2.6×10⁴ 2.7×10⁴ 2.8×10⁴ 2.9×10⁴ 3.0×10⁴ -4 -3 -2 -1 0 1 2 3 4 5 6 7 -3.0 -2.9 -2.8 -2.7 -2.6 -2.5 -2.4 -2.3 -2.2 -2.1 -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 -3 0 3 6 -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 y

In [8]:
plot(x=burnin:n, y=sim.value[burnin:n, 2, 1], Geom.line)


Out[8]:
x -5.0×10³ 0 5.0×10³ 1.0×10⁴ 1.5×10⁴ 2.0×10⁴ 2.5×10⁴ 3.0×10⁴ 3.5×10⁴ 0 5.00×10² 1.00×10³ 1.50×10³ 2.00×10³ 2.50×10³ 3.00×10³ 3.50×10³ 4.00×10³ 4.50×10³ 5.00×10³ 5.50×10³ 6.00×10³ 6.50×10³ 7.00×10³ 7.50×10³ 8.00×10³ 8.50×10³ 9.00×10³ 9.50×10³ 1.00×10⁴ 1.05×10⁴ 1.10×10⁴ 1.15×10⁴ 1.20×10⁴ 1.25×10⁴ 1.30×10⁴ 1.35×10⁴ 1.40×10⁴ 1.45×10⁴ 1.50×10⁴ 1.55×10⁴ 1.60×10⁴ 1.65×10⁴ 1.70×10⁴ 1.75×10⁴ 1.80×10⁴ 1.85×10⁴ 1.90×10⁴ 1.95×10⁴ 2.00×10⁴ 2.05×10⁴ 2.10×10⁴ 2.15×10⁴ 2.20×10⁴ 2.25×10⁴ 2.30×10⁴ 2.35×10⁴ 2.40×10⁴ 2.45×10⁴ 2.50×10⁴ 2.55×10⁴ 2.60×10⁴ 2.65×10⁴ 2.70×10⁴ 2.75×10⁴ 2.80×10⁴ 2.85×10⁴ 2.90×10⁴ 2.95×10⁴ 3.00×10⁴ 0 1×10⁴ 2×10⁴ 3×10⁴ 0 1.0×10³ 2.0×10³ 3.0×10³ 4.0×10³ 5.0×10³ 6.0×10³ 7.0×10³ 8.0×10³ 9.0×10³ 1.0×10⁴ 1.1×10⁴ 1.2×10⁴ 1.3×10⁴ 1.4×10⁴ 1.5×10⁴ 1.6×10⁴ 1.7×10⁴ 1.8×10⁴ 1.9×10⁴ 2.0×10⁴ 2.1×10⁴ 2.2×10⁴ 2.3×10⁴ 2.4×10⁴ 2.5×10⁴ 2.6×10⁴ 2.7×10⁴ 2.8×10⁴ 2.9×10⁴ 3.0×10⁴ -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 10.2 10.4 10.6 10.8 11.0 11.2 11.4 11.6 11.8 12.0 12.2 12.4 12.6 12.8 13.0 -5 0 5 10 15 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 y

In [9]:
plot(x=burnin:n, y=sim.value[burnin:n, 3, 1], Geom.line)


Out[9]:
x -5.0×10³ 0 5.0×10³ 1.0×10⁴ 1.5×10⁴ 2.0×10⁴ 2.5×10⁴ 3.0×10⁴ 3.5×10⁴ 0 5.00×10² 1.00×10³ 1.50×10³ 2.00×10³ 2.50×10³ 3.00×10³ 3.50×10³ 4.00×10³ 4.50×10³ 5.00×10³ 5.50×10³ 6.00×10³ 6.50×10³ 7.00×10³ 7.50×10³ 8.00×10³ 8.50×10³ 9.00×10³ 9.50×10³ 1.00×10⁴ 1.05×10⁴ 1.10×10⁴ 1.15×10⁴ 1.20×10⁴ 1.25×10⁴ 1.30×10⁴ 1.35×10⁴ 1.40×10⁴ 1.45×10⁴ 1.50×10⁴ 1.55×10⁴ 1.60×10⁴ 1.65×10⁴ 1.70×10⁴ 1.75×10⁴ 1.80×10⁴ 1.85×10⁴ 1.90×10⁴ 1.95×10⁴ 2.00×10⁴ 2.05×10⁴ 2.10×10⁴ 2.15×10⁴ 2.20×10⁴ 2.25×10⁴ 2.30×10⁴ 2.35×10⁴ 2.40×10⁴ 2.45×10⁴ 2.50×10⁴ 2.55×10⁴ 2.60×10⁴ 2.65×10⁴ 2.70×10⁴ 2.75×10⁴ 2.80×10⁴ 2.85×10⁴ 2.90×10⁴ 2.95×10⁴ 3.00×10⁴ 0 1×10⁴ 2×10⁴ 3×10⁴ 0 1.0×10³ 2.0×10³ 3.0×10³ 4.0×10³ 5.0×10³ 6.0×10³ 7.0×10³ 8.0×10³ 9.0×10³ 1.0×10⁴ 1.1×10⁴ 1.2×10⁴ 1.3×10⁴ 1.4×10⁴ 1.5×10⁴ 1.6×10⁴ 1.7×10⁴ 1.8×10⁴ 1.9×10⁴ 2.0×10⁴ 2.1×10⁴ 2.2×10⁴ 2.3×10⁴ 2.4×10⁴ 2.5×10⁴ 2.6×10⁴ 2.7×10⁴ 2.8×10⁴ 2.9×10⁴ 3.0×10⁴ -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 10.2 10.4 10.6 10.8 11.0 11.2 11.4 11.6 11.8 12.0 12.2 12.4 12.6 12.8 13.0 13.2 13.4 13.6 13.8 14.0 -5 0 5 10 15 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 y