形式为


22

我有一个来自网络讨论论坛的统计数据集。我正在查看一个主题期望得到的答复数量的分布。特别是,我创建了一个数据集,该数据集包含主题答复计数列表,然后包含具有该答复数目的主题计数。

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

如果我将数据集绘制在对数-对数图上,那么我得到的基本上是一条直线:

数据以对数-对数比例绘制

(这是一个Zipfian分布)。Wikipedia告诉我,对数对数图上的直线表示可以用形式的单项式建模的函数。实际上,我已经关注了这样的功能:ÿ=一种Xķ

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模型(alpha = 1.703164)以及随机数生成器生成与包含的原始测量数据集相同的主题总数(1400930)(使用我在网上找到的C代码),则结果看起来喜欢:

随机数生成结果

测量点为黑色,根据模型随机生成的点为红色。

我认为这表明通过随机生成这1400930个点而创建的简单方差很好地解释了原始图形的形状。

如果您有兴趣自己玩原始数据,请在此处发布


2
为什么不只记录两个计数和num_replies的日志,并为其拟合标准的线性模型?
gung-恢复莫妮卡

3
不到10000条回复的计数激增是什么?
Glen_b-恢复莫妮卡

3
计数和对数计数均没有恒定的方差(对于计数,方差将随均值增加,对于对数计数,其均将随均值减小)。鉴于这两个变量都是计数,并且许多计数都非常小,所以我倾向于采用对数链接,倾向于Poisson,拟Poisson或负二项式GLM。如果必须使用普通回归,则至少要处理方差问题。另一种选择是对计数进行Anscombe或Freeman-Tukey变换,并拟合非线性最小二乘模型。
Glen_b-恢复莫妮卡

1
有趣的高峰是由于几个论坛中人为强制的“最大主题长度”。
thenickdude

2
软糖很美味:)更一般地说,(num_replies + 1)和(num_posts_in_topic)之间没有区别。
thenickdude

Answers:


22

您的示例是一个很好的示例,因为它清楚地指出了此类数据经常出现的问题。

幂函数和幂定律是两个常见的名称。在生物学和其他一些领域,人们经常谈论异速测量法,尤其是在您进行尺寸测量时。在物理学和其他领域,人们谈论缩放定律。

在这里,我认为单项式不是一个好术语,因为我将其与整数幂相关联。出于同样的原因,最好不要将其视为多项式的特殊情况。

将幂定律拟合到分​​布的尾部的问题变为将幂定律拟合到两个不同变量之间的关系的问题。

拟合幂定律的最简单方法是取两个变量的对数,然后使用回归拟合直线。每当两个变量都出错时,对此有很多异议。这里的例子就是一个例子,因为两个变量(都不是变量)都可以被视为响应(因变量)。该论点导致了更对称的拟合方法。

另外,总是存在关于错误结构的假设问题。同样,这里的例子就是一个例子,因为错误显然是异方差的。这表明更像加权最小二乘。

一个出色的评论是http://www.ncbi.nlm.nih.gov/pubmed/16573844

另一个问题是,人们通常仅在他们的某些数据范围内识别功率定律。这样,问题就变得既科学又统计了,一直到确定幂律只是一厢情愿还是时尚的业余消遣。分形和无标度行为的标题引起了很多讨论,相关的讨论范围从物理学到形而上学。在您的特定示例中,似乎有些弯曲。

权力定律的热心人士并不总是与怀疑论者相提并论,因为发烧友的出版量比怀疑论者还多。我建议对数刻度上的散点图尽管是自然而出色的图,但必不可少,但应附上某种形式的残差图,以检查是否与幂函数形式背离。


2
谢谢,这解释了为什么我在人们讨论“多项式回归”时找不到这样的东西。我已经用拟合该模型的结果更新了我的问题!
thenickdude

如果您正在寻找一种更严格的幂定律拟合方法以及拟合模型的重要性检验,则可能需要本文: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")

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.