Je travaille sur un algorithme qui repose sur le fait que les observations sont normalement distribuées, et je voudrais tester empiriquement la robustesse de l'algorithme à cette hypothèse.
Pour ce faire, je cherchais une suite de transformations qui perturberait progressivement la normalité de . Par exemple, si les sont normaux, ils ont une asymétrie et une kurtosis , et il serait bien de trouver une séquence de transformation qui augmente progressivement les deux.
Mon idée était de simuler des données normalement distribuées approximativement et de tester l'algorithme à ce sujet. Ensuite, testez l'algorithme sur chaque jeu de données transformé , pour voir à quel point la sortie change.
Notez que je ne contrôle pas la distribution des simulés , je ne peux donc pas les simuler à l'aide d'une distribution qui généralise le Normal (telle que la distribution des erreurs généralisées asymétriques).
la source
Réponses:
Cela peut être fait en utilisant la transformation sinh-arcsinh de
La transformation est définie comme
où et δ ∈ R + . Lorsque cette transformation est appliquée à la CDF normale S ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] , elle produit une distribution unimodale dont les paramètres ( ϵ , δ ) contrôlent respectivement l'asymétrie et la kurtosis (Jones et Pewsey, 2009), au sens de van Zwet (1969) . De plus, si ϵ = 0 et δϵ ∈ R δ∈ R+ S( x ; ϵ , δ) = Φ [ H( x ; ϵ , δ) ] ( ϵ , δ) ϵ = 0 , on obtient la distribution normale d'origine. Voir le code R suivant.δ= 1
Par conséquent, en choisissant une séquence appropriée de paramètres , vous pouvez générer une séquence de distributions / transformations avec différents niveaux d'asymétrie et de kurtosis et les rendre aussi similaires ou différents de la distribution normale que vous le souhaitez.( ϵn, δn)
Le graphique suivant montre le résultat produit par le code R. Pour (i) et δ = 1 , et (ii) ϵ = 0 et δ = ( 0,5 , 0,75 , 1 , 1,25 , 1,5 ) .ϵ = ( - 2 , - 1 , 0 , 1 , 2 ) δ= 1 ϵ = 0 δ= ( 0,5 , 0,75 , 1 , 1,25 , 1,5 )
La simulation de cette distribution est simple étant donné qu'il suffit de transformer un échantillon normal en utilisant l'inverse de .( ⋆ )
la source
gamlss.dist::rSHASHo
ces distributions puissent être générées.Cela peut être fait en utilisant des variables / distributions aléatoires Lambert W x F. Une variable aléatoire Lambert W x F (RV) est un X non transformé linéairement (RV) de distribution F.
Gaussianize()
Ils sont mis en œuvre dans le
Les transformations Lambert W x F se déclinent en 3 saveurs:
type = 's'
type = 'h'
type = 'hh'
Voir les références sur les queues asymétriques et lourdes (Avertissement: je suis l'auteur.)
Dans R, vous pouvez simuler, estimer, tracer, etc. plusieurs distributions Lambert W x F avec le package LambertW .
la source
Une telle séquence est l'exponentiation à divers degrés. Par exemple
la source
Même réponse que @ user10525 mais en python
[
la source