library(REDCapR) library(tidyverse) readRenviron("/Users/au301842/PAaSO/.Renviron") token <- Sys.getenv('STROKE_API') ds <- redcap_read( token = token, redcap_uri = "https://redcap.au.dk/api/", fields = c( "forloebid", "ageforloeb_patiente", "sex_patiente", "forloebdato_patiente", "forloebtid_patiente", "ankomstdato_basisske", "ankomsttid_basisske", "mrsfoer_basisske", "symptdebexactdato_basisske", "symptdebexacttid_basisske", "modtagetsomtrombolysekandidat_basisske", "vaskdiag_basisske", "diagnosecerebraltinfarkt_basisske", "nihss_basisske", "id_tromboly", "ankomsttidtrombol_tromboly", "id_trombekt", "mdmrs3_tremdrop", "ankomstdatotrombek_trombekt" ) )$data ds_filter <- ds |> filter(diagnosecerebraltinfarkt_basisske=="TRUE") ## Vector to correct arrival time tid_a <- substr(as.character(ds_filter$forloebtid_patiente),12,19)=="" ds_mod <- ds_filter |> mutate(mrsfoer_basisske=mrsfoer_basisske-2, mdmrs3_tremdrop=mdmrs3_tremdrop-1) |> transmute(onset=as_datetime(paste(substr( as.character(ds_filter$symptdebexactdato_basisske), 1, 10 ), substr(as.character(ds_filter$symptdebexacttid_basisske), 12, 19) )), arrival = as_datetime(paste(substr( as.character(ds_filter$forloebdato_patiente), 1, 10 ), ifelse( tid_a, substr(as.character(ds_filter$ankomsttid_basisske), 12, 19), substr(as.character(ds_filter$forloebtid_patiente), 12, 19) ))), sex=sex_patiente, age=ageforloeb_patiente, nihss=nihss_basisske, ivt=!is.na(id_tromboly), evt=!is.na(id_trombekt), mrs_0=factor(ifelse(!mrsfoer_basisske %in% 0:5,NA,mrsfoer_basisske)), mrs_3=factor(ifelse(!mdmrs3_tremdrop %in% 0:5,NA,mdmrs3_tremdrop)), delay=as.numeric(difftime(arrival,onset,units="mins")), # delay_group=cut(delay,breaks = c(0,90,270,420,max(delay)),include.lowest = TRUE,labels = c("<90","90-270","270-420",">420")), year=as.numeric(substr(as.character(arrival),1,4)) ) |> filter(delay<1440, delay>0) # Only include ptt presenting within 1 day, positive delay # FØR: 0=Uoplyst | 1=Ukendt | 2=0: Ingen symptomer | 3=1: Ingen synlig funktionsnedsættelse | 4=2: Nogen funktionsnedsættelse | 5=3: Moderat funktionsnesættelse | 6=4: Moderat-svær funktionsnedsættelse | 7=5: Svær funktionsnedsættelse # EFTER: 0=Ingen symptomer | 1=Ingen synlig funktionsnedsættelse | 2=Nogen funktionsnedsættelse | 3=Moderat funktionsnesættelse | 4=Moderat-svær funktionsnedsættelse | 5=Svær funktionsnedsættelse | 6=Død | 7=Levende, ukendt Ranking score | 8=Ikke tilgængelig info skimr::skim(ds_mod) tbl <- table(mRS=ds_mod$mrs_3, Group=ds_mod$delay_group, Strata=ds_mod$adm_year) rankinPlot::grottaBar(tbl, groupName = "Group", scoreName = "mRS",strataName = "Strata") ds_sums <- ds_mod |> group_by(year) |> summarise(mrs_3_median=median(as.numeric(mrs_3)-1,na.rm=TRUE), mrs_3_iqr=paste(quantile(as.numeric(mrs_3)-1,na.rm=TRUE),collapse = ", "), nihss_median=median(nihss,na.rm=TRUE), nihss_iqr=paste(quantile(nihss,na.rm=TRUE),collapse = ", "), n=n(), norm_days_frac=365.25/as.numeric(difftime(max(arrival),min(arrival),units = "days")), n_norm=n*norm_days_frac, ivt_n=sum(ivt), ivt_f=sum(ivt)/n, evt_n=sum(evt), evt_f=sum(evt)/n) library(ggplot2) p1 <- ds_mod |> ggplot()+ geom_violin(aes(x=as.factor(year),y=as.numeric(mrs_3), fill = year)) p2 <- ds_sums |> ggplot(aes(x=as.factor(year)))+ geom_line(aes(y=n_norm, group=1)) ds_sums |> ggplot(aes(x=as.factor(year)))+ geom_line(aes(y=ivt_f, group=1)) ds_sums |> ggplot(aes(x=as.factor(year)))+ geom_line(aes(y=evt_f, group=1))