                     Locfit, Matlab 2.01
                     http://locfit.herine.net/

                        April  2, 2007



Attaching:

Make sure that you've added this directory recursively (i.e. with
all subdirectories) to your matlab search path.

Basic usage:

(1) To plot of a smooth curve:
   load ethanol;         % load the dataset.
   fit = locfit(E,NOx)   % local regression, with x,y vectors.
   lfplot(fit)           % plot the fitted curve.

(2a) To evaluate smooth at a specified set of points:
  load ethanol;
  xev = [0.6 0.7 0.8 0.9]';   % note column vector.
  fit = locfit(E,NOx,'ev',xev);
  yhat = predict(fit)

(2b) Fit and interpolate approximation; may be faster for large datasets.
  load ethanol;
  xev = [0.6 0.7 0.8 0.9]';   % note column vector.
  fit = locfit(E,NOx);
  yhat = predict(fit,xev)

(3) Surface smoothing - give matrix as first input.
   load ethanol;             % load the dataset.
   fit = locfit([E C],NOx)   % local regression.
   lfplot(fit)


Most of the arguments to the S (and R) locfit() function, described
in my book, will also work in the Matlab version. E.g,
fit = locfit(E,NOx,'deg',1,'kern','gauss')
       % local linear fit with the gaussian kernel.
Smoothing parameters can be set with 'nn' and 'h', instead of the
alpha vector used in my book. So
fit = locfit(E,NOx,'alpha',[0 0.2])
fit = locfit(E,NOx,'h',0.2)
are equivalent ways to specify a constant bandwidth h=0.2.


The Book subdirectory contains functions to reproduce most of the book
figures. Run them, and look at the source code (many around 5 lines or less)
for more examples.


Some differences with the S/R version (and book documentation).
(1) Minor renaming of functions, mainly because matlab doesn't have
    S-style methods. e.g. lfplot() instead of plot() or plot.locfit().
(2) Use lfband() to add confidence bands to a plot.
(3) Functions such as aicplot(), gcvplot() sensitive to order of
    arguments. Smoothing parameter matrix must be given first.
(4) For 2-d predictors, lfplot() defaults to producing a surface, rather
    than contour, plot.
(5) The predict() function has an optional 'direct' argument, which
    causes the fit to be recomputed at each evaluation point, rather
    than interpolation of existing points.
(6) A few things aren't implemented yet...


Technical stuff. Here's the layout of the structure returned by
the locfit() function. The first three components (data, evaluation
structure and smoothing parameters) are what you provide, or default
values. The last two (fit points, parametric component) are what
locfit computes.  The expected size or format of the entry is 
given in parentheses.


fit.data.x (n*d)
fit.data.y (n*1)
fit.data.weights (n*1 or 1*1)
fit.data.censor (n*1 or 1*1)
fit.data.baseline (n*1 or 1*1)
fit.data.style (string length d)
fit.data.scales (1*d)
fit.data.xlim (2*d)

fit.evaluation_structure.type (string)
fit.evaluation_structure.module (string)
fit.evaluation_structure.lower_left (numeric 1*d)
fit.evaluation_structure.upper_right (numeric 1*d)
fit.evaluation_structure.grid (numeric 1*d)
fit.evaluation_structure.cut (numeric 1*d)
fit.evaluation_structure.maxk
fit.evaluation_structure.derivative

fit.smoothing_parameters.alpha = (nn h pen) vector
fit.smoothing_parameters.adaptive_criterion (string)
fit.smoothing_parameters.degree (numeric)
fit.smoothing_parameters.family (string)
fit.smoothing_parameters.link (string)
fit.smoothing_parameters.kernel (string)
fit.smoothing_parameters.kernel_type (string)
fit.smoothing_parameters.deren 
fit.smoothing_parameters.deit
fit.smoothing_parameters.demint
fit.smoothing_parameters.debug

fit.fit_points.evaluation_points (d*nv matrix)
fit.fit_points.fitted_values (matrix, nv rows, many columns)
fit.fit_points.evaluation_vectors
fit.fit_points.fit_limits (d*2 matrix)
fit.fit_points.family_link (numeric values)
fit.fit_points.kappa (likelihood, degrees of freedom, etc)

fit.parametric_component





This was the OLD format:

+-{1} data
|   +-{1} xdata matrix (n*d)
|   +-{2} ydata column vector (n*1)
|   +-{3} wdata weight vector (n*1 or 1*1)
|   +-{4} cdata censoring vector (n*1 or 1*1)
|   +-{5} base  baseline vector (n*1 or 1*1)
|   +-{6} style vector (string length d)
|   +-{7} scales vector (1*d)
|   +-{8} xl xlim vector (2*d)
|
+-{2} evaluation structure
|   +-{1} structure type (string)
|   +-{2} module (string)
|   +-{3} ll corner of bounding box (numeric 1*d)
|   +-{4} ur corner of bounding box (numeric 1*d)
|   +-{5} mg vector for grid (numeric 1*d)
|   +-{6} cut parameter for adaptive structures (numeric 1*d)
|   +-{7} maxk memory control parameter
|   +-{8} derivative vector
|
+-{3} sp smoothing parameters
|   +-{1} alpha = (nn h pen) vector
|   +-{2} adaptive criterion (string)
|   +-{3} local polynomial degree (numeric)
|   +-{4} fitting family (string)
|   +-{5} link (string)
|   +-{6} kernel (string)
|   +-{7} kernel type - product, spherical (string)
|
+-{4} fpc fit points
|   +-{1} evaluation points, d*nv matrix.
|   +-{2} fitted values etc, (matrix, nv rows, many columns)
|   +-{3} cell of vectors generated by evaluation structure.
|   |   +-{1} ce integer vector.
|   |   +-{2} s  integer vector.
|   |   +-{3} lo integer vector.
|   |   +-{4} hi integer vector.
|   |
|   +-{4} fit limits (d*2 matrix)
|   +-{5} [family link] (numeric values)
|   +-{6} 'kappa' vector. (likelihood, degrees of freedom, etc)
|
+-{5} parametric component vector.
