¿Cómo se debe definir la varianza muestral para la entrada escalar?


8

Me horrorizó encontrar recientemente que Matlab devuelve para la varianza de muestra de una entrada escalar: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

De alguna manera, la varianza muestral no se divide por en este caso. R devuelve un NaN para un escalar:0=n1

> 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 NaNincluso 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.


¿Quería preguntar sobre la definición de varianza de la población o sobre la definición de varianza de la muestra ? No hay problema con el primero.
whuber

@whuber Creo que lo que está haciendo Matlab es lo siguiente. Cuando encuentra un escalar, informa la varianza de la población por defecto. Cuando encuentra un vector, informa la varianza de la muestra por defecto, a menos que le pida que informe la varianza de la población. En cualquier contexto que utilizan misma función: var().

@Srikant Eso puede ser, pero no responde a mi solicitud de aclaración. Sospecho que puede haber un error tipográfico en la última línea. La función var () parece devolver los valores correctos de la varianza de la población, pero no los valores correctos para la varianza de la muestra .
whuber

@whuber En realidad, 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

2
@shabbychef: La página a la que Srikant ha hecho referencia documenta claramente el comportamiento que ha observado. En particular, no mantiene que var () devuelva la versión 1 / (n-1) de la varianza cuando n = 1. Entonces, el problema no es que Matlab esté equivocado , per se. (Desde el punto de vista del diseño de software, esta implementación de var () es terrible porque intenta hacer demasiado en una sola función y, en consecuencia, corre el riesgo de malentendidos y resultados erróneos por parte de usuarios no vigilantes.)
whuber

Respuestas:


4

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

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

Ajá, no he trabajado con R lo suficiente como para detectar la distinción NAvs. NaNEs bueno que tenga ambos ...
shabbychef

¡Por supuesto, un solo número tiene una varianza! Es la desviación cuadrática media de su media, es decir, cero. ¿Quizás quiso decir que un conjunto de datos con un número no puede tener una varianza muestral ?
whuber

Notarás que dije que no puede tener una variación de población , no que no puede tener una variación. Claramente tiene una varianza muestral, que de hecho es trivialmente cero.
conjugateprior

1
Me he dado cuenta de que nuestra conversación deriva de dos interpretaciones diferentes de "población" y "muestra" de varianza. Los términos se confunden en Internet, así que creo que ambos somos inocentes y que podemos estar de acuerdo. Intenté usar la convención adoptada por el OP, cuya terminología indica que la varianza de "muestra" se divide por n-1 mientras que la varianza de "población" se divide por n. Por cierto, su comentario parece (correctamente) permitir tres variaciones: la de una variable aleatoria, el estimador imparcial de la misma y el de un conjunto de realizaciones independientes de la misma.
whuber

@whuber que suena como una discusión increíble para tener. Voy a tratar de pensar en una pregunta para él :)
naught101

3

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.


3
En realidad, una sola observación de una variable aleatoria a menudo proporciona información sobre la varianza de esa variable. Depende de las posibilidades que permita. Por ejemplo, una sola observación de una distribución Uniforme, Poisson o Exponencial le permite estimar su único parámetro, lo que le da una estimación de la varianza.
whuber

@whuber gracias por los consejos. En realidad, estaba pensando más en las líneas de varianza muestral. Lo que quise decir fue que estimar la varianza de la muestra puede no ser apropiado con una muestra. Se encuentra corregido ahora.
suncoolsu

@whuber Pero este no es el caso aquí; esta función está documentada para devolver la varianza / (n-1) y está devolviendo 0 para el símbolo 0/0.

@mbq Se perdió el descargo de responsabilidad en la documentación: "Para N = 1, V está normalizado por N." Esa es una forma elíptica de decir "Para N = 1, se devuelve un valor de 0". El punto que estaba haciendo con mi comentario en realidad es sobre otra cosa: aborda la afirmación de @ suncoolsu de que "está tratando de extraer información que NO está allí" en el caso N = 1. Por el contrario, una sola observación de una variable aleatoria de hecho hace proporcionar información acerca de su varianza en muchas aplicaciones prácticas. (Sin embargo, estoy no diciendo que la varianza es mejor estimado por algún tipo de fórmula de varianza!)
whuber

@whuber lo suficientemente justo; Sin embargo, esto no justifica este comportamiento.

1

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.

Var(x)=(xx¯)21=0

x¯=x

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.


Ha reexpresado el problema sin ofrecer una resolución. La preocupación es que esta convención puede conducir a respuestas incorrectas cuando la estimación de la varianza se usa más adelante. Ciertamente retrasa la etapa en la que se reconoce una falla. (Piense en lo que sucede si intenta usar esta "varianza" en una prueba t, por ejemplo).
whuber

@whuber No exactamente. El OP está pensando que vardevuelve 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.

@Srikant Para determinar quién está más confundido, tú o yo, ¡he aprendido que ambos lo estamos! Wikipedia califica la fórmula con 1 / (n-1) la "varianza de muestra" (en es.wikipedia.org/wiki/Variance ) mientras que Mathworld claramente usa 1 / n en mathworld.wolfram.com/SampleVariance.html . Sin embargo, el OP utiliza "varianza de muestra" en el primer sentido cuando señala que "la varianza de muestra no se divide por 0 = n − 1". En este sentido, no existe una "varianza de muestra" para un conjunto de datos de un valor (un "escalar"), por lo que su caracterización de lo que el OP está "pensando" parece incorrecta.
whuber

+1 Como sé MATLAB, creo que tu hipótesis es (tristemente) verdadera.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.