Di sini akan ditunjukkan beberapa perhitungan Reproduksi Efektif atau
(Rt) dengan beberapa package di R. seperti EpiEstim,
EpiInvert, R0, dan EpiNow2
Di metode ini, kita akan menggunakan file yang bersumber dari data COVID-19 di Kementerian Kesehatan Indonesia pada tanggal 23 Juni 2023.
data_nas <- read_excel("C:/Users/dhihr/Downloads/230608_nasional_jb_njb.xlsx")
data_olah_nasional <- filter(data_nas, Provinsi == "Indonesia")
DT::datatable(data_nas)
Rt_Indonesia <- data.frame(I = data_olah_nasional$`Kasus Harian`, dates = data_olah_nasional$Tanggal, Provinsi = data_olah_nasional$Provinsi)
Rt_Indonesia$I <- Rt_Indonesia$I %>% replace_na(0)
Rt_Indonesia$dates <- as.Date(Rt_Indonesia$dates)
DT::datatable(Rt_Indonesia)
str(Rt_Indonesia)
## 'data.frame':    1076 obs. of  3 variables:
##  $ I       : num  1193 1095 1287 1254 1710 ...
##  $ dates   : Date, format: "2020-06-28" "2020-06-29" ...
##  $ Provinsi: chr  "Indonesia" "Indonesia" "Indonesia" "Indonesia" ...
kasus_tanggal_Indonesia <- Rt_Indonesia[-c(1:7),]
res_parametric_si_Indonesia <- estimate_R(Rt_Indonesia$I, 
                                      method="parametric_si",
                                      config = make_config(list(
                                        mean_si = 3.5, 
                                        std_si = 2.8))
)
## Default config will estimate R on weekly sliding windows.
##     To change this change the t_start and t_end arguments.
plot(res_parametric_si_Indonesia)
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## ℹ The deprecated feature was likely used in the incidence package.
##   Please report the issue at <https://github.com/reconhub/incidence/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
R_epiestim_Indonesia <- data.frame(tanggal = kasus_tanggal_Indonesia$dates, median_r = round(res_parametric_si_Indonesia$R$`Median(R)`,2),
                               Provinsi = kasus_tanggal_Indonesia$Provinsi)
epinow1 <- data.frame(date = data_olah_nasional$Tanggal, confirm = data_olah_nasional$`Kasus Harian`)
epinow_template <- tail(epinow1, n = 100)
reported_cases <- epinow_template
reported_cases$date <- as.Date(reported_cases$date, format='%Y-%m-%d')
str(reported_cases)
## 'data.frame':    100 obs. of  2 variables:
##  $ date   : Date, format: "2023-03-01" "2023-03-02" ...
##  $ confirm: num  252 278 211 207 165 144 303 312 307 295 ...
reporting_delay <- estimate_delay(rlnorm(1000,  log(3), 1),
                                  max_value = 15, bootstraps = 1)
generation_time <- get_generation_time(disease = "SARS-CoV-2", source = "ganyani")
incubation_period <- get_incubation_period(disease = "SARS-CoV-2", source = "lauer")
estimates <- epinow(reported_cases = reported_cases, 
                    generation_time = generation_time,
                    delays = delay_opts(incubation_period, reporting_delay),
                    rt = rt_opts(prior = list(mean = 2, sd = 0.2)),
                    stan = stan_opts(cores = 4))
