Comment définir la variance de l'échantillon pour l'entrée scalaire?


8

J'ai été horrifié de découvrir récemment que Matlab renvoie pour la variance d' échantillon d'une entrée scalaire:0

>> var(randn(1),0)   %the '0' here tells var to give sample variance
ans =
     0
>> var(randn(1),1)   %the '1' here tells var to give population variance
ans =
     0

D'une certaine manière, la variance de l'échantillon ne se divise pas par dans ce cas. R renvoie un NaN pour un scalaire:0=n1

> var(rnorm(1,1))
[1] NA

Selon vous, quelle est la meilleure façon de définir la variance de l'échantillon de population pour un scalaire? Quelles pourraient être les conséquences du retour d'un zéro au lieu d'un NaN?

modifier : à partir de l'aide pour Matlab var:

VAR normalizes Y by N-1 if N>1, where N is the sample size.  This is
an unbiased estimator of the variance of the population from which X is
drawn, as long as X consists of independent, identically distributed
samples. For N=1, Y is normalized by N. 

Y = VAR(X,1) normalizes by N and produces the second moment of the
sample about its mean.  VAR(X,0) is the same as VAR(X).

un commentaire cryptique dans le code m pour `var indique:

if w == 0 && n > 1
    % The unbiased estimator: divide by (n-1).  Can't do this
    % when n == 0 or 1.
    denom = n - 1;
else
    % The biased estimator: divide by n.
    denom = n; % n==0 => return NaNs, n==1 => return zeros
end

c'est-à-dire qu'ils choisissent explicitement de ne pas retourner un NaNmême lorsque l'utilisateur demande une variance d'échantillon sur un scalaire. Ma question est pourquoi ils devraient choisir de faire cela, pas comment.

edit : Je vois que j'avais erronément demandé comment définir la variance de population d'un scalaire (voir ligne barrée ci-dessus). Cela a probablement causé beaucoup de confusion.


Vouliez-vous poser des questions sur la définition de la variance de la population ou sur la définition de la variance de l' échantillon ? Il n'y a aucun problème avec le premier.
whuber

@whuber Je pense que ce que fait Matlab est le suivant. Lorsqu'il rencontre un scalaire, il signale la variance de la population par défaut. Lorsqu'il rencontre un vecteur, il signale la variance de l'échantillon par défaut, sauf si vous lui demandez de déclarer la variance de la population. Dans les deux contexte , ils utilisent même fonction: var().

@Srikant C'est possible, mais cela ne répond pas à ma demande de clarification. Je soupçonne qu'il peut y avoir une erreur typographique dans la dernière ligne. La fonction var () semble renvoyer les valeurs correctes de la variance de la population mais pas les valeurs correctes de la variance de l' échantillon .
whuber

@whuber En fait, var(randn(1),0)pondère la variance par 0 et donc la sortie est 0. Le deuxième élément est utilisé pour faire une moyenne pondérée si elle est différente de 1. Voir: Aide de Mathworks pourvar

2
@shabbychef: La page référencée par Srikant documente clairement le comportement que vous avez noté. En particulier, il ne maintient pas que var () renvoie la version 1 / (n-1) de la variance lorsque n = 1. Le problème n'est donc pas que Matlab a tort , en soi. (Du point de vue de la conception logicielle, cette implémentation de var () est terrible car elle essaie d'en faire trop dans une seule fonction et risque par conséquent des malentendus et des résultats erronés par des utilisateurs peu vigilants.)
whuber

Réponses:


4

Les scalaires ne peuvent pas avoir une variance de population bien qu'ils puissent être des échantillons uniques d'une population qui a une variance (de population). Si vous voulez estimer cela, vous avez besoin d'au moins: plus d'un point de données dans l'échantillon, un autre échantillon de la même distribution, ou des informations préalables sur la variance de la population au moyen d'un modèle.

btw R est retourné manquant (NA) pas NaN

is.nan(var(rnorm(1,1)))
[1] FALSE

aha, je n'ai pas assez travaillé avec R pour repérer la distinction NAvs. NaNC'est bien qu'il ait les deux ...
shabbychef

Bien sûr, un seul numéro a une variance! C'est l'écart quadratique moyen par rapport à sa moyenne, à savoir zéro. Peut-être vouliez-vous dire qu'un ensemble de données avec un numéro ne peut pas avoir un écart d' échantillon ?
whuber

Vous remarquerez que j'ai dit qu'il ne pouvait pas y avoir de variance de population , pas qu'il ne pouvait pas avoir de variance. De toute évidence, il a une variance d'échantillon, qui est en effet trivialement nulle.
conjugateprior

1
Je me suis rendu compte que notre conversation découle de deux interprétations différentes de la variance «population» et «échantillon». Les termes sont confus sur Internet, donc je pense que nous sommes tous les deux irréprochables et que nous pouvons être d'accord. J'essayais d'utiliser la convention adoptée par le PO, dont la terminologie indique la variance "échantillon" divise par n-1 tandis que la variance "population" divise par n. Soit dit en passant, votre commentaire semble (à juste titre) permettre trois variances: celle d'une variable aléatoire, son estimateur non biaisé et celle d'un ensemble de réalisations indépendantes de celle-ci.
whuber

@whuber cela ressemble à une discussion géniale à avoir. Je vais essayer de penser à une question pour ça :)
naught101

3

Je suis sûr que les gens de ce forum auront de meilleures réponses, voici ce que je pense:

Je pense que la réponse de R est logique. La variable aléatoire a une variance de population, mais il s'avère qu'avec 1 échantillon, vous n'avez pas suffisamment de degrés de liberté pour estimer la variance de l'échantillon, c'est-à-dire que vous essayez d'extraire des informations qui NE SONT PAS là.

En ce qui concerne la réponse de Matlab, je ne sais pas comment justifier 0, sauf que cela vient du numérateur.

Les conséquences peuvent être bizarres. Mais je peux penser à tout autre élément lié à l'estimation.


3
En fait, une seule observation d'une variable aléatoire fournit souvent des informations sur la variance de cette variable. Cela dépend des possibilités que vous autorisez. Par exemple, une seule observation à partir d'une distribution uniforme, de Poisson ou exponentielle vous permet d'estimer son paramètre unique, ce qui vous donne une estimation de la variance.
whuber

@whuber merci pour les pointeurs. En fait, je pensais davantage aux lignes de variance de l'échantillon. Ce que je voulais dire, c'est que l'estimation de la variance de l'échantillon peut ne pas être appropriée avec un échantillon. Il est maintenant corrigé.
suncoolsu

@whuber Mais ce n'est pas le cas ici; cette fonction est documentée pour renvoyer la variance / (n-1) et renvoie 0 pour le symbole 0/0.

@mbq Vous avez manqué l'avertissement dans la documentation: "Pour N = 1, V est normalisé par N." C'est une façon elliptique de dire "Pour N = 1, une valeur de 0 est renvoyée." Le point que je faisais avec mon commentaire concerne en fait autre chose: il répond à l'affirmation de @ suncoolsu selon laquelle "vous essayez d'extraire des informations qui ne sont PAS là" dans le cas N = 1. Au contraire, une seule observation d'une variable aléatoire en effet ne fournir des informations sur sa variance dans de nombreuses applications pratiques. (Cependant, je ne dis pas que la variance est mieux estimée par une sorte de formule de variance!)
Whuber

@whuber Assez juste; pourtant cela ne justifie pas ce comportement.

1

Je pense que Matlab utilise la logique suivante pour un scalaire (analogue à la façon dont nous définissons la variance de la population) pour éviter d'avoir à traiter avec NA et NAN.

Vuner(X)=(X-X¯)21=0

Ce qui précède suit comme pour un scalaire: X¯=X.

Leur définition est probablement une convention de programmation qui peut peut-être faciliter certains aspects du codage.


Vous avez reformulé le problème sans proposer de résolution. Le problème est que cette convention peut conduire à des réponses erronées lorsque l'estimation de la variance est utilisée ultérieurement. Cela retarde certainement le stade auquel un échec est reconnu. (Réfléchissez à ce qui se passe si vous essayez d'utiliser cette "variance" dans un test t, par exemple.)
whuber

@whuber Pas exactement. L'OP pense que varrenvoie la variance de l'échantillon pour un scalaire alors qu'il renvoie la «variance de la population». Qu'il s'agisse d'un problème ou non dépend du type de routines de gestion des erreurs qu'ils ont en interne. Cependant, je conviens que leur convention est susceptible d'erreurs.

@Srikant Afin de déterminer qui est le plus confus, vous ou moi, j'ai appris que nous sommes tous les deux! Wikipédia qualifie la formule de 1 / (n-1) de "variance d'échantillon" (sur en.wikipedia.org/wiki/Variance ) tandis que Mathworld utilise clairement 1 / n sur mathworld.wolfram.com/SampleVariance.html . Cependant, l'OP utilise la "variance d'échantillon" dans le premier sens lorsqu'il remarque que "la variance d'échantillon ne se divise pas par 0 = n-1". En ce sens, il n'existe pas de "variance d'échantillon" pour un ensemble de données d'une valeur (un "scalaire"), donc votre caractérisation de ce que l'OP "pense" semble incorrecte.
whuber

+1 Comme je connais MATLAB, je pense que votre hypothèse est (malheureusement) vraie.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.