Prueba si las variables siguen la misma distribución

16

Si desea probar si dos variables siguen la misma distribución, ¿sería una buena prueba simplemente ordenar ambas variables y luego verificar su correlación? Si es alta (al menos 0.9?), Entonces las variables probablemente provengan de la misma distribución.

Con distribución aquí quiero decir "normal", "chi-cuadrado", "gamma", etc.

PascalVKooten
fuente

Respuestas:

35

Averigüemos si esta es una buena prueba o no. Hay mucho más que simplemente afirmar que es malo o demostrar en una instancia que no funciona bien. La mayoría de las pruebas funcionan mal en algunas circunstancias, por lo que a menudo nos enfrentamos a identificar las circunstancias en las cuales cualquier prueba propuesta podría ser una buena opción.

Descripción de la prueba.

Como cualquier prueba de hipótesis, esta consiste en (a) una hipótesis nula y alternativa y (b) un estadístico de prueba (el coeficiente de correlación) destinado a discriminar entre las hipótesis.

La hipótesis nula es que las dos variables provienen de la misma distribución. Para ser precisos, nombremos las variables e y supongamos que hemos observado instancias de , llamadas , y instancias de , llamadas . La hipótesis nula es que todas las instancias de e son independientes e idénticamente distribuidas (iid).XYnxXxi=(x1,x2,,xnx)nyYyyoXY

Tomemos como hipótesis alternativa que (a) todas las instancias de son iid según alguna distribución subyacente y (b) todas las instancias de son iid según alguna distribución subyacente pero (c) difiere de . (Por lo tanto, no buscaremos correlaciones entre , correlaciones entre , correlaciones entre y , o diferencias de distribución entre las 's o ' s por separado: se supone que no es plausible).F X Y F Y F X F Y x i y i x i y j x yXFXYFYFXFYXyoyyoXyoyjXy

El estadístico de prueba propuesto supone que (llame a este valor común ) y calcula el coeficiente de correlación de (donde, como de costumbre, designa el más pequeño de los datos). Llame a esto . n ( x [ i ] , y [ i ] ) [ i ] i th t ( x , y )norteX=norteynorte(X[yo],y[yo])[yo]yotht(X,y)

Pruebas de permutación

En esta situación, sin importar la estadística propuesta, siempre podemos realizar una prueba de permutación. Bajo la hipótesis nula, la probabilidad de los datos es la misma que la probabilidad de cualquier permutación de los datos valores. En otras palabras, la asignación de la mitad de los datos a y la otra mitad a es una pura coincidencia aleatoria. Esta es una consecuencia simple y directa de los supuestos iid y la hipótesis nula de que .( ( x 1 , x 2 , , x n ) , ( y 1 , y 2 , , y n ) ) 2 n X Y F X = F Yt((x1,x2,,xn),(y1,y2,,yn))2nXYFX=FY

Por lo tanto, la distribución de muestreo de , condicional a las observaciones e , es la distribución de todos los valores de alcanzados para todospermutaciones de los datos. Estamos interesados ​​en esto porque para cualquier tamaño de prueba previsto , como (correspondiente al % de confianza), construiremos una región crítica de dos lados a partir de la distribución de muestreo de : consiste en el % más extremo de los valores posibles dex i y i t ( 2 n ) ! α α = .05 95 t 100 α tt(x,y)xiyit(2n)!αα=.0595t100αt(en el lado alto, porque la alta correlación es consistente con distribuciones similares y la baja correlación no lo es). Así es como determinamos qué tan grande debe ser el coeficiente de correlación para decidir que los datos provienen de diferentes distribuciones.

Simulando la distribución de muestreo nulo

