Existe uma medida de 'uniformidade' de propagação?

14

Procurei na web, mas não encontrei nada útil.

Basicamente, estou procurando uma maneira de medir o quão 'uniformemente' um valor é distribuído. Como em uma distribuição distribuída 'uniformemente' como X : insira a descrição da imagem aqui

e uma distribuição Y 'desigual' distribuída aproximadamente da mesma média e desvio padrão: insira a descrição da imagem aqui

Mas existe alguma medida de uniformidade m, tal que m (X)> m (Y)? Se não houver, qual seria a melhor maneira de criar uma medida como essa?

(Imagens capturadas pela Khan Academy)

Ketan
fonte
1
E quanto à inclinação?
wolfsatthedoor
A entropia é boa para distribuições discretas com o mesmo suporte. Mas não sei se é bom para distribuições contínuas.
Stéphane Laurent
Você tem certeza de que o gráfico de pontos é o que deseja? Eu não acho que você realmente queira perguntar sobre uniformidade. Isso soa como uma pergunta sobre "aglomeração" ou "grau de agrupamento" ou mesmo multimodalidade.
shadowtalker
@ StéphaneLaurent - Também fui recomendado entropia por alguns outros. Você poderia dedicar algum tempo e elaborar um pouco sobre isso?
Ketan
1
Você precisa definir mais claramente o que você quer dizer com "distribuído uniformemente". Meu cérebro literal diz que dados como 1,4,7,10,13, ... são perfeitamente distribuídos uniformemente. Mas você pode significar algo completamente diferente.
Emil Friedman

Respostas:

16

Uma medida de "uniformidade" padrão, poderosa, bem entendida, teoricamente bem estabelecida e frequentemente implementada é a função Ripley K e seu parente próximo, a função L. Embora estes sejam normalmente usados ​​para avaliar configurações de pontos espaciais bidimensionais, a análise necessária para adaptá-los a uma dimensão (que geralmente não é fornecida em referências) é simples.


Teoria

A função K estima a proporção média de pontos a uma distância de um ponto típico. Para uma distribuição uniforme no intervalo [ 0 , 1 ] , a proporção verdadeira pode ser calculada e (assintoticamente no tamanho da amostra) é igual a 1 - ( 1 - d ) 2 . A versão unidimensional apropriada da função L subtrai esse valor de K para mostrar os desvios da uniformidade. Portanto, podemos considerar normalizar qualquer lote de dados para ter um intervalo de unidades e examinar sua função L para desvios em torno de zero.d[0,1]1(1d)2


Exemplos Trabalhados

Para ilustrar , eu simulado amostras independentes de tamanho 64 a partir de uma distribuição uniforme e plotados suas (normalizado) funções L de distâncias mais curtas (de 0 a 1 / 3 ), criando assim um envelope para estimar a distribuição de amostragem da função G. (Os pontos plotados dentro deste envelope não podem ser significativamente diferenciados da uniformidade.) Sobre isso, plotamos as funções L para amostras do mesmo tamanho de uma distribuição em forma de U, uma distribuição de mistura com quatro componentes óbvios e uma distribuição normal padrão. Os histogramas dessas amostras (e de suas distribuições pai) são mostrados para referência, usando símbolos de linha para corresponder aos das funções L.9996401/3

Figura

Os picos separados e agudos da distribuição em forma de U (linha vermelha tracejada, histograma mais à esquerda) criam agrupamentos de valores espaçados. Isso é refletido por uma inclinação muito grande na função L em . A função L diminui, eventualmente se tornando negativa para refletir as lacunas em distâncias intermediárias.0

A amostra da distribuição normal (linha azul sólida, histograma mais à direita) é razoavelmente próxima da distribuição uniforme. Consequentemente, sua função L não se afasta de rapidamente. No entanto, por distâncias de 0,10 ou mais, ele subiu suficientemente acima do envelope para sinalizar uma ligeira tendência a se agrupar. O aumento contínuo através de distâncias intermediárias indica que o agrupamento é difuso e generalizado (não confinado a alguns picos isolados).00.10

