Generates random deviates from the Kumaraswamy-Kumaraswamy (kkw)
distribution with parameters alpha (\(\alpha\)), beta
(\(\beta\)), delta (\(\delta\)), and lambda (\(\lambda\)).
This distribution is a special case of the Generalized Kumaraswamy (GKw)
distribution where the parameter \(\gamma = 1\).
Arguments
- n
Number of observations. If
length(n) > 1, the length is taken to be the number required. Must be a non-negative integer.- alpha
Shape parameter
alpha> 0. Can be a scalar or a vector. Default: 1.0.- beta
Shape parameter
beta> 0. Can be a scalar or a vector. Default: 1.0.- delta
Shape parameter
delta>= 0. Can be a scalar or a vector. Default: 0.0.- lambda
Shape parameter
lambda> 0. Can be a scalar or a vector. Default: 1.0.
Value
A vector of length n containing random deviates from the kkw
distribution. The length of the result is determined by n and the
recycling rule applied to the parameters (alpha, beta,
delta, lambda). Returns NaN if parameters
are invalid (e.g., alpha <= 0, beta <= 0, delta < 0,
lambda <= 0).
Details
The generation method uses the inverse transform method based on the quantile
function (qkkw). The kkw quantile function is:
$$
Q(p) = \left[ 1 - \left\{ 1 - \left[ 1 - (1 - p)^{1/(\delta+1)} \right]^{1/\lambda} \right\}^{1/\beta} \right]^{1/\alpha}
$$
Random deviates are generated by evaluating \(Q(p)\) where \(p\) is a
random variable following the standard Uniform distribution on (0, 1)
(runif).
This is equivalent to the general method for the GKw distribution
(rgkw) specialized for \(\gamma=1\). The GKw method generates
\(W \sim \mathrm{Beta}(\gamma, \delta+1)\) and then applies transformations.
When \(\gamma=1\), \(W \sim \mathrm{Beta}(1, \delta+1)\), which can be
generated via \(W = 1 - V^{1/(\delta+1)}\) where \(V \sim \mathrm{Unif}(0,1)\).
Substituting this \(W\) into the GKw transformation yields the same result
as evaluating \(Q(1-V)\) above (noting \(p = 1-V\) is also Uniform).
References
Cordeiro, G. M., & de Castro, M. (2011). A new family of generalized distributions. Journal of Statistical Computation and Simulation
Kumaraswamy, P. (1980). A generalized probability density function for double-bounded random processes. Journal of Hydrology, 46(1-2), 79-88.
Devroye, L. (1986). Non-Uniform Random Variate Generation. Springer-Verlag. (General methods for random variate generation).
Examples
# \donttest{
set.seed(2025) # for reproducibility
# Generate 1000 random values from a specific kkw distribution
alpha_par <- 2.0
beta_par <- 3.0
delta_par <- 0.5
lambda_par <- 1.5
x_sample_kkw <- rkkw(1000, alpha = alpha_par, beta = beta_par,
delta = delta_par, lambda = lambda_par)
summary(x_sample_kkw)
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.06135 0.34367 0.46565 0.46855 0.58892 0.88108
# Histogram of generated values compared to theoretical density
hist(x_sample_kkw, breaks = 30, freq = FALSE, # freq=FALSE for density
main = "Histogram of kkw Sample", xlab = "x", ylim = c(0, 3.5))
curve(dkkw(x, alpha = alpha_par, beta = beta_par, delta = delta_par,
lambda = lambda_par),
add = TRUE, col = "red", lwd = 2, n = 201)
legend("topright", legend = "Theoretical PDF", col = "red", lwd = 2, bty = "n")
# Comparing empirical and theoretical quantiles (Q-Q plot)
prob_points <- seq(0.01, 0.99, by = 0.01)
theo_quantiles <- qkkw(prob_points, alpha = alpha_par, beta = beta_par,
delta = delta_par, lambda = lambda_par)
emp_quantiles <- quantile(x_sample_kkw, prob_points, type = 7) # type 7 is default
plot(theo_quantiles, emp_quantiles, pch = 16, cex = 0.8,
main = "Q-Q Plot for kkw Distribution",
xlab = "Theoretical Quantiles", ylab = "Empirical Quantiles (n=1000)")
abline(a = 0, b = 1, col = "blue", lty = 2)
# Compare summary stats with rgkw(..., gamma=1, ...)
# Note: individual values will differ due to randomness
x_sample_gkw <- rgkw(1000, alpha = alpha_par, beta = beta_par, gamma = 1.0,
delta = delta_par, lambda = lambda_par)
print("Summary stats for rkkw sample:")
#> [1] "Summary stats for rkkw sample:"
print(summary(x_sample_kkw))
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.06135 0.34367 0.46565 0.46855 0.58892 0.88108
print("Summary stats for rgkw(gamma=1) sample:")
#> [1] "Summary stats for rgkw(gamma=1) sample:"
print(summary(x_sample_gkw)) # Should be similar
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.04101 0.34241 0.46850 0.46428 0.58476 0.88441
# }