Есть ли мера «равномерности» распространения?


14

Я посмотрел в Интернете, но не смог найти ничего полезного.

Я в основном ищу способ измерить, насколько «равномерно» распределено значение. Как и в «равномерно» распределенном распределении, таком как X : введите описание изображения здесь

и «неравномерно» распределенное распределение Y примерно того же среднего значения и стандартного отклонения: введите описание изображения здесь

Но есть ли мера равномерности m, такая что m (X)> m (Y)? Если нет, то какой будет лучший способ создать такую ​​меру?

(Скриншот из Академии Хана)


1
А как насчет перекоса?
wolfsatthedoor

Энтропия хороша для дискретных распределений, имеющих одинаковую поддержку. Но я не знаю, хорошо ли это для непрерывных распределений.
Стефан Лоран

Вы уверены, что точечный график - это то, что вы хотите? Я не думаю, что вы действительно хотите спросить о единообразии. Это звучит как вопрос о «комковатости» или «степени кластеризации» или даже о многомодальности.
Shadowtalker

@ StéphaneLaurent - мне также порекомендовали энтропию. Не могли бы вы не торопиться и немного развить это?
Кетан

1
Вам нужно более четко определить, что вы подразумеваете под «равномерно распределенным». Мой буквально мыслящий мозг говорит, что такие данные, как 1,4,7,10,13, ... распределены идеально равномерно. Но вы можете иметь в виду что-то совершенно другое.
Эмиль Фридман

Ответы:


16

Стандартной, мощной, понятной, теоретически устоявшейся и часто используемой мерой «равномерности» является функция Рипли К и ее близкий родственник, функция L. Хотя они обычно используются для оценки двумерных пространственных точечных конфигураций, анализ, необходимый для их адаптации к одному измерению (который обычно не приводится в ссылках), прост.


теория

Функция K оценивает среднюю пропорцию точек на расстоянии от типичной точки. Для равномерного распределения на интервале [ 0 , 1 ] истинная пропорция может быть вычислена и (асимптотически по размеру выборки) равна 1 - ( 1 - d ) 2 . Соответствующая одномерная версия функции L вычитает это значение из K, чтобы показать отклонения от однородности. Поэтому мы могли бы рассмотреть вопрос о нормализации любого пакета данных для получения единичного диапазона и проверки его функции L на наличие отклонений около нуля.d[0,1]1(1d)2


Отработанные примеры

Чтобы проиллюстрировать , я смоделировали независимых выборок размером 64 из равномерного распределения и наносили на график их (нормированная) L функции на более короткие расстояния (от 0 до 1 / 3 ), тем самым создавая конверт для оценки распределения выборки функции L. (Точки, нанесенные в пределах этой огибающей, не могут быть значительно отличены от однородности.) В связи с этим я нанес на график функции L для образцов одинакового размера из распределения U-образной формы, распределения смеси с четырьмя очевидными компонентами и стандартного нормального распределения. Гистограммы этих выборок (и их родительских распределений) показаны для справки с использованием линейных символов, соответствующих символам L-функций.9996401/3

фигура

Острые разделенные пики U-образного распределения (пунктирная красная линия, крайняя левая гистограмма) создают кластеры близко расположенных значений. Это отражается в очень большом наклоне в функции L в . Затем функция L уменьшается, становясь в конечном итоге отрицательной, отражая промежутки на промежуточных расстояниях.0

Выборка из нормального распределения (сплошная синяя линия, крайняя правая гистограмма) довольно близка к равномерно распределенной. Соответственно, его L-функция не быстро отклоняется от . Тем не менее, на расстоянии 0,10 или около того, он достаточно поднялся над огибающей, чтобы сигнализировать о небольшой тенденции к скоплению. Продолжающийся рост на промежуточные расстояния указывает на то, что кластеризация является диффузной и широко распространенной (не ограничиваясь некоторыми изолированными пиками).00.10

