102 lines
4 KiB
R
102 lines
4 KiB
R
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))
|