繁体   English   中英

如何在R中绘制度分布

[英]how to plot degree distribution in R

我想知道绘制度分布的脚本输出是否正确。

因此,脚本是(将所有顶点的度数的矢量存储在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 summary(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(log 7)/ 0.903(log( 8)如(x / y)?

此外,有人可以告诉我如何将线(对数对数刻度上的幂律)拟合到屏幕2中的图吗?

我对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,而您正在执行简单的线性回归(不建议这样做)。


有点儿麻烦,我已经开始研究用于拟合和绘制幂律的软件包 因此,使用此软件包,您将获得:

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)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM