CDF用于测试R中节点的分布

嗨,我正在努力从R中的函数获取CDF图.

语境:
我已经制作了一个图表并完成了节点程度分布的对数 – 对数图,这似乎遵循幂律.但我想以对数尺度做CDF作为附加措施.

到目前为止我找到的所有例子只显示了如何为数据框/表中的一列或一行做CDF,有人可以帮我吗?

所以这可以得到x或y的CDF:

x <- c(1, 2, 3, 4, 5, 6, 7, 11, 13, 14)
y <- c(48, 18, 9, 7, 5, 2, 2, 1, 1, 1)
ecdf(x)
ecdf(y)
plot(ecdf(x)) ### or same with y

但我无法获得xy数据帧或数据帧的CDF,例如:

x <- c(1, 2, 3, 4, 5, 6, 7, 11, 13, 14)
y <- c(48, 18, 9, 7, 5, 2, 2, 1, 1, 1)
dt <- data.table(x, y)
ecdf(dt)               ####obviously won't work

以下是我在谷歌上发现的我想做的一个例子:
example http://igraph.org/r/doc/fit_power_law.html

请注意,不需要右上角的框,但知道如何查找alpha和p将非常有用.

谢谢您的帮助! 🙂

2018年7月1日更新

我刚才找到了解决方案,但忘记在这里添加它.正如我所说的那样,我将添加所有步骤,以验证我的数据是如何验证幂律的(来自Clauset,Shalizi和Newman的方法论(2009)经验数据中的幂律分布.SIAM评论51(4) :661-703).

首先测试幂律的拟合度:

x <- c(1, 2, 3, 4, 5, 6, 7, 11, 13, 14)
y <- c(48, 18, 9, 7, 5, 2, 2, 1, 1, 1)

logEstimate <- lm(log(y) ~ log(x))
summary(logEstimate)

然后根据预期的拟合进行绘图:

logypred <- predict(logEstimate)
d.f <- data.frame( x = x, y = y )

plot(
    y ~ x,
    data = d.f,
    type = "n",
    log  = "xy",
    xlab = "Degree k",
    ylab = "Vertices",
    xlim = c( 1, 100 ),
    ylim = c( 1, 100 ) )
abline(
    h   = c( seq( 1, 9, 1 ), seq( 10, 90, 10 ), seq( 100, 1000, 100 ) ),
    lty = 3,
    col = colors()[ 440 ] )
abline(
    v   = c( seq( 1, 9, 1 ), seq( 10, 90, 10 ), seq( 100, 1000, 100 ) ),
    lty = 3,
    col = colors()[ 440 ] )
points( y ~ x, data = d.f )
box()
lines(exp(logypred)~x, col=2)

为了测试更好地适应其他模型,我做了以下(这是指数模型,删除log()做线性):

 exponential.model <- lm(log(x)~ y)
 summary(exponential.model)

最后一步是使用我设法获得CDF的igraph包中的KS测试(KS.p):
http://igraph.org/r/doc/fit_power_law.html

最佳答案 包Emcdf提供了计算和绘制双变量或多变量累积分布函数的方法.

对于您的数据:

library(Emcdf)
df <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 11, 13, 14),
                 y = c(48, 18, 9, 7, 5, 2, 2, 1, 1, 1))

plotcdf(as.matrix(df))

《CDF用于测试R中节点的分布》

plotcdf(as.matrix(df), type = "wireframe")

《CDF用于测试R中节点的分布》

这是你想要的?

点赞