Apa itu R0?
Grafik covid19 akan melandai atau mencapai puncaknya, jika factor R0 mendekati satu atau kurang dari satu. Sebagai contoh mudahnya jika factor R0 =3, artinya satu orang pertama akan menulari 3 orang lain, dan seterusnya berantai. Begitu juga jika R0=2, nah jika R0 lebih kecil dari satu atau negative itu artinya covid19 berhenti.
Data
Diambil data covid19 Indonesia, antara "2020-03-02"-"2020-05-02"
Coding R
Sebelum menjalankan Coding R, install dulu Rstudio
library yang diperlukan
library(coronavirus)
library(tidyr)
library(tableHTML)
library(coronavirus)
library(dplyr)
library(magrittr)
library(lubridate)
library(deSolve)
Ambil data covid19
data(coronavirus)
tt <- head(coronavirus)
head(tt)
## date province country lat long type cases
## 1 2020-01-22 Afghanistan 33 65 confirmed 0
## 2 2020-01-23 Afghanistan 33 65 confirmed 0
## 3 2020-01-24 Afghanistan 33 65 confirmed 0
## 4 2020-01-25 Afghanistan 33 65 confirmed 0
## 5 2020-01-26 Afghanistan 33 65 confirmed 0
## 6 2020-01-27 Afghanistan 33 65 confirmed 0
Rumus dasar SIR
SIR <- function(time, state, parameters) {
par <- as.list(c(state, parameters))
with(par, {
dS <- -beta * I * S / N
dI <- beta * I * S / N - gamma * I
dR <- gamma * I
list(c(dS, dI, dR))
})
}
Proses perhitungan covid19 dg metode SIR
#library(dplyr)
#library(magrittr)
df <- coronavirus %>%
filter(country == "Indonesia") %>%
group_by(date, type) %>%
summarise(total = sum(cases, na.rm = TRUE)) %>%
pivot_wider(
names_from = type,
values_from = total
) %>%
arrange(date) %>%
ungroup() %>%
mutate(active = confirmed - death - recovered) %>%
mutate(
confirmed_cum = cumsum(confirmed),
death_cum = cumsum(death),
recovered_cum = cumsum(recovered),
active_cum = cumsum(active)
)
td <- tail(df,50)
td
## # A tibble: 50 x 9
## date confirmed death recovered active confirmed_cum death_cum
## <date> <int> <int> <int> <int> <int> <int>
## 1 2020-04-05 181 7 14 160 2273 198
## 2 2020-04-06 218 11 28 179 2491 209
## 3 2020-04-07 247 12 12 223 2738 221
## 4 2020-04-08 218 19 18 181 2956 240
## 5 2020-04-09 337 40 30 267 3293 280
## 6 2020-04-10 219 26 30 163 3512 306
## 7 2020-04-11 330 21 4 305 3842 327
## 8 2020-04-12 399 46 73 280 4241 373
## 9 2020-04-13 316 26 21 269 4557 399
## 10 2020-04-14 282 60 46 176 4839 459
## # ... with 40 more rows, and 2 more variables: recovered_cum <int>,
## # active_cum <int>
Menentukan start data dan end data
#library(lubridate)
sir_start_date <- "2020-03-02"
sir_end_date <- "2020-05-02"
Infected <- subset(df, date >= ymd(sir_start_date) & date <= ymd(sir_end_date))$active_cum
# Create an incrementing Day vector the same length as our
# cases vector
Day <- 1:(length(Infected))
Menentukan fungsi awal S, I, R masukkan nilai N=jumlah penduduk Indonesia
N <- 268074600 #Jumlah penduduk Indonesia, https://id.wikipedia.org/wiki/
init <- c(
S = N - Infected[1],
I = Infected[1],
R = 0
)
RSS <- function(parameters) {
names(parameters) <- c("beta", "gamma")
out <- ode(y = init, times = Day, func = SIR, parms = parameters)
fit <- out[, 3]
sum((Infected - fit)^2)
}
#library(deSolve)
Opt <- optim(c(0.5, 0.5),
RSS,
method = "L-BFGS-B",
lower = c(0, 0),
upper = c(1, 1)
)
Check for convergence
Opt$message
## [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
#[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
#---Convergence is confirmed. Now we can examine the fitted values for
Opt_par <- setNames(Opt$par, c("beta", "gamma"))
Opt_par
## beta gamma
## 0.5715389 0.4284613
Hasil perhitungan RO berdasarkan data covid19 Indonesia, antara 2020-03-02 sampai 2020-05-02
R0 <- as.numeric(Opt_par[1] / Opt_par[2])
R0
## [1] 1.333934