3

次数分布をプロットするスクリプトの出力が正しいかどうかを知りたいです。

したがって、スクリプトは次のとおりです (すべての頂点の次数を持つベクトルが 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)

私の問題は、log-log プロットが正しくないように見えることです。たとえば、次数「7」が全体で 8 回あるため、log-log プロットのこの点が 0.845 (log 7)/ 0.903 (log( 8) (x/y) のように?

さらに、画面 2 のプロットに線 (対数対数スケールのべき乗則) を合わせる方法を教えてもらえますか?

4

1 に答える 1

6

私はそのパッケージに詳しく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)

ここに画像の説明を入力

于 2013-01-23T10:50:23.003 に答える