Learn R Programming

mixtools (version 1.0.4)

flaremixEM: EM Algorithm for Mixtures of Regressions with Flare

Description

Returns output for 2-component mixture of regressions with flaring using an EM algorithm with one step of Newton-Raphson requiring an adaptive barrier for maximization of the objective function. A mixture of regressions with flare occurs when there appears to be a common regression relationship for the data, but the error terms have a mixture structure of one normal component and one exponential component.

Usage

flaremixEM(y, x, lambda = NULL, beta = NULL, sigma = NULL, alpha = NULL, nu = NULL, epsilon = 1e-04, maxit = 10000, verb = FALSE, restart = 50)

Arguments

y
An n-vector of response values.
x
An n-vector of predictor values. An intercept term will be added by default.
lambda
Initial value of mixing proportions. Entries should sum to 1.
beta
Initial value of beta parameters. Should be a 2x2 matrix where the columns correspond to the component.
sigma
A vector of standard deviations.
alpha
A scalar for the exponential component's rate.
nu
A vector specifying the barrier constants to use. The first barrier constant where the algorithm converges is used.
epsilon
The convergence criterion.
maxit
The maximum number of iterations.
verb
If TRUE, then various updates are printed during each iteration of the algorithm.
restart
The number of times to restart the algorithm in case convergence is not attained. The default is 50.

Value

flaremixEM returns a list of class mixEM with items:
x
The set of predictors (which includes a column of 1's).
y
The response values.
posterior
An nx2 matrix of posterior probabilities for observations.
lambda
The final mixing proportions.
beta
The final regression coefficients.
sigma
The final standard deviations.
alpha
The final exponential rate.
loglik
The final log-likelihood.
all.loglik
A vector of each iteration's log-likelihood.
ft
A character vector giving the name of the function.

See Also

regmixEM

Examples

Run this code
## Simulation output.

set.seed(100)
j=1
while(j == 1){
    x1 <- runif(30, 0, 10)
    x2 <- runif(20, 10, 20)
    x3 <- runif(30, 20, 30)
    y1 <- 3+4*x1+rnorm(30, sd = 1)
    y2 <- 3+4*x2+rexp(20, rate = .05)
    y3 <- 3+4*x3+rnorm(30, sd = 1)
    x <- c(x1, x2, x3)
    y <- c(y1, y2, y3)
    nu <- (1:30)/2

    out <- try(flaremixEM(y, x, beta = c(3, 4), nu = nu,
               lambda = c(.75, .25), sigma = 1), silent = TRUE)
    if(class(out) == "try-error"){
        j <- 1
    } else j <- 2
}

out[4:7]
plot(x, y, pch = 19)
abline(out$beta)



Run the code above in your browser using DataLab