2014-09-06 42 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