in sourcecode/scoring/pflip_model.py [0:0]
def _compute_rater_factors(self, prescoringRaterModelOutput: pd.DataFrame) -> pd.DataFrame:
"""Generate a DataFrame mapping raterParticipantIds to factors.
Each rater is assigned their factor from either Core, Expansion or ExpansionPlus,
prioritizing Core, then Expansion, then ExpansionPlus.
Args:
prescoringRaterModelOutput: pd.DataFrame used to determine rater factors.
Returns:
pd.DataFrame with raterParticipantId and RATER_FACTOR columns
"""
# Obtain prescoring rater factors
coreFactors = prescoringRaterModelOutput[
prescoringRaterModelOutput[c.scorerNameKey] == Scorers.MFCoreScorer.name
][[c.raterParticipantIdKey, c.internalRaterFactor1Key]].rename(
columns={c.internalRaterFactor1Key: c.coreRaterFactor1Key}
)
expansionFactors = prescoringRaterModelOutput[
prescoringRaterModelOutput[c.scorerNameKey] == Scorers.MFExpansionScorer.name
][[c.raterParticipantIdKey, c.internalRaterFactor1Key]].rename(
columns={c.internalRaterFactor1Key: c.expansionRaterFactor1Key}
)
expansionPlusFactors = prescoringRaterModelOutput[
prescoringRaterModelOutput[c.scorerNameKey] == Scorers.MFExpansionPlusScorer.name
][[c.raterParticipantIdKey, c.internalRaterFactor1Key]].rename(
columns={c.internalRaterFactor1Key: c.expansionPlusRaterFactor1Key}
)
# Combine and prioritize factors
raterFactors = coreFactors.merge(expansionFactors, how="outer").merge(
expansionPlusFactors, how="outer"
)
raterFactors[_RATER_FACTOR] = raterFactors[c.expansionPlusRaterFactor1Key]
raterFactors.loc[
~raterFactors[c.expansionRaterFactor1Key].isna(), _RATER_FACTOR
] = raterFactors[c.expansionRaterFactor1Key]
raterFactors.loc[~raterFactors[c.coreRaterFactor1Key].isna(), _RATER_FACTOR] = raterFactors[
c.coreRaterFactor1Key
]
return raterFactors[[c.raterParticipantIdKey, _RATER_FACTOR]]