2014-09-06 1 views
1

Для этой меры мне всегда нужно только входящее дерево в вершину. Первой части я должен был бы рассчитать все кратчайшие пути к вершине и суммировать их по специальному пути, все с кратчайшимPath = 1 будет считаться как 1 все с кратчайшимPath = 2 будет считаться равным 1/2, все с shortestPath = 3 как 1/3 и так далее. Затем их следует суммировать до значения, которое мы теперь называем x. После того, как это будет сделано для полного графика, должна быть функция, которая принимает x и вычисляет x/sum (y) y будет вычисляться. Значения сверху минус тот, который мы сейчас работаем.Сложный граф Измерение энтропии в R

Мои исходные данные:

library(igraph) 
From <- c(1,2,3,4,5,6,7,8) 
To <- c(NA,1,2,3,2,NA,6,7) 
Data <- data.frame(From,To) 
Network <- graph.data.frame(Data[,c("From","To")],directed=TRUE) 
Network<- Network - "NA" 
plot(Network) 

enter image description here

В конце концов, это должно выглядеть похоже на эту

From <- c(1,2,3,4,5,6,7,8) 
To <- c(NA,1,2,3,2,NA,6,7) 
ValueX<- c(2.333, 2.5, 1, 0, 0, 1.5, 1, 0) 
FinalMeasure<- c(2.333/(2.5+1+0+0), 2.5/(2.333+1+0+0), 1/(2.333+2.5+0+0), 0/(2.333+2.5+1+0), 0/(2.333+2.5+1+0), 1.5/(1+0), 1/(1.5+0), 0/(1.5+1)) 
NewData<- data.frame(From,To, ValueX, FinalMeasure) 

Моя первая идея была построить функцию с кластерами() и shortest.paths(), но я понятия не имею, как я могу это сделать.

+1

Вопрос должен показать, что вы сделали добросовестную попытку решить эту проблему самостоятельно и не просто просят людей написать код для вас. Очень приятно иметь образец ввода и желаемый результат, что значительно облегчит тестирование возможных решений, но что вы пробовали до сих пор? Можете ли вы поделиться некоторыми из кода вашей попытки и быть понятным о том, что пошло не так? Кроме того, я предполагаю, что вы имеете в виду библиотеку 'igraph', а не' graph'. – MrFlick

ответ

1

Похоже, что вы можете рассчитывать ValueX и FinalMeasure с этим кодом

pp <- 1/shortest.paths(Network, mode="out") 
pp[!is.finite(pp)]<-0 
ValueX <- colSums(pp) 

FinalMeasure <- ave(dd, clusters(Network)$membership, FUN=function(x) x/(sum(x)-x)) 

Так что ваш финальный стол

NewData<- data.frame(From,To, ValueX, FinalMeasure) 

# From To ValueX FinalMeasure 
# 1 1 NA 2.333333 0.6665714 
# 2 2 1 2.500000 0.7500750 
# 3 3 2 1.000000 0.2069108 
# 4 4 3 0.000000 0.0000000 
# 5 5 2 0.000000 0.0000000 
# 6 6 NA 1.500000 1.5000000 
# 7 7 6 1.000000 0.6666667 
# 8 8 7 0.000000 0.0000000 

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

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