A grande inclinação inicial para a amostra da distribuição da mistura (histograma do meio) revela agrupamentos a pequenas distâncias (menos de ). Ao cair para níveis negativos, sinaliza separação a distâncias intermediárias. A comparação com a função L da distribuição em forma de U é reveladora: as inclinações em 0 , as quantidades pelas quais essas curvas se elevam acima de 0 e as taxas nas quais elas eventualmente retornam a 0 fornecem informações sobre a natureza do agrupamento presente em os dados. Qualquer uma dessas características pode ser escolhida como uma única medida de "uniformidade" para atender a uma aplicação específica.0.15000

Esses exemplos mostram como uma função L pode ser examinada para avaliar desvios dos dados da uniformidade ("uniformidade") e como informações quantitativas sobre a escala e a natureza das saídas podem ser extraídas.

(De fato, pode-se traçar toda a função L, estendendo-se à distância normalizada total de , para avaliar desvios em grande escala da uniformidade. Porém, normalmente, avaliar o comportamento dos dados em distâncias menores é de maior importância.)1


Programas

Rcódigo para gerar esta figura a seguir. Começa definindo funções para calcular K e L. Ele cria uma capacidade de simular a partir de uma distribuição de mistura. Em seguida, gera os dados simulados e faz os gráficos.

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")
whuber
fonte
1
Eu trabalho principalmente no Numpy, e às vezes no SciPy. Você tem alguma idéia se esta medida está disponível em qualquer biblioteca python de estatísticas? Procurar por ele não retorna nada relevante.
Ketan
A função L provavelmente não está disponível, porque geralmente é codificada para duas ou mais dimensões. O algoritmo é simples, como você pode ver a partir da implementação aqui: calcular a função de distribuição cumulativa empírica das distâncias entre todos os pares distintos de dados e ajuste como mostrado na Ripley.L.
whuber
A variação da medida é agnóstica ou depende da variação?
Ketan
1
[0,1]1(1d)2
Você disse "Esse problema pode ser um problema grave em dimensões mais altas". Foi adaptado para matrizes univariadas, certo? Não tenho certeza se entendi tudo bem. Você poderia escrever o Ripley.L em qualquer outro idioma ou em pseudocódigo? Ou você pode apenas comentar o código existente um pouco ou pelo menos formatar o Ripley.L em várias linhas para melhorar sua legibilidade. A falta de documentação adequada em statsmodels.sourceforge.net/stable/generated/… não está me ajudando muito.
Ketan
5

Suponho que você queira medir a proximidade da distribuição do uniforme.

Você pode observar a distância entre a função de distribuição cumulativa da distribuição uniforme e a função empírica de distribuição cumulativa da amostra.

