2014-10-20 1 views
2

У меня есть реальный ориентированный граф, для которого я знаю количество узлов и ребер. Распределение степени аппроксимирует степенное распределение. Теперь я хочу, чтобы создать случайный граф тиражирование следующие черты моего реального графика:Создать направленный случайный граф, задающий альфа степени степенного распределения

  • Количество узлов
  • Количество ребер
  • (аналогично) степенная полустепень захода и вне распределение

Давайте предположим g мой реальный график 10000 узлов и 30000 ребер

exp.out = 2.2 
exp.in = 2.3 

set.seed(123) 
g <- static.power.law.game(10000, 30000, exp.out, exp.in, multiple=TRUE) 

Но я не знаю exp.out и exp.in. Тогда я пытаюсь оценить степенные показатели с plfit функции (downloaded here):

plfit(degree(g, mode="in")+1) 

# $xmin 
# [1] 5 
# 
# $alpha 
# [1] 2.97 
# 
# $D 
# [1] 0.01735342 

plfit(degree(g, mode="out")+1) 

# $xmin 
# [1] 5 
# 
# $alpha 
# [1] 2.83 
# 
# $D 
# [1] 0.01589222 

Из чего я тогда вывести свои функции распределения (соответственно для полустепени захода и полустепени):

  • р (х) ~ х^-2,97 при х> = 5
  • р (х) ~ х^-2.83 для х> = 5

Согласно documentation из static.power.law.game

Игра просто использует static.fitness.game с соответствующим образом построил фитнес-векторы. В частности, приспособленность вершины я это я^(- альфа), где альфа = 1/(гамма-1) и гамма показатель дал в аргументах

Насколько я понимаю, для повторения моих альфов я должен был пройти как гамма соответственно 1.3367 (2.97 = 1/(x-1)) и 1.35336 (2.83 = 1/(x-1)). Тогда

set.seed(321) 
random.g <- static.power.law.game(10000, 30000, 1.35336, 1.3367, multiple=TRUE) 
# Error in .Call("R_igraph_static_power_law_game", no.of.nodes, no.of.edges, : 
#     At games.c:3748 : out-degree exponent must be >= 2, Invalid value 

Однако тот факт, что static.power.law.game принимает только степень экспонент выше, или равной 2 заставляет меня думать, что, возможно, я что-то не хватает ...

ответ

0

exp_out и exp_in должно быть просто желаемый показатель из внеуровневой и распределенной степени, нет необходимости делать какие-либо преобразования по показателям, полученным вами от plfit. Обратите внимание, что маловероятно, что вы восстановите «наблюдаемые» показатели именно из-за эффектов конечного размера.

+0

Но тогда я не получаю 'i^(- alpha), где alpha = 1/(gamma-1) 'из документации ... Что это значит? – CptNemo

+1

'static.power.law.game' - это удобная обертка вокруг' static.fitness.game', а 'i^{- alpha}' определяет оценку пригодности вершины i в 'static.fitness.game' - но вы не следует беспокоиться об этом, поскольку вы должны указывать желаемый показатель (гамма) в качестве параметра 'static.power.law.game', и он заботится о преобразовании их в правильные значения (альфа). –

 Смежные вопросы

  • Нет связанных вопросов^_^