Obtuve los datos, tracé la distribución de los datos y uso la función qqnorm, pero parece que no sigue una distribución normal, entonces, ¿qué distribución debo usar para describir los datos?
Función empírica de distribución acumulativa
Obtuve los datos, tracé la distribución de los datos y uso la función qqnorm, pero parece que no sigue una distribución normal, entonces, ¿qué distribución debo usar para describir los datos?
Función empírica de distribución acumulativa
Respuestas:
Le sugiero que pruebe las distribuciones Lambert W x F de cola pesada o las distribuciones asimétricas Lambert W x F (descargo de responsabilidad: soy el autor). En R se implementan en el paquete LambertW .
Surgen de una transformación paramétrica, no lineal de una variable aleatoria (RV) , a una versión de cola gruesa (sesgada) . por siendo gaussiano, el Lambert W x F de cola pesada se reduce a Tukey distribución. (Aquí describiré la versión de cola pesada, la sesgada es análoga).
Tienen un parámetro (para Lambert torcido W x F) que regula el grado de pesadez de la cola (asimetría). Opcionalmente, también puede elegir diferentes colas pesadas izquierda y derecha para lograr colas pesadas y asimetría. Transforma un estándar normal a un Lambert W Gaussiano por
Si tiene colas más pesadas que ; para, .
Si no desea utilizar el gaussiano como línea de base, puede crear otras versiones Lambert W de su distribución favorita, por ejemplo, t, uniforme, gamma, exponencial, beta, ... Sin embargo, para su conjunto de datos un doble pesado- La distribución de cola de Lambert W x Gauss (o un sesgo Lambert W xt) parece ser un buen punto de partida.
library(LambertW)
set.seed(10)
### Set parameters ####
# skew Lambert W x t distribution with
# (location, scale, df) = (0,1,3) and positive skew parameter gamma = 0.1
theta.st <- list(beta = c(0, 1, 3), gamma = 0.1)
# double heavy-tail Lambert W x Gaussian
# with (mu, sigma) = (0,1) and left delta=0.2; right delta = 0.4 (-> heavier on the right)
theta.hh <- list(beta = c(0, 1), delta = c(0.2, 0.4))
### Draw random sample ####
# skewed Lambert W x t
yy <- rLambertW(n=1000, distname="t", theta = theta.st)
# double heavy-tail Lambert W x Gaussian (= Tukey's hh)
zz =<- rLambertW(n=1000, distname = "normal", theta = theta.hh)
### Plot ecdf and qq-plot ####
op <- par(no.readonly=TRUE)
par(mfrow=c(2,2), mar=c(3,3,2,1))
plot(ecdf(yy))
qqnorm(yy); qqline(yy)
plot(ecdf(zz))
qqnorm(zz); qqline(zz)
par(op)
En la práctica, por supuesto, tienes que estimar , dónde es el parámetro de su distribución de entrada (por ejemplo, para un gaussiano, o para distribución; ver papel para más detalles):
### Parameter estimation ####
mod.Lst <- MLE_LambertW(yy, distname="t", type="s")
mod.Lhh <- MLE_LambertW(zz, distname="normal", type="hh")
layout(matrix(1:2, ncol = 2))
plot(mod.Lst)
plot(mod.Lhh)
Dado que esta generación de cola pesada se basa en transformaciones biyectivas de RV / datos, puede eliminar las colas pesadas de los datos y verificar si son agradables ahora, es decir, si son gaussianos (y probarlo usando pruebas de normalidad).
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)
Esto funcionó bastante bien para el conjunto de datos simulado. Le sugiero que lo pruebe y vea si también puede hacer Gaussianize()
sus datos .
Sin embargo, como señaló @whuber, la bimodalidad puede ser un problema aquí. Entonces, tal vez desee verificar los datos transformados (sin las colas pesadas) de lo que está sucediendo con esta bimodalidad y, por lo tanto, brindarle información sobre cómo modelar sus datos (originales).
Esto parece una distribución asimétrica que tiene colas más largas, en ambas direcciones, que la distribución normal.
Puede ver la cola larga porque los puntos observados son más extremos que los esperados en la distribución normal, tanto en el lado izquierdo como en el derecho (es decir, están por debajo y por encima de la línea, respectivamente).
Puede ver la asimetría porque, en la cola derecha, la medida en que los puntos son más extremos de lo que se esperaría en una distribución normal es mayor que en la cola izquierda.
No puedo pensar en ninguna distribución "enlatada" que tenga esta forma, pero no es demasiado difícil "cocinar" una distribución que tenga las propiedades indicadas anteriormente.
Aquí hay un ejemplo simulado (en R
):
set.seed(1234)
x=rexp(1e3)
y=-rexp(1e3,rate=2)
z=c(x,y)
qqnorm(z)
qqline(z) # see below for the plot.
plot( ecdf(z) ) # see below for plot (2nd plot)
La variable aquí es una mezcla 50/50 entre un y un se reflejó alrededor de 0. Esta elección se hizo porque será, por definición, asimétrica, ya que hay diferentes parámetros de velocidad, y ambos serán de cola larga en relación con la distribución normal, con la cola derecha más larga, ya que la velocidad en la mano derecha El lado es más grande.
Este ejemplo produce un qqplot bastante similar y un CDF empírico (cualitativamente) a lo que está viendo:
Para determinar qué distribución es la más adecuada, primero identificaría algunas distribuciones objetivo potenciales: pensaría en el proceso del mundo real que generó los datos, luego ajustaría algunas densidades potenciales a los datos y compararía sus puntajes de verosimilitud para ver qué distribución potencial se ajusta mejor. Esto es fácil en R con la función fitdistr en la biblioteca MASS.
Si sus datos son como la z de Macro, entonces:
>fitdistr(z,'cauchy',list(location=mean(z),scale=sqrt(sd(z))))$loglik
[1] -2949.068
> fitdistr(z,'normal')$loglik
[1] -3026.648
> fitdistr(z,'t')$loglik
[1] -2830.861
Entonces esto da la distribución t como la mejor adaptación (de las que probamos) para los datos de Macro. confirme esto con algunos qqplots usando los parámetros de fitdistr.
> qqplot(z,rt(length(z),df=2.7))
Luego compare este gráfico con los otros ajustes de distribución.