Je recherche une distribution où la densité de probabilité diminue rapidement après un certain point loin de la moyenne, ou selon mes propres mots une "distribution en forme de plateau".
Quelque chose entre le gaussien et l'uniforme.
Je recherche une distribution où la densité de probabilité diminue rapidement après un certain point loin de la moyenne, ou selon mes propres mots une "distribution en forme de plateau".
Quelque chose entre le gaussien et l'uniforme.
Réponses:
Vous recherchez peut-être une distribution connue sous les noms de distribution généralisée normale (version 1) , de distribution Subbotin ou de distribution d'énergie exponentielle. Il est paramétré par emplacement , échelle et forme avec pdfσ β
comme vous pouvez le constater, pour il ressemble et converge vers la distribution de Laplace, avec il converge vers la normale, et quand vers une distribution uniforme.β = 2 β = ∞
Si vous recherchez un logiciel qui l'a implémenté, vous pouvez vérifier la normalp
bibliothèque pour R (Mineo et Ruggieri, 2005). Ce qui est bien avec ce paquet, c'est qu'il implémente entre autres la régression avec des erreurs généralisées normalement distribuées, c'est-à-dire en minimisant la norme .
Mineo, AM et Ruggieri, M. (2005). Un outil logiciel pour la distribution d'énergie exponentielle: le package normalp. Journal of Statistical Software, 12 (4), 1-24.
Le commentaire de StrongBad est une très bonne suggestion. La somme d'un RV uniforme et d'un RV gaussien peut vous donner exactement ce que vous recherchez si vous choisissez les bons paramètres. Et il a en fait une solution de forme fermée assez agréable.
Le pdf de cette variable est donné par l'expression:
σ est le "rayon" du RV uniforme à moyenne nulle. est l'écart type du RV gaussien à moyenne nulle.
Il existe un nombre infini de distributions "en forme de plateau".
Étiez-vous après quelque chose de plus spécifique que "entre le gaussien et l'uniforme"? C'est un peu vague.
En voici une simple: vous pouvez toujours coller une demi-normale à chaque extrémité d'un uniforme:
Vous pouvez contrôler la "largeur" de l'uniforme par rapport à l'échelle de la normale afin d'avoir des plateaux plus larges ou plus étroits, donnant toute une classe de distributions, qui incluent le gaussien et l'uniforme comme cas limites.
La densité est:
où
Comme pour fixe , nous approchons l'uniforme sur et comme pour fixe nous approchons .
Voici quelques exemples (avec dans chaque cas):
On pourrait peut-être appeler cette densité un "uniforme à queue gaussienne".
Voir ma distribution "Devil's tower" ici [1]:
, pour ; , pour ; et , pour.
La distribution "slip-dress" est encore plus intéressante.
Il est facile de construire des distributions ayant la forme que vous souhaitez.
[1]: Westfall, PH (2014)
"Kurtosis as Peakedness, 1905 - 2014. RIP"
Am. Stat. 68 (3): 191-195. doi: 10.1080 / 00031305.2014.917055
accès public pdf: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4321753/pdf/nihms-599845.pdf
Beaucoup de bonnes réponses. La solution proposée ici a 2 caractéristiques: (i) qu'elle a une forme fonctionnelle particulièrement simple, et (ii) que la distribution résultante produit nécessairement un pdf en forme de plateau (et pas seulement comme un cas spécial). Je ne sais pas si cela a déjà un nom dans la littérature, mais même absent, appelons-le une distribution Plateau avec pdf :
où:
Voici un tracé du pdf, pour différentes valeurs du paramètre :
.
Lorsque le paramètre devient grand, la densité tend vers une distribution uniforme (-1,1). Le graphique suivant se compare également à un Normal standard (en pointillés gris):
Un autre ( EDIT : je l'ai simplifié maintenant. EDIT2 : je l'ai encore simplifié, bien que maintenant l'image ne reflète pas vraiment cette équation exacte):
Clunky, je sais, mais ici j'ai profité du fait que s'approche d'une ligne lorsque augmente.x
Fondamentalement, vous contrôlez la fluidité de la transition ( ). Si et je garantis que c'est une densité de probabilité valide (somme à 1). Si vous choisissez d'autres valeurs, vous devrez le renormaliser.a = 2 b = 1
Voici un exemple de code dans R:
f = function(x, a, b, alpha){
y = log((cosh(2*alpha*pi*a)+cosh(2*alpha*pi*x))/(cosh(2*alpha*pi*b)+cosh(2*alpha*pi*x)))
y = y/pi/alpha/6
return(y)
}
f
est notre distribution. Tracons-le pour une séquence dex
plot(0, type = "n", xlim = c(-5,5), ylim = c(0,0.4))
x = seq(-100,100,length.out = 10001L)
for(i in 1:10){
y = f(x = x, a = 2, b = 1, alpha = seq(0.1,2, length.out = 10L)[i]); print(paste("integral =", round(sum(0.02*y), 3L)))
lines(x, y, type = "l", col = rainbow(10, alpha = 0.5)[i], lwd = 4)
}
legend("topright", paste("alpha =", round(seq(0.1,2, length.out = 10L), 3L)), col = rainbow(10), lwd = 4)
Sortie console:
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = 1"
#[1] "integral = NaN" #I suspect underflow, inspecting the plots don't show divergence at all
#[1] "integral = NaN"
#[1] "integral = NaN"
Et l'intrigue:
Vous pouvez changer a
et b
approximativement le début et la fin de la pente respectivement, mais une normalisation supplémentaire serait nécessaire, et je ne l'ai pas calculée (c'est pourquoi j'utilise a = 2
et b = 1
dans l'intrigue).
Si vous cherchez quelque chose de très simple, avec un plateau central et les côtés d'une distribution triangulaire, vous pouvez par exemple combiner N distributions triangulaires, N selon le rapport souhaité entre le plateau et la descente. Pourquoi des triangles, car leurs fonctions d'échantillonnage existent déjà dans la plupart des langues. Vous triez au hasard à partir de l'un d'eux.
En R, cela donnerait:
library(triangle)
rplateau = function(n=1){
replicate(n, switch(sample(1:3, 1), rtriangle(1, 0, 2), rtriangle(1, 1, 3), rtriangle(1, 2, 4)))
}
hist(rplateau(1E5), breaks=200)
En voici une jolie: le produit de deux fonctions logistiques.
(1/B) * 1/(1+exp(A*(x-B))) * 1/(1+exp(-A*(x+B)))
Cela a l'avantage de ne pas être fragmentaire.
B ajuste la largeur et A ajuste la pente de la chute. Ci-dessous, B = 1: 6 avec A = 2. Remarque: je n'ai pas pris le temps de comprendre comment normaliser correctement cela.