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()