The DisImpact
R package contains functions that help in
determining disproportionate impact (DI) based on the following
methodologies:
To illustrate the functionality of the package, let’s load a toy data set:
## Ethnicity Gender Cohort Transfer Cohort_Math Math Cohort_English
## 1 Native American Female 2017 0 2017 1 2017
## 2 Native American Female 2017 0 2018 1 NA
## 3 Native American Female 2017 0 2018 1 2017
## 4 Native American Male 2017 1 2017 1 2018
## 5 Native American Male 2017 0 2017 1 2019
## 6 Native American Male 2017 1 2019 1 2018
## English Ed_Goal College_Status Student_ID EthnicityFlag_Asian
## 1 0 Deg/Transfer First-time College 100001 0
## 2 NA Deg/Transfer First-time College 100002 0
## 3 0 Deg/Transfer First-time College 100003 0
## 4 1 Other First-time College 100004 0
## 5 0 Deg/Transfer Other 100005 0
## 6 1 Other First-time College 100006 0
## EthnicityFlag_Black EthnicityFlag_Hispanic EthnicityFlag_NativeAmerican
## 1 0 0 1
## 2 0 0 1
## 3 0 0 1
## 4 0 0 1
## 5 0 0 1
## 6 0 0 1
## EthnicityFlag_PacificIslander EthnicityFlag_White EthnicityFlag_Carribean
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## EthnicityFlag_EastAsian EthnicityFlag_SouthEastAsian
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
## EthnicityFlag_SouthWestAsianNorthAfrican EthnicityFlag_AANAPI
## 1 0 1
## 2 0 1
## 3 0 1
## 4 0 1
## 5 0 1
## 6 0 1
## EthnicityFlag_Unknown EthnicityFlag_TwoorMoreRaces
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
For a description of the student_equity
data set, type
?student_equity
in the R console.
The toy data set can be summarized as follows:
## [1] 20000 24
dSumm <- student_equity %>%
group_by(Cohort, Ethnicity) %>%
summarize(n=n(), Transfer_Rate=mean(Transfer))
## `summarise()` has grouped output by 'Cohort'. You can override using the
## `.groups` argument.
## # A tibble: 12 × 4
## # Groups: Cohort [2]
## Cohort Ethnicity n Transfer_Rate
## <int> <chr> <int> <dbl>
## 1 2017 Asian 3000 0.687
## 2 2017 Black 1000 0.31
## 3 2017 Hispanic 2000 0.205
## 4 2017 Multi-Ethnicity 500 0.524
## 5 2017 Native American 100 0.43
## 6 2017 White 3400 0.604
## 7 2018 Asian 3000 0.743
## 8 2018 Black 1000 0.297
## 9 2018 Hispanic 2000 0.218
## 10 2018 Multi-Ethnicity 500 0.484
## 11 2018 Native American 100 0.35
## 12 2018 White 3400 0.631
di_ppg
is the main work function, and it can take on
vectors or column names the tidy way:
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5264 overall 0.03000000
## 2 Black 2000 607 0.3035000 0.5264 overall 0.03000000
## 3 Hispanic 4000 847 0.2117500 0.5264 overall 0.03000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.5264 overall 0.03099032
## 5 Native American 200 78 0.3900000 0.5264 overall 0.06929646
## 6 White 6800 4200 0.6176471 0.5264 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6853333 0.7453333 0 0
## 2 0.2735000 0.3335000 1 386
## 3 0.1817500 0.2417500 1 1139
## 4 0.4730097 0.5349903 0 0
## 5 0.3207035 0.4592965 1 14
## 6 0.5876471 0.6476471 0 0
## success_needed_full_parity
## 1 0
## 2 446
## 3 1259
## 4 23
## 5 28
## 6 0
# Tidy and column reference
di_ppg(success=Transfer, group=Ethnicity, data=student_equity) %>%
as.data.frame
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5264 overall 0.03000000
## 2 Black 2000 607 0.3035000 0.5264 overall 0.03000000
## 3 Hispanic 4000 847 0.2117500 0.5264 overall 0.03000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.5264 overall 0.03099032
## 5 Native American 200 78 0.3900000 0.5264 overall 0.06929646
## 6 White 6800 4200 0.6176471 0.5264 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6853333 0.7453333 0 0
## 2 0.2735000 0.3335000 1 386
## 3 0.1817500 0.2417500 1 1139
## 4 0.4730097 0.5349903 0 0
## 5 0.3207035 0.4592965 1 14
## 6 0.5876471 0.6476471 0 0
## success_needed_full_parity
## 1 0
## 2 446
## 3 1259
## 4 23
## 5 28
## 6 0
For a description of the di_ppg
function, including both
function arguments and returned results, type ?di_ppg
in
the R console.
Sometimes, one might want to break out the DI calculation by cohort:
# Cohort
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.5140 overall
## 2 2017 Black 1000 310 0.3100000 0.5140 overall
## 3 2017 Hispanic 2000 410 0.2050000 0.5140 overall
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.5140 overall
## 5 2017 Native American 100 43 0.4300000 0.5140 overall
## 6 2017 White 3400 2053 0.6038235 0.5140 overall
## 7 2018 Asian 3000 2230 0.7433333 0.5388 overall
## 8 2018 Black 1000 297 0.2970000 0.5388 overall
## 9 2018 Hispanic 2000 437 0.2185000 0.5388 overall
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.5388 overall
## 11 2018 Native American 100 35 0.3500000 0.5388 overall
## 12 2018 White 3400 2147 0.6314706 0.5388 overall
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 174
## 3 0.03000000 0.1750000 0.2350000 1 558
## 4 0.04382693 0.4801731 0.5678269 0 0
## 5 0.09800000 0.3320000 0.5280000 0 0
## 6 0.03000000 0.5738235 0.6338235 0 0
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 211
## 9 0.03000000 0.1885000 0.2485000 1 581
## 10 0.04382693 0.4401731 0.5278269 1 6
## 11 0.09800000 0.2520000 0.4480000 1 10
## 12 0.03000000 0.6014706 0.6614706 0 0
## success_needed_full_parity
## 1 0
## 2 205
## 3 619
## 4 0
## 5 9
## 6 0
## 7 0
## 8 242
## 9 641
## 10 28
## 11 19
## 12 0
di_ppg
is also applicable to summarized data; just pass
the counts to success
and group size to
weight
. For example, we use the summarized data set,
dSumm
, and sample size n
, in the
following:
di_ppg(success=Transfer_Rate*n, group=Ethnicity, cohort=Cohort, weight=n, data=dSumm) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.5140 overall
## 2 2017 Black 1000 310 0.3100000 0.5140 overall
## 3 2017 Hispanic 2000 410 0.2050000 0.5140 overall
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.5140 overall
## 5 2017 Native American 100 43 0.4300000 0.5140 overall
## 6 2017 White 3400 2053 0.6038235 0.5140 overall
## 7 2018 Asian 3000 2230 0.7433333 0.5388 overall
## 8 2018 Black 1000 297 0.2970000 0.5388 overall
## 9 2018 Hispanic 2000 437 0.2185000 0.5388 overall
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.5388 overall
## 11 2018 Native American 100 35 0.3500000 0.5388 overall
## 12 2018 White 3400 2147 0.6314706 0.5388 overall
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 174
## 3 0.03000000 0.1750000 0.2350000 1 558
## 4 0.04382693 0.4801731 0.5678269 0 0
## 5 0.09800000 0.3320000 0.5280000 0 0
## 6 0.03000000 0.5738235 0.6338235 0 0
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 211
## 9 0.03000000 0.1885000 0.2485000 1 581
## 10 0.04382693 0.4401731 0.5278269 1 6
## 11 0.09800000 0.2520000 0.4480000 1 10
## 12 0.03000000 0.6014706 0.6614706 0 0
## success_needed_full_parity
## 1 0
## 2 205
## 3 619
## 4 0
## 5 9
## 6 0
## 7 0
## 8 242
## 9 641
## 10 28
## 11 19
## 12 0
By default, di_ppg
uses the overall success rate as the
reference rate for comparison (default:
reference='overall'
). The reference
argument
also accepts 'hpg'
(highest performing group success rate
as the reference rate), 'all but current'
(success rate of
all groups combined excluding the comparison group), or a group value
from group
.
# Reference: Highest performing group
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, reference='hpg', data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6873333 Asian
## 2 2017 Black 1000 310 0.3100000 0.6873333 Asian
## 3 2017 Hispanic 2000 410 0.2050000 0.6873333 Asian
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6873333 Asian
## 5 2017 Native American 100 43 0.4300000 0.6873333 Asian
## 6 2017 White 3400 2053 0.6038235 0.6873333 Asian
## 7 2018 Asian 3000 2230 0.7433333 0.7433333 Asian
## 8 2018 Black 1000 297 0.2970000 0.7433333 Asian
## 9 2018 Hispanic 2000 437 0.2185000 0.7433333 Asian
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.7433333 Asian
## 11 2018 Native American 100 35 0.3500000 0.7433333 Asian
## 12 2018 White 3400 2147 0.6314706 0.7433333 Asian
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 347
## 3 0.03000000 0.1750000 0.2350000 1 905
## 4 0.04382693 0.4801731 0.5678269 1 60
## 5 0.09800000 0.3320000 0.5280000 1 16
## 6 0.03000000 0.5738235 0.6338235 1 182
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 416
## 9 0.03000000 0.1885000 0.2485000 1 990
## 10 0.04382693 0.4401731 0.5278269 1 108
## 11 0.09800000 0.2520000 0.4480000 1 30
## 12 0.03000000 0.6014706 0.6614706 1 279
## success_needed_full_parity
## 1 0
## 2 378
## 3 965
## 4 82
## 5 26
## 6 284
## 7 0
## 8 447
## 9 1050
## 10 130
## 11 40
## 12 381
# Reference: All but current (PPG minus 1)
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, reference='all but current', data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.4397143 all but current
## 2 2017 Black 1000 310 0.3100000 0.5366667 all but current
## 3 2017 Hispanic 2000 410 0.2050000 0.5912500 all but current
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.5134737 all but current
## 5 2017 Native American 100 43 0.4300000 0.5148485 all but current
## 6 2017 White 3400 2053 0.6038235 0.4677273 all but current
## 7 2018 Asian 3000 2230 0.7433333 0.4511429 all but current
## 8 2018 Black 1000 297 0.2970000 0.5656667 all but current
## 9 2018 Hispanic 2000 437 0.2185000 0.6188750 all but current
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.5416842 all but current
## 11 2018 Native American 100 35 0.3500000 0.5407071 all but current
## 12 2018 White 3400 2147 0.6314706 0.4910606 all but current
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 196
## 3 0.03000000 0.1750000 0.2350000 1 713
## 4 0.04382693 0.4801731 0.5678269 0 0
## 5 0.09800000 0.3320000 0.5280000 0 0
## 6 0.03000000 0.5738235 0.6338235 0 0
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 238
## 9 0.03000000 0.1885000 0.2485000 1 741
## 10 0.04382693 0.4401731 0.5278269 1 7
## 11 0.09800000 0.2520000 0.4480000 1 10
## 12 0.03000000 0.6014706 0.6614706 0 0
## success_needed_full_parity
## 1 0
## 2 227
## 3 773
## 4 0
## 5 9
## 6 0
## 7 0
## 8 269
## 9 801
## 10 29
## 11 20
## 12 0
# Reference: custom group
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, reference='White', data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6038235 White
## 2 2017 Black 1000 310 0.3100000 0.6038235 White
## 3 2017 Hispanic 2000 410 0.2050000 0.6038235 White
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6038235 White
## 5 2017 Native American 100 43 0.4300000 0.6038235 White
## 6 2017 White 3400 2053 0.6038235 0.6038235 White
## 7 2018 Asian 3000 2230 0.7433333 0.6314706 White
## 8 2018 Black 1000 297 0.2970000 0.6314706 White
## 9 2018 Hispanic 2000 437 0.2185000 0.6314706 White
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.6314706 White
## 11 2018 Native American 100 35 0.3500000 0.6314706 White
## 12 2018 White 3400 2147 0.6314706 0.6314706 White
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 263
## 3 0.03000000 0.1750000 0.2350000 1 738
## 4 0.04382693 0.4801731 0.5678269 1 18
## 5 0.09800000 0.3320000 0.5280000 1 8
## 6 0.03000000 0.5738235 0.6338235 0 0
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 304
## 9 0.03000000 0.1885000 0.2485000 1 766
## 10 0.04382693 0.4401731 0.5278269 1 52
## 11 0.09800000 0.2520000 0.4480000 1 19
## 12 0.03000000 0.6014706 0.6614706 0 0
## success_needed_full_parity
## 1 0
## 2 294
## 3 798
## 4 40
## 5 18
## 6 0
## 7 0
## 8 335
## 9 826
## 10 74
## 11 29
## 12 0
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, reference='Asian', data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6873333 Asian
## 2 2017 Black 1000 310 0.3100000 0.6873333 Asian
## 3 2017 Hispanic 2000 410 0.2050000 0.6873333 Asian
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6873333 Asian
## 5 2017 Native American 100 43 0.4300000 0.6873333 Asian
## 6 2017 White 3400 2053 0.6038235 0.6873333 Asian
## 7 2018 Asian 3000 2230 0.7433333 0.7433333 Asian
## 8 2018 Black 1000 297 0.2970000 0.7433333 Asian
## 9 2018 Hispanic 2000 437 0.2185000 0.7433333 Asian
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.7433333 Asian
## 11 2018 Native American 100 35 0.3500000 0.7433333 Asian
## 12 2018 White 3400 2147 0.6314706 0.7433333 Asian
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 347
## 3 0.03000000 0.1750000 0.2350000 1 905
## 4 0.04382693 0.4801731 0.5678269 1 60
## 5 0.09800000 0.3320000 0.5280000 1 16
## 6 0.03000000 0.5738235 0.6338235 1 182
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 416
## 9 0.03000000 0.1885000 0.2485000 1 990
## 10 0.04382693 0.4401731 0.5278269 1 108
## 11 0.09800000 0.2520000 0.4480000 1 30
## 12 0.03000000 0.6014706 0.6614706 1 279
## success_needed_full_parity
## 1 0
## 2 378
## 3 965
## 4 82
## 5 26
## 6 284
## 7 0
## 8 447
## 9 1050
## 10 130
## 11 40
## 12 381
The user could also pass in custom reference points for comparison
(e.g., a state-wide rate). di_ppg
accepts either a single
reference point to be used or a vector of reference points, one for each
cohort. For the latter, the vector of reference points will be taken to
correspond to the cohort
variable, alphabetically
ordered.
# With custom reference (single)
di_ppg(success=Transfer, group=Ethnicity, reference=0.54, data=student_equity) %>%
as.data.frame
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.54 numeric 0.03000000
## 2 Black 2000 607 0.3035000 0.54 numeric 0.03000000
## 3 Hispanic 4000 847 0.2117500 0.54 numeric 0.03000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.54 numeric 0.03099032
## 5 Native American 200 78 0.3900000 0.54 numeric 0.06929646
## 6 White 6800 4200 0.6176471 0.54 numeric 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6853333 0.7453333 0 0
## 2 0.2735000 0.3335000 1 414
## 3 0.1817500 0.2417500 1 1193
## 4 0.4730097 0.5349903 1 6
## 5 0.3207035 0.4592965 1 17
## 6 0.5876471 0.6476471 0 0
## success_needed_full_parity
## 1 0
## 2 474
## 3 1314
## 4 37
## 5 31
## 6 0
# With custom reference (multiple)
di_ppg(success=Transfer, group=Ethnicity, cohort=Cohort, reference=c(0.5, 0.55), data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.50 numeric
## 2 2017 Black 1000 310 0.3100000 0.50 numeric
## 3 2017 Hispanic 2000 410 0.2050000 0.50 numeric
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.50 numeric
## 5 2017 Native American 100 43 0.4300000 0.50 numeric
## 6 2017 White 3400 2053 0.6038235 0.50 numeric
## 7 2018 Asian 3000 2230 0.7433333 0.55 numeric
## 8 2018 Black 1000 297 0.2970000 0.55 numeric
## 9 2018 Hispanic 2000 437 0.2185000 0.55 numeric
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.55 numeric
## 11 2018 Native American 100 35 0.3500000 0.55 numeric
## 12 2018 White 3400 2147 0.6314706 0.55 numeric
## moe pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.03000000 0.6573333 0.7173333 0 0
## 2 0.03099032 0.2790097 0.3409903 1 160
## 3 0.03000000 0.1750000 0.2350000 1 530
## 4 0.04382693 0.4801731 0.5678269 0 0
## 5 0.09800000 0.3320000 0.5280000 0 0
## 6 0.03000000 0.5738235 0.6338235 0 0
## 7 0.03000000 0.7133333 0.7733333 0 0
## 8 0.03099032 0.2660097 0.3279903 1 223
## 9 0.03000000 0.1885000 0.2485000 1 604
## 10 0.04382693 0.4401731 0.5278269 1 12
## 11 0.09800000 0.2520000 0.4480000 1 11
## 12 0.03000000 0.6014706 0.6614706 0 0
## success_needed_full_parity
## 1 0
## 2 190
## 3 591
## 4 0
## 5 8
## 6 0
## 7 0
## 8 254
## 9 663
## 10 34
## 11 21
## 12 0
Disproportionate impact using the PPG relies on calculating the
margine margin of error (MOE) pertaining around the success rate. The
MOE calculated in di_ppg
has 2 underlying assumptions
(defaults):
To override 1, the user could specify min_moe
in
di_ppg
. To override 2, the user could specify
use_prop_in_moe=TRUE
in di_ppg
.
# min_moe
di_ppg(success=Transfer, group=Ethnicity, data=student_equity, min_moe=0.02) %>%
as.data.frame
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5264 overall 0.02000000
## 2 Black 2000 607 0.3035000 0.5264 overall 0.02191347
## 3 Hispanic 4000 847 0.2117500 0.5264 overall 0.02000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.5264 overall 0.03099032
## 5 Native American 200 78 0.3900000 0.5264 overall 0.06929646
## 6 White 6800 4200 0.6176471 0.5264 overall 0.02000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6953333 0.7353333 0 0
## 2 0.2815865 0.3254135 1 402
## 3 0.1917500 0.2317500 1 1179
## 4 0.4730097 0.5349903 0 0
## 5 0.3207035 0.4592965 1 14
## 6 0.5976471 0.6376471 0 0
## success_needed_full_parity
## 1 0
## 2 446
## 3 1259
## 4 23
## 5 28
## 6 0
# use_prop_in_moe
di_ppg(success=Transfer, group=Ethnicity, data=student_equity, min_moe=0.02, use_prop_in_moe=TRUE) %>%
as.data.frame
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5264 overall 0.02000000
## 2 Black 2000 607 0.3035000 0.5264 overall 0.02015028
## 3 Hispanic 4000 847 0.2117500 0.5264 overall 0.02000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.5264 overall 0.03098933
## 5 Native American 200 78 0.3900000 0.5264 overall 0.06759869
## 6 White 6800 4200 0.6176471 0.5264 overall 0.02000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6953333 0.7353333 0 0
## 2 0.2833497 0.3236503 1 406
## 3 0.1917500 0.2317500 1 1179
## 4 0.4730107 0.5349893 0 0
## 5 0.3224013 0.4575987 1 14
## 6 0.5976471 0.6376471 0 0
## success_needed_full_parity
## 1 0
## 2 446
## 3 1259
## 4 23
## 5 28
## 6 0
In cases where the proportion is used in calculating MOE, an observed
proportion of 0 or 1 would lead to a zero MOE. To account for these
scenarios, the user could leverage the prop_sub_0
and
prop_sub_1
parameters in di_ppg
and
ppg_moe
as substitutes. These parameters default to
0.5
, which maximizes the MOE (making it more difficult to
declare disproportionate impact).
# Set Native American to have have zero transfers and see what the results
di_ppg(success=Transfer, group=Ethnicity, data=student_equity %>% mutate(Transfer=ifelse(Ethnicity=='Native American', 0, Transfer)), use_prop_in_moe=TRUE, prop_sub_0=0.1, prop_sub_1=0.9) %>%
as.data.frame
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `moe = if (...) NULL`.
## Caused by warning in `ppg_moe()`:
## ! The vector `proportion` contains 0. This will lead to a zero MOE. `prop_sub_0=0.1` will be used in calculating the MOE for these cases.
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5225 overall 0.03000000
## 2 Black 2000 607 0.3035000 0.5225 overall 0.03000000
## 3 Hispanic 4000 847 0.2117500 0.5225 overall 0.03000000
## 4 Multi-Ethnicity 1000 504 0.5040000 0.5225 overall 0.03098933
## 5 Native American 200 0 0.0000000 0.5225 overall 0.04157788
## 6 White 6800 4200 0.6176471 0.5225 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.68533333 0.74533333 0 0
## 2 0.27350000 0.33350000 1 378
## 3 0.18175000 0.24175000 1 1123
## 4 0.47301067 0.53498933 0 0
## 5 -0.04157788 0.04157788 1 97
## 6 0.58764706 0.64764706 0 0
## success_needed_full_parity
## 1 0
## 2 438
## 3 1243
## 4 19
## 5 105
## 6 0
di_prop_index
is the main work function for this method,
and it can take on vectors or column names the tidy way:
# Without cohort
## Vector
di_prop_index(success=student_equity$Transfer, group=student_equity$Ethnicity) %>% as.data.frame
## group n success pct_success pct_group di_prop_index di_indicator
## 1 Asian 6000 4292 0.407674772 0.30 1.3589159 0
## 2 Black 2000 607 0.057655775 0.10 0.5765578 1
## 3 Hispanic 4000 847 0.080452128 0.20 0.4022606 1
## 4 Multi-Ethnicity 1000 504 0.047872340 0.05 0.9574468 0
## 5 Native American 200 78 0.007408815 0.01 0.7408815 1
## 6 White 6800 4200 0.398936170 0.34 1.1733417 0
## success_needed_not_di success_needed_full_parity
## 1 0 0
## 2 256 496
## 3 998 1574
## 4 0 24
## 5 7 28
## 6 0 0
## Tidy and column reference
di_prop_index(success=Transfer, group=Ethnicity, data=student_equity) %>%
as.data.frame
## group n success pct_success pct_group di_prop_index di_indicator
## 1 Asian 6000 4292 0.407674772 0.30 1.3589159 0
## 2 Black 2000 607 0.057655775 0.10 0.5765578 1
## 3 Hispanic 4000 847 0.080452128 0.20 0.4022606 1
## 4 Multi-Ethnicity 1000 504 0.047872340 0.05 0.9574468 0
## 5 Native American 200 78 0.007408815 0.01 0.7408815 1
## 6 White 6800 4200 0.398936170 0.34 1.1733417 0
## success_needed_not_di success_needed_full_parity
## 1 0 0
## 2 256 496
## 3 998 1574
## 4 0 24
## 5 7 28
## 6 0 0
# With cohort
## Vector
di_prop_index(success=student_equity$Transfer, group=student_equity$Ethnicity, cohort=student_equity$Cohort) %>% as.data.frame
## cohort group n success pct_success pct_group di_prop_index
## 1 2017 Asian 3000 2062 0.401167315 0.30 1.3372244
## 2 2017 Black 1000 310 0.060311284 0.10 0.6031128
## 3 2017 Hispanic 2000 410 0.079766537 0.20 0.3988327
## 4 2017 Multi-Ethnicity 500 262 0.050972763 0.05 1.0194553
## 5 2017 Native American 100 43 0.008365759 0.01 0.8365759
## 6 2017 White 3400 2053 0.399416342 0.34 1.1747539
## 7 2018 Asian 3000 2230 0.413882702 0.30 1.3796090
## 8 2018 Black 1000 297 0.055122494 0.10 0.5512249
## 9 2018 Hispanic 2000 437 0.081106162 0.20 0.4055308
## 10 2018 Multi-Ethnicity 500 242 0.044914625 0.05 0.8982925
## 11 2018 Native American 100 35 0.006495917 0.01 0.6495917
## 12 2018 White 3400 2147 0.398478099 0.34 1.1719944
## di_indicator success_needed_not_di success_needed_full_parity
## 1 0 0 0
## 2 1 111 227
## 3 1 491 773
## 4 0 0 0
## 5 0 0 9
## 6 0 0 0
## 7 0 0 0
## 8 1 146 269
## 9 1 507 801
## 10 0 0 29
## 11 1 9 20
## 12 0 0 0
## Tidy and column reference
di_prop_index(success=Transfer, group=Ethnicity, cohort=Cohort, data=student_equity) %>%
as.data.frame
## cohort group n success pct_success pct_group di_prop_index
## 1 2017 Asian 3000 2062 0.401167315 0.30 1.3372244
## 2 2017 Black 1000 310 0.060311284 0.10 0.6031128
## 3 2017 Hispanic 2000 410 0.079766537 0.20 0.3988327
## 4 2017 Multi-Ethnicity 500 262 0.050972763 0.05 1.0194553
## 5 2017 Native American 100 43 0.008365759 0.01 0.8365759
## 6 2017 White 3400 2053 0.399416342 0.34 1.1747539
## 7 2018 Asian 3000 2230 0.413882702 0.30 1.3796090
## 8 2018 Black 1000 297 0.055122494 0.10 0.5512249
## 9 2018 Hispanic 2000 437 0.081106162 0.20 0.4055308
## 10 2018 Multi-Ethnicity 500 242 0.044914625 0.05 0.8982925
## 11 2018 Native American 100 35 0.006495917 0.01 0.6495917
## 12 2018 White 3400 2147 0.398478099 0.34 1.1719944
## di_indicator success_needed_not_di success_needed_full_parity
## 1 0 0 0
## 2 1 111 227
## 3 1 491 773
## 4 0 0 0
## 5 0 0 9
## 6 0 0 0
## 7 0 0 0
## 8 1 146 269
## 9 1 507 801
## 10 0 0 29
## 11 1 9 20
## 12 0 0 0
For a description of the di_prop_index
function,
including both function arguments and returned results, type
?di_prop_index
in the R console.
Note that the referenced document describing this method does not
recommend a threshold on the proportionality index for declaring
disproportionate impact. The di_prop_index
function uses
di_prop_index_cutoff=0.8
as the default threshold, which
the user could change.
# Changing threshold for DI
di_prop_index(success=student_equity$Transfer, group=student_equity$Ethnicity, cohort=student_equity$Cohort, di_prop_index_cutoff=0.5) %>% as.data.frame
## cohort group n success pct_success pct_group di_prop_index
## 1 2017 Asian 3000 2062 0.401167315 0.30 1.3372244
## 2 2017 Black 1000 310 0.060311284 0.10 0.6031128
## 3 2017 Hispanic 2000 410 0.079766537 0.20 0.3988327
## 4 2017 Multi-Ethnicity 500 262 0.050972763 0.05 1.0194553
## 5 2017 Native American 100 43 0.008365759 0.01 0.8365759
## 6 2017 White 3400 2053 0.399416342 0.34 1.1747539
## 7 2018 Asian 3000 2230 0.413882702 0.30 1.3796090
## 8 2018 Black 1000 297 0.055122494 0.10 0.5512249
## 9 2018 Hispanic 2000 437 0.081106162 0.20 0.4055308
## 10 2018 Multi-Ethnicity 500 242 0.044914625 0.05 0.8982925
## 11 2018 Native American 100 35 0.006495917 0.01 0.6495917
## 12 2018 White 3400 2147 0.398478099 0.34 1.1719944
## di_indicator success_needed_not_di success_needed_full_parity
## 1 0 0 0
## 2 0 0 227
## 3 1 116 773
## 4 0 0 0
## 5 0 0 9
## 6 0 0 0
## 7 0 0 0
## 8 0 0 269
## 9 1 114 801
## 10 0 0 29
## 11 0 0 20
## 12 0 0 0
di_80_index
is the main work function for this method,
and it can take on vectors or column names the tidy way:
# Without cohort
## Vector
di_80_index(success=student_equity$Transfer, group=student_equity$Ethnicity) %>% as.data.frame
## group n success pct reference reference_group di_80_index
## 1 Asian 6000 4292 0.7153333 0.7153333 Asian 1.0000000
## 2 Black 2000 607 0.3035000 0.7153333 Asian 0.4242777
## 3 Hispanic 4000 847 0.2117500 0.7153333 Asian 0.2960158
## 4 Multi-Ethnicity 1000 504 0.5040000 0.7153333 Asian 0.7045666
## 5 Native American 200 78 0.3900000 0.7153333 Asian 0.5452004
## 6 White 6800 4200 0.6176471 0.7153333 Asian 0.8634395
## di_indicator success_needed_not_di success_needed_full_parity
## 1 0 0 0
## 2 1 538 824
## 3 1 1443 2015
## 4 1 69 212
## 5 1 37 66
## 6 0 0 665
## Tidy and column reference
di_80_index(success=Transfer, group=Ethnicity, data=student_equity) %>%
as.data.frame
## group n success pct reference reference_group di_80_index
## 1 Asian 6000 4292 0.7153333 0.7153333 Asian 1.0000000
## 2 Black 2000 607 0.3035000 0.7153333 Asian 0.4242777
## 3 Hispanic 4000 847 0.2117500 0.7153333 Asian 0.2960158
## 4 Multi-Ethnicity 1000 504 0.5040000 0.7153333 Asian 0.7045666
## 5 Native American 200 78 0.3900000 0.7153333 Asian 0.5452004
## 6 White 6800 4200 0.6176471 0.7153333 Asian 0.8634395
## di_indicator success_needed_not_di success_needed_full_parity
## 1 0 0 0
## 2 1 538 824
## 3 1 1443 2015
## 4 1 69 212
## 5 1 37 66
## 6 0 0 665
# With cohort
## Vector
di_80_index(success=student_equity$Transfer, group=student_equity$Ethnicity, cohort=student_equity$Cohort) %>% as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6873333 Asian
## 2 2017 Black 1000 310 0.3100000 0.6873333 Asian
## 3 2017 Hispanic 2000 410 0.2050000 0.6873333 Asian
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6873333 Asian
## 5 2017 Native American 100 43 0.4300000 0.6873333 Asian
## 6 2017 White 3400 2053 0.6038235 0.6873333 Asian
## 7 2018 Asian 3000 2230 0.7433333 0.7433333 Asian
## 8 2018 Black 1000 297 0.2970000 0.7433333 Asian
## 9 2018 Hispanic 2000 437 0.2185000 0.7433333 Asian
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.7433333 Asian
## 11 2018 Native American 100 35 0.3500000 0.7433333 Asian
## 12 2018 White 3400 2147 0.6314706 0.7433333 Asian
## di_80_index di_indicator success_needed_not_di success_needed_full_parity
## 1 1.0000000 0 0 0
## 2 0.4510184 1 240 378
## 3 0.2982541 1 690 965
## 4 0.7623666 1 13 82
## 5 0.6256062 1 12 26
## 6 0.8785017 0 0 284
## 7 1.0000000 0 0 0
## 8 0.3995516 1 298 447
## 9 0.2939462 1 753 1050
## 10 0.6511211 1 56 130
## 11 0.4708520 1 25 40
## 12 0.8495120 0 0 381
## Tidy and column reference
di_80_index(success=Transfer, group=Ethnicity, cohort=Cohort, data=student_equity) %>%
as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6873333 Asian
## 2 2017 Black 1000 310 0.3100000 0.6873333 Asian
## 3 2017 Hispanic 2000 410 0.2050000 0.6873333 Asian
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6873333 Asian
## 5 2017 Native American 100 43 0.4300000 0.6873333 Asian
## 6 2017 White 3400 2053 0.6038235 0.6873333 Asian
## 7 2018 Asian 3000 2230 0.7433333 0.7433333 Asian
## 8 2018 Black 1000 297 0.2970000 0.7433333 Asian
## 9 2018 Hispanic 2000 437 0.2185000 0.7433333 Asian
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.7433333 Asian
## 11 2018 Native American 100 35 0.3500000 0.7433333 Asian
## 12 2018 White 3400 2147 0.6314706 0.7433333 Asian
## di_80_index di_indicator success_needed_not_di success_needed_full_parity
## 1 1.0000000 0 0 0
## 2 0.4510184 1 240 378
## 3 0.2982541 1 690 965
## 4 0.7623666 1 13 82
## 5 0.6256062 1 12 26
## 6 0.8785017 0 0 284
## 7 1.0000000 0 0 0
## 8 0.3995516 1 298 447
## 9 0.2939462 1 753 1050
## 10 0.6511211 1 56 130
## 11 0.4708520 1 25 40
## 12 0.8495120 0 0 381
For a description of the di_80_index
function, including
both function arguments and returned results, type
?di_80_index
in the R console.
By default, di_80_index
uses the group with the highest
success rate as reference in calculating the index. One could specify
the the comparison group using the reference_group
argument
(a value from group
).
# Changing reference group
di_80_index(success=student_equity$Transfer, group=student_equity$Ethnicity, cohort=student_equity$Cohort, reference_group='White') %>% as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6038235 White
## 2 2017 Black 1000 310 0.3100000 0.6038235 White
## 3 2017 Hispanic 2000 410 0.2050000 0.6038235 White
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6038235 White
## 5 2017 Native American 100 43 0.4300000 0.6038235 White
## 6 2017 White 3400 2053 0.6038235 0.6038235 White
## 7 2018 Asian 3000 2230 0.7433333 0.6314706 White
## 8 2018 Black 1000 297 0.2970000 0.6314706 White
## 9 2018 Hispanic 2000 437 0.2185000 0.6314706 White
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.6314706 White
## 11 2018 Native American 100 35 0.3500000 0.6314706 White
## 12 2018 White 3400 2147 0.6314706 0.6314706 White
## di_80_index di_indicator success_needed_not_di success_needed_full_parity
## 1 1.1383017 0 0 0
## 2 0.5133950 1 174 294
## 3 0.3395032 1 557 798
## 4 0.8678032 0 0 40
## 5 0.7121286 1 6 18
## 6 1.0000000 0 0 0
## 7 1.1771464 0 0 0
## 8 0.4703307 1 209 335
## 9 0.3460177 1 574 826
## 10 0.7664648 1 11 74
## 11 0.5542618 1 16 29
## 12 1.0000000 0 0 0
By default, di_80_index
uses 80%
(di_80_index_cutoff=0.80
) as the default threshold for
declaring disproportionate impact. One could override this using another
threshold via the di_80_index_cutoff
argument.
# Changing threshold for DI
di_80_index(success=student_equity$Transfer, group=student_equity$Ethnicity, cohort=student_equity$Cohort, di_80_index_cutoff=0.50) %>% as.data.frame
## cohort group n success pct reference reference_group
## 1 2017 Asian 3000 2062 0.6873333 0.6873333 Asian
## 2 2017 Black 1000 310 0.3100000 0.6873333 Asian
## 3 2017 Hispanic 2000 410 0.2050000 0.6873333 Asian
## 4 2017 Multi-Ethnicity 500 262 0.5240000 0.6873333 Asian
## 5 2017 Native American 100 43 0.4300000 0.6873333 Asian
## 6 2017 White 3400 2053 0.6038235 0.6873333 Asian
## 7 2018 Asian 3000 2230 0.7433333 0.7433333 Asian
## 8 2018 Black 1000 297 0.2970000 0.7433333 Asian
## 9 2018 Hispanic 2000 437 0.2185000 0.7433333 Asian
## 10 2018 Multi-Ethnicity 500 242 0.4840000 0.7433333 Asian
## 11 2018 Native American 100 35 0.3500000 0.7433333 Asian
## 12 2018 White 3400 2147 0.6314706 0.7433333 Asian
## di_80_index di_indicator success_needed_not_di success_needed_full_parity
## 1 1.0000000 0 0 0
## 2 0.4510184 1 34 378
## 3 0.2982541 1 278 965
## 4 0.7623666 0 0 82
## 5 0.6256062 0 0 26
## 6 0.8785017 0 0 284
## 7 1.0000000 0 0 0
## 8 0.3995516 1 75 447
## 9 0.2939462 1 307 1050
## 10 0.6511211 0 0 130
## 11 0.4708520 1 3 40
## 12 0.8495120 0 0 381
All methods and functions implemented in the DisImpact
package treat outcomes as positive: 1 is desired over 0 (higher rate is
better, lower rate indicates disparity). The choice of the name
success
in the functions’ arguments is intentional to
remind the user of this.
Suppose we have a variable that indicates something negative (e.g., a
flag for students on academic probation). We could calculate DI on the
converse of it by using the !
(logical negation)
operator:
## di_ppg(success=!Probation, group=Ethnicity, data=student_equity) %>%
## as.data.frame ## If there were a Probation variable
di_ppg(success=!Transfer, group=Ethnicity, data=student_equity) %>%
as.data.frame ## Illustrating the point with `!`
## group n success pct reference reference_group moe
## 1 Asian 6000 1708 0.2846667 0.4736 overall 0.03000000
## 2 Black 2000 1393 0.6965000 0.4736 overall 0.03000000
## 3 Hispanic 4000 3153 0.7882500 0.4736 overall 0.03000000
## 4 Multi-Ethnicity 1000 496 0.4960000 0.4736 overall 0.03099032
## 5 Native American 200 122 0.6100000 0.4736 overall 0.06929646
## 6 White 6800 2600 0.3823529 0.4736 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.2546667 0.3146667 1 954
## 2 0.6665000 0.7265000 0 0
## 3 0.7582500 0.8182500 0 0
## 4 0.4650097 0.5269903 0 0
## 5 0.5407035 0.6792965 0 0
## 6 0.3523529 0.4123529 1 417
## success_needed_full_parity
## 1 1134
## 2 0
## 3 0
## 4 0
## 5 0
## 6 621
We can compute the success, group, and cohort variables on the fly:
# Transform success
a <- sample(0:1, size=nrow(student_equity), replace=TRUE, prob=c(0.95, 0.05))
mean(a)
## [1] 0.0511
## group n success pct reference reference_group moe
## 1 Asian 6000 4382 0.7303333 0.54995 overall 0.03000000
## 2 Black 2000 674 0.3370000 0.54995 overall 0.03000000
## 3 Hispanic 4000 1010 0.2525000 0.54995 overall 0.03000000
## 4 Multi-Ethnicity 1000 520 0.5200000 0.54995 overall 0.03099032
## 5 Native American 200 84 0.4200000 0.54995 overall 0.06929646
## 6 White 6800 4329 0.6366176 0.54995 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.7003333 0.7603333 0 0
## 2 0.3070000 0.3670000 1 366
## 3 0.2225000 0.2825000 1 1070
## 4 0.4890097 0.5509903 0 0
## 5 0.3507035 0.4892965 1 13
## 6 0.6066176 0.6666176 0 0
## success_needed_full_parity
## 1 0
## 2 426
## 3 1190
## 4 30
## 5 26
## 6 0
# Collapse Black and Hispanic
di_ppg(success=Transfer, group=ifelse(Ethnicity %in% c('Black', 'Hispanic'), 'Black/Hispanic', Ethnicity), data=student_equity) %>% as.data.frame
## group n success pct reference reference_group moe
## 1 Asian 6000 4292 0.7153333 0.5264 overall 0.03000000
## 2 Black/Hispanic 6000 1454 0.2423333 0.5264 overall 0.03000000
## 3 Multi-Ethnicity 1000 504 0.5040000 0.5264 overall 0.03099032
## 4 Native American 200 78 0.3900000 0.5264 overall 0.06929646
## 5 White 6800 4200 0.6176471 0.5264 overall 0.03000000
## pct_lo pct_hi di_indicator success_needed_not_di
## 1 0.6853333 0.7453333 0 0
## 2 0.2123333 0.2723333 1 1525
## 3 0.4730097 0.5349903 0 0
## 4 0.3207035 0.4592965 1 14
## 5 0.5876471 0.6476471 0 0
## success_needed_full_parity
## 1 0
## 2 1705
## 3 23
## 4 28
## 5 0
It is often the case that the user desires to calculate
disproportionate impact across many outcome variables and many
disaggregation/group variables. The function di_iterate
allows the user to specify a data set and the various variables to
iterate across:
# Multiple group variables
di_iterate(data=student_equity, success_vars=c('Transfer'), group_vars=c('Ethnicity', 'Gender'), cohort_vars=c('Cohort'), ppg_reference_groups='overall') %>% as.data.frame
## success_variable cohort_variable cohort disaggregation group n
## 1 Transfer Cohort 2017 - None - All 10000
## 2 Transfer Cohort 2017 Ethnicity Asian 3000
## 3 Transfer Cohort 2017 Ethnicity Black 1000
## 4 Transfer Cohort 2017 Ethnicity Hispanic 2000
## 5 Transfer Cohort 2017 Ethnicity Multi-Ethnicity 500
## 6 Transfer Cohort 2017 Ethnicity Native American 100
## 7 Transfer Cohort 2017 Ethnicity White 3400
## 8 Transfer Cohort 2017 Gender Female 4930
## 9 Transfer Cohort 2017 Gender Male 4886
## 10 Transfer Cohort 2017 Gender Other 184
## 11 Transfer Cohort 2018 - None - All 10000
## 12 Transfer Cohort 2018 Ethnicity Asian 3000
## 13 Transfer Cohort 2018 Ethnicity Black 1000
## 14 Transfer Cohort 2018 Ethnicity Hispanic 2000
## 15 Transfer Cohort 2018 Ethnicity Multi-Ethnicity 500
## 16 Transfer Cohort 2018 Ethnicity Native American 100
## 17 Transfer Cohort 2018 Ethnicity White 3400
## 18 Transfer Cohort 2018 Gender Female 4928
## 19 Transfer Cohort 2018 Gender Male 4880
## 20 Transfer Cohort 2018 Gender Other 192
## success pct ppg_reference ppg_reference_group moe pct_lo
## 1 5140 0.5140000 0.5140 overall 0.03000000 0.4840000
## 2 2062 0.6873333 0.5140 overall 0.03000000 0.6573333
## 3 310 0.3100000 0.5140 overall 0.03099032 0.2790097
## 4 410 0.2050000 0.5140 overall 0.03000000 0.1750000
## 5 262 0.5240000 0.5140 overall 0.04382693 0.4801731
## 6 43 0.4300000 0.5140 overall 0.09800000 0.3320000
## 7 2053 0.6038235 0.5140 overall 0.03000000 0.5738235
## 8 2513 0.5097363 0.5140 overall 0.03000000 0.4797363
## 9 2548 0.5214900 0.5140 overall 0.03000000 0.4914900
## 10 79 0.4293478 0.5140 overall 0.07224656 0.3571013
## 11 5388 0.5388000 0.5388 overall 0.03000000 0.5088000
## 12 2230 0.7433333 0.5388 overall 0.03000000 0.7133333
## 13 297 0.2970000 0.5388 overall 0.03099032 0.2660097
## 14 437 0.2185000 0.5388 overall 0.03000000 0.1885000
## 15 242 0.4840000 0.5388 overall 0.04382693 0.4401731
## 16 35 0.3500000 0.5388 overall 0.09800000 0.2520000
## 17 2147 0.6314706 0.5388 overall 0.03000000 0.6014706
## 18 2638 0.5353084 0.5388 overall 0.03000000 0.5053084
## 19 2642 0.5413934 0.5388 overall 0.03000000 0.5113934
## 20 108 0.5625000 0.5388 overall 0.07072541 0.4917746
## pct_hi di_indicator_ppg success_needed_not_di_ppg
## 1 0.5440000 0 0
## 2 0.7173333 0 0
## 3 0.3409903 1 174
## 4 0.2350000 1 558
## 5 0.5678269 0 0
## 6 0.5280000 0 0
## 7 0.6338235 0 0
## 8 0.5397363 0 0
## 9 0.5514900 0 0
## 10 0.5015944 1 3
## 11 0.5688000 0 0
## 12 0.7733333 0 0
## 13 0.3279903 1 211
## 14 0.2485000 1 581
## 15 0.5278269 1 6
## 16 0.4480000 1 10
## 17 0.6614706 0 0
## 18 0.5653084 0 0
## 19 0.5713934 0 0
## 20 0.6332254 0 0
## success_needed_full_parity_ppg di_prop_index di_indicator_prop_index
## 1 0 1.0000000 0
## 2 0 1.3372244 0
## 3 205 0.6031128 1
## 4 619 0.3988327 1
## 5 0 1.0194553 0
## 6 9 0.8365759 0
## 7 0 1.1747539 0
## 8 22 0.9917049 0
## 9 0 1.0145719 0
## 10 16 0.8353071 0
## 11 0 1.0000000 0
## 12 0 1.3796090 0
## 13 242 0.5512249 1
## 14 641 0.4055308 1
## 15 28 0.8982925 0
## 16 19 0.6495917 1
## 17 0 1.1719944 0
## 18 18 0.9935198 0
## 19 0 1.0048134 0
## 20 0 1.0439866 0
## success_needed_not_di_prop_index success_needed_full_parity_prop_index
## 1 0 0
## 2 0 0
## 3 111 227
## 4 491 773
## 5 0 0
## 6 0 9
## 7 0 0
## 8 0 42
## 9 0 0
## 10 0 16
## 11 0 0
## 12 0 0
## 13 146 269
## 14 507 801
## 15 0 29
## 16 9 20
## 17 0 0
## 18 0 34
## 19 0 0
## 20 0 0
## di_80_index_reference_group di_80_index di_indicator_80_index
## 1 - All 1.0000000 0
## 2 Asian 1.0000000 0
## 3 Asian 0.4510184 1
## 4 Asian 0.2982541 1
## 5 Asian 0.7623666 1
## 6 Asian 0.6256062 1
## 7 Asian 0.8785017 0
## 8 Male 0.9774614 0
## 9 Male 1.0000000 0
## 10 Male 0.8233098 0
## 11 - All 1.0000000 0
## 12 Asian 1.0000000 0
## 13 Asian 0.3995516 1
## 14 Asian 0.2939462 1
## 15 Asian 0.6511211 1
## 16 Asian 0.4708520 1
## 17 Asian 0.8495120 0
## 18 Other 0.9516595 0
## 19 Other 0.9624772 0
## 20 Other 1.0000000 0
## success_needed_not_di_80_index success_needed_full_parity_80_index
## 1 0 0
## 2 0 0
## 3 240 378
## 4 690 965
## 5 13 82
## 6 12 26
## 7 0 284
## 8 0 58
## 9 0 0
## 10 0 17
## 11 0 0
## 12 0 0
## 13 298 447
## 14 753 1050
## 15 56 130
## 16 25 40
## 17 0 381
## 18 0 134
## 19 0 103
## 20 0 0
# Multiple group variables and different reference groups
bind_rows(
di_iterate(data=student_equity, success_vars=c('Transfer'), group_vars=c('Ethnicity', 'Gender'), cohort_vars=c('Cohort'), ppg_reference_groups='overall')
, di_iterate(data=student_equity, success_vars=c('Transfer'), group_vars=c('Ethnicity', 'Gender'), cohort_vars=c('Cohort'), ppg_reference_groups=c('White', 'Male'), include_non_disagg_results=FALSE) # include_non_disagg_results = FALSE: Already have this scenario in Overall run
)
## # A tibble: 38 × 25
## success_variable cohort_variable cohort disaggregation group n success
## <chr> <chr> <int> <chr> <chr> <dbl> <int>
## 1 Transfer Cohort 2017 - None - All 10000 5140
## 2 Transfer Cohort 2017 Ethnicity Asian 3000 2062
## 3 Transfer Cohort 2017 Ethnicity Black 1000 310
## 4 Transfer Cohort 2017 Ethnicity Hispanic 2000 410
## 5 Transfer Cohort 2017 Ethnicity Multi-E… 500 262
## 6 Transfer Cohort 2017 Ethnicity Native … 100 43
## 7 Transfer Cohort 2017 Ethnicity White 3400 2053
## 8 Transfer Cohort 2017 Gender Female 4930 2513
## 9 Transfer Cohort 2017 Gender Male 4886 2548
## 10 Transfer Cohort 2017 Gender Other 184 79
## # ℹ 28 more rows
## # ℹ 18 more variables: pct <dbl>, ppg_reference <dbl>,
## # ppg_reference_group <chr>, moe <dbl>, pct_lo <dbl>, pct_hi <dbl>,
## # di_indicator_ppg <dbl>, success_needed_not_di_ppg <dbl>,
## # success_needed_full_parity_ppg <dbl>, di_prop_index <dbl>,
## # di_indicator_prop_index <dbl>, success_needed_not_di_prop_index <dbl>,
## # success_needed_full_parity_prop_index <dbl>, …
There is a separate vignette that explains how one
might leverage di_iterate
for rapid dashboard development
and deployment with disaggregation and disproportionate impact
features.
This vignette was generated using an R session with the following packages. There may be some discrepancies when the reader replicates the code caused by version mismatch.
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] forcats_1.0.0 scales_1.3.0 ggplot2_3.5.1
## [4] stringr_1.5.1 knitr_1.48 dplyr_1.1.4
## [7] DisImpact_0.0.22.9000 prettydoc_0.4.1
##
## loaded via a namespace (and not attached):
## [1] sass_0.4.9 utf8_1.2.4 generics_0.1.3 tidyr_1.3.1
## [5] stringi_1.8.4 digest_0.6.37 magrittr_2.0.3 evaluate_1.0.1
## [9] grid_4.4.1 fastmap_1.2.0 jsonlite_1.8.9 DBI_1.2.3
## [13] purrr_1.0.2 fansi_1.0.6 jquerylib_0.1.4 duckdb_1.1.1
## [17] cli_3.6.3 rlang_1.1.4 munsell_0.5.1 withr_3.0.2
## [21] cachem_1.1.0 yaml_2.3.10 tools_4.4.1 fst_0.9.8
## [25] sets_1.0-25 parallel_4.4.1 fstcore_0.9.18 colorspace_2.1-1
## [29] buildtools_1.0.0 vctrs_0.6.5 R6_2.5.1 lifecycle_1.0.4
## [33] pkgconfig_2.0.3 pillar_1.9.0 bslib_0.8.0 gtable_0.3.6
## [37] glue_1.8.0 data.table_1.16.2 Rcpp_1.0.13 collapse_2.0.16
## [41] highr_0.11 xfun_0.48 tibble_3.2.1 tidyselect_1.2.1
## [45] sys_3.4.3 farver_2.1.2 htmltools_0.5.8.1 labeling_0.4.3
## [49] rmarkdown_2.28 maketools_1.3.1 compiler_4.4.1