Esiste una misura di "uniformità" della diffusione?


14

Ho cercato sul web, ma non sono riuscito a trovare nulla di utile.

Sto fondamentalmente cercando un modo per misurare come "uniformemente" viene distribuito un valore. Come in, una distribuzione distribuita "uniformemente" come X : inserisci qui la descrizione dell'immagine

e una distribuzione distribuita "in modo non uniforme" Y approssimativamente della stessa media e deviazione standard: inserisci qui la descrizione dell'immagine

Ma c'è qualche misura di uniformità m, tale che m (X)> m (Y)? In caso contrario, quale sarebbe il modo migliore per creare una misura come questa?

(Schermata delle immagini della Khan Academy)


1
Che dire di inclinazione?
Wolfsatthedoor,

L'entropia è utile per distribuzioni discrete con lo stesso supporto. Ma non so se sia bello per le distribuzioni continue.
Stéphane Laurent,

Sei sicuro che la trama dei punti sia ciò che desideri? Non penso che tu voglia davvero chiedere l'uniformità. Sembra una domanda su "ingombro" o "grado di raggruppamento" o persino multimodalità.
Shadowtalker

@ StéphaneLaurent - Mi è stata consigliata l'entropia anche da pochi altri. Potresti per favore prendere il tempo ed elaborare un po 'su di esso?
Ketan,

1
Devi definire più chiaramente cosa intendi con "distribuzione uniforme". Il mio cervello con mentalità letterale afferma che dati come 1,4,7,10,13, ... sono distribuiti in modo perfettamente uniforme. Ma potresti voler dire qualcosa di completamente diverso.
Emil Friedman,

Risposte:


16

Una misura di "uniformità" standard, potente, ben compresa, teoricamente ben consolidata e frequentemente implementata è la funzione di Ripley K e il suo parente stretto, la funzione di L. Sebbene questi siano tipicamente utilizzati per valutare configurazioni di punti spaziali bidimensionali, l'analisi necessaria per adattarli a una dimensione (che di solito non è indicata nei riferimenti) è semplice.


Teoria

La funzione K stima la proporzione media di punti entro una distanza da un punto tipico. Per una distribuzione uniforme sull'intervallo [ 0 , 1 ] , la proporzione reale può essere calcolata e (asintoticamente nella dimensione del campione) uguale a 1 - ( 1 - d ) 2 . La versione unidimensionale appropriata della funzione L sottrae questo valore da K per mostrare deviazioni dall'uniformità. Potremmo quindi considerare di normalizzare qualsiasi lotto di dati per avere un intervallo di unità ed esaminare la sua funzione L per deviazioni intorno allo zero.d[0,1]1(1d)2


Esempi lavorati

Per illustrare , Ho simulato campioni indipendenti di dimensioni 64 da una distribuzione uniforme e tramato loro (normalizzata) funzioni L per brevi distanze (da 0 a 1 / 3 ), creando così una busta per stimare la distribuzione di campionamento della funzione L. (I punti tracciati bene all'interno di questo inviluppo non possono essere significativamente distinti dall'uniformità.) Oltre a ciò ho tracciato le funzioni L per campioni della stessa dimensione da una distribuzione a forma di U, una distribuzione della miscela con quattro componenti ovvi e una distribuzione normale standard. Gli istogrammi di questi campioni (e delle loro distribuzioni principali) sono mostrati come riferimento, usando i simboli di linea per abbinare quelli delle funzioni L.9996401/3

figura

I picchi netti e separati della distribuzione a forma di U (linea rossa tratteggiata, istogramma più a sinistra) creano gruppi di valori ravvicinati. Ciò si riflette in una pendenza molto grande nella funzione L a . La funzione L quindi diminuisce, diventando infine negativa per riflettere gli spazi vuoti a distanze intermedie.0

Il campione della distribuzione normale (linea blu continua, istogramma più a destra) è abbastanza vicino alla distribuzione uniforme. Di conseguenza, la sua funzione L non si discosta rapidamente da . Tuttavia, a distanze di circa 0,10 , è aumentato sufficientemente al di sopra dell'inviluppo per segnalare una leggera tendenza a raggrupparsi. Il continuo aumento su distanze intermedie indica che il clustering è diffuso e diffuso (non limitato ad alcuni picchi isolati).00.10

