Me horrorizó encontrar recientemente que Matlab devuelve para la varianza de muestra de una entrada escalar:
>> 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
De alguna manera, la varianza muestral no se divide por en este caso. R devuelve un NaN para un escalar:
> var(rnorm(1,1))
[1] NA
¿Cuál crees que es una forma sensata de definir la varianza de la muestra de población para un escalar? ¿Qué consecuencias podría haber para devolver un cero en lugar de un NaN?
editar : de la ayuda para Matlab's 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 comentario críptico en el código m para `estados var:
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
es decir , eligen explícitamente no devolver un NaN
incluso cuando el usuario solicita una variación de muestra en un escalar. Mi pregunta es por qué deberían elegir hacer esto, no cómo.
editar : veo que había preguntado erróneamente sobre cómo se debe definir la varianza de la población de un escalar (ver la línea de tachado arriba). Esto probablemente causó mucha confusión.
var()
.
var(randn(1),0)
pondera la varianza en 0 y, por lo tanto, la salida es 0. El segundo elemento se usa para hacer un promedio ponderado si es diferente de 1. Consulte: Ayuda de Mathworks paravar