2016-07-29 9 views
0

Ich habe gerade begonnen, mit Graphen mit R zu arbeiten. Ich muss die Eigenvektorzentralitätsmetrik berechnen, und ich stieß auf ein Problem. In Anbetracht der folgenden gerichteten Graphen:Unterschiedliche Ergebnisse bei der Berechnung eines Zentrizitätsindexes mit gerichteter Grafikebene

m = matrix(c(0,0,0,0,1, 
      0,0,1,0,0, 
      0,0,0,0,1, 
      0,1,0,0,0, 
      1,0,0,0,15), byrow = T, nrow = 5) 
g <-graph.adjacency(adjmatrix=m, diag=T) 

ich verschiedene Graph Ebene Zentralität Indizes für die gleiche grafische Darstellung erhalten:

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 0.9812478 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 5.770555e-18 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 0.9812478 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 0.9812478 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 3.472951e-18 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 0.9812478 

> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization 
[1] 5.517527e-18 

Ich bin nicht sicher, ob die Anzahl der Iterationen oder wie der Graph Angabe wäre sollte durchlaufen Löse dieses Problem. Gibt es eine andere Methode zur Berechnung dieser Zentralität Metrik, um das gleiche Ergebnis zu erhalten, wenn Sie es mehrfach berechnen?

Antwort

0

Im Allgemeinen beruht die Eigenvektorzentralität auf der Zentralität einzelner Knoten. Die Existenz und Einzigartigkeit dieser Eigenlösungen ist eine Sache, die meiner Meinung nach normalerweise auf den Mathestapel-Austausch gehört.

In diesem Fall ist ein einfacher Tippfehler in der (5,5) Position Ihrer Adjazenzmatrix die Ursache für dieses Verhalten. Anstatt das nur zu sagen, werde ich ein bisschen erklären.

Sie werden feststellen, dass, während Zentralität Metrik zwischen 1 und 0 begrenzt ist, Ihre Adjazenzmatrix zwischen 1 und 0 an den Grenzen oszilliert. Warum machst du das Diagramm? Ein wiederkehrender Graph (Kette) wird garantiert mit einer endlichen Schlagzeit an seine ursprüngliche Position zurückkehren. Die eindimensionale Gitter hat immer eine zentrale Bedeutung von 0.

g <- make_ring(10, directed=FALSE) 

g 
    IGRAPH U--- 10 10 -- Ring graph 
+ attr: name (g/c), mutual (g/l), circular (g/l) 
+ edges: 
1-- 2 2-- 3 3-- 4 4-- 5 5-- 6 6-- 7 7-- 8 8-- 9 9--10 1--10 

Warum? Weil sich der Graph mit 100% Wahrscheinlichkeit von einem Knoten zum nächsten bewegt.

centr_degree(g)$centralization 
[1] 0 

Ihr Diagramm sieht wie folgt aus

g 
IGRAPH D--- 5 20 -- 
+ edges: 
[1] 1->5 2->3 3->5 4->2 5->1 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 

Es befindet sich auf 5 mit einer Wahrscheinlichkeit von 15/16, und bewegt sich zu 1 mit einer Wahrscheinlichkeit von 1/16 stecken bleibt. Wenn Sie diesen Tippfehler korrigieren, wird Ihre Zentralität immer als .719218 berechnet, was immer noch anzeigt, dass dieser Graph Knoten 5 schwer wiegt.

könnten Sie auch beachten, dass, wenn Sie die TRUE-FALSE gerichtet ändern Sie auch dieses Problem vermeiden, da sie die kürzeste gerichteten Graphen berechnen wird notwendig, die Eigen Zentralität zu berechnen, von denen es immer .959 berechnen wird.

+0

Ich habe dieses Diagramm mit 14 in der (5,5) Position ausprobiert und es ist kein Problem, ich bekomme immer 0,979762. Ich meine, 15 ist kein Tippfehler. Kann ich die Eigenzentralität mit mehreren Pfaden berechnen? Ich machte kleine Tests mit anderen Werten als 1 in der Adjazenzmatrix und die Ergebnisse waren konsistent und intuitiv. – hector

+0

Ich dachte, du hättest 1 statt 15 eingeben sollen. In einer ungewichteten, ungerichteten Grafik kann keine Adjazenzmatrix ein Element größer als 2 haben. Du hast eine stark gewichtete Grafik. Sie müssen das Argument "gewichtet" in "graph.adjacency" auf TRUE setzen. – shayaa