Create random distribution
create_random_distribution.RdThis function does the same thing as kwb.utils::create_random_distribution(), but it is bundled with ambre to avoid a hard dependency on the unmaintained package.
Usage
create_random_distribution(
type = "uniform",
number_of_repeatings = 1,
number_of_events = 365,
value = 10,
min = 10,
max = 1000,
percent_within_minmax = 0.9,
min_zero = 0.01,
log10_min = default_min(min, max, min_zero, f = log10),
log10_max = default_max(max, min_zero * 10, f = log10),
log10_mean = (log10_min + log10_max)/2,
log10_sdev = abs((log10_max - log10_mean)/get_percentile(percent_within_minmax)),
mean = (default_min(min, max, min_zero) + default_max(max, 10 * min_zero))/2,
sdev = abs((default_max(max, 10 * min_zero) -
mean)/get_percentile(percent_within_minmax)),
meanlog = mean(log(default_min(min, max, min_zero) + default_max(max, 10 *
min_zero))/2),
sdlog = abs(sd(c(default_min(min, max, min_zero, f = log), default_max(max, 10 *
min_zero, f = log)))),
mode = (default_min(min, max, min_zero) + default_max(max, 10 * min_zero))/2,
debug = TRUE
)Arguments
- type
"uniform" calls runif(), "log10_uniform" calls 10^runif(number_of_events, log10_min, log10_max), "triangle" calls EnvStats::rtri(), "lognorm" calls rlnorm(), "norm" calls rnorm() and "log10_norm" calls 10^rnorm(number_of_events, mean = log10_mean, sdev = log10_sdev), (default: "uniform")
- number_of_repeatings
how often should the random distribution with the same parameters be generated (default: 1)
- number_of_events
number of events
- value
constant value (no random number), gets repeated number_of_events times (if 'type' = 'value')
- min
minimum value (default: 10), only used if 'type' is "runif" or "triangle"
- max
maximum value (default: 1000), only used if 'type' is "runif" or "triangle"
- percent_within_minmax
percent of data point within min/max (default: 0.9 i.e. 90 percent
- min_zero
only used if 'type' is "log10_uniform" or "log10_norm", "norm" or "lognorm" and "min" value equal zero. In this case the zero is replaced by this value (default: 0.01), see also
default_min()- log10_min
minimum value (default: default_min(min, max, min_zero, f = log10)), only used if 'type' is "log10_uniform" or "log10_norm"
- log10_max
maximum value (default: ifelse(max > 0, log10(max), log10_zero_threshold), only used if 'type' is "log10_uniform" or "log10_norm"
- log10_mean
mean value (default: (log10_min + log10_max)/2), only used if 'type' is "log10_norm"
- log10_sdev
standard deviation (default: abs((log10_max- log10_mean) / get_percentile(0.95)), only used if 'type' is "log10_norm"
- mean
mean value (default: (default_min(min, max, min_zero) / default_max(max, 10*min_zero)) / 2), only used if 'type' is "norm"
- sdev
standard deviation (default: abs((default_max(max, 10*min_zero) - mean) / get_percentile(0.95))), only used if 'type' is "norm"
- meanlog
log mean value (default: mean(log((min + max) / 2))), only used if 'type' is "lognorm"
- sdlog
standard deviation (default: abs(sd(c(default_min(min, max, min_zero, f = log)))) ), only used if 'type' is "lognorm"
- mode
(default: default_min(min, max, min_zero) + default_max(max, 10 * min_zero) / 2), only used if 'type' is "triangle"
- debug
print debug information (default: TRUE)
References
Sonnenberg H (2024). kwb.utils: General Utility Functions Developed at KWB. R package version 0.15.0 URL: https://github.com/kwb-r/kwb.utils (MIT Licence)
Examples
# Example usage of create_random_distribution
# Uniform distribution
uniform_dist <- create_random_distribution(
type = "uniform",
number_of_repeatings = 2,
number_of_events = 10,
min = 0,
max = 100
)
#> Create 2 random distribution(s): uniform (n: 10, min: 0.000000, max: 100.000000)
# Log10 uniform distribution
log10_uniform_dist <- create_random_distribution(
type = "log10_uniform",
number_of_events = 10,
min = 1,
max = 1000
)
#> Create 1 random distribution(s): 10^runif (n: 10, min: 0.000000, max: 3.000000)
# Triangle distribution
triangle_dist <- create_random_distribution(
type = "triangle",
number_of_events = 10,
min = 0,
max = 100,
mode = 50
)
#> Create 1 random distribution(s): triangle (n: 10, min: 0.000000, max: 100.000000, mode = 50.000000)
# Normal distribution
norm_dist <- create_random_distribution(
type = "norm",
number_of_events = 10,
mean = 50,
sdev = 10
)
#> Create 1 random distribution(s): norm (n: 10, mean: 50.000000, sd: 10.000000)
# Log10 normal distribution
log10_norm_dist <- create_random_distribution(
type = "log10_norm",
number_of_events = 10,
log10_mean = 2,
log10_sdev = 0.5
)
#> Create 1 random distribution(s): 10^rnorm (n: 10, mean: 2.000000, sd: 0.500000)
# Lognormal distribution
lognorm_dist <- create_random_distribution(
type = "lognorm",
number_of_events = 10,
meanlog = 2,
sdlog = 0.5
)
#> Create 1 random distribution(s): lognorm (n: 10, meanlog: 2.000000, sdlog: 0.500000)
# Constant value
value_dist <- create_random_distribution(
type = "value",
number_of_events = 10,
value = 42
)
#> Replicate 10 times constant value 42.000000