Le sugiero dar pesado-cola Lambert W x F o sesgada Lambert W x F distribuciones de una prueba (descargo de responsabilidad: yo soy el autor). En R que se implementaron en el LambertW paquete.
Surgen de una paramétrico, no-lineal de la transformación de una variable aleatoria (RV) $X \sim F$, a un pesado de cola (sesgada) de la versión $Y \sim \text{Lambert W} \times F$. Para $F$ Gaussiano, pesado-cola Lambert W x F se reduce a Tukey $h$ distribución. (He aquí el esquema de pesado-cola versión, la sesgada uno es análogo.)
Tienen un parámetro $\delta \geq 0$ ($\gamma \in \mathbb{R}$ para sesgada Lambert W x F) que regula el grado de cola de pesadez (asimetría). Opcionalmente, también puede elegir diferentes a la izquierda y a la derecha pesadas colas para lograr pesado-colas y la asimetría. Transforma una Normal estándar $U \sim \mathcal{N}(0,1)$ a un Lambert W $\times$ Gaussiano $Z$ por
$$
Z = U \exp\left(\frac{\delta}{2} U^2\right)
$$
If $\delta > 0$ $Z$ has heavier tails than $U$; for $\delta = 0$, $Z \equiv U$.
If you don't want to use the Gaussian as your baseline, you can create other Lambert W versions of your favorite distribution, e.g., t, uniform, gamma, exponential, beta, ... However, for your dataset a double heavy-tail Lambert W x Gaussian (or a skew Lambert W x t) distribution seem to be a good starting point.
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)
In practice, of course, you have to estimate $\theta = (\beta \delta)$, where $\beta$ is the parameter of your input distribution (e.g., $\beta = (\mu \sigma)$ for a Gaussian, or $\beta = (c, s, \nu)$ for a $t$ de distribución; véase el documento 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)
Desde esta pesada-cola generación se basa en un bijective transformaciones de RVs/datos, usted puede quitar pesado-las colas de los datos y comprobar si son de niza ahora, es decir, si son de Gauss (y la prueba es el uso de 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 simulados. Sugiero darle una oportunidad y ver si usted puede también Gaussianize()
sus datos.
Sin embargo, como @whuber señalado, la bimodalidad puede ser un problema aquí. Así que tal vez usted desee comprobar en los datos transformados (sin las pesadas colas) lo que está pasando con esta bimodalidad y así darle ideas sobre cómo el modelo de tu (original) de datos.