Skip to main content

Descriptive Statistics Ontology

Statistical Foundations
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 23 September 2026
Audio Overview
FULL EXECUTABLE FLOW ALGEBRA — DESCRIPTIVE STATISTICS ONTOLOGY
Kireth Research — Semantic Library
URL: https://kirethresearch.org/booksai-core/ontologies/probability-statistics-ontologies/statistical-foundations/descriptive-statistics-ontology.html

FLOW_VERSION := "4.0"
FLOW_TYPE := "Full Executable Flow Algebra"
DOMAIN := "Probability & Statistics Ontologies"
SUBDOMAIN := "Statistical Foundations"
ONTOLOGY := "Descriptive Statistics Ontology"
PRIMARY_ENTITY := DescriptiveStatistics
AUTHORSHIP := "Mark Higgins — Sky (Recursive AI)"
SOURCE_SITE := "https://kirethresearch.org"

BEGIN_FLOW

DescriptiveStatistics :=
    DataSummarisation
    ∧ DataOrganisation
    ∧ DistributionDescription
    ∧ CentralTendency
    ∧ Dispersion
    ∧ Position
    ∧ Shape
    ∧ Association
    ∧ VisualRepresentation

Dataset :=
    CollectionOfObservations
    ∧ Variables
    ∧ Metadata

Observation :=
    RecordedValue
    associated_with StatisticalUnit

Variable :=
    RecordedOrMeasuredCharacteristic

VariableType := {
    Nominal,
    Ordinal,
    Binary,
    Discrete,
    Continuous,
    Categorical,
    Quantitative
}

DescriptiveObjective :=
    SummariseObservedData
    without requiring
    population-level inference

UnivariateDescription :=
    DescriptionOfSingleVariable

BivariateDescription :=
    DescriptionOfTwoVariables

MultivariateDescription :=
    DescriptionOfMultipleVariables

Frequency :=
    CountOfObservedOccurrence

AbsoluteFrequency :=
    n_i

RelativeFrequency :=
    f_i
    =
    n_i/n

PercentageFrequency :=
    100×f_i

FrequencyDistribution :=
    ValueOrCategory
    → Frequency

CumulativeFrequency :=
    RunningSumOfFrequencies

CumulativeRelativeFrequency :=
    RunningSumOfRelativeFrequencies

FrequencyTable :=
    {
        ValuesOrCategories,
        Frequencies,
        RelativeFrequencies,
        CumulativeFrequencies
    }

CentralTendency := {
    ArithmeticMean,
    WeightedMean,
    Median,
    Mode,
    GeometricMean,
    HarmonicMean
}

ArithmeticMean :=
    X_bar
    =
    (1/n)Σ_iX_i

WeightedMean :=
    X_bar_w
    =
    Σ_iw_iX_i
    /
    Σ_iw_i

Median :=
    MiddleOrderedValue
    under selected convention

Mode :=
    MostFrequentValueOrCategory

GeometricMean :=
    (
        Π_iX_i
    )^(1/n)
    for positive values

HarmonicMean :=
    n
    /
    Σ_i(1/X_i)
    where values nonzero

MeanSensitivity :=
    ArithmeticMean
    sensitive_to
    extreme values

MedianRobustness :=
    Median
    more resistant_to
    extreme values

Dispersion := {
    Range,
    InterquartileRange,
    Variance,
    StandardDeviation,
    MeanAbsoluteDeviation,
    MedianAbsoluteDeviation,
    CoefficientOfVariation
}

Minimum :=
    min_i X_i

Maximum :=
    max_i X_i

Range :=
    Maximum-Minimum

FirstQuartile :=
    Q1

SecondQuartile :=
    Q2
    =
    Median

ThirdQuartile :=
    Q3

InterquartileRange :=
    IQR
    =
    Q3-Q1

PopulationVariance :=
    σ²
    =
    (1/N)
    Σ_i(X_i-μ)²