## Logging threshold set at INFO for the EpiNow2 logger
## Writing EpiNow2 logs to the console and: C:\Users\dhihr\AppData\Local\Temp\RtmpKK6pQE/regional-epinow/2023-06-08.log
## Logging threshold set at INFO for the EpiNow2.epinow logger
## Writing EpiNow2.epinow logs to the console and: C:\Users\dhihr\AppData\Local\Temp\RtmpKK6pQE/epinow/2023-06-08.log
## WARN [2023-10-14 01:21:09] epinow: There were 9 divergent transitions after warmup. See
## https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## to find out why this is a problem and how to eliminate them. - 
## WARN [2023-10-14 01:21:09] epinow: Examine the pairs() plot to diagnose sampling problems
##  -
knitr::kable(summary(estimates))
| measure | estimate | 
|---|---|
| New confirmed cases by infection date | 102 (30 – 369) | 
| Expected change in daily cases | Likely decreasing | 
| Effective reproduction no. | 0.68 (0.33 – 1.3) | 
| Rate of growth | -0.093 (-0.21 – 0.084) | 
| Doubling/halving time (days) | -7.5 (8.2 – -3.3) | 
head(summary(estimates, type = "parameters", params = "R"))
##          date variable strat     type   median     mean         sd  lower_90
## 1: 2023-03-06        R  <NA> estimate 1.694045 1.699673 0.16081840 1.4392897
## 2: 2023-03-07        R  <NA> estimate 1.542666 1.545543 0.11322794 1.3666038
## 3: 2023-03-08        R  <NA> estimate 1.406980 1.410477 0.09198956 1.2671839
## 4: 2023-03-09        R  <NA> estimate 1.295742 1.295820 0.08747250 1.1505835
## 5: 2023-03-10        R  <NA> estimate 1.207527 1.201811 0.08822609 1.0492017
## 6: 2023-03-11        R  <NA> estimate 1.133180 1.127810 0.08780674 0.9701602
##    lower_50 lower_20 upper_20 upper_50 upper_90
## 1: 1.588868 1.656258 1.735909 1.804089 1.979385
## 2: 1.464988 1.514602 1.569707 1.618907 1.739946
## 3: 1.347918 1.383712 1.430038 1.467035 1.570285
## 4: 1.239400 1.275433 1.317432 1.351645 1.437212
## 5: 1.146851 1.185349 1.226309 1.261037 1.337892
## 6: 1.071065 1.111330 1.156132 1.188944 1.261446
head(summary(estimates, output = "estimated_reported_cases"))
##          date  type median     mean       sd lower_90 lower_50 lower_20
## 1: 2023-03-06 gp_rt  148.0 152.4410 42.12408    93.00   123.00      138
## 2: 2023-03-07 gp_rt  282.0 286.9100 73.95496   178.00   234.75      263
## 3: 2023-03-08 gp_rt  270.5 276.5150 73.04927   168.00   226.00      252
## 4: 2023-03-09 gp_rt  248.0 256.5785 69.57393   155.00   208.00      231
## 5: 2023-03-10 gp_rt  250.0 255.9080 68.75323   155.00   207.00      234
## 6: 2023-03-11 gp_rt  267.0 274.2875 71.06700   170.95   223.00      251
##    upper_20 upper_50 upper_90
## 1:      158   177.00   229.05
## 2:      300   332.00   417.05
## 3:      288   320.25   405.05
## 4:      267   301.00   380.00
## 5:      265   301.00   374.05
## 6:      286   317.00   403.00
R_epinow1 <- summary(estimates, type = "parameters", params = "R")
R_epinow2 <- summary(estimates, output = "estimated_reported_cases")
R_epinow3 <- summary(estimates, type = "parameters", params = "infections")
plot(estimates)
data_kasus <- kasus_tanggal_Indonesia$I
names(data_kasus) <- kasus_tanggal_Indonesia$dates
data_kasus <- tail(data_kasus, 1000)
tail(data_kasus)
## 2023-06-03 2023-06-04 2023-06-05 2023-06-06 2023-06-07 2023-06-08 
##        252        229        231        362        247        254
mGT <- generation.time("gamma", c(3.5,2.8))
SB <- est.R0.SB(data_kasus, begin=900, end=1000, mGT)
SB$R
##   [1] 0.80 1.09 0.73 0.78 0.68 0.66 1.09 1.09 1.07 1.04 1.08 0.95 0.95 1.12 1.09
##  [16] 1.09 1.05 1.07 1.00 0.98 1.13 1.11 1.02 1.05 1.08 1.08 1.03 1.10 1.13 1.11
##  [31] 1.07 1.08 1.05 1.02 1.11 1.12 1.09 1.09 1.04 1.07 1.05 1.16 1.16 1.15 1.15
##  [46] 1.12 1.11 1.08 1.17 1.15 1.13 1.09 1.07 1.02 1.05 1.11 1.14 1.19 1.20 1.19
##  [61] 1.13 1.06 1.10 1.21 1.18 1.15 1.12 1.08 1.06 1.11 1.10 1.08 1.08 1.06 1.04
##  [76] 1.03 1.02 1.04 1.02 1.01 1.02 1.01 1.01 1.04 1.03 1.01 1.02 1.01 1.00 1.00
##  [91] 1.04 1.01 1.01 1.00 1.00 1.00 1.00 1.00 1.00 1.00
plot(SB)
SB$end
## [1] "2023-06-08"
SB$begin
## [1] "2023-02-28"
data_bettencourt <- tail(data_kasus,101)
data_bettencourt <- as.data.frame(data_bettencourt)
data_bettencourt$date <- row.names(data_bettencourt)
data_bettencourt <- data_bettencourt %>% filter(row_number() <= n()-1)
data_bettencourt$bettencourt <- SB$R
TD <- est.R0.TD(data_kasus, mGT, begin=900, end=1000, nsim=80)
## Warning in est.R0.TD(data_kasus, mGT, begin = 900, end = 1000, nsim = 80):
## Accurate confidence interval for R(t) requires a large number of simulations.
## Consider increasing 'nsim'
## Warning in est.R0.TD(data_kasus, mGT, begin = 900, end = 1000, nsim = 80):
## Using initial incidence as initial number of cases.
plot(TD)
J <- data.frame(R0 = TD$R)
J$tanggal <- row.names(J)
tail(J)
##                   R0    tanggal
## 2023-06-03 0.7984722 2023-06-03
## 2023-06-04 0.8819473 2023-06-04
## 2023-06-05 0.9519575 2023-06-05
## 2023-06-06 0.8241786 2023-06-06
## 2023-06-07 0.8555524 2023-06-07
## 2023-06-08 0.0000000 2023-06-08
J$tanggal <- as.Date(J$tanggal)
kasus_tanggal_Indonesia$dates <- as.Date(kasus_tanggal_Indonesia$dates)
EpiInvert <- EpiInvert(kasus_tanggal_Indonesia$I,
                           "2023-06-25",kasus_tanggal_Indonesia$dates,
                           select_params(list(mean_si = 3.5,sd_si=2.8, shift_si=-1)))
