# leading.eigenvector.community

##### Community structure detecting based on the leading eigenvector of the community matrix

These functions try to find densely connected subgraphs in a graph by calculating the leading non-negative eigenvector of the modularity matrix of the graph.

- Keywords
- graphs

##### Usage

```
leading.eigenvector.community(graph, steps = vcount(graph), naive = FALSE)
leading.eigenvector.community.step (graph, fromhere = NULL,
membership = rep(0, vcount(graph)), community = 0, eigenvector = TRUE)
```

##### Arguments

- graph
- The input graph. Should be undirected as the method needs a symmetric matrix.
- steps
- The number of steps to take, this is actually the number of tries to make a step. It is not a particularly useful parameter.
- naive
- Logical constant, it defines how the algorithm tries to
find more divisions after the first division was made. If
`TRUE`

then it simply considers both communities as separate graphs and then creates modularity matrices for both comm - fromhere
- An object returned by a previous call to
`leading.eigenvector.community.step`

. This will serve as a starting point to take another step. This argument is ignored if it is`NULL`

. - membership
- The starting community structure. It is a numeric vector defining the membership of every vertex in the graph with a number between 0 and the total number of communities at this level minus one. By default we start with a single community cont
- community
- The id of the community which the algorithm will try to split.
- eigenvector
- Logical constant, whether to include the eigenvector of the modularity matrix in the result.

##### Details

The functions documented in these section implement the
`B`

, which is `B=A-P`

, `A`

being the adjacency matrix of
the (undirected)
network, and `P`

contains the probability that certain edges are
present according to the `P[i,j]`

element of `P`

is the probability that
there is an edge between vertices `i`

and `j`

in a random
network in which the degrees of all vertices are the same as in the
input graph.
The leading eigenvector method works by calculating the eigenvector
of the modularity matrix for the largest positive eigenvalue and
then separating vertices into two community based on the sign of
the corresponding element in the eigenvector. If all elements in
the eigenvector are of the same sign that means that the network
has no underlying comuunity structure.
Check Newman's paper to understand why this is a good method for
detecting community structure.

##### Value

`leading.eigenvector.community`

returns a named list with the following members:- membership

merges The merges matrix starting from the state described by the `membership`

member. This is a two-column matrix and each line describes a merge of two communities, the first line is the first merge and it creates community ,`N`

`N`

is the number of initial communities in the graph, the second line creates community`N+1`

, etc.

##### code

`FALSE`

##### itemize

- membership

##### item

- split
- eigenvector
- eigenvalue

##### References

MEJ Newman: Finding community structure using the eigenvectors of matrices, arXiv:physics/0605087

##### See Also

`modularity`

, `walktrap.community`

,
`edge.betweenness.community`

,
`fastgreedy.community`

,
`as.dendrogram`

##### Examples

```
g <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
g <- add.edges(g, c(0,5, 0,10, 5, 10))
leading.eigenvector.community(g)
lec <- leading.eigenvector.community.step(g)
lec$membership
# Try one more split
leading.eigenvector.community.step(g, fromhere=lec, community=0)
leading.eigenvector.community.step(g, fromhere=lec, community=1)
```

*Documentation reproduced from package igraph, version 0.4.4, License: GPL version 2 or later (June, 1991)*