Applies a continuous "gravity" pull toward the player's centrality-implied ELO. This creates a stronger Bayesian prior that prevents low-centrality players from accumulating inflated ratings by dominating weak opponents in isolated ecosystems.
Usage
calculate_centrality_regression(
current_elo,
player_centrality_percentile,
elo_start = THREE_WAY_ELO_START,
elo_per_percentile = CENTRALITY_ELO_PER_PERCENTILE,
regression_strength = CENTRALITY_REGRESSION_STRENGTH
)Arguments
- current_elo
Numeric. The player's current ELO rating after normal update.
- player_centrality_percentile
Numeric. The player's centrality percentile (0-100). If NULL or NA, no regression is applied.
- elo_start
Numeric. Base ELO (default THREE_WAY_ELO_START = 1400).
- elo_per_percentile
Numeric. ELO points per percentile point (default 6).
- regression_strength
Numeric. Pull strength per delivery (default 0.005).
Details
The regression is proportional to the gap between current ELO and implied ELO: correction = regression_strength × (implied_elo - current_elo)
This means:
Players far above their implied ELO are pulled down more strongly
Players near their implied ELO experience minimal correction
Elite players (high centrality) have higher implied ELOs, so their high ratings are "justified" by their network position
Examples
# Low centrality player with inflated ELO
calculate_centrality_regression(2400, 5) # -6.35 (strong pull down)
#> [1] -6.35
# Elite player with high ELO
calculate_centrality_regression(2000, 95) # -1.65 (small pull down, justified)
#> [1] -1.65
# Average player at average ELO
calculate_centrality_regression(1400, 50) # 0 (no correction needed)
#> [1] 0
