Skip to contents

In this model, each vertex is represented by a latent position vector. Probability of an edge between two vertices are given by the dot product of their latent position vectors.

Usage

sample_dot_product(vecs, directed = FALSE)

dot_product(...)

Arguments

vecs

A numeric matrix in which each latent position vector is a column.

directed

A logical scalar, TRUE if the generated graph should be directed.

...

Passed to sample_dot_product().

Value

An igraph graph object which is the generated random dot product graph.

Details

The dot product of the latent position vectors should be in the [0,1] interval, otherwise a warning is given. For negative dot products, no edges are added; dot products that are larger than one always add an edge.

References

Christine Leigh Myers Nickel: Random dot product graphs, a model for social networks. Dissertation, Johns Hopkins University, Maryland, USA, 2006.

Author

Gabor Csardi csardi.gabor@gmail.com

dot_product_game().

Examples


## A randomly generated  graph
lpvs <- matrix(rnorm(200), 20, 10)
lpvs <- apply(lpvs, 2, function(x) {
  return(abs(x) / sqrt(sum(x^2)))
})
g <- sample_dot_product(lpvs)
g
#> IGRAPH 3de8cc1 U--- 10 32 -- 
#> + edges from 3de8cc1:
#>  [1] 1-- 2 1-- 3 1-- 4 1-- 9 1--10 2-- 3 2-- 5 2-- 7 2-- 8 2--10 3-- 4 3-- 5
#> [13] 3-- 7 3-- 9 3--10 4-- 5 4-- 6 4-- 7 4-- 9 4--10 5-- 6 5-- 7 5--10 6-- 7
#> [25] 6-- 8 6-- 9 6--10 7-- 9 7--10 8-- 9 8--10 9--10

## Sample latent vectors from the surface of the unit sphere
lpvs2 <- sample_sphere_surface(dim = 5, n = 20)
g2 <- sample_dot_product(lpvs2)
g2
#> IGRAPH d76a930 U--- 20 134 -- 
#> + edges from d76a930:
#>  [1]  1-- 3  1-- 4  1-- 5  1-- 7  1-- 9  1--10  1--11  1--12  1--13  1--14
#> [11]  1--15  1--16  1--19  1--20  2-- 5  2-- 6  2-- 9  2--13  2--14  2--15
#> [21]  2--16  2--17  3-- 4  3-- 6  3-- 7  3-- 8  3--10  3--11  3--13  3--14
#> [31]  3--15  3--16  3--17  3--18  3--19  3--20  4-- 5  4-- 7  4-- 8  4-- 9
#> [41]  4--10  4--11  4--12  4--13  4--14  4--15  4--16  4--18  4--19  5-- 7
#> [51]  5-- 8  5-- 9  5--10  5--11  5--12  5--15  5--16  5--17  5--18  6-- 7
#> [61]  6-- 8  6--13  6--14  6--16  6--17  6--18  6--19  6--20  7-- 8  7-- 9
#> [71]  7--12  7--13  7--14  7--16  7--17  7--18  7--19  7--20  8-- 9  8--10
#> [81]  8--11  8--13  8--15  8--16  8--18  8--19  8--20  9--11  9--13  9--15
#> + ... omitted several edges