0
|
1 /*
|
|
2 * Copyright 1996-2006 Catherine Loader.
|
|
3 */
|
|
4 #ifndef I_LOCF_H
|
|
5 #define I_LOCF_H
|
|
6
|
|
7 #include "stdlib.h"
|
|
8 #include "ctype.h"
|
|
9 #include "mut.h"
|
|
10
|
|
11 #ifdef WARN
|
|
12 #undef WARN
|
|
13 #endif
|
|
14
|
|
15 #define LERR(args) {mut_printf("Error: "); mut_printf args; mut_printf("\n"); lf_error=1;}
|
|
16 #define WARN(args) {mut_printf("Warning: "); mut_printf args; mut_printf("\n"); }
|
|
17
|
|
18 extern int lf_error;
|
|
19 #define LOGPI 1.144729885849400174143427
|
|
20 #define HUBERC 2.0
|
|
21 #define NOSLN 0.1278433
|
|
22 #define GFACT 2.5
|
|
23 #define EFACT 3.0
|
|
24 #define ISWAP(a,b) { int zz; zz = a; a = b; b = zz; }
|
|
25 #define MAX(a,b) (((a)>(b)) ? (a) : (b))
|
|
26 #define MIN(a,b) (((a)<(b)) ? (a) : (b))
|
|
27 #define SGN(x) (((x)>0) ? 1 : -1)
|
|
28 #define SQR(x) ((x)*(x))
|
|
29
|
|
30 extern int lf_error;
|
|
31
|
|
32 typedef struct {
|
|
33 double *wk, *coef, *xbar, *f;
|
|
34 jacobian xtwx;
|
|
35 int lwk, haspc;
|
|
36 } paramcomp;
|
|
37 #define haspc(pc) ((pc)->haspc)
|
|
38
|
|
39 /*
|
|
40 * MXDIM and MXDEG are maximum dimension and local polynomial
|
|
41 * degree for Locfit. Note that some parts of the code may be
|
|
42 * more restrictive.
|
|
43 */
|
|
44
|
|
45 #define MXDIM 15
|
|
46 #define MXDEG 7
|
|
47
|
|
48 typedef struct {
|
|
49 double *x[MXDIM];
|
|
50 double *y;
|
|
51 double *w;
|
|
52 double *b;
|
|
53 double *c;
|
|
54 double sca[MXDIM];
|
|
55 double xl[2*MXDIM];
|
|
56 int n, d, ord;
|
|
57 int sty[MXDIM];
|
|
58 } lfdata;
|
|
59 #define resp(lfd,i) (((lfd)->y==NULL) ? 0.0 : (lfd)->y[i])
|
|
60 #define base(lfd,i) (((lfd)->b==NULL) ? 0.0 : (lfd)->b[i])
|
|
61 #define prwt(lfd,i) (((lfd)->w==NULL) ? 1.0 : (lfd)->w[i])
|
|
62 #define cens(lfd,i) (((lfd)->c==NULL) ? 0 : (int)(lfd)->c[i])
|
|
63 #define datum(lfd,i,j) ((lfd)->x[i][j])
|
|
64 #define dvari(lfd,i) ((lfd)->x[i])
|
|
65
|
|
66
|
|
67 /*
|
|
68 * The design structure used in Locfit, and associated macro definitions.
|
|
69 */
|
|
70
|
|
71 typedef struct {
|
|
72 int des_init_id;
|
|
73 double *wk;
|
|
74 int *ind;
|
|
75 int lwk, lind;
|
|
76
|
|
77 double *xev; /* fitting point, length p */
|
|
78 double *X; /* design matrix, length n*p */
|
|
79 double *w, *di, *res, *th, *wd, h;
|
|
80 double *V, *P; /* matrices with length p*p */
|
|
81 double *f1, *ss, *oc, *cf; /* work vectors, length p */
|
|
82 double llk, smwt;
|
|
83 double tr0, tr1, tr2; /* traces for local df computation */
|
|
84 jacobian xtwx; /* to store X'WVX and decomposition */
|
|
85 int cfn[1+MXDIM], ncoef;
|
|
86 int *fix; /* integer vector for fixed coefficients. */
|
|
87 int (*itype)(); /* density integration function */
|
|
88 int n, p;
|
|
89 } design;
|
|
90
|
|
91 #define cfn(des,i) (des->cfn[i])
|
|
92 #define d_x(des) ((des)->X)
|
|
93 #define d_xi(des,i) (&(des)->X[i*((des)->p)])
|
|
94 #define d_xij(des,i,j) ((des)->X[i*((des)->p)+j])
|
|
95 #define is_fixed(des,i) ((des)->fix[i]==1)
|
|
96 #define wght(des,i) ((des)->w[i])
|
|
97 #define dist(des,i) ((des)->di[i])
|
|
98 #define fitv(des,i) ((des)->th[i])
|
|
99 #define DES_INIT_ID 34988372
|
|
100
|
|
101 extern int des_reqd(), des_reqi();
|
|
102
|
|
103 typedef struct {
|
|
104 int deflink, canlink, quasi, robust;
|
|
105 int (*vallink)(), (*family)(), (*initial)(), (*like)(), (*pcheck)();
|
|
106 } family;
|
|
107 #define isquasi(fam) ((fam)->quasi)
|
|
108 #define isrobust(fam) ((fam)->robust)
|
|
109 extern int inllmix; /* flag needed to ensure correct behavior in llmix. */
|
|
110
|
|
111 typedef struct {
|
|
112 double nn, fixh, adpen;
|
|
113 int ker, kt;
|
|
114 int deg, deg0, p;
|
|
115 int acri;
|
|
116 int fam, lin;
|
|
117 family fami;
|
|
118 int ubas;
|
|
119 double (*vb)();
|
|
120 void (*vbasis)();
|
|
121 } smpar;
|
|
122 #define nn(sp) ((sp)->nn)
|
|
123 #define fixh(sp) ((sp)->fixh)
|
|
124 #define pen(sp) ((sp)->adpen)
|
|
125 #define ker(sp) ((sp)->ker)
|
|
126 #define kt(sp) ((sp)->kt)
|
|
127 #define deg(sp) ((sp)->deg)
|
|
128 #define deg0(sp) ((sp)->deg0)
|
|
129 #define npar(sp) ((sp)->p)
|
|
130 #define acri(sp) ((sp)->acri)
|
|
131 #define ubas(sp) ((sp)->ubas)
|
|
132 #define fam(sp) ((sp)->fam)
|
|
133 #define fami(sp) (&(sp)->fami)
|
|
134 #define link(sp) ((sp)->lin)
|
|
135
|
|
136 typedef struct {
|
|
137 int deriv[MXDEG+2];
|
|
138 int nd;
|
|
139 } deriv;
|
|
140
|
|
141 /*
|
|
142 * Criteria for adaptive local fitting mi[MACRI]
|
|
143 * 1: localized CP; 2: ICI (katkovnik); 3: curvature model index
|
|
144 * 4: Increase bandwidth until locfit returns LF_OK
|
|
145 */
|
|
146 #define ANONE 0
|
|
147 #define ACP 1
|
|
148 #define AKAT 2
|
|
149 #define AMDI 3
|
|
150 #define AOK 4
|
|
151
|
|
152 /*
|
|
153 * weight functions mi[MKER].
|
|
154 * see Table 3.1 or the function W() in weights.c for definitions.
|
|
155 */
|
|
156 #define WRECT 1
|
|
157 #define WEPAN 2
|
|
158 #define WBISQ 3
|
|
159 #define WTCUB 4
|
|
160 #define WTRWT 5
|
|
161 #define WGAUS 6
|
|
162 #define WTRIA 7
|
|
163 #define WQUQU 8
|
|
164 #define W6CUB 9
|
|
165 #define WMINM 10
|
|
166 #define WEXPL 11
|
|
167 #define WMACL 12
|
|
168 #define WPARM 13
|
|
169
|
|
170 /*
|
|
171 * type of multivariate weight function mi[MKT]
|
|
172 * KSPH (spherical) KPROD (product)
|
|
173 * others shouldn't be used at present.
|
|
174 */
|
|
175 #define KSPH 1
|
|
176 #define KPROD 2
|
|
177 #define KCE 3
|
|
178 #define KLM 4
|
|
179 #define KZEON 5
|
|
180
|
|
181 /*
|
|
182 * Local likelihood family mi[MTG]
|
|
183 * for quasi-likelihood, add 64.
|
|
184 */
|
|
185 #define TNUL 0
|
|
186 #define TDEN 1
|
|
187 #define TRAT 2
|
|
188 #define THAZ 3
|
|
189 #define TGAUS 4
|
|
190 #define TLOGT 5
|
|
191 #define TPOIS 6
|
|
192 #define TGAMM 7
|
|
193 #define TGEOM 8
|
|
194 #define TCIRC 9
|
|
195 #define TROBT 10
|
|
196 #define TRBIN 11
|
|
197 #define TWEIB 12
|
|
198 #define TCAUC 13
|
|
199 #define TPROB 14
|
|
200 #define TQUANT 15
|
|
201
|
|
202 /*
|
|
203 * Link functions mi[MLINK].
|
|
204 * Mostly as in table 4.1 of the book.
|
|
205 * LDEFAU and LCANON are used to select default and canonical
|
|
206 * links respectively. LINIT shouldn't be selected by user...
|
|
207 */
|
|
208 #define LINIT 0
|
|
209 #define LDEFAU 1
|
|
210 #define LCANON 2
|
|
211 #define LIDENT 3
|
|
212 #define LLOG 4
|
|
213 #define LLOGIT 5
|
|
214 #define LINVER 6
|
|
215 #define LSQRT 7
|
|
216 #define LASIN 8
|
|
217
|
|
218 /*
|
|
219 * components of vector returned by the links() function
|
|
220 * in family.c. ZLIK the likelihood; ZMEAN = estimated mean;
|
|
221 * ZDLL = derivative of log-likelihood; ZDDLL = - second derivative
|
|
222 */
|
|
223 #define LLEN 4
|
|
224 #define ZLIK 0
|
|
225 #define ZMEAN 1
|
|
226 #define ZDLL 2
|
|
227 #define ZDDLL 3
|
|
228
|
|
229 /*
|
|
230 * return status for the locfit() function
|
|
231 */
|
|
232 #define LF_OK 0
|
|
233 #define LF_DONE 1 /* done - forced break from iterations */
|
|
234 #define LF_OOB 2 /* out of bounds, or large unstable parameter */
|
|
235 #define LF_PF 3 /* perfect fit; interpolation; deviance=0 */
|
|
236 #define LF_NCON 4 /* not converged */
|
|
237 #define LF_NSLN 5 /* no solution - eg separation in binomial. */
|
|
238 #define LF_NOPT 6 /* no or insufficient points with non-zero wt */
|
|
239 #define LF_INFA 7 /* initial failure e.g. log(0) */
|
|
240 #define LF_DEMP 10 /* density -- empty integration region */
|
|
241 #define LF_XOOR 11 /* density -- fit point outside xlim region */
|
|
242 #define LF_DNOP 12 /* density version of 6 */
|
|
243 #define LF_BADP 81 /* bad parameters e.g. neg prob for binomial */
|
|
244 #define LF_LNK 82 /* invalid link */
|
|
245 #define LF_FAM 83 /* invalid family */
|
|
246 #define LF_ERR 99 /* error */
|
|
247
|
|
248 #define STANGL 4
|
|
249 #define STLEFT 5
|
|
250 #define STRIGH 6
|
|
251 #define STCPAR 7
|
|
252
|
|
253 /*
|
|
254 * Integration type mi[MIT] for integration in
|
|
255 * density estimation.
|
|
256 */
|
|
257 #define INVLD 0
|
|
258 #define IDEFA 1
|
|
259 #define IMULT 2
|
|
260 #define IPROD 3
|
|
261 #define IMLIN 4
|
|
262 #define IHAZD 5
|
|
263 #define ISPHR 6
|
|
264 #define IMONT 7
|
|
265
|
|
266 /* density.c */
|
|
267 extern int densinit(), likeden(), deitype();
|
|
268 extern int fact[];
|
|
269 extern void prodintresp(), prresp();
|
|
270 extern int de_mint, de_itype, de_renorm;
|
|
271
|
|
272 /* dens_haz.c */
|
|
273 extern void haz_init();
|
|
274 extern int hazint();
|
|
275
|
|
276 /* dens_odi.c */
|
|
277 extern int onedint();
|
|
278 extern void recurint();
|
|
279
|
|
280 /* famquant.c */
|
|
281 extern void lfquantile();
|
|
282
|
|
283 /* family.c */
|
|
284 extern int lffamily(), lflink();
|
|
285 extern int links(), stdlinks(), defaultlink(), validlinks();
|
|
286 extern double b2(), b3(), b4(), lf_link(), invlink();
|
|
287 extern void setfamily();
|
|
288
|
|
289 /* lf_adap.c */
|
|
290 extern int alocfit(), lfacri();
|
|
291
|
|
292 /* lf_fitfun.c */
|
|
293 extern void fitfun(), makecfn(), designmatrix();
|
|
294 extern int calcp(), coefnumber();
|
|
295
|
|
296 /* lf_nbhd.c */
|
|
297 extern double kordstat(), rho();
|
|
298 extern void nbhd();
|
|
299
|
|
300 /* lf_robust.c */
|
|
301 extern double median();
|
|
302 extern void lf_robust();
|
|
303
|
|
304 /* lfstr.c */
|
|
305 extern int pmatch();
|
|
306
|
|
307 /* lf_vari.c */
|
|
308 extern void lf_vcov(), comp_vari(), local_df();
|
|
309
|
|
310 /* lf_wdiag.c */
|
|
311 extern int wdiag(), wdiagp();
|
|
312
|
|
313 /* locfit.c */
|
|
314 extern int locfit(), des_reqd(), des_reqi(), likereg();
|
|
315 extern int reginit();
|
|
316 extern void lfdata_init(), smpar_init(), deriv_init(), des_init(), lfiter();
|
|
317 extern int lf_maxit, lf_debug;
|
|
318 extern void lf_status_msg();
|
|
319
|
|
320 /* minmax.c */
|
|
321 extern double ipower(), minmax();
|
|
322
|
|
323 /* weight.c */
|
|
324 extern int lfkernel(), lfketype();
|
|
325 extern double W(), weight(), weightd(), Wd(), Wdd(), wint();
|
|
326 extern double Wconv(), Wconv1(), Wconv4(), Wconv5(), Wconv6(), Wikk();
|
|
327 extern int iscompact(), wtaylor();
|
|
328
|
|
329 #endif /* define I_LOCF_H */
|