Introduction

Column

Summary

In 2022, New York City Mayor E. Adams reinstated the controversial Stop, Question and Frisk program, allowing police officers to stop individuals based on reasonable suspicion and conduct body searches if necessary. The program has faced criticism, particularly after a 2013 court ruling deemed it discriminatory against minorities. Despite this, it remains in effect. This statistical analysis of the program reveals significant disparities in frisk probabilities across different race, sex, age and borough groups. It highlights the need for robust data and nuanced analysis to better understand its impact on equal protection, offering a more informed approach to the ongoing debate.


Column

Introduction

In 2022, shortly after taking office, New York City Mayor Eric Adams reinstated the New York Police Department’s (NYPD) Stop, Question, and Frisk program. This policy allows officers to temporarily stop individuals based on reasonable suspicion. If the officer further believes the individual is armed and dangerous, a body pat-down, or frisk, is permitted. However, the program has a controversial history. In 2013, a U.S. District Court ruled that the NYPD’s implementation violated equal protection constitutional provisions due to its disproportionate impact on minorities.

Despite ongoing criticism, the policy remains in use and continues to fuel debate. At the core of this debate is the issue of equal protection. Yet, advocacy efforts and media coverage often rely on inconsistent estimates of frisk occurrences. Discussions are frequently hindered by vague references to victims as “persons of color” and a lack of robust, comparative data that would allow for meaningful inferences about the affected population.

To address this gap, we conduct a statistical analysis to provide more rigorous and nuanced estimates of how the program is applied across 32 distinct race | sex | borough cohorts. Our analysis seeks to answer two key questions:

  1. What is the probability of a frisk?

  2. How do the odds of a frisk compare to those of a white subject in Manhattan?

Unlike simple descriptive calculations of averages and counts, our approach estimates the relative differences and uncertainties in frisk probabilities. It also accounts for variations not only by race but also by sex, age, and borough. This method allows for more robust inferences about the broader New York City population and directly addresses concerns about equal protection.


Researched and engineered at Decision Analytics Hub
by Mauricio Claudio |

Data

Column

Data

The 2023 Stop, Question, and Frisk data used in this analysis comes from the New York Police Department website. It includes 12,035 recorded instances of police stops, each documenting key characteristics of the individual and the stop location. Each instance consists of:

  • Three categorical variables: race, sex, and boro (borough).

  • One numerical variable: age (the individual’s age).

  • One binary outcome variable: frisked (indicating whether a frisk occurred).

To maintain statistical reliability, observations for the race categories MIDDLE EASTERN/SOUTHWEST ASIAN, AMERICAN INDIAN/ALASKAN NATIVE, and ASIAN/PACIFIC ISLANDER, as well as stops in boro STATEN ISLAND, were excluded due to their small sample sizes. Additionally, only individuals aged 16 to 60 were included in the analysis.

The graphs are interactive - hover over them for greater detail on the data!


Column

Summary

Summary table

No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 race [factor]
1. WHITE
2. WHITE HISPANIC
3. BLACK HISPANIC
4. BLACK
674(5.6%)
2707(22.5%)
1321(11.0%)
7333(60.9%)
12035 (100.0%) 0 (0.0%)
2 sex [factor]
1. FEMALE
2. MALE
741(6.2%)
11294(93.8%)
12035 (100.0%) 0 (0.0%)
3 boro [factor]
1. MANHATTAN
2. BRONX
3. BROOKLYN
4. QUEENS
2571(21.4%)
4718(39.2%)
2978(24.7%)
1768(14.7%)
12035 (100.0%) 0 (0.0%)
4 age [integer]
Mean (sd) : 28.3 (10.6)
min ≤ med ≤ max:
16 ≤ 25 ≤ 60
IQR (CV) : 15 (0.4)
45 distinct values 12035 (100.0%) 0 (0.0%)
5 frisked [factor]
1. no
2. yes
4239(35.2%)
7796(64.8%)
12035 (100.0%) 0 (0.0%)

Generated by summarytools 1.0.1 (R version 4.1.0)
2025-03-04


Grouped totals

Race Sex Borough Frisk Total PercentTotal
BLACK MALE BRONX yes 2304 19.14
BLACK MALE BROOKLYN yes 1265 10.51
WHITE HISPANIC MALE BRONX yes 920 7.64
BLACK MALE MANHATTAN yes 727 6.04
BLACK HISPANIC MALE BRONX yes 605 5.03
BLACK MALE QUEENS yes 552 4.59
WHITE HISPANIC MALE MANHATTAN yes 248 2.06
WHITE HISPANIC MALE BROOKLYN yes 219 1.82
WHITE HISPANIC MALE QUEENS yes 214 1.78
BLACK HISPANIC MALE MANHATTAN yes 134 1.11
BLACK HISPANIC MALE BROOKLYN yes 95 0.79
WHITE MALE BROOKLYN yes 71 0.59
WHITE MALE MANHATTAN yes 54 0.45
WHITE MALE BRONX yes 51 0.42
WHITE MALE QUEENS yes 51 0.42
BLACK HISPANIC MALE QUEENS yes 49 0.41
BLACK FEMALE BROOKLYN yes 42 0.35
BLACK FEMALE MANHATTAN yes 38 0.32
WHITE HISPANIC FEMALE BRONX yes 31 0.26
BLACK FEMALE QUEENS yes 29 0.24
BLACK FEMALE BRONX yes 25 0.21
BLACK HISPANIC FEMALE BRONX yes 20 0.17
WHITE HISPANIC FEMALE MANHATTAN yes 12 0.10
WHITE HISPANIC FEMALE BROOKLYN yes 10 0.08
WHITE HISPANIC FEMALE QUEENS yes 9 0.07
WHITE FEMALE MANHATTAN yes 4 0.03
WHITE FEMALE BROOKLYN yes 4 0.03
WHITE FEMALE BRONX yes 3 0.02
WHITE FEMALE QUEENS yes 3 0.02
BLACK HISPANIC FEMALE MANHATTAN yes 3 0.02
BLACK HISPANIC FEMALE BROOKLYN yes 2 0.02
BLACK HISPANIC FEMALE QUEENS yes 2 0.02
BLACK MALE MANHATTAN no 698 5.80
BLACK MALE BROOKLYN no 673 5.59
BLACK MALE BRONX no 371 3.08
BLACK MALE QUEENS no 336 2.79
WHITE HISPANIC MALE QUEENS no 271 2.25
WHITE HISPANIC MALE MANHATTAN no 256 2.13
WHITE HISPANIC MALE BROOKLYN no 234 1.94
WHITE HISPANIC MALE BRONX no 168 1.40
BLACK HISPANIC MALE BRONX no 131 1.09
WHITE MALE BROOKLYN no 126 1.05
BLACK FEMALE MANHATTAN no 112 0.93
WHITE MALE MANHATTAN no 111 0.92
BLACK HISPANIC MALE MANHATTAN no 107 0.89
WHITE MALE QUEENS no 102 0.85
BLACK FEMALE BROOKLYN no 88 0.73
BLACK HISPANIC MALE BROOKLYN no 79 0.66
BLACK HISPANIC MALE QUEENS no 58 0.48
BLACK FEMALE BRONX no 39 0.32
WHITE HISPANIC FEMALE QUEENS no 36 0.30
WHITE FEMALE BROOKLYN no 34 0.28
BLACK FEMALE QUEENS no 34 0.28
WHITE HISPANIC FEMALE MANHATTAN no 33 0.27
WHITE HISPANIC FEMALE BROOKLYN no 25 0.21
WHITE FEMALE MANHATTAN no 21 0.17
WHITE HISPANIC FEMALE BRONX no 21 0.17
WHITE FEMALE QUEENS no 20 0.17
WHITE MALE BRONX no 14 0.12
BLACK HISPANIC FEMALE MANHATTAN no 13 0.11
BLACK HISPANIC FEMALE BROOKLYN no 11 0.09
BLACK HISPANIC FEMALE BRONX no 10 0.08
WHITE FEMALE BRONX no 5 0.04
BLACK HISPANIC FEMALE QUEENS no 2 0.02

Stops

Stop outcome

Stop outcome, rel.

Stop outcome: Age

Stop outcome: Age, rel.

Alluvial

Method

Column

Model

The data is analyzed using a binary logistic regression model consisting of four interaction terms: race:boro, boro:sex, race:age, and boro:age. This model was selected over alternative models based on its lower AIC and BIC scores, as well as its superior performance in posterior prediction and the Hosmer-Lemeshow goodness-of-fit test. Deviance analysis and joint tests further validate the model’s fit and confirm the significance of these interaction terms.

Mean probabilities and odds-ratio contrasts are estimated with 95% confidence at four-year intervals of the age variable. The contrasts are adjusted using the Dunnett method.

The analysis is conducted in R (v4.1.0) and RStudio (v2023.12.1+402). Mean probabilities and odds-ratios are estimated with the emmeans library (v1.10.1).


Column

Summary

Model

\[\mathbf{Y = \alpha\beta + \beta\gamma + \alpha\delta + \beta\delta}\]

\[where\ Y = frisked \\ {\bf \alpha} = race \\ {\bf \beta} = boro \\ {\bf \gamma} = sex \\ {\bf \delta} = age\]


Deviance

Analysis of Deviance Table (Type II tests)

Response: frisked
          LR Chisq Df Pr(>Chisq)    
race:boro  146.998 15  < 2.2e-16 ***
race:age    99.327  4  < 2.2e-16 ***
boro:sex   215.458  4  < 2.2e-16 ***
boro:age    15.506  3   0.001432 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Joint tests

 model term df1 df2 F.ratio   Chisq p.value
 race         3 Inf  35.859 107.577  <.0001
 boro         3 Inf  45.226 135.678  <.0001
 age          1 Inf  94.173  94.173  <.0001
 race:boro    9 Inf   5.822  52.398  <.0001
 race:age     3 Inf   4.925  14.775  0.0020
 boro:age     3 Inf   5.203  15.609  0.0014
 boro:sex     4 Inf  51.620 206.480  <.0001

