SBFD Response Time Analysis of High Frequency Occupancies

This is a look at response time for by Ladder 1 and Engine 2 to a number of high frequency occupancies. Data was queried from our records management system for six years between 2021 and 2016. Two separate queries where constructed that resulted in “pivot20162021.csv” and “unitresp20102021.csv”. Those files were joined into a dataframe called “Left_joinedpivotresp.df”.

Columns extracted from that dataframe were incident number, address data, station, apparatus responding and response time in seconds. Those columns were then filtered for all calls for 90 Allen road, 20 Harborview, 1510/1530 Williston Rd and 465 Quarry Hill, resulting in 2945 rows of the six variables. A summary of reponses to each address by Ladder 1 and Engine 2 are broken out below.

Responses by Engine 1 and Engine 3 are omitted due to contaminated data.

1510 and 1530 Williston Road

These two occupancies represent the first “address” we will look at. The six number summary below gives an overview of 189 Ladder One responses. The min. value is zero seconds, signifying that at least once the ladder was on scene when a second call was received to that address. The first quartile or 25% of the calls were equal or less than 300 seconds. The Median represents exactly half way point of the data, 50% of the responses were above that time and 50% were below. The Mean is the average time for the counted responses. The “3rd Qu.” or third quartile is where 75% of the calls reside at 7 minutes (420 seconds) or below.

Ladder One summary (189 calls)

Gazebo_ladder1.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("1510","1530"), street %in% c("Williston"), unit_desc %in% c("Ladder 1"))
                        summary(Gazebo_ladder1.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   300.0   360.0   372.7   420.0   660.0

Engine 2 summary (39 calls)

Gazebo_engine2.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("1510","1530"), street %in% c("Williston"), unit_desc %in% c("Engine 2"))
                        summary(Gazebo_engine2.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   240.0   300.0   360.0   417.1   510.0   900.0

Visuals of The Data

The red dashed line is NFPA 1710, the dotdashed lines show the median and the black dashed lines illustrate the mean values.

Gazebo_ladder1.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="5", color="8", alpha=0.7, bw=30) +
                                ggtitle("Ladder 1 Response to 1510/1530 Williston rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Gazebo_ladder1.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Gazebo_ladder1.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

Gazebo_engine2.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="2", color="6", alpha=0.7, bw=30) +
                                
                                ggtitle("Engine 2 Response to 1510/1530 Williston rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Gazebo_engine2.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Gazebo_engine2.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

465 Quarry Hill Road

Ladder 1 summary (223 calls)

Quarry_ladder1.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("465"), street %in% c("Quarry Hill","Quarry Hill Road"), unit_desc %in% c("Ladder 1"))
                        summary(Quarry_ladder1.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   360.0   420.0   427.3   480.0   780.0

Engine 2 summary (64 calls)

Quarry_engine2.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("465"), street %in% c("Quarry Hill","Quarry Hill Road"), unit_desc %in% c("Engine 2"))
                        summary(Quarry_engine2.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   240.0   420.0   480.0   493.8   540.0   900.0
Quarry_ladder1.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="7", color="3", alpha=0.7, bw=30) +
                                ggtitle("Ladder 1 response to 465 Quarry Hill rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Quarry_ladder1.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Quarry_ladder1.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

Quarry_engine2.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="4", color="9", alpha=0.7, bw=30) +
                                
                                ggtitle("Engine 2 response to 465 Quarry Hill rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Quarry_engine2.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Quarry_engine2.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

90 Allen Road

Ladder 1 summary (14 calls)

Allen_ladder1.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("90"), street %in% c("Allen"), unit_desc %in% c("Ladder 1"))
                        summary(Allen_ladder1.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   180.0   300.0   300.0   355.6   360.0   720.0

Engine 2 summary (432 calls)

Allen_engine2.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("90"), street %in% c("Allen"), unit_desc %in% c("Engine 2"))
                        summary(Allen_engine2.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0     240     300     314     360     960

Ambulance summary (396 calls)

Allen_ambulance.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("90"), street %in% c("Allen"), unit_desc %in% c("Ambulance 1", "Ambulance 2"))
                        summary(Allen_ambulance.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   240.0   300.0   315.6   360.0   960.0
Allen_ladder1.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="8", color="16", alpha=0.7, bw=30) +
                                ggtitle("Ladder 1 response to 90 Allen rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Allen_ladder1.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Allen_ladder1.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

Allen_engine2.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="#69b3a2", color="#e9ecef", alpha=0.7, bw=30) +
                                
                                ggtitle("Engine 2 response to 90 Allen rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Allen_engine2.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Allen_engine2.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

Allen_ambulance.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="#e88b10", color="#975ead", alpha=0.7, bw=30) +
                                
                                ggtitle("Ambulance response to 90 Allen rd.") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Allen_ambulance.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Allen_ambulance.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")                       

