Your lactate threshold is the exercise intensity at which lactate begins to accumulate in the blood faster than it can be cleared. It’s one of the best predictors of endurance performance — better than VO₂max for trained athletes — because it marks the boundary between sustainable and unsustainable effort.
During a graded exercise test, blood lactate is measured at increasing treadmill speeds. The data below is from my own test: 7 stages from 9.5 to 12.0 mph (the treadmill maxed out at 12, so the final stage added 2% incline) with fingertip blood lactate samples at each stage. Incline stages are converted to a grade-adjusted equivalent flat pace using the ACSM metabolic running equation:
$$\dot{V}\text{O}_2 = 3.5 + 0.2 \cdot S + 0.9 \cdot S \cdot G$$
where $S$ is speed (m/min) and $G$ is fractional grade. The equivalent flat speed is the zero-grade speed that produces the same $\dot{V}\text{O}_2$.
This calculator implements six threshold estimation methods modeled on the R lactater package: OBLA, Baseline+, Dmax, Modified Dmax, Log-log, and LTP (Lactate Turning Points). Each method estimates either LT1 (aerobic threshold — the top of “Zone 2”) or LT2 (anaerobic threshold — roughly your 1-hour race pace). Results show your threshold pace along with the corresponding heart rate, tagged with which threshold they estimate.
Test Data
| Speed (mph) | Grade (%) | Pace (adj.) | HR (bpm) | Lactate (mmol/L) | # |
|---|
Lactate Curve
Results
Methods
The simplest approach: fit a 3rd-degree polynomial to the pace–lactate data, then find the pace at which the curve crosses a fixed lactate concentration. Common thresholds are 2.0, 2.5, 3.0, 3.5, and 4.0 mmol/L.
The polynomial is fitted via least squares on equivalent flat speed:
$$\hat{y} = a_0 + a_1 x + a_2 x^2 + a_3 x^3$$The crossing point is found by bisection root-finding on $f(x) = p(x) - \text{threshold}$.
Dmax finds the "elbow" of the lactate curve — the pace where lactate accumulation starts accelerating away from a linear baseline. Intuitively: draw a straight line from the first data point to the last, then find where the fitted curve bows away from that line the most. That maximum departure is the point where lactate production begins outpacing clearance.
Formally: for a baseline from $(x_1, y_1)$ to $(x_2, y_2)$ with slope $m$, the perpendicular distance of a point $(x, p(x))$ on the polynomial is:
$$d(x) = \frac{|p(x) - y_1 - m(x - x_1)|}{\sqrt{1 + m^2}}$$To maximize: set the derivative of $p(x) - y_1 - m(x - x_1)$ to zero. For a cubic polynomial, this gives $p'(x) = m$, a quadratic equation with an analytic solution.
Note: Original Dmax as described by Cheng et al. (1992) has been shown to systematically underestimate MLSS ($p < 0.01$ — the discrepancy is statistically significant, not due to chance) because the baseline anchors at the very first data point, which may be well below any physiological threshold. See Modified Dmax for a corrected version with validated MLSS agreement.
Same elbow-finding idea as Dmax, but with a smarter baseline. Instead of anchoring at the first data point (which might be deep in the baseline plateau), the line starts from the point preceding the first lactate rise $\geq 0.4$ mmol/L. This skips the flat early portion and anchors the baseline where lactate actually starts rising.
The result is a threshold estimate closer to the true inflection — less pulled toward slower paces by low resting values.
Validated against MLSS (the highest intensity sustainable without lactate continuously rising) with ICC $\geq 0.75$ and $r \geq 0.94$ (Jamnick et al. 2018, Fell & Rayfield 2007). ICC measures absolute agreement between two methods — unlike correlation, which only checks if rankings are preserved, ICC penalizes systematic bias too. $\geq 0.75$ is "good" agreement, meaning Modified Dmax lands close to an athlete's true MLSS.
Log-transform both speed and lactate, then fit a piecewise linear model (two line segments). The breakpoint that minimizes total residual sum of squares (RSS) across both segments is the threshold.
$$\log(\text{lactate}) = \begin{cases} \beta_0 + \beta_1 \log(\text{speed}) & \text{if } \log(\text{speed}) < \text{bp} \\ \gamma_0 + \gamma_1 \log(\text{speed}) & \text{if } \log(\text{speed}) \geq \text{bp} \end{cases}$$The optimal breakpoint is found by exhaustive search over all candidate split points, selecting the one with the lowest combined RSS from both segments.
Individual resting lactate varies widely (1.0–3.0+ mmol/L depending on diet, warm-up, and individual metabolism), so fixed OBLA values can misclassify thresholds. Baseline+ uses the athlete's own first measurement as reference.
Adding 0.5 mmol/L to baseline identifies the first sustained rise above rest — the aerobic threshold (LT1). Adding 1.5 mmol/L identifies where accumulation overwhelms clearance — the anaerobic threshold (LT2).
The math is identical to OBLA: fit the cubic polynomial, then find the speed where it crosses the individualized target:
$$f(x) = p(x) - (\text{baseline} + \Delta) = 0$$Three-segment piecewise linear regression on the raw (speed, lactate) data. Two breakpoints divide the data into a baseline plateau, a moderate rise, and an exponential accumulation phase.
$$\text{lactate} = \begin{cases} a_1 + b_1 \cdot \text{speed} & \text{segment 1 (baseline)} \\ a_2 + b_2 \cdot \text{speed} & \text{segment 2 (moderate rise)} \\ a_3 + b_3 \cdot \text{speed} & \text{segment 3 (exponential)} \end{cases}$$LTP1 is the junction between segments 1 and 2 — departure from baseline (LT1). LTP2 is the junction between segments 2 and 3 — onset of exponential accumulation (LT2).
The optimal breakpoint pair $(bp_1, bp_2)$ is found by minimizing total RSS across all three segments. Requires at least 6 data points (2 per segment minimum).
Exercise physiology recognizes two major lactate thresholds:
LT1 (aerobic threshold) is the first rise in lactate above baseline. It marks the upper boundary of "Zone 2" — the intensity sustainable for 3–4+ hours. Training at or just below LT1 builds aerobic base efficiently.
LT2 (anaerobic threshold) is where lactate production overwhelms clearance and begins to accumulate rapidly. It corresponds roughly to 30–60 minute race pace — the classic "threshold" in training terminology.
Different estimation methods target different thresholds. The LT1 and LT2 tags on each result card indicate which threshold that method estimates, so you can compare like with like.