Diagnostics

Posterior Predictions



Hosmer-Lemeshow test


   The Hosmer-Lemeshow goodness-of-fit test

 Group Size Observed  Expected
     1 1205      358  346.4576
     2 1198      478  496.3167
     3 1208      595  598.0129
     4 1214      692  685.4989
     5 1185      741  741.0039
     6 1204      858  836.5234
     7 1200      897  919.6353
     8 1221     1028 1033.0508
     9 1197     1066 1052.2496
    10 1203     1083 1087.2510

         Statistic =  7.87575 
degrees of freedom =  8 
           p-value =  0.4457 


Results

Column

Results

The results are displayed on the plots and tables on the right. In the plots, the point is the estimate and the line is the 95% confidence interval around the estimate. Probabilities indistinct from random chance and relative odds at parity appear as points with muted color. Play cycles through age or it can be selected on the slider.

Frisk probability
The probability of a frisk shows great variability among the 32 race | sex | borough cohorts and is greatly dependent on age. At the lower age range of 16 years, the range of probabilities ranges from a high of 0.92 for a black male in the Bronx to a low of 0.16 for a white female in Brooklyn. The probability of six cohorts is indistinct from the random chance probability of 0.5.

At the mean age of 28 years, frisk probabilities continue to display great variability among cohorts, with a maximum of 0.85 for black male in the Bronx and a minimum of 0.14 for white females in Brooklyn, while the probabilities of nine cohorts are indistinct from random chance.

At the upper age range of 60 years, frisk probabilities range from 0.62 for a white male in the Bronx to 0.10 for a white female in Brooklyn, with the probability of four highest cohorts indistinct from random chance. Generally, individual cohort probabilities and probability differences among cohorts both decrease with increasing age.

Relative odds
The relative of odds of frisk among individual race | borough cohorts against the white | Manhattan reference cohort displays substantial variability and is highly dependent on age. At the lower age range of 16 years, a black in the Bronx has 14 times greater odds of a frisk than the reference cohort while the odds of a white Hispanic are 2.4 times greater.

At the mean age of 28 years, relative odds display substantial variability among cohorts, with blacks in the Bronx having 8.7 times and white Hispanics 8.4 greater odds of a frisk than the reference cohort. By contrast, white Hispanics in Queens and Brooklyn have equal odds to the reference cohort.

At the upper age range of 60 years, a white in the Bronx has 3.7 times greater odds than the reference cohorts while a white Hispanic in the same borough has 3.2 times greater odds. All other relative odds at this age are indistinct from parity. Generally, the individual cohort odds of a frisk and the odds differences among cohorts both decrease with increasing age.


Column

Frisk probability


