How to resolve the algorithm Logistic curve fitting in epidemiology step by step in the Wren programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Logistic curve fitting in epidemiology step by step in the Wren programming language

Table of Contents

Problem Statement

The least-squares method (see references below) in statistics is used to fit data to the best of a family of similar curves by finding the parameters for a curve which minimizes the total of the distances from each data point to the curve. Often, the curve used is a straight line, in which case the method is also called linear regression. If a curve which uses logarithmic growth is fit, the method can be called logistic regression. A commonly used family of functions used in statistical studies of populations, including the growth of epidemics, are curves akin to the logistic curve: Though predictions based on fitting to such curves may error, especially if used to extrapolate from incomplete data, curves similar to the logistic curve have had
good fits in population studies, including modeling the growth of past epidemics.

Given the following daily world totals since December 31, 2019 for persons who have become infected with the novel coronavirus Covid-19:

Use the following variant of the logistic curve as a formula: Where:

The   R0   of an infection (different from   r   above) is a measure of how many new individuals will become infected for every individual currently infected. It is an important measure of how quickly an infectious disease may spread. R0   is related to the logistic curve's   r   parameter by the formula: where   G   the generation time, is roughly the sum of the incubation time, perhaps 5 days, and the mean contagion period, perhaps 7 days, so, for covid-19, roughly we have:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Logistic curve fitting in epidemiology step by step in the Wren programming language

Source code in the wren programming language

var K = 7800000000 // approx world population
var n0 = 27        // number of cases at day 0

var y = [
    27, 27, 27, 44, 44, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60,
    61, 61, 66, 83, 219, 239, 392, 534, 631, 897, 1350, 2023,
    2820, 4587, 6067, 7823, 9826, 11946, 14554, 17372, 20615,
    24522, 28273, 31491, 34933, 37552, 40540, 43105, 45177,
    60328, 64543, 67103, 69265, 71332, 73327, 75191, 75723,
    76719, 77804, 78812, 79339, 80132, 80995, 82101, 83365,
    85203, 87024, 89068, 90664, 93077, 95316, 98172, 102133,
    105824, 109695, 114232, 118610, 125497, 133852, 143227,
    151367, 167418, 180096, 194836, 213150, 242364, 271106,
    305117, 338133, 377918, 416845, 468049, 527767, 591704,
    656866, 715353, 777796, 851308, 928436, 1000249, 1082054,
    1174652
]

var f = Fn.new { |r|
    var sq = 0
    for (i in 0...y.count) {
        var eri = (r*i).exp
        var dst = (n0*eri)/(1+n0*(eri-1)/K) - y[i]
        sq = sq + dst * dst
    }
    return sq
}

var solve = Fn.new { |f, guess, epsilon|
    var f0 = f.call(guess)
    var delta = guess
    var factor = 2 // double until f0 best then halve until delta <= epsilon
    while (delta > epsilon) {
        var nf = f.call(guess - delta)
        if (nf < f0) {
            f0 = nf
            guess = guess - delta
        } else {
            nf = f.call(guess + delta)
            if (nf < f0) {
                f0 = nf
                guess = guess + delta
            } else {
                factor = 0.5
            }
        }
        delta = delta * factor
    }
    return guess
}

var r = (solve.call(f, 0.5, 0) * 1e10).round / 1e10
var R0 = ((12 * r).exp * 1e8).round / 1e8
System.print("r = %(r), R0 = %(R0)")

  

You may also check:How to resolve the algorithm Validate International Securities Identification Number step by step in the Caché ObjectScript programming language
You may also check:How to resolve the algorithm Brownian tree step by step in the Tcl programming language
You may also check:How to resolve the algorithm Dijkstra's algorithm step by step in the Maple programming language
You may also check:How to resolve the algorithm System time step by step in the M2000 Interpreter programming language
You may also check:How to resolve the algorithm Sorting algorithms/Stooge sort step by step in the NetRexx programming language