Description Usage Arguments Value Overview of Simulation Process Reasons for Function Errors References See Also Examples

This function simulates one continuous mixture variable. Mixture distributions describe random variables that
are drawn from more than one component distribution. For a random variable *Y_{mix}* from a finite continuous mixture
distribution with *k* components, the probability density function (PDF) can be described by:

*h_Y(y) = ∑_{i=1}^{k} π_i f_{Yi}(y), ∑_{i=1}^{k} π_i = 1.*

The *π_i* are mixing parameters which determine the weight of each component distribution *f_{Yi}(y)* in the overall
probability distribution. As long as each component has a valid PDF, the overall distribution *h_Y(y)* has a valid PDF.
The main assumption is statistical independence between the process of randomly selecting the component distribution and the
distributions themselves. Each component *Y_i* is generated using either Fleishman's third-order (`method`

= "Fleishman",
doi: 10.1007/BF02293811) or Headrick's fifth-order (`method`

= "Polynomial",
doi: 10.1016/S0167-9473(02)00072-5) power method transformation (PMT). It works by matching standardized
cumulants – the first four (mean, variance, skew, and standardized kurtosis) for Fleishman's method, or the first six (mean,
variance, skew, standardized kurtosis, and standardized fifth and sixth cumulants) for Headrick's method. The transformation is
expressed as follows:

*Y = c_0 + c_1 * Z + c_2 * Z^2 + c_3 * Z^3 + c_4 * Z^4 + c_5 * Z^5, Z \sim N(0,1),*

where *c_4* and *c_5* both equal *0* for Fleishman's method. The real constants are calculated by

`find_constants`

. These components are then transformed to the desired mixture variable using a
random multinomial variable generated based on the mixing probabilities. There are no parameter input checks in order to decrease
simulation time. All inputs should be checked prior to simulation with `validpar`

. Summaries for the
simulation results can be obtained with `summary_var`

.

Mixture distributions provide a useful way for describing heterogeneity in a population, especially when an outcome is a
composite response from multiple sources. The vignette **Variable Types** provides more information about simulation of mixture
variables and the required parameters. The vignette **Expected Cumulants and Correlations for Continuous Mixture Variables**
gives the equations for the expected cumulants of a mixture variable. In addition, Headrick & Kowalchuk (2007,
doi: 10.1080/10629360600605065) outlined a general method for comparing a simulated distribution *Y* to a given theoretical
distribution *Y^**. These steps can be found in the **Continuous Mixture Distributions** vignette.

1 2 3 4 5 |

`n` |
the sample size (i.e. the length of the simulated variable; default = 10000) |

`method` |
the method used to generate the component variables. "Fleishman" uses Fleishman's third-order polynomial transformation and "Polynomial" uses Headrick's fifth-order transformation. |

`means` |
mean for the mixture variable (default = 0) |

`vars` |
variance for the mixture variable (default = 1) |

`mix_pis` |
a vector of mixing probabilities that sum to 1 for the component distributions |

`mix_mus` |
a vector of means for the component distributions |

`mix_sigmas` |
a vector of standard deviations for the component distributions |

`mix_skews` |
a vector of skew values for the component distributions |

`mix_skurts` |
a vector of standardized kurtoses for the component distributions |

`mix_fifths` |
a vector of standardized fifth cumulants for the component distributions; keep NULL if using |

`mix_sixths` |
a vector of standardized sixth cumulants for the component distributions; keep NULL if using |

`mix_Six` |
a list of vectors of sixth cumulant correction values for the component distributions of |

`seed` |
the seed value for random number generation (default = 1234) |

`cstart` |
a list of length equal to the total number of mixture components containing initial values for root-solving
algorithm used in |

`quiet` |
if FALSE prints total simulation time |

A list with the following components:

`constants`

a data.frame of the constants

`Y_comp`

a data.frame of the components of the mixture variable

`Y_mix`

a data.frame of the generated mixture variable

`sixth_correction`

the sixth cumulant correction values for `Y_comp`

`valid.pdf`

"TRUE" if constants generate a valid PDF, else "FALSE"

`Time`

the total simulation time in minutes

1) A check is performed to see if any distributions are repeated within the parameter inputs, i.e. if the mixture variable contains 2 components with the same standardized cumulants. These are noted so that the constants are only calculated once.

