


Smoothing noisy data using Local Regression and Likelihood.
arguments still to add: dc maxit
Usage: fit = locfit(x,y) % local regression fit of x and y.
fit = locfit(x) % density estimation of x.
Smoothing with locfit is a two-step procedure. The locfit()
function evaluates the local regression smooth at a set of points
(can be specified through an evaluation structure). Then, use
the predict() function to interpolate this fit to other points.
Additional arguments to locfit() are specified as 'name',value pairs, e.g.:
locfit( x, 'alpha',[0.7,1.5] , 'family','rate' , 'ev','grid' , 'mg',100 );
Data-related inputs:
x is a vector or matrix of the independent (or predictor) variables.
Rows of x represent subjects, columns represent variables.
Generally, local regression would be used with 1-4 independent
variables. In higher dimensions, the curse-of-dimensionality,
as well as the difficulty of visualizing higher dimensional
surfaces, may limit usefulness.
y is the column vector of the dependent (or response) variable.
For density families, 'y' is omitted.
NOTE: x and y are the first two arguments. All other arguments require
the 'name',value notation.
'weights' Prior weights for observations (reciprocal of variance, or
sample size).
'cens' Censoring indicators for hazard rate or censored regression.
The coding is '1' (or 'TRUE') for a censored observation, and
'0' (or 'FALSE') for uncensored observations.
'base' Baseline parameter estimate. If a baseline is provided,
the local regression model is fitted as
Y_i = b_i + m(x_i) + epsilon_i,
with Locfit estimating the m(x) term. For regression models,
this effectively subtracts b_i from Y_i. The advantage of the
'base' formulation is that it extends to likelihood
regression models.
'scale' A scale to apply to each variable. This is especially
important for multivariate fitting, where variables may be
measured in non-comparable units. It is also used to specify
the frequency for variables with the 'a' (angular) style.
'sty' Character string (length d) of styles for each predictor variable.
n denotes `normal'; a denotes angular (or periodic); l and r
denotes one-sided left and right; c is conditionally parametric.
Smoothing Parameters and Bandwidths:
The bandwidth (or more accurately, half-width) of the smoothing window
controls the amount of smoothing. Locfit allows specification of constant
(fixed), nearest neighbor, certain locally adaptive variable bandwidths,
and combinations of these. Also related to the smoothing parameter
are the local polynmial degree and weight function.
'nn' 'Nearest neighbor' smoothing parameter. Specifying 'nn',0.5
means that the width of each smoothing neighborhood is chosen
to cover 50% of the data.
'h' A constant (or fixed) bandwidth parameter. For example, 'h',2
means that the smoothing windows have constant half-width
(or radius) 2. Note that h is applied after scaling.
'pen' penalty parameter for adaptive smoothing. Needs to be used
with care.
'alpha' The old way of specifying smoothing parameters, as used in
my book. alpha is equivalent to the vector [nn,h,pen].
If multiple componenents are non-zero, the largest corresponding
bandwidth is used. The default (if none of alpha,nn,h,pen
are provided) is [0.7 0 0].
'deg' Degree of local polynomial. Default: 2 (local quadratic).
Degrees 0 to 3 are supported by almost all parts of the
Locfit code. Higher degrees may work in some cases.
'kern' Weight function, default = 'tcub'. Other choices are
'rect', 'trwt', 'tria', 'epan', 'bisq' and 'gauss'.
Choices may be restricted when derivatives are
required; e.g. for confidence bands and some bandwidth
selectors.
'kt' Kernel type, 'sph' (default); 'prod'. In multivariate
problems, 'prod' uses a simplified product model which
speeds up computations.
'acri' Criterion for adaptive bandwidth selection.
Derivative Estimation.
Generally I recommend caution when using derivative estimation
(and especially higher order derivative estimation) -- can you
really estimate derivatives from noisy data? Any derivative
estimate is inherently more dependent on an assumed smoothness
(expressed through the bandwidth) than the data. Warnings aside...
'deriv' Derivative estimation. 'deriv',1 specifies the first derivative
(or more correctly, an estimate of the local slope is returned.
'deriv',[1 1] specifies the second derivative. For bivariate fits
'deriv',2 specifies the first partial derivative wrt x2.
'deriv',[1 2] is mixed second-order derivative.
Fitting family.
'family' is used to specify the local likelihood family.
Regression-type families are 'gaussian', 'binomial',
'poisson', 'gamma' and 'geom'. If the family is preceded
by a q (e.g. 'qgauss', or 'qpois') then quasi-likelihood is
used; in particular, a dispersion estimate is computed.
Preceding by an 'r' makes an attempt at robust (outlier-resistant)
estimation. Combining q and r (e.g. 'family','qrpois') may
work, if you're lucky.
Density estimation-type families are 'dens', 'rate' and 'hazard'
(hazard or failure rate). Note that `dens' scales the output
to be a statistical density estimate (i.e. scaled to integrate
to 1). 'rate' estimates the rate or intensity function (events
per unit time, or events per unit area), which may be called
density in some fields.
The default family is 'qgauss' if a response (y argument) has been
provided, and 'dens' if no response is given.
'link' Link function for local likelihood fitting. Depending on the
family, choices may be 'ident', 'log', 'logit',
'inverse', 'sqrt' and 'arcsin'.
Evaluation structures.
By default, locfit chooses a set of points, depending on the data
and smoothing parameters, to evaluate at. This is controlled by
the evaluation structure.
'ev' Specify the evaluation structure. Default is 'tree'.
Other choices include 'phull' (triangulation), 'grid' (a grid
of points), 'data' (each data point), 'crossval' (data,
but use leave-one-out cross validation), 'none' (no evaluation
points, effectively producing the global parametric fit).
Alternatively, a vector/matrix of evaluation points may be
provided.
(kd trees not currently supported in mlocfit)
'll' and 'ur' -- row vectors specifying the upper and lower limits
for the bounding box used by the evaluation structure.
They default to the data range.
'mg' For the 'grid' evaluation structure, 'mg' specifies the
number of points on each margin. Default 10. Can be either a
single number or vector.
'cut' Refinement parameter for adaptive partitions. Default 0.8;
smaller values result in more refined partitions.
'maxk' Controls space assignment for evaluation structures. For the
adaptive evaluation structures, it is impossible to be sure
in advance how many vertices will be generated. If you get
warnings about `Insufficient vertex space', Locfit's default
assigment can be increased by increasing 'maxk'. The default
is 'maxk','100'.
'xlim' For density estimation, Locfit allows the density to be
supported on a bounded interval (or rectangle, in more than
one dimension). The format should be [ll;ul] (ie, matrix with
two rows, d columns) where ll is the lower left corner of
the rectangle, and ur is the upper right corner.
One-sided bounds, such as [0,infty), are not supported, but can be
effectively specified by specifying a very large upper
bound.
'module' either 'name' or {'name','/path/to/module',parameters}.
Density Estimation
'renorm',1 will attempt to renormalize the local likelihood
density estimate so that it integrates to 1. The llde
(specified by 'family','dens') is scaled to estimate the
density, but since the estimation is pointwise, there is
no guarantee that the resulting density integrates exactly
to 1. Renormalization attempts to achieve this.
The output of locfit() is a Matlab structure:
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.name (string)
fit.evaluation_structure.module.directory (string)
fit.evaluation_structure.module.parameters (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.cell
fit.fit_points.evaluation_vectors.splitvar
fit.fit_points.evaluation_vectors.lo
fit.fit_points.evaluation_vectors.hi
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
The OLD format:
fit{1} = data.
fit{2} = evaluation structure.
fit{3} = smoothing parameter structure.
fit{4}{1} = fit points matrix.
fit{4}{2} = matrix of fitted values etc.
Note that these are not back-transformed, and may have the
parametric component removed.
(exact content varies according to module).
fit{4}{3} = various details of the evaluation points.
fit{4}{4} = fit limits.
fit{4}{5} = family,link.
fit{5} = parametric component values.

0001 function fit=locfit(varargin) 0002 0003 % Smoothing noisy data using Local Regression and Likelihood. 0004 % 0005 % arguments still to add: dc maxit 0006 % 0007 % Usage: fit = locfit(x,y) % local regression fit of x and y. 0008 % fit = locfit(x) % density estimation of x. 0009 % 0010 % Smoothing with locfit is a two-step procedure. The locfit() 0011 % function evaluates the local regression smooth at a set of points 0012 % (can be specified through an evaluation structure). Then, use 0013 % the predict() function to interpolate this fit to other points. 0014 % 0015 % Additional arguments to locfit() are specified as 'name',value pairs, e.g.: 0016 % locfit( x, 'alpha',[0.7,1.5] , 'family','rate' , 'ev','grid' , 'mg',100 ); 0017 % 0018 % 0019 % Data-related inputs: 0020 % 0021 % x is a vector or matrix of the independent (or predictor) variables. 0022 % Rows of x represent subjects, columns represent variables. 0023 % Generally, local regression would be used with 1-4 independent 0024 % variables. In higher dimensions, the curse-of-dimensionality, 0025 % as well as the difficulty of visualizing higher dimensional 0026 % surfaces, may limit usefulness. 0027 % 0028 % y is the column vector of the dependent (or response) variable. 0029 % For density families, 'y' is omitted. 0030 % NOTE: x and y are the first two arguments. All other arguments require 0031 % the 'name',value notation. 0032 % 0033 % 'weights' Prior weights for observations (reciprocal of variance, or 0034 % sample size). 0035 % 'cens' Censoring indicators for hazard rate or censored regression. 0036 % The coding is '1' (or 'TRUE') for a censored observation, and 0037 % '0' (or 'FALSE') for uncensored observations. 0038 % 'base' Baseline parameter estimate. If a baseline is provided, 0039 % the local regression model is fitted as 0040 % Y_i = b_i + m(x_i) + epsilon_i, 0041 % with Locfit estimating the m(x) term. For regression models, 0042 % this effectively subtracts b_i from Y_i. The advantage of the 0043 % 'base' formulation is that it extends to likelihood 0044 % regression models. 0045 % 'scale' A scale to apply to each variable. This is especially 0046 % important for multivariate fitting, where variables may be 0047 % measured in non-comparable units. It is also used to specify 0048 % the frequency for variables with the 'a' (angular) style. 0049 % 'sty' Character string (length d) of styles for each predictor variable. 0050 % n denotes `normal'; a denotes angular (or periodic); l and r 0051 % denotes one-sided left and right; c is conditionally parametric. 0052 % 0053 % 0054 % Smoothing Parameters and Bandwidths: 0055 % The bandwidth (or more accurately, half-width) of the smoothing window 0056 % controls the amount of smoothing. Locfit allows specification of constant 0057 % (fixed), nearest neighbor, certain locally adaptive variable bandwidths, 0058 % and combinations of these. Also related to the smoothing parameter 0059 % are the local polynmial degree and weight function. 0060 % 0061 % 'nn' 'Nearest neighbor' smoothing parameter. Specifying 'nn',0.5 0062 % means that the width of each smoothing neighborhood is chosen 0063 % to cover 50% of the data. 0064 % 0065 % 'h' A constant (or fixed) bandwidth parameter. For example, 'h',2 0066 % means that the smoothing windows have constant half-width 0067 % (or radius) 2. Note that h is applied after scaling. 0068 % 0069 % 'pen' penalty parameter for adaptive smoothing. Needs to be used 0070 % with care. 0071 % 0072 % 'alpha' The old way of specifying smoothing parameters, as used in 0073 % my book. alpha is equivalent to the vector [nn,h,pen]. 0074 % If multiple componenents are non-zero, the largest corresponding 0075 % bandwidth is used. The default (if none of alpha,nn,h,pen 0076 % are provided) is [0.7 0 0]. 0077 % 0078 % 'deg' Degree of local polynomial. Default: 2 (local quadratic). 0079 % Degrees 0 to 3 are supported by almost all parts of the 0080 % Locfit code. Higher degrees may work in some cases. 0081 % 0082 % 'kern' Weight function, default = 'tcub'. Other choices are 0083 % 'rect', 'trwt', 'tria', 'epan', 'bisq' and 'gauss'. 0084 % Choices may be restricted when derivatives are 0085 % required; e.g. for confidence bands and some bandwidth 0086 % selectors. 0087 % 0088 % 'kt' Kernel type, 'sph' (default); 'prod'. In multivariate 0089 % problems, 'prod' uses a simplified product model which 0090 % speeds up computations. 0091 % 0092 % 'acri' Criterion for adaptive bandwidth selection. 0093 % 0094 % 0095 % Derivative Estimation. 0096 % Generally I recommend caution when using derivative estimation 0097 % (and especially higher order derivative estimation) -- can you 0098 % really estimate derivatives from noisy data? Any derivative 0099 % estimate is inherently more dependent on an assumed smoothness 0100 % (expressed through the bandwidth) than the data. Warnings aside... 0101 % 0102 % 'deriv' Derivative estimation. 'deriv',1 specifies the first derivative 0103 % (or more correctly, an estimate of the local slope is returned. 0104 % 'deriv',[1 1] specifies the second derivative. For bivariate fits 0105 % 'deriv',2 specifies the first partial derivative wrt x2. 0106 % 'deriv',[1 2] is mixed second-order derivative. 0107 % 0108 % Fitting family. 0109 % 'family' is used to specify the local likelihood family. 0110 % Regression-type families are 'gaussian', 'binomial', 0111 % 'poisson', 'gamma' and 'geom'. If the family is preceded 0112 % by a q (e.g. 'qgauss', or 'qpois') then quasi-likelihood is 0113 % used; in particular, a dispersion estimate is computed. 0114 % Preceding by an 'r' makes an attempt at robust (outlier-resistant) 0115 % estimation. Combining q and r (e.g. 'family','qrpois') may 0116 % work, if you're lucky. 0117 % Density estimation-type families are 'dens', 'rate' and 'hazard' 0118 % (hazard or failure rate). Note that `dens' scales the output 0119 % to be a statistical density estimate (i.e. scaled to integrate 0120 % to 1). 'rate' estimates the rate or intensity function (events 0121 % per unit time, or events per unit area), which may be called 0122 % density in some fields. 0123 % The default family is 'qgauss' if a response (y argument) has been 0124 % provided, and 'dens' if no response is given. 0125 % 'link' Link function for local likelihood fitting. Depending on the 0126 % family, choices may be 'ident', 'log', 'logit', 0127 % 'inverse', 'sqrt' and 'arcsin'. 0128 % 0129 % Evaluation structures. 0130 % By default, locfit chooses a set of points, depending on the data 0131 % and smoothing parameters, to evaluate at. This is controlled by 0132 % the evaluation structure. 0133 % 'ev' Specify the evaluation structure. Default is 'tree'. 0134 % Other choices include 'phull' (triangulation), 'grid' (a grid 0135 % of points), 'data' (each data point), 'crossval' (data, 0136 % but use leave-one-out cross validation), 'none' (no evaluation 0137 % points, effectively producing the global parametric fit). 0138 % Alternatively, a vector/matrix of evaluation points may be 0139 % provided. 0140 % (kd trees not currently supported in mlocfit) 0141 % 'll' and 'ur' -- row vectors specifying the upper and lower limits 0142 % for the bounding box used by the evaluation structure. 0143 % They default to the data range. 0144 % 'mg' For the 'grid' evaluation structure, 'mg' specifies the 0145 % number of points on each margin. Default 10. Can be either a 0146 % single number or vector. 0147 % 'cut' Refinement parameter for adaptive partitions. Default 0.8; 0148 % smaller values result in more refined partitions. 0149 % 'maxk' Controls space assignment for evaluation structures. For the 0150 % adaptive evaluation structures, it is impossible to be sure 0151 % in advance how many vertices will be generated. If you get 0152 % warnings about `Insufficient vertex space', Locfit's default 0153 % assigment can be increased by increasing 'maxk'. The default 0154 % is 'maxk','100'. 0155 % 0156 % 'xlim' For density estimation, Locfit allows the density to be 0157 % supported on a bounded interval (or rectangle, in more than 0158 % one dimension). The format should be [ll;ul] (ie, matrix with 0159 % two rows, d columns) where ll is the lower left corner of 0160 % the rectangle, and ur is the upper right corner. 0161 % One-sided bounds, such as [0,infty), are not supported, but can be 0162 % effectively specified by specifying a very large upper 0163 % bound. 0164 % 0165 % 'module' either 'name' or {'name','/path/to/module',parameters}. 0166 % 0167 % Density Estimation 0168 % 'renorm',1 will attempt to renormalize the local likelihood 0169 % density estimate so that it integrates to 1. The llde 0170 % (specified by 'family','dens') is scaled to estimate the 0171 % density, but since the estimation is pointwise, there is 0172 % no guarantee that the resulting density integrates exactly 0173 % to 1. Renormalization attempts to achieve this. 0174 % 0175 % The output of locfit() is a Matlab structure: 0176 % 0177 % fit.data.x (n*d) 0178 % fit.data.y (n*1) 0179 % fit.data.weights (n*1 or 1*1) 0180 % fit.data.censor (n*1 or 1*1) 0181 % fit.data.baseline (n*1 or 1*1) 0182 % fit.data.style (string length d) 0183 % fit.data.scales (1*d) 0184 % fit.data.xlim (2*d) 0185 % 0186 % fit.evaluation_structure.type (string) 0187 % fit.evaluation_structure.module.name (string) 0188 % fit.evaluation_structure.module.directory (string) 0189 % fit.evaluation_structure.module.parameters (string) 0190 % fit.evaluation_structure.lower_left (numeric 1*d) 0191 % fit.evaluation_structure.upper_right (numeric 1*d) 0192 % fit.evaluation_structure.grid (numeric 1*d) 0193 % fit.evaluation_structure.cut (numeric 1*d) 0194 % fit.evaluation_structure.maxk 0195 % fit.evaluation_structure.derivative 0196 % 0197 % fit.smoothing_parameters.alpha = (nn h pen) vector 0198 % fit.smoothing_parameters.adaptive_criterion (string) 0199 % fit.smoothing_parameters.degree (numeric) 0200 % fit.smoothing_parameters.family (string) 0201 % fit.smoothing_parameters.link (string) 0202 % fit.smoothing_parameters.kernel (string) 0203 % fit.smoothing_parameters.kernel_type (string) 0204 % fit.smoothing_parameters.deren 0205 % fit.smoothing_parameters.deit 0206 % fit.smoothing_parameters.demint 0207 % fit.smoothing_parameters.debug 0208 % 0209 % fit.fit_points.evaluation_points (d*nv matrix) 0210 % fit.fit_points.fitted_values (matrix, nv rows, many columns) 0211 % fit.fit_points.evaluation_vectors.cell 0212 % fit.fit_points.evaluation_vectors.splitvar 0213 % fit.fit_points.evaluation_vectors.lo 0214 % fit.fit_points.evaluation_vectors.hi 0215 % fit.fit_points.fit_limits (d*2 matrix) 0216 % fit.fit_points.family_link (numeric values) 0217 % fit.fit_points.kappa (likelihood, degrees of freedom, etc) 0218 % 0219 % fit.parametric_component 0220 % 0221 % 0222 % The OLD format: 0223 % 0224 % fit{1} = data. 0225 % fit{2} = evaluation structure. 0226 % fit{3} = smoothing parameter structure. 0227 % fit{4}{1} = fit points matrix. 0228 % fit{4}{2} = matrix of fitted values etc. 0229 % Note that these are not back-transformed, and may have the 0230 % parametric component removed. 0231 % (exact content varies according to module). 0232 % fit{4}{3} = various details of the evaluation points. 0233 % fit{4}{4} = fit limits. 0234 % fit{4}{5} = family,link. 0235 % fit{5} = parametric component values. 0236 % 0237 0238 0239 0240 % Minimal input validation 0241 if nargin < 1 0242 error( 'At least one input argument required' ); 0243 end 0244 0245 xdata = double(varargin{1}); 0246 d = size(xdata,2); 0247 n = size(xdata,1); 0248 if ((nargin>1) && (~ischar(varargin{2}))) 0249 ydata = double(varargin{2}); 0250 if (any(size(ydata) ~= [n 1])); error('y must be n*1 column vector'); end; 0251 family = 'qgauss'; 0252 na = 3; 0253 else 0254 ydata = 0; 0255 family = 'density'; 0256 na = 2; 0257 end; 0258 if mod(nargin-na,2)==0 0259 error( 'All arguments other than x, y must be name,value pairs' ); 0260 end 0261 0262 0263 wdata = ones(n,1); 0264 cdata = 0; 0265 base = 0; 0266 style = 'n'; 0267 scale = 1; 0268 xl = zeros(2,d); 0269 0270 alpha = [0 0 0]; 0271 deg = 2; 0272 link = 'default'; 0273 acri = 'none'; 0274 kern = 'tcub'; 0275 kt = 'sph'; 0276 deren = 0; 0277 deit = 'default'; 0278 demint= 20; 0279 debug = 0; 0280 0281 ev = 'tree'; 0282 ll = zeros(1,d); 0283 ur = zeros(1,d); 0284 mg = 10; 0285 maxk = 100; 0286 deriv=0; 0287 cut = 0.8; 0288 mdl = struct('name','std', 'directory','', 'parameters',0 ); 0289 0290 while na < length(varargin) 0291 inc = 0; 0292 if (varargin{na}=='y') 0293 ydata = double(varargin{na+1}); 0294 family = 'qgauss'; 0295 inc = 2; 0296 if (any(size(ydata) ~= [n 1])); error('y must be n*1 column vector'); end; 0297 end 0298 if (strcmp(varargin{na},'weights')) 0299 wdata = double(varargin{na+1}); 0300 inc = 2; 0301 if (any(size(wdata) ~= [n 1])); error('weights must be n*1 column vector'); end; 0302 end 0303 if (strcmp(varargin{na},'cens')) 0304 cdata = double(varargin{na+1}); 0305 inc = 2; 0306 if (any(size(cdata) ~= [n 1])); error('cens must be n*1 column vector'); end; 0307 end 0308 if (strcmp(varargin{na},'base')) % numeric vector, n*1 or 1*1. 0309 base = double(varargin{na+1}); 0310 if (length(base)==1); base = base*ones(n,1); end; 0311 inc = 2; 0312 end 0313 if (strcmp(varargin{na},'style')) % character string of length d. 0314 style = varargin{na+1}; 0315 inc = 2; 0316 end; 0317 if (strcmp(varargin{na},'scale')) % row vector, length 1 or d. 0318 scale = varargin{na+1}; 0319 if (scale==0) 0320 scale = zeros(1,d); 0321 for i=1:d 0322 scale(i) = sqrt(var(xdata(:,i))); 0323 end; 0324 end; 0325 inc = 2; 0326 end; 0327 if (strcmp(varargin{na},'xlim')) % 2*d numeric matrix. 0328 xl = varargin{na+1}; 0329 inc = 2; 0330 end 0331 if (strcmp(varargin{na},'alpha')) % row vector of length 1, 2 or 3. 0332 alpha = [varargin{na+1} 0 0 0]; 0333 alpha = alpha(1:3); 0334 inc = 2; 0335 end 0336 if (strcmp(varargin{na},'nn')) % scalar 0337 alpha(1) = varargin{na+1}; 0338 inc = 2; 0339 end 0340 if (strcmp(varargin{na},'h')) % scalar 0341 alpha(2) = varargin{na+1}; 0342 inc = 2; 0343 end; 0344 if (strcmp(varargin{na},'pen')) % scalar 0345 alpha(3) = varargin{na+1}; 0346 inc = 2; 0347 end; 0348 if (strcmp(varargin{na},'acri')) % string 0349 acri = varargin{na+1}; 0350 inc = 2; 0351 end 0352 if (strcmp(varargin{na},'deg')) % positive integer. 0353 deg = varargin{na+1}; 0354 inc = 2; 0355 end; 0356 if (strcmp(varargin{na},'family')) % character string. 0357 family = varargin{na+1}; 0358 inc = 2; 0359 end; 0360 if (strcmp(varargin{na},'link')) % character string. 0361 link = varargin{na+1}; 0362 inc = 2; 0363 end; 0364 if (strcmp(varargin{na},'kern')) % character string. 0365 kern = varargin{na+1}; 0366 inc = 2; 0367 end; 0368 if (strcmp(varargin{na},'kt')) % character string. 0369 kt = varargin{na+1}; 0370 inc = 2; 0371 end; 0372 if (strcmp(varargin{na},'ev')) % char. string, or matrix with d columns. 0373 ev = varargin{na+1}; 0374 if (isnumeric(ev)); ev = ev'; end; 0375 inc = 2; 0376 end; 0377 if (strcmp(varargin{na},'ll')) % row vector of length d. 0378 ll = varargin{na+1}; 0379 inc = 2; 0380 end; 0381 if (strcmp(varargin{na},'ur')) % row vector of length d. 0382 ur = varargin{na+1}; 0383 inc = 2; 0384 end; 0385 if (strcmp(varargin{na},'mg')) % row vector of length d. 0386 mg = varargin{na+1}; 0387 inc = 2; 0388 end; 0389 if (strcmp(varargin{na},'cut')) % positive scalar. 0390 cut = varargin{na+1}; 0391 inc = 2; 0392 end; 0393 if (strcmp(varargin{na},'module')) % string. 0394 mdl = struct('name',varargin{na+1}, 'directory','', 'parameters',0 ); 0395 inc = 2; 0396 end; 0397 if (strcmp(varargin{na},'maxk')) % positive integer. 0398 maxk = varargin{na+1}; 0399 inc = 2; 0400 end; 0401 if (strcmp(varargin{na},'deriv')) % numeric row vector, up to deg elements. 0402 deriv = varargin{na+1}; 0403 inc = 2; 0404 end; 0405 if (strcmp(varargin{na},'renorm')) % density renormalization. 0406 deren = varargin{na+1}; 0407 inc = 2; 0408 end; 0409 if (strcmp(varargin{na},'itype')) % density - integration type. 0410 deit = varargin{na+1}; 0411 inc = 2; 0412 end; 0413 if (strcmp(varargin{na},'mint')) % density - # of integration points. 0414 demint = varargin{na+1}; 0415 inc = 2; 0416 end; 0417 if (strcmp(varargin{na},'debug')) % debug level. 0418 debug = varargin{na+1}; 0419 inc = 2; 0420 end; 0421 if (inc==0) 0422 disp(varargin{na}); 0423 error('Unknown Input Argument.'); 0424 end; 0425 na=na+inc; 0426 end 0427 0428 0429 fit.data.x = xdata; 0430 fit.data.y = ydata; 0431 fit.data.weights = wdata; 0432 fit.data.censor = cdata; 0433 fit.data.baseline = base; 0434 fit.data.style = style; 0435 fit.data.scales = scale; 0436 fit.data.xlim = xl; 0437 0438 fit.evaluation_structure.type = ev; 0439 fit.evaluation_structure.module = mdl; 0440 fit.evaluation_structure.lower_left = ll; 0441 fit.evaluation_structure.upper_right = ur; 0442 fit.evaluation_structure.grid = mg; 0443 fit.evaluation_structure.cut = cut; 0444 fit.evaluation_structure.maxk = maxk; 0445 fit.evaluation_structure.derivative = deriv; 0446 0447 if (alpha==0); alpha = [0.7 0 0]; end; 0448 0449 fit.smoothing_parameters.alpha = alpha; 0450 fit.smoothing_parameters.adaptive_criterion = acri; 0451 fit.smoothing_parameters.degree = deg; 0452 fit.smoothing_parameters.family = family; 0453 fit.smoothing_parameters.link = link; 0454 fit.smoothing_parameters.kernel = kern; 0455 fit.smoothing_parameters.kernel_type = kt; 0456 fit.smoothing_parameters.deren = deren; 0457 fit.smoothing_parameters.deit = deit; 0458 fit.smoothing_parameters.demint = demint; 0459 fit.smoothing_parameters.debug = debug; 0460 0461 [fpc pcomp] = mexlf(fit.data,fit.evaluation_structure,fit.smoothing_parameters); 0462 fit.fit_points = fpc; 0463 fit.parametric_component = pcomp; 0464 0465 return 0466 0467 0468