Porque(o, si lo desea, , que cuenta el número de formas de dividir los datos de en dos piezas de tamaño ) se hace grande incluso para pequeño , no es factible calcular el distribución de muestreo exactamente, por lo que se muestra mediante una simulación (Por ejemplo, cuando , y .) Casi mil muestras a menudo son suficientes (y ciertamente lo hará para las exploraciones que estamos a punto de emprender).( 2 n(2n)!2nnnn=16 ( 2n(2nn)/22nnnn=16(2n)! 2.63×1035(2nn)/2=300 540 195(2n)!2.63×1035

Hay dos cosas que necesitamos descubrir: primero, cómo se ve la distribución de muestreo bajo la hipótesis nula. Segundo, ¿qué tan bien discrimina esta prueba entre diferentes distribuciones?

Hay una complicación: la distribución del muestreo depende de la naturaleza de los datos. Todo lo que podemos hacer es mirar datos realistas, creados para emular lo que sea que nos interese estudiar, y esperar que lo que aprendamos de las simulaciones se aplique a nuestra propia situación.

Implementación

Para ilustrar, he llevado a cabo este trabajo en R. Cae naturalmente en tres pedazos.

  1. Una función para calcular el estadístico de prueba . Como quiero ser un poco más general, mi versión maneja conjuntos de datos de diferentes tamaños ( ) interpolando linealmente entre los valores del conjunto de datos más grande (ordenado) para crear coincidencias con el conjunto de datos más pequeño (ordenado). Como esto ya lo hace la función , solo tomo sus resultados:t(x,y)nxnyRqqplot

    test.statistic <- function(x, y) {
      transform <- function(z) -log(1-z^2)/2
      fit <- qqplot(x,y, plot.it=FALSE)
      transform(cor(fit$x, fit$y))
    }

    Un pequeño giro, innecesario pero útil para la visualización, vuelve a expresar el coeficiente de correlación de una manera que hará que la distribución de la estadística nula sea aproximadamente simétrica. Eso es lo que transformestá haciendo.

  2. La simulación de la distribución muestral. Para la entrada, esta función acepta el número de iteraciones n.iterjunto con los dos conjuntos de datos en matrices xy y. Produce una matriz de n.itervalores de la estadística de prueba. Su funcionamiento interno debe ser transparente, incluso para un no Rusuario:

    permutation.test <- function(n.iter, x, y) {
      z <- c(x,y)
      n.x <- length(x)
      n.y <- length(y)
      n <- length(z)
      k <- min(n.x, n.y)
      divide <- function() {
        i <- sample.int(n, size=k)
        test.statistic(z[i], z[-i])
      }
      replicate(n.iter, divide())
    }
  3. Aunque eso es todo lo que necesitamos para realizar la prueba, para estudiarla, querremos repetir la prueba muchas veces. Entonces, realizamos la prueba una vez y ajustamos ese código dentro de una tercera capa funcional, generalmente nombrada faquí, a la que podemos llamar repetidamente. Para hacerlo lo suficientemente general para un estudio amplio, para la entrada acepta los tamaños de los conjuntos de datos para simular ( n.xy n.y), el número de iteraciones para cada prueba de permutación ( n.iter), una referencia a la función testpara calcular el estadístico de prueba (verá momentáneamente por qué no queremos codificar esto), y dos funciones para generar valores aleatorios de iid, uno para ( ) y otro para ( ). Una opciónXdist.xYdist.yplot.it es útil para ayudar a ver qué está pasando.

    f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif, 
        plot.it=FALSE) {
      x <- dist.x(n.x)
      y <- dist.y(n.y)
      if(plot.it) qqplot(x,y)
    
      t0 <- test(x,y)
      sim <- permutation.test(n.iter, x, y)
      p <- mean(sim > t0) + mean(sim==t0)/2
      if(plot.it) {
        hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))), 
             main="Permutation distribution")
        abline(v=t0, col="Red", lwd=2)
      }
      return(p)
    }

    La salida es un "valor p" simulado: la proporción de simulaciones que producen una estadística que parece más extrema que la que realmente se calculó para los datos.

Las partes (2) y (3) son extremadamente generales: puede realizar un estudio como este para una prueba diferente simplemente reemplazando test.statisticcon algún otro cálculo. Hacemos eso a continuación.

Primeros resultados

Por defecto, nuestro código compara datos extraídos de dos distribuciones uniformes. Lo dejé hacer eso (para , que son conjuntos de datos bastante pequeños y, por lo tanto, presentan un caso de prueba moderadamente difícil) y luego lo repito para una comparación uniforme normal y una comparación uniforme exponencial. (Las distribuciones uniformes no son fáciles de distinguir de las distribuciones normales a menos que tenga un poco más de valores, pero las distribuciones exponenciales, que tienen un alto sesgo y una larga cola derecha, generalmente se distinguen fácilmente de las distribuciones uniformes).n.x=n.y=1616

set.seed(17)             # Makes the results reproducible
n.per.rep <- 1000        # Number of iterations to compute each p-value
n.reps <- 1000           # Number of times to call `f`
n.x <- 16; n.y <- 16     # Dataset sizes

par(mfcol=c(2,3))        # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)

normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)

exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)

Resultados de la prueba de correlación

A la izquierda está la distribución nula de los valores p cuando e son uniformes. Esperamos que el histograma sea casi uniforme (prestando especial atención al extremo izquierdo extremo, que está en el rango de resultados "significativos"), y en realidad lo es, y que la secuencia de valores obtenidos durante la simulación, se muestra debajo, parece aleatorio, y lo hace. Eso es bueno. Significa que podemos pasar al siguiente paso para estudiar cómo cambia esto cuando e provienen de diferentes distribuciones.XYXY

