library (paletteer)
df23 <- df1 %>% filter (year (adm_week) == 2023 )
co <- data.frame ()
for (i in 0 : 6 ){
gen <- seq (0 ,1 ,le= 52 ) + i
co <- rbind (co,gen)
}
df23 <- df1 %>% filter (year (adm_date) == 2023 )
wwww <- slide_age (time1 = df23$ adm_date,
age1 = df23$ age1,
w1 = 7 , s1= 7 )
library (zoo)
ch <- data.frame (date = wwww$ adat$ date,
c0 = as.numeric (co[1 ,]),
c1 = as.numeric (co[2 ,]),
c2 = as.numeric (co[3 ,]),
c3 = as.numeric (co[4 ,]),
c4 = as.numeric (co[5 ,]),
c5 = as.numeric (co[6 ,]))
ch <- ch %>% mutate (
trend = c (rep ("#80FFFFFF" ,26-3 ),
rep ("#FFFFFFFF" ,26 + 3 ))
)
ch$ group <- consecutive_id (ch$ trend)
ch <- head (do.call (rbind, by (ch, ch$ group, rbind, NA )), - 1 )
ch[, c ("trend" , "group" )] <- lapply (ch[, c ("trend" , "group" )], na.locf)
ch[] <- lapply (ch, na.locf, fromLast = T)
ch$ trend <- factor (ch$ trend,
levels = c ("#80FFFFFF" ,"#FFFFFFFF" ))
leb_month <- c ("Jan" ,rep ("" ,3 ),"Feb" ,rep ("" ,3 ),"Mar" ,rep ("" ,4 ),"Apr" ,rep ("" ,3 ),
"May" ,rep ("" ,4 ),"Jun" ,rep ("" ,3 ),"Jul" ,rep ("" ,3 ),"Aug" ,rep ("" ,4 ),
"Sep" ,rep ("" ,3 ),"Oct" ,rep ("" ,3 ),"Nov" ,rep ("" ,4 ),"Dec" ,rep ("" ,3 ))
ts <- data.frame (wwww$ wdat$ date,wwww$ wdat$ age) %>%
filter (! is.na (wwww$ wdat$ date) & ! is.na (wwww$ wdat$ age)) %>%
count (wwww$ wdat$ date) %>%
set_colnames (c ("time" ,"n" )) %>%
mutate (peak = c (rep ("1st" ,36 ),rep ("2nd" ,nrow (.)- 36 ))) %>%
ggplot (aes (x = time, y = n,fill = peak)) +
geom_col (alpha = 0.6 ,color= "black" ) +
geom_vline (xintercept = 36.5 ) +
theme_minimal ()+
scale_y_continuous (name = "Cases" ,
breaks = seq (0 ,3000 ,by = 1000 ),
limit = c (0 ,3000 ),
minor_breaks = NULL )+
scale_fill_manual (values = c ("#582C83FF" ,"#FFC72CFF" ))+
labs (tag = "C" )+
annotate ("rect" , fill = "grey" ,
xmin = c ("2023-01-04" ,"2023-04-05" ,"2023-08-02" ,"2023-12-06" ),
xmax = c ("2023-01-11" ,"2023-04-26" ,"2023-08-30" ,"2023-12-27" ),
ymin = 0 , ymax = Inf , alpha = .5 )+
theme (axis.title.x = element_blank (),
axis.text.x = element_blank (),
axis.ticks.x = element_blank (),
legend.position = "none" ,
plot.tag = element_text (face = "bold" , size = 18 ),
axis.title.y = element_text (size = 18 ),
axis.text.y = element_text (size = 18 ))
hm <- ggplot (data= wwww$ wdat, aes (x= date, y= age)) +
stat_density (
aes (fill = after_stat (density)),
geom = "raster" ,
position = "identity" ,
interpolate = TRUE
)+
scale_fill_paletteer_c ("grDevices::Inferno" )+
# scale_fill_gradient(low="#040404FF", high= "#FFFE9EFF")+
# scale_fill_distiller(palette = "Blues")+
theme_minimal ()+
scale_y_reverse (name = "Age (years)" ,lim= rev (c (0 ,6 )),breaks = seq (0 ,6 ))+
scale_x_discrete (name = "Admission week" ,labels = leb_month)+
labs (tag = "D" ,fill = "Density" )+
# theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1,size = 8))+
geom_line (data = ch,aes (x = date,y = c0,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c1,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c2,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c3,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c4,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c5,col = trend),
group = 1 ,lwd = 0.25 )+
theme (axis.title.y = element_text (size = 18 ),
axis.title.x = element_blank (),
axis.ticks.x = element_blank (),
legend.position = "top" ,
plot.tag = element_text (face = "bold" , size = 18 ),
axis.text.x = element_blank (),
axis.text.y = element_text (size = 18 ),
legend.text = element_text (size = 15 ),
legend.title = element_text (size = 18 ))+
guides (fill= guide_colourbar (barwidth= 20 ,
label.position= "top" ),
color = "none" )
hm2 <- ggplot (data= wwww$ wdat, aes (x= date, y= age)) +
stat_density (
aes (fill = after_stat (count)),
geom = "raster" ,
position = "identity" ,
interpolate = TRUE
)+
scale_fill_paletteer_c ("grDevices::Inferno" )+
# scale_fill_gradient(low="#040404FF", high= "#FFFE9EFF")+
# scale_fill_distiller(palette = "Blues")+
theme_minimal ()+
scale_y_reverse (name = "Age (years)" ,lim= rev (c (0 ,6 )),breaks = seq (0 ,6 ))+
scale_x_discrete (name = "Admission week" ,labels = leb_month)+
labs (tag = "D" ,fill = "Number of hospitalizations" )+
# theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1,size = 8))+
geom_line (data = ch,aes (x = date,y = c0,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c1,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c2,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c3,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c4,col = trend),
group = 1 ,lwd = 0.25 )+
geom_line (data = ch,aes (x = date,y = c5,col = trend),
group = 1 ,lwd = 0.25 )+
theme (axis.title.y = element_text (size = 18 ),
axis.title.x = element_blank (),
axis.ticks.x = element_blank (),
legend.position = "top" ,
plot.tag = element_text (face = "bold" , size = 18 ),
axis.text.x = element_blank (),
axis.text.y = element_text (size = 18 ),
legend.text = element_text (size = 15 ),
legend.title = element_text (size = 18 ))+
guides (fill= guide_colourbar (barwidth= 20 ,
label.position= "top" ),
color = "none" )
fi_peak <- df1 %>% filter (year (adm_date) == "2023" ) %>%
filter ((adm_date <= as.Date ("2023-09-03" )&
! is.na (adm_date) & ! is.na (age1)))
se_peak <- df1 %>% filter (year (adm_date) == "2023" ) %>%
filter ((adm_date > as.Date ("2023-09-03" )) &
! is.na (adm_date) & ! is.na (age1))
data <- data.frame (
peak = c ( rep ("1st" ,nrow (data.frame (se_peak$ age1))),
rep ("2nd" ,nrow (data.frame (fi_peak$ age1)))),
age = c ( fi_peak$ age1, se_peak$ age1 )
)
## density plot
ad <- ggplot (data= data, aes (x= age, group= peak, fill= peak)) +
geom_density (alpha = 0.6 ) +
scale_fill_manual (values = c ("#582C83FF" ,"#FFC72CFF" )) +
scale_x_reverse (limit = c (6 ,0 ),
breaks = seq (0 ,6 ,by= 1 ),
minor_breaks = NULL )+
scale_y_continuous (minor_breaks = NULL ,position = "right" )+
coord_flip ()+
theme_minimal ()+
labs (x = "Age" , y = "Density" ,tag = "F" ,fill = "Wave" )+
theme (axis.title.y = element_blank (),
axis.ticks.x = element_blank (),
# legend.position = "top",
plot.tag = element_text (face = "bold" , size = 18 ),
axis.title.x = element_text (size = 18 ),
axis.text.x = element_text (size = 18 ),
axis.text.y = element_blank (),
legend.text = element_text (size = 18 ),
legend.title = element_text (size = 18 ))
library (ISOweek)
count_dangky_week <- readRDS ("D:/OUCRU/hfmd/data/count_dangky_week.rds" )
child <- count_dangky_week %>% filter (birth_year >= 2017 ) %>% group_by (birth_week, birth_year) %>%
summarise (n= sum (n)) %>% arrange (birth_year)
colnames (child) <- c ("week" ,"year" ,"birth" )
## combine week 52 and 53
child$ week <- ifelse (child$ week == 53 ,52 ,child$ week)
child <- child %>% group_by (year) %>%
mutate (newn = ifelse (week == 52 , sum (birth[week== 52 ]), birth)) %>%
{data.frame (.$ week, .$ year, .$ newn )} %>% unique () %>%
magrittr:: set_colnames (c ("week" ,"year" ,"birth" ))
child$ week2 <- seq (1 : length (child$ week))
time <- data.frame ()
for (i in 2017 : 2022 ){
range <- child$ week[child$ year == i]
if (length (range) == 52 ){
time_add <- seq.int (i + 7 / 365 ,(i+ 1 ) - 7 / 365 ,
length.out = length (range)) %>% data.frame ()
} else {
time_add <- seq.int (i + 7 / 365 ,(i+ 1 ) - 7 / 365 ,
length.out = 52 )[1 : length (range)] %>% data.frame ()
}
time <- rbind (time,time_add)
}
child[,5 ] <- time %>%
magrittr:: set_colnames (c ("time" ))
## model fitting
fit <- mgcv:: gam (birth ~ s (week) + s (week2),method = "REML" ,data = child)
cutpoint <- function (point){
fitt <- mgcv:: gam (birth ~ s (week) + s (week2),
method = "REML" ,data = child[- c (point: nrow (child)),])
new_data2 <- data.frame (week = rep (1 : 52 ,7 ))
new_data2$ week2 <- seq (1 ,nrow (new_data2))
new_data2$ year <- rep (2017 : 2023 ,each = 52 )
time <- data.frame ()
for (i in 2017 : 2023 ){
range <- new_data2$ week[new_data2$ year == i]
time_add <- data.frame (seq.int (i + 7 / 365 ,(i+ 1 ) - 7 / 365 ,
length.out = length (range)))
time <- rbind (time,time_add)
}
new_data2[4 ] <- time %>%
magrittr:: set_colnames (c ("time" ))
est2 <- predict.gam (fitt,newdata = new_data2,
type= "response" ,se.fit = TRUE )
new_data2 <- new_data2 %>% mutate (
fit = est2$ fit,
lwr = est2$ fit - qt (0.95 ,nrow (new_data2))* est2$ se.fit,
upr = est2$ fit + qt (0.95 ,nrow (new_data2))* est2$ se.fit,
)
out <- list ()
out$ point <- point
out$ df <- new_data2
return (out)
}
plot_cp <- function (model){
dta <- model$ df %>%
mutate (time2 = sprintf ("%04d-W%02d-1" , year, week),
time2 = ISOweek2date (time2))
ggplot (data = dta) +
geom_line (aes (x = time2,y = fit),col = "blue" )+
geom_ribbon (aes (x = time2,ymin = lwr, ymax = upr), fill = "royalblue" ,alpha = 0.4 )+
geom_vline (xintercept = dta$ time2[dta$ week2 == model$ point])+
labs (y = "Number of births" ,
x = "Year" )+
theme_minimal ()
}
model <- cutpoint (270 )
b_ss <- plot_cp (model)+
geom_point (data = child[1 : 270 ,]%>%
mutate (time2 = sprintf ("%04d-W%02d-1" , year, week),
time2 = ISOweek2date (time2)) ,
aes (x = time2, y = birth),alpha = 0.5 )+
# annotate("text", x= 2017, y=3500, label= "Fitting") +
# annotate("text", x = 2023.5, y=3500, label = "Estimation")+
scale_x_date (date_labels = "%Y" ,
breaks = seq (as.Date ("2017-01-01" ),
as.Date ("2024-01-01" ),
by = "1 year" ),
limits = c (as.Date ("2017-01-01" ),
as.Date ("2024-01-01" )))+
theme (axis.title.y = element_text (size = 18 ),
axis.ticks.x = element_blank (),
legend.position = "bottom" ,
plot.tag = element_text (face = "bold" , size = 18 ),
axis.title.x = element_text (size = 18 ),
axis.text.x = element_text (size = 18 ),
axis.text.y = element_text (size = 18 ),
legend.text = element_text (size = 15 ),
legend.title = element_text (size = 18 ))