2014-09-06 23 views
1

对于这个度量,我总是只需要传入的树进入一个顶点。 第一部分我将不得不计算到顶点的所有最短路径,并以特殊的方式将它们汇总起来,所有都用shortestPath = 1计为1所有用shortestPath = 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) 

我的第一个想法是建立与集群功能()和最短路径(),但我不知道我该怎么做。

+1

这个问题应该表明你犯了一个善意的尝试自己解决问题并不只是要求人们为你写代码。获得样本输入和期望的输出是非常好的,这将使测试可能的解决方案变得更容易,但是到目前为止您尝试过了什么?你可以分享一些你的尝试代码,并清楚哪里出了问题?另外,我假设你的意思是'igraph'库,而不是'graph'。 – MrFlick 2014-09-06 17:36:26

回答

1

看来,就可以计算出ValueXFinalMeasure与此代码

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