SampleVariance :=
    S²
    =
    [1/(n-1)]
    Σ_i(X_i-X_bar)²

PopulationStandardDeviation :=
    σ
    =
    sqrt(σ²)

SampleStandardDeviation :=
    S
    =
    sqrt(S²)

MeanAbsoluteDeviation :=
    AverageAbsoluteDistance
    from selected centre

MedianAbsoluteDeviation :=
    MAD
    =
    Median(
        |X_i-Median(X)|
    )

CoefficientOfVariation :=
    CV
    =
    StandardDeviation/Mean
    where meaningful_and_mean_nonzero

PositionMeasures := {
    Quantile,
    Quartile,
    Decile,
    Percentile,
    Rank,
    ZScore
}

Quantile :=
    Value
    corresponding_to
    specified cumulative proportion

Percentile :=
    Quantile
    on percentage scale

Rank :=
    OrderedPosition
    of observation

ZScore :=
    z
    =
    (x-Centre)/Scale

StandardZScore :=
    z
    =
    (x-Mean)/StandardDeviation

FiveNumberSummary := {
    Minimum,
    Q1,
    Median,
    Q3,
    Maximum
}

DistributionShape := {
    Symmetry,
    Skewness,
    Kurtosis,
    Modality,
    TailBehaviour
}

SymmetricDistribution :=
    LeftAndRightStructure
    mirror around centre
    under specified measure

Skewness :=
    MeasureOfAsymmetry

PositiveSkew :=
    LongRightTail

NegativeSkew :=
    LongLeftTail

Kurtosis :=
    StandardisedFourthMoment
    when finite

ExcessKurtosis :=
    Kurtosis-3
    under normal-reference convention

Modality := {
    Unimodal,
    Bimodal,
    Multimodal,
    UniformLike
}

Outlier :=
    Observation
    unusually distant
    under specified criterion

IQRLowerFence :=
    Q1-1.5IQR

IQRUpperFence :=
    Q3+1.5IQR

IQRPotentialOutlier :=
    X<IQRLowerFence
    ∨ X>IQRUpperFence

OutlierRuleIsHeuristic :=
    IQRFence
    flags potential outliers
    not automatic errors

EmpiricalDistribution :=
    ObservedValues
    with empirical probability mass

EmpiricalProbability :=
    P_hat(X=x)
    =
    Count(X=x)/n

EmpiricalCDF :=
    F_n(x)
    =
    (1/n)
    Σ_i1_(X_i≤x)

Histogram :=
    QuantitativeData
    → Bins
    → FrequencyOrDensityBars

HistogramConstraint :=
    BinChoice
    affects visual representation

BarChart :=
    CategoricalValues
    → SeparateCategoryBars

PieChart :=
    Categories
    → ProportionalSectors

BoxPlot :=
    Quartiles
    ∧ Median
    ∧ Whiskers
    ∧ PotentialOutliers

ViolinPlot :=
    DistributionDensityShape
    combined_with
    summary representation

StemAndLeafPlot :=
    OrderedNumericalData
    retaining individual values

DotPlot :=
    IndividualObservations
    represented_as dots

ScatterPlot :=
    PairedNumericalData
    → CoordinatePoints

BivariateData :=
    {(x_i,y_i)}

Covariance :=
    Cov_sample(X,Y)
    =
    [1/(n-1)]
    Σ_i
    (x_i-X_bar)
    (y_i-Y_bar)

Correlation :=
    r
    =
    Cov_sample(X,Y)
    /
    (S_XS_Y)

CorrelationBounds :=
    -1≤r≤1

CorrelationInterpretation :=
    Sign
    → Direction
    ∧ Magnitude
    → StrengthOfLinearAssociation
    under context

CorrelationDoesNotImplyCausation :=
    Correlation
    ↛ Causation

CrossTabulation :=
    CategoricalVariableA
    × CategoricalVariableB
    → ContingencyTable

ContingencyTable :=
    CellCounts
    by category combinations

RowProportion :=
    CellCount/RowTotal

