RtoDat: Converting 'rMix' to 'datMix' Objects

Description Usage Arguments Value See Also Examples

View source: R/0_Mix_utils.R

Description

Function for converting objects of class rMix to objects of class datMix, so that they could be passed to functions estimating the mixture complexity.

Usage

1
2
RtoDat(obj, theta.bound.list = NULL, MLE.function = NULL, Hankel.method = NULL,
       Hankel.function = NULL)

Arguments

obj

object of class rMix.

theta.bound.list

named list specifying the upper and lower bounds for the component parameters. The names of the list elements have to match the names of the formal arguments of the functions ddist and rdist exactly as specified in the distributions in distributions. For a gaussian mixture, the list elements would have to be named mean and sd, as these are the formal arguments used by rnorm and dnorm. Has to be supplied if a method that estimates the component weights and parameters is to be used.

MLE.function

function (or a list of functions) which takes the data as input and outputs the maximum likelihood estimator for the parameter(s) the component distribution dist. If the component distribution has more than one parameter, a list of functions has to be supplied and the order of the MLE functions has to match the order of the component parameters in theta.bound.list (e.g. for a normal mixture, if the first entry of theta.bound.list is the bounds of the mean, then then first entry of MLE.function has to be the MLE of the mean). If this argument is supplied and the datMix object is handed over to a complexity estimation procedure relying on optimizing over a likelihood function, the MLE.function attribute will be used for the single component case. In case the objective function is neither a likelihood nor corresponds to a mixture with more than 1 component, numerical optimization will be used based on Rsolnp's function solnp, but MLE.function will be used to calculate the initial values passed to solnp. Specifying MLE.function is optional. If not supplied, for example because the MLE solution does not exist in a closed form, numerical optimization is used to find the relevant MLE.

Hankel.method

character string in c("explicit", "translation", "scale"), specifying the method of estimating the moments of the mixing distribution used to calculate the relevant Hankel matrix. Has to be specified when using nonparamHankel, paramHankel or paramHankel.scaled. For further details see the details section of datMix.

Hankel.function

function required for the moment estimation via Hankel.method. This normally depends on Hankel.method as well as dist. For further details see the datMix details section.

Value

Object of class datMix with the following attributes (for further explanations see above):

dist

character string giving the abbreviated name of the component distribution, such that the function ddist evaluates its density/mass and rdist generates random variates.

discrete

logical flag indicating whether the mixture distribution is discrete.

theta.bound.list

named list specifying the upper and lower bounds for the component parameters.

MLE.function

function which computes the MLE of the component distribution dist.

Hankel.method

character string taking on values "explicit", "translation", or "scale", specifying the method of estimating the moments of the mixing distribution to compute the corresponding Hankel matrix.

Hankel.function

function required for the moment estimation via Hankel.method. See details for more information.

See Also

datMix for direct generation of a datMix object from a vector of observations.

Examples

 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
### generating 'Mix' object
normLocMix <- Mix("norm", discrete = FALSE, w = c(0.3, 0.4, 0.3), mean = c(10, 13, 17),
                  sd = c(1, 1, 1))

### generating 'rMix' from 'Mix' object (with 1000 observations)
set.seed(1)
normLocRMix <- rMix(1000, normLocMix)

### generating 'datMix' from 'R' object

## generate list of parameter bounds

norm.bound.list <- vector(mode = "list", length = 2)
names(norm.bound.list) <- c("mean", "sd")
norm.bound.list$mean <- c(-Inf, Inf)
norm.bound.list$sd <- c(0, Inf)

## generate MLE functions

# for "mean"
MLE.norm.mean <- function(dat) mean(dat)
# for "sd" (the sd function uses (n-1) as denominator)
MLE.norm.sd <- function(dat){
  sqrt((length(dat) - 1) / length(dat)) * sd(dat)
}
# combining the functions to a list
MLE.norm.list <- list("MLE.norm.mean" = MLE.norm.mean,
                      "MLE.norm.sd" = MLE.norm.sd)

## function giving the j^th raw moment of the standard normal distribution,
## needed for calculation of the Hankel matrix via the "translation" method
## (assuming gaussian components with variance 1)

mom.std.norm <- function(j){
 ifelse(j %% 2 == 0, prod(seq(1, j - 1, by = 2)), 0)
}

normLoc.dM <- RtoDat(normLocRMix, theta.bound.list = norm.bound.list,
                     MLE.function = MLE.norm.list, Hankel.method = "translation",
                     Hankel.function = mom.std.norm)

### using 'datMix' object to estimate the mixture

set.seed(0)
res <- paramHankel.scaled(normLoc.dM)
plot(res)

mixComp documentation built on Feb. 25, 2021, 5:07 p.m.