age race sex boro prob asymp.LCL asymp.UCL
16 BLACK MALE BRONX 0.915 0.903 0.926
16 WHITE HISPANIC MALE BRONX 0.901 0.880 0.918
16 BLACK HISPANIC MALE BRONX 0.880 0.852 0.904
16 WHITE MALE BRONX 0.848 0.749 0.913
16 BLACK MALE BROOKLYN 0.751 0.725 0.776
16 BLACK MALE QUEENS 0.713 0.673 0.749
16 BLACK FEMALE BRONX 0.703 0.622 0.772
16 WHITE HISPANIC FEMALE BRONX 0.665 0.577 0.744
16 BLACK MALE MANHATTAN 0.641 0.605 0.674
16 BLACK HISPANIC MALE MANHATTAN 0.632 0.554 0.704
16 BLACK HISPANIC FEMALE BRONX 0.616 0.517 0.707
16 BLACK HISPANIC MALE BROOKLYN 0.613 0.528 0.691
16 WHITE HISPANIC MALE MANHATTAN 0.592 0.535 0.646
16 WHITE HISPANIC MALE BROOKLYN 0.585 0.527 0.641
16 WHITE FEMALE BRONX 0.550 0.379 0.709
16 BLACK FEMALE QUEENS 0.518 0.418 0.616
16 BLACK HISPANIC MALE QUEENS 0.513 0.410 0.614
16 WHITE HISPANIC MALE QUEENS 0.499 0.443 0.555
16 BLACK FEMALE BROOKLYN 0.448 0.369 0.530
16 WHITE MALE BROOKLYN 0.411 0.316 0.512
16 WHITE MALE MANHATTAN 0.379 0.286 0.482
16 BLACK FEMALE MANHATTAN 0.376 0.302 0.455
16 BLACK HISPANIC FEMALE MANHATTAN 0.367 0.272 0.474
16 WHITE MALE QUEENS 0.347 0.257 0.448
16 WHITE HISPANIC FEMALE MANHATTAN 0.328 0.252 0.415
16 BLACK HISPANIC FEMALE QUEENS 0.313 0.207 0.443
16 WHITE HISPANIC FEMALE QUEENS 0.301 0.220 0.397
16 BLACK HISPANIC FEMALE BROOKLYN 0.298 0.211 0.402
16 WHITE HISPANIC FEMALE BROOKLYN 0.275 0.205 0.358
16 WHITE FEMALE QUEENS 0.187 0.117 0.284
16 WHITE FEMALE MANHATTAN 0.171 0.110 0.256
16 WHITE FEMALE BROOKLYN 0.158 0.102 0.237
20 BLACK MALE BRONX 0.897 0.884 0.909
20 WHITE HISPANIC MALE BRONX 0.885 0.864 0.902
20 BLACK HISPANIC MALE BRONX 0.863 0.835 0.886
20 WHITE MALE BRONX 0.833 0.733 0.901
20 BLACK MALE BROOKLYN 0.722 0.698 0.745
20 BLACK MALE QUEENS 0.687 0.651 0.721
20 BLACK FEMALE BRONX 0.656 0.574 0.731
20 WHITE HISPANIC FEMALE BRONX 0.627 0.538 0.707
20 BLACK HISPANIC MALE MANHATTAN 0.610 0.539 0.677
20 BLACK MALE MANHATTAN 0.606 0.574 0.636
20 BLACK HISPANIC MALE BROOKLYN 0.590 0.511 0.665
20 BLACK HISPANIC FEMALE BRONX 0.579 0.483 0.669
20 WHITE HISPANIC MALE MANHATTAN 0.566 0.515 0.615
20 WHITE HISPANIC MALE BROOKLYN 0.559 0.507 0.611
20 WHITE FEMALE BRONX 0.522 0.360 0.680
20 BLACK HISPANIC MALE QUEENS 0.497 0.400 0.593
20 BLACK FEMALE QUEENS 0.487 0.391 0.585
20 WHITE HISPANIC MALE QUEENS 0.479 0.430 0.529
20 BLACK FEMALE BROOKLYN 0.411 0.337 0.491
20 WHITE MALE BROOKLYN 0.399 0.315 0.489
20 WHITE MALE MANHATTAN 0.368 0.284 0.459
20 BLACK HISPANIC FEMALE MANHATTAN 0.346 0.259 0.445
20 WHITE MALE QUEENS 0.342 0.261 0.433
20 BLACK FEMALE MANHATTAN 0.341 0.274 0.416
20 WHITE HISPANIC FEMALE MANHATTAN 0.305 0.235 0.386
20 BLACK HISPANIC FEMALE QUEENS 0.299 0.199 0.423
20 WHITE HISPANIC FEMALE QUEENS 0.285 0.209 0.376
20 BLACK HISPANIC FEMALE BROOKLYN 0.279 0.199 0.375
20 WHITE HISPANIC FEMALE BROOKLYN 0.254 0.191 0.331
20 WHITE FEMALE QUEENS 0.184 0.118 0.274
20 WHITE FEMALE MANHATTAN 0.164 0.108 0.240
20 WHITE FEMALE BROOKLYN 0.151 0.100 0.222
24 BLACK MALE BRONX 0.876 0.863 0.888
24 WHITE HISPANIC MALE BRONX 0.866 0.845 0.885
24 BLACK HISPANIC MALE BRONX 0.843 0.816 0.867
24 WHITE MALE BRONX 0.817 0.715 0.888
24 BLACK MALE BROOKLYN 0.691 0.669 0.713
24 BLACK MALE QUEENS 0.661 0.627 0.692
24 BLACK FEMALE BRONX 0.607 0.523 0.685
24 BLACK HISPANIC MALE MANHATTAN 0.588 0.522 0.651
24 WHITE HISPANIC FEMALE BRONX 0.586 0.499 0.669
24 BLACK MALE MANHATTAN 0.569 0.541 0.597
24 BLACK HISPANIC MALE BROOKLYN 0.567 0.492 0.639
24 BLACK HISPANIC FEMALE BRONX 0.540 0.448 0.630
24 WHITE HISPANIC MALE MANHATTAN 0.539 0.493 0.585
24 WHITE HISPANIC MALE BROOKLYN 0.533 0.485 0.581
24 WHITE FEMALE BRONX 0.494 0.339 0.650
24 BLACK HISPANIC MALE QUEENS 0.480 0.387 0.574
24 WHITE HISPANIC MALE QUEENS 0.460 0.415 0.506
24 BLACK FEMALE QUEENS 0.457 0.364 0.554
24 WHITE MALE BROOKLYN 0.387 0.313 0.467
24 BLACK FEMALE BROOKLYN 0.376 0.305 0.452
24 WHITE MALE MANHATTAN 0.356 0.281 0.439
24 WHITE MALE QUEENS 0.337 0.263 0.420
24 BLACK HISPANIC FEMALE MANHATTAN 0.325 0.244 0.418
24 BLACK FEMALE MANHATTAN 0.309 0.246 0.379
24 BLACK HISPANIC FEMALE QUEENS 0.286 0.190 0.405
24 WHITE HISPANIC FEMALE MANHATTAN 0.283 0.218 0.358
24 WHITE HISPANIC FEMALE QUEENS 0.269 0.197 0.356
24 BLACK HISPANIC FEMALE BROOKLYN 0.260 0.187 0.351
24 WHITE HISPANIC FEMALE BROOKLYN 0.235 0.176 0.305
24 WHITE FEMALE QUEENS 0.180 0.118 0.266
24 WHITE FEMALE MANHATTAN 0.157 0.106 0.227
24 WHITE FEMALE BROOKLYN 0.145 0.099 0.209
28 BLACK MALE BRONX 0.851 0.837 0.864
28 WHITE HISPANIC MALE BRONX 0.845 0.823 0.866
28 BLACK HISPANIC MALE BRONX 0.821 0.792 0.847
28 WHITE MALE BRONX 0.799 0.695 0.875
28 BLACK MALE BROOKLYN 0.659 0.637 0.680
28 BLACK MALE QUEENS 0.633 0.601 0.664
28 BLACK HISPANIC MALE MANHATTAN 0.565 0.502 0.626
28 BLACK FEMALE BRONX 0.555 0.471 0.637
28 WHITE HISPANIC FEMALE BRONX 0.545 0.458 0.629
28 BLACK HISPANIC MALE BROOKLYN 0.544 0.471 0.615
28 BLACK MALE MANHATTAN 0.533 0.506 0.559
28 WHITE HISPANIC MALE MANHATTAN 0.513 0.469 0.556
28 WHITE HISPANIC MALE BROOKLYN 0.506 0.460 0.552
28 BLACK HISPANIC FEMALE BRONX 0.501 0.411 0.592
28 WHITE FEMALE BRONX 0.466 0.317 0.620
28 BLACK HISPANIC MALE QUEENS 0.464 0.373 0.557
28 WHITE HISPANIC MALE QUEENS 0.440 0.398 0.484
28 BLACK FEMALE QUEENS 0.427 0.337 0.523
28 WHITE MALE BROOKLYN 0.376 0.308 0.448
28 WHITE MALE MANHATTAN 0.345 0.276 0.422
28 BLACK FEMALE BROOKLYN 0.341 0.275 0.415
28 WHITE MALE QUEENS 0.333 0.263 0.410
28 BLACK HISPANIC FEMALE MANHATTAN 0.305 0.229 0.393
28 BLACK FEMALE MANHATTAN 0.278 0.220 0.344
28 BLACK HISPANIC FEMALE QUEENS 0.272 0.180 0.389
28 WHITE HISPANIC FEMALE MANHATTAN 0.262 0.202 0.333
28 WHITE HISPANIC FEMALE QUEENS 0.254 0.186 0.337
28 BLACK HISPANIC FEMALE BROOKLYN 0.243 0.174 0.328
28 WHITE HISPANIC FEMALE BROOKLYN 0.216 0.162 0.282
28 WHITE FEMALE QUEENS 0.177 0.117 0.259
28 WHITE FEMALE MANHATTAN 0.151 0.103 0.216
28 WHITE FEMALE BROOKLYN 0.139 0.096 0.197
32 BLACK MALE BRONX 0.822 0.805 0.838
32 WHITE HISPANIC MALE BRONX 0.822 0.796 0.845
32 BLACK HISPANIC MALE BRONX 0.797 0.763 0.827
32 WHITE MALE BRONX 0.781 0.672 0.861
32 BLACK MALE BROOKLYN 0.624 0.601 0.647
32 BLACK MALE QUEENS 0.604 0.571 0.637
32 BLACK HISPANIC MALE MANHATTAN 0.542 0.480 0.603
32 BLACK HISPANIC MALE BROOKLYN 0.521 0.447 0.594
32 BLACK FEMALE BRONX 0.503 0.418 0.587
32 WHITE HISPANIC FEMALE BRONX 0.502 0.416 0.589
32 BLACK MALE MANHATTAN 0.495 0.469 0.522
32 WHITE HISPANIC MALE MANHATTAN 0.486 0.444 0.529
32 WHITE HISPANIC MALE BROOKLYN 0.480 0.434 0.525
32 BLACK HISPANIC FEMALE BRONX 0.462 0.372 0.555
32 BLACK HISPANIC MALE QUEENS 0.448 0.356 0.543
32 WHITE FEMALE BRONX 0.438 0.295 0.592
32 WHITE HISPANIC MALE QUEENS 0.421 0.378 0.466
32 BLACK FEMALE QUEENS 0.398 0.310 0.493
32 WHITE MALE BROOKLYN 0.364 0.301 0.432
32 WHITE MALE MANHATTAN 0.334 0.268 0.407
32 WHITE MALE QUEENS 0.328 0.261 0.403
32 BLACK FEMALE BROOKLYN 0.309 0.246 0.379
32 BLACK HISPANIC FEMALE MANHATTAN 0.286 0.213 0.371
32 BLACK HISPANIC FEMALE QUEENS 0.260 0.170 0.375
32 BLACK FEMALE MANHATTAN 0.249 0.196 0.311
32 WHITE HISPANIC FEMALE MANHATTAN 0.242 0.185 0.310
32 WHITE HISPANIC FEMALE QUEENS 0.240 0.174 0.321
32 BLACK HISPANIC FEMALE BROOKLYN 0.226 0.160 0.309
32 WHITE HISPANIC FEMALE BROOKLYN 0.199 0.148 0.261
32 WHITE FEMALE QUEENS 0.174 0.116 0.254
32 WHITE FEMALE MANHATTAN 0.145 0.099 0.206
32 WHITE FEMALE BROOKLYN 0.133 0.093 0.188
36 WHITE HISPANIC MALE BRONX 0.796 0.765 0.824
36 BLACK MALE BRONX 0.789 0.767 0.809
36 BLACK HISPANIC MALE BRONX 0.771 0.729 0.808
36 WHITE MALE BRONX 0.761 0.647 0.847
36 BLACK MALE BROOKLYN 0.589 0.562 0.614
36 BLACK MALE QUEENS 0.575 0.538 0.611
36 BLACK HISPANIC MALE MANHATTAN 0.519 0.454 0.583
36 BLACK HISPANIC MALE BROOKLYN 0.497 0.420 0.575
36 WHITE HISPANIC FEMALE BRONX 0.460 0.374 0.549
36 WHITE HISPANIC MALE MANHATTAN 0.460 0.416 0.505
36 BLACK MALE MANHATTAN 0.458 0.430 0.486
36 WHITE HISPANIC MALE BROOKLYN 0.453 0.406 0.501
36 BLACK FEMALE BRONX 0.450 0.367 0.536
36 BLACK HISPANIC MALE QUEENS 0.432 0.338 0.531
36 BLACK HISPANIC FEMALE BRONX 0.424 0.334 0.519
36 WHITE FEMALE BRONX 0.411 0.272 0.565
36 WHITE HISPANIC MALE QUEENS 0.402 0.357 0.450
36 BLACK FEMALE QUEENS 0.369 0.284 0.464
36 WHITE MALE BROOKLYN 0.353 0.291 0.419
36 WHITE MALE QUEENS 0.323 0.256 0.399
36 WHITE MALE MANHATTAN 0.323 0.258 0.396
36 BLACK FEMALE BROOKLYN 0.278 0.218 0.346
36 BLACK HISPANIC FEMALE MANHATTAN 0.267 0.197 0.351
36 BLACK HISPANIC FEMALE QUEENS 0.247 0.160 0.363
36 WHITE HISPANIC FEMALE QUEENS 0.226 0.162 0.305
36 WHITE HISPANIC FEMALE MANHATTAN 0.223 0.169 0.289
36 BLACK FEMALE MANHATTAN 0.222 0.173 0.280
36 BLACK HISPANIC FEMALE BROOKLYN 0.210 0.147 0.291
36 WHITE HISPANIC FEMALE BROOKLYN 0.182 0.134 0.242
36 WHITE FEMALE QUEENS 0.171 0.113 0.251
36 WHITE FEMALE MANHATTAN 0.139 0.095 0.198
36 WHITE FEMALE BROOKLYN 0.128 0.089 0.180
40 WHITE HISPANIC MALE BRONX 0.767 0.728 0.801
40 BLACK MALE BRONX 0.751 0.722 0.778
40 BLACK HISPANIC MALE BRONX 0.742 0.690 0.788
40 WHITE MALE BRONX 0.740 0.619 0.833
40 BLACK MALE BROOKLYN 0.552 0.521 0.582
40 BLACK MALE QUEENS 0.545 0.503 0.586
40 BLACK HISPANIC MALE MANHATTAN 0.496 0.426 0.566
40 BLACK HISPANIC MALE BROOKLYN 0.474 0.392 0.558
40 WHITE HISPANIC MALE MANHATTAN 0.434 0.386 0.482
40 WHITE HISPANIC MALE BROOKLYN 0.427 0.377 0.478
40 BLACK MALE MANHATTAN 0.421 0.390 0.453
40 WHITE HISPANIC FEMALE BRONX 0.418 0.333 0.509
40 BLACK HISPANIC MALE QUEENS 0.416 0.318 0.521
40 BLACK FEMALE BRONX 0.398 0.317 0.484
40 BLACK HISPANIC FEMALE BRONX 0.386 0.296 0.484
40 WHITE FEMALE BRONX 0.384 0.249 0.539
40 WHITE HISPANIC MALE QUEENS 0.384 0.334 0.436
40 BLACK FEMALE QUEENS 0.342 0.258 0.436
40 WHITE MALE BROOKLYN 0.342 0.279 0.410
40 WHITE MALE QUEENS 0.319 0.249 0.398
40 WHITE MALE MANHATTAN 0.313 0.246 0.388
40 BLACK HISPANIC FEMALE MANHATTAN 0.249 0.180 0.333
40 BLACK FEMALE BROOKLYN 0.249 0.193 0.314
40 BLACK HISPANIC FEMALE QUEENS 0.235 0.149 0.352
40 WHITE HISPANIC FEMALE QUEENS 0.212 0.150 0.291
40 WHITE HISPANIC FEMALE MANHATTAN 0.205 0.154 0.269
40 BLACK FEMALE MANHATTAN 0.197 0.152 0.252
40 BLACK HISPANIC FEMALE BROOKLYN 0.195 0.133 0.276
40 WHITE FEMALE QUEENS 0.168 0.110 0.249
40 WHITE HISPANIC FEMALE BROOKLYN 0.167 0.122 0.225
40 WHITE FEMALE MANHATTAN 0.133 0.090 0.192
40 WHITE FEMALE BROOKLYN 0.122 0.084 0.174
44 WHITE HISPANIC MALE BRONX 0.735 0.688 0.778
44 WHITE MALE BRONX 0.718 0.588 0.820
44 BLACK HISPANIC MALE BRONX 0.711 0.646 0.768
44 BLACK MALE BRONX 0.710 0.672 0.744
44 BLACK MALE QUEENS 0.515 0.467 0.563
44 BLACK MALE BROOKLYN 0.515 0.479 0.551
44 BLACK HISPANIC MALE MANHATTAN 0.472 0.396 0.550
44 BLACK HISPANIC MALE BROOKLYN 0.451 0.363 0.542
44 WHITE HISPANIC MALE MANHATTAN 0.408 0.356 0.462
44 WHITE HISPANIC MALE BROOKLYN 0.401 0.347 0.458
44 BLACK HISPANIC MALE QUEENS 0.400 0.297 0.513
44 BLACK MALE MANHATTAN 0.385 0.351 0.421
44 WHITE HISPANIC FEMALE BRONX 0.378 0.293 0.471
44 WHITE HISPANIC MALE QUEENS 0.365 0.311 0.424
44 WHITE FEMALE BRONX 0.358 0.226 0.514
44 BLACK HISPANIC FEMALE BRONX 0.350 0.260 0.452
44 BLACK FEMALE BRONX 0.348 0.271 0.434
44 WHITE MALE BROOKLYN 0.331 0.264 0.404
44 BLACK FEMALE QUEENS 0.315 0.234 0.409
44 WHITE MALE QUEENS 0.314 0.240 0.399
44 WHITE MALE MANHATTAN 0.302 0.232 0.383
44 BLACK HISPANIC FEMALE MANHATTAN 0.232 0.164 0.317
44 BLACK HISPANIC FEMALE QUEENS 0.224 0.137 0.343
44 BLACK FEMALE BROOKLYN 0.222 0.169 0.285
44 WHITE HISPANIC FEMALE QUEENS 0.199 0.139 0.279
44 WHITE HISPANIC FEMALE MANHATTAN 0.189 0.139 0.251
44 BLACK HISPANIC FEMALE BROOKLYN 0.181 0.120 0.262
44 BLACK FEMALE MANHATTAN 0.175 0.133 0.227
44 WHITE FEMALE QUEENS 0.165 0.106 0.249
44 WHITE HISPANIC FEMALE BROOKLYN 0.152 0.109 0.209
44 WHITE FEMALE MANHATTAN 0.127 0.084 0.188
44 WHITE FEMALE BROOKLYN 0.117 0.079 0.169
48 WHITE HISPANIC MALE BRONX 0.701 0.643 0.753
48 WHITE MALE BRONX 0.695 0.554 0.806
48 BLACK HISPANIC MALE BRONX 0.678 0.599 0.748
48 BLACK MALE BRONX 0.664 0.617 0.708
48 BLACK MALE QUEENS 0.485 0.430 0.540
48 BLACK MALE BROOKLYN 0.477 0.436 0.519
48 BLACK HISPANIC MALE MANHATTAN 0.449 0.365 0.536
48 BLACK HISPANIC MALE BROOKLYN 0.428 0.333 0.528
48 BLACK HISPANIC MALE QUEENS 0.384 0.276 0.506
48 WHITE HISPANIC MALE MANHATTAN 0.382 0.326 0.442
48 WHITE HISPANIC MALE BROOKLYN 0.376 0.317 0.438
48 BLACK MALE MANHATTAN 0.351 0.313 0.391
48 WHITE HISPANIC MALE QUEENS 0.347 0.287 0.413
48 WHITE HISPANIC FEMALE BRONX 0.339 0.256 0.434
48 WHITE FEMALE BRONX 0.332 0.204 0.492
48 WHITE MALE BROOKLYN 0.320 0.248 0.401
48 BLACK HISPANIC FEMALE BRONX 0.315 0.225 0.421
48 WHITE MALE QUEENS 0.310 0.230 0.403
48 BLACK FEMALE BRONX 0.302 0.229 0.386
48 WHITE MALE MANHATTAN 0.292 0.218 0.379
48 BLACK FEMALE QUEENS 0.289 0.210 0.384
48 BLACK HISPANIC FEMALE MANHATTAN 0.216 0.148 0.303
48 BLACK HISPANIC FEMALE QUEENS 0.213 0.127 0.335
48 BLACK FEMALE BROOKLYN 0.197 0.148 0.257
48 WHITE HISPANIC FEMALE QUEENS 0.187 0.127 0.267
48 WHITE HISPANIC FEMALE MANHATTAN 0.173 0.124 0.235
48 BLACK HISPANIC FEMALE BROOKLYN 0.167 0.108 0.250
48 WHITE FEMALE QUEENS 0.163 0.102 0.250
48 BLACK FEMALE MANHATTAN 0.154 0.115 0.203
48 WHITE HISPANIC FEMALE BROOKLYN 0.139 0.098 0.194
48 WHITE FEMALE MANHATTAN 0.122 0.079 0.185
48 WHITE FEMALE BROOKLYN 0.112 0.074 0.166
52 WHITE MALE BRONX 0.670 0.518 0.793
52 WHITE HISPANIC MALE BRONX 0.664 0.595 0.727
52 BLACK HISPANIC MALE BRONX 0.642 0.549 0.727
52 BLACK MALE BRONX 0.615 0.558 0.669
52 BLACK MALE QUEENS 0.455 0.393 0.517
52 BLACK MALE BROOKLYN 0.440 0.393 0.488
52 BLACK HISPANIC MALE MANHATTAN 0.426 0.335 0.523
52 BLACK HISPANIC MALE BROOKLYN 0.405 0.304 0.515
52 BLACK HISPANIC MALE QUEENS 0.369 0.255 0.500
52 WHITE HISPANIC MALE MANHATTAN 0.358 0.296 0.424
52 WHITE HISPANIC MALE BROOKLYN 0.351 0.288 0.420
52 WHITE HISPANIC MALE QUEENS 0.330 0.264 0.403
52 BLACK MALE MANHATTAN 0.318 0.277 0.362
52 WHITE MALE BROOKLYN 0.309 0.232 0.399
52 WHITE FEMALE BRONX 0.308 0.182 0.471
52 WHITE MALE QUEENS 0.305 0.219 0.408
52 WHITE HISPANIC FEMALE BRONX 0.302 0.221 0.398
52 BLACK HISPANIC FEMALE BRONX 0.282 0.194 0.392
52 WHITE MALE MANHATTAN 0.282 0.202 0.378
52 BLACK FEMALE QUEENS 0.265 0.188 0.360
52 BLACK FEMALE BRONX 0.259 0.191 0.341
52 BLACK HISPANIC FEMALE QUEENS 0.202 0.116 0.328
52 BLACK HISPANIC FEMALE MANHATTAN 0.200 0.133 0.291
52 WHITE HISPANIC FEMALE QUEENS 0.176 0.117 0.256
52 BLACK FEMALE BROOKLYN 0.174 0.129 0.232
52 WHITE FEMALE QUEENS 0.160 0.097 0.253
52 WHITE HISPANIC FEMALE MANHATTAN 0.158 0.111 0.220
52 BLACK HISPANIC FEMALE BROOKLYN 0.155 0.096 0.239
52 BLACK FEMALE MANHATTAN 0.136 0.100 0.182
52 WHITE HISPANIC FEMALE BROOKLYN 0.127 0.087 0.181
52 WHITE FEMALE MANHATTAN 0.117 0.073 0.183
52 WHITE FEMALE BROOKLYN 0.107 0.069 0.164
56 WHITE MALE BRONX 0.645 0.481 0.781
56 WHITE HISPANIC MALE BRONX 0.625 0.544 0.700
56 BLACK HISPANIC MALE BRONX 0.606 0.497 0.705
56 BLACK MALE BRONX 0.564 0.497 0.628
56 BLACK MALE QUEENS 0.425 0.357 0.495
56 BLACK MALE BROOKLYN 0.404 0.352 0.458
56 BLACK HISPANIC MALE MANHATTAN 0.404 0.305 0.511
56 BLACK HISPANIC MALE BROOKLYN 0.383 0.275 0.503
56 BLACK HISPANIC MALE QUEENS 0.354 0.235 0.495
56 WHITE HISPANIC MALE MANHATTAN 0.334 0.268 0.406
56 WHITE HISPANIC MALE BROOKLYN 0.327 0.260 0.402
56 WHITE HISPANIC MALE QUEENS 0.313 0.243 0.393
56 WHITE MALE QUEENS 0.301 0.207 0.415
56 WHITE MALE BROOKLYN 0.299 0.215 0.398
56 BLACK MALE MANHATTAN 0.286 0.243 0.334
56 WHITE FEMALE BRONX 0.284 0.161 0.451
56 WHITE MALE MANHATTAN 0.272 0.187 0.378
56 WHITE HISPANIC FEMALE BRONX 0.268 0.189 0.364
56 BLACK HISPANIC FEMALE BRONX 0.252 0.165 0.364
56 BLACK FEMALE QUEENS 0.242 0.168 0.337
56 BLACK FEMALE BRONX 0.220 0.158 0.299
56 BLACK HISPANIC FEMALE QUEENS 0.192 0.106 0.322
56 BLACK HISPANIC FEMALE MANHATTAN 0.186 0.119 0.279
56 WHITE HISPANIC FEMALE QUEENS 0.165 0.106 0.246
56 WHITE FEMALE QUEENS 0.157 0.092 0.256
56 BLACK FEMALE BROOKLYN 0.154 0.111 0.209
56 WHITE HISPANIC FEMALE MANHATTAN 0.145 0.099 0.206
56 BLACK HISPANIC FEMALE BROOKLYN 0.143 0.085 0.229
56 BLACK FEMALE MANHATTAN 0.119 0.086 0.163
56 WHITE HISPANIC FEMALE BROOKLYN 0.116 0.077 0.169
56 WHITE FEMALE MANHATTAN 0.112 0.067 0.181
56 WHITE FEMALE BROOKLYN 0.103 0.063 0.162
60 WHITE MALE BRONX 0.619 0.443 0.768
60 WHITE HISPANIC MALE BRONX 0.585 0.492 0.672
60 BLACK HISPANIC MALE BRONX 0.568 0.446 0.682
60 BLACK MALE BRONX 0.511 0.436 0.585
60 BLACK MALE QUEENS 0.396 0.323 0.473
60 BLACK HISPANIC MALE MANHATTAN 0.381 0.276 0.500
60 BLACK MALE BROOKLYN 0.368 0.313 0.427
60 BLACK HISPANIC MALE BROOKLYN 0.361 0.248 0.492
60 BLACK HISPANIC MALE QUEENS 0.339 0.215 0.491
60 WHITE HISPANIC MALE MANHATTAN 0.310 0.241 0.389
60 WHITE HISPANIC MALE BROOKLYN 0.304 0.234 0.385
60 WHITE MALE QUEENS 0.296 0.195 0.422
60 WHITE HISPANIC MALE QUEENS 0.296 0.222 0.384
60 WHITE MALE BROOKLYN 0.288 0.198 0.399
60 WHITE MALE MANHATTAN 0.262 0.172 0.378
60 WHITE FEMALE BRONX 0.262 0.142 0.432
60 BLACK MALE MANHATTAN 0.257 0.212 0.307
60 WHITE HISPANIC FEMALE BRONX 0.236 0.161 0.332
60 BLACK HISPANIC FEMALE BRONX 0.223 0.139 0.338
60 BLACK FEMALE QUEENS 0.221 0.149 0.315
60 BLACK FEMALE BRONX 0.186 0.129 0.261
60 BLACK HISPANIC FEMALE QUEENS 0.182 0.096 0.317
60 BLACK HISPANIC FEMALE MANHATTAN 0.172 0.105 0.268
60 WHITE FEMALE QUEENS 0.154 0.086 0.260
60 WHITE HISPANIC FEMALE QUEENS 0.154 0.097 0.237
60 BLACK FEMALE BROOKLYN 0.135 0.096 0.188
60 WHITE HISPANIC FEMALE MANHATTAN 0.132 0.088 0.194
60 BLACK HISPANIC FEMALE BROOKLYN 0.132 0.075 0.220
60 WHITE FEMALE MANHATTAN 0.107 0.061 0.181
60 WHITE HISPANIC FEMALE BROOKLYN 0.105 0.068 0.158
60 BLACK FEMALE MANHATTAN 0.104 0.074 0.146
60 WHITE FEMALE BROOKLYN 0.098 0.058 0.162