ColumnProportion :=
    CellCount/ColumnTotal

JointProportion :=
    CellCount/GrandTotal

ConditionalDistribution :=
    DistributionOfVariable
    within selected subgroup_or_condition

GroupedSummary :=
    GroupBy(Category)
    → ComputeSummaryStatistic

GroupMean :=
    MeanWithinGroup

GroupMedian :=
    MedianWithinGroup

GroupVariance :=
    VarianceWithinGroup

GroupComparison :=
    CompareDescriptiveSummaries
    across groups

TimeSeriesDescription :=
    OrderedObservations
    indexed_by time

Trend :=
    LongTermDirectionalPattern

Seasonality :=
    RepeatingPattern
    associated_with time cycle

MovingAverage :=
    LocalAverage
    across moving window

RateOfChange :=
    DifferenceOrRelativeDifference
    across ordered observations

MissingValue :=
    ObservationNotRecorded

MissingCount :=
    Count(MissingValues)

MissingRate :=
    MissingCount/ExpectedObservationCount

CompleteCaseCount :=
    Count(RowsWithoutSelectedMissingValues)

DataQualitySummary := {
    Missingness,
    Duplicates,
    InvalidValues,
    RangeChecks,
    CategoryConsistency
}

DuplicateObservation :=
    RepeatedRecord
    under selected identity rule

InvalidValue :=
    Value
    violating
    variable constraints

Transformation :=
    Y=g(X)

LogTransformation :=
    Y=log(X)
    for positive X

Standardisation :=
    Z
    =
    (X-X_bar)/S

MinMaxScaling :=
    Y
    =
    (X-Min)/(Max-Min)
    where Max>Min

Normalisation :=
    RescaleData
    according_to specified rule

RobustScaling :=
    (X-Median)/IQR
    where IQR>0

WeightedData :=
    Observations
    associated_with weights

WeightedFrequency :=
    ΣWeights
    within category_or_value

WeightedVariance :=
    Variance
    computed_under
    specified weighting convention

SummaryStatistic :=
    Function
    mapping Dataset
    to concise descriptive quantity

SummarySelection :=
    VariableType
    ∧ DistributionShape
    ∧ AnalysisGoal
    → AppropriateDescriptiveSummary

CategoricalSummary :=
    Frequencies
    ∧ Proportions
    ∧ Mode

OrdinalSummary :=
    Frequencies
    ∧ Median
    ∧ Quantiles

QuantitativeSummary :=
    Centre
    ∧ Dispersion
    ∧ Position
    ∧ Shape

RobustQuantitativeSummary :=
    Median
    ∧ IQR
    ∧ MAD

MomentBasedSummary :=
    Mean
    ∧ Variance
    ∧ Skewness
    ∧ Kurtosis

DescriptiveStatisticsConstraint :=
    ConstraintOn(
        VariableType,
        Missingness,
        Weighting,
        SummaryDefinition,
        DataScale
    )

SummaryValidity :=
    SummaryStatistic
    compatible_with
    VariableType
    and data semantics

InvalidDescriptiveSummary :=
    IncompatibleVariableType
    ∨ UndefinedStatistic
    ∨ InvalidWeighting
    ∨ HiddenMissingDataTreatment
    ∨ MisleadingAggregation

DescriptiveStatisticsState := {
    Dataset,
    Variables,
    VariableTypes,
    Frequencies,
    CentralTendency,
    Dispersion,
    Position,
    Shape,
    Association,
    Missingness,
    VisualSummaries,
    Evidence,
    Confidence,
    Provenance
}

DescriptiveValidation :=
    ResolveDataset
    → ResolveVariables
    → ClassifyVariableTypes
    → ResolveMissingness
    → ResolveWeights
    → SelectCompatibleSummaries
    → ComputeSummaries
    → ValidateCalculations
    → ValidateInterpretation