La grande pendenza iniziale per il campione dalla distribuzione della miscela (istogramma medio) rivela il raggruppamento a piccole distanze (meno di ). Scendendo a livelli negativi, segnala la separazione a distanze intermedie. Confrontarlo con la funzione L della distribuzione a forma di U è rivelatore: le pendenze a 0 , gli importi con cui queste curve salgono al di sopra di 0 e le velocità con cui alla fine scendono di nuovo a 0 forniscono tutte informazioni sulla natura del raggruppamento presente in i dati. Ognuna di queste caratteristiche potrebbe essere scelta come singola misura di "uniformità" per adattarsi a una particolare applicazione.0.15000

Questi esempi mostrano come una funzione L può essere esaminata per valutare le partenze dei dati dall'uniformità ("uniformità") e come le informazioni quantitative sulla scala e sulla natura delle partenze possono essere estratte da esso.

(Si può effettivamente tracciare l'intera funzione L, estendendosi alla distanza completamente normalizzata di , per valutare le deviazioni su larga scala dall'uniformità. Di solito, tuttavia, valutare il comportamento dei dati a distanze minori è di maggiore importanza.)1


Software

Rsegue il codice per generare questa cifra. Inizia definendo le funzioni per calcolare K e L. Crea una capacità di simulare da una distribuzione della miscela. Quindi genera i dati simulati e crea i grafici.

Ripley.K <- function(x, scale) {
  # Arguments:
  # x is an array of data.
  # scale (not actually used) is an option to rescale the data.
  #
  # Return value:
  # A function that calculates Ripley's K for any value between 0 and 1 (or `scale`).
  #
  x.pairs <- outer(x, x, function(a,b) abs(a-b))  # All pairwise distances
  x.pairs <- x.pairs[lower.tri(x.pairs)]          # Distances between distinct pairs
  if(missing(scale)) scale <- diff(range(x.pairs))# Rescale distances to [0,1]
  x.pairs <- x.pairs / scale
  #
  # The built-in `ecdf` function returns the proportion of values in `x.pairs` that
  # are less than or equal to its argument.
  #
  return (ecdf(x.pairs))
}
#
# The one-dimensional L function.
# It merely subtracts 1 - (1-y)^2 from `Ripley.K(x)(y)`.  
# Its argument `x` is an array of data values.
#
Ripley.L <- function(x) {function(y) Ripley.K(x)(y) - 1 + (1-y)^2}
#-------------------------------------------------------------------------------#
set.seed(17)
#
# Create mixtures of random variables.
#
rmixture <- function(n, p=1, f=list(runif), factor=10) {
  q <- ceiling(factor * abs(p) * n / sum(abs(p)))
  x <- as.vector(unlist(mapply(function(y,f) f(y), q, f)))
  sample(x, n)
}
dmixture <- function(x, p=1, f=list(dunif)) {
  z <- matrix(unlist(sapply(f, function(g) g(x))), ncol=length(f))
  z %*% (abs(p) / sum(abs(p)))
}
p <- rep(1, 4)
fg <- lapply(p, function(q) {
  v <- runif(1,0,30)
  list(function(n) rnorm(n,v), function(x) dnorm(x,v), v)
  })
f <- lapply(fg, function(u) u[[1]]) # For random sampling
g <- lapply(fg, function(u) u[[2]]) # The distribution functions
v <- sapply(fg, function(u) u[[3]]) # The parameters (for reference)
#-------------------------------------------------------------------------------#
#
# Study the L function.
#
n <- 64                # Sample size
alpha <- beta <- 0.2   # Beta distribution parameters

layout(matrix(c(rep(1,3), 3, 4, 2), 2, 3, byrow=TRUE), heights=c(0.6, 0.4))
#
# Display the L functions over an envelope for the uniform distribution.
#
plot(c(0,1/3), c(-1/8,1/6), type="n", 
     xlab="Normalized Distance", ylab="Total Proportion",
     main="Ripley L Functions")
