Animal Shelter Data Analysis Software Technical

Austin & Sacramento Open Data #4: Live-Release Rate

In this final post in the Austin-Sacramento comparison series, we’ll look at live-release rate and basic outcome types at both animal shelters.

Live-Release Rate

The toolkit has a function to calculate a variety of outcome statistics for a given data set, including the simple live-release rate, calculated as the count of animals discharged alive divided by the count of animals discharged both alive and dead (for more information on rates, see Unraveling Life-Saving Rates).

Last year, the Austin rounded live-release rate for cats and dogs was 94% (93% for cats and 96% for dogs). The Sacramento rate was 78% (81% for cats and 75% for dogs). Annual live-release rate at both shelters has been trending higher, with live release of dogs seeing the greatest improvement. So far in 2016, the rounded live-release rate for dogs in Austin is 98%, and in Sacramento 81%.

> lrrByYear <- function(data) { lrr <- round(data$live_rate, digits = 3); names(lrr) <- data$year; lrr }

> # Austin simple live-release rate by animal group and year to date
> lapply(atxCreateOutcomeNumbersList(atxOutcomeList, period = "year"), lrrByYear)
$cats_dogs
 2014  2015  2016 
0.934 0.943 0.963 

$cats
 2014  2015  2016 
0.927 0.926 0.942 

$dogs
 2014  2015  2016 
0.939 0.956 0.976

> # Sacramento simple live-release rate by animal group and year to date
> lapply(sacCreateOutcomeNumbersList(sacOutcomeList, period = "year"), lrrByYear)
$cats_dogs
 2014  2015  2016 
0.690 0.778 0.811 

$cats
 2014  2015  2016 
0.727 0.808 0.816 

$dogs
 2014  2015  2016 
0.662 0.749 0.807

Monthly Live-Release Rate

The time series of monthly live-release rate can sometimes reveal trends. Here are the monthly rates for the past two and a half years at each shelter:

> # Austin monthly simple live-release rate by animal group, 2014 to July 2016
> lapply(atxOutcomeNumbersList, function (data) { ts(round(data$live_rate, digits = 3), start=c(2014,1), end=c(2016,7), frequency=12) })
$cats_dogs
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.941 0.930 0.928 0.945 0.934 0.932 0.933 0.945 0.941 0.927 0.922 0.931
2015 0.946 0.932 0.927 0.943 0.923 0.918 0.937 0.950 0.959 0.957 0.968 0.969
2016 0.970 0.961 0.960 0.969 0.947 0.958 0.977                              

$cats
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.935 0.910 0.914 0.926 0.931 0.925 0.938 0.939 0.933 0.931 0.909 0.894
2015 0.923 0.908 0.886 0.937 0.893 0.890 0.929 0.938 0.953 0.933 0.948 0.970
2016 0.940 0.927 0.941 0.953 0.906 0.944 0.968                              

$dogs
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.944 0.937 0.933 0.955 0.936 0.939 0.928 0.950 0.947 0.924 0.930 0.947
2015 0.955 0.939 0.942 0.947 0.943 0.948 0.947 0.961 0.964 0.978 0.982 0.969
2016 0.985 0.974 0.967 0.979 0.972 0.970 0.985                              

> # Sacramento monthly simple live-release rate by animal group, 2014 to July 2016
> lapply(sacOutcomeNumbersList, function (data) { ts(round(data$live_rate, digits = 3), start=c(2014,1), end=c(2016,7), frequency=12) })
$cats_dogs
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.767 0.720 0.707 0.662 0.624 0.699 0.758 0.662 0.618 0.679 0.683 0.706
2015 0.740 0.720 0.746 0.665 0.742 0.754 0.790 0.835 0.815 0.824 0.802 0.838
2016 0.759 0.819 0.794 0.817 0.810 0.789 0.868                              

$cats
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.874 0.752 0.798 0.695 0.598 0.716 0.799 0.624 0.668 0.710 0.792 0.820
2015 0.859 0.837 0.751 0.664 0.758 0.755 0.800 0.842 0.815 0.835 0.822 0.903
2016 0.846 0.832 0.802 0.812 0.735 0.748 0.905                              

