Je vous suggère d' essayer les distributions Lambert W x F à queue lourde ou asymétriques Lambert W x F (avis de non-responsabilité: je suis l'auteur). Dans R, ils sont implémentés dans le package LambertW .
Ils proviennent d'une paramétrique, transformation non linéaire d'une variable aléatoire (RV) , à une lourde queue Version (asymétrique) . Pour étant gaussien, le Lambert W x F à queue lourde se réduit à la distribution de Tukey . (Je décrirai ici la version à queue lourde, celle asymétrique est analogue.)X∼FY∼Lambert W×FFh
Ils ont un paramètre ( pour Lambert W x F asymétrique) qui régule le degré de lourdeur de la queue (asymétrie). En option, vous pouvez également choisir différentes queues lourdes gauche et droite pour obtenir des queues lourdes et une asymétrie. Il transforme un Normal normal en Lambert W Gaussian par
δ≥0γ∈RU∼N(0,1)×Z
Z=Uexp(δ2U2)
Si a des queues plus lourdes que ; pour , .δ>0 ZUδ=0Z≡U
Si vous ne voulez pas utiliser le gaussien comme base de référence, vous pouvez créer d'autres versions Lambert W de votre distribution préférée, par exemple, t, uniforme, gamma, exponentielle, bêta, ... Cependant, pour votre jeu de données, un double lourd- La distribution de la queue Lambert W x gaussienne (ou une asymétrie Lambert W xt) semble être un bon point de départ.
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 pratique, bien sûr, vous devez estimer , où est le paramètre de votre distribution d'entrée (par exemple, pour un gaussien, ou pour une distribution ; voir le papier pour plus de détails):θ=(β,δ)ββ=(μ,σ)β=(c,s,ν)t
### 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)

Étant donné que cette génération de queue lourde est basée sur des transformations bijectives de VR / données, vous pouvez supprimer les queues lourdes des données et vérifier si elles sont bien maintenant, c'est-à-dire si elles sont gaussiennes (et les tester en utilisant des tests de normalité).
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)

Cela a plutôt bien fonctionné pour l'ensemble de données simulé. Je vous suggère de l'essayer et de voir si vous pouvez également Gaussianize()
vos données .
Cependant, comme l'a souligné @whuber, la bimodalité peut être un problème ici. Alors peut-être que vous voulez vérifier les données transformées (sans les queues lourdes) ce qui se passe avec cette bimodalité et ainsi vous donner un aperçu de la façon de modéliser vos données (originales).