Method
This page sets out how the Statistical Rating is calculated. How it works gives the short version. Each term is explained where it first appears.
The data
- Source. Results come from MileSplit. Runners are linked across races by their MileSplit athlete ID. At a few regional championships whose results carry no IDs, runners were linked by a checked match on name and school or club, and a few of those links may be wrong. A finisher we cannot link is still rated from the race’s adjustment, but is not ranked.
- Meets. Invitationals and championships, not weekly league or series meets. A meet needs more than 8 teams or more than 200 finishers. Region and district championships are always included.
- Races. Varsity races of 4,000 to 5,000 metres, with times between 12:00 and 45:00. Distance is treated as part of the course, so times are never rescaled. JV races are handled separately (below). Varsity B, open and middle-school races are not rated.
- Size. The 2022 to 2025 seasons hold 148,498 varsity performances in 1,259 races. 1,195 races are rated; 64 had too few links. The 2026 season is in progress, with 28 meets shown so far (32 in the calculation).
The model
Each finish time is treated as the runner’s usual time for the season, multiplied by a factor for the race:
finish time = the runner’s usual time × the race’s factor
A race that runs 3% slow adds about 30 seconds to a 16:40 and about 36 seconds to a 20:00. Each sex and season is calculated on its own.
Anchor runners and the race adjustment
An anchor runner has at least two of the varsity races we cover in the same sex and season. Anchors set a race’s adjustment, because they can be compared with themselves elsewhere. The calculation alternates two steps:
- Each race’s adjustment is the average, over its anchors, of how much slower or faster each ran than their usual time. The most unusual tenth at each end is left out of the average.
- Each runner’s usual time is the average of their times with each race’s adjustment taken out.
The two steps repeat until the numbers stop changing. Other rules:
- At least 8 anchors. Below that, a race’s adjustment mostly repeats how strong its field was, and the race is not rated.
- One connected group. Adjustments can only be compared between races that share runners. Races cut off from the rest, or held to it by too few runners, are not rated.
- The zero point. In each season the average race, weighted by its number of runners, counts as zero.
- Divisions on one course and day share part of their adjustment. Each is pulled toward the shared value, by an amount the data decide.
- Returning runners (from 2023). A runner with at least two races the season before starts from last season’s usual time plus the typical change, counted as at most one extra race. With one race this season, they also help set that race’s adjustment, but don’t count toward its 8 anchors. Their own adjusted time is never blended with last season’s.
Fitness through the season
Runners improve through a season, most quickly before mid-October. With one usual time per runner, the calculation reads part of that improvement as course speed: early courses look slow, and early times are flattered.
We use one shared improvement curve: about 0.95% a week for boys and 1.0% for girls until October 15, then flat. It was measured on the same courses run at least three weeks apart within a season, across 2022 to 2025, and then frozen. It is used twice:
- Course constants. On meet pages, each race effect is split into course and conditions plus in-season fitness. The course constant puts the course-and-conditions part on the points scale: higher means a harder course that day. This split is measured against the season’s average race, and the step below against late September, so the two can point opposite ways for one race.
- The on-the-day step. Each run keeps “half the usual early-season allowance”: it moves by half of a typical runner’s fitness gain or shortfall for its date, counted from late September. Earlier runs count slower and later runs faster. Everyone in a race moves by the same share, so the order in a race is unchanged, and so is who qualifies.
Compared with the ratings before this step, which also reset the scale, Knights Crossing (early September) reads about 6 to 12 points lower and the November state meets about 1 to 4 points higher, for the middle runner in 2022 to 2025.
The rating scale
Statistical Rating = K − adjusted seconds ÷ 3
One point is 3 seconds, and higher is faster. Ratings are shown to a tenth of a point; ranks use unrounded times.
K is a scale number for each season and sex. At each meet that TullyRunners also rated that season, matched by MileSplit meet ID, we find the K at which our ratings of that race’s runners sit above TullyRunners’ as often as below. The season’s K is the average over those meets, weighted by runners.
| Season | Boys K | Girls K |
|---|---|---|
| 2022 | 490.0 | 492.5 |
| 2023 | 489.9 | 494.2 |
| 2024 | 488.7 | 492.1 |
| 2025 | 489.6 | 492.9 |
| 2026, provisional | 488.2 | 491.0 |
- K only sets where the scale sits. It never changes anyone’s order, and TullyRunners’ numbers never enter the calculation.
- Each season needs its own K, because each season has its own zero point.
- The 2026 K uses the 2026 meets run on a course TullyRunners rated in 2022 to 2025 (so far Knights Crossing, Wolverine, Third Battle, Oatlands and The VA XC Showcase), with those earlier numbers. TullyRunners’ 2026 numbers are not used.
- The Oatlands 2026 projection was set before that race on an earlier, weaker 2026 K from Knights Crossing and Wolverine only: 488.2 for boys and 493.7 for girls.
- The scale is a straight line, so very slow times can give low or negative ratings.
Ratings across seasons
Ratings share one scale across seasons. Each season and sex carries one constant, so a given time on the same course, at the same point in the season, rates the same from year to year. No allowance is made for fields getting faster or slower, so any overall improvement or decline shows as higher or lower ratings.
The constant is measured on courses raced in several seasons, against 2022 to 2024, with date and championship effects held fixed. It is the same number of points added to every rating of that season and sex, so it changes no order and no gap between two ratings within a season. It does move a lower-tier meet across the line that decides whether the meet shows, so some meets enter or leave the boards, and with them some team points and roster places.
| Season | Boys | Girls |
|---|---|---|
| 2022 | −0.7 | +1.0 |
| 2023 | +0.7 | +1.2 |
| 2024 | 0.0 | −2.2 |
| 2025 | +5.1 | +6.7 |
2026 is measured the same way from its full season so far and is re-measured at each rankings update. A change in it is stated on the update line as a change of scale, not as runner movement.
Uncertainty and grades
The uncertainty of a race’s adjustment is its standard error, written “± N seconds”. To measure it, we recalculate the season 200 times. Each time, schools are drawn at random, so some are picked twice and others left out, because teammates’ results move together. The ± is the spread of the race’s adjustment across those recalculations.
The ± is quoted for a 20:00 run and scales with each runner’s adjusted time. Divide by 3 for points: ± 6 seconds is about ± 2 points.
| Grade | ± at 20:00 | Points | Rated races, 2022–25 |
|---|---|---|---|
| A | under 3 s | under 1 | 144 |
| B | 3 to under 6 s | 1 to 2 | 516 |
| C | 6 to under 12 s | 2 to 4 | 436 |
| D | 12 to under 25 s | 4 to 8 | 86 |
| E | 25 s or more | 8 or more | 13 |
A to C count as reliable. The bands are fixed, so a letter always means the same precision. The ± covers the race’s adjustment only. It is not a range for a runner’s next race, which varies far more.
JV races
JV races are not calculated on their own. Each takes its meet’s middle varsity adjustment for the same sex and distance, plus a JV adjustment measured from runners who ran both. The JV adjustment varies from race to race, and that variation is added to the ±, so every JV race is graded D or E. JV results are rated and shown, but never count as reliable races or season bests.
Season bests, leaderboards and teams
- Season best: a runner’s best on-the-day rating from any rated varsity race of the season, of any grade. Ties go to the earlier race. A best from a D or E race is flagged.
- Leaderboards list runners with a verified va.milesplit.com profile and at least two A to C varsity races that season. In 2026 one is enough for now, and those runners are marked. Runners in grades 6 to 8 are rated but not ranked. Each board shows the top 20.
- Low-level races. A meet’s boys races are left off when no boy there rates above 170, and its girls races when no girl rates above 100. Championships are exempt. These races still link other races, but give no shown rating, season best, board place or team mark.
- Teams are ranked by a virtual cross country meet. The top 30 teams by average, the mean of their five best runners’ season bests, each race their top seven runners, placed by season-best rating. A team’s five best places add up to its points; its sixth and seventh runners take places but do not score. Lowest points wins, and a tie goes to the better sixth-runner place, then the higher average. A runner counts for the school they raced for most. Runners verified in another state don’t count, and regional and national finals count for individuals only.
Meet projections
Projections rank an entry list, registered teams or district qualifiers, with no predicted times or odds. Each team’s seven highest-rated runners share one field per sex; five score, and the sixth and seventh displace other teams’ scorers.
Recent projections use published 2026 season-best ratings, including the on-the-day step, with no prior-season fallback. Oatlands 2026 used ratings before that step, falling back to last season’s rating shifted onto this season’s scale. Each projection keeps its original ratings.
A projection can include a small number of hand-set ratings where the data are thin. Where a results comparison is available, the projection page links to it.
What we tried
Most changes were tested against rules written before we saw the results. Rating on the day was our judgment call; a test then compared using none, a quarter, half, three quarters or all of the curve. Half best predicted which of two runners finished ahead in 2022 to 2024, and 2025 confirmed it, by a thin margin.
- Kept: shared adjustments for divisions run on one course and day.
- Kept: starting returning runners from last season’s usual time.
- Kept: the shared fitness curve for course constants, and half of it for ratings, on the day.
- Not kept: letting runners improve at different rates within a season, by grade, by ability or one by one.
- Not kept: other leaderboard numbers (a season average, a capped season best) and other forecast rules. They predicted head-to-head finishes no better than the season best.
- Still open: using track marks as anchors.
Known limits
- One usual time per runner per season. The fitness curve is shared. A runner who improves faster or slower than it is misread, and early-September heat is booked as low fitness.
- No weather adjustment. Heat follows the calendar too closely to tell apart from fitness.
- Thin early-season links. A race’s adjustment comes from the runners it shares with other races, so an error at one meet carries into the races linked to it.
- Same-day divisions. Before divisions shared part of their adjustment, divisions run on the same course and day disagreed more than their ± predicted. No extra margin of error has been added.
- Coverage. Boards rank verified runners from the meets we rate. They are not statewide rankings.
- 2026 is provisional. It is recalculated each week as meets are added, so its ratings and scale can move, a little even for a runner who has not raced since; the boards mark such runners with ◦. The 2022 to 2025 ratings are final.
Corrections
To report a mistake, use “Report a problem with this meet” on the meet’s page, or write to contact@novarunners.com with the subject “NovaRunners correction: meet” followed by the meet’s ID.
Each report is reviewed, and each correction is ruled on before it changes anything. A correction made after a report is listed here by date and meet ID, with no names.
No corrections have been made after a report yet.