Skip to contents

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 by lineup_size. "auto" (the default) chooses "designated" when any target-absent row is a suspect ID or the data have a non-missing suspect_pos column, 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