## EpiInvert parameters used: 
## Incidence tail : i[1063]=252, i[1064]=229, i[1065]=231, i[1066]=362, i[1067]=247, i[1068]=254, 
## Last incidence date 2023-06-25
## Festive days tail : 2023-06-03, 2023-06-04, 2023-06-05, 2023-06-06, 2023-06-07, 2023-06-08, 
## max_time_interval=150
## Shifted log-normal serial interval parameters:
##   mean_si=3.500000
##   sd_si=2.800000
##   shift_si=-1.000000
## Rt_regularization_weight=5.000000
## seasonality_regularization_weight=5.000000
## EXECUTION TIME : 1.635000 SECONDS
EpiInvert_plot(EpiInvert)
R_epinow <- data.frame(Date = as.Date(R_epinow1$date), Epinow = round(R_epinow1$median,2), treshold = 1)
data_ends <- R_epinow %>% filter(Date == "2023-06-24")
R_teunis <- data.frame(Date = as.Date(J$tanggal), Teunis = round(J$R0,2), treshold = 1)
R_teunis <- R_teunis %>% filter(row_number() <= n()-1)
data_ends2 <- R_teunis %>% filter(Date == "2023-06-24")
R_epiestim <-data.frame(Date = as.Date(R_epiestim_Indonesia$tanggal), Epiestim = round(R_epiestim_Indonesia$median_r,2), treshold = 1)
data_ends3 <- R_epiestim %>% filter(Date == "2023-06-24")
R_bettencourt <- data.frame(Date = as.Date(data_bettencourt$date), bettencourt = data_bettencourt$bettencourt, treshold = 1)
data_ends4 <- R_bettencourt %>% filter(Date == "2023-06-24")
Rt_Alvarez <- data.frame(Date = as.Date(EpiInvert$dates), EpiInvert = round(EpiInvert$Rt,2), treshold = 1)
data_ends5 <- Rt_Alvarez %>% filter(Date == "2023-06-24")
p <- ggplot() + geom_line(data = R_epinow, aes(x = Date, y = Epinow), size = 1.5, color = "turquoise4") +
  geom_line(data = R_epinow, aes(x = Date, y = treshold), size = 0.5, color = "black", linetype = "dashed") +
  theme(plot.title=element_text(size=16), panel.grid.minor = element_blank()) + theme(strip.text = element_text(face="bold", size=9)) + labs(title ="Rt Epinow") + ylab("Rt") + xlab("Tanggal") +
  scale_x_date(date_breaks="1 week", date_labels="%d-%b", limits = as.Date(c("2023-05-20", "2023-06-24")))
