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
Respuestas:
Los escalares no pueden 'tener' una varianza de población, aunque pueden ser muestras individuales de una población que tiene una varianza (de población). Si desea estimar eso, necesita al menos: más de un punto de datos en la muestra, otra muestra de la misma distribución o alguna información previa sobre la varianza de la población a través de un modelo.
por cierto R ha devuelto falta (NA) no NaN
fuente
NA
vs.NaN
Es bueno que tenga ambos ...Estoy seguro de que las personas en este foro tendrán mejores respuestas, esto es lo que pienso:
Creo que la respuesta de R es lógica. La variable aleatoria tiene una varianza de población, pero resulta que con 1 muestra no tienes suficientes grados de libertad para estimar la varianza de la muestra, es decir, estás tratando de extraer información que NO está allí.
Con respecto a la respuesta de Matlab, no sé cómo justificar 0, excepto que es del numerador.
Las consecuencias pueden ser extrañas. Pero puedo pensar en cualquier otra cosa relacionada con la estimación.
fuente
Creo que Matlab está utilizando la siguiente lógica para un escalar (análogo a cómo definimos la varianza de la población) para evitar tener que lidiar con NA y NAN.
Su definición es probablemente una convención de programación que quizás haga más fácil algún aspecto de la codificación.
fuente
var
devuelve la varianza de la muestra para un escalar mientras que devuelve la 'varianza de la población'. Si es un problema o no depende de qué tipo de rutinas de manejo de errores tengan internamente. Sin embargo, estoy de acuerdo en que su convención es susceptible a errores.