invisible(replicate(999, {
  plot(Ripley.L(x.unif <- runif(n)), col="#00000010", add=TRUE)
}))
abline(h=0, lwd=2, col="White")
#
# Each of these lines generates a random set of `n` data according to a specified
# distribution, calls `Ripley.L`, and plots its values.
#
plot(Ripley.L(x.norm <- rnorm(n)), col="Blue", lwd=2, add=TRUE)
plot(Ripley.L(x.beta <- rbeta(n, alpha, beta)), col="Red", lwd=2, lty=2, add=TRUE)
plot(Ripley.L(x.mixture <- rmixture(n, p, f)), col="Green", lwd=2, lty=3, add=TRUE)
#
# Display the histograms.
#
n.breaks <- 24
h <- hist(x.norm, main="Normal Sample", breaks=n.breaks, xlab="Value")
curve(dnorm(x)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, col="Blue")
h <- hist(x.beta, main=paste0("Beta(", alpha, ",", beta, ") Sample"), 
          breaks=n.breaks, xlab="Value")
curve(dbeta(x, alpha, beta)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, lty=2, col="Red")
h <- hist(x.mixture, main="Mixture Sample", breaks=n.breaks, xlab="Value")
curve(dmixture(x, p, g)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, lty=3, col="Green")

1
Lavoro principalmente in Numpy, e talvolta in SciPy. Hai idea se questa misura è disponibile in qualsiasi libreria di python stats? La ricerca non restituisce nulla di rilevante.
Ketan,

La funzione L probabilmente non è disponibile, perché di solito è codificata per due o più dimensioni. L'algoritmo è semplice, come puoi vedere dall'implementazione qui: calcola la funzione di distribuzione cumulativa empirica delle distanze tra tutte le coppie distinte di dati e poi regola come mostrato in Ripley.L.
whuber

La varianza della misura è indipendente o varianza?
Ketan,

1
[0,1]1(1d)2

Hai detto "Questo problema può essere un problema grave in dimensioni superiori". È stato adattato per array univariati, giusto? Non sono del tutto sicuro di aver capito bene tutto. Potresti per favore scrivere Ripley.L in qualsiasi altra lingua o in pseudocodice? Oppure potresti semplicemente commentare un po 'il codice esistente o almeno formattare Ripley.L su più righe per migliorarne la leggibilità. La mancanza di documentazione adeguata su statsmodels.sourceforge.net/stable/generated/… , non mi aiuta molto comunque.
Ketan,

5

Presumo che tu voglia misurare quanto è vicina la distribuzione alla divisa.

È possibile esaminare la distanza tra la funzione di distribuzione cumulativa della distribuzione uniforme e la funzione di distribuzione cumulativa empirica del campione.

{1,2,3,4,5}Fu(x)

Fu(x)=i=1[x]1/5.

X1,3,5X

FX(1)=1/3,FX(2)=1/3,FX(3)=2/3,FX(4)=2/3,FX(5)=1

E lascia un campione Y1,1,5Y

FY(1)=2/3,FY(2)=2/3,FY(3)=2/3,FY(4)=2/3,FY(5)=1

Ora, come misura della distanza tra le distribuzioni prendiamo la somma delle distanze in ciascun punto, cioè

d(F,G)=i=15|F(x)G(x)|.

d(Fu,FX)<d(Fu,FY)

In casi più complicati è necessario rivedere la norma utilizzata sopra, ma l'idea principale rimane la stessa. Se hai bisogno di una procedura di test, può essere utile usare delle norme per le quali vengono sviluppati i test (quelli che @TomMinka ha sottolineato).


Alcune altre misure popolari della distanza da una distribuzione sono il test di Kolmogorov – Smirnov e il test di Anderson – Darling .
Tom Minka,

Ciao. Grazie per la risposta. Ti preghiamo di rivisitare la domanda aggiornata per chiarire le ambiguità e di farmi sapere se la tua risposta è valida. Se lo fa. Dovrò verificarlo.
Ketan,

Sì, la mia risposta si applica ad essa, purché "pari" significhi "uniforme".
Łukasz Kidziński,

Va bene. Potresti gentilmente elaborare un po 'la risposta.
Ketan,

@TomMinka grazie, sicuramente le norme sono ancora migliori, dato che è stata sviluppata una procedura di test.
Łukasz Kidziński,

1

Se capisco correttamente la tua domanda, la distribuzione "più uniforme" per te sarebbe quella in cui la variabile casuale prende ogni valore osservato una volta — uniforme in un certo senso. Se ci sono "gruppi" di osservazioni allo stesso valore, ciò sarebbe irregolare. Supponendo che stiamo parlando di osservazioni discrete, forse potresti guardare sia la differenza media tra i punti di massa di probabilità, la differenza massima o forse quante osservazioni hanno una differenza dalla "media" su una certa soglia.

