sample_sparse {fastRG} | R Documentation |
Sample a random dot product graph as a sparse Matrix
Description
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.
Usage
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, ...)
Arguments
factor_model |
|
... |
Ignored. Do not use. |
Details
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.
Value
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.
References
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
See Also
Other samplers:
sample_edgelist.matrix()
,
sample_edgelist()
,
sample_igraph()
,
sample_tidygraph()
Examples
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)