2) The constants are calculated for each component variable using `find_constants`

. If no
solutions are found that generate a valid power method PDF, the function will return constants that produce an invalid PDF
(or a stop error if no solutions can be found). Possible solutions include: 1) changing the seed, or 2) using a `mix_Six`

list with vectors of sixth cumulant correction values (if `method`

= "Polynomial"). Errors regarding constant
calculation are the most probable cause of function failure.

3) A matrix `X_cont`

of dim `n x length(mix_pis)`

of standard normal variables is generated and singular-value decomposition is done to
remove any correlation. The `constants`

are applied to `X_cont`

to create the component variables `Y`

with the desired distributions.

4) A random multinomial variable `M = rmultinom(n, size = 1, prob = mix_pis)`

is generated using `stats::rmultinom`

.
The continuous mixture variable `Y_mix`

is created from the component variables `Y`

based on this multinomial variable.
That is, if `M[i, k_i] = 1`

, then `Y_mix[i] = Y[i, k_i]`

. A location-scale transformation is done on `Y_mix`

to give it mean `means`

and variance `vars`

.

1) The most likely cause for function errors is that no solutions to `fleish`

or
`poly`

converged when using `find_constants`

. If this happens,
the simulation will stop. It may help to first use `find_constants`

for each component variable to
determine if a sixth cumulant correction value is needed. The solutions can be used as starting values (see `cstart`

below).
If the standardized cumulants are obtained from `calc_theory`

, the user may need to use rounded values as inputs (i.e.
`skews = round(skews, 8)`

). For example, in order to ensure that skew is exactly 0 for symmetric distributions.

2) The kurtosis may be outside the region of possible values. There is an associated lower boundary for kurtosis associated
with a given skew (for Fleishman's method) or skew and fifth and sixth cumulants (for Headrick's method). Use
`calc_lower_skurt`

to determine the boundary for a given set of cumulants.

See references for `SimCorrMix`

.

`find_constants`

, `validpar`

, `summary_var`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ```
# Mixture of Normal(-2, 1) and Normal(2, 1)
Nmix <- contmixvar1(n = 1000, "Polynomial", means = 0, vars = 1,
mix_pis = c(0.4, 0.6), mix_mus = c(-2, 2), mix_sigmas = c(1, 1),
mix_skews = c(0, 0), mix_skurts = c(0, 0), mix_fifths = c(0, 0),
mix_sixths = c(0, 0))
## Not run:
# Mixture of Beta(6, 3), Beta(4, 1.5), and Beta(10, 20)
Stcum1 <- calc_theory("Beta", c(6, 3))
Stcum2 <- calc_theory("Beta", c(4, 1.5))
Stcum3 <- calc_theory("Beta", c(10, 20))
mix_pis <- c(0.5, 0.2, 0.3)
mix_mus <- c(Stcum1[1], Stcum2[1], Stcum3[1])
mix_sigmas <- c(Stcum1[2], Stcum2[2], Stcum3[2])
mix_skews <- c(Stcum1[3], Stcum2[3], Stcum3[3])
mix_skurts <- c(Stcum1[4], Stcum2[4], Stcum3[4])
mix_fifths <- c(Stcum1[5], Stcum2[5], Stcum3[5])
mix_sixths <- c(Stcum1[6], Stcum2[6], Stcum3[6])
mix_Six <- list(seq(0.01, 10, 0.01), c(0.01, 0.02, 0.03),
seq(0.01, 10, 0.01))
Bstcum <- calc_mixmoments(mix_pis, mix_mus, mix_sigmas, mix_skews,
mix_skurts, mix_fifths, mix_sixths)
Bmix <- contmixvar1(n = 10000, "Polynomial", Bstcum[1], Bstcum[2]^2,
mix_pis, mix_mus, mix_sigmas, mix_skews, mix_skurts, mix_fifths,
mix_sixths, mix_Six)
Bsum <- summary_var(Y_comp = Bmix$Y_comp, Y_mix = Bmix$Y_mix, means = means,
vars = vars, mix_pis = mix_pis, mix_mus = mix_mus,
mix_sigmas = mix_sigmas, mix_skews = mix_skews, mix_skurts = mix_skurts,
mix_fifths = mix_fifths, mix_sixths = mix_sixths)
## End(Not run)
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.