62, 192, and 118 Tilley Drive

Ladder 1 response to Tilley Drive (120 calls)

Tilley_ladder1.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("118","62","192"), street %in% c("Tilley", "Tilley Drive"), unit_desc %in% c("Ladder 1"))
                        summary(Tilley_ladder1.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      60     240     300     311     360     660

Engine 2 response to Tilley Drive (33 calls)

Tilley_engine2.df <- Frequent_healthcare.df %>% 
                       filter(number %in% c("118","62","192"), street %in% c("Tilley", "Tilley Drive"), unit_desc %in% c("Engine 2"))
                        summary(Tilley_engine2.df$resp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   240.0   300.0   331.4   393.0   840.0
Tilley_ladder1.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="6", color="3", alpha=0.7, bw=30) +
                                ggtitle("Ladder 1 response to Tilley dr addresses") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Tilley_ladder1.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Tilley_ladder1.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

Tilley_engine2.df %>%
                                ggplot(aes(resp)) +
                                geom_density(fill="2", color="9", alpha=0.7, bw=30) +
                                
                                ggtitle("Engine 2 response to Tilley dr addresses") +
                                geom_vline(xintercept = 300, linetype="dashed", color = "red", size=1) +
                                geom_vline(xintercept = mean(Tilley_engine2.df$resp), linetype ="dashed", size = .5) + 
                                geom_vline(xintercept = median(Tilley_engine2.df$resp), linetype ="dotdash", size = .75) + 
                                scale_y_continuous(labels = NULL) +
                                xlab("Seconds") +
                                ylab("Frequency")

NFPA 1710

3.3.44.1 Advanced Life Support (ALS).

Emergency medical treatment beyond basic life support that provides for advanced airway management including intubation, advanced cardiac monitoring, defibrillation, establishment and maintenance of intravenous access, and drug therapy.

3.3.44.2 * Basic Life Support (BLS).

A specific level of pre¬hospital medical care provided by trained responders, focused on rapidly evaluating a patient’s condition; maintaining a patient’s airway, breathing, and circulation; controlling external bleeding; preventing shock; and preventing further injury or disability by immobilizing potential spinal or other bone fractures.

3.3.64.7 Travel Time.

The time interval that begins when a unit is en route to the emergency incident and ends when the unit arrives at the scene.

3.3.64.8 Turnout Time.

The time interval that begins when the emergency response facilities (ERFs) and emergency response units (ERUs) notification process begins by either an audible alarm or visual annunciation or both and ends at the beginning point of travel time.

4.1.2.1 The fire department shall establish the following performance objectives for the first-due response zones that are identified by the AHJ:

  1. Alarm handling time completion in accordance with 4.1.2.3

  2. 80 seconds turnout time for fire and special operations response and 60 seconds turnout time for EMS response

  3. *240 seconds or less travel time for the arrival of the first engine company at a fire suppression incident

  4. 360 seconds or less travel time for the arrival of the second company with a minimum staffing of 4 personnel at a fire suppression incident

  5. For other than high-rise, 480 seconds or less travel time for the deployment of an initial full alarm assignment at a fire suppression incident

  6. For high-rise, 610 seconds or less travel time for the deployment of an initial full alarm assignment at a fire suppression incident

  7. 240 seconds or less travel time for the arrival of a unit with first responder with automatic external defibrillator (AED) or higher-level capability at an emergency medical incident

  8. 480 seconds or less travel time for the arrival of an advanced life support (ALS) unit at an emergency medical incident, where this service is provided by the fire department provided a first responder with an AED or basic life support (BLS) unit arrived in 240 seconds or less travel time