Statistical functions

KURT

Known larger differences on 1,299 of 4,514 recorded answers

Of 4,514 recorded answers (4,508 in the answer bank and 6 workbook cells), 1,299 do not match: 145 differ by more than 16 ULP, 1,154 differ by at most 16 ULP. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicKURT
BulgarianKURT
CzechKURT
DanishTOPSTEJL
GermanKURT
GreekKURT
English (Australia)KURT
English (United Kingdom)KURT
English (United States)KURT
SpanishCURTOSIS
EstonianKURT
FinnishKURT
FrenchKURTOSIS
HebrewKURT
CroatianKURT
HungarianCSÚCSOSSÁG
IndonesianKURT
ItalianKURT
JapaneseKURT
KoreanKURT
LithuanianKURT
LatvianKURT
NorwegianKURT
DutchKURTOSIS
PolishKURTOZA
Portuguese (Brazil)KURT
Portuguese (Portugal)CURT
RomanianKURT
RussianЭКСЦЕСС
SlovakKURT
SlovenianKURT
Serbian (Latin)KURT
SwedishTOPPIGHET
ThaiKURT
TurkishBASIKLIK işlevi
UkrainianKURT
VietnameseKURT
Chinese (Simplified)KURT
Chinese (Hong Kong)KURT
Chinese (Traditional)KURT

Names from Microsoft's support site.

What it does

KURT(number1, [number2], ...)

KURT(number1, [number2], …) returns the bias-corrected sample excess kurtosis of the numeric values it admits. The estimator Microsoft documents is

KURT = [ n(n+1) / ((n−1)(n−2)(n−3)) ] · Σᵢ ( (xᵢ − x̄) / s )⁴
       −  3(n−1)² / ((n−2)(n−3))

where x̄ is the sample mean and s is the sample standard deviation with the n − 1 denominator, the same s that STDEV.S returns.

Three separate conventions are baked into that one line, and every disagreement between statistical packages about "the kurtosis" is a disagreement about which of them applies:

  1. Excess, not raw. The trailing term subtracts the kurtosis of the normal distribution, so a Gaussian sample has expectation zero rather than three. The population quantity being estimated is β₂ − 3 = μ₄/μ₂² − 3, where μₖ is the k-th central moment.
  2. Bias-corrected, not the plug-in moment ratio. The n(n+1)/((n−1)(n−2)(n−3)) factor is the standard G₂ correction, which makes the estimator unbiased for the excess kurtosis when the parent distribution is normal. In the taxonomy of Joanes and Gill (1998) this is G₂, not the plug-in g₂ and not the b₂ variant; SAS and SPSS use G₂, several other systems do not.
  3. Sample, not population, scaling of s. Using n − 1 inside the standardisation and then applying the G₂ factor on top is what makes the algebra come out.

Domain. The formula requires n ≥ 4 — the factor (n−3) in both denominators is the binding constraint — and s > 0. Range: the sample excess kurtosis of n points is bounded below by −2·(n−1)/(n−2) + 3(n−1)²/((n−2)(n−3))-type expressions and above by a finite value determined by n; unlike the population quantity it cannot be arbitrarily large for fixed n. The population excess kurtosis is bounded below by −2 (attained by the two-point distribution) and unbounded above.

Useful reference values, all exact and all cheap to check: four equally spaced points give −1.2, which is the excess kurtosis of the continuous uniform distribution; a sample that is exactly normal in its order statistics tends to 0; heavy-tailed samples give large positive values. Kurtosis is not a measure of "peakedness" — that reading is a persistent textbook error. It is a standardised fourth moment, and the fourth power means it is driven almost entirely by the observations farthest from the mean. A single outlier moves KURT more than the entire rest of the sample.

Try it

Input cells (optional)

Example: {"B2": 3, "B3": 4}. A1 holds the formula. Other cells need values before a formula can read them.

Enter a formula, then calculate.

Runs locally in your browser with OneCalc. Its answer may differ from Excel. Use English function names and commas between arguments.

Quirks

Result and edge cases

Returns Number.

  • All values identical → s = 0, the standardisation divides by zero, #DIV/0!.
  • Exactly four points is the boundary case and the one worth testing: the factors are 20/6 and 27/2, both exactly representable, so a correct implementation returns the uniform-distribution value for equally spaced points with only the fourth-power sum contributing rounding.
  • Very large or very small values. Standardising before raising to the fourth power is what keeps the sum in range; forming Σ(xᵢ − x̄)⁴ first overflows for |xᵢ − x̄| > about 1.3·10⁷⁷ and underflows below about 10⁻⁷⁷. See Numerical notes.
  • Error values anywhere in the data propagate.
  • Arrays are consumed by scanning, not lifted elementwise; KURT is not a lift kernel.

Errors

ErrorConditionBasis
#DIV/0!Fewer than four data points, or the sample standard deviation is zeroDocumented by Microsoft on the KURT page; also what the defining formula requires
#VALUE!A directly-passed argument that cannot be converted to a numberShared coercion rule, chapter 02
propagatedAn error value among the dataShared coercion rule, chapter 02

How to implement

Numerical notes

KURT is the hardest of the elementary descriptive statistics to compute well, for a reason that is entirely structural: it is a ratio of a fourth central moment to the square of a second central moment, and both are differences of large quantities.