Relative odds


contrast age odds.ratio asymp.LCL asymp.UCL p.value
BLACK BRONX / WHITE MANHATTAN 16 14.248 6.927 29.306 0.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 16 11.988 5.690 25.258 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 16 9.693 4.472 21.010 0.000
WHITE BRONX / WHITE MANHATTAN 16 7.363 2.718 19.950 0.000
BLACK QUEENS / WHITE MANHATTAN 16 4.602 2.169 9.767 0.000
BLACK BROOKLYN / WHITE MANHATTAN 16 4.417 2.169 8.994 0.000
BLACK MANHATTAN / WHITE MANHATTAN 16 2.920 1.574 5.418 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 16 2.818 1.333 5.957 0.001
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 16 2.374 1.220 4.617 0.003
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 16 2.311 0.986 5.419 0.057
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 16 2.064 0.958 4.447 0.077
BLACK HISPANIC QUEENS / WHITE MANHATTAN 16 1.953 0.769 4.958 0.322
WHITE HISPANIC QUEENS / WHITE MANHATTAN 16 1.847 0.850 4.012 0.217
WHITE BROOKLYN / WHITE MANHATTAN 16 1.020 0.497 2.092 1.000
WHITE QUEENS / WHITE MANHATTAN 16 0.985 0.455 2.131 1.000
BLACK BRONX / WHITE MANHATTAN 20 12.101 6.260 23.392 0.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 20 10.629 5.382 20.990 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 20 8.706 4.313 17.574 0.000
WHITE BRONX / WHITE MANHATTAN 20 6.912 2.592 18.437 0.000
BLACK QUEENS / WHITE MANHATTAN 20 4.282 2.158 8.499 0.000
BLACK BROOKLYN / WHITE MANHATTAN 20 3.995 2.089 7.639 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 20 2.696 1.363 5.333 0.000
BLACK MANHATTAN / WHITE MANHATTAN 20 2.642 1.501 4.648 0.000
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 20 2.242 1.220 4.118 0.002
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 20 2.211 1.011 4.832 0.044
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 20 1.949 0.967 3.928 0.073
BLACK HISPANIC QUEENS / WHITE MANHATTAN 20 1.922 0.808 4.571 0.268
WHITE HISPANIC QUEENS / WHITE MANHATTAN 20 1.794 0.884 3.639 0.175
WHITE BROOKLYN / WHITE MANHATTAN 20 1.019 0.506 2.052 1.000
WHITE QUEENS / WHITE MANHATTAN 20 1.013 0.478 2.146 1.000
BLACK BRONX / WHITE MANHATTAN 24 10.278 5.581 18.927 0.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 24 9.423 5.018 17.698 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 24 7.819 4.087 14.957 0.000
WHITE BRONX / WHITE MANHATTAN 24 6.489 2.462 17.103 0.000
BLACK QUEENS / WHITE MANHATTAN 24 3.984 2.116 7.503 0.000
BLACK BROOKLYN / WHITE MANHATTAN 24 3.613 1.985 6.575 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 24 2.579 1.374 4.843 0.000
BLACK MANHATTAN / WHITE MANHATTAN 24 2.390 1.417 4.030 0.000
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 24 2.117 1.206 3.717 0.002
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 24 2.114 1.020 4.383 0.040
BLACK HISPANIC QUEENS / WHITE MANHATTAN 24 1.891 0.833 4.291 0.235
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 24 1.840 0.962 3.519 0.080
WHITE HISPANIC QUEENS / WHITE MANHATTAN 24 1.742 0.905 3.353 0.152
WHITE QUEENS / WHITE MANHATTAN 24 1.041 0.499 2.172 1.000
WHITE BROOKLYN / WHITE MANHATTAN 24 1.019 0.514 2.022 1.000
BLACK BRONX / WHITE MANHATTAN 28 8.729 4.891 15.578 0.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 28 8.355 4.594 15.194 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 28 7.023 3.790 13.013 0.000
WHITE BRONX / WHITE MANHATTAN 28 6.092 2.330 15.930 0.000
BLACK QUEENS / WHITE MANHATTAN 28 3.707 2.037 6.748 0.000
BLACK BROOKLYN / WHITE MANHATTAN 28 3.267 1.855 5.756 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 28 2.468 1.359 4.479 0.000
BLACK MANHATTAN / WHITE MANHATTAN 28 2.162 1.320 3.542 0.000
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 28 2.022 1.007 4.061 0.046
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 28 1.999 1.174 3.406 0.003
BLACK HISPANIC QUEENS / WHITE MANHATTAN 28 1.860 0.841 4.115 0.229
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 28 1.737 0.940 3.210 0.108
WHITE HISPANIC QUEENS / WHITE MANHATTAN 28 1.692 0.909 3.150 0.154
WHITE QUEENS / WHITE MANHATTAN 28 1.071 0.519 2.212 1.000
WHITE BROOKLYN / WHITE MANHATTAN 28 1.019 0.518 2.002 1.000
BLACK BRONX / WHITE MANHATTAN 32 7.414 4.203 13.079 0.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 32 7.407 4.118 13.323 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 32 6.307 3.426 11.613 0.000
WHITE BRONX / WHITE MANHATTAN 32 5.719 2.196 14.897 0.000
BLACK QUEENS / WHITE MANHATTAN 32 3.449 1.919 6.201 0.000
BLACK BROOKLYN / WHITE MANHATTAN 32 2.955 1.699 5.141 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 32 2.361 1.317 4.231 0.000
BLACK MANHATTAN / WHITE MANHATTAN 32 1.956 1.209 3.164 0.001
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 32 1.934 0.970 3.854 0.071
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 32 1.888 1.122 3.177 0.006
BLACK HISPANIC QUEENS / WHITE MANHATTAN 32 1.830 0.829 4.039 0.254
WHITE HISPANIC QUEENS / WHITE MANHATTAN 32 1.644 0.892 3.028 0.190
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 32 1.640 0.899 2.990 0.178
WHITE QUEENS / WHITE MANHATTAN 32 1.101 0.536 2.265 0.999
WHITE BROOKLYN / WHITE MANHATTAN 32 1.018 0.521 1.991 1.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 36 6.567 3.610 11.946 0.000
BLACK BRONX / WHITE MANHATTAN 36 6.297 3.536 11.215 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 36 5.665 3.016 10.638 0.000
WHITE BRONX / WHITE MANHATTAN 36 5.369 2.061 13.989 0.000
BLACK QUEENS / WHITE MANHATTAN 36 3.209 1.767 5.831 0.000
BLACK BROOKLYN / WHITE MANHATTAN 36 2.673 1.523 4.690 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 36 2.259 1.248 4.089 0.001
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 36 1.849 0.912 3.749 0.132
BLACK HISPANIC QUEENS / WHITE MANHATTAN 36 1.801 0.799 4.060 0.314
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 36 1.783 1.053 3.019 0.021
BLACK MANHATTAN / WHITE MANHATTAN 36 1.770 1.089 2.875 0.010
WHITE HISPANIC QUEENS / WHITE MANHATTAN 36 1.597 0.855 2.980 0.275
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 36 1.548 0.841 2.849 0.325
WHITE QUEENS / WHITE MANHATTAN 36 1.133 0.550 2.334 0.997
WHITE BROOKLYN / WHITE MANHATTAN 36 1.018 0.520 1.991 1.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 40 5.823 3.099 10.939 0.000
BLACK BRONX / WHITE MANHATTAN 40 5.348 2.915 9.811 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 40 5.088 2.593 9.981 0.000
WHITE BRONX / WHITE MANHATTAN 40 5.041 1.926 13.191 0.000
BLACK QUEENS / WHITE MANHATTAN 40 2.986 1.591 5.603 0.000
BLACK BROOKLYN / WHITE MANHATTAN 40 2.417 1.338 4.366 0.000
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 40 2.161 1.156 4.037 0.006
BLACK HISPANIC QUEENS / WHITE MANHATTAN 40 1.772 0.753 4.170 0.409
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 40 1.769 0.838 3.733 0.255
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 40 1.684 0.971 2.922 0.076
BLACK MANHATTAN / WHITE MANHATTAN 40 1.601 0.965 2.656 0.086
WHITE HISPANIC QUEENS / WHITE MANHATTAN 40 1.551 0.802 3.000 0.415
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 40 1.462 0.770 2.773 0.551
WHITE QUEENS / WHITE MANHATTAN 40 1.165 0.561 2.419 0.992
WHITE BROOKLYN / WHITE MANHATTAN 40 1.018 0.518 2.001 1.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 44 5.162 2.613 10.200 0.000
WHITE BRONX / WHITE MANHATTAN 44 4.732 1.793 12.489 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 44 4.569 2.186 9.550 0.000
BLACK BRONX / WHITE MANHATTAN 44 4.542 2.362 8.734 0.000
BLACK QUEENS / WHITE MANHATTAN 44 2.778 1.407 5.486 0.000
BLACK BROOKLYN / WHITE MANHATTAN 44 2.186 1.155 4.137 0.006
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 44 2.067 1.052 4.061 0.026
BLACK HISPANIC QUEENS / WHITE MANHATTAN 44 1.743 0.696 4.365 0.526
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 44 1.691 0.755 3.790 0.440
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 44 1.590 0.880 2.873 0.226
WHITE HISPANIC QUEENS / WHITE MANHATTAN 44 1.506 0.737 3.078 0.589
BLACK MANHATTAN / WHITE MANHATTAN 44 1.448 0.842 2.491 0.382
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 44 1.380 0.692 2.751 0.779
WHITE QUEENS / WHITE MANHATTAN 44 1.198 0.569 2.522 0.984
WHITE BROOKLYN / WHITE MANHATTAN 44 1.017 0.512 2.021 1.000
WHITE HISPANIC BRONX / WHITE MANHATTAN 48 4.577 2.171 9.649 0.000
WHITE BRONX / WHITE MANHATTAN 48 4.442 1.662 11.871 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 48 4.104 1.816 9.276 0.000
BLACK BRONX / WHITE MANHATTAN 48 3.858 1.888 7.884 0.000
BLACK QUEENS / WHITE MANHATTAN 48 2.585 1.226 5.453 0.004
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 48 1.978 0.943 4.146 0.092
BLACK BROOKLYN / WHITE MANHATTAN 48 1.977 0.983 3.975 0.061
BLACK HISPANIC QUEENS / WHITE MANHATTAN 48 1.715 0.634 4.639 0.647
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 48 1.618 0.669 3.909 0.642
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 48 1.502 0.788 2.863 0.479
WHITE HISPANIC QUEENS / WHITE MANHATTAN 48 1.463 0.668 3.206 0.750
BLACK MANHATTAN / WHITE MANHATTAN 48 1.310 0.726 2.365 0.793
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 48 1.303 0.613 2.769 0.923
WHITE QUEENS / WHITE MANHATTAN 48 1.232 0.574 2.643 0.973
WHITE BROOKLYN / WHITE MANHATTAN 48 1.017 0.504 2.050 1.000
WHITE BRONX / WHITE MANHATTAN 52 4.170 1.536 11.327 0.001
WHITE HISPANIC BRONX / WHITE MANHATTAN 52 4.058 1.784 9.229 0.000
BLACK HISPANIC BRONX / WHITE MANHATTAN 52 3.686 1.491 9.112 0.001
BLACK BRONX / WHITE MANHATTAN 52 3.277 1.493 7.193 0.000
BLACK QUEENS / WHITE MANHATTAN 52 2.405 1.056 5.481 0.029
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 52 1.892 0.836 4.280 0.230
BLACK BROOKLYN / WHITE MANHATTAN 52 1.788 0.828 3.861 0.267
BLACK HISPANIC QUEENS / WHITE MANHATTAN 52 1.688 0.571 4.990 0.753
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 52 1.547 0.586 4.081 0.805
WHITE HISPANIC QUEENS / WHITE MANHATTAN 52 1.421 0.598 3.377 0.865
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 52 1.419 0.698 2.881 0.735
WHITE QUEENS / WHITE MANHATTAN 52 1.267 0.577 2.785 0.959
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 52 1.230 0.536 2.820 0.982
BLACK MANHATTAN / WHITE MANHATTAN 52 1.186 0.620 2.266 0.977
WHITE BROOKLYN / WHITE MANHATTAN 52 1.017 0.495 2.089 1.000
WHITE BRONX / WHITE MANHATTAN 56 3.915 1.413 10.847 0.002
WHITE HISPANIC BRONX / WHITE MANHATTAN 56 3.598 1.454 8.900 0.001
BLACK HISPANIC BRONX / WHITE MANHATTAN 56 3.310 1.214 9.024 0.009
BLACK BRONX / WHITE MANHATTAN 56 2.783 1.171 6.616 0.010
BLACK QUEENS / WHITE MANHATTAN 56 2.238 0.902 5.556 0.118
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 56 1.810 0.735 4.457 0.427
BLACK HISPANIC QUEENS / WHITE MANHATTAN 56 1.661 0.509 5.417 0.835
BLACK BROOKLYN / WHITE MANHATTAN 56 1.617 0.692 3.781 0.603
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 56 1.480 0.509 4.299 0.907
WHITE HISPANIC QUEENS / WHITE MANHATTAN 56 1.380 0.531 3.589 0.934
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 56 1.340 0.614 2.921 0.900
WHITE QUEENS / WHITE MANHATTAN 56 1.303 0.576 2.948 0.944
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 56 1.161 0.465 2.897 0.997
BLACK MANHATTAN / WHITE MANHATTAN 56 1.073 0.526 2.187 1.000
WHITE BROOKLYN / WHITE MANHATTAN 56 1.016 0.483 2.138 1.000
WHITE BRONX / WHITE MANHATTAN 60 3.676 1.296 10.423 0.005
WHITE HISPANIC BRONX / WHITE MANHATTAN 60 3.190 1.178 8.636 0.011
BLACK HISPANIC BRONX / WHITE MANHATTAN 60 2.973 0.983 8.990 0.057
BLACK BRONX / WHITE MANHATTAN 60 2.364 0.913 6.122 0.104
BLACK QUEENS / WHITE MANHATTAN 60 2.082 0.765 5.667 0.300
BLACK HISPANIC MANHATTAN / WHITE MANHATTAN 60 1.732 0.642 4.669 0.626
BLACK HISPANIC QUEENS / WHITE MANHATTAN 60 1.634 0.451 5.923 0.893
BLACK BROOKLYN / WHITE MANHATTAN 60 1.462 0.574 3.724 0.864
BLACK HISPANIC BROOKLYN / WHITE MANHATTAN 60 1.415 0.439 4.559 0.961
WHITE QUEENS / WHITE MANHATTAN 60 1.340 0.573 3.133 0.928
WHITE HISPANIC QUEENS / WHITE MANHATTAN 60 1.340 0.468 3.837 0.970
WHITE HISPANIC MANHATTAN / WHITE MANHATTAN 60 1.265 0.537 2.979 0.972
WHITE HISPANIC BROOKLYN / WHITE MANHATTAN 60 1.096 0.401 2.996 1.000
WHITE BROOKLYN / WHITE MANHATTAN 60 1.016 0.470 2.195 1.000
BLACK MANHATTAN / WHITE MANHATTAN 60 0.970 0.444 2.122 1.000

