Ich schlage vor, Sie versuchen es mit Lambert W x F- Verteilungen mit schwerem Schwanz oder verzerrten Lambert W x F- Verteilungen (Haftungsausschluss: Ich bin der Autor). In R sind sie im LambertW- Paket implementiert .
Sie entstehen aus einer parametrischen, nicht-linearen Transformation einer Zufallsvariablen (RV) , zu einer schweren Schwanz (schiefe) Version . Da Gauß ist, reduziert sich der Lambert W x F mit schwerem Schwanz auf Tukeys Verteilung. (Ich werde hier die Heavy-Tail-Version skizzieren, die verzerrte ist analog.)Y ≤ Lambert W × F F hX.∼ F.Y.∼ Lambert W × F.F.h
γ ∈ R U ∼ N ( 0 , 1 ) ×δ≥ 0γ∈ R.U.∼ N.( 0 , 1 )×Z.
Z=Uexp(δ2U2)
δ>0 ZUδ=0Z≡U
Wenn Sie den Gaußschen Wert nicht als Basis verwenden möchten, können Sie andere Lambert W-Versionen Ihrer bevorzugten Distribution erstellen, z. B. t, uniform, gamma, exponentiell, beta, ... Für Ihren Datensatz ist jedoch ein Double Heavy- Schwanz Lambert W x Gaußsche (oder eine schiefe Lambert W xt) Verteilung scheint ein guter Ausgangspunkt zu sein.
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)
θ=(β,δ)ββ=(μ,σ)β=(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)
Da dieser schweren Schwanz Generation auf einem basiert bijektive Transformationen von RVs / Daten, Sie können schwere Schwänze von Daten entfernen und überprüfen , ob sie sind schön jetzt, das heißt, wenn sie Gaussian sind (und testen Sie es Normalitätstests verwendet wird ).
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)
Dies funktionierte ziemlich gut für den simulierten Datensatz. Ich schlage vor, Sie probieren es aus und sehen, ob Sie auch Gaussianize()
Ihre Daten können .
Wie @whuber jedoch betonte, kann Bimodalität hier ein Problem sein. Vielleicht möchten Sie also die transformierten Daten (ohne die schweren Schwänze) einchecken, was mit dieser Bimodalität los ist, und Ihnen so Einblicke in die Modellierung Ihrer (ursprünglichen) Daten geben.