123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- /*
- * 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 */
|