Начальный большой уклон для образца из распределения смеси (средняя гистограмма) показывает кластеризацию на малых расстояниях (менее ). Опускаясь до отрицательных уровней, он сигнализирует о разделении на промежуточных расстояниях. Сравнение этого с L-функцией U-образного распределения показательно: наклоны в 0 , величины, на которые эти кривые поднимаются выше 0 , и скорости, с которыми они в конечном итоге снижаются до 0, все предоставляют информацию о природе кластеризации, присутствующей в данные. Любая из этих характеристик может быть выбрана как единая мера "равномерности" для соответствия конкретному применению.0.15000

Эти примеры показывают, как L-функция может быть исследована для оценки отклонений данных от однородности («равномерности») и как количественная информация о масштабе и характере отклонений может быть извлечена из нее.

(Можно действительно построить всю L-функцию, простирающуюся до полного нормализованного расстояния , для оценки крупномасштабных отклонений от однородности. Однако обычно оценка поведения данных на меньших расстояниях имеет большее значение.)1


Програмное обеспечение

Rкод для генерации этого рисунка следует. Он начинается с определения функций для вычисления K и L. Он создает возможность для моделирования из распределения смеси. Затем он генерирует смоделированные данные и составляет графики.

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
Я работаю в основном в Numpy, а иногда и в SciPy. У вас есть идея, если эта мера доступна в какой-либо статистике Python библиотеки? Поиск его не возвращает ничего релевантного.
Ketan

Функция L, вероятно, недоступна, потому что она обычно кодируется для двух или более измерений. Алгоритм прост, как вы можете видеть из реализации здесь: вычислить эмпирическую интегральную функцию распределения расстояний между всеми различными парами данных и затем скорректировать, как показано на рисунке Ripley.L.
whuber

Является ли мера дисперсии независимой или зависит от дисперсии?
Кетан

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

Вы сказали: «Эта проблема может быть серьезной проблемой в более высоких измерениях». Он был адаптирован для одномерных массивов, верно? Я не совсем уверен, хорошо ли я все понял. Не могли бы вы написать Ripley.L на любом другом языке или в псевдокоде? Или вы можете просто закомментировать существующий код или, по крайней мере, отформатировать Ripley.L в несколько строк, чтобы улучшить его читабельность. Отсутствие какой-либо надлежащей документации на statsmodels.sourceforge.net/stable/generated/… , в любом случае, мне не очень помогает.
Кетан

5

Я предполагаю, что вы хотите измерить, насколько близко распределение к униформе.

Вы можете посмотреть на расстояние между кумулятивной функцией распределения равномерного распределения и эмпирической функцией распределения образца.

