likeli_4_optim: Use Likelihood with Optim

View source: R/likeli_4_optim.R

likeli_4_optimR Documentation

Use Likelihood with Optim

Description

Wraps the function likeli so you can use it with optim. This allows you to use other optimization methods to find maximum likelihood estimates.

Usage

likeli_4_optim(par_2_analyze, model, par_names, var, source_data, pdf)

Arguments

par_2_analyze

Vector of initial values for those parameters that are to be optimized. This should be a vector, NOT a list. This MUST be a one-dimensional vector - i.e. none of the vector members can be vectors themselves (in contrast to the rules for anneal). optim will pass this argument to likeli_4_optim automatically. See the example for more.

model

Model function for which to calculate likelihood.

par_names

Character vector with the name for each value in par_2_analyze.

var

List object with the source for all other non-parameter arguments and data used by the model, the PDF, and any sub-functions. This is the same as the argument that you pass to anneal or likeli.

source_data

Data frame containing any needed source data, including observed values.

pdf

Probability density function to use. If you want a log likelihood value, which is usual, the PDF must calculate the log of its result.

Details

This wraps the likeli function so that it can conform to the requirements of optim. Setting up to use this function is exactly like setting up to use likeli.

Remember to set the fnscale option in the control list for optim to -1 so that optim performs a maximization rather than the default minimization (see example for details).

Value

A single numeric value for the likelihood. It is possible for this to be NAN or Inf.

Examples

#################
## Set up for likeli
#################
## Use the included crown_rad dataset
data(crown_rad)

## Create our model function - crown radius is a linear function of DBH.
## DBH is a column of data from the crown_rad dataset; a and b are single
## parameter values.
model <- function (a, b, DBH) {a + b * DBH}

## We are planning to get maximum likelihood estimates for a and b.  Create
## the list that says where all other functions and data are to be found.
## Indicate that DBH comes from the column marked "DBH" in the crown_rad dataset.
var<-list(DBH = "DBH")

## We'll use the normal probability density function dnorm - add its
## arguments to our parameter list
## "x" value in PDF is observed value
var$x <- "Radius"

## The mean is the predicted value, the outcome of the model statement. Use
## the reserved word "predicted"
var$mean <- "predicted"
var$sd <- 1.0

## Have dnorm calculate log likelihood
var$log <- TRUE

## Set up a vector with initial values for a and b
par_2_analyze <- c(0.1, 0.1)

## Set up the vector with the names of a and b, so likeli_4_optim knows
## what the values in for_optim are
par_names <- c("a", "b")

## Set your choice of optim controls - pass the other likeli_4_optim arguments
## by name so optim knows they are for likeli_4_optim
## Remember to set the fnscale option of optim to a negative value to perform
## a maximization rather than a minimization

## Not run: optim(par_2_analyze, likeli_4_optim, method = "Nelder-Mead",
  control = list(fnscale = -1), model = model, par_names = par_names,
  var = var, source_data = crown_rad, pdf = dnorm)
## End(Not run)

likelihood documentation built on March 31, 2023, 9:02 p.m.