$dogs
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2014 0.720 0.709 0.669 0.643 0.645 0.683 0.711 0.700 0.562 0.653 0.601 0.637
2015 0.668 0.660 0.743 0.667 0.725 0.753 0.777 0.823 0.815 0.810 0.783 0.780
2016 0.697 0.814 0.790 0.820 0.873 0.832 0.828                              

Austin distributions of monthly live-release rate
> # Austin distributions of monthly live-release rate by group, 2014 to July 2016 
> lapply(atxOutcomeList, function (data) { summary(atxCalcOutcomeNumbers(data, period="month")$live_rate) })
$cats_dogs
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.9178  0.9311  0.9433  0.9446  0.9586  0.9769 

$cats
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.8864  0.9117  0.9314  0.9281  0.9394  0.9696 

$dogs
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.9240  0.9408  0.9477  0.9541  0.9694  0.9847 
Sacramento distributions of monthly live-release rate
> # Sacramento distributions of monthly live-release rate by group, 2014 to July 2016 
> lapply(sacOutcomeList, function (data) { summary(sacCalcOutcomeNumbers(data, period="month")$live_rate) })
$cats_dogs
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.6182  0.7028  0.7538  0.7489  0.8063  0.8684 

$cats
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5976  0.7419  0.7990  0.7795  0.8334  0.9052 

$dogs
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.5625  0.6673  0.7201  0.7287  0.7997  0.8725 

This graph shows the monthly live-release rates for cats at both shelters:

Monthly cat live-release rate, Austin and Sacramento, 2014 to July 2016
AtxSacLrrCats

And here is the same graph for dogs:

Monthly dog live-release rate, Austin and Sacramento, 2014 to July 2016
AtxSacLrrDogs

For the past two and a half years, the Austin monthly live-release rate for both cats and dogs has been higher and substantially more stable than Sacramento’s. Austin has dependably, month after month, achieved a 92% rate or higher for cats and dogs combined.

Self-Reporting

Both the Austin and the Sacramento shelters publish monthly and annual life-saving rates and other descriptive pieces of data.[1,2] Neither shelter explains the method they use to compute their life-saving rate, a notable shortcoming of the monthly and annual reports. Nevertheless, the method can be worked out from the data inputs without difficulty.

The Sacramento shelter reports a life-saving rate according to the following unconventional formula:

    \[ \frac{O_{alive} + O_{missing} + S_{end} - S_{start}}{I_{alive}} \]

The Sacramento shelter calls this their “save” rate, which is within reason, since the calculation includes animals held in custody and not just animals discharged.

In its annual report, the Austin shelter publishes the simple live-release rate for the year, calculated in the customary way. However, in the monthly reports a different and less advisable rate calculation is used, one that omits dogs and cats that died in custody.

Outcome Types

The toolkit provides a function that filters impoundment data for a given range of outcome dates. By default the function filters out outcome events for animals that are not cats or dogs, for animals being sent to foster care, and for animals dead on arrival at the shelter.

atxOutcomeList <- atxCreateOutcomeList(atxOpenData, StartDate, EndDate)
sacOutcomeList <- sacCreateOutcomeList(sacOpenData, StartDate, EndDate)

The tables below show how the relative frequency of outcomes at each shelter has been changing over the past two and a half years. In broad strokes, at both shelters adoption has increased and killing has decreased. At the Austin shelter, transfers to other organizations has decreased.

> # Austin outcome type in proportions by year to date
> lapply(atxOutcomeList, function (data) { round(prop.table(with(data, table(year, outcome_type)), 1), 2) })
$cats_dogs
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     0.40 0.01       0.06    0.00            0.19     0.34
  2015     0.42 0.01       0.05    0.00            0.20     0.33
  2016     0.47 0.01       0.03    0.00            0.20     0.29

$cats
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     0.37 0.01       0.06    0.00            0.05     0.51
  2015     0.39 0.02       0.06    0.00            0.05     0.49
  2016     0.47 0.02       0.04    0.00            0.05     0.43

$dogs
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     0.43 0.00       0.06    0.00            0.28     0.23
  2015     0.44 0.00       0.04    0.00            0.31     0.21
  2016     0.48 0.00       0.02    0.00            0.30     0.20

