SIR Model Covid-19 DKI Jakarta
~ Bulan Juni 2020 ~
| Oleh | Muhammad Aji Permana |
| Dosen Pengampu | Prof. Dr M. Suhartono, M.Kom |
| Program | Magister Informatika |
| Tanggal | 11 Mei 2022 |
Pendahuluan
Model SIR merupakan model epidemi yang dilakukan dengan mengelompokkan populasi ke dalam tiga kelas yang saling asing, yaitu kelas individu rentan yang dapat terinfeksi (Susceptible - S), kelas individu terinfeksi (Infected - I), dan kelas individu yang sembuh dari sakit (Recovered - R). Selanjutnya, ketika individu-individu di ketiga kelas tersebut saling berinteraksi, maka banyaknya individu pada kelas terinfeksi dan kedua kelas lainnya pada waktu tertentu dapat diketahui. Model ini pertama kali diperkenalkan oleh Kermack dan McKendrik (1927), yang digunakan untuk memodelkan penyakit yang menular.
1. Import data excel
library(readxl)## Warning: package 'readxl' was built under R version 4.1.3
data.corona <- read_excel("datacoba.xlsx")
head(data.corona)2. Visualisasi kasus kumulatif
library(ggplot2)## Warning: package 'ggplot2' was built under R version 4.1.3
hari <- data.corona$hari
y <- data.corona$kumulatifplot.corona <- ggplot(data = data.corona, aes(x=hari,y))+
geom_point()+geom_smooth(method = "loess", formula = y~x,se=T)+ylab("Jumlah")+
labs(title = "Total Infeksi COVID-19 DKI Jakarta Juni 2021")+theme(axis.text.x=element_text(
angle = 45,hjust = 1
))
plot.corona
Dari visualisasi diatas terlihat bahwa kasus Covid-19 pada bulan Juni
2020, terlihat cenderung meningkat.
3. Pemodelan SIR
Infected <- as.numeric(data.corona$kumulatif)
Day <- as.numeric(data.corona$hari)
N <- 11250000
R <-as.numeric(data.corona$sembuh_komulatif)library(deSolve)## Warning: package 'deSolve' was built under R version 4.1.3
SIR <- function(time, state, parameters){
par <- as.list(c(state, parameters))
with(par,{
dS <- -beta/N*I*S
dI <- beta/N*I*S-gamma*I
dR <- gamma*I
list(c(dS,dI,dR))
})
}
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
}
opt <- optim(c(0.5,0.5),RSS,method="L-BFGS-B",lower=c(0,0),upper = c(1,1))
opt$message## [1] "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH"
#Memanggil nilai beta dan gamma
opt_par <- setNames(opt$par,c("beta","gamma"))
opt_par## beta gamma
## 0.5660974 0.4389645
#Membuat data persebaran dengan waktu persebaran 90 hari
t <- 1:90
fit <- data.frame(ode(y=init, times=t,func=SIR, parms = opt_par))#Visualisasi model SIR
col <- 1:3
matplot(fit$time, fit[,2:4],type="l",xlab = "Day", ylab="Jumlah Manusia",lwd = 2,lty=1,
col=col,log="y")## Warning in xy.coords(x, y, xlabel, ylabel, log = log, recycle = TRUE): 1 y value
## <= 0 omitted from logarithmic plot
points(Day,Infected)
legend("bottomright",c("Rentan","Terinfeksi","Sembuh"),lty=1,lwd=2,col=col)
title("Model SIR COVID-19 DKI Jakarta Juni 2021",outer=T,line=-2)4. Mencari nilai R0
RO <- setNames(opt_par["beta"]/opt_par["gamma"],"RO")
print(RO)## RO
## 1.28962
5. Kesimpulan
- Berdasarkan pemodelan SIR, didapatkan kasus Covid-19 akan terus naik hingga hari ke 70 pasca kasus pertama.
- Nilai R0 sebesar 1.2 menunjukkan jumlah kasus akan terus bertambah, dimana 1 orang akan menularkan pada 1,2 orang lainnya.
6. Referensi
https://github.com/juba/rmdformats : Format Visual Rpubs
https://rpubs.com/Hellan/PemodelanKasusPersebaranCOVID-19DenganModelSIR