Computes Expected Information Gain for lineup identification procedures following Starns et al. (2023). EIG quantifies the evidentiary value of witness responses using information theory.
Usage
compute_eig(
eig_data,
prior_guilt = 0.5,
confidence_bins = NULL,
lineup_size = 6,
innocent_suspect = "auto"
)Arguments
- eig_data
List output from make_eig_data(), or a dataframe with columns: target_present, identification, confidence
- prior_guilt
Numeric. Prior probability that suspect is guilty (default = 0.5)
- confidence_bins
Numeric vector of bin edges (only used if eig_data is a dataframe)
- lineup_size
Nominal lineup size used when raw target-absent data have no designated innocent suspect.
- innocent_suspect
How innocent-suspect identifications in target-absent lineups are obtained.
"designated": the lineups had a designated innocent suspect, so target-absent"suspect"rows are counted directly, and zero such rows means a false-ID rate of zero."estimated": there was no designated innocent suspect, so the innocent-suspect count is estimated as filler IDs divided bylineup_size."auto"(the default) chooses"designated"when any target-absent row is a suspect ID or the data have a non-missingsuspect_poscolumn, and"estimated"otherwise, with a message.
Value
A list of class "lineup_eig" containing:
eig: Expected Information Gain in bits
response_data: Dataframe with information gain for each response category
prior_guilt: Prior probability used
prior_entropy: Entropy of prior (baseline uncertainty)
n_guilty: Number of target-present lineups
n_innocent: Number of target-absent lineups
Details
EIG measures how much information (in bits) a witness response provides about guilt vs. innocence. It is computed as:
$$EIG = \sum_x p(x) \times [H(prior) - H(p(guilty|x))]$$
where:
x = response category (e.g., "suspect_high_confidence")
p(x) = probability of that response
H() = Shannon entropy
p(guilty|x) = posterior probability of guilt given response x
Higher EIG values indicate more diagnostic procedures. EIG = 0 means no information gain (responses don't distinguish guilty from innocent). The maximum EIG is the prior entropy; it is 1 bit only at prior guilt 0.5.
References
Starns, J. J., Cohen, A. L., & Rotello, C. M. (2023). A complete method for assessing the effectiveness of eyewitness identification procedures: Expected information gain. Psychological Review, 130(3), 677–719.
Examples
# Compute EIG with binned confidence
data(lineup_example)
eig_result <- compute_eig(lineup_example,
prior_guilt = 0.5,
confidence_bins = c(0, 60, 80, 100))
print(eig_result)
#>
#> === Expected Information Gain (EIG) Analysis ===
#>
#> EIG: 0.2012 bits
#> Prior probability of guilt: 0.5
#> Prior entropy: 1 bits
#> Information efficiency: 20.1 %
#>
#> Sample sizes:
#> Target-present (guilty): 700
#> Target-absent (innocent): 700
#>
#> Confidence bins: 0, 60, 80, 100
#>
#> Top response categories by information gain:
#> (Showing up to 10 of 7 total)
#>
#> # A tibble: 7 × 6
#> response identification confidence_level p_response posterior_guilty
#> <chr> <chr> <chr> <chr> <chr>
#> 1 suspect_(80,100] suspect (80,100] 0.074 0.962
#> 2 suspect_(60,80] suspect (60,80] 0.067 0.872
#> 3 suspect_[0,60] suspect [0,60] 0.218 0.764
#> 4 reject_[0,60] reject [0,60] 0.191 0.250
#> 5 filler_(80,100] filler (80,100] 0.031 0.302
#> 6 filler_[0,60] filler [0,60] 0.348 0.339
#> 7 filler_(60,80] filler (60,80] 0.071 0.404
#> # ℹ 1 more variable: information_gain <chr>
#>
#> Full response data available in $response_data