Implementation

This page describes the internal flow of standard_deviation and how the function delegates almost all of its work to variance. Unlike Overview, the goal here is not to repeat the parameters, but to show why the practical behavior of standard deviation almost entirely coincides with that of variance.

The following snippets are taken from the current src/mespy/stats_utils.py implementation. Even though _as_float_vector does not appear directly in the body of standard_deviation, it comes into play immediately through variance(...); the same is true for _validate_weights when w is provided.

Execution sequence

The implementation follows this sequence:

  1. Receives x, w, and ddof without performing local validation.

  2. Delegates the variance computation to variance.

  3. Applies np.sqrt(...) to the returned value.

  4. Converts the result to a Python float.

Minimal wrapper over variance

def standard_deviation(
    x: ArrayLike,
    w: ArrayLike | None = None,
    ddof: int | float = 0,
) -> float:
    return float(np.sqrt(variance(x, w=w, ddof=ddof)))

This snippet shows that standard_deviation does not reimplement any part of the statistical logic.

  • Non valida direttamente x: la validazione avviene dentro variance(...).

  • Non gestisce direttamente i pesi: anche questo controllo e delegato.

  • Non distingue con rami propri tra caso pesato e non pesato: eredita i due rami gia presenti nella varianza.

Implemented formula

La definizione operativa e semplicemente

\[ \sigma = \sqrt{\mathrm{Var}(x)} \]

oppure, nel caso pesato,

\[ \sigma_w = \sqrt{\mathrm{Var}_w(x)}. \]

Per questo motivo tutto cio che influenza la varianza influenza automaticamente anche la deviazione standard.

  • ddof viene passato senza modifiche a variance(...).

  • Se il denominatore della varianza diventa non positivo, l’errore nasce prima della radice quadrata.

  • Se i pesi sono invalidi, il fallimento avviene nel validatore comune dei pesi, non in standard_deviation stessa.

Important interactions with variance

Il comportamento pratico della funzione si capisce meglio leggendo questa dipendenza esplicita.

  • standard_deviation(x) equivale a prendere la radice quadrata della varianza non pesata con ddof=0.

  • standard_deviation(x, w=w) equivale a prendere la radice quadrata della varianza pesata costruita con gli stessi pesi.

  • standard_deviation(x, ddof=1) non introduce una nuova convenzione: chiede semplicemente a variance(...) di usare un denominatore corretto.

  • Di conseguenza, per capire davvero errori, casi limite e ruolo di ddof, la pagina di riferimento resta variance.