Регресія для моделі форми ?


22

У мене є набір даних, який є статистикою з веб-форуму для обговорення. Я дивлюся на розподіл кількості відповідей, на які очікується тема. Зокрема, я створив набір даних, у якому є перелік кількості відповідей на теми, а потім кількість тем, що мають таку кількість відповідей.

"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726

Якщо я будувати набір даних на графіку журналу журналу, я отримую те, що в основному є прямою лінією:

Дані, побудовані в масштабі журналу журналу

(Це розповсюдження Zipfian ). У Вікіпедії мені кажуть, що прямі лінії на графіках журналу журналу передбачають функцію, яку можна змоделювати за допомогою одночлена виду . Насправді я прихилив таку функцію:у=ахк

lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")

Модель з вушками

Мої очні яблука, очевидно, не такі точні, як Р. Тож як я можу отримати 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 точок, є хорошим поясненням форми оригінального графіка.

Якщо вам цікаво грати із сирими даними самостійно, я розмістив їх тут .


2
Чому б просто не взяти журнали обох підрахунків & num_replies і не підлаштувати до них стандартну лінійну модель?
gung - Відновіть Моніку

3
Що таке величезний колосок у кількості трохи нижче 10000 відповідей?
Glen_b -Встановіть Моніку

3
Ні підрахунки, ні рахунки журналів не мають постійної дисперсії (для підрахунків, дисперсія буде збільшуватися із середнім значенням, для підрахунків журналів вона взагалі зменшуватиметься із середнім значенням). З огляду на те, що обидві змінні - це кількість, і багато підрахунків є зовсім невеликими, я схиляюся до Пуассона, квазі-Пуассона або негативного двочленного GLM, можливо, з посиланням на журнал. Якщо вам потрібно скористатися звичайною регресією, принаймні вирішіть проблему дисперсії. Інша альтернатива - зробити перетворення лічильників Анскомба або Фрімана-Тукі та встановити нелінійну модель найменших квадратів.
Glen_b -Встановіть Моніку

1
Цей цікавий сплеск пов'язаний із застосуванням людиною "максимальної тривалості теми" на кількох форумах.
тодівипадник

2
Фадж смачний :) Більш прозаїчно, різниці між (num_replies + 1) та (num_posts_in_topic) немає.
тодібудь

Відповіді:


22

Ваш приклад дуже хороший, оскільки він чітко вказує на періодичні проблеми з такими даними.

Дві загальні назви - владна функція та закон про владу. У біології та деяких інших сферах люди часто говорять про аллометрію, особливо коли ви пов’язуєте вимірювання розмірів. У фізиці та деяких інших сферах люди говорять про закони масштабування.

Я б не вважав одночлен хорошим терміном тут, оскільки пов'язую це з цілими повноваженнями. З цієї ж причини це не найкраще розглядається як особливий випадок многочлена.

Проблеми пристосування закону потужності до хвоста морфи розподілу в задачі закону потужності у співвідношенні між двома різними змінними.

Найпростіший спосіб встановити закон про потужність - це взяти логарифми обох змінних, а потім встановити пряму за допомогою регресії. На це є багато заперечень, коли обидві змінні піддаються помилкам, як це часто. Приклад тут є конкретним випадком, оскільки обидві змінні (і жодна) можуть розглядатися як відповідь (залежна змінна). Цей аргумент призводить до більш симетричного методу підгонки.

Крім того, завжди виникає питання припущень щодо структури помилок. Знову ж таки, прикладом тут є конкретний випадок, оскільки помилки явно гетеросептичні. Це говорить про щось більш схоже на зважені найменші квадрати.

Один чудовий огляд - http://www.ncbi.nlm.nih.gov/pubmed/16573844

Ще одна проблема полягає в тому, що люди часто ідентифікують закони влади лише за деяким діапазоном своїх даних. Тоді питання стають науковими, а також статистичними, аж до того, чи визначити закони влади - це лише бажане мислення чи модне любительське проведення часу. Значна частина дискусій виникає під заголовками фрактальної та безмасштабної поведінки, із пов'язаними дискусіями - від фізики до метафізики. У вашому конкретному прикладі невелика кривизна здається очевидною.

Ентузіасти за владні закони не завжди відповідають скептикам, адже ентузіасти публікують більше, ніж скептики. Я б припустив, що графік розсіяння на логарифмічних масштабах, хоча природний і відмінний сюжет, що є суттєвим, повинен супроводжуватися певними залишковими ділянками, щоб перевірити відхилення від форми функції живлення.


2
Дякую, це пояснює, чому я не зміг знайти щось подібне, де люди обговорювали "поліноміальну регресію". Я оновив своє запитання щодо результатів пристосування цієї моделі!
тодівипад

Якщо ви шукаєте дещо жорсткіший підхід до встановлення законів про владу та випробування на значущість для пристосованої моделі, ви, напевно, хочете цього документу: arxiv.org/abs/0706.1062 та супровідний код: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary

2
Процитований вище документ призначений для розподілів, які є законами влади, а не зв'язками між змінними, які є законами влади. Назва цього питання краще відповідає останньому; приклад цього питання краще відповідає.
Нік Кокс

1

Якщо ви вважаєте, що потужність - це гарна модель, то ви можете використовувати її log(y) ~ log(x)як свою модель та підходити до лінійної регресії, використовуючи lm():

Спробуйте це:

# Generate some data
set.seed(42)

x <- seq(1, 10, 1)

a = 10
b = 2
scatt <- rnorm(10, sd = 0.2)


dat <- data.frame(
  x = x,
  y = a*x^(-b) + scatt
)

Підходить модель:

# Fit a model
model <- lm(log(y) ~ log(x) + 1, data = dat) 
summary(model)

pred <- data.frame(
  x = dat$x,
  p = exp(predict(model, dat))
)

Тепер створіть сюжет:

# Create a plot
library(ggplot2)
ggplot() +
  geom_point(data = dat, aes(x=x, y=y)) +
  geom_line(data = pred, aes(x=x, y=p), col = "red")

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.