1 /*
2 * Copyright (c) 1996-2001 Lucent Technologies.
3 * See README file for details.
4 *
5 *
6 *
7 * setstrval() is a function for converting string arguments to Locfit's
8 * numeric values. A typical call will be setstrval(lf.mi,MKER,"gauss").
9 *
10 * components that can be set in this manner are
11 * MKER (weight function)
12 * MKT (kernel type -- spherical or product)
13 * MTG (local likelihood family)
14 * MLINK (link function)
15 * MIT (integration type for density estimation)
16 * MEV (evaluation structure)
17 * MACRI (adaptive criterion)
18 *
19 * INT ppwhat(str) interprets the preplot what argument.
20 * INT restyp(str) interprets the residual type argument.
21 *
22 */
23
24 #include "local.h"
25
26 static char *famil[17] =
27 { "density", "ate", "hazard", "gaussian", "binomial",
28 "poisson", "gamma", "geometric", "circular", "obust", "huber",
29 "weibull", "cauchy","probab", "logistic", "nbinomial", "vonmises" };
30 static int fvals[17] =
31 { TDEN, TRAT, THAZ, TGAUS, TLOGT,
32 TPOIS, TGAMM, TGEOM, TCIRC, TROBT, TROBT,
33 TWEIB, TCAUC, TPROB, TLOGT, TGEOM, TCIRC };
34
lffamily(z)35 INT lffamily(z)
36 char *z;
37 { INT quasi, robu, f;
38 quasi = robu = 0;
39 while ((z[0]=='q') | (z[0]=='r'))
40 { quasi |= (z[0]=='q');
41 robu |= (z[0]=='r');
42 z++;
43 }
44 f = pmatch(z,famil,fvals,16,-1);
45 if ((z[0]=='o') | (z[0]=='a')) robu = 0;
46 if (f==-1)
47 { WARN(("unknown family %s",z));
48 f = TGAUS;
49 }
50 if (quasi) f += 64;
51 if (robu) f += 128;
52 return(f);
53 }
54
getlffam(z,x)55 void getlffam(z,x)
56 char **z;
57 INT *x;
58 { *x = lffamily(z[0]);
59 }
60
61 static char *wfuns[13] = {
62 "rectangular", "epanechnikov", "bisquare", "tricube",
63 "triweight", "gaussian", "triangular", "ququ",
64 "6cub", "minimax", "exponential", "maclean", "parametric" };
65 static int wvals[13] = { WRECT, WEPAN, WBISQ, WTCUB,
66 WTRWT, WGAUS, WTRIA, WQUQU, W6CUB, WMINM, WEXPL, WMACL, WPARM };
67
68 static char *ktype[3] = { "spherical", "product", "center" };
69 static int kvals[3] = { KSPH, KPROD, KCE };
70
71 static char *ltype[8] = { "default", "canonical", "identity", "log",
72 "logi", "inverse", "sqrt", "arcsin" };
73 static int lvals[8] = { LDEFAU, LCANON, LIDENT, LLOG,
74 LLOGIT, LINVER, LSQRT, LASIN };
75
76 static char *etype[9] = { "tree", "phull", "data", "grid", "kdtree",
77 "kdcenter", "cross", "xbar", "none" };
78 static int evals[9] = { ETREE, EPHULL, EDATA, EGRID, EKDTR,
79 EKDCE, ECROS, EXBAR, ENONE };
80
81 static char *itype[6] = { "default", "multi", "product", "mlinear",
82 "hazard", "monte" };
83 static int ivals[6] = { IDEFA, IMULT, IPROD, IMLIN, IHAZD, IMONT };
84
85 static char *atype[5] = { "none", "cp", "ici", "mindex", "ok" };
86 static int avals[5] = { ANONE, ACP, AKAT, AMDI, AOK };
87
setstrval(mi,v,z)88 void setstrval(mi,v,z)
89 INT *mi, v;
90 char *z;
91 {
92 switch(v)
93 { case MKER:
94 mi[v] = pmatch(z, wfuns, wvals, 13, WTCUB);
95 return;
96
97 case MKT:
98 mi[v] = pmatch(z, ktype, kvals, 3, KSPH);
99 return;
100
101 case MTG:
102 mi[v] = lffamily(z);
103 return;
104
105 case MLINK:
106 mi[v] = pmatch(z, ltype, lvals, 8, LDEFAU);
107 return;
108
109 case MIT:
110 mi[v] = pmatch(z, itype, ivals, 6, IDEFA);
111 return;
112
113 case MEV:
114 mi[v] = pmatch(z, etype, evals, 9, ETREE);
115 return;
116
117 case MACRI:
118 mi[v] = pmatch(z, atype, avals, 5, ANONE);
119 return;
120 }
121
122 WARN(("setstrval: invalid value %d",v));
123 return;
124 }
125
126 static char *rtype[8] = { "deviance", "d2", "pearson", "raw",
127 "ldot", "lddot", "fit", "mean" };
128 static int rvals[8] = { RDEV, RDEV2, RPEAR, RRAW, RLDOT, RLDDT, RFIT, RMEAN};
129
130 static char *whtyp[8] = { "coef", "nlx", "infl", "band",
131 "degr", "like", "rdf", "vari" };
132 static int whval[8] = { PCOEF, PNLX, PT0, PBAND, PDEGR, PLIK, PRDF, PVARI };
133
restyp(z)134 INT restyp(z)
135 char *z;
136 { int val;
137
138 val = pmatch(z, rtype, rvals, 8, -1);
139 if (val==-1) ERROR(("Unknown type = %s",z));
140 return((INT)val);
141 }
142
ppwhat(z)143 INT ppwhat(z)
144 char *z;
145 { int val;
146
147 val = pmatch(z, whtyp, whval, 8, -1);
148 if (val==-1) ERROR(("Unknown what = %s",z));
149 return((INT)val);
150 }
151