Sto cercando una distribuzione in cui la densità di probabilità diminuisca rapidamente dopo qualche punto di distanza dalla media, o in parole mie una "distribuzione a forma di plateau".
Qualcosa tra il gaussiano e l'uniforme.
Sto cercando una distribuzione in cui la densità di probabilità diminuisca rapidamente dopo qualche punto di distanza dalla media, o in parole mie una "distribuzione a forma di plateau".
Qualcosa tra il gaussiano e l'uniforme.
Risposte:
È possibile che si stia cercando una distribuzione nota con i nomi di normale generalizzato (versione 1) , distribuzione di Subbotin o distribuzione di potenza esponenziale. È parametrizzato per posizione , scala e forma con pdfσ β
come puoi notare, per assomiglia e converge alla distribuzione di Laplace, con converge alla normalità e quando alla distribuzione uniforme.β = 2 β = ∞
Se stai cercando un software che lo abbia implementato, puoi controllare la normalp
libreria per R (Mineo e Ruggieri, 2005). La cosa bella di questo pacchetto è che, tra le altre cose, implementa la regressione con errori normalmente distribuiti, cioè minimizzando la norma .
Mineo, AM, & Ruggieri, M. (2005). Uno strumento software per la distribuzione esponenziale dell'alimentazione: il pacchetto normalp. Journal of Statistical Software, 12 (4), 1-24.
Il commento di StrongBad è davvero un buon suggerimento. La somma di un camper uniforme e di un gaussiano può darti esattamente quello che stai cercando se scegli i parametri giusti. E in realtà ha una soluzione a forma chiusa ragionevolmente bella.
Il pdf di questa variabile è dato dall'espressione:
σ è il "raggio" del RV uniforme a media zero. è la deviazione standard del camper gaussiano a media zero.
C'è un numero infinito di distribuzioni "a forma di plateau".
Cercavi qualcosa di più specifico di "tra il gaussiano e l'uniforme"? È piuttosto vago.
Eccone una semplice: puoi sempre attaccare una mezza normale ad ogni estremità di una divisa:
Puoi controllare la "larghezza" dell'uniforme rispetto alla scala della normale in modo da poter avere plateau più ampi o più stretti, dando un'intera classe di distribuzioni, che includono il gaussiano e l'uniforme come casi limitanti.
La densità è:
dove
Come per fixed , ci avviciniamo all'uniforme su e come per fixed ci avviciniamo a .
Ecco alcuni esempi (con in ogni caso):
Potremmo forse definire questa densità una "uniforme dalla coda gaussiana".
Vedi la mia distribuzione "Devil's tower" qui [1]:
| x | < 0.9399 f ( x ) = 0.2945 / x 2 0.9399 ≤ | x | < 2.3242 f ( x ) = 0 2.3242 ≤ | x | , per ; , per ; e , per.
La distribuzione "slip-dress" è ancora più interessante.
È facile costruire distribuzioni con qualsiasi forma tu voglia.
[1]: Westfall, PH (2014)
"Kurtosis as Peakedness, 1905 - 2014. PIR"
Em. Statistica. 68 (3): 191–195. doi: 10.1080 / 00031305.2014.917055
accesso pubblico pdf: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4321753/pdf/nihms-599845.pdf
Molte belle risposte. La soluzione qui proposta ha 2 caratteristiche: (i) che ha una forma funzionale particolarmente semplice, e (ii) che la distribuzione risultante produce necessariamente un pdf a forma di plateau (non solo come un caso speciale). Non sono sicuro che questo abbia già un nome in letteratura, ma assente lo stesso, chiamiamolo una distribuzione Plateau con pdf :
dove:
Ecco un grafico del pdf, per diversi valori del parametro :
.
Quando il parametro diventa grande, la densità tende verso una distribuzione Uniforme (-1,1). La seguente trama si confronta anche con una normale (tratteggiata grigia):
Un altro ( EDIT : l'ho semplificato ora. EDIT2 : l'ho semplificato ulteriormente, anche se ora l'immagine non riflette davvero questa equazione esatta):
Clunky, lo so, ma qui ho approfittato del fatto che avvicina a una linea quando aumenta.x
Fondamentalmente hai il controllo su quanto è regolare la transizione ( ). Se e vi garantisco che è una densità di probabilità valida (somme a 1). Se scegli altri valori, dovrai rinormalizzarli.a = 2 b = 1
Ecco un po 'di codice di esempio in 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
è la nostra distribuzione. Tracciamolo per una sequenza dix
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)
Uscita 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"
E trama:
Potresti cambiare a
e b
, rispettivamente, circa l'inizio e la fine della pendenza, ma poi sarebbe necessaria un'ulteriore normalizzazione, e non l'ho calcolata (ecco perché sto usando a = 2
e b = 1
nella trama).
Se stai cercando qualcosa di molto semplice, con un plateau centrale e i lati di una distribuzione triangolare, puoi ad esempio combinare N distribuzioni triangolari, N a seconda del rapporto desiderato tra il plateau e la discesa. Perché triangoli, perché le loro funzioni di campionamento esistono già nella maggior parte delle lingue. Ordina casualmente da uno di essi.
In R ciò darebbe:
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)
Eccone una bella: il prodotto di due funzioni logistiche.
(1/B) * 1/(1+exp(A*(x-B))) * 1/(1+exp(-A*(x+B)))
Questo ha il vantaggio di non essere a tratti.
B regola la larghezza e A regola la pendenza della discesa. Di seguito sono mostrati B = 1: 6 con A = 2. Nota: non ho avuto il tempo di capire come normalizzare correttamente questo.