Processing math: 100%

7 votos

Comparar y visualizar las distribuciones muy sesgadas

Los datos que estoy trabajando son muy sesgada, con la gran mayoría de los datos concentrados en 0. Parece muy difícil poner de relieve las diferencias entre estos tipos de distribuciones:

gamma1 <- rgamma(10000, shape=0.05, rate=1)
gamma2 <- rgamma(10000, shape=0.055, rate=0.98)
gamma3 <- rgamma(10000, shape=0.06, rate=0.95)

c(mean(gamma1), mean(gamma2), mean(gamma3))

[1] 0.04845668 0.05253655 0.05797983

ks.test(gamma1, gamma2)

 Two-sample Kolmogorov-Smirnov test

  data:  gamma1 and gamma2  
  D = 0.0433, p-value = 1.44e-08  
  alternative hypothesis: two-sided

ks.test(gamma2, gamma3)

 Two-sample Kolmogorov-Smirnov test

 data:  gamma2 and gamma3  
 D = 0.0456, p-value = 1.864e-09  
 alternative hypothesis: two-sided  

ks.test(gamma1, gamma3)

Two-sample Kolmogorov-Smirnov test

 data:  gamma1 and gamma3  
 D = 0.0798, p-value < 2.2e-16  
 alternative hypothesis: two-sided

Como la mayoría de los datos está en 0, histogramas no son muy útiles para ver las diferencias entre las distribuciones (por no mencionar el hecho no parece ser una manera conveniente para trazar un histograma con múltiples distribuciones en R, ver https://github.com/hadley/ggplot2/issues/1081):

Histograms

Violín parcelas parecen distorsionar la forma de la distribución (que parece mucho más normal de lo que realmente son) y, ya que los medios son muy bajos, las cajas son casi invisibles:

Violin plots

Desde estas parcela en realidad no se ve nada útil, me preguntaba si hay una mejor manera de visualizar distribuciones sesgadas?

5voto

icelava Puntos 548

Tenga en cuenta que su gamma de datos no están en cero, ellos están cerca de cero, de modo que usted puede trabajar con los logaritmos. Si el real de datos contienen ceros y sólo utilizó sesgada gammas para crear un ejemplo aquí, usted puede cambiar sus datos por un pequeño ϵ a hacerlos positivos y, a continuación, tomar registros.

set.seed(1)
gamma1 <- rgamma(10000, shape=0.05, rate=1)
gamma2 <- rgamma(10000, shape=0.055, rate=0.98)
gamma3 <- rgamma(10000, shape=0.06, rate=0.95)

Veo dos posibilidades. Usted podría utilizar beanplots con los datos registrados, alineándolos a través de la ylim argumento.

library(beanplot)
opar <- par(mfrow=c(1,3))
    beanplot(gamma1,what=c(1,1,0,0),log="y",ylim=range(c(gamma1,gamma2,gamma3)),col="grey")
    beanplot(gamma2,what=c(1,1,0,0),log="y",ylim=range(c(gamma1,gamma2,gamma3)),col="grey")
    beanplot(gamma3,what=c(1,1,0,0),log="y",ylim=range(c(gamma1,gamma2,gamma3)),col="grey")
par(opar)

beanplot

O, si usted realmente desea comparar sus tres distribuciones usted podría hacer por parejas q parcelas en el registro de escalas:

pairs(cbind(sort(gamma1),sort(gamma2),sort(gamma3)),log="xy",
  panel=function(x,y,...){points(x,y,pch=19,cex=0.2,...); abline(a=0,b=1)})

pairwise qq plots

El beanplot hace hincapié en la extrema asimetría de los tres conjuntos de datos (nota: los registros), mientras que los pares gráficos qq hincapié en que los conjuntos de datos son diferentes, mientras que la pérdida de la asimetría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X