J'ai été horrifié de découvrir récemment que Matlab renvoie pour la variance d' échantillon d'une entrée scalaire:
>> 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:
> 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 NaN
mê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.
var()
.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
Réponses:
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
la source
NA
vs.NaN
C'est bien qu'il ait les deux ...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.
la source
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.
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.
la source
var
renvoie 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.