Cancellation. The one-pass "computational" route accumulates Σx, Σx², Σx³, Σx⁴ and reconstructs the central moments by the binomial expansion

μ₄ = (Σx⁴ − 4x̄Σx³ + 6x̄²Σx² − 4x̄³Σx + n x̄⁴)/n

For data with a small coefficient of variation this is catastrophic: the terms are of order n·x̄⁴ while the result is of order n·σ⁴, so the relative error is inflated by (x̄/σ)⁴. A sample with mean 10⁶ and spread 1 loses roughly twenty-four decimal digits — far more than a double has. The estimator is then not merely inaccurate; it is arbitrary, and can come out negative where the true value is positive. The canonical treatment is Chan, Golub and LeVeque (1983) for the variance, extended to arbitrary order by Pébay, Formulas for Robust, One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments (Sandia report SAND2008-6212), whose update relations are the standard modern reference for a stable streaming fourth moment.

What a careful implementation does. Two passes: compute x̄ first (with a compensated or pairwise sum), then accumulate the centred powers Σ(xᵢ − x̄)² and Σ(xᵢ − x̄)⁴ directly. Optionally refine x̄ with a second-pass correction term Σ(xᵢ − x̄)/n, which is zero in exact arithmetic and is a cheap error-cancelling trick. Standardise before the fourth power — that is, accumulate Σz⁴ with z = (xᵢ − x̄)/s — to keep the summands near unity and avoid the overflow and underflow bands mentioned above. Apply the two exactly-representable rational factors last, and do the final subtraction in the order the formula is written, since the two terms are of comparable size for near-normal data and their difference is the answer.

The subtraction at the end is itself a cancellation. For a near-normal sample the first term is close to 3(n−1)²/((n−2)(n−3)) and the excess is a small difference of two moderate numbers. Even with a perfect fourth-moment sum, a KURT near zero has few correct significant digits in the relative sense — which is fine, because the quantity of interest is the absolute excess, but it means a relative-error residual plate for KURT will look alarming near zero and should be read as an absolute-error plate instead.

The published record on Excel's statistical accuracy is relevant background here and is worth naming precisely: McCullough and Wilson's papers on the accuracy of Excel's statistical procedures, and Morten Welinder's work on Gnumeric's statistical functions, both document one-pass moment accumulation as a recurring defect class in spreadsheet implementations. The Handbook does not assert what Excel does internally, and neither of those sources is a measurement of this surface.

Rust code

Show the CalcFunc source of this function

Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.

KURT · 3 lines · calc-func/src/catalogue/statistics.rs on GitHub
46 kurt "KURT" (1, 255) [R "number1", R "number2"] |s, a, sv| {
    out(s, k::moment_stats_family::kurt_kernel(&all(s, a, sv, Held::Numbers)?))
}
kurt_kernel · 33 lines · calc-func/src/ported/moment_stats_family.rs on GitHub
pub(crate) fn kurt_kernel(values: &[f64]) -> Result<f64, WorksheetErrorCode> {
    if values.len() < 4 {
        return Err(WorksheetErrorCode::Div0);
    }

    let n = values.len();
    let avg = mean(values);
    let mut sumsq = 0.0;
    let mut deltas = Vec::with_capacity(n);
    for value in values {
        let delta = *value - avg;
        sumsq += delta * delta;
        deltas.push(delta);
    }
    if sumsq == 0.0 {
        return Err(WorksheetErrorCode::Div0);
    }

    let sample_std = (sumsq / (n as f64 - 1.0)).sqrt();
    let standardized_sum = deltas
        .iter()
        .map(|delta| {
            let z = *delta / sample_std;
            let z2 = z * z;
            z2 * z2
        })
        .sum::<f64>();
    let n = n as f64;
    Ok(
        (n * (n + 1.0) * standardized_sum) / ((n - 1.0) * (n - 2.0) * (n - 3.0))
            - (3.0 * (n - 1.0).powi(2)) / ((n - 2.0) * (n - 3.0)),
    )
}

Kernels shared with other functions

  • all catalogue/statistics
  • mean ported/moment_stats_family

Argument and result plumbing

No implementation has been published with a Handbook test suite for this function.

Version differences

The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.

Excel 16.0 buildPlatform and CPUCaptured inputs
20430Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics3,004

The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.

Recorded environments and comparison details.

Excel 16.0 build 20430

Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics

3,004 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.

Alternatives

Relationships

  • SKEW.P — the population (plug-in) skewness. Note the asymmetry in the published surface: Excel offers both a sample and a population skewness, but only the bias-corrected sample kurtosis. There is no KURT.P. A reader who wants the plug-in g₂ = μ₄/μ₂² − 3 must compute it from DEVSQ and a fourth-power sum by hand, or invert the G₂ correction algebraically.
  • STDEV.S and VAR.S — supply the s in the denominator; any disagreement about s propagates to the fourth power.
  • DEVSQ — the second-moment building block, and the natural surface to compare against when checking whether the centred sums agree.
  • Confused with: "peakedness". See above. Also confused with SKEW, since both are called "shape statistics" and both fail on small samples, but they fail at different n.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents