# variance

variance d'un vecteur, matrice (voire hypermatrice) de nombres réels ou complexes

## Séquence d'appel

                [s, [mc]] = variance(x [,orien [,m]])

                [s, mc] = variance(x)
                [s, mc] = variance(x, "r"|1 )
                [s, mc] = variance(x, "c"|2 )
                [s, mc] = variance(x, "*"  , %nan)
                [s, mc] = variance(x, "r"|1, %nan)
                [s, mc] = variance(x, "c"|2, %nan)
                s = variance(x, "*", m)
                s = variance(x, "r", m)
                s = variance(x, "c", m)

## Paramètres

x

  vecteur ou matrice de nombres réels ou complexes. Une hypermatrice est acceptable uniquement sans les options "r" ou "c" : `variance(x)` or `variance(x,"*",m)`

orien

  variance selon les lignes ou les colonnes de `x`. Les valeurs possibles sont

  - 1 or "r" : calcul par colonne. Le résultat est un vecteur `r`angée (ligne)
  - 2 or "c" : calcul par ligne. Le résultat est une `c`olonne
  - "*" : calcul tous les éléments de `x` confondus (mode utilisé par défaut); requis si le 3ème paramètre `m` doit être utilisé.
m

  Espérance mathématique de la loi de distribution de probabilité sous-jacente (supposée connue).

  - mode "*" (par défaut) : `m` doit être scalaire
  - mode "r" or 1 : `m` un vecteur ligne à `size(x,2)` éléments. La variance des éléments de la colonne #j de `x` est calculée en utilisant `m(j)` comme moyenne pour la colonne. Si `m` est la même pour toutes les colonnes, sa valeur scalaire peut être fournie au lieu d'une ligne.
  - mode "c" ou 2 : `m` un vecteur colonne à `size(x,1)` éléments. La variance des éléments de la ligne #i de `x` est calculée en utilisant `m(i)` comme moyenne pour la ligne. Si `m` est la même pour toutes les lignes, sa valeur scalaire peut être fournie au lieu d'une colonne.

  Lorsque `m` n'est pas indiquée, la `variance` est estimée en divisant par (n-1) (non n) la distance quadratique totale des n valeurs à la moyenne calculée `mean(x)`(ou `mean(x,"c")` ou `mean(x,"r")`) (n vaut length(x) ou size(x,1) ou size(x,2)). Si les éléments de `x` sont indépendants entre eux, l'estimation de la variance retournée est non biaisée.

  Sinon, la `variance` est estimée en divisant par `n` (au lieu de `n-1`) la distance quadratique totale des valeurs `x(k)` à `m` (`n` valant toujours `length(x)` ou `size(x,1)` ou `size(x,2)`). Alors :

  - Si une véritable valeur `m` indépendante des éléments de x est fournie, elle est utilisée comme moyenne de référence dans le calcul de la variance. La valeur obtenue et retournée pour celle-ci est alors réputée non biaisée.
  - Si la valeur spéciale `m=%nan` est fournie, la variance est toujours "normalisée" par n (non n-1) mais est estimée en utilisant l'estimation "empirique" `m=mean(x)` de la moyenne de référence (ou `m = mean(x,"c")` ou `m = mean(x,"r")`). Comme `m=%nan` n'apporte aucune information nouvelle à "l'équation", celle-ci retourne une estimation biaisée de la variance.
s
  Estimation de la variance des valeurs de `x` (non pondérées). `s` est un scalaire ou un vecteur ligne ou colonne selon l'option `orien` utilisée.
mc
  Moyenne calculée à partir de `x` (`= mean(x,..)`) et utilisée comme référence dans le calcul de la variance. Valeur scalaire ou en vecteur colonne ou ligne, selon l'option `orien` utilisée.

## Description

Cette fonction calcule la variance d'un ensemble de nombres réels ou complexes d'un vecteur, d'une matrice (voire d'une hypermatrice) `x`. Pour `x` à valeurs complexes, `variance(x,..) = variance(real(x),..) + variance(imag(x),..)` est retournée.

