create.profile: Calculating the Profile Likelihood

Description Usage Arguments Value Examples

View source: R/create_profile_function.R

Description

Calculating the Profile Likelihood

Usage

1
2
3
4
5
create.profile(which.par, par.names, range, fit.fn, bind.old = FALSE,
  delete.old = FALSE, do.not.fit = NULL, homedir = getwd(),
  optim.runs = 5, random.borders = 1, refit = FALSE,
  save.rel.diff = 0, con.tol = 0.1, control.optim = list(maxit =
  1000), parscale.pars = TRUE, future.off = FALSE, ...)

Arguments

which.par

Name of the parameter that a profile should be obtained for. If multiple profiles are supposed to be calculated, a vector can be passed along as well. Alternatively, supplying "all.par" calculates the profiles for all available parameters.

par.names

A vector containing the names and initial values for all available parameters.

range

A list containing the respective ranges for which the profile should be calculated.

fit.fn

A cost function. Has to take the complete parameter vector as an input (needs to be names parms) and must return the corresponding negative log-likelihood (-2LL, see Burnham and Anderson 2002).

bind.old

Logical. If TRUE, previously calculated values will also be added to the profile if available. Default to FALSE.

delete.old

Logical. If TRUE, the individual point-wise fits created by point.profile will be deleted after using them. Default to FALSE.

do.not.fit

A named vector containing the values of the parameters that should not be fitted. Default to NULL.

homedir

The directory to which the results should be saved to.

optim.runs

The number of times that each model will be fitted by optim. Default to 5.

random.borders

The ranges from which the random initial parameter conditions for all optim.runs larger than one are sampled. Can be either given as a vector containing the relative deviations for all parameters or as a matrix containing in its first column the lower and in its second column the upper border values. Parameters are uniformly sampled based on runif. Default to 1 (100% deviation of all parameters). Alternatively, functions such as rnorm, rchisq, etc. can be used if the additional arguments are passed along as well.

refit

If TRUE, previously fitted ranges will be fitted again and results will be overwritten according to the value set in save.rel.diff. Default to FALSE. Works only if delete.old is set to FALSE.

save.rel.diff

A numeric value indicating a relative threshold when to overwrite a pre-existing result. Default to 0, which means that results get overwritten if an improvement is made.

con.tol

The absolute convergence tolerance of each fitting run (see Details). Default is set to 0.1.

control.optim

Control parameters passed along to optim. For more details, see optim.

parscale.pars

Logical. If TRUE (default), the parscale option will be used when fitting with optim. This is helpful, if the parameter values are on different scales.

future.off

Logical. If TRUE, future will not be used to calculate the results. Default to FALSE.

...

Additional parameters that can be passed along to future or fit.fn.

Value

A list containing the respective profile values for every specified parameter.

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
#create data with standard deviation of 1
x.values <- 1:7
y.values <-  9 * x.values^2 - exp(2 * x.values)
sd.y.values <- rep(1,7)

#define initial parameter values
inits <- c(p1 = 3, p2 = 4, p3 = -2, p4 = 2, p5 = 0)

#define cost function that returns the negative log-likelihood
cost_function <- function(parms, x.vals, y.vals, sd.y){
  # restrict the search range to -5 to +5
  if(max(abs(parms)) > 5){
    return(NA)
  }
  with(as.list(c(parms)), {
    res <- p1*4 + p2*x.vals + p3^2*x.vals^2 + p4*sin(x.vals)  - exp(p5*x.vals)
    diff <- sum((res - y.vals)^2/sd.y)
  })
}

#perform model selection
res <- create.profile(which.par = "all.par",
                      par.names = inits,
                      range = list(seq(0, 2, 0.1),
                                 seq(0, 5, 1),
                                 seq(2.9, 3.1, 0.01),
                                 seq(0, 3, 0.1),
                                 seq(1.999999, 2.000001, 0.0000001)),
                      fit.fn = cost_function,
                      optim.runs = 1,
                      delete.old = TRUE,
                      x.vals = x.values,
                      y.vals = y.values,
                      sd.y = sd.y.values)

GabelHub/ProfileIroning documentation built on May 17, 2019, 12:49 p.m.