Se fosse veramente uniforme nelle osservazioni, tutti i punti PM dovrebbero avere lo stesso valore e la differenza tra massimo e minimo è 0. Più la differenza media è vicina a 0, più "uniforme" è la maggior parte delle osservazioni, minore è la massima differenza e il minor numero di "picchi" ci sono anche per dimostrare quanto "uniformi" siano le osservazioni empiriche.

Aggiornamento Ovviamente, puoi usare un test chi-quadro per l'uniformità o confrontare la funzione di distribuzione empirica con un'uniforme, ma in quei casi verrai penalizzato da eventuali "lacune" nelle osservazioni, anche se le distribuzioni delle osservazioni sono ancora "anche".


Per un determinato insieme di valori possibili, voglio fondamentalmente modellare quanto "raro" o "peculiare" avrebbe un valore particolare da quel gruppo di valori. In mancanza di altre opzioni, sto cercando di misurare la distribuzione uniforme o uniforme dei valori. Più uniforme è la distribuzione, minori sono le possibilità di avere un valore peculiare dal set. Considerando che, se ad esempio tutti i dati si trovano agli estremi di una distribuzione, qualsiasi valore può essere qualcosa di degno di essere considerato "peculiare". Spero che tu lo ottenga?
Ketan,

1

La misura che stai cercando è formalmente chiamata discrepanza .

La versione monodimensionale è la seguente:

I=[a,b)x1,,xNI .

JIA(J,N)J .

A(J,N)=|{x1,,xN}J|,
V(J)J .

x1,,xN

>DN=supJ|A(J,N)V(J)N|,
J=j=1[0,tj)0tj1.

x1,,xNI .

Le sequenze a bassa discrepanza vengono spesso chiamate sequenze quasirandom .

Una panoramica di base delle sequenze a bassa discrepanza può essere trovata qui , e il mio post sul blog " L'irragionevole efficacia delle sequenze quasirandom " confronta vari metodi applicati all'integrazione numerica, mappando i punti sulla superficie di una sfera e piastrellatura quasiperiodica.


0

R2=1R2


Non so se ho capito abbastanza chiaramente cosa volevi dire, ma devo semplicemente capire come "uniformemente" viene distribuito qualcosa in una distribuzione. La varianza non è così utile dato che si può ottenere la stessa varianza e media per due distribuzioni distribuite in modo molto diverso.
Ketan,

@Ketan, hai cambiato sostanzialmente la tua domanda. Ad ogni modo, non sono chiaro quale potrebbe essere. In ogni caso, è chiaro che la mia risposta non si rivolge a ciò che ti interessa in base alla versione più recente della tua domanda.
AdamO,

Per un determinato insieme di valori possibili, voglio fondamentalmente modellare quanto "raro" o "peculiare" avrebbe un valore particolare da quel gruppo di valori. In mancanza di altre opzioni, sto cercando di misurare la distribuzione uniforme o uniforme dei valori. Più uniforme è la distribuzione, minori sono le possibilità di avere un valore peculiare dal set. Considerando che, se ad esempio tutti i dati si trovano agli estremi di una distribuzione, qualsiasi valore può essere qualcosa di degno di essere considerato "peculiare". Spero che tu lo ottenga?
Ketan,

No, mi dispiace ancora non seguire. Solo per verificare, hai familiarità con la definizione formale di dati distribuiti "uniformemente"? Una distribuzione "normale", ad esempio, non è uniforme. Entrambi sono simmetrici. Sembra alludere al fatto che la simmetria possa essere interessante, ma poi sembra che la probabilità di campionare valori "rari" sia interessante. Ad esempio, una distribuzione di Cauchy è simmetrica, ma è noto per essere un esempio di distribuzione che genererà valori anomali come modello di probabilità.
AdamO,

Lasciami in questo modo: ogni set è semplicemente l'insieme di tutti i valori di un particolare attributo in un set di dati. Fondamentalmente voglio quantificare ogni attributo in base a quanto sono "stabili" i suoi valori, per i quali fino ad ora ho usato una semplice varianza. Ma ieri sera mi sono reso conto che la stessa varianza e la stessa media sono possibili per 2 attributi, anche se uno potrebbe essere "pari" e altri hanno la maggior parte dei valori in 2 estremi. Quindi ora voglio una misura aggiuntiva per misurare se i valori possono essere trovati in modo uniforme o se risiedono maggiormente negli estremi.
Ketan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.