This vignette has two purposes:
It will be based on the PEDALFAST data set. Most of the R code will be echoed in this vignette. The full .Rmd file, including the in line code, can be found at:
The needed namespaces to reproduce this vignette are:
library(pedalfast.data)
library(knitr)
library(qwraps2)
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:qwraps2':
##
## mean_se
options(qwraps2_markup = 'markdown')
data(pedalfast, pedalfast_metadata)
There are some data manipulation steps that need to be taken before getting into the manuscript.
GCS Using: Glasgow Coma Scale (GCS) assessments occurred in the emergency department (ED) and/or the ICU. For the purposes of this work we will us the GCS assessed in the emergency department as primary and the ICU value if the ED value is unknown.
# gather all the gcs values form the ed.
gcs_ed_vars <- grep("^gcs(?!yn).*ed$", names(pedalfast), value = TRUE, perl = TRUE)
gcs_ed_vars
## [1] "gcseyeed" "gcsverbaled" "gcsmotored" "gcsed" "gcsetted"
## [6] "gcsseded" "gcspared" "gcseyeobed"
# create a set of gcs _using variables. This could be done using the
# data.table::fcoalesce function. Base R code is provided here:
for(j in gcs_ed_vars) {
pedalfast[[sub("ed$", "_using", j)]] <-
ifelse(is.na(pedalfast[[j]]), pedalfast[[ sub("ed$", "icu", j) ]], pedalfast[[j]])
}
# verify there are no missing values
stopifnot(!any(is.na(pedalfast$gcs_using)))
GCS Categories
GCS values provided in the pedalfast data set are integer values. These values are mapped to specific categorical interpretations. GCS is commonly used as both a numeric value and a categorical value. We will create variables here with the GCS categories documented in the metadata.
pedalfast$gcseye_using_cat <- gcs_as_factor(pedalfast$gcseye_using, "eye")
pedalfast$gcsmotor_using_cat <- gcs_as_factor(pedalfast$gcsmotor_using, "motor")
pedalfast$gcsverbal_using_cat <- gcs_as_factor(pedalfast$gcsverbal_using, "verbal")
GCS Severe Severe TBI will be defined as a GCS of eight or less.
FSS Total
The FSS total score is the sum of the six fss subscales.
fsscols <- grep("^fss", names(pedalfast), value = TRUE)
fsscols
## [1] "fssmental" "fsssensory" "fsscommun" "fssmotor" "fssfeeding"
## [6] "fssresp"
pedalfast$fsstotal <- rowSums(pedalfast[, fsscols])
summary(pedalfast$fsstotal)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 6.000 6.000 8.000 9.909 12.000 30.000 58
Looking into the missing values, most are associated with hospital disposition of mortality.
with(pedalfast, table(hospdisposition, is.na(fsstotal)))
##
## hospdisposition FALSE TRUE
## Discharge TO or WITH Hospice 0 1
## Home with Skilled Nursing 7 0
## Home, no new supports 235 1
## Inpatient Rehab 61 1
## Mortality 11 54
## Other 15 1
## Short-term Nursing Facility 1 0
The FSS total score can be placed into categories:
pedalfast$fsstotal_cat <- fss_as_factor(pedalfast$fsstotal, long_label = FALSE)
pedalfast$fsstotal_cat2 <- fss_as_factor(pedalfast$fsstotal, long_label = TRUE)
table(pedalfast$fsstotal_cat)
##
## Good Mildly abnormal Moderately abnormal
## 156 47 89
## Severe abnormal Very severely abnormal
## 22 16
table(pedalfast$fsstotal_cat2)
##
## 6-7 (Good) 8-9 (Mildly abnormal)
## 156 47
## 10-15 (Moderately abnormal) 16-21 (Severe abnormal)
## 89 22
## 22-30 (Very severely abnormal)
## 16
fss_labeller <- function(x) {
x <- sub("fssmental", "Mental", x)
x <- sub("fsssensory", "Sensory", x)
x <- sub("fsscommun", "Communication", x)
x <- sub("fssmotor", "Motor", x)
x <- sub("fssfeeding", "Feeding", x)
x <- sub("fssresp", "Respiratory", x)
x
}
Objective: Describe hospital discharge functional outcome in pediatric traumatic brain injury (TBI) patients via discharge Functional Status Scale (FSS). Determine and report any associations between FSS and age, injury mechanism, neurological exam, imaging, and other predictors of outcome.
Design: Prospective observational cohort study.
Setting: Multiple American College of Surgeons level 1 Pediatric Trauma Centers.
Patients: Children under 18 years of age who were admitted to an intensive car unit (ICU) with acute TBI and underwent either a surgical or critical care intervention within initial twenty-four hours, or in-hospital mortality.
Interventions: None.
Measurements and Main Results: Hospital discharge FSS is the primary outcome. A majority, 288/388 (74.23%), had severe TBI (admission GCS 3-8). Overall in-hospital mortality was 65/388 (16.75%); 63/288 (21.88%) among those with severe TBI. Hospital discharge FSS had an inverse relationship with GCS: for each one unit increase in admission GCS the expected FSS total score decreases by 9.91 (95% CI: 9.33, 10.49) units.
Approximately 2,200 pediatric-deaths and 35,000 pediatric-hospitalizations per annum are attributed to acute trauma brain injury (TBI). (2) Pediatric non-fatal TBI are commonly associated with new morbidities such as motor, communication, behavioral, or social impairments. (3)
Trials of acute interventions for children with TBI are hampered by a lack of relevant, easily administered functional outcome measures that can be used at the time of intensive care unit (ICU) or hospital discharge. Easily administered instruments such as the Pediatric Cerebral Performance Category (PCPC) and the Pediatric Overall Performance Category (POPC) lack the sensitivity and precision required for studies of interventions.(4–7) Other instruments such as the Glasgow Outcome Scale - Extended, Pediatric version (GOS-E Peds)(8) and the King’s Outcome Scale for Childhood Head Injury (KOSCHI)(9) are focused on patient function after return to home and community.
Improvements in the care of critically ill children have decreased ICU mortality to less than 5%, but survivors often have significant functional impairment.(10–14) In response to the need for a reliable, rapid measure of functional outcome appropriate for in-hospital use, the NIH-funded Collaborative Pediatric Critical Care Research Network (CPCCRN)(15) developed and validated the Functional Status Scale (FSS).(16, 17)
The FSS has 6 domains: Mental, Sensory, Communication, Motor, Feeding, and Respiratory. The scale in each domain is from 1 (no dysfunction) to 5 (very severe dysfunction), with a total score from 6 (normal) to 30 (very severe dysfunction in all domains). Appendix Table 1 shows the 6 domains and the 5 levels within each domain. The FSS is designed to be collected from hospital providers (e.g., a patient’s primary nurse), supplemented by medical records when necessary.(18) The FSS correlates with a gold-standard adaptive behavior instrument, the Adaptive Behavior Assessment System (ABAS II), with a Pearson’s correlation coefficient of 0.60. It also discriminates moderate and severe decrements in adaptive behavior well (areas under the curve 0.82 and 0.86, respectively).(16) Interrater reliability is excellent: the intraclass correlation coefficient is 0.95 for the six domain scores.(16) Importantly, Pollack et al. have validated that a FSS score at hospital discharge ≥ 3 points above a child’s pre-hospitalization baseline represents newly impaired functional status or “new morbidity” in survivors of critical illness or injury.(13)
However, the studies of the FSS to date have analyzed heterogeneous cohorts of critically ill children, and no study of children with TBI to date has reported FSS scores. The distributions of hospital discharge FSS and change in FSS from baseline to hospital discharge in critically injured children with TBI are unknown. We conducted this multi-center prospective observational study to accomplish the following aims: 1) to describe FSS and change in FSS from baseline in children admitted to an ICU after TBI and 2) to determine any associations between discharge FSS and age, injury mechanism, neurological exam findings, brain computed tomography (CT) findings, and other predictors of outcome in children with TBI.(19–22)
Study Sites and Subject Enrollment
This prospective cohort study was conducted at multiple American College of Surgeons (ACS) freestanding level I Pediatric Trauma Centers. Each site has between 2000 and 3000 Pediatric ICU admissions per year. We reviewed the ICU census at each site daily, checked ICU admission logbooks, and reviewed ICU screening logs to ensure that all eligible children were observed. Because the study was granted a waiver of consent at all sites (see Regulatory Approvals below), all eligible patients were enrolled.
Inclusion/Exclusion Criteria
We prospectively identified all patients under 18 years of age admitted to an ICU with a diagnosis of acute TBI and either a Glasgow Coma Scale (GCS) score at most 12 or a neurosurgical procedure (intracranial pressure [ICP] monitor, external ventricular drain (EVD), craniotomy, or craniectomy) within the first twenty-four hours of admission. We excluded surviving patients discharged from the ICU within twenty-four hours of ICU admission without an intervention (invasive or noninvasive ventilation, ICP monitoring, any operative procedure, an arterial or central venous catheter, or osmolar therapy). We categorized TBI severity using the ED GCS: 3-8 = severe, 9-12 = moderate, 13-15 = mild. For the 20 patients who did not have a GCS measured in the ED (direct admissions to the ICU), we used the GCS measured on ICU admission. Children with mild TBI who did not receive a neurosurgical procedure in the first 24 hours were excluded.
Prospective Data Collection
For variables such as GCS that might be documented by multiple providers or in multiple locations in the medical record, we defined a hierarchy of data sources. In the Emergency Department (ED), we used the following data sources in order of priority: Trauma Surgery attending physician note, then Neurosurgery attending physician note, then ED attending physician note. Similarly, in the ICU we used the ICU attending physician note, then ICU advanced practice provider note, then ICU resident note, then ICU nursing flowsheet. At the time of each GCS assessment, the study team recorded whether the patient was intubated, sedated, chemically paralyzed, or had obstruction to eye assessment.(23)
We captured the time and text report of the first brain CT study formally read by a PCH or CHCO pediatric radiologist. The presence or absence of CT features (e.g. subdural hematoma [SDH]) were extracted from the CT report by the study team.
Functional Status Scale Collection
We categorized FSS scores using the rubric developed by Pollack et al.(13) That 5-category rubric is designed to follow the categories of the PCPC/POPC system, but has greater granularity within each category.(5, 17)
Statistical Methods
Means are shown ± standard deviation (SD). Medians are shown with interquartile range (IQR). We tested two-sample differences in FSS using Student’s t-test assuming unequal variances. To estimate variation of FSS scores within categories of admission GCS, we used the approach of Pollack et al. and calculated the width (“dispersion”) of the 10th to 90th percentile range.(13) To test the FSS-age, FSS-mechanism, and FSS-GCS relationships, we fit three separate linear regression models. Age (in years) and GCS were fit as continuous variables and injury mechanism as a categorical variable. Scatterplots are shown as “bubble charts.” The area of each point is directly proportional to the number of patients with that particular combination of X and Y values.(24) We grouped IVH and SAH to be consistent with the Rotterdam CT scoring system(19, 21)
Data analysis was conducted in R version 4.4.1. (25)
Regulatory Approvals
This study was granted a waiver of consent by the institutional review boards at both institutions.
Our cohort consists of 388 patients. Known or suspected abuse accounted for 91 (23.45%) of the hospitalizations. The “Other” injury mechanism category included injuries related to penetrating projectiles, all-terrain vehicles, horseback riding, and others. At the time of GCS assessment 290 (74.74%) were intubated, 245 (63.14%) were under the influence of sedation medication, and 54 (13.92%) were chemically paralyzed.
Most of the patients, 288/388 (74.23%), had severe TBI (Appendix Table 2). Hospital mortality was 65/388 (16.75%) overall and 63/288 (21.88%) among those with severe TBI. The “Other
Many children who survived to hospital discharge had impaired functional status. 174/330 (52.73%) had at least “mildly abnormal” functional status and 127/330 (38.48%) had at least “moderately abnormal” functional status (Table 2).(13) The mean ± standard deviation for the total FSS, for those with a known FSS, was 9.91 ± 5.34 and the median (IQR) total FSS was 8.00 (6.00, 12.00). Among patients with sever TBI and known FSS total, 141/233 (60.52%) had at least “mildly abnormal” functional status and 109 (46.78%) had at least “moderately abnormal” functional status (Appendix Table 3). For patients with severe TBI, the mean ± standard deviation total FSS was 10.86 ± 5.92 and the median (IQR) total FSS was 9.00 (6.00, 13.00).
some_dysfunction <-
lapply(grep("^fss(?!total)", names(pedalfast), perl = TRUE, value = TRUE),
function(x) {
rtn <-
data.frame(variable = x,
p = mean(na.omit(pedalfast[[x]]) > 1))
rtn$plb <- paste0(frmt(rtn$p * 100), "% (", sub("^fss(\\w)", "\\U\\1", x, perl = TRUE), ")")
rtn
})
some_dysfunction <- do.call(rbind, some_dysfunction)
some_dysfunction
## variable p plb
## 1 fssmental 0.3867069 38.67% (Mental)
## 2 fsssensory 0.2379518 23.80% (Sensory)
## 3 fsscommun 0.4652568 46.53% (Commun)
## 4 fssmotor 0.4518072 45.18% (Motor)
## 5 fssfeeding 0.4066265 40.66% (Feeding)
## 6 fssresp 0.1054217 10.54% (Resp)
# when at least one of the fss scales reported a value of 2, and 2 is the max
# value across all six sclaes, the most common scale with a value of 2 is:
fss_matrix <- pedalfast[, grep("^fss(?!total)", names(pedalfast), perl = TRUE, value = TRUE)]
fss_matrix <- suppressWarnings(cbind(fss_matrix, max = apply(fss_matrix, 1, max, na.rm = TRUE)))
fss_matrix <- fss_matrix[fss_matrix$max > -Inf, ]
score_mode <-
lapply(2:5, function(i) apply(fss_matrix[fss_matrix$max == i, ], 2, function(x) sum(x == i, na.rm = TRUE)))
score_mode <- do.call(rbind, score_mode)
score_mode
## fssmental fsssensory fsscommun fssmotor fssfeeding fssresp max
## [1,] 21 14 32 21 6 1 65
## [2,] 15 4 8 62 62 4 91
## [3,] 2 2 2 15 17 3 34
## [4,] 12 12 17 19 16 13 27
colSums(score_mode)
## fssmental fsssensory fsscommun fssmotor fssfeeding fssresp max
## 50 32 59 117 101 21 217
apply(score_mode[, -7], 1, which.max)
## [1] 3 4 5 4
Functional impairment at hospital discharge was present for all of the six FSS domains (Figure 1). Within each domain, the percent of survivors with some dysfunction (domain score > 1) ranged from 10.54% (Resp) to 46.53% (Commun). When some dysfunction was observed, motor was the most likely to be the domain with the most dysfunction with the domains feeding, commun, mental, sensory, resp being the most next most common, in descending order.
When there is some observed dysfunction, and the maximal rating within any domain was “mild,” the most common domain was commun For a maximal rating of “moderate,” the most common domain with the rating was motor and feeding The most common domains for maximal ratings of “severe” and “very severe” were feeding and motor respectively.
fit <- lm(fsstotal ~ injurymech + I(age / 365.25) - 1, data = pedalfast)
summary(fit)
##
## Call:
## lm(formula = fsstotal ~ injurymech + I(age/365.25) - 1, data = pedalfast)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.521 -2.716 -1.758 1.310 22.039
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## injurymechFall 8.025623 0.777351 10.324 < 2e-16 ***
## injurymechKnown or suspected abuse 12.068286 0.631627 19.107 < 2e-16 ***
## injurymechOther 8.197217 0.862843 9.500 < 2e-16 ***
## injurymechSelf-harm 14.590302 2.670070 5.464 9.28e-08 ***
## injurymechTraffic 10.809890 0.755778 14.303 < 2e-16 ***
## I(age/365.25) -0.007137 0.062265 -0.115 0.909
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.102 on 324 degrees of freedom
## (58 observations deleted due to missingness)
## Multiple R-squared: 0.7982, Adjusted R-squared: 0.7944
## F-statistic: 213.6 on 6 and 324 DF, p-value: < 2.2e-16
summary(aov(fit))
## Df Sum Sq Mean Sq F value Pr(>F)
## injurymech 5 33360 6672 256.278 <2e-16 ***
## I(age/365.25) 1 0 0 0.013 0.909
## Residuals 324 8435 26
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 58 observations deleted due to missingness
fsstotal_lm_cis <- qwraps2::frmtci(cbind(coef(fit), confint(fit)), show_level = TRUE)
fsstotal_lm_cis
## injurymechFall injurymechKnown or suspected abuse
## "8.03 (95% CI: 6.50, 9.55)" "12.07 (95% CI: 10.83, 13.31)"
## injurymechOther injurymechSelf-harm
## "8.20 (95% CI: 6.50, 9.89)" "14.59 (95% CI: 9.34, 19.84)"
## injurymechTraffic I(age/365.25)
## "10.81 (95% CI: 9.32, 12.30)" "-0.01 (95% CI: -0.13, 0.12)"
We examined associations of age and injury mechanism with discharge FSS via linear regression and found no statistical evidence to support an association between patient age and discharge FSS: expected change in discharge FSS for each year of age -0.01 (95% CI: -0.13, 0.12). Discharge FSS varied widely among those children injured by motor vehicle traffic, child abuse, and other mechanisms P < 0.0001. The mean ± standard deviation known discharge FSS for children injured in falls was 7.97 ± 4.19 compared to 10.74 ± 5.74 for children injured in traffic incidents, 12.06 ± 6.25 for children injured in known or suspected abuse incidents, and 8.13 ± 3.03 for children injured by other mechanisms.
fit <- lm(fsstotal ~ gcs_using, data = pedalfast)
fss_by_gcs_ci <- qwraps2::frmtci(cbind(coef(fit), confint(fit)), show_level = TRUE)
mean_fss_by_gcs <-
aggregate(fsstotal ~ gcs_using, data = pedalfast, FUN = mean_sd, show_n = "never", na_rm = TRUE)
mean_fss_by_gcsm <-
aggregate(fsstotal ~ gcsmotor_using, data = pedalfast, FUN = mean_sd, show_n = "never", na_rm = TRUE)
The most common FSS score at hospital discharge was 6 and that score was found in children with every value of admission GCS (Figure 2). The mean ± standard deviation discharge FSS ranged from 6.33 ± 1.19 for a GCS of 15 to 11.26 ± 6.06 for a GCS of 3. The mean discharge FSS ranged from 7.47 ± 2.40 for a GCS-Motor of 6 to 11.26 ± 6.06 for a GCS-Motor of 1. The variation in discharge FSS within GCS categories was higher for more severe injuries than milder injuries: 10th to 90th percentile range (width) = 11.8 for for severe TBI and only 5 for mild or moderate TBI. To be included in this study, patients with “mild” TBI by GCS (13-15) had to be admitted to an ICU and receive a neurosurgical procedure in the first 24 hours. As expected, we found an inverse relationship between discharge FSS and admission GCS total and motor scores (Figure 2). Using linear regression, we estimated that for each 1 point higher admission GCS score, a patient’s discharge FSS changes by -0.43 (95% CI: -0.59, -0.28) points, P < 0.0001.
Most, 284/384 (73.96%), patients had bilaterally reactive pupils on admission to the ICU. Of the 62 who had bilaterally fixed pupils on admission to the ICU, 45 (72.58%) died. Among survivors, the mean ± standard deviation discharge FSS ranged from 8.70 ± 3.26 for those with bilaterally reactive pupils on ICU admission to 14.94 ± 6.18 for those with bilaterally fixed pupils on ICU admission.
summary(pedalfast[, grep("^ct", names(pedalfast))])
## ctskullfrac ctce ctmidlineshift ctcompress
## Min. :0.0000 Min. :0.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :1.0000 Median :0.000 Median :0.0000 Median :0.0000
## Mean :0.5065 Mean :0.426 Mean :0.2416 Mean :0.2494
## 3rd Qu.:1.0000 3rd Qu.:1.000 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.000 Max. :1.0000 Max. :1.0000
## NA's :5 NA's :3 NA's :3 NA's :3
## ctintraparhem ctsubarchhem ctintraventhem ctsubhematoma
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0
## Median :0.0000 Median :0.0000 Median :0.0000 Median :1.0
## Mean :0.3325 Mean :0.3273 Mean :0.1273 Mean :0.6
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:1.0
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0
## NA's :3 NA's :3 NA's :3 NA's :3
## ctepihematoma
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.1403
## 3rd Qu.:0.0000
## Max. :1.0000
## NA's :3
pedalfast$anyblood <- with(pedalfast, as.integer(ctintraparhem + ctsubarchhem + ctintraventhem + ctsubhematoma + ctepihematoma > 0))
194 (50.65%) patients had a skull fracture and most, 337 (87.53%), had at least one type of intracranial hemorrhage/hematoma. As expected, 37/51 (72.55%) children with epidural hematoma (EDH) had good functional status at hospital discharge (Figure 3) mean ± standard deviation FSS without EDH 10.27 ± 5.47 versus 8.08 ± 4.28 with EDH, P = 0.0019. Children with subdural (SDH), intraventricular (IVH), subarachnoid (SAH), or intraparenchymal hemorrhage (IPH) had more variable discharge functional status (Figure 3). Multiple hemorrhage types were often, 167/385 (43.38%), present. The surviving patient with the worst functional status, for example, had SDH, SAH, IVH, and IPH. Surviving children with either IVH or SAH had higher discharge FSS scores, mean ± standard deviation 11.08 ± 5.42 than those who did not 9.31 ± 5.24 (P = 0.0047).
CT findings of cerebral edema, 164/385 (42.60%), and those consistent with local or diffuse intracranial hypertension, such as basilar cistern compression, 96/385 (24.94%), and midline shift, 93/385 (24.16%), were not uncommon. Discharge FSS scores for patients with cerebral edema (12.30 ± 6.59) was higher than the mean discharge FSS cores for patients without cerebral edema, (8.56 ± 3.89) (P < 0.0001). Similarly, patients with basilar cistern compression had higher mean discharged FSS cores than those who did not: (13.53 ± 7.54) verses (9.05 ± 4.26) (P < 0.0001). Mean discharged FSS for midline shift (10.58 ± 6.48) is not statistically different from the mean discharged FSS for patients without midline shift (9.73 ± 4.97) (P = 0.2969). Patients who did and did not have these CT findings had widely varying discharge FSS values, from normal to severely impaired (Figure 5).
Nearly all, 90/99 (90.91%), patients with mild TBI had at least one type of intracranial hemorrhage.
More severely injured children may not be able to safely take adequate nutrition by mouth and may require placement of a new gastrostomy tube. Among survivors who received a new gastrostomy tube 27 (8.36%) during their acute hospitalization, the mean discharge FSS was much higher: (15.52 ± 3.98) verses (8.64 ± 3.35). P < 0.0001 (Figure 4). In children with severe TBI, 25/225 (11.11%) children had a new gastrostomy tube and of these, the mean discharge FSS was (15.64 ± 4.08) verses (9.19 ± 3.66) in those who did not, P < 0.0001. The distributions of discharge FSS values between patients who did and did not have a new gastrostomy tube separated well graphically: only those without new gastrostomy tubes had normal or mildly abnormal discharge FSS scores (Figure 4). Profoundly injured survivors may require a new tracheostomy. Of the 9/323 (2.79%) children who received a new tracheostomy, 9 (100.00%) also received a gastrostomy. The mean ± discharge FSS was 14.56 ± 2.19.
Figure 1: FSS Domain Scores at Hospital Discharge. Histograms of Functional Status Scores (FSS) domain scores at hospital discharge. A score of 1 represents no dysfunction, 2 is mild, 3 is moderate, 4 is severe, and 5 is very severe dysfunction.
# data.table::melt or tidyr::pivot_longer would make this data step much easier
figure1_data <-
lapply(grep("^fss(?!total)", names(pedalfast), perl = TRUE, value = TRUE),
function(x) data.frame(variable = x, value = pedalfast[, x]))
figure1_data <- do.call(rbind, figure1_data)
ggplot(figure1_data) +
aes(x = value, y = (..count..)/sum(..count..)) +
geom_bar() +
facet_wrap( ~ variable) +
theme_classic(base_size = 18) +
ylab("") +
scale_y_continuous(labels = scales::percent)
Figure 2: Discharge FSS by Admission GCS. FSS = Functional Status Scale; GCS = Glasgow Coma Scale. A FSS score of six represents no dysfunction.
ggplot(pedalfast) +
aes(x = gcs_using, y = fsstotal) +
stat_sum(aes(size = ..n..), alpha = 0.2) +
scale_size_area(breaks = c(5, 10, 15), "Count", max_size = 7) +
stat_smooth(method = "lm", formula = y ~ x, linewidth = 0.5, alpha = 0.4, level = 0.95, color = "black", linetype = 2) +
scale_x_continuous(breaks = seq(3, 15, 1)) +
scale_y_continuous(breaks = c(6, 10, 15, 20, 25), limits = c(5, 25)) +
xlab("Glasgow Coma Scale") +
ylab("Discharge FSS") +
theme_classic(base_size = 16) +
theme(legend.position.inside = c(0.9, 0.9))
Figure 3: Discharge FSS by Intracranial Hemorrhage Type. A FSS score of 6 represents no dysfunction.
figure3_data <-
lapply(grep("^ct.+(hem|toma)$", names(pedalfast), perl = TRUE, value = TRUE),
function(x) data.frame(studyid = pedalfast[["studyid"]],
fsstotal = pedalfast[["fsstotal"]],
variable = x,
value = pedalfast[, x]))
figure3_data <- do.call(rbind, figure3_data)
figure3_data$variable <-
factor(figure3_data$variable,
levels = c("ctintraparhem", "ctsubarchhem", "ctintraventhem", "ctsubhematoma", "ctepihematoma"),
labels = c("Intraparenchymal\nHemorrhage", "Subarachnoid\nHemorrhage", "Intraventricular\nHemorrhage", "Subdural Hematoma", "Epidural Hematoma"))
ggplot(data = figure3_data) +
aes(x = fsstotal, fill = as.factor(value)) +
geom_bar() +
facet_wrap( ~ variable) +
scale_fill_manual(name = "Hemorrhage", labels = c("No", "Yes"), values = c("grey", "black")) +
xlim(5.5,30.5) +
xlab("Discharge FSS") +
ylab("Count") +
theme_classic(base_size=16) +
theme(legend.position = "bottom")
Figure 4: Discharge FSS by New Gastrostomy Status. Legend: FSS = Functional Status Scale; G-Tube = gastrostomy tube; TBI = traumatic brain injury. A FSS score of 6 represents no dysfunction.
figure4_data <-
rbind(cbind(cp = "All TBI", pedalfast[, c("fsstotal", "newgastyn")]),
cbind(cp = "Non-Severe TBI", subset(pedalfast, severetbi == 0, c("fsstotal", "newgastyn"))),
cbind(cp = "Severe TBI", subset(pedalfast, severetbi == 1, c("fsstotal", "newgastyn"))))
figure4_data$cp <- factor(figure4_data$cp, levels = c("All TBI", "Non-Severe TBI", "Severe TBI"))
ggplot(data = figure4_data) +
aes(x = fsstotal, fill = newgastyn) +
geom_histogram(binwidth = 1, bins = seq(5.5, 30.5, by = 1)) +
scale_fill_manual(name = "New G-Tube", values = c("gray", "black")) +
xlim(5.5,30.5) +
xlab("Discharge FSS") +
ylab("Count") +
theme_classic(base_size=20) +
theme(legend.position = "bottom") +
facet_wrap( ~ cp)
Figure 5: Discharge FSS by CT imaging. The violin plots show the distribution of FSS scores, the wider the plot the more common the FSS value is. The point shown on each plot is the mean discharge FSS score.
ggplot(data = subset(figure3_data, !is.na(value))) +
aes(y = fsstotal, x = factor(value, c(0, 1), c("No", "Yes"))) +
geom_violin() +
stat_summary(fun = mean, geom = "point") +
xlab("") +
ylab("Discharge FSS") +
facet_wrap( ~ variable) +
theme_classic(base_size=16) +
theme(legend.position = "bottom")
Table 1 Patient and Injury Characteristics. Summary statistics are either mean ± standard deviation, or n (%).
qs <- list(
"Patient Characteristics" =
list("Age (in years)" = ~ mean_sd(age / 365.25),
"Female" = ~ n_perc0(female == 1))
, "Injury Mechanism" = qsummary(subset(pedalfast, select = "injurymech"))[[1]]
, "TBI Severity" =
list("GCS = 3" = ~ n_perc0(gcs_using == 3),
"Severe (GCS 3-8)" = ~ n_perc0(gcs_using %in% seq(3, 8)),
"Moderate (GCS 9-12)" = ~ n_perc0(gcs_using %in% seq(9, 12)),
"Mild (GCS 13-15)" = ~ n_perc0(gcs_using %in% seq(13, 15))
)
, "GCS Eye" = qsummary(subset(pedalfast, select = "gcseye_using_cat"))[[1]]
, "GCS Verbal" = qsummary(subset(pedalfast, select = "gcsverbal_using_cat"))[[1]]
, "GCS Motor" = qsummary(subset(pedalfast, select = "gcsmotor_using_cat"))[[1]]
, "Pupil Reactivity on ICU admission" = qsummary(subset(pedalfast, select = "puplrcticu"))[[1]]
, "Initial ICU LOS" = list("median (IQR) (days)" = ~ median_iqr(admittoicudc1, na_rm = TRUE, digits = 0))
, "Hospital LOS" = list("median (IQR) (days)" = ~ median_iqr(hosplos, na_rm = TRUE, digits = 0))
, "Hospital Disposition" = qsummary(subset(pedalfast, select = "hospdisposition"))[[1]]
)
# NOTE: the levels of Pupil Reactivity in the ICU include "Unknown" which is
# qwraps2::qsummary default label for NA values. A patch is provided here, a
# bug report and feature request for qwraps2 has been posted on github.
names(qs[["Pupil Reactivity on ICU admission"]])[ length( names(qs[["Pupil Reactivity on ICU admission"]]) )] <- "Missing"
# print the summary table
st <-
cbind(summary_table(pedalfast, summaries = qs),
summary_table(pedalfast, summaries = qs, by = "severetbi"))
colnames(st) <-
c("", "Whole Cohort", "Non-severe TBI (GCS > 8)", "Severe TBI (GCS <= 8)")
st
pedalfast (N = 388) | 0 (N = 100) | 1 (N = 288) | |
---|---|---|---|
Patient Characteristics | |||
Age (in years) | 7.39 ± 5.66 | 6.33 ± 5.41 | 7.76 ± 5.71 |
Female | 149 (38) | 37 (37) | 112 (39) |
Injury Mechanism | |||
Fall | 72 (19) | 28 (28) | 44 (15) |
Known or suspected abuse | 91 (23) | 24 (24) | 67 (23) |
Other | 77 (20) | 25 (25) | 52 (18) |
Self-harm | 6 (2) | 0 (0) | 6 (2) |
Traffic | 142 (37) | 23 (23) | 119 (41) |
TBI Severity | |||
GCS = 3 | 141 (36) | 0 (0) | 141 (49) |
Severe (GCS 3-8) | 288 (74) | 0 (0) | 288 (100) |
Moderate (GCS 9-12) | 62 (16) | 62 (62) | 0 (0) |
Mild (GCS 13-15) | 38 (10) | 38 (38) | 0 (0) |
GCS Eye | |||
No response | 277 (71) | 7 (7) | 270 (94) |
To pain only | 28 (7) | 13 (13) | 15 (5) |
To speech | 17 (4) | 15 (15) | 2 (1) |
Spontaneous | 66 (17) | 65 (65) | 1 (0) |
GCS Verbal | |||
No response | 295 (76) | 26 (26) | 269 (93) |
Incomprehensible sounds or moans to pain | 32 (8) | 14 (14) | 18 (6) |
Inappropriate words or cries to pain | 14 (4) | 13 (13) | 1 (0) |
Confused or irritable cries | 22 (6) | 22 (22) | 0 (0) |
Oriented, appropriate or coos and babbles | 25 (6) | 25 (25) | 0 (0) |
GCS Motor | |||
No response/flaccid | 141 (36) | 0 (0) | 141 (49) |
Abnormal extension to pain | 17 (4) | 1 (1) | 16 (6) |
Abnormal flexion to pain | 14 (4) | 1 (1) | 13 (5) |
Withdraws from painful stimuli | 77 (20) | 11 (11) | 66 (23) |
Localizes pain or withdraws to touch | 75 (19) | 36 (36) | 39 (14) |
Obeys commands | 64 (16) | 51 (51) | 13 (5) |
Pupil Reactivity on ICU admission | |||
Both Fixed | 62 (16) | 1 (1) | 61 (21) |
Both Reactive | 284 (74) | 89 (91) | 195 (68) |
One Fixed | 11 (3) | 1 (1) | 10 (3) |
Unknown | 27 (7) | 7 (7) | 20 (7) |
Missing | 4 (1.03%) | 2 (2.00%) | 2 (0.69%) |
Initial ICU LOS | |||
median (IQR) (days) | 382; 3 (1, 8) | 2 (1, 4) | 282; 3 (2, 9) |
Hospital LOS | |||
median (IQR) (days) | 9 (4, 20) | 6 (4, 11) | 10 (4, 22) |
Hospital Disposition | |||
Discharge TO or WITH Hospice | 1 (0) | 0 (0) | 1 (0) |
Home with Skilled Nursing | 7 (2) | 2 (2) | 5 (2) |
Home, no new supports | 236 (61) | 83 (83) | 153 (53) |
Inpatient Rehab | 62 (16) | 10 (10) | 52 (18) |
Mortality | 65 (17) | 2 (2) | 63 (22) |
Other | 16 (4) | 3 (3) | 13 (5) |
Short-term Nursing Facility | 1 (0) | 0 (0) | 1 (0) |
Table 2: Hospital Discharge FSS
qs <- list(
"FSS Total" =
list("median (IQR)" = ~ median_iqr(fsstotal, show_n = "never", na_rm = TRUE, digits = 0),
"mean (standard deviation)" = ~ mean_sd(fsstotal, show_n = "never", na_rm = TRUE, digits = 0))
, "FSS Total - Categorical: n (%)" = qsummary(subset(pedalfast, select = "fsstotal_cat2"))[[1]]
, "FSS Mental" = list("n; Median (IQR)" = ~ median_iqr(fssmental, na_rm = TRUE))
, "FSS Motor" = list("n; Median (IQR)" = ~ median_iqr(fssmotor, na_rm = TRUE))
, "FSS Sensory" = list("n; Median (IQR)" = ~ median_iqr(fsssensory, na_rm = TRUE))
, "FSS Respiratory" = list("n; Median (IQR)" = ~ median_iqr(fssresp, na_rm = TRUE))
, "FSS Feeding" = list("n; Median (IQR)" = ~ median_iqr(fssfeeding, na_rm = TRUE))
, "FSS Communication" = list("n; Median (IQR)" = ~ median_iqr(fsscommun, na_rm = TRUE))
)
st <-
cbind(summary_table(pedalfast, summaries = qs),
summary_table(pedalfast, summaries = qs, by = "severetbi")
)
colnames(st) <-
c("", "Whole Cohort", "Non-severe TBI (GCS > 8)", "Severe TBI (GCS <= 8)")
st
pedalfast (N = 388) | 0 (N = 100) | 1 (N = 288) | |
---|---|---|---|
FSS Total | |||
median (IQR) | 8 (6, 12) | 7 (6, 8) | 9 (6, 13) |
mean (standard deviation) | 10 ± 5 | 8 ± 2 | 11 ± 6 |
FSS Total - Categorical: n (%) | |||
6-7 (Good) | 156 (47) | 64 (66) | 92 (39) |
8-9 (Mildly abnormal) | 47 (14) | 15 (15) | 32 (14) |
10-15 (Moderately abnormal) | 89 (27) | 16 (16) | 73 (31) |
16-21 (Severe abnormal) | 22 (7) | 2 (2) | 20 (9) |
22-30 (Very severely abnormal) | 16 (5) | 0 (0) | 16 (7) |
Unknown/Missing | 58 (14.95%) | 3 (3.00%) | 55 (19.10%) |
FSS Mental | |||
n; Median (IQR) | 331; 1 (1.00, 2.00) | 98; 1.00 (1.00, 1.00) | 233; 1 (1.00, 2.00) |
FSS Motor | |||
n; Median (IQR) | 332; 1.00 (1.00, 3.00) | 98; 1.00 (1.00, 2.00) | 234; 2.00 (1.00, 3.00) |
FSS Sensory | |||
n; Median (IQR) | 332; 1.00 (1.00, 1.00) | 98; 1.00 (1.00, 1.00) | 234; 1.00 (1.00, 2.00) |
FSS Respiratory | |||
n; Median (IQR) | 332; 1.00 (1.00, 1.00) | 98; 1.00 (1.00, 1.00) | 234; 1.00 (1.00, 1.00) |
FSS Feeding | |||
n; Median (IQR) | 332; 1.00 (1.00, 3.00) | 98; 1.00 (1.00, 1.00) | 234; 1.50 (1.00, 3.00) |
FSS Communication | |||
n; Median (IQR) | 331; 1 (1.00, 2.00) | 97; 1 (1.00, 2.00) | 234; 2.00 (1.00, 2.00) |
Appendix Table 1 Functional Status Scale Domains
The FSS has 6 domains: Mental, Sensory, Communication, Motor, Feeding, and Respiratory. The scale in each domain is from 1 (no dysfunction) to 5 (very severe dysfunction), with a total score from 6 (normal) to 30 (very severe dysfunction in all domains). Appendix Table 1 shows the 6 domains and the 5 levels within each domain.
appendix_table_1 <-
subset(pedalfast_metadata,
variable %in% grep("^fss(?!total)", pedalfast_metadata$variable, perl = TRUE, value = TRUE))
appendix_table_1 <-
cbind(appendix_table_1, do.call(rbind, strsplit(gsub("\\d,\\ ", "", appendix_table_1$values), split = "\\ \\|\\ ")))
appendix_table_1 <- appendix_table_1[, c("description", as.character(1:5))]
colnames(appendix_table_1) <-
c("",
"Normal (Score = 1)",
"Mild Dysfunction (Score = 2)",
"Moderate Dysfunction (Score = 3)",
"Severely Dysfunction (Score = 4)",
"Severely Dysfunction (Score = 5)")
knitr::kable(appendix_table_1, row.names = FALSE)
Normal (Score = 1) | Mild Dysfunction (Score = 2) | Moderate Dysfunction (Score = 3) | Severely Dysfunction (Score = 4) | Severely Dysfunction (Score = 5) | |
---|---|---|---|---|---|
FSS Mental Status | Normal sleep/wake periods; appropriate responsiveness | Sleepy but arousable to noise/touch/movement and/or periods of social nonresponsiveness | Lethargic and/or irritable | Minimal arousal to stimuli (stupor) | Unresponsive, coma, and/or vegetative state |
FSS Sensory | Intact hearing and vision and responsive to touch | Suspected hearing or vision loss | Not reactive to one of auditory stimuli or visual stimuli | Not reactive to either auditory or visual stimuli | Abnormal responses to pain or touch |
FSS Communication | Appropriate noncrying vocalizations, interactive facial expressiveness, or gestures | Diminished vocalization, facial expression, and/or social responsiveness | Absence of attention-getting behavior | No demonstration of discomfort | Absence of communication |
FSS Motor | Coordinated body movements, normal muscle control, and awareness of action and reason | One limb functionally impaired | Two or more limbs functionally impaired | Poor head control | Diffuse spasticity, paralysis, or decerebrate/decorticate posturing |
FSS Feeding | All food taken by mouth with age-appropriate help | Nothing by mouth or need for age-inappropriate help with feeding | Oral and tube feedings | Parenteral nutrition with oral or tube feedings | All parenteral nutrition |
FSS Respiratory | Room air and no artificial support or aids | Oxygen treatment and/or suctioning | Tracheostomy for airway | Continuous positive airway pressure (CPAP/BIPAP) for all or part of the day and/or mechanical ventilator support for part of the day | Mechanical ventilatory support for all of the day and night |
sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggplot2_3.5.1 knitr_1.48 pedalfast.data_1.0.2
## [4] qwraps2_0.6.1 rmarkdown_2.28
##
## loaded via a namespace (and not attached):
## [1] sass_0.4.9 utf8_1.2.4 generics_0.1.3 xml2_1.3.6
## [5] lattice_0.22-6 stringi_1.8.4 digest_0.6.37 magrittr_2.0.3
## [9] evaluate_1.0.1 grid_4.4.1 fastmap_1.2.0 Matrix_1.7-1
## [13] jsonlite_1.8.9 mgcv_1.9-1 fansi_1.0.6 viridisLite_0.4.2
## [17] scales_1.3.0 jquerylib_0.1.4 cli_3.6.3 rlang_1.1.4
## [21] munsell_0.5.1 splines_4.4.1 withr_3.0.2 cachem_1.1.0
## [25] yaml_2.3.10 tools_4.4.1 dplyr_1.1.4 colorspace_2.1-1
## [29] kableExtra_1.4.0 buildtools_1.0.0 vctrs_0.6.5 R6_2.5.1
## [33] lifecycle_1.0.4 stringr_1.5.1 pkgconfig_2.0.3 bslib_0.8.0
## [37] pillar_1.9.0 gtable_0.3.6 glue_1.8.0 Rcpp_1.0.13
## [41] systemfonts_1.1.0 xfun_0.49 tibble_3.2.1 tidyselect_1.2.1
## [45] highr_0.11 rstudioapi_0.17.1 sys_3.4.3 farver_2.1.2
## [49] nlme_3.1-166 htmltools_0.5.8.1 svglite_2.1.3 maketools_1.3.1
## [53] labeling_0.4.3 compiler_4.4.1