У меня есть набор данных, который является статистикой с форума веб-обсуждения. Я смотрю на распределение количества ответов, которые должна иметь тема. В частности, я создал набор данных, в котором есть список ответов на темы, а затем - количество тем с таким количеством ответов.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Если я нанесу набор данных на график log-log, я получу то, что в основном является прямой линией:
(Это распределение Zipfian ). Википедия говорит мне, что прямые линии на графиках log-log подразумевают функцию, которая может быть смоделирована мономом вида . И на самом деле я оценил такую функцию:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Мои глазные яблоки, очевидно, не так точны, как R. Итак, как я могу заставить R подгонять параметры этой модели для меня более точно? Я пробовал полиномиальную регрессию, но я не думаю, что R пытается вписать показатель степени в качестве параметра - как правильно назвать модель, которую я хочу?
Редактировать: Спасибо за ответы всех. Как и предполагалось, теперь я сопоставил линейную модель с журналами входных данных, используя этот рецепт:
data <- read.csv(file="result.txt")
# Avoid taking the log of zero:
data$num_replies = data$num_replies + 1
plot(data$num_replies, data$count, log="xy", cex=0.8)
# Fit just the first 100 points in the series:
model <- lm(log(data$count[1:100]) ~ log(data$num_replies[1:100]))
points(data$num_replies, round(exp(coef(model)[1] + coef(model)[2] * log(data$num_replies))),
col="red")
В результате мы видим модель красным цветом:
Это выглядит как хорошее приближение для моих целей.
Если я затем использую эту модель Zipfian (альфа = 1.703164) вместе с генератором случайных чисел, чтобы сгенерировать то же общее количество тем (1400930), что и в исходном измеренном наборе данных (используя этот код C, который я нашел в Интернете ), результат будет выглядеть нравится:
Измеренные точки выделены черным, случайным образом сгенерированные в соответствии с моделью - красным.
Я думаю, что это показывает, что простая дисперсия, созданная случайным образом генерированием этих 1400930 точек, является хорошим объяснением формы исходного графика.
Если вы хотите поиграть с необработанными данными самостоятельно, я разместил их здесь .
источник
Ответы:
Ваш пример очень хороший, потому что он ясно указывает на повторяющиеся проблемы с такими данными.
Два общих названия - степенная функция и степенной закон. В биологии и некоторых других областях люди часто говорят об аллометрии, особенно когда вы относитесь к измерениям размеров. В физике и некоторых других областях люди говорят о законах масштабирования.
Я не стал бы рассматривать моном в качестве хорошего термина, поскольку я ассоциирую это с целочисленными полномочиями. По той же причине это не лучше рассматривать как частный случай многочлена.
Проблемы подгонки степенного закона к хвосту распределения превращаются в проблемы подгонки степенного закона к отношениям между двумя различными переменными.
Самый простой способ подбора степенного закона - взять логарифмы обеих переменных, а затем выровнять прямую линию с помощью регрессии. Есть много возражений против этого, когда обе переменные подвержены ошибкам, как это обычно бывает. Пример здесь является показательным примером, поскольку обе переменные (и ни одна из них) могут рассматриваться как ответ (зависимая переменная). Этот аргумент приводит к более симметричному методу подгонки.
Кроме того, всегда возникает вопрос о предположениях о структуре ошибок. Опять же, пример здесь является тому примером, поскольку ошибки явно гетероскедастичны. Это предполагает нечто большее, как взвешенные наименьшие квадраты.
Один отличный обзор - http://www.ncbi.nlm.nih.gov/pubmed/16573844
Еще одна проблема заключается в том, что люди часто определяют законы власти только в некотором диапазоне своих данных. Затем вопросы становятся научными, а также статистическими, вплоть до того, является ли определение степенных законов просто желанным мышлением или модным любительским времяпрепровождением. Большая часть обсуждения возникает под заголовками фрактального и безмасштабного поведения, с соответствующими дискуссиями, начиная от физики до метафизики. В вашем конкретном примере небольшая кривизна кажется очевидной.
Энтузиасты силовых законов не всегда соответствуют скептикам, потому что энтузиасты публикуют больше, чем скептики. Я бы предложил, чтобы график рассеяния в логарифмических масштабах, хотя естественный и превосходный график, который является существенным, должен сопровождаться какими-то остаточными графиками для проверки отклонений от формы степенной функции.
источник
Если вы предполагаете, что степень является хорошей моделью для подбора, то вы можете использовать ее в
log(y) ~ log(x)
качестве модели и подгонять линейную регрессию, используяlm()
:Попробуй это:
Подходит модель:
Теперь создайте сюжет:
источник