如何绘制中的R度分布(how to plot degree distribution in R)

2019-08-07 23:21发布

我想知道一个脚本的输出是否绘制分散度可以是正确的。

所以剧本(其中与度我所有的顶点的矢量存储在X):

x是

x
 [1] 7 9 8 5 6 2 8 9 7 5 2 4 6 9 2 6 10 8 

x是某一网络顶点度 - 等顶点1具有度7,顶点2具有9度等X < - V2摘要(x)的

library(igraph)
split.screen(c(1,2))
screen(1)
plot (tabulate(x), log = "xy", ylab = "Frequency (log scale)", xlab = "Degree (log scale)", main = "Log-log plot of degree distribution")
screen(2)
y <- (length(x) - rank(x, ties.method = "first"))/length(x)
plot(x, y, log = "xy", ylab = "Fraction with min. degree k (log scale)", xlab = "Degree (k) (log scale)", main = "Cumulative log-log plot of degree distribution")
close.screen(all = TRUE)
power.law.fit(x, xmin = 50)

我的问题是,数图似乎是不正确的 - 例如,我有度“7” 8次整体所以不应该在该点上的双对数坐标成为0.845(日志7)/ 0.903(日志( 8)如(X / Y)?

此外,有人可以告诉我如何适应线(上数坐标的幂律)在屏幕2的情节?

Answer 1:

我不familar与igraph包,这样你就可以与特定的包帮助没有。 然而,这里是对数图绘制分布一些代码。 首先是一些数据:

set.seed(1)
x = ceiling(rlnorm(1000, 4))

然后,我们需要重新安排,以获得逆CDF:

occur = as.vector(table(x))
occur = occur/sum(occur)
p = occur/sum(occur)
y = rev(cumsum(rev(p)))
x = as.numeric(names(table(x)))
plot(x, y, log="xy", type="l")

关于你的装修问题,我认为差异的产生是因为igraph使用MLE,而你正在做的简单线性回归(不推荐)。


作为一个有点塞,我已经在开始工作包的装配和绘图powerlaws。 因此,使用这个包,你可以:

library(poweRlaw)

##Create a displ object
m = displ$new(x)
##Estimate the cut-off
estimate_xmin(m)
m$setXmin(105); m$setPars(2.644)

##Plot the data and the PL line
plot(m)
lines(m, col=2)



文章来源: how to plot degree distribution in R