Las parcelas medias prueban variables uniformes contra variables normales . La mayoría de las veces, los valores p fueron más bajos de lo esperado. Eso indica una tendencia de esta prueba a detectar una diferencia. Pero no es grande. Por ejemplo, la barra más a la izquierda en el histograma muestra que de las 1000 corridas de (que comprenden 1000 conjuntos de datos simulados por separado), el valor p fue inferior a solo unas 110 veces. Si consideramos que es "significativo", entonces esta prueba tiene solo un % de posibilidades de detectar la diferencia entre una distribución uniforme y normal basada en16xi16yif0.051116valores independientes de cada uno. Eso es bastante bajo consumo. Pero tal vez sea inevitable, así que procedamos.

Las gráficas de la derecha prueban de manera similar una distribución uniforme contra una exponencial. Este resultado es extraño. Esta prueba tiende, en la mayoría de los casos, a concluir que los datos uniformes y los datos exponenciales tienen el mismo aspecto. ¡Parece "pensar" que las variables uniformes y exponenciales son más similares que dos variables uniformes! ¿Que está pasando aqui?

El problema es que los datos de una distribución exponencial tenderán a tener unos valores extremadamente altos. Cuando hace un diagrama de dispersión de aquellos contra valores distribuidos uniformemente, habrá unos pocos puntos en la esquina superior derecha de todos los demás. Eso corresponde a un coeficiente de correlación muy alto. Por lo tanto, cada vez que cualquiera de las distribuciones genera algunos valores extremos, el coeficiente de correlación es una elección terrible para medir cuán diferentes son las distribuciones. Esto lleva a otro problema aún peor: a medida que aumenta el tamaño del conjunto de datos, aumentan las posibilidades de obtener algunas observaciones extremas. Por lo tanto, podemos esperar que esta prueba funcione peor y peor a medida que aumenta la cantidad de datos. Que horrible ...

Una mejor prueba

La pregunta original ha sido respondida en forma negativa. Sin embargo, existe una prueba conocida y poderosa para discriminar entre distribuciones: la prueba de Kolmogorov-Smirnov. En lugar del coeficiente de correlación, calcula la desviación vertical más grande de la línea en su gráfico QQ. (Cuando los datos provienen de la misma distribución, el gráfico QQ tiende a seguir esta línea. De lo contrario, se desviará en alguna parte; la estadística KS recoge la desviación más grande).y=x

Aquí hay una Rimplementación:

test.statistic <- function(x, y) {
  ks.test(x,y)$statistic
}

Así es: está integrado en el software, por lo que solo tenemos que llamarlo. ¡Pero espera! Si usted lee el manual cuidadosamente, aprenderá que (a) los suministros de prueba un p-valor, pero (b) que el p-valor es (groseramente) incorrectos cuando ambos xy yson conjuntos de datos. Está diseñado para usarse cuando crees que sabes exactamente de qué distribución xprovienen los datos y quieres ver si eso es cierto. Por lo tanto, la prueba no se adapta adecuadamente a la incertidumbre sobre la distribución de la que yprovienen los datos .

¡No hay problema! El marco de prueba de permutación sigue siendo igual de válido. Al hacer el cambio anterior a test.statistic, todo lo que tenemos que hacer es volver a ejecutar el estudio anterior, sin cambios. Aquí están los resultados.

Estudio de prueba KS

Aunque la distribución nula no es uniforme (arriba a la izquierda), es bastante uniforme por debajo de o menos, que es donde realmente nos preocupamos por sus valores. Un vistazo a la gráfica debajo (abajo a la izquierda) muestra el problema: la estadística KS tiende a agruparse alrededor de algunos valores discretos. (Este problema prácticamente desaparece para conjuntos de datos más grandes).p=0.20

Los histogramas medio (uniforme vs normal) y derecho (uniforme vs exponencial) están haciendo exactamente lo correcto: en la gran mayoría de los casos en que las dos distribuciones difieren, esta prueba está produciendo pequeños valores de p. Por ejemplo, tiene un % de posibilidades de obtener un valor p menor que cuando se compara un uniforme con un normal basado en 16 valores de cada uno. Compare esto con el % piddling logrado por la prueba de coeficiente de correlación.700.0511

El histograma correcto no es tan bueno, ¡pero al menos ahora está en la dirección correcta! Estimamos que tiene una probabilidad del % de detectar la diferencia entre una distribución uniforme y exponencial en el nivel % y una probabilidad del % de hacer esa detección en el nivel % (porque las dos barras para el valor p menor que total sobre 500 de las 1000 iteraciones).30α=550α=100.10