> # Sacramento outcome type in proportions by year to date
> lapply(sacOutcomeList, function (data) { round(prop.table(with(data, table(year, outcome_type)), 1), 2) })
$cats_dogs
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTF  RTO TRANSFER
  2014     0.44 0.01    0.00 0.29     0.01    0.00 0.08 0.11     0.06
  2015     0.48 0.03    0.00 0.19     0.00    0.00 0.09 0.11     0.09
  2016     0.52 0.01    0.00 0.17     0.00    0.00 0.10 0.13     0.06

$cats
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTF  RTO TRANSFER
  2014     0.50 0.03    0.00 0.23     0.01    0.00 0.18 0.01     0.03
  2015     0.54 0.05    0.00 0.13     0.00    0.00 0.19 0.01     0.06
  2016     0.53 0.02    0.00 0.15     0.00    0.00 0.23 0.02     0.03

$dogs
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTO TRANSFER
  2014     0.40 0.00    0.00 0.33     0.00    0.00 0.18     0.08
  2015     0.42 0.01    0.00 0.24     0.00    0.00 0.20     0.12
  2016     0.50 0.01    0.00 0.18     0.00    0.00 0.22     0.08

Austin outcome type counts
> # Austin outcome type by animal group and year to date
> lapply(atxOutcomeList, function (data) { with(data, table(year, outcome_type)) })
$cats_dogs
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     7096  102       1050       5            3301     5999
  2015     7349  146        848      14            3496     5753
  2016     4489   80        271      10            1943     2715

$cats
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     2548   74        433       3             338     3536
  2015     2873  113        428       7             342     3575
  2016     1661   56        152       8             169     1526

$dogs
      outcome_type
year   Adoption Died Euthanasia Missing Return to Owner Transfer
  2014     4548   28        617       2            2963     2463
  2015     4476   33        420       7            3154     2178
  2016     2828   24        119       2            1774     1189
Sacramento outcome type counts
> # Sacramento outcome type by animal group and year to date
> lapply(sacOutcomeList, function (data) { with(data, table(year, outcome_type)) })
$cats_dogs
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTF  RTO TRANSFER
  2014     4284  137      15 2783       65      10  741 1043      577
  2015     5136  323      10 1999       39      21  982 1163      999
  2016     2992   86       6  985       22       2  572  775      347

$cats
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTF  RTO TRANSFER
  2014     2070  114      12  973       39       7  741   50      142
  2015     2873  286      10  711       17       8  982   72      330
  2016     1332   59       6  385       12       2  572   46       78

$dogs
      outcome_type
year   ADOPTION DIED ESCAPED EUTH EUTH VET MISSING  RTO TRANSFER
  2014     2214   23       3 1810       26       3  993      435
  2015     2263   37       0 1288       22      13 1091      669
  2016     1660   27       0  600       10       0  729      269

Additionally, we can estimate the current annual outcome profile by looking at the most recent twelve-month cycle. Here are the frequencies of outcome types for the past twelve months at each shelter (i.e., August 2015 to July 2016).

Austin Sacramento
Cats Dogs Cats Dogs
Adopted 45 % 46 % 56 % 49 %
Transferred 44 % 21 % 25 % 10 %
Redeemed 5 % 31 % 2 % 21 %
Killed/Died 6 % 2 % 17 % 20 %
Proportions of cat and dog outcome types, August 2015 to July 2016

Austin outcome proportions for past 12 months
> # Austin outcome type by animal group, August 2015 to July 2016, in proportions
> lapply(atxRecentOutcomeList, function (data) { round(prop.table(table(data$outcome_type)), 3) })
$cats_dogs
       Adoption   Died   Euthanasia   Missing   Return to Owner   Transfer 
          0.455  0.008        0.030     0.001             0.201      0.305 

$cats
       Adoption   Died   Euthanasia   Missing   Return to Owner   Transfer 
          0.450  0.015        0.041     0.002             0.048      0.444 

$dogs
       Adoption   Died   Euthanasia   Missing   Return to Owner   Transfer 
          0.459  0.004        0.022     0.000             0.307      0.208 
Austin outcome type counts for past 12 months
> # Austin outcome type by animal group, August 2015 to July 2016
> atxRecentOutcomeList <- atxCreateOutcomeList(atxOpenData, "2015-08-01", "2016-07-31")
> lapply(atxRecentOutcomeList, function (data) { table(data$outcome_type) })
$cats_dogs
       Adoption  Died  Euthanasia  Missing  Return to Owner  Transfer 
           7724   142         505       19             3411      5169 

