Borrar filtros
Borrar filtros

Betweenness Centrality for a vertices in an adjacency matrix

30 visualizaciones (últimos 30 días)
Christian
Christian el 23 de Jul. de 2013
Comentada: Christine Tobler el 23 de Ag. de 2024 a las 16:18
Hello,
I'm trying to calculate the betweenness centrality for all nodes in an adjacency matrix. It is a weighted network. As far as I know, the Input should be the distance matrix which I have obtained from the adjacency matrix.
Then, I found the following code: http://www.mathworks.com/matlabcentral/fileexchange/10922-matlabbgl/content/matlab_bgl/betweenness_centrality.m I'm not 100% sure, but I think that this is my solution. However, I'm still new to MatLab and can't get the code running. I read some questions about varargin, but I still don't know what I need to put in here and what is meant by "set_matlab_bgl_options % for the standard options."
Any help is highly appreciated. I'm currently writing my thesis and desperately need betweenness scores for my network :) Thanks a lot!!!

Respuestas (6)

Rodrigo Mesa-Arango
Rodrigo Mesa-Arango el 14 de Feb. de 2014
Don't worry about varargin, what you actually need is an sparse matrix as input. Look at the sample code below.
(Make sure the matlabbgl code is in the path)
>> y = [ 0 1 0 0 0; 0 0 1 0 5; 0 0 0 1 0; 0 0 0 0 0; 0 0 0 5 0]
y =
0 1 0 0 0
0 0 1 0 5
0 0 0 1 0
0 0 0 0 0
0 0 0 5 0
>> s =sparse(y)
s =
(1,2) 1
(2,3) 1
(3,4) 1
(5,4) 5
(2,5) 5
>> [bc,E] = betweenness_centrality(s)
bc =
0
3
2
0
0
E =
(1,2) 4
(2,3) 4
(3,4) 3
(5,4) 1
(2,5) 2
Where bc is the node betweenness centrality and E the edge betweenness
  2 comentarios
uzma khan
uzma khan el 25 de Feb. de 2016
Editada: uzma khan el 25 de Feb. de 2016
I'm trying to calculate the betweenness centrality for all edges in an adjacency matrix.when i used [bc,E] = betweenness_centrality(s) it gave the following error Undefined function or variable 'betweenness_centrality'.please someone help me how to find edge betweenness in Matlab.
Souarv De
Souarv De el 6 de Abr. de 2021
Editada: Souarv De el 9 de Abr. de 2021
@Rodrigo Mesa-ArangoWhat is the y? Is it a adjaceny matrix or distance matrix?

Iniciar sesión para comentar.


Steven Lord
Steven Lord el 7 de Abr. de 2021
Since this question was asked we have added the graph and digraph objects to MATLAB. Use one of those functions to create an object from the adjacency matrix (depending on whether your network is undirected or directed) then call the centrality function on the object.
  6 comentarios
Gerhard
Gerhard el 21 de Ag. de 2024 a las 8:28
Thank you very much, I know that the question comes late but I'm looking for a workaround function for edge centrality instead of node centrality
Thanks you
Christine Tobler
Christine Tobler el 23 de Ag. de 2024 a las 16:18
Hi Gerhard,
Right, so there are two ways to do this, one fast but that doesn't match exactly, and a slower one that should match exactly:
Fast, qualitatively similar:
% Make a random graph
rng default; g = digraph(sprandn(10, 10, 0.1));
% Extract its nodes and edges
[s, t] = findedge(g); w = g.Edges.Weight;
n = numnodes(g);
e = numedges(g);
% Make an auxiliary graph where every edge of the original graph is
% represented by a node:
auxNodes = (numnodes(g)+1:numnodes(g)+numedges(g))';
G = digraph([s; auxNodes], [auxNodes, t], [w; zeros(size(w))]);
fastC = centrality(G, 'betweenness');
fastC = fastC(n+1:end);
plot(g, EdgeLabel=fastC)
This isn't exactly edge betweenness, because instead of looking at all paths between any node and any other node, we will also treat edges as nodes, so we're counting all paths from any node or edge to any other node or edge.
Qualitatively, I don't think it makes much of a difference, but it's not the numbers you would expect.
Slow but exact version:
To avoid this, we need to only insert a node on one edge at a time. This is much more expensive, since we're throwing most of the centrality scores away in each iteration.
for ii=1:e
ind = [1:ii-1 ii+1:e];
Gii = digraph([s(ind); s(ii); n+1], [t(ind); n+1; t(ii)], [w(ind); w(ii); 0]);
c = centrality(Gii, 'betweenness');
exactC(ii) = c(end);
end
plot(g, EdgeLabel=exactC)
Here you can count that the number on each edge is the number of pairs of start and target nodes who are connected by a shortest path through that edge.

Iniciar sesión para comentar.


Narges M
Narges M el 23 de Jul. de 2013

Christian
Christian el 23 de Jul. de 2013
Hey Narges,
thank you for your answer. I finally found this code, that seems to be running too:
However, if I take the distance as 1./Adjacency_Matrix it just returns zeros. I thought it is possible to calculate betweenness from the inverse of the adjacency matrix for each vertex. Do you, or does anybody know where the catch might be?
Thanks Christian

Antonio Serda
Antonio Serda el 3 de Feb. de 2022
If you try to calculate the inverse of the adjacency matrix the main diagonal will transfomr to inf. Try to make the diagonal 0 again.

Muhammad Tabish Bilal
Muhammad Tabish Bilal el 7 de Abr. de 2022
Hi all,
I just managed to solve the problem with finding the Edge betweeness of any sort of network. First i recommend to download the MATLABBLG files from this link
After adding it to the path of your current working directory. You can call the function of edge betweeness as:
[bc, E] = betweenness_centrality(s)
keep in mind that "s" should be a sparse matrix not the normal adjacency matrix. This will give you the weighted edge betweenness of your network graph.
Cheers!!!

Categorías

Más información sobre Directed Graphs en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by