diff --git a/pyproject.toml b/pyproject.toml index 5eeae69..9df5899 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,8 @@ dependencies = ["ipython", "matplotlib", "numpy", "scipy", - "pandas", + "pandas>=1.5,<2.0; python_version < '3.9'", + "pandas==2.3.3; python_version >= '3.9'", "openpyxl", "xlrd"] # "pyreadstat"] diff --git a/src/pyWitness/DataProcessed.py b/src/pyWitness/DataProcessed.py index 2649690..ab47de6 100644 --- a/src/pyWitness/DataProcessed.py +++ b/src/pyWitness/DataProcessed.py @@ -489,11 +489,18 @@ def p0(x, a,b) : return dPrime def calculateCriterion(self): - zT = _special.ndtri(self.data_rates.loc['targetPresent','suspectId']) + epsilon = 0.5 / len(self.dataRaw.data) + hit_rate = self.data_rates.loc['targetPresent','suspectId'].copy() + try : - zL = _special.ndtri(self.data_rates.loc['targetAbsent','suspectId']) - except : # only for TA showups and the participant never made a suspectId - zL = _special.ndtri(self.data_rates.loc['targetAbsent','rejectId']) + fa_rate = self.data_rates.loc['targetAbsent','suspectId'].copy() + except KeyError: + fa_rate = self.data_rates.loc['targetAbsent','rejectId'].copy() + + hit_rate = hit_rate.clip(lower=epsilon, upper=1 - epsilon) + fa_rate = fa_rate.clip(lower=epsilon, upper=1 - epsilon) + zT = _special.ndtri(hit_rate) + zL = _special.ndtri(fa_rate) dCriterion = - (zT + zL)/2.0 dCriterion.name = ("criterion", "central")