Pour un vecteur, une matrice ou une hypermatrice `x`, `s = variance(x)` ou `s = variance(x, "*")` retourne dans le scalaire `s` la variance de tous les éléments de `x`.

`s = variance(x,"c")` (ou indifféremment `s = variance(x, 2)`) calcule la variance de chaque ligne. Le vecteur colonne `s` est retourné, avec `s(j) = variance(x(j,:),..)`.

`s = variance(x,"r")` (ou indifféremment `s = variance(x,1)`) calcule la variance de chaque colonne. Le vecteur ligne `s` est retourné, avec `s(i) = variance(x(:,i),..)`.

La syntaxe `variance(x, "*"|"c"|"r", 1)` utilisable uniquement en Scilab 5.4.1 doit être remplacée par `variance(x,"*"|"c"|"r", %nan)`. `variance(x, "*"|"c"|"r", 1)` émettra une alerte jusqu'en Scilab 6.0. En effet, `1` est désormais compris comme `m=1`. Si `1` est la valeur de l'espérance `m`à fournir, l'alerte peut être évitée en indiquant`1+%eps` au lieu de `1`.

## Exemples

    x = [ 0.2113249 0.0002211 0.6653811; 0.7560439 0.4453586 0.6283918 ]
    s = variance(x)
    s = variance(x, "r")
    s = variance(x, "c")

    // La loi de distribution de probabilité sous-jacente et son espérance (moyenne) sont connues :
    x = grand(100,5,"unf",0,7);	  // Distribution uniforme sur [0, 7]
    // => espérance = (0+7)/2 = 3.5  et variance = (7-0)^2/12
    (7-0)^2/12  				// Variance asymptotique vraie
    s = variance(x)             // Estimation non biaisée (division par n-1).
    s = variance(x, "*", 3.5)   // Estimation non biaisée (division par n). Toujours >= variance(x)
    s = variance(x, "*", %nan)	// Estimation biaisée     (division par n). Toujours <= variance(x)
    // A travers les colonnes (le long des lignes) => résultat en colonne :
    s = variance(x, "c")
    s = variance(x, "c", 3.5)
    s = variance(x, "c", %nan)

    // Nombres complexes uniformément distribués sur [0,1] + [0,1].i :
    x = rand(4, 3) + rand(4, 3)*%i
    s = variance(x)
    s = variance(x, "*", 0.5 + 0.5*%i)
    s = variance(x, "*", %nan)
    s = variance(x, "r")
    s = variance(x, "c")

    // Nombres fournis en hypermatrice :
    x = rand(3, 2, 2)	// Distribution uniforme sur [0, 1]
    s = variance(x)
    s = variance(x, "*", 0.5)
    s = variance(x, "*", %nan)
    // s = variance(x, "r")  //  Utilisation non admise pour une hypermatrice
    // s = variance(x, "c")  //  Utilisation non admise pour une hypermatrice

## Voir aussi

- variancef
- mtlb_var
- stdev

## Bibliographie

Wonacott, T.H. & Wonacott, R.J.; Introductory Statistics, fifth edition, J.Wiley & Sons, 1990.

## Historique

5.5.0

- variance(x, orien, 0|1) supprimée (utilisable uniquement avec Scilab 5.4.1)

- variance(x, orien, m) introduite : l'espérance mathématique m connue de la distribution de probabilité sous-jacente peut être spécifiée et utilisée

- variance(x, orien, %nan) introduite : mean(x,..) est utilisée, mais la distance quadratique totale est divisée par la taille n de l'échantillon (au lieu de n-1)

- [s, mc] = variance(x,..) introduite : la moyenne mc calculée sur l'échantillon x peut être obtenue en second résultat

5.4.1

- variance(complexes) corrigée. variance(x, "*", 1) introduite. Vectorisation du calcul pour variance(x, "r"|"c"). Révision complète de la page d'aide