Skip to contents

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).

Value

Numeric. The ELO correction to ADD to current_elo (can be negative).

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