Как проверить, следует ли распределение степенному закону?


13

У меня есть данные о том, сколько пользователей публикуют сколько вопросов. Например,

[UserCount, QuestionCount] 
[2, 100] 
[9, 10] 
[3, 80] 
... ...

Это означает, что 2 пользователя разместили по 100 вопросов, 9 пользователей - по 10 вопросов и т. Д. Итак, как я могу определить, UserCount, QuestionCountследует ли распределение степенному закону?

Я нашел пакет PoweRlaw . Тем не менее, я могу пройти только одну группу чисел, чтобы сделать оценку. (Примером, представленным в этом пакете, является частота слова.) Так как мне использовать этот пакет? Или у меня что-то не так? У меня также есть данные подсчета вопрос каждого пользователя, то есть [100, 100, 10, 10, 10 ... ]. Если я передам эти данные в пакет, что я получу?


1
В этой статье приведено математическое описание того, как проверить распределение степенного закона, а также код R. Clauset et al. «Распределение степенного закона в эмпирических данных».
Sycorax говорит восстановить Monica

Благодарю. Тем не менее, я не могу поймать все содержание в газете. Я хочу несколько подходов, чтобы сделать проверку. Есть ли у вас какие-либо идеи о «значении одной группы данных, передаваемых в пакет»? В примере набор данных представляет собой слово частоты. Еще раз спасибо.
Третье

Извините, я не знаком с этим пакетом.
Sycorax сообщает, что восстановит Монику

Ответы:


8

Согласно Clauset et al., Вы тестируете хвост степенного закона с помощью poweRlawпакета:

  1. Построить объект распределения степенного закона. В этом случае ваши данные дискретны, поэтому используйте дискретную версию класса
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. xminα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

последние две строки можно переписать как одну строку

data_pl$xmin <- est

Также в этот момент вы можете увидеть статистику KS:

est$KS
  1. p
bs <- bootstrap_p(data_pl)
bs$p

Это может занять некоторое время, так что иди и возьми чашку чая ...

  1. ppoweRlaw
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

xmincompare_distributionsxmiNcompcomp$test_statisticdata_plcomp$p_two_side

Повторите этот шаг disexp, dispoisклассы для сравнения степенного с этими альтернативами.


Пожалуйста @Clivele, не могли бы вы привести какой-то отдельный пример ваших данных? У меня проблема с проверкой моих данных, поэтому я был бы признателен за пример ... спасибо, я нашел ваш пост очень вдохновляющим!
Maycca

1
Вы можете набрать команду data("moby")и использовать mobyвместо data
Zebra Propulsion Lab
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.