Title: | Non Linear Growth Models |
---|---|
Description: | Six growth models are fitted using non-linear least squares. These are the Richards, the 3, 4 and 5 parameter logistic, the Gompetz and the Weibull growth models. Reference: Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). "Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach". BMC medical research methodology, 21(1), 1-11. <doi:10.1186/s12874-020-01165-x>. |
Authors: | Michail Tsagris [aut, cre], Nikolaos Pandis [aut] |
Maintainer: | Michail Tsagris <[email protected]> |
License: | GPL (>= 2) |
Version: | 1.0 |
Built: | 2024-12-16 06:56:36 UTC |
Source: | CRAN |
Six growth models are fitted using non-linear least squares. The relevant reference is: Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach. BMC Medical Research methodology, 21(1): 1–11. <doi:10.1186/s12874-020-01165-x>.
Package: | nlgmcr Type: | Package |
Version: | 1.0 | |
Date: | 2021-11-25 | |
License: | GPL-2 | |
Michail Tsagris [email protected].
Acknowledgments:
Michail Tsagris [email protected] and Nikolaos Pandis [email protected].
Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach. BMC medical Research Methodology, 21(1): 1–11.
Non-linear growth models.
nlgm(y, ti, type, ini, ti.ahead = NULL)
nlgm(y, ti, type, ini, ti.ahead = NULL)
y |
A vector with the cumulative number of cases. |
ti |
A vector with the time, e.g. days. |
ini |
A vector with the initial values. The length varies according to the type of growth model. |
type |
The type of the growth model. "richards", "3logistic", "4logistic", "5logistic", "gompertz" or "weibull". See Reddy et al. (2021) for more information. |
ti.ahead |
If you want to make predictions for a number of days ahead, provide the number of days, a single number. |
Non-linear growth curves are fitted using least squares.
A list including:
mod |
The object as returned by the function |
param |
A vector with the parameters of the chosen model. |
fit |
The fitted values. |
pred |
The future predictions if values for the argument "ti.ahead" were given, otherwise this is NULL. |
Michail Tsagris and Nikolaos Pandis.
R implementation and documentation: Michail Tsagris [email protected] and Nikolaos Pandis [email protected].
Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach. BMC medical research methodology, 21(1), 1-11.
## Data on Covid 19 for the first 96 days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 ## Apply the 4-parameter logistic model mod1 <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) ## predict the cases 10 days ahead mod2 <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35), ti.ahead = 10 )
## Data on Covid 19 for the first 96 days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 ## Apply the 4-parameter logistic model mod1 <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) ## predict the cases 10 days ahead mod2 <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35), ti.ahead = 10 )
Parametric bootstrap prediction intervals.
boot.pred(mod, type, ti, ti.ahead = 10, B = 1000, conf = 0.95, seed = NULL)
boot.pred(mod, type, ti, ti.ahead = 10, B = 1000, conf = 0.95, seed = NULL)
mod |
The "nls" object of the |
type |
The type of the growth model. "richards", "3logistic", "4logistic", "5logistic", "gompertz" or "weibull". See Reddy et al. (2021) for more information. |
ti |
A vector with the time, e.g. days. |
ti.ahead |
The future time points. |
B |
The number of boostrap samples to draw. These samples are drawn from a Poisson distribution. |
conf |
The prediction level, set to 95% by default. |
seed |
Provide a seed number if you want, otherwise leave it NULL. |
Non-linear growth curves are fitted using least squares. Based on the model a parametric bootstrap is applied in order to construct prediction intervals. The fitted values act as the mean from which Poisson samples are drawn and the nlgm is fitted. Using this fitted model, the predicted number of cumulative cases, at the selected number of days ahead, are calculated. This process is repated B times and in the end the prediction interval is computed by returning the tails of this bootstrap predicted values distribution.
A list including:
est |
A column with 3 columns, the mean of the bootstrap based preditions and the prediction interval. |
pred |
A matrix with B columns. Each column represents a bootstrap based set of prediction values. |
Michail Tsagris and Nikolaos Pandis.
R implementation and documentation: Michail Tsagris [email protected] and Nikolaos Pandis [email protected].
Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach. BMC medical research methodology, 21(1), 1-11.
## Data on the 96 first days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 ## Apply the 4-parameter logistic model mod <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) preds <- boot.pred(mod, type = "4logistic", ti = ti, B = 100)
## Data on the 96 first days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 ## Apply the 4-parameter logistic model mod <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) preds <- boot.pred(mod, type = "4logistic", ti = ti, B = 100)
Plot of the fitted values of the non-linear growth models.
fit.plot(mat)
fit.plot(mat)
mat |
A data.frame object with three columns, the observed cumulative cases, the time and the fitted values from a model. The names must be "cases", "ti" and "fit". See the examples below for an illustration. |
The scatter plot of the cumulative cases versus time is plotted. Then, lines with the fitted cases are added.
A scatter plot of the cumulative cases versus time, including lines with the fitted cases.
Nikolaos Pandis and Michail Tsagris.
R implementation and documentation: Nikolaos Pandis [email protected] and Michail Tsagris [email protected].
Reddy T., Shkedy Z., van Rensburg C. J., Mwambi H., Debba P., Zuma K. and Manda, S. (2021). Short-term real-time prediction of total number of reported COVID-19 cases and deaths in South Africa: a data driven approach. BMC medical research methodology, 21(1), 1-11.
## Data on the 96 first days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 mod <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) mat <- cbind(y, ti, mod$fit) colnames(mat) <- c("cases", "ti", "fit") mat <- as.data.frame(mat) fit.plot(mat)
## Data on the 96 first days of Belgium y <- c( 19, 38, 72, 125, 206, 316, 343, 407, 501, 600, 774, 1024, 1362, 1541, 1755, 2142, 2564, 3098, 3811, 4473, 4942, 5428, 6756, 7951, 9150, 10513, 12031, 12875, 13558, 15296, 16977, 18493, 19971, 21665, 22587, 23252, 25186, 26701, 28299, 30538, 32874, 33903, 34427, 34964, 36524, 38157, 39831, 41225, 41947, 42390, 43666, 44936, 45713, 46689, 47500, 47888, 48093, 48848, 49417, 49939, 50525, 50762, 51048, 51188, 51858, 52404, 52956, 53398, 53881, 54121, 54239, 54715, 55110, 55431, 55736, 56082, 56229, 56310, 56627, 56919, 57304, 57374, 57622, 57745, 57820, 58134, 58336, 58518, 58689, 58854, 58915, 58964, 59023, 59204, 59363, 59535 ) ti <- 1:96 mod <- nlgm(y, ti, type = "4logistic", ini = c(60000, 1, 1, 35) ) mat <- cbind(y, ti, mod$fit) colnames(mat) <- c("cases", "ti", "fit") mat <- as.data.frame(mat) fit.plot(mat)