p + geom_text_repel(
  aes(Date, Epinow, label = Epinow), data = data_ends,
  fontface ="bold", color = "black", size = 4) + theme_minimal()
p2 <- ggplot() + geom_line(data = R_teunis, aes(x = Date, y = Teunis), size = 1.5, color = "turquoise4") +
  geom_line(data = R_teunis, aes(x = Date, y = treshold), size = 0.5, color = "black", linetype = "dashed") +
  theme(plot.title=element_text(size=16), panel.grid.minor = element_blank()) + theme(strip.text = element_text(face="bold", size=9)) + labs(title ="Rt Wallinga & Teunis") + ylab("Rt") + xlab("Tanggal") +
  scale_x_date(date_breaks="1 week", date_labels="%d-%b", limits = as.Date(c("2023-05-20", "2023-06-24")))
p2 + geom_text_repel(
  aes(Date, Teunis, label = Teunis), data = data_ends2,
  fontface ="bold", color = "black", size = 4) + theme_minimal()
p3 <- ggplot() + geom_line(data = R_epiestim, aes(x = Date, y = Epiestim), size = 1.5, color = "turquoise4") +
  geom_line(data = R_epiestim, aes(x = Date, y = treshold), size = 0.5, color = "black", linetype = "dashed") +
  theme(plot.title=element_text(size=16), panel.grid.minor = element_blank()) + theme(strip.text = element_text(face="bold", size=9)) + labs(title ="Rt Epiestim") + ylab("Rt") + xlab("Tanggal") +
  scale_x_date(date_breaks="1 week", date_labels="%d-%b", limits = as.Date(c("2023-05-20", "2023-06-24")))
p3 + geom_text_repel(
  aes(Date, Epiestim, label = Epiestim), data = data_ends3,
  fontface ="bold", color = "black", size = 4) + theme_minimal()
p4 <- ggplot() + geom_line(data = R_bettencourt, aes(x = Date, y = bettencourt), size = 1.5, color = "turquoise4") +
  geom_line(data = R_bettencourt, aes(x = Date, y = treshold), size = 0.5, color = "black", linetype = "dashed") +
  theme(plot.title=element_text(size=16), panel.grid.minor = element_blank()) + theme(strip.text = element_text(face="bold", size=9)) + labs(title ="Rt Bettencourt & Ribiero") + ylab("Rt") + xlab("Tanggal") +
  scale_x_date(date_breaks="1 week", date_labels="%d-%b", limits = as.Date(c("2023-05-20", "2023-06-24"))) + ylim(0.6,1.3)
p4 + geom_text_repel(
  aes(Date, bettencourt, label = bettencourt), data = data_ends4,
  fontface ="bold", color = "black", size = 4) + theme_minimal()
p5 <- ggplot() + geom_line(data = Rt_Alvarez, aes(x = Date, y = EpiInvert), size = 1.5, color = "turquoise4") +
  geom_line(data = Rt_Alvarez, aes(x = Date, y = treshold), size = 0.5, color = "black", linetype = "dashed") +
  theme(plot.title=element_text(size=16), panel.grid.minor = element_blank()) + theme(strip.text = element_text(face="bold", size=9)) + labs(title ="Rt Epilinvert") + ylab("Rt") + xlab("Tanggal") +
  scale_x_date(date_breaks="1 week", date_labels="%d-%b", limits = as.Date(c("2023-05-20", "2023-06-24")))
p5 + geom_text_repel(
  aes(Date, EpiInvert, label = EpiInvert), data = data_ends5,
  fontface ="bold", color = "black", size = 4) + theme_minimal()