Title: | Generate Random Vectors Whose Components Sum Up to One |
Description: | A single method implementing multiple approaches to generate pseudo-random vectors whose components sum up to one (see, e.g., Maziero (2015) <doi:10.1007/s13538-015-0337-8>). The components of such vectors can for example be used for weighting objectives when reducing multi-objective optimisation problems to a single-objective problem in the socalled weighted sum scalarisation approach. |
Version: | 1.0.0 |
Depends: | R (≥ 3.1.0) |
Imports: | Rcpp, checkmate |
Suggests: | covr, testthat, scatterplot3d |
License: | BSD_2_clause + file LICENSE |
URL: | https://jakobbossek.github.io/rrandvec/, https://github.com/jakobbossek/rrandvec |
BugReports: | https://github.com/jakobbossek/rrandvec/issues |
Encoding: | UTF-8 |
ByteCompile: | true |
RoxygenNote: | 7.2.3 |
LinkingTo: | Rcpp |
NeedsCompilation: | yes |
Packaged: | 2023-03-29 15:42:20 UTC; bossek |
Author: | Jakob Bossek |
Maintainer: | Jakob Bossek <j.bossek@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2023-03-30 07:10:02 UTC |
Generate random vectors that sum up to one.
Description
Generate an n \times d
matrix. Each row vector is a
probability vector (p_1, \ldots, p_d)
with \sum_{i=1}^{d} p_i = 1
.
The function offers several methods to generate the rows in a way that the
components are unbiased which means that they are required to have similar /
the same probability distributions.
[1] Maziero, J. Generating Pseudo-Random Discrete Probability Distributions. Brazilian Journal of Physics 45, 377–382 (2015). https://doi.org/10.1007/s13538-015-0337-8
[2] Grimme, C. Picking a Uniformly Random Point from an Arbitrary Simplex. Technical Report. https://doi.org/10.13140/RG.2.1.3807.6968
Usage
rrandvec(n, d, method = "normalization", shuffle = FALSE, as.df = FALSE)
Arguments
n |
[ |
d |
[ |
method |
[ |
shuffle |
[ |
as.df |
[ |
Value
[matrix(n, d)
] (n \times d)
matrix even if n=1
.
Examples
R = rrandvec(1000, 2)
R = rrandvec(1000, 5, method ="iterative")
R = rrandvec(1000, 3, method = "trigonometric", shuffle = TRUE, as.df = TRUE)
if (require("scatterplot3d")) {
scatterplot3d::scatterplot3d(R, angle = 120, cex.symbols = 0.5, pch = 3, color = "blue")
}