$cats
       Adoption  Died  Euthanasia  Missing  Return to Owner  Transfer 
           3116   104         281       15              329      3076 

$dogs
       Adoption  Died  Euthanasia  Missing  Return to Owner  Transfer 
           4608    38         224        4             3082      2093 
Sacramento outcome proportions for past 12 months
> # Sacramento outcome type by animal group, August 2015 to July 2016, in proportions
> lapply(sacRecentOutcomeList, function (data) { round(prop.table(table(data$outcome_type)), 3) })
$cats_dogs
ADOPTION DIED ESCAPED EUTH EUTH VET MISSING RTF RTO TRANSFER
0.525 0.023 0.001 0.156 0.004 0.001 0.097 0.118 0.075

$cats
ADOPTION DIED ESCAPED EUTH EUTH VET MISSING RTF RTO TRANSFER
0.557 0.039 0.002 0.127 0.004 0.001 0.203 0.016 0.051

$dogs
ADOPTION DIED EUTH EUTH VET MISSING RTO TRANSFER
0.495 0.009 0.183 0.003 0.000 0.212 0.097

Sacramento outcome type counts for past 12 months
> # Sacramento outcome type by animal group, August 2015 to July 2016
> sacRecentOutcomeList <- sacCreateOutcomeList(sacOpenData, "2015-08-01", "2016-07-31")
> lapply(sacRecentOutcomeList, function (data) { table(data$outcome_type) })
$cats_dogs
ADOPTION     DIED  ESCAPED     EUTH EUTH VET  MISSING      RTF      RTO TRANSFER 
    5604      249        9     1669       38        8     1041     1263      802 

$cats
ADOPTION     DIED  ESCAPED     EUTH EUTH VET  MISSING      RTF      RTO TRANSFER 
    2854      201        9      650       20        7     1041       83      262 

$dogs
ADOPTION     DIED     EUTH EUTH VET  MISSING      RTO TRANSFER 
    2750       48     1019       18        1     1180      540

Conclusion

This is the end of our look at the open data for these two shelters together, but is just the beginning of our investigation into the topic of animal shelter data analysis and modeling, which will continue to be a featured subject of this blog.

Open data promises to dramatically reduce the cost of responding to citizens’ requests for public records, bringing easy and immediate access to electronic records that government agencies are required by law to preserve and make available. Moreover, open data encourages interested citizens to contribute their time and knowledge, using the data as fuel for different kinds of analyses and shared applications.

As we have seen, the open data currently obtainable for both the Austin and the Sacramento shelters is useful, but lamentably incomplete. Both shelters are in a position to reveal more about the animals taken into their care, since animal records contain little information that would legitimately be excepted under the applicable freedom-of-information laws, the Texas Public Information Act[3,4] and the California Public Records Act.[5,6]

In particular, the City of Austin considers itself a pioneer in the realm of open government[7] and aims to reach unprecedented levels of transparency. Through its Open Government Directive, the city has instructed departments to presume that information is open and to publish online data about their operations in a format that can be retrieved, indexed, and reused by other software.[8]

Many benefits accrue from making the complete public record of every shelter animal — including photographs, medical records, annotations, and notes — accessible over the network. For researchers, more data creates more options for data analysis, data mining, and predictive modeling. For software developers, more data creates the opportunity to build new web and mobile applications. For the general public, more information promotes trust and informed participation.

Photo happy hiker by Eileen McFall is licensed under CC BY-NC 2.0, cropped from original.

References

  1. City of Sacramento. 2016. City of Sacramento Animal Care Services: The Numbers.
  2. City of Austin. 2016. Austin Animal Center: Reports.
  3. Texas Public Information Act. Government Code Chapter 552 et seq.
  4. Texas Attorney General’s Office. 2016. Public Information Handbook 2016.
  5. California Public Records Act. Government Code Section 6250 et seq.
  6. Priamos, Gregory, et al. 2008. The People’s Business: A Guide to the California Public Records Act. League of California Cities.
  7. City of Austin. 2016. Council Resolution 20160225-017. Austin City Council. February 25, 2016.
  8. City of Austin. 2013. City of Austin Open Government Directive. August 26, 2013.

Leave a Reply

Your email address will not be published. Required fields are marked *