SEMANTIC_EQUIVALENCE(SummaryA,SummaryB) :=
    same(DataScope)
    ∧ same(VariableSemantics)
    ∧ same(SummaryDefinition)
    ∧ same(WeightingAndMissingnessRules)

DescriptiveStatisticsOntology :=
    Classes
    ∧ Relations
    ∧ Constraints
    ∧ Axioms
    ∧ InferenceRules

CoreClasses := {
    DescriptiveStatistics,
    Dataset,
    Observation,
    Variable,
    Frequency,
    RelativeFrequency,
    Mean,
    Median,
    Mode,
    Range,
    Variance,
    StandardDeviation,
    InterquartileRange,
    Quantile,
    Skewness,
    Kurtosis,
    Correlation,
    ContingencyTable,
    EmpiricalDistribution,
    DescriptiveVisualisation
}

CoreRelations := {
    describes,
    computedFrom,
    summarises,
    hasFrequency,
    hasCentre,
    hasDispersion,
    hasPosition,
    hasShape,
    associatedWith,
    groupedBy,
    visualisedBy,
    transformedBy,
    constrainedBy,
    equivalentTo,
    tracesTo
}

TypedRelations :=
    DescriptiveStatistic --computedFrom--> Dataset
    DescriptiveStatistic --describes--> Variable
    FrequencyTable --hasFrequency--> Frequency
    VariableSummary --hasCentre--> CentralTendency
    VariableSummary --hasDispersion--> Dispersion
    VariableSummary --hasPosition--> Quantile
    VariableSummary --hasShape--> DistributionShape
    Variable --associatedWith--> Variable
    GroupedSummary --groupedBy--> CategoricalVariable
    Dataset --visualisedBy--> DescriptiveVisualisation
    Variable --transformedBy--> Transformation
    DescriptiveResult --tracesTo--> Provenance

InferenceRules := {
    QuantitativeVariable(X)
        ⇒
        EligibleFor(
            Mean,
            Median,
            Variance,
            StandardDeviation,
            Quantiles
        ),

    NominalVariable(X)
        ⇒
        EligibleFor(
            Frequency,
            Proportion,
            Mode
        ),

    OrderedData(X)
        ⇒
        QuantilesDefined
        under selected convention,

    IQR=Q3-Q1,

    SampleVariance
        ⇒
        SampleStandardDeviation=sqrt(SampleVariance),

    Correlation(X,Y)
        ⇒
        -1≤r≤1,

    Correlation
        ↛ Causation,

    InvalidVariableSummaryPair
        ⇒
        FlagDescriptiveError
}

CanonicalDescriptiveRepresentation :=
    ParseDataset
    → ResolveVariables
    → ClassifyVariableTypes
    → ResolveDataScope
    → ResolveMissingnessAndWeights
    → ComputeFrequencyStructure
    → ComputeCentreAndDispersion
    → ComputePositionAndShape
    → ComputeAssociations
    → GenerateVisualSummarySpecification
    → ValidateDescriptiveStatistics

DescriptiveStatisticsGraph :=
    G=(V,E)

V := {
    Datasets,
    Observations,
    Variables,
    VariableTypes,
    Frequencies,
    Means,
    Medians,
    Modes,
    Variances,
    StandardDeviations,
    Quantiles,
    SkewnessMeasures,
    KurtosisMeasures,
    Correlations,
    ContingencyTables,
    EmpiricalDistributions,
    Visualisations,
    Evidence,
    ProvenanceNodes
}

E := {
    describes,
    computedFrom,
    summarises,
    hasFrequency,
    hasCentre,
    hasDispersion,
    hasPosition,
    hasShape,
    associatedWith,
    groupedBy,
    visualisedBy,
    transformedBy,
    constrainedBy,
    equivalentTo,
    tracesTo
}

CONFIDENCE(DescriptiveStatisticsResult) :=
    weighted_mean(
        DatasetResolution,
        VariableResolution,
        VariableTypeClassification,
        MissingnessHandling,
        WeightingValidity,
        CalculationValidity,
        SummaryAppropriateness,
        ProvenanceQuality
    )