Conclusion

Column

Conclusion


“All animals are equal, but some animals are more equal that others.”


The analysis uncovers significant disparities in frisk probabilities and odds when compared to the white-in-Manhattan reference group, with variations across race, sex, borough, and age. Additionally, it highlights substantial uncertainties in the data-an aspect often overlooked in public discourse. By incorporating both these estimates and their uncertainties, the public can take a more informed and measured approach in evaluating whether and to what extent Stop, Question, and Frisk deviates from the principles of equal protection.


Column

---
title: "Analyzing the Stop, Question, and Frisk Program: A Statistical Approach to Equal Protection"
author: "by Mauricio Claudio"
output: 
  flexdashboard::flex_dashboard:
    theme: simplex
    orientation: columns
    vertical_layout: fill
    source_code: embed
---

---
title: "Analyzing the Stop, Question, and Frisk Program: A Statistical Approach to Equal Protection"
author: ''
output: flexdashboard::flex_dashboard
---



```{r setup, include=FALSE}
library(ggstream)
library(sjPlot)
library(DT)
library(flexdashboard)
library(vembedr)
library(glmtoolbox)
library(knitr)
library(plotly)
library(performance)
library(summarytools)
library(tidyverse)
library(emmeans)
library(parcats)
library(easyalluvial)

raw.dat = read.csv("sqf-2023.csv")
```


