Используя igraph
в R, я пытался подтвердить, что метод Эрдоса-Рейни построения случайных сетей действительно приведет к сетям с распределениями степеней, которые хорошо соответствуют распределению Пуассона. Итак, я запустил код R:
library(igraph)
library(MASS) #for fitdistr function
samples<-5000
# first n is the number of nodes, the n/samples is the probability of making
# an edge between any two nodes
g <- erdos.renyi.game(samples, 20/ samples)
d <- degree(g) #finds the degree of each node in graph
# fit should be done on frequency, not on probability, and not on summary
fits<-fitdistr(d,"Poisson")
dd<- as.numeric(table(d)) # creates a summary of each degree and its frequency
plot(dd, xlab = "degree", ylab="frequency") # plot degree distribution
a<-1:length(dd)
# multiply by original samples to create frequency plots
lines(a,dpois(a,lambda=fits$estimate)* samples)
Я получаю график, на котором похоже, что распределение степеней действительно является пуассоновским, но наиболее подходящее распределение Пуассона резко смещено вправо по сравнению с фактическим распределением степеней. Учитывая, что граф был создан таким образом, чтобы в среднем было 20 связей на узел, имеет смысл, что наилучшее подходящее значение лямбда составляет около 20, но почему фактическое распределение имеет моду около 14 (хотя среднее значение степеней равно тоже около 20)?
dens <- density(d); plot(table(d)) ; lines(dens$x, dens$y*5000, col="red"); lines(a,dpois(a,lambda=fits$estimate)* samples, col="blue")
- person user20650   schedule 22.11.2014