{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

Y1,1,5Y

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

Agora, como medida da distância entre distribuições, vamos tomar a soma das distâncias em cada ponto, ou seja,

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

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

Em casos mais complicados, você precisa revisar a norma usada acima, mas a idéia principal permanece a mesma. Se você precisar de um procedimento de teste, pode ser bom usar normas para as quais os testes são desenvolvidos (os que o @TomMinka apontou).

Łukasz Kidziński
fonte
Algumas outras medidas populares de distância a uma distribuição são o teste de Kolmogorov – Smirnov e o teste de Anderson – Darling .
precisa
Oi. Obrigado pela resposta. Revise a pergunta atualizada para desambiguação e deixe-me saber se sua resposta se aplica a ela. Se sim. Vou ter que verificar isso.
Ketan
Sim, minha resposta se aplica a ela, desde que 'par' signifique 'uniforme'.
Kidukasz Kidziński
OK. Você poderia elaborar um pouco a resposta.
Ketan
@ TomMinka obrigado, definitivamente as normas são ainda melhores, pois existe um procedimento de teste desenvolvido.
Kidukasz Kidziński
1

Se eu entendi sua pergunta corretamente, a distribuição "mais equilibrada" para você seria aquela em que a variável aleatória pegaria todos os valores observados uma vez - uniforme em certo sentido. Se houver "aglomerados" de observações com o mesmo valor, isso seria desigual. Supondo que estamos falando de observações discretas, talvez você possa observar a diferença média entre os pontos de massa de probabilidade, a diferença máxima ou talvez quantas observações tenham uma diferença da "média" em um determinado limite.

Se fosse realmente uniforme nas observações, todos os pontos PM deveriam ter o mesmo valor, e a diferença entre max e min é 0. Quanto mais próxima a diferença média for de 0, mais "uniforme" será a maior parte das observações. a diferença máxima e os poucos "picos" que existem também mostram o quão "uniformes" são as observações empíricas.

Atualização É claro que você pode usar um teste do qui-quadrado para uniformizar ou comparar a função de distribuição empírica com um uniforme, mas nesses casos, você será penalizado por grandes "lacunas" nas observações, mesmo que as distribuições de observações ainda sejam "até".

Avraham
fonte
Para um determinado conjunto de valores possíveis, quero modelar basicamente como 'raro' ou 'peculiar' seria um valor específico desse conjunto de valores. Na falta de outras opções, estou tentando medir a distribuição uniforme ou uniforme dos valores. Quanto mais uniforme a distribuição, menor a chance de haver algum valor peculiar do conjunto. Enquanto que, por exemplo, todos os dados estão nos extremos de uma distribuição, qualquer valor pode ser algo digno de ser considerado 'peculiar'. Espero que consiga?
Ketan
1

A medida que você está procurando é formalmente chamada de discrepância .

A versão unidimensional é a seguinte:

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

Sequências de baixa discrepância são freqüentemente chamadas de sequências quase aleatórias .

Uma visão geral básica das seqüências de baixa discrepância pode ser encontrada aqui , e minha postagem no blog " A eficácia irracional das sequências quase aleatórias " compara vários métodos quando aplicados à Integração Numérica, pontos de mapeamento para a superfície de uma esfera e mosaico quase-periódico.

Martin Roberts
fonte
0

R2=1R2

AdamO
fonte
Não sei se entendi com clareza o que você quis dizer, mas simplesmente preciso entender o quão 'uniformemente' algo é distribuído em uma distribuição. A variação não é tão útil, uma vez que é possível obter a mesma variação e a média para duas distribuições distribuídas de maneira muito diferente.
Ketan
@ Ketan, você mudou sua pergunta substancialmente. De qualquer maneira, não estou claro o que isso pode ser. De qualquer forma, é claro que minha resposta não está voltada para o seu interesse, com base na versão mais recente da sua pergunta.
21414 AdamObtenha o código
Para um determinado conjunto de valores possíveis, quero modelar basicamente como 'raro' ou 'peculiar' seria um valor específico desse conjunto de valores. Na falta de outras opções, estou tentando medir a distribuição uniforme ou uniforme dos valores. Quanto mais uniforme a distribuição, menor a chance de haver algum valor peculiar do conjunto. Enquanto que, por exemplo, todos os dados estão nos extremos de uma distribuição, qualquer valor pode ser algo digno de ser considerado "peculiar". Espero que consiga?
Ketan
Não, desculpe ainda não seguir. Apenas para verificar, você está familiarizado com a definição formal de dados distribuídos "uniformemente"? Uma distribuição "normal", por exemplo, não é uniforme. Ambos são simétricos. Você parece fazer alusão à simetria, mas parece dizer que a probabilidade de amostrar valores "raros" é de interesse. Por exemplo, uma distribuição de Cauchy é simétrica, mas é conhecida por ser um exemplo de distribuição que irá gerar outliers como modelo de probabilidade.
Adamo
Deixe-me colocar desta maneira: cada conjunto é simplesmente o conjunto de todos os valores de um atributo específico em um conjunto de dados. Basicamente, quero quantificar cada atributo pelo quão "estáveis" são seus valores, para os quais tenho usado variação simples até agora. Mas ontem à noite, percebi que exatamente a mesma variação e média são possíveis para dois atributos, mesmo que um possa ser 'par' e outro possuindo a maioria dos valores em dois extremos. Portanto, agora eu quero uma medida adicional para medir se os valores podem ser encontrados uniformemente ou eles residem mais nos extremos.
Ketan