```{r message=FALSE, warning=FALSE}
NYPDfrisk2018 = raw.dat |>
   dplyr::select(SUSPECT_REPORTED_AGE,
                 FRISKED_FLAG,
                 SUSPECT_SEX,
                 SUSPECT_RACE_DESCRIPTION,
                 STOP_LOCATION_BORO_NAME) |>
   filter(SUSPECT_RACE_DESCRIPTION!='(null)',
          SUSPECT_SEX!='(null)',
          SUSPECT_RACE_DESCRIPTION !='MIDDLE EASTERN/SOUTHWEST ASIAN',
          SUSPECT_RACE_DESCRIPTION !='AMERICAN INDIAN/ALASKAN NATIVE',
          SUSPECT_RACE_DESCRIPTION !='ASIAN / PACIFIC ISLANDER',
          STOP_LOCATION_BORO_NAME != 'STATEN ISLAND') |>
   mutate(frisked = factor(ifelse(FRISKED_FLAG=='Y','yes','no')),
          boro = factor(STOP_LOCATION_BORO_NAME,
                        c('MANHATTAN','BRONX','BROOKLYN','QUEENS')),
          age = as.integer(SUSPECT_REPORTED_AGE),
          sex = factor(SUSPECT_SEX),
          race = factor(SUSPECT_RACE_DESCRIPTION,
                        c('WHITE', 'WHITE HISPANIC', 'BLACK HISPANIC', 'BLACK'))) |>
   dplyr::select(race, sex, boro, age, frisked) |>
   filter(age <=60,
          age >=16) |>
   drop_na()
```