{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

Теперь в качестве меры расстояния между распределениями возьмем сумму расстояний в каждой точке, т.е.

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

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

В более сложных случаях вам необходимо пересмотреть использованную выше норму, но основная идея остается прежней. Если вам нужна процедура тестирования, может быть полезно использовать нормы, для которых разработаны тесты (те, на которые указал @TomMinka).


Некоторые другие популярные меры расстояния до распределения являются тест Колмогорова-Смирнова и тест Андерсона-Дарлинга .
Том Минка

Здравствуй. Спасибо за ответ. Пожалуйста, вернитесь к обновленному вопросу для устранения неоднозначности и дайте мне знать, относится ли ваш ответ к нему. Если это так. Я должен это проверить.
Кетан

Да, мой ответ применим к нему, пока «даже» означает «униформа».
Лукаш Кидзиньски,

Ладно. Не могли бы вы немного пояснить ответ.
Кетан

@ TomMinka спасибо, определенно нормы, эти нормы еще лучше, поскольку разработана процедура тестирования.
Лукаш Кидзиньски

1

Если я правильно понимаю ваш вопрос, то для вас наиболее «равномерным» будет распределение, в котором случайная величина принимает каждое наблюдаемое значение один раз - в каком-то смысле равномерно. Если бы «кластеры» наблюдений имели одно и то же значение, это было бы неравномерно. Предполагая, что мы говорим о дискретных наблюдениях, возможно, вы могли бы посмотреть как на среднюю разницу между точками вероятностной массы, на максимальную разницу, так и на то, сколько наблюдений имеют разницу со «средним» по определенному порогу.

Если бы он был действительно равномерным в наблюдениях, все точки PM должны иметь одинаковое значение, а разница между максимальным и минимальным значением равна 0. Чем ближе средняя разница к 0, тем больше «четная» масса наблюдений, тем ниже максимальная разница и меньшее количество «пиков» также показывают, насколько «даже» эмпирические наблюдения.

Обновление Конечно, вы можете использовать критерий хи-квадрат для однородности или сравнить эмпирическую функцию распределения с униформой, но в этих случаях вы будете оштрафованы любыми большими "пробелами" в наблюдениях, даже если распределение наблюдений все еще "четный".


Для данного набора возможных значений я хочу в основном смоделировать, насколько «редким» или «своеобразным» было бы конкретное значение из этого набора значений. В отсутствие каких-либо других параметров я пытаюсь измерить, насколько равномерно или равномерно распределены значения. Чем более равномерное распределение, тем меньше шансов получить какую-либо особую ценность из набора. Принимая во внимание, что, например, если все данные находятся в крайних точках распределения, любое значение может быть чем-то достойным, чтобы считаться «особенным». Надеюсь, ты понял?
Кетан

1

Мера, которую вы ищете, формально называется расхождением .

Одномерная версия выглядит следующим образом:

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

Последовательности с низким расхождением часто называют квазислучайными последовательностями .

Базовый обзор последовательностей с низким расхождением можно найти здесь , а в моем блоге « Необоснованная эффективность квазислучайных последовательностей » сравниваются различные методы применительно к числовому интегрированию, сопоставление точек с поверхностью сферы и квазипериодическое разбиение на листы.


0

R2=1R2


Я не знаю, поняла ли я достаточно ясно, что вы имели в виду, но мне просто нужно понять, как «равномерно» что-то распространяется в дистрибутиве. Дисперсия не так полезна, учитывая, что можно получить одну и ту же дисперсию и среднее значение для двух очень разных распределений.
Кетан

@Ketan, вы существенно изменили свой вопрос. В любом случае, мне не ясно, что это может быть. В любом случае, ясно, что мой ответ не касается того, что вас интересует, основываясь на самой последней версии вашего вопроса.
AdamO

Для данного набора возможных значений я хочу в основном смоделировать, насколько «редким» или «своеобразным» было бы конкретное значение из этого набора значений. В отсутствие каких-либо других параметров я пытаюсь измерить, насколько равномерно или равномерно распределены значения. Чем более равномерное распределение, тем меньше шансов получить какую-либо особую ценность из набора. Принимая во внимание, что, например, если все данные находятся в крайних точках распределения, любое значение может быть чем-то достойным, чтобы считаться «особенным». Надеюсь, ты понял?
Кетан

Нет, извините, пока не последовал Просто чтобы проверить, знакомы ли вы с формальным определением «равномерно» распределенных данных? Например, «нормальное» распределение не является равномерным. Оба симметричны. Вы, кажется, намекаете на то, что симметрия может представлять интерес, но затем вы, кажется, говорите, что вероятность выборки «редких» значений представляет интерес. Например, распределение Коши симметрично, но известно, что оно является примером распределения, которое будет генерировать выбросы в качестве вероятностной модели.
AdamO

Позвольте мне выразиться так: каждый набор - это просто набор всех значений определенного атрибута в наборе данных. Я в основном хочу количественно оценить каждый атрибут по тому, насколько «стабильны» его значения, для которых я до сих пор использовал простую дисперсию. Но вчера вечером я понял, что для двух атрибутов возможна одинаковая дисперсия и среднее значение, даже если один из них может быть «четным», а другой - с большинством значений в двух крайних значениях. Следовательно, теперь я хочу, чтобы дополнительная мера измеряла, могут ли значения быть найдены равномерно, или они находятся больше в крайностях.
Кетан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.