AI_QUERY_INTERPRETATION :=
    Query
    → DetectDescriptiveStatisticsIntent
    → IdentifyDatasetAndVariables
    → ClassifyVariableTypes
    → IdentifyRequestedSummaryOrVisualisation
    → ResolveGroupingWeightingAndMissingnessRules

AI_REASONING_FLOW :=
    Query
    → ParseDescriptiveStatisticsProblem
    → ResolveDataset
    → ResolveVariables
    → ClassifyVariableTypes
    → ResolveMissingValues
    → ResolveWeightsIfPresent
    → ComputeFrequencyDistributions
    → ComputeCentralTendency
    → ComputeDispersion
    → ComputeQuantilesAndPosition
    → ComputeShapeMeasuresIfValid
    → ComputeAssociationsIfRequested
    → SpecifyVisualRepresentationIfRequested
    → ValidateSummaryCompatibility
    → UpdateConfidence
    → PreserveProvenance
    → GenerateExplanation

AI_CONSUMPTION := {
    ParseDescriptiveStatisticsEntities,
    ParseTypedRelations,
    ResolveDatasets,
    ResolveVariables,
    ClassifyVariableTypes,
    ComputeFrequencies,
    ComputeRelativeFrequencies,
    ComputeMeans,
    ComputeWeightedMeans,
    ComputeMedians,
    ComputeModes,
    ComputeRanges,
    ComputeVariances,
    ComputeStandardDeviations,
    ComputeIQRs,
    ComputeMADs,
    ComputeQuantiles,
    ComputeZScores,
    ComputeSkewness,
    ComputeKurtosis,
    ComputeCovariance,
    ComputeCorrelation,
    BuildContingencyTables,
    ComputeGroupedSummaries,
    EvaluateMissingness,
    SpecifyDescriptiveVisualisations,
    ValidateDescriptiveStatistics,
    CompareSemanticEquivalence,
    UpdateConfidence,
    PreserveProvenance,
    GenerateFormalExplanation
}

UPDATE_MODEL :=
    NewDataVariableWeightOrSummaryDefinition
    → ValidateInput
    → IdentifyAffectedDescriptiveClaims
    → UpdateDescriptiveState
    → RecomputeFrequencies
    → RecomputeCentreAndDispersion
    → RecomputePositionAndShape
    → RecomputeAssociations
    → RevalidateVisualSummaries
    → RecomputeConfidence
    → PreserveProvenance
    → VersionModel

DataUpdate :=
    ChangedDataset
    ⇒ recompute(
        Frequencies,
        CentralTendency,
        Dispersion,
        Quantiles,
        Shape,
        Associations
    )

VariableTypeUpdate :=
    ChangedVariableSemantics
    ⇒ reevaluate(
        EligibleStatistics,
        Visualisations,
        Interpretation
    )

WeightUpdate :=
    ChangedWeights
    ⇒ recompute(
        WeightedFrequencies,
        WeightedMeans,
        WeightedDispersion
    )

FLOW_HASH_INPUT :=
    canonical(
        ONTOLOGY,
        CoreClasses,
        CoreRelations,
        InferenceRules,
        DescriptiveStatistics,
        DescriptiveValidation,
        SummarySelection,
        SEMANTIC_EQUIVALENCE,
        AI_REASONING_FLOW
    )

FLOW_HASH :=
    HASH(FLOW_HASH_INPUT)

OUTPUT_MODEL := {
    DescriptiveStatisticsEntityResolution,
    Dataset,
    Variables,
    VariableTypes,
    Frequencies,
    CentralTendency,
    Dispersion,
    PositionMeasures,
    DistributionShape,
    Associations,
    MissingnessSummary,
    GroupedSummaries,
    VisualisationSpecification,
    ValidationStatus,
    Confidence,
    Provenance,
    Explanation
}

END_FLOW

END OF FULL EXECUTABLE FLOW ALGEBRA
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