**Introduction**
=====================================  


Column {data-width=400}
-------------------------------------

### {data-padding=8 data-height=400}

#### **Summary**

In 2022, New York City Mayor E. Adams reinstated the controversial Stop, Question and Frisk program, allowing police officers to stop individuals based on reasonable suspicion and conduct body searches if necessary. The program has faced criticism, particularly after a 2013 court ruling deemed it discriminatory against minorities. Despite this, it remains in effect. This statistical analysis of the program reveals significant disparities in frisk probabilities across different race, sex, age and borough groups. It highlights the need for robust data and nuanced analysis to better understand its impact on equal protection, offering a more informed approach to the ongoing debate.

___

### {data-padding=8}


```{r}
embed_url('https://youtu.be/2_hpXMExtJ4?si=HdzelVEMgzTH5BbN') |>
   use_bs_responsive()
```



Column {data-width=600}
-------------------------------------

### {data-padding=8}

#### **Introduction**  

In 2022, shortly after taking office, New York City Mayor Eric Adams reinstated the New York Police Department's (NYPD) Stop, Question, and Frisk program. This policy allows officers to temporarily stop individuals based on reasonable suspicion. If the officer further believes the individual is armed and dangerous, a body pat-down, or frisk, is permitted. However, the program has a controversial history. In 2013, a U.S. District Court ruled that the NYPD's implementation violated equal protection constitutional provisions due to its disproportionate impact on minorities.

Despite ongoing criticism, the policy remains in use and continues to fuel debate. At the core of this debate is the issue of equal protection. Yet, advocacy efforts and media coverage often rely on inconsistent estimates of frisk occurrences. Discussions are frequently hindered by vague references to victims as "persons of color" and a lack of robust, comparative data that would allow for meaningful inferences about the affected population.

To address this gap, we conduct a statistical analysis to provide more rigorous and nuanced estimates of how the program is applied across 32 distinct race | sex | borough cohorts. Our analysis seeks to answer two key questions:  

1.	What is the probability of a frisk?

2.	How do the odds of a frisk compare to those of a white subject in Manhattan?
  
Unlike simple descriptive calculations of averages and counts, our approach estimates the relative differences and uncertainties in frisk probabilities. It also accounts for variations not only by race but also by sex, age, and borough. This method allows for more robust inferences about the broader New York City population and directly addresses concerns about equal protection.

___

