对于此测量,我总是只需要将传入的树放入顶点。 第一部分我将不得不计算所有最短的顶点路径,并以特殊的方式求和它们,所有的shortestPath = 1将计为1,shortestPath = 2将计为1/2,全部使用shortestPath = 3为1/3,依此类推。然后他们应该总结为我们现在称为x的值。 完成图表后,应该有一个函数,它将采用x并计算 x / sum(y)y将是从上面计算的所有值减去我们当前正在处理的值。
我的初始数据是:
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)
最后它看起来应该与此类似
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)
我的第一个想法是使用clusters()和shortest.paths()构建一个函数,但我不知道我该怎么做。
答案 0 :(得分: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