Попытка подогнать распределение Пуассона в R с помощью fitdistr к случайному графу Erdos.Reyni, построенному в Igraph

Используя 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)?


person Rob Goldstone    schedule 21.11.2014    source источник
comment
Я думаю, что разница связана с построением графика - вы использовали подсчеты в таблице, игнорируя градусы. Попробуйте 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
comment
Ваше решение отлично работает. Спасибо за понимание.   -  person Rob Goldstone    schedule 24.11.2014