Researched and engineered at **Decision Analytics Hub**  
by [Mauricio Claudio](https://www.linkedin.com/in/mauricio-claudio-550a6944/){target="_blank"} | <DecisionAnalyticsHub@proton.me>





**Data**
=====================================


Column {data-width=380}
-----------------------------------------------------------------------

### {data-padding=8}

#### **Data**

The 2023 [Stop, Question, and Frisk data](https://www.nyc.gov/site/nypd/stats/reports-analysis/stopfrisk.page){target="_blank"} used in this analysis comes from the New York Police Department website. It includes 12,035 recorded instances of police stops, each documenting key characteristics of the individual and the stop location. Each instance consists of:  
  
* Three categorical variables: *race*, *sex*, and *boro* (borough).  

* One numerical variable: *age* (the individual's age).  

* One binary outcome variable: *frisked* (indicating whether a frisk occurred).  

To maintain statistical reliability, observations for the *race* categories MIDDLE EASTERN/SOUTHWEST ASIAN, AMERICAN INDIAN/ALASKAN NATIVE, and ASIAN/PACIFIC ISLANDER, as well as stops in *boro* STATEN ISLAND, were excluded due to their small sample sizes. Additionally, only individuals aged 16 to 60 were included in the analysis.  

The graphs are interactive - hover over them for greater detail on the data!

___


Column {data-width=620 .tabset}
-----------------------------------------------------------------------

### Summary

#### Summary table
  
```{r}
### Print data summary
print(dfSummary(NYPDfrisk2018,
                graph.col=TRUE,
                graph.magnif = 1,
                plain.ascii = FALSE,
                headings = FALSE,
                display.labels = FALSE,
                silent = TRUE,
                valid.col = TRUE,
                na.col = TRUE),
      method = "render")
```
  
___
  
  
#### Grouped totals
  
```{r}
ggdat = NYPDfrisk2018 |>
  group_by(race, sex, boro, frisked) |>
  count()

ggdat |>
  mutate(PercentTotal = ( (n / nrow(NYPDfrisk2018)) *100),
          PercentTotal = round(PercentTotal, 2)) |>
  arrange(desc(frisked), desc(n)) |>
  rename(Borough=boro, Sex=sex, Race=race, Frisk=frisked, Total=n) |>
  dplyr::select(Race, Sex, Borough, Frisk, Total, PercentTotal) |>
  kable(digits=5)

```



### Stops

```{r}
library(dplyr)
library(highcharter)

hcdat = NYPDfrisk2018 |> group_by(race, sex, boro) |> count()
hc = hchart(hcdat, "packedbubble", hcaes(name = race:sex, value = n, group = boro))

hc %>%
  hc_title(
    text = "Police Stops by Borough, Race and Sex",
    margin = 20,
    align = "center",
    style = list(color = "#000000", useHTML = TRUE)
    ) |>
  hc_tooltip(
    useHTML = TRUE,
    pointFormat = "<b>{point.name}:</b> {point.value}"
  ) %>%
  hc_plotOptions(
    packedbubble = list(
      maxSize = "150%",
      zMin = 0,
      layoutAlgorithm = list(
        gravitationalConstant =  0.05,
        splitSeries =  TRUE, # TRUE to group points
        seriesInteraction = TRUE,
        dragBetweenSeries = FALSE,
        parentNodeLimit = TRUE
      ),
      dataLabels = list(
        enabled = TRUE,
        format = "{point.name}",
        filter = list(
          property = "y",
          operator = ">",
          value = 5
        ),
        style = list(
          color = "black",
          textOutline = "none",
          fontWeight = "normal"
        )
      )
    )
  )
```



### Stop outcome

```{r}
ggplotly(
   ggplot(ggdat, aes(y=reorder(race:boro, n), x=n, fill=frisked)) +
   geom_col() + theme_minimal(base_size=10) +
   facet_grid(~ factor(sex, levels = c('MALE','FEMALE')), scales='free_x') +
      scale_fill_manual(values=c('darkgreen','red3')) +
   labs(title='Stop outcome by Sex, Race & Borough',
        y='', x='Total', fill='Frisked') +
     theme(strip.text=element_text(face="bold", size=10))
)
```



### Stop outcome, rel.

```{r}
ggplotly(
   ggplot(ggdat, aes(y=reorder(race:boro, n), x=n, fill=frisked)) +
   geom_col(position='fill') + theme_minimal(base_size=10) +
   facet_grid(~ factor(sex, levels = c('MALE','FEMALE')), scales='free_x') +
      scale_fill_manual(values=c('darkgreen','red3')) +
   labs(title='Stop outcome by Sex, Race & Borough, relative',
        y='', x='Total', fill='Frisked')
)
```



### Stop outcome: Age

```{r}
ggplotly(
NYPDfrisk2018 |> group_by(frisked, age, race) |>
   rename(Frisked=frisked) |> count() |>
   ggplot(aes(x=age, y=n, fill=race)) +
   geom_col() + theme_minimal() +
   facet_wrap(~Frisked, scales='free', labeller='label_both') +
   scale_fill_manual(values = c("khaki3", "orange2", 'red2','red4')) +
   labs(title='Stop outcome by Age', x='Age', y='Total', fill='Race') +
   theme(strip.text=element_text(face="bold", color="darkgreen", hjust=0, size=10))
)
```



### Stop outcome: Age, rel.

```{r}
ggplotly(
NYPDfrisk2018 |> group_by(frisked, age, race) |>
   rename(Frisked=frisked) |> count() |>
   ggplot(aes(x=age, y=n, fill=race)) +
   geom_col(position="fill") +
   theme_minimal() +
   facet_grid(~Frisked, scales='free', labeller='label_both') +
   scale_fill_manual(values = c("khaki3", "orange2", 'red2','red4')) +
   labs(title='Stop outcome by Age, relative', x='Age', y='Total', fill='Race') +
   theme(strip.text=element_text(face="bold", color="darkgreen", hjust=0, size=10))
)
```



### Alluvial

```{r fig.height=5, fig.width=9, message=FALSE, warning=FALSE}
p <- alluvial_wide(NYPDfrisk2018 |> dplyr::select(frisked, race, sex, boro, age),
                   max_variables = 5, bin_labels = 'min_max',
                   fill_by = 'first_variable',
                   col_vector_flow = c('#01700c', '#cf0202'))

parcats(p, marginal_histograms = FALSE, data_input = NYPDfrisk2018,
        hoveron = 'category', hoverinfo = 'count', arrangement='freeform',
        sortpaths = 'forward', labelfont = list(size=24), tickfont = list(size=12))
```






```{r eval=FALSE, include=FALSE}
### Download
NYPDfrisk2018 |>
   datatable(extensions = c('Buttons','ColReorder'),
             options = list(pageLength = 100,
                            dom = 'Blrtip',
                            buttons = c('csv'),
                            colReorder = TRUE,
                            deferRender = TRUE))
```





**Method**
=====================================


Column {data-width=380}
-----------------------------------------------------------------------

### {data-padding=8}

#### **Model**

The data is analyzed using a binary logistic regression model consisting of four interaction terms: *race:boro*, *boro:sex*, *race:age*, and *boro:age*. This model was selected over alternative models based on its lower AIC and BIC scores, as well as its superior performance in posterior prediction and the Hosmer-Lemeshow goodness-of-fit test. Deviance analysis and joint tests further validate the model's fit and confirm the significance of these interaction terms.

Mean probabilities and odds-ratio contrasts are estimated with 95% confidence at four-year intervals of the age variable. The contrasts are adjusted using the Dunnett method.

The analysis is conducted in `R` (v4.1.0) and `RStudio` (v2023.12.1+402). Mean probabilities and odds-ratios are estimated with the `emmeans` library (v1.10.1). 


___


Column {.tabset data-width=620}
-----------------------------------------------------------------------

### Summary

#### Model

$$\mathbf{Y = \alpha\beta + \beta\gamma + \alpha\delta + \beta\delta}$$

$$where\ Y = frisked
\\ {\bf \alpha} = race
\\ {\bf \beta} = boro
\\ {\bf \gamma} = sex
\\ {\bf \delta} = age$$

___



#### Deviance
```{r echo=FALSE, message=FALSE, warning=FALSE}
mod1= glm(frisked ~ race:boro + race:age + sex:boro + boro:age,
           data = NYPDfrisk2018, family=binomial(link="logit"))

car::Anova(mod1)
```

___

  
#### Joint tests

```{r message=FALSE, warning=FALSE}
joint_tests(mod1)
```

___


### Diagnostics


#### Posterior Predictions
```{r fig.align='center', fig.height=5, fig.width=9}
check_predictions(mod1)
```
  
___  
___


#### Hosmer-Lemeshow test
```{r fig.align='center'}
hltest(mod1)
```



####

```{r fig.align='center'}
###
hl = data.frame(hltest(mod1, verbose=FALSE))

ggplotly(
   ggplot(hl, aes(x=hm.Observed, y=hm.Expected)) +
      geom_point(size=6, color='red3') + theme_minimal(base_size = 9) +
      geom_abline(slope = 1, color='black', alpha=0.2, size=2) +
      labs(color='Bins', x='Observed', y='Expected',
           title='Hosmer-Lemeshow goodness-of-fit test')
)
```
  
___





**Results**
=====================================


Column {data-width=380}
-----------------------------------------------------------------------

### {data-padding=8}

#### **Results**

The results are displayed on the plots and tables on the right. In the plots, the point is the estimate and the line is the 95% confidence interval around the estimate. Probabilities indistinct from random chance and relative odds at parity appear as points with muted color. ``Play`` cycles through *age* or it can be selected on the slider.   
  
**Frisk probability**  
The probability of a frisk shows great variability among the 32 *race | sex | borough* cohorts and is greatly dependent on age. At the lower age range of 16 years, the range of probabilities ranges from a high of 0.92 for a black male in the Bronx to a low of 0.16 for a white female in Brooklyn. The probability of six cohorts is indistinct from the random chance probability of 0.5.

At the mean age of 28 years, frisk probabilities continue to display great variability among cohorts, with a maximum of 0.85 for black male in the Bronx and a minimum of 0.14 for white females in Brooklyn, while the probabilities of nine cohorts are indistinct from random chance.  
  
At the upper age range of 60 years, frisk probabilities range from 0.62 for a white male in the Bronx to 0.10 for a white female in Brooklyn, with the probability of four highest cohorts indistinct from random chance. Generally, individual cohort probabilities and probability differences among cohorts both decrease with increasing age.
  
  
**Relative odds**  
The relative of odds of frisk among individual *race | borough* cohorts against the *white | Manhattan* reference cohort displays substantial variability and is highly dependent on age. At the lower age range of 16 years, a black in the Bronx has 14 times greater odds of a frisk than the reference cohort while the odds of a white Hispanic are 2.4 times greater. 

At the mean age of 28 years, relative odds display substantial variability among cohorts, with blacks in the Bronx having 8.7 times and white Hispanics 8.4 greater odds of a frisk than the reference cohort. By contrast, white Hispanics in Queens and Brooklyn have equal odds to the reference cohort.   
  
At the upper age range of 60 years, a white in the Bronx has 3.7 times greater odds than the reference cohorts while a white Hispanic in the same borough has 3.2 times greater odds. All other relative odds at this age are indistinct from parity. Generally, the individual cohort odds of a frisk and the odds differences among cohorts both decrease with increasing age.  
  
___


Column {data-width=620 .tabset}
-----------------------------------------------------------------------

### Frisk probability


```{r message=FALSE, warning=FALSE}
###
age.dat = data.frame(emmeans(object=mod1,
        specs = ~race:sex:boro,
        by='age', at = list(age = seq(16,60,4)),
        level=0.95, type='response')) |> dplyr::select(-SE, -df) |>
   mutate(ctr = factor(paste(race, sex, 'in', boro)),
          chance = ifelse(asymp.LCL > 0.5 | asymp.UCL < 0.5, 1, 0.5))

###
ggplotly(
   ggplot(age.dat, aes(x=prob, y=reorder(ctr, prob), frame=age)) +
      geom_pointrange(aes(xmin=asymp.LCL, xmax=asymp.UCL,
                          color=sex, alpha=chance), size=2) +
      labs(title='Frisk probability by Race, Sex, Borough and Age',
           y='', x='Probability', alpha='') +
      geom_vline(xintercept = 0.50, linetype='dotted') +
      theme_minimal(base_size = 9) + scale_x_continuous(breaks=seq(0,1,0.1)) +
      scale_color_manual(values = c("FEMALE"="red4", "MALE" = 'dodgerblue4'))
) |> animation_slider(currentvalue=list(prefix="Age: ", font=list(color="darkred")))
```




  
___
  
  
####

```{r echo=FALSE, warning=FALSE}
age.dat |> dplyr::select(age, race, sex, boro, prob, asymp.LCL, asymp.UCL) |>
   arrange(age, desc(prob)) |>
   kable(digits=3)
```
  
___



### Relative odds

```{r message=FALSE, warning=FALSE}
odds.dat = emmeans(mod1, "trt.vs.ctrl" ~ race:boro,
             by='age', at = list(age = seq(16,60,4)),
             level=0.95, type='response', infer=TRUE)

odds.dat = data.frame(odds.dat$contrasts) |>
   dplyr::select(-SE, -df, -null, -z.ratio) |>
   mutate(age=as.integer(as.character(age)),
          significant=ifelse(p.value<=0.05, 1, 0))

#glimpse(odds.dat)

ggplotly(
   ggplot(odds.dat,
          aes(x=odds.ratio, y=reorder(contrast, odds.ratio), frame=age,
              alpha=significant)) +
      geom_pointrange(aes(xmin=asymp.LCL, xmax=asymp.UCL),
                      size=4, color='red4') +
      labs(title='Relative odds by Race, Borough and Age',
           y='', x='Odds') +
      geom_vline(xintercept = 1, linetype='dotted') +
      theme_minimal(base_size = 10) +
      scale_x_continuous(breaks=seq(0,30,10))
) |> animation_slider(currentvalue=list(prefix="Age: ", font=list(color="darkred")))
```
  
___
  
  
#### 

```{r}
### 5.
odds.dat |>
  arrange(age, desc(odds.ratio)) |>
  dplyr::select(-significant) |>
  kable(digit=3) #|>
  # datatable(extensions = c('Buttons'),
  #           options = list(pageLength = 15,
  #                           dom = 'Blrtip',
  #                           buttons = c('copy', 'pdf', 'csv'))) |>
  #  formatRound(columns=c('odds.ratio',
  #                        'asymp.LCL',
  #                        'asymp.UCL',
  #                        'p.value'), digits=5)
```






**Conclusion**
=====================================


Column {data-width=380}
-----------------------------------------------------------------------

### {data-padding=8}


#### **Conclusion**
  
<br>  

*"All animals are equal, but some animals are more equal that others."*  
  
<br>

The analysis uncovers significant disparities in frisk probabilities and odds when compared to the white-in-Manhattan reference group, with variations across race, sex, borough, and age. Additionally, it highlights substantial uncertainties in the data-an aspect often overlooked in public discourse. By incorporating both these estimates and their uncertainties, the public can take a more informed and measured approach in evaluating whether and to what extent Stop, Question, and Frisk deviates from the principles of equal protection. 
  
___





Column {data-width=620}
-----------------------------------------------------------------------

### 
![](img1.jpeg)