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