Mercurial > repos > vipints > rdiff
diff rDiff/src/locfit/Source/locf.h @ 0:0f80a5141704
version 0.3 uploaded
author | vipints |
---|---|
date | Thu, 14 Feb 2013 23:38:36 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rDiff/src/locfit/Source/locf.h Thu Feb 14 23:38:36 2013 -0500 @@ -0,0 +1,329 @@ +/* + * Copyright 1996-2006 Catherine Loader. + */ +#ifndef I_LOCF_H +#define I_LOCF_H + +#include "stdlib.h" +#include "ctype.h" +#include "mut.h" + +#ifdef WARN +#undef WARN +#endif + +#define LERR(args) {mut_printf("Error: "); mut_printf args; mut_printf("\n"); lf_error=1;} +#define WARN(args) {mut_printf("Warning: "); mut_printf args; mut_printf("\n"); } + +extern int lf_error; +#define LOGPI 1.144729885849400174143427 +#define HUBERC 2.0 +#define NOSLN 0.1278433 +#define GFACT 2.5 +#define EFACT 3.0 +#define ISWAP(a,b) { int zz; zz = a; a = b; b = zz; } +#define MAX(a,b) (((a)>(b)) ? (a) : (b)) +#define MIN(a,b) (((a)<(b)) ? (a) : (b)) +#define SGN(x) (((x)>0) ? 1 : -1) +#define SQR(x) ((x)*(x)) + +extern int lf_error; + +typedef struct { + double *wk, *coef, *xbar, *f; + jacobian xtwx; + int lwk, haspc; +} paramcomp; +#define haspc(pc) ((pc)->haspc) + +/* + * MXDIM and MXDEG are maximum dimension and local polynomial + * degree for Locfit. Note that some parts of the code may be + * more restrictive. + */ + +#define MXDIM 15 +#define MXDEG 7 + +typedef struct { + double *x[MXDIM]; + double *y; + double *w; + double *b; + double *c; + double sca[MXDIM]; + double xl[2*MXDIM]; + int n, d, ord; + int sty[MXDIM]; +} lfdata; +#define resp(lfd,i) (((lfd)->y==NULL) ? 0.0 : (lfd)->y[i]) +#define base(lfd,i) (((lfd)->b==NULL) ? 0.0 : (lfd)->b[i]) +#define prwt(lfd,i) (((lfd)->w==NULL) ? 1.0 : (lfd)->w[i]) +#define cens(lfd,i) (((lfd)->c==NULL) ? 0 : (int)(lfd)->c[i]) +#define datum(lfd,i,j) ((lfd)->x[i][j]) +#define dvari(lfd,i) ((lfd)->x[i]) + + +/* + * The design structure used in Locfit, and associated macro definitions. + */ + +typedef struct { + int des_init_id; + double *wk; + int *ind; + int lwk, lind; + + double *xev; /* fitting point, length p */ + double *X; /* design matrix, length n*p */ + double *w, *di, *res, *th, *wd, h; + double *V, *P; /* matrices with length p*p */ + double *f1, *ss, *oc, *cf; /* work vectors, length p */ + double llk, smwt; + double tr0, tr1, tr2; /* traces for local df computation */ + jacobian xtwx; /* to store X'WVX and decomposition */ + int cfn[1+MXDIM], ncoef; + int *fix; /* integer vector for fixed coefficients. */ + int (*itype)(); /* density integration function */ + int n, p; +} design; + +#define cfn(des,i) (des->cfn[i]) +#define d_x(des) ((des)->X) +#define d_xi(des,i) (&(des)->X[i*((des)->p)]) +#define d_xij(des,i,j) ((des)->X[i*((des)->p)+j]) +#define is_fixed(des,i) ((des)->fix[i]==1) +#define wght(des,i) ((des)->w[i]) +#define dist(des,i) ((des)->di[i]) +#define fitv(des,i) ((des)->th[i]) +#define DES_INIT_ID 34988372 + +extern int des_reqd(), des_reqi(); + +typedef struct { + int deflink, canlink, quasi, robust; + int (*vallink)(), (*family)(), (*initial)(), (*like)(), (*pcheck)(); +} family; +#define isquasi(fam) ((fam)->quasi) +#define isrobust(fam) ((fam)->robust) +extern int inllmix; /* flag needed to ensure correct behavior in llmix. */ + +typedef struct { + double nn, fixh, adpen; + int ker, kt; + int deg, deg0, p; + int acri; + int fam, lin; + family fami; + int ubas; + double (*vb)(); + void (*vbasis)(); +} smpar; +#define nn(sp) ((sp)->nn) +#define fixh(sp) ((sp)->fixh) +#define pen(sp) ((sp)->adpen) +#define ker(sp) ((sp)->ker) +#define kt(sp) ((sp)->kt) +#define deg(sp) ((sp)->deg) +#define deg0(sp) ((sp)->deg0) +#define npar(sp) ((sp)->p) +#define acri(sp) ((sp)->acri) +#define ubas(sp) ((sp)->ubas) +#define fam(sp) ((sp)->fam) +#define fami(sp) (&(sp)->fami) +#define link(sp) ((sp)->lin) + +typedef struct { + int deriv[MXDEG+2]; + int nd; +} deriv; + +/* + * Criteria for adaptive local fitting mi[MACRI] + * 1: localized CP; 2: ICI (katkovnik); 3: curvature model index + * 4: Increase bandwidth until locfit returns LF_OK + */ +#define ANONE 0 +#define ACP 1 +#define AKAT 2 +#define AMDI 3 +#define AOK 4 + +/* + * weight functions mi[MKER]. + * see Table 3.1 or the function W() in weights.c for definitions. + */ +#define WRECT 1 +#define WEPAN 2 +#define WBISQ 3 +#define WTCUB 4 +#define WTRWT 5 +#define WGAUS 6 +#define WTRIA 7 +#define WQUQU 8 +#define W6CUB 9 +#define WMINM 10 +#define WEXPL 11 +#define WMACL 12 +#define WPARM 13 + +/* + * type of multivariate weight function mi[MKT] + * KSPH (spherical) KPROD (product) + * others shouldn't be used at present. + */ +#define KSPH 1 +#define KPROD 2 +#define KCE 3 +#define KLM 4 +#define KZEON 5 + +/* + * Local likelihood family mi[MTG] + * for quasi-likelihood, add 64. + */ +#define TNUL 0 +#define TDEN 1 +#define TRAT 2 +#define THAZ 3 +#define TGAUS 4 +#define TLOGT 5 +#define TPOIS 6 +#define TGAMM 7 +#define TGEOM 8 +#define TCIRC 9 +#define TROBT 10 +#define TRBIN 11 +#define TWEIB 12 +#define TCAUC 13 +#define TPROB 14 +#define TQUANT 15 + +/* + * Link functions mi[MLINK]. + * Mostly as in table 4.1 of the book. + * LDEFAU and LCANON are used to select default and canonical + * links respectively. LINIT shouldn't be selected by user... + */ +#define LINIT 0 +#define LDEFAU 1 +#define LCANON 2 +#define LIDENT 3 +#define LLOG 4 +#define LLOGIT 5 +#define LINVER 6 +#define LSQRT 7 +#define LASIN 8 + +/* + * components of vector returned by the links() function + * in family.c. ZLIK the likelihood; ZMEAN = estimated mean; + * ZDLL = derivative of log-likelihood; ZDDLL = - second derivative + */ +#define LLEN 4 +#define ZLIK 0 +#define ZMEAN 1 +#define ZDLL 2 +#define ZDDLL 3 + +/* + * return status for the locfit() function + */ +#define LF_OK 0 +#define LF_DONE 1 /* done - forced break from iterations */ +#define LF_OOB 2 /* out of bounds, or large unstable parameter */ +#define LF_PF 3 /* perfect fit; interpolation; deviance=0 */ +#define LF_NCON 4 /* not converged */ +#define LF_NSLN 5 /* no solution - eg separation in binomial. */ +#define LF_NOPT 6 /* no or insufficient points with non-zero wt */ +#define LF_INFA 7 /* initial failure e.g. log(0) */ +#define LF_DEMP 10 /* density -- empty integration region */ +#define LF_XOOR 11 /* density -- fit point outside xlim region */ +#define LF_DNOP 12 /* density version of 6 */ +#define LF_BADP 81 /* bad parameters e.g. neg prob for binomial */ +#define LF_LNK 82 /* invalid link */ +#define LF_FAM 83 /* invalid family */ +#define LF_ERR 99 /* error */ + +#define STANGL 4 +#define STLEFT 5 +#define STRIGH 6 +#define STCPAR 7 + +/* + * Integration type mi[MIT] for integration in + * density estimation. + */ +#define INVLD 0 +#define IDEFA 1 +#define IMULT 2 +#define IPROD 3 +#define IMLIN 4 +#define IHAZD 5 +#define ISPHR 6 +#define IMONT 7 + +/* density.c */ +extern int densinit(), likeden(), deitype(); +extern int fact[]; +extern void prodintresp(), prresp(); +extern int de_mint, de_itype, de_renorm; + +/* dens_haz.c */ +extern void haz_init(); +extern int hazint(); + +/* dens_odi.c */ +extern int onedint(); +extern void recurint(); + +/* famquant.c */ +extern void lfquantile(); + +/* family.c */ +extern int lffamily(), lflink(); +extern int links(), stdlinks(), defaultlink(), validlinks(); +extern double b2(), b3(), b4(), lf_link(), invlink(); +extern void setfamily(); + +/* lf_adap.c */ +extern int alocfit(), lfacri(); + +/* lf_fitfun.c */ +extern void fitfun(), makecfn(), designmatrix(); +extern int calcp(), coefnumber(); + +/* lf_nbhd.c */ +extern double kordstat(), rho(); +extern void nbhd(); + +/* lf_robust.c */ +extern double median(); +extern void lf_robust(); + +/* lfstr.c */ +extern int pmatch(); + +/* lf_vari.c */ +extern void lf_vcov(), comp_vari(), local_df(); + +/* lf_wdiag.c */ +extern int wdiag(), wdiagp(); + +/* locfit.c */ +extern int locfit(), des_reqd(), des_reqi(), likereg(); +extern int reginit(); +extern void lfdata_init(), smpar_init(), deriv_init(), des_init(), lfiter(); +extern int lf_maxit, lf_debug; +extern void lf_status_msg(); + +/* minmax.c */ +extern double ipower(), minmax(); + +/* weight.c */ +extern int lfkernel(), lfketype(); +extern double W(), weight(), weightd(), Wd(), Wdd(), wint(); +extern double Wconv(), Wconv1(), Wconv4(), Wconv5(), Wconv6(), Wikk(); +extern int iscompact(), wtaylor(); + +#endif /* define I_LOCF_H */