github.com/jingcheng-WU/gonum@v0.9.1-0.20210323123734-f1a2a11a8f7b/graph/community/louvain.tex (about) 1 % Copyright ©2015 The Gonum Authors. All rights reserved. 2 % Use of this source code is governed by a BSD-style 3 % license that can be found in the LICENSE file. 4 5 \documentclass{article} 6 7 \usepackage{amsmath,amsfonts} 8 \usepackage[margin=4cm]{geometry} 9 10 \title{Louvain algorithm for undirected and directed graphs} 11 \author{The {\tt Gonum} Authors} 12 13 \begin{document} 14 15 \maketitle 16 17 The algorithm attempts to find communities (highly connected sub-graphs), 18 and it does this by minimising the modularity function 19 \begin{equation} 20 Q(c) = \frac{1}{2m}\sum_i\sum_j\left[ A_{ij} - \gamma \frac{k_ik_j}{2m} \right] \delta_{ij}(c), 21 \end{equation} 22 where $c$ is a partition of nodes into subsets or communities, 23 $A_{ij}$ is the edge weight between nodes $i$ and $j$, 24 $\gamma$ is a tuning parameter, 25 \begin{equation} 26 m = \frac{1}{2}\sum_i\sum_jA_{ij}, 27 \end{equation} 28 \begin{equation} 29 k_i = \sum_j{A_{ij}}, 30 \end{equation} 31 and 32 \begin{equation} 33 \delta_{ij}(c) = \left \{ \begin{array}{ll} 34 1 & \text{if} \quad c(i) = c(j) \\ 35 0 & \text{otherwise} \end{array} \right .. 36 \end{equation} 37 Here $c(i)$ denotes the community to which node $i$ belongs 38 in the partitioning $c$. 39 40 The algorithm finds a hierarchical community structure by iterating 41 between two phases: 42 \begin{enumerate} 43 \item Find a set of communities that minimise $Q$. 44 \item Construct a new graph, whose nodes are the communities 45 found in the preceding phase one step. 46 \end{enumerate} 47 Each iteration of these two phases is called a `pass'. 48 In this way, the algorithm obtains a nested community structure, 49 where at each level $Q$ is minimised for the relevant graph. 50 We consider this process in more detail, in particular looking 51 at phase one first in the first pass, when each node is a single 52 node, and then how this generalises to later passes when each node 53 is a community. 54 55 \section{Undirected Graphs} 56 57 \subsection{Initial Pass} 58 \label{sec:initialPass} 59 60 The initial pass is simple as the initial pass uses the original graph, 61 and in all following passes graphs constructed in the previous pass's 62 phase two are used. 63 Here we will consider this initial simple formulation for phase one, and 64 in Section~\ref{sec:laterPasses} we consider how this generalises for 65 passes two and onwards. 66 Phase one works by initially allocating each node to a separate community, 67 and then iterating through each node $a$ and checking if moving it into 68 a different community $\beta$ will reduce $Q$. 69 If there are possible moves that will reduce $Q$, $a$ is moved into the 70 the community which will generate the largest reduction in $Q$. 71 This process is continued until there are no moves left to reduce $Q$ 72 further, meaning a local minimum for $Q$ has been achieved. 73 Then the algorithm moves to phase two (constructing a new graph where 74 each node in the new graph is a community in the old graph). 75 76 Note that we assume the original graph to be simple and undirected. 77 First, we introduce some notation that will be useful: 78 Let $c(i)$ denote the community to which node $i$ belongs, 79 and let $\alpha$ be the community that the node $a$ mentioned above 80 belongs to, i.e., $\alpha = c_a$. 81 Then we define 82 \newcommand{\Stot}[1]{\Sigma_{\text{tot}}^{#1}} 83 \begin{equation} 84 \Stot{\alpha} = \sum_{i \in \alpha}\sum_{j}A_{ij} = \sum_{i \in \alpha}k_i, 85 \end{equation} 86 \newcommand{\kin}[2]{k_{#1}^{#2}} 87 \begin{equation} 88 \kin{i}{\alpha} = \sum_{j \in \alpha}A_{ij}, 89 \end{equation} 90 and 91 \newcommand{\Sin}[1]{\Sigma_{\text{in}}^{#1}} 92 \begin{equation} 93 \Sin{\alpha} = \sum_{i \in \alpha}\sum_{j \in \alpha}A_{ij} = \sum_{i \in \alpha}\kin{i}{\alpha}. 94 \end{equation} 95 96 We are interested in how $Q$ will change if we move a node $a$ from its 97 current community $\alpha$, to a new community $\beta$. 98 This will have two effects, it will remove the terms from $Q$ 99 related to $a$ in $\alpha$, which we will call $Q^-$ and it will add terms 100 related to $a$ in $\beta$, which we will call $Q^+$. 101 The total change in $Q$ caused by the movement of $a$ from $\alpha$ to $\beta$ is 102 \begin{equation} 103 \Delta Q = Q^{+} - Q^{-}, 104 \end{equation} 105 where 106 \begin{align*} 107 Q^- &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 108 + 2\sum_{i \in \alpha, \, i \neq a} \left( A_{ia} - \gamma \frac{k_ik_a}{2m} \right) \right] \\ 109 &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 110 + 2 \left( \kin{a}{\alpha} -A_{aa}\right) - \gamma \frac{2k_a}{2m}\sum_{i \in \alpha, \, i \neq a} k_i \right] \\ 111 &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 112 + 2 \left( \kin{a}{\alpha} -A_{aa}\right) - \gamma \frac{2k_a}{2m}\left( \Stot{\alpha} - k_a \right) \right], \\ 113 \end{align*} 114 and 115 \begin{align*} 116 Q^+ &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 117 + 2\sum_{i \in \beta} \left( A_{ia} - \gamma \frac{k_ik_a}{2m} \right) \right] \\ 118 &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 119 + 2\kin{a}{\beta} - \gamma \frac{2k_a}{2m}\sum_{i \in \beta} k_i \right] \\ 120 &= \frac{1}{2m}\left[ \left( A_{aa} - \gamma \frac{k_a^2}{2m} \right) 121 + 2\kin{a}{\beta} - \gamma \frac{2k_a\Stot{\beta}}{2m} \right]. \\ 122 \end{align*} 123 The first term in both these expressions ($Q^-$ and $Q^+$) is the same, and so cancels: 124 \begin{equation} 125 \Delta Q = \frac{1}{2m}\left[ \left( 2\kin{a}{\beta} - \gamma \frac{2k_a\Stot{\beta}}{2m} \right) 126 - \left( 2 \left( \kin{a}{\alpha} -A_{aa}\right) - \gamma \frac{2k_a}{2m}\left( \Stot{\alpha} - k_a \right) \right) \right]. 127 \end{equation} 128 129 \subsection{Later Passes} 130 \label{sec:laterPasses} 131 132 In phase two a `meta-graph' is constructed where nodes correspond to 133 the communities found in the preceding phase one step, and edge weight 134 between two such communities (nodes, in the meta-graph) 135 $\alpha$ and $\beta$ are defined to be 136 \begin{equation} 137 A_{\alpha \beta}^* = \sum_{i \in \alpha}\sum_{j \in \beta}A_{ij}. 138 \label{eqn:Aij*} 139 \end{equation} 140 Note that $i$ and $j$ refer to nodes in the original graph, not nodes 141 in the previous graph, and so holds any meta-graph, not just the first. 142 Also note that this definition of $A^*_{\alpha \beta}$ allows for 143 $A^*_{\alpha \alpha}$ to be non-zero as 144 \begin{equation} 145 A_{\alpha \alpha}^* = \sum_{i \in \alpha}\sum_{j \in \alpha}A_{ij} = \Sin{\alpha}. 146 \end{equation} 147 148 In this newly constructed graph, $\alpha$ and $\beta$ are nodes, but 149 also refer to communities (sets of nodes) in the original graph, and I 150 use these two interpretations interchangeably. 151 This should be the only ambiguous bit of notation in this document, I hope. 152 153 The results of Section~\ref{sec:initialPass} generalise to these meta-graphs, 154 and the generalised results mirror those of Section~\ref{sec:initialPass} closely 155 -- I distinguish the new results from those of Section~\ref{sec:initialPass} by a 156 superscript $*$. 157 I use $i$ and $j$ to denote nodes of the original graph as in Section~\ref{sec:initialPass}, 158 and use $z$ and $w$ to denote nodes of the meta-graph (communities of the original). 159 I use analogous notation to Section~\ref{sec:initialPass}, $c^*(z)$, to 160 denote the community to which node $z$ of the meta-graph belongs, 161 and let $\mathfrak{a}$ be the community that the node $\alpha$ belongs to 162 ($c^*(\alpha) = \mathfrak{a}$), i.e. 163 \begin{equation} 164 \mathfrak{a} = \{z | c^*(z) = c^*(\alpha) \}. 165 \end{equation} 166 167 Given this notation, we can observe that 168 \begin{equation} 169 m^* = \frac{1}{2}\sum_{z}\sum_{w}{A_{zw}^*} = \frac{1}{2}\sum_{z}\sum_{w}{\sum_{i \in z}\sum_{j \in w}A_{ij}} = \frac{1}{2}\sum_i\sum_jA_{ij} = m, 170 \end{equation} 171 \begin{equation} 172 k_{z}^* = \sum_{w}{A_{zw}^*} = \sum_{w}{\sum_{i \in z}\sum_{j \in w}A_{ij}} = \sum_{i \in z}\sum_{j}A_{ij} = \Stot{z}, 173 \end{equation} 174 \begin{equation} 175 \Stot{\mathfrak{a} *} = \sum_{z \in \mathfrak{a}}\sum_{w}A_{zw}^* = \sum_{z \in \mathfrak{a}}k_z^* = \sum_{z \in \mathfrak{a}}\Stot{z}, 176 \end{equation} 177 \begin{equation} 178 \kin{z}{\mathfrak{a} *} = \sum_{w \in \mathfrak{a}}{A_{zw}^*} = \sum_{w \in \mathfrak{a}}{\sum_{i \in z}\sum_{j \in w}A_{ij}}, 179 \end{equation} 180 and 181 \begin{equation} 182 \Sin{\mathfrak{a} *} = \sum_{z \in \mathfrak{a}}\sum_{w \in \mathfrak{a}}A_{zw}^* = \sum_{z \in \mathfrak{a}}\kin{z}{\mathfrak{a} *} = \sum_{z \in \mathfrak{a}}\sum_{w \in \mathfrak{a}}{\sum_{i \in z}\sum_{j \in w}A_{ij}}. 183 %\label{eqn:Sin} 184 \end{equation} 185 186 If we let $\mathfrak{b}$ denote the community to which we are considering moving $\alpha$, 187 then the expression for $\Delta Q$ from Section~\ref{sec:initialPass} trivially generalises to 188 \begin{equation} 189 \Delta Q = \frac{1}{2m}\left[ \left( 2 \kin{\alpha}{\mathfrak{b} *} - \gamma \frac{2k_{\alpha}^*\Stot{\mathfrak{b} *}}{2m} \right) 190 - \left( 2\left( \kin{\alpha}{\mathfrak{a} *} - A_{\alpha \alpha}^* \right) - \gamma \frac{2k_{\alpha}^*}{2m} \left( \Stot{\mathfrak{a} *} - k_{\alpha}^* \right ) \right) \right] \\ 191 \end{equation} 192 193 \section{Directed Graphs} 194 \label{sec:directedGraphs} 195 196 It is of interest to consider how this generalises to directed graphs. 197 If we are to treat incoming and outgoing nodes equally, there are several 198 thoughts on how to extend the algorithm to directed graphs, of which we 199 will explore three: 200 \begin{itemize} 201 \item Construct an undirected graph first, and then use the undirected case. 202 \item Generalise the expressions from the undirected case to the directed case, 203 we will consider two different suggestions for such generalisations. 204 \end{itemize} 205 We will show that one of the two `generalisation of expressions' approaches is 206 equivalent to constructing an undirected graph, and the other is not. 207 208 \subsection{Construction of an undirected graph} 209 A simple approach to generalising to directed graphs is to construct 210 an undirected graph with edge weights 211 \begin{equation} 212 A_{ij} = B_{ij} + B_{ji}, 213 \label{eqn:undirectedAB} 214 \end{equation} 215 and simply use the undirected algorithm. 216 Another suggestion is to average the directed edges to make 217 an undirected graph, i.e. to use a directed graph with edge weights 218 \begin{equation} 219 A_{ij} = \frac{B_{ij} + B_{ji}}{2}. 220 \end{equation} 221 This raises an important question: does scaling all edge weights across 222 the entire graph by a constant affect the results of the algorithm? 223 Hopefully not, but worth checking. 224 We can follow this through the results for the undirected graph by 225 substituting $A_{ij}^{(1)} = pA_{ij}$, $p \in \mathbb{R}$, and 226 distinguishing the new expressions by a superscript ${(1)}$. These 227 new expressions are: 228 \begin{equation} 229 m^{(1)} = \frac{1}{2}\sum_i\sum_jpA_{ij} = p\frac{1}{2}\sum_i\sum_j A_{ij} = pm , 230 \end{equation} 231 \begin{equation} 232 k_i^{(1)} = \sum_j{pA_{ij}} = p\sum_j{A_{ij}} = pk_i, 233 \end{equation} 234 and so 235 \begin{align*} 236 Q^{(1)}(c) &= \frac{1}{2pm}\sum_i\sum_j\left[ pA_{ij} - \gamma \frac{pk_ipk_j}{2pm} \right] \delta_{ij}(c) \\ 237 &= \frac{1}{2m}\sum_i\sum_j\left[ A_{ij} - \gamma \frac{k_ik_j}{2m} \right] \delta_{ij}(c) \\ 238 &= Q(c) 239 \end{align*} 240 Note that as we have shown $Q^{(1)} = Q$ there is no need to go into the remainder of the terms 241 involved in the algorithm, as they all derive from $Q$. 242 243 \subsection{First generalisation of expressions approach} 244 245 One suggested extension to directed graphs is to modify the expressions 246 involved by adding the `from' case and the `to' case for each term. 247 If we let $B_{ij}$ be the edge weight between nodes $i$ and $j$ in 248 the directed graph, and distinguishing these extended expressions by 249 a superscript $(2)$, the extended expressions become: 250 \begin{equation} 251 m^{(2)} = \frac{1}{2}\left ( \sum_i\sum_jB_{ij} + \sum_i\sum_jB_{ji}\right) = \frac{1}{2}\sum_i\sum_j \left( B_{ij} + B_{ji} \right) , 252 \end{equation} 253 \begin{equation} 254 k_i^{(2)} = \sum_jB_{ij} + \sum_jB_{ji} = \sum_j{\left( B_{ij} + B_{ji} \right)}, 255 \end{equation} 256 and similarly 257 \begin{equation} 258 Q^{(2)}(c) = \frac{1}{2m}\sum_i\sum_j\left[ \left( B_{ij} + B_{ji} \right) - \gamma \frac{k_i^{(2)}k_j^{(2)}}{2m} \right] \delta_{ij}(c). 259 \end{equation} 260 261 Note how this is equivalent to the construction of an undirected graph as 262 per Equation~(\ref{eqn:undirectedAB}). Similarly to above, 263 there is no need to go into the remainder of the terms 264 involved in the algorithm, as they all derive from $Q$. 265 266 267 \subsection{Second generalisation of expressions approach} 268 269 Another approach to generalising the expressions to the 270 directed case, that still treats incoming and outgoing edges 271 as equally important, is to propose an alternative modularity 272 expression: 273 \newcommand{\dkin}[1]{k_{#1}^{\text{in}}} 274 \newcommand{\dkout}[1]{k_{#1}^{\text{out}}} 275 \begin{equation} 276 Q^{(3)}(c) = \frac{1}{2m}\sum_i\sum_j\left[ 2B_{ij} - 2\gamma \frac{\dkin{i}\dkout{j}}{2m} \right] \delta_{ij}(c), \\ 277 \end{equation} 278 where 279 \begin{equation} 280 \dkout{i} = \sum_j{B_{ij}} 281 \quad \quad \text{and} \quad \quad 282 \dkin{i} = \sum_j{B_{ji}}, 283 \end{equation} 284 so $k_i^{(2)} = \dkin{i} + \dkout{i}$. 285 Note I leave the factor of two in the expression for $Q^{(3)}$ so that it 286 remains as comparable to that for $Q^{(2)}$ as possible. 287 There is no need for alternative $m$, as it will still be the same as above. 288 $Q^{(3)}$ will differ from $Q^{(2)}$ in two ways. 289 Firstly, as $k_i^{(2)} = \dkin{i} + \dkout{i}$, 290 \begin{align*} 291 \sum_i\sum_j k_i^{(2)} k_j^{(2)} \delta_{ij}(c) &= \sum_i\sum_j (\dkin{i} + \dkout{i}) (\dkin{j} + \dkout{j}) \delta_{ij}(c) \\ 292 &= \sum_i\sum_j \left[ (\dkin{i}\dkin{j} + \dkout{i}\dkout{j}) + (\dkin{i}\dkout{j} + \dkin{j}\dkout{i}) \right] \delta_{ij}(c). \\ 293 &= \sum_i\sum_j \left[ (\dkin{i}\dkin{j} + \dkout{i}\dkout{j}) + 2\dkin{i}\dkout{j} \right] \delta_{ij}(c), \\ 294 \end{align*} 295 and similarly, 296 \begin{equation} 297 \sum_i\sum_j \left( B_{ij} + B_{ji} \right) \delta_{ij}(c) = 2\sum_i\sum_j B_{ij} \delta_{ij}(c). 298 \end{equation} 299 From these two expressions, we can see that 300 \begin{equation} 301 Q^{(3)} - Q^{(2)} = \frac{1}{2m}\sum_i\sum_j \gamma \frac{\dkin{i}\dkin{j} + \dkout{i}\dkout{j}}{2m} \delta_{ij}(c). 302 \end{equation} 303 304 305 \section{Directed Graphs in more detail} 306 \label{sec:directedGraphsDetail} 307 308 In Section \ref{sec:directedGraphs} we essentially showed three 309 things: 310 \begin{itemize} 311 \item How an undirected graph could be constructed from a directed 312 graph, thereby allowing the undirected algorithm to be used for 313 directed graphs. 314 \item How scaling all edge weights by a non-zero constant would not 315 affect the modularity function. 316 \item An alternative approach to extending the algorithm to 317 directed graphs that is not equivalent to first reducing it 318 to an undirected graph. 319 \end{itemize} 320 It is this third point that we will explore here. 321 Analogously to Sections \ref{sec:initialPass} and \ref{sec:laterPasses} we will 322 break this up into the initial pass and the later passes. 323 324 \subsection{Initial pass} 325 \label{sec:initialPassDirected} 326 327 Continuing with the notation of Section \ref{sec:initialPass}, in which 328 $c(i)$ denotes the community to which node $i$ belongs, 329 and $\alpha = c(a)$, we define 330 \newcommand{\dinStot}[1]{\Sigma_{\text{tot}}^{\text{in}(#1)}} 331 \newcommand{\doutStot}[1]{\Sigma_{\text{tot}}^{\text{out}(#1)}} 332 \begin{equation} 333 \doutStot{\alpha} = \sum_{i \in \alpha}\sum_{j}B_{ij} = \sum_{i \in \alpha}\dkout{i} 334 \quad \quad \text{and} \quad \quad 335 \dinStot{\alpha} = \sum_{i \in \alpha}\sum_{j}B_{ji} = \sum_{i \in \alpha}\dkin{i}, 336 \end{equation} 337 \newcommand{\dinkin}[2]{k_{#1}^{\text{in}(#2)}} 338 \newcommand{\doutkin}[2]{k_{#1}^{\text{out}(#2)}} 339 \begin{equation} 340 \doutkin{i}{\alpha} = \sum_{j \in \alpha}B_{ij} 341 \quad \quad \text{and} \quad \quad 342 \dinkin{i}{\alpha} = \sum_{j \in \alpha}B_{ji}, 343 \end{equation} 344 and we will entertain one more ambiguous notation choice: 345 %\newcommand{\Sin}[1]{\Sigma_{\text{in}}^{#1}} 346 \begin{equation} 347 \Sin{\alpha} = \sum_{i \in \alpha}\sum_{j \in \alpha}B_{ij} = \sum_{i \in \alpha}\doutkin{i}{\alpha} = \sum_{i \in \alpha}\dinkin{i}{\alpha}. 348 \end{equation} 349 350 Analogously to Section \ref{sec:initialPass}, we are interested in how 351 $Q^{(3)}$ will change if we move a node $a$ from its 352 current community $\alpha$, to a new community $\beta$, 353 and analogously this will have two effects -- it will remove the terms 354 from $Q^{(3)}$ related to $a$ in $\alpha$, which we will call $Q^{-(3)}$ 355 and it will add terms related to $a$ in $\beta$, which we will call $Q^{+(3)}$. 356 The total change in $Q^{(3)}$ caused by the movement of $a$ from $\alpha$ to $\beta$ is 357 \begin{equation} 358 \Delta Q^{(3)} = Q^{+(3)} - Q^{-(3)}, 359 \end{equation} 360 where 361 \begin{align*} 362 Q^{-(3)} &= \frac{1}{2m}\left[ \left( 2B_{aa} - 2\gamma \frac{\dkin{a}\dkout{a}}{2m} \right) 363 + \sum_{i \in \alpha, \, i \neq a} \left( 2B_{ia} + 2B_{ai} - 2\gamma \frac{\dkin{i}\dkout{a}}{2m} - 2\gamma \frac{\dkin{a}\dkout{i}}{2m} \right) \right] \\ 364 &= \frac{1}{2m}\left[ \left( 2B_{aa} - 2\gamma \frac{\dkin{a}\dkout{a}}{2m} \right) 365 + 2(\dinkin{a}{\alpha} - B_{aa}) + 2(\doutkin{a}{\alpha} - B_{aa}) \hdots \right . \\ 366 & \quad \quad \quad \quad \quad \quad \left . 367 - \frac{2\gamma\dkout{a}}{2m} (\dinStot{\alpha} - \dkin{a}) - \frac{2\gamma\dkin{a}}{2m} (\doutStot{\alpha} - \dkout{a}) \right] \\ 368 \end{align*} 369 and 370 \begin{align*} 371 Q^{+(3)} &= \frac{1}{2m}\left[ \left( 2B_{aa} - 2\gamma \frac{\dkin{a}\dkout{a}}{2m} \right) 372 + \sum_{i \in \beta} \left( 2B_{ia} + 2B_{ai} - 2\gamma \frac{\dkin{i}\dkout{a}}{2m} - 2\gamma \frac{\dkin{a}\dkout{i}}{2m} \right) \right] \\ 373 &= \frac{1}{2m}\left[ \left( 2B_{aa} - 2\gamma \frac{\dkin{a}\dkout{a}}{2m} \right) 374 + 2\dinkin{a}{\beta} + 2\doutkin{a}{\beta} - \frac{2\gamma\dkout{a}}{2m} \dinStot{\beta} - \frac{2\gamma\dkin{a}}{2m} \doutStot{\beta} \right] \\ 375 \end{align*} 376 Similarly to Section \ref{sec:initialPass}, the first term in both these expressions is the same, and so cancels, leaving: 377 \begin{align*} 378 \Delta Q^{(3)} &= \frac{2}{2m}\left[ 379 \left( \dinkin{a}{\beta} + \doutkin{a}{\beta} - \frac{\gamma\dkout{a}}{2m} \dinStot{\beta} - \frac{\gamma\dkin{a}}{2m} \doutStot{\beta} \right) \right. \\ 380 & \hspace{-1cm} 381 - \left. \left( (\dinkin{a}{\alpha} - B_{aa}) + (\doutkin{a}{\alpha} - B_{aa}) - \frac{\gamma\dkout{a}}{2m} (\dinStot{\alpha} - \dkin{a}) - \frac{\gamma\dkin{a}}{2m} (\doutStot{\alpha} - \dkout{a}) \right) \right] \\ 382 &= \frac{2}{2m}\left[ (\dinkin{a}{\beta}-\dinkin{a}{\alpha}) + (\doutkin{a}{\beta}-\doutkin{a}{\alpha}) + 2B_{aa} \right. \\ 383 & \hspace{-1cm} \left. 384 - \frac{\gamma\dkout{a}}{2m} (\dinStot{\beta}-\dinStot{\alpha}) - \frac{\gamma\dkin{a}}{2m} (\doutStot{\beta} - \doutStot{\alpha}) - \frac{2\gamma\dkin{a}\dkout{a}}{2m} \right] 385 \end{align*} 386 387 388 389 \subsection{Later passes} 390 \label{sec:laterPassesDirected} 391 392 In phase two a `meta-graph' is constructed where nodes correspond to 393 the communities found in the preceding phase one step, and edge weight 394 between two such communities (nodes, in the meta-graph) 395 $\alpha$ and $\beta$ are defined to be 396 \begin{equation} 397 B_{\alpha \beta}^* = \sum_{i \in \alpha}\sum_{j \in \beta}B_{ij}. 398 \label{eqn:Bij*} 399 \end{equation} 400 Note that $i$ and $j$ refer to nodes in the original graph, not nodes 401 in the previous graph, and so holds any meta-graph, not just the first. 402 Also note that this definition of $B^*_{\alpha \beta}$ allows for 403 $B^*_{\alpha \alpha}$ to be non-zero, in fact 404 \begin{equation} 405 B_{\alpha \alpha}^* = \sum_{i \in \alpha}\sum_{j \in \alpha}B_{ij} = \Sin{\alpha}. 406 \end{equation} 407 408 In this newly constructed graph, $\alpha$ and $\beta$ are nodes, but 409 also refer to communities (sets of nodes) in the original graph, and I 410 use these two interpretations interchangeably, completely analogously to 411 Section \ref{sec:laterPasses}. 412 413 The results of Section~\ref{sec:initialPassDirected} generalise to these meta-graphs, 414 and the generalised results mirror those of Section~\ref{sec:initialPassDirected} closely 415 -- I distinguish the new results from those of Section~\ref{sec:initialPassDirected} by a 416 superscript $*$. 417 I use $i$ and $j$ to denote nodes of the original graph as in Sections~\ref{sec:initialPass} 418 and \ref{sec:initialPassDirected}, 419 and use $z$ and $w$ to denote nodes of the meta-graph (communities of the original). 420 I use analogous notation to Section~\ref{sec:initialPass}, $c^*(z)$, to 421 denote the community to which node $z$ of the meta-graph belongs, 422 and let $\mathfrak{a}$ be the community that the node $\alpha$ belongs to, 423 i.e., $\mathfrak{a} = c^*(\alpha) $. 424 425 Given this notation, we get all the same results as in \ref{sec:laterPasses}, but 426 each split into two cases `out' and `in', separating by direction, essentially, so 427 \newcommand{\dkinStar}[1]{k_{#1}^{\text{in} *}} 428 \newcommand{\dkoutStar}[1]{k_{#1}^{\text{out} *}} 429 \begin{equation} 430 \dkoutStar{z} = \sum_w{B_{zw}^*} = \sum_w\sum_{i \in z}\sum_{j \in w}B_{ij} = \sum_{i \in z}\sum_jB_{ij} = \doutStot{z}, 431 \end{equation} 432 \begin{equation} 433 \dkinStar{z} = \sum_w{B_{wz}^*} = \sum_w\sum_{i \in z}\sum_{j \in w}B_{ji} = \sum_{i \in z}\sum_jB_{ji} = \dinStot{z}, 434 \end{equation} 435 \newcommand{\dinStotStar}[1]{\Sigma_{\text{tot}}^{\text{in}(#1) *}} 436 \newcommand{\doutStotStar}[1]{\Sigma_{\text{tot}}^{\text{out}(#1) *}} 437 \begin{equation} 438 \doutStotStar{\mathfrak{a}} = \sum_{z \in \mathfrak{a}}\sum_{w}B_{zw}^* = \sum_{z \in \mathfrak{a}}\dkoutStar{z} = \sum_{z \in \mathfrak{a}}\doutStot{z}, 439 \end{equation} 440 \begin{equation} 441 \dinStotStar{\mathfrak{a}} = \sum_{z \in \mathfrak{a}}\sum_{w}B_{wz}^* = \sum_{z \in \mathfrak{a}}\dkinStar{z} = \sum_{z \in \mathfrak{a}}\dinStot{z}, 442 \end{equation} 443 \newcommand{\dinkinStar}[2]{k_{#1}^{\text{in}(#2) *}} 444 \newcommand{\doutkinStar}[2]{k_{#1}^{\text{out}(#2) *}} 445 \begin{equation} 446 \doutkinStar{z}{\mathfrak{a}} = \sum_{w \in \mathfrak{a}}{B_{zw}^*} = \sum_{w \in \mathfrak{a}}{\sum_{i \in z}\sum_{j \in w}B_{ij}}, 447 \end{equation} 448 \begin{equation} 449 \dinkinStar{z}{\mathfrak{a}} = \sum_{w \in \mathfrak{a}}{B_{wz}^*} = \sum_{w \in \mathfrak{a}}{\sum_{i \in z}\sum_{j \in w}B_{ji}}, 450 \end{equation} 451 and 452 \begin{equation} 453 \Sin{\mathfrak{a} *} = \sum_{z \in \mathfrak{a}}\sum_{w \in \mathfrak{a}}A_{zw}^* = \sum_{z \in \mathfrak{a}}\kin{z}{\mathfrak{a} *} = \sum_{z \in \mathfrak{a}}\sum_{w \in \mathfrak{a}}{\sum_{i \in z}\sum_{j \in w}A_{ij}}. 454 %\label{eqn:Sin} 455 \end{equation} 456 457 If we let $\mathfrak{b}$ denote the community to which we are considering moving $\alpha$, 458 then the expression for $\Delta Q$ from Section~\ref{sec:initialPassDirected} simply generalises as 459 \begin{align*} 460 \Delta Q^{(3)} &= \frac{2}{2m}\left[ (\dinkinStar{\alpha}{\mathfrak{b}}-\dinkinStar{\alpha}{\mathfrak{a}}) + (\doutkinStar{\alpha}{\mathfrak{b}}-\doutkinStar{\alpha}{\mathfrak{a}}) + 2B_{\alpha\alpha}^* \right. \\ 461 & \hspace{-1cm} \left. 462 - \frac{\gamma\dkoutStar{\alpha}}{2m} (\dinStotStar{\mathfrak{b}}-\dinStotStar{\mathfrak{a}}) - \frac{\gamma\dkinStar{\alpha}}{2m} (\doutStotStar{\mathfrak{b}} - \doutStotStar{\mathfrak{a}}) - \frac{2\gamma\dkinStar{\alpha}\dkoutStar{\alpha}}{2m} \right] 463 \end{align*} 464 465 466 \end{document}