Conclusiones

Por lo tanto, los problemas con la prueba de correlación no se deben a alguna dificultad inherente en este entorno. La prueba de correlación no solo funciona muy mal, es mala en comparación con una prueba ampliamente conocida y disponible. (Supongo que es inadmisible, lo que significa que siempre funcionará peor, en promedio, que la versión de permutación de la prueba KS, lo que implica que no hay razón para usarlo).

whuber
fuente
Muy buena explicación, y me gusta ver a otros hacer algunas simulaciones. Todavía tengo problemas para entender por qué una correlación parece predecir un poco (¿o ni siquiera podemos decir eso?). Además, la única vaga (pero parte crítica para entender por qué funciona KS) es acerca de "la línea x = y" ("calcula la desviación vertical más grande de la línea y = x en su gráfico QQ. (Cuando los datos provienen de la misma distribución, la trama QQ tiende a seguir esta línea "). Gracias por el esfuerzo, aprendí mucho
PascalVKooten
1
Todo es fácil de encontrar en Wikipedia a través de las búsquedas obvias :-). En cuanto a la correlación, el problema es que las variables pueden estar fuertemente correlacionadas pero tienen distribuciones totalmente diferentes; de hecho, existen secuencias de distribuciones que se separan arbitrariamente (en un sentido intuitivo) mientras que la distribución de su coeficiente de correlación se acerca arbitrariamente a en grandes conjuntos de datos. Esto hace que el coeficiente de correlación sea un pobre discriminador de distribución. 1
whuber
KS prueba si dos conjuntos de datos provienen de la misma función de distribución, es decir, sus CDF son iguales. Sin embargo, me parece que OP puede estar buscando una prueba que diga que Exp (0.1) es lo mismo que Exp (100), y Normal (0, 5) es lo mismo que Normal (10, .2 ) KS no hace esto en absoluto, y de hecho es probablemente imposible en general (y realmente no sé cuándo lo querría). Pero alguna prueba de cuán deformable es uno en el otro podría funcionar en casos simples (por ejemplo, el centrado y la estandarización manejarán las normales de manera decente, aunque no exponenciales).
Dougal
@Dougal, releí tu comentario. ¿Es correcto decir que cuando mencionamos que "las distribuciones son iguales", queremos decir que los CDF son iguales?
PascalVKooten
@PascalvKooten "Distribución" es una palabra que se usa para significar cosas diferentes en contextos diferentes. Sin embargo, en general, creo que "distribución" generalmente se entiende como algo definido por un CDF particular (o equivalente); "normal" o "gamma" se refieren a familias de distribuciones, que definen una distribución particular por sus valores de parámetros (por ejemplo, y para una normal). μσ2
Dougal
5

No, la correlación no es una buena prueba de esto.

x <- 1:100 #Uniform
y <- sort(rnorm(100)) #Normal
cor(x,y) #.98

No conozco una buena prueba que compare si, por ejemplo, dos distribuciones son normales, pero posiblemente con una media y una SD diferentes Indirectamente, podría probar la normalidad de cada una, por separado, y si ambas parecían normales, supongo que ambas lo fueron.

Peter Flom - Restablece a Monica
fuente
0

Si hay un número suficientemente grande de variables, entonces esto puede mostrar más correlación con los valores ordenados por tamaño. Sin embargo, no parece ser un método particularmente útil, sobre todo porque proporciona pocos medios para estimar la confianza de que podrían usar el mismo modelo.

Un problema que es probable que experimente es cuando tiene modelos con una media y asimetría similares, pero una diferencia en la curtosis, ya que un número moderado de mediciones puede ajustarse lo suficientemente bien como para parecer bastante correlacionado.

Parece más razonable modelar ambas variables contra diferentes distribuciones para ver cuál es más probable para cada una y comparar los resultados.

Puede haber algún mérito en normalizar ambos valores, ordenar y trazar cada uno, esto le permitirá ver cómo se comparan los ajustes, y también puede trazar un posible modelo para ambos, que estaría relacionado con lo que sugirió, pero en lugar de esperando una respuesta concreta, solo una idea visual sobre la cercanía de las distribuciones.

David Burton
fuente
(1) Mi análisis encuentra que la expectativa expresada en la primera oración no se confirma: con un número suficientemente grande de variables, si una de las distribuciones tiene colas cortas y la otra tiene una pequeña posibilidad de exhibir valores más extremos, entonces la correlación tiende a ser excesivamente alta. (2) Cuando "modela ... contra diferentes distribuciones", ¿cómo controla las múltiples pruebas dependientes que implica esa receta?
whuber