The S4 generic rmatrix
generates a random matrix from a given object.
Methods are provided to generate matrices with entries drawn from any
given random distribution function, e.g. runif
or
rnorm
.
rmatrix_int
generate an integer matrix, by changing the storage mode of a matrix
generated by rmatrix
. All its arguments are directly passed to rmatrix
.
rmatrix(x, ...)
S4 (numeric)
`rmatrix`(x, y = NULL, dist = runif, byrow = FALSE, dimnames = NULL, ...,
.rng = NULL)
rmatrix_int(...)
rmatrix,numeric
)matrix
NULL
or a list
passed in the internal call to
the function matrix
dist
, or to
rmatrix
in the case of rmatrix_int
.setRNG
.signature(x = "numeric")
: Generates a random matrix of given dimensions, whose entries
are drawn using the distribution function dist
.
This is the workhorse method that is eventually called by all other methods. It returns a matrix with:
x
rows and y
columns if y
is not missing and
not NULL
;
x[1]
x x[2]
if x
has at least two elements;
x
(i.e. a square matrix) otherwise.
The default is to draw its entries from the standard uniform distribution using
the base function runif
, but any other function that generates
random numeric vectors of a given length may be specified in argument dist
.
All arguments in ...
are passed to the function specified in dist
.
The only requirement is that the function in dist
is of the following form:
function(n, ...){ # return vector of length n ... }
This is the case of all base random draw function such as rnorm
,
rgamma
, etc...
signature(x = "ANY")
: Default method which calls rmatrix,vector
on the dimensions of x
that is assumed to be returned by a suitable dim
method:
it is equivalent to rmatrix(dim(x), y=NULL, ...)
.
signature(x = "NMF")
: Returns the target matrix estimate of the NMF model x
, perturbated by
adding a random matrix generated using the default method of rmatrix
:
it is a equivalent to fitted(x) + rmatrix(fitted(x), ...)
.
This method can be used to generate random target matrices that depart from a known NMF model to a controlled extend. This is useful to test the robustness of NMF algorithms to the presence of certain types of noise in the data.
#----------
# rmatrix,numeric-method
#----------
## Generate a random matrix of a given size
rmatrix(5, 3)
## [,1] [,2] [,3]
## [1,] 0.06243016 0.1101419 0.8997295
## [2,] 0.90294478 0.5133422 0.3080472
## [3,] 0.02825208 0.8322932 0.5568540
## [4,] 0.32196286 0.4457090 0.9991947
## [5,] 0.12814938 0.7559115 0.2020942
## Generate a random matrix of the same dimension of a template matrix
a <- matrix(1, 3, 4)
rmatrix(a)
## [,1] [,2] [,3] [,4]
## [1,] 0.5755040 0.1902230 0.5677783 0.3842288
## [2,] 0.4890726 0.8383846 0.3627005 0.5724400
## [3,] 0.2042821 0.8880539 0.2311141 0.5999191
## Specificy the distribution to use
# the default is uniform
a <- rmatrix(1000, 50)
## Not run: hist(a)
# use normal ditribution
a <- rmatrix(1000, 50, rnorm)
## Not run: hist(a)
# extra arguments can be passed to the random variate generation function
a <- rmatrix(1000, 50, rnorm, mean=2, sd=0.5)
## Not run: hist(a)
#----------
# rmatrix,ANY-method
#----------
# random matrix of the same dimension as another matrix
x <- matrix(3,4)
dim(rmatrix(x))
## [1] 4 1
#----------
# rmatrix,NMF-method
#----------
# generate noisy fitted target from an NMF model (the true model)
gr <- as.numeric(mapply(rep, 1:3, 3))
h <- outer(1:3, gr, '==') + 0
x <- rnmf(10, H=h)
y <- rmatrix(x)
## Not run:
##D # show heatmap of the noisy target matrix: block patterns should be clear
##D aheatmap(y)
## End(Not run)
# test NMF algorithm on noisy data
# add some noise to the true model (drawn from uniform [0,1])
res <- nmf(rmatrix(x), 3)
summary(res)
## Length Class Mode
## 1 NMFfit S4
# add more noise to the true model (drawn from uniform [0,10])
res <- nmf(rmatrix(x, max=10), 3)
summary(res)
## Length Class Mode
## 1 NMFfit S4