| sample_sparse | R Documentation |
There are two steps to using the fastRG package. First,
you must parameterize a random dot product graph by
sampling the latent factors. Use functions such as
dcsbm(), sbm(), etc, to perform this specification.
Then, use sample_*() functions to generate a random graph
in your preferred format.
sample_sparse(factor_model, ...) ## S3 method for class 'undirected_factor_model' sample_sparse(factor_model, ...) ## S3 method for class 'directed_factor_model' sample_sparse(factor_model, ...)
factor_model |
A |
... |
Ignored. Do not use. |
This function implements the fastRG algorithm as
described in Rohe et al (2017). Please see the paper
(which is short and open access!!) for details.
For undirected factor models, a sparse
Matrix::Matrix() of class dsCMatrix. In particular,
this means the Matrix object (1) has
double data type, (2) is symmetric, and (3) is in
column compressed storage format.
For directed factor models, a sparse
Matrix::Matrix() of class dgCMatrix. This means
the Matrix object (1) has double data type,
(2) in not symmetric, and (3) is in column
compressed storage format.
To reiterate: for undirected graphs, you will get a symmetric matrix. For directed graphs, you will get a general sparse matrix.
Rohe, Karl, Jun Tao, Xintian Han, and Norbert Binkiewicz. 2017. "A Note on Quickly Sampling a Sparse Matrix with Low Rank Expectation." Journal of Machine Learning Research; 19(77):1-13, 2018. https://www.jmlr.org/papers/v19/17-128.html
Other samplers:
sample_edgelist.matrix(),
sample_edgelist(),
sample_igraph(),
sample_tidygraph()
library(igraph) library(tidygraph) set.seed(27) ##### undirected examples ---------------------------- n <- 100 k <- 5 X <- matrix(rpois(n = n * k, 1), nrow = n) S <- matrix(runif(n = k * k, 0, .1), nrow = k) # S will be symmetrized internal here, or left unchanged if # it is already symmetric ufm <- undirected_factor_model( X, S, expected_density = 0.1 ) ufm ### sampling graphs as edgelists ---------------------- edgelist <- sample_edgelist(ufm) edgelist ### sampling graphs as sparse matrices ---------------- A <- sample_sparse(ufm) inherits(A, "dsCMatrix") isSymmetric(A) dim(A) B <- sample_sparse(ufm) inherits(B, "dsCMatrix") isSymmetric(B) dim(B) ### sampling graphs as igraph graphs ------------------ sample_igraph(ufm) ### sampling graphs as tidygraph graphs --------------- sample_tidygraph(ufm) ##### directed examples ---------------------------- n2 <- 100 k1 <- 5 k2 <- 3 d <- 50 X <- matrix(rpois(n = n2 * k1, 1), nrow = n2) S <- matrix(runif(n = k1 * k2, 0, .1), nrow = k1, ncol = k2) Y <- matrix(rexp(n = k2 * d, 1), nrow = d) fm <- directed_factor_model(X, S, Y, expected_in_degree = 2) fm ### sampling graphs as edgelists ---------------------- edgelist2 <- sample_edgelist(fm) edgelist2 ### sampling graphs as sparse matrices ---------------- A2 <- sample_sparse(fm) inherits(A2, "dgCMatrix") isSymmetric(A2) dim(A2) B2 <- sample_sparse(fm) inherits(B2, "dgCMatrix") isSymmetric(B2) dim(B2) ### sampling graphs as igraph graphs ------------------ # since the number of rows and the number of columns # in `fm` differ, we will get a bipartite igraph here # creating the bipartite igraph is slow relative to other # sampling -- if this is a blocker for # you please open an issue and we can investigate speedups dig <- sample_igraph(fm) is_bipartite(dig) ### sampling graphs as tidygraph graphs --------------- sample_tidygraph(fm)