[r-cran-vgam] 23/63: Import Upstream version 0.8-3
Andreas Tille
tille at debian.org
Tue Jan 24 13:54:27 UTC 2017
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository r-cran-vgam.
commit e4439a6b213d43b36a25cbc61e0a72f07c5a36c7
Author: Andreas Tille <tille at debian.org>
Date: Tue Jan 24 14:16:52 2017 +0100
Import Upstream version 0.8-3
---
DESCRIPTION | 10 +-
NAMESPACE | 28 +-
NEWS | 343 +++--
R/aamethods.q | 100 +-
R/cao.R | 2 +-
R/cao.fit.q | 10 +-
R/cqo.R | 2 +-
R/cqo.fit.q | 4 +-
R/family.aunivariate.R | 68 +-
R/family.binomial.R | 445 +++---
R/family.bivariate.R | 1314 +++++++++-------
R/family.categorical.R | 91 +-
R/family.censored.R | 592 +++-----
R/family.circular.R | 22 +-
R/family.exp.R | 22 +-
R/family.extremes.R | 1380 ++++++++++-------
R/family.functions.R | 5 +-
R/family.genetic.R | 44 +-
R/family.glmgam.R | 334 +++-
R/family.loglin.R | 24 +-
R/family.mixture.R | 34 +-
R/family.nonlinear.R | 62 +-
R/family.normal.R | 1052 +++++++++----
R/family.others.R | 1946 ++++++++++++++++++++++++
R/family.positive.R | 828 +++++++---
R/family.qreg.R | 248 ++-
R/family.rcam.R | 1095 +++-----------
R/family.robust.R | 26 +-
R/family.survival.R | 265 ++--
R/family.univariate.R | 2645 +++++++++++++++++---------------
R/family.zeroinf.R | 638 ++++----
R/links.q | 418 +++---
R/model.matrix.vglm.q | 2 +
R/plot.vglm.q | 216 +--
R/qrrvglm.control.q | 8 +-
R/qtplot.q | 363 ++---
R/rrvglm.R | 2 +-
R/rrvglm.fit.q | 64 +-
R/summary.vlm.q | 16 +-
R/uqo.R | 4 +-
R/vgam.R | 2 +-
R/vgam.control.q | 80 +-
R/vgam.fit.q | 32 +-
R/vglm.R | 93 +-
R/vglm.control.q | 66 +-
R/vglm.fit.q | 152 +-
R/vlm.R | 2 +-
data/alclevels.R | 22 -
data/alclevels.rda | Bin 0 -> 562 bytes
data/alcoff.R | 22 -
data/alcoff.rda | Bin 0 -> 557 bytes
data/auuc.R | 6 -
data/auuc.rda | Bin 0 -> 243 bytes
data/azprocedure.R | 2289 ----------------------------
data/azprocedure.rda | Bin 0 -> 18474 bytes
data/backPain.R | 5 -
data/backPain.rda | Bin 0 -> 603 bytes
data/backPain.txt | 102 --
data/backPain.txt.gz | Bin 0 -> 463 bytes
data/bminz.txt | 701 ---------
data/bminz.txt.gz | Bin 0 -> 6259 bytes
data/car.all.R | 362 -----
data/car.all.rda | Bin 0 -> 8214 bytes
data/chestnz.txt | 74 -
data/chestnz.txt.gz | Bin 0 -> 559 bytes
data/coalminers.txt | 10 -
data/coalminers.txt.gz | Bin 0 -> 151 bytes
data/crashbc.R | 18 -
data/crashbc.rda | Bin 0 -> 387 bytes
data/crashf.R | 18 -
data/crashf.rda | Bin 0 -> 353 bytes
data/crashi.R | 21 -
data/crashi.rda | Bin 0 -> 505 bytes
data/crashmc.R | 19 -
data/crashmc.rda | Bin 0 -> 397 bytes
data/crashp.R | 18 -
data/crashp.rda | Bin 0 -> 392 bytes
data/crashtr.R | 18 -
data/crashtr.rda | Bin 0 -> 375 bytes
data/enzyme.txt | 13 -
data/enzyme.txt.gz | Bin 0 -> 107 bytes
data/fibre15.rda | Bin 0 -> 245 bytes
data/fibre1dot5.rda | Bin 0 -> 296 bytes
data/gala.R | 28 -
data/gala.rda | Bin 0 -> 1045 bytes
data/gew.txt | 21 -
data/gew.txt.gz | Bin 0 -> 530 bytes
data/hspider.R | 47 -
data/hspider.rda | Bin 0 -> 1310 bytes
data/hued.rda | Bin 0 -> 410 bytes
data/huie.rda | Bin 0 -> 416 bytes
data/hunua.txt | 393 -----
data/hunua.txt.gz | Bin 0 -> 1883 bytes
data/huse.rda | Bin 0 -> 322 bytes
data/leukemia.R | 10 -
data/leukemia.rda | Bin 0 -> 326 bytes
data/lirat.txt | 59 -
data/lirat.txt.gz | Bin 0 -> 305 bytes
data/mmt.R | 328 ----
data/mmt.rda | Bin 0 -> 5973 bytes
data/nzc.txt | 27 -
data/nzc.txt.gz | Bin 0 -> 365 bytes
data/nzmarital.R | 1809 ----------------------
data/nzmarital.rda | Bin 0 -> 24966 bytes
data/olympic.txt | 88 --
data/olympic.txt.gz | Bin 0 -> 941 bytes
data/oxtemp.txt | 81 -
data/oxtemp.txt.gz | Bin 0 -> 261 bytes
data/pneumo.R | 6 -
data/pneumo.rda | Bin 0 -> 263 bytes
data/rainfall.R | 1000 ------------
data/rainfall.rda | Bin 0 -> 17135 bytes
data/ruge.R | 5 -
data/ruge.rda | Bin 0 -> 255 bytes
data/toxop.R | 11 -
data/toxop.rda | Bin 0 -> 465 bytes
data/ugss.rda | Bin 0 -> 15165 bytes
data/usagrain.txt | 143 --
data/uscrime.rda | Bin 0 -> 3967 bytes
data/usgrain.txt.gz | Bin 0 -> 1078 bytes
data/venice.R | 50 -
data/venice.rda | Bin 0 -> 1209 bytes
data/venice90.rda | Bin 0 -> 13036 bytes
data/waitakere.txt | 580 -------
data/waitakere.txt.gz | Bin 0 -> 3090 bytes
data/wffc.R | 2924 ------------------------------------
data/wffc.indiv.R | 94 --
data/wffc.indiv.rda | Bin 0 -> 2864 bytes
data/wffc.nc.R | 351 -----
data/wffc.nc.rda | Bin 0 -> 5671 bytes
data/wffc.rda | Bin 0 -> 13544 bytes
data/wffc.teams.R | 14 -
data/wffc.teams.rda | Bin 0 -> 540 bytes
inst/doc/categoricalVGAM.pdf | Bin 2955340 -> 2773966 bytes
man/CommonVGAMffArguments.Rd | 32 +-
man/Inv.gaussian.Rd | 5 +-
man/Rcam.Rd | 66 +-
man/VGAM-package.Rd | 8 +
man/alaplace3.Rd | 12 +-
man/amh.Rd | 6 +-
man/amlexponential.Rd | 4 +-
man/amlnormal.Rd | 4 +-
man/amlpoisson.Rd | 4 +-
man/benfUC.Rd | 2 +-
man/benini.Rd | 4 +-
man/beniniUC.Rd | 27 +-
man/beta.ab.Rd | 14 +-
man/betabin.ab.Rd | 53 +-
man/betabinUC.Rd | 36 +-
man/betabinomial.Rd | 45 +-
man/betaff.Rd | 34 +-
man/bilogis4UC.Rd | 35 +-
man/bilogistic4.Rd | 24 +-
man/binom2.or.Rd | 8 +-
man/binom2.rho.Rd | 6 +-
man/binomialff.Rd | 1 +
man/binormal.Rd | 105 ++
man/bisa.Rd | 6 +-
man/bivgamma.mckay.Rd | 4 +-
man/borel.tanner.Rd | 4 +-
man/calibrate.qrrvglm.control.Rd | 16 +-
man/cao.control.Rd | 12 +-
man/cauchy.Rd | 10 +-
man/{cnormal1.Rd => cennormal1.Rd} | 54 +-
man/cenpoisson.Rd | 93 +-
man/chisq.Rd | 26 +-
man/crashes.Rd | 17 +-
man/dcennormal1.Rd | 101 ++
man/dcnormal1.Rd | 104 --
man/erlang.Rd | 4 +-
man/expgeometric.Rd | 33 +-
man/expgeometricUC.Rd | 79 +
man/explogarithmic.Rd | 91 ++
man/explogarithmicUC.Rd | 79 +
man/exponential.Rd | 1 +
man/exppoisson.Rd | 98 ++
man/exppoissonUC.Rd | 73 +
man/felix.Rd | 4 +-
man/fff.Rd | 4 +-
man/fgm.Rd | 6 +-
man/fnormal1.Rd | 4 +-
man/frechet.Rd | 200 +--
man/frechetUC.Rd | 51 +-
man/freund61.Rd | 27 +-
man/gamma2.Rd | 4 +-
man/gaussianff.Rd | 1 +
man/gengammaUC.Rd | 3 +
man/genpoisson.Rd | 10 +-
man/genrayleigh.Rd | 15 +-
man/genrayleighUC.Rd | 38 +-
man/geometric.Rd | 4 +-
man/gev.Rd | 112 +-
man/gevUC.Rd | 45 +-
man/gpd.Rd | 54 +-
man/gpdUC.Rd | 47 +-
man/grc.Rd | 55 +-
man/gumbel.Rd | 81 +-
man/gumbelIbiv.Rd | 6 +-
man/gumbelUC.Rd | 33 +-
man/guplot.Rd | 47 +-
man/huber.Rd | 6 +-
man/hued.Rd | 55 +
man/huggins91.Rd | 181 +++
man/huggins91UC.Rd | 127 ++
man/huie.Rd | 59 +
man/huse.Rd | 73 +
man/inv.gaussianff.Rd | 11 +-
man/koenker.Rd | 4 +-
man/laplace.Rd | 6 +-
man/lgammaUC.Rd | 7 +-
man/lgammaff.Rd | 28 +-
man/logff.Rd | 31 +-
man/logistic.Rd | 6 +-
man/loglaplace.Rd | 6 +-
man/loglinb2.Rd | 27 +-
man/loglinb3.Rd | 37 +-
man/lqnorm.Rd | 8 +-
man/meplot.Rd | 128 +-
man/micmen.Rd | 4 +-
man/moffset.Rd | 129 +-
man/morgenstern.Rd | 6 +-
man/multinomial.Rd | 8 +-
man/negbinomial.Rd | 178 ++-
man/normal1.Rd | 12 +-
man/notdocumentedyet.Rd | 28 +-
man/pareto1.Rd | 54 +-
man/paretoIV.Rd | 17 +-
man/plackett.Rd | 4 +-
man/plotrcam0.Rd | 225 +--
man/poissonff.Rd | 4 +-
man/poissonp.Rd | 4 +-
man/posbinomUC.Rd | 18 +-
man/posbinomial.Rd | 46 +-
man/posnegbinomial.Rd | 21 +-
man/posnormUC.Rd | 45 +-
man/posnormal1.Rd | 29 +-
man/pospoisson.Rd | 4 +-
man/propodds.Rd | 14 +-
man/prplot.Rd | 19 +-
man/qrrvglm.control.Rd | 4 +-
man/rayleigh.Rd | 10 +-
man/recexp1.Rd | 6 +-
man/recnormal1.Rd | 47 +-
man/rlplot.egev.Rd | 40 +-
man/rrar.Rd | 63 +-
man/rrvglm-class.Rd | 2 +-
man/rrvglm.Rd | 4 +-
man/simplex.Rd | 4 +-
man/studentt.Rd | 8 +-
man/tobit.Rd | 197 ++-
man/tobitUC.Rd | 90 ++
man/tparetoUC.Rd | 41 +-
man/ugss.Rd | 98 ++
man/undocumented-methods.Rd | 3 +
man/usagrain.Rd | 42 -
man/uscrime.Rd | 81 +
man/usgrain.Rd | 48 +
man/venice.Rd | 144 +-
man/vgam-class.Rd | 2 +-
man/vgam.control.Rd | 6 +-
man/vglm-class.Rd | 2 +-
man/vglm.control.Rd | 8 +-
man/vonmises.Rd | 12 +-
man/weibull.Rd | 38 +-
man/zanegbinUC.Rd | 19 +-
man/zanegbinomial.Rd | 23 +-
man/zapoisUC.Rd | 15 +-
man/zapoisson.Rd | 10 +-
man/zero.Rd | 27 +-
man/zeta.Rd | 53 +-
man/zetaUC.Rd | 20 +-
man/zetaff.Rd | 30 +-
man/zibinomUC.Rd | 46 +-
man/zibinomial.Rd | 26 +-
man/zinegbinUC.Rd | 37 +-
man/zinegbinomial.Rd | 47 +-
man/zipebcom.Rd | 46 +-
man/zipf.Rd | 15 +-
man/zipfUC.Rd | 14 +-
man/zipoisUC.Rd | 18 +-
man/zipoisson.Rd | 19 +-
281 files changed, 12922 insertions(+), 19489 deletions(-)
diff --git a/DESCRIPTION b/DESCRIPTION
index 1ba07f4..fc69dd2 100755
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,10 +1,10 @@
Package: VGAM
-Version: 0.8-2
-Date: 2011-02-09
+Version: 0.8-3
+Date: 2011-06-17
Title: Vector Generalized Linear and Additive Models
Author: Thomas W. Yee <t.yee at auckland.ac.nz>
Maintainer: Thomas Yee <t.yee at auckland.ac.nz>
-Depends: R (>= 2.8.0), splines, methods, stats, stats4
+Depends: R (>= 2.10.0), splines, methods, stats, stats4
Description: Vector generalized linear and additive models, and
associated models (Reduced-Rank VGLMs, Quadratic RR-VGLMs,
Reduced-Rank VGAMs). This package fits many models and
@@ -15,6 +15,6 @@ License: GPL-2
URL: http://www.stat.auckland.ac.nz/~yee/VGAM
LazyLoad: yes
LazyData: yes
-Packaged: 2011-02-09 03:49:01 UTC; tyee001
+Packaged: 2011-06-17 04:20:31 UTC; tyee001
Repository: CRAN
-Date/Publication: 2011-02-09 10:10:07
+Date/Publication: 2011-06-17 08:34:03
diff --git a/NAMESPACE b/NAMESPACE
index e9339ef..0bcb942 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -14,10 +14,17 @@ useDynLib(VGAM)
+
export(confint_rrnb, confint_nb1)
export(vcovrrvglm)
+export(huggins91, dhuggins91, rhuggins91)
+
+
+
+
+
export(
Build.terms.vlm,
@@ -35,7 +42,9 @@ variable.namesvlm
export(expgeometric, dexpgeom, pexpgeom, qexpgeom, rexpgeom,
-genrayleigh, dgenray, pgenray, qgenray, rgenray)
+genrayleigh, dgenray, pgenray, qgenray, rgenray,
+exppoisson, dexppois, pexppois, qexppois, rexppois,
+explogarithmic, dexplog, pexplog, qexplog, rexplog)
@@ -66,6 +75,12 @@ get.smart, get.smart.prediction,
put.smart)
+
+export(
+dbinorm, binormal)
+
+
+
export( bs, ns, scale.default, poly )
@@ -75,7 +90,7 @@ fill, fill1, fill2, fill3,
amh, damh, pamh, ramh,
bivgamma.mckay,
freund61,
-frechet2, frechet3, dfrechet, pfrechet, qfrechet, rfrechet,
+frechet2, dfrechet, pfrechet, qfrechet, rfrechet,
frank, dfrank, pfrank, rfrank,
plackett, dplack, pplack, rplack,
benini, dbenini, pbenini, qbenini, rbenini,
@@ -93,9 +108,9 @@ dparetoI, qparetoI, rparetoI, pparetoI,
cgumbel, egumbel, gumbel,
dgumbel, pgumbel, qgumbel, rgumbel,
fnormal1, dfnorm, pfnorm, qfnorm, rfnorm,
-cnormal1, dcnormal1,
+cennormal1, dcennormal1,
recnormal1, recexp1,
-crayleigh, rayleigh, drayleigh, prayleigh, qrayleigh, rrayleigh,
+cenrayleigh, rayleigh, drayleigh, prayleigh, qrayleigh, rrayleigh,
drice, rrice, riceff,
dskellam, rskellam, skellam,
inv.gaussianff, dinv.gaussian, pinv.gaussian, rinv.gaussian, wald,
@@ -201,6 +216,7 @@ summary.rrvglm, summary.uqo, summaryvgam,
summaryvglm, summaryvlm, s.vam, terms.vlm,
theta2eta, Tol.Coef.qrrvglm, Tol.Coef.uqo, Tol.qrrvglm, Tol.uqo,
triangle, dtriangle, ptriangle, qtriangle, rtriangle,
+vglm.fit,
vglm.garma.control, vglm.multinomial.control,
vglm.multinomial.deviance.control, vglm.vcategorical.control,
vlm, vlm.control,
@@ -361,7 +377,9 @@ deexp, peexp, qeexp, reexp)
export(
meplot, meplot.default, meplot.vlm,
guplot, guplot.default, guplot.vlm,
-negbinomial, normal1, tobit, Opt,
+negbinomial, polya, normal1,
+tobit, dtobit, ptobit, qtobit, rtobit,
+Opt,
persp.qrrvglm, plotdeplot.lmscreg, plotqrrvglm, plotqtplot.lmscreg,
plotvgam.control, plotvgam,
cenpoisson,
diff --git a/NEWS b/NEWS
index 7ef7c77..b391866 100755
--- a/NEWS
+++ b/NEWS
@@ -1,17 +1,60 @@
- **************************************************
- * *
- * 0.8 SERIES NEWS *
- * *
- **************************************************
+ **************************************************
+ * *
+ * 0.8 SERIES NEWS *
+ * *
+ **************************************************
+
+
+
+ CHANGES IN VGAM VERSION 0.8-3
+
+NEW FEATURES
+
+ o Argument names changed (Ouch!):
+ 1. 'method.init' renamed to 'imethod';
+ 2. 'k' renamed to 'size' in negbinomial(), zanegbinomial(),
+ posnegbinomial(), and zinegbinomial():
+ e.g., 'lk' renamed to 'lsize', 'ik' renamed to 'isize', etc.
+ o New data sets: hued, huie, huse, ugss, uscrime;
+ usagrain renamed to usgrain.
+ o The "prior.weights" slot is now a "matrix", not "numeric".
+ o [dpr]betabin.ab() now handles size = 0. Thanks to Robert Wolpert
+ for picking up this bug.
+ o New VGAM family functions:
+ [d]binormal(), [dr]huggins91() but this is not working properly,
+ [dpqr]explogarithmic(), polya().
+ o New functions: [dpqr]tobit().
+ o Improved family functions: tobit() implements the proper EIM for the
+ standard model, dcennormal1() has some new arguments [and renamed],
+ cennormal1(), cenrayleigh() renamed.
+ o VGAM now depends on R >= 2.10.0.
+ o Rcam(), moffset(), etc. for RCAMs have been improved and modified.
+ o VGAM family functions currently withdrawn: frechet3().
+ o Tested ok on R 2.13.0.
+
+
+BUG FIXES
+
+ o tobit()@loglikelihood had omitted the constant in dnorm().
+ Also, tobit() uses simulated Fisher scoring (for nonstandard model).
+ o moffset() was buggy.
+ o ABO() is a little more robust.
+ o dirichlet()@loglikelihood miscalculated.
+ Ditto for gaussian()@loglikelihood (constants were omitted).
+ Thanks to Arne Henningsen for picking up these bugs.
+ o zipoissonff() did not initialize correctly and labelling was wrong
+ with matrix responses.
+
+
CHANGES IN VGAM VERSION 0.8-2
NEW FEATURES
- o Objects of class "vglmff" have a "infos" slot to give
+ o Objects of class "vglmff" have a "infos" slot to give
information about the family.
- o New functions: lambertW(), rcam(), wffc.P3(), wffc.P3star(),
- confint_rrnb(), confint_nb1().
+ o New functions: lambertW(), rcam(), wffc.P3(),
+ wffc.P3star(), confint_rrnb(), confint_nb1().
o New VGAM family functions:
binom2.Rho(), [dpqr]expgeometric(),
[dpqr]genrayleigh(), [dpqr]huber(),
@@ -36,12 +79,12 @@ NEW FEATURES
2009 NZ data.
o constraints(vglmfit) now has a 'type' argument that can be fed
into the original fit (type = "lm") as the constraints argument.
- o vchol() takes drastic action to avoid infinite looping: it sets
+ o vchol() takes drastic action to avoid infinite looping: it sets
the working weights to be proportional to the order-M diagonal
matrix.
- o lognormal() and lognormal3() now have zero = 2 as the default
+ o lognormal() and lognormal3() now have zero = 2 as the default
(was zero = NULL).
- o Some variable names within grc() changed, e.g., Row. and not Row.
+ o Some variable names within grc() changed, e.g., Row. and not Row.
o The smartpred package within VGAM has updated poly(), ns(),
bs() and scale() for R version 2.12.0 (2010-10-15).
Calls to smartpredenv are now VGAM:::smartpredenv.
@@ -110,11 +153,11 @@ BUG FIXES
- **************************************************
- * *
- * 0.7 SERIES NEWS *
- * *
- **************************************************
+ **************************************************
+ * *
+ * 0.7 SERIES NEWS *
+ * *
+ **************************************************
CHANGES IN VGAM VERSION 0.7-10
@@ -150,18 +193,18 @@ BUG FIXES
NEW FEATURES
- o New functions: margeff() for marginal effects of a vglm()
+ o New functions: margeff() for marginal effects of a vglm()
"multinomial" or "cumulative" model.
- o Almost all VGAM family functions now have a "loglikelihood"
+ o Almost all VGAM family functions now have a "loglikelihood"
slot that incorporates any constants in the density function.
Hence the fitted likelihood may differ by a constant from
previous results.
In particular, models such as multinomial(), cumulative()
and binom2.or() have this new feature.
- o vglm() now has a modified 'xij' argument which implements
+ o vglm() now has a modified 'xij' argument which implements
eta-specific covariates. Usage now involves the form2' argument,
and the 'xij' argument does not interfere with constraint matrices.
- Documentation is supplied on the VGAM website, in particular,
+ Documentation is supplied on the VGAM website, in particular,
http://www.stat.auckland.ac.nz/~yee/VGAM/doc/xij.pdf
o cases.names() and variable.names() methods functions
written for vglm()/vgam() objects.
@@ -173,7 +216,7 @@ NEW FEATURES
o testf90.f90 has been renamed to testf90.f95. This may decrease
the incidences of compiler problems on some platforms (f95 seems
more popular than f90).
- o For cqo() objects: AIC(), resid() have been written.
+ o For cqo() objects: AIC(), resid() have been written.
o Improved functions: negbinomial() default initial values are
more robust to outliers in the response, betabinomial() and
betabin.ab() have better initialization and "loglikelihood"
@@ -196,9 +239,9 @@ BUG FIXES
o VGAM interferes much less in regard to generic functions
such as predict(), fitted(), resid(), wrt other packages and
also including base's lm(), glm(), etc.
- o AIC() method for rrvglm() objects was wrong (did not account
+ o AIC() method for rrvglm() objects was wrong (did not account
for argument 'Structural.zero').
- o dzibinom(log=TRUE) was wrong.
+ o dzibinom(log=TRUE) was wrong.
@@ -240,7 +283,7 @@ NEW FEATURES
The resulting usage is a more elegant.
Fitted objects have a few more slots and formulas put in set
places on the object.
- o AIC() methods functions has been modified.
+ o AIC() methods functions has been modified.
BUG FIXES
@@ -392,11 +435,11 @@ NEW FEATURES
o gpd() now does not delete any data internally. The user should
use the subset argument of vglm() and vgam() in order to select
any subset of a data frame.
- o zapoisson() has a zero argument, and this can be assigned
+ o zapoisson() has a zero argument, and this can be assigned
a negative value.
- o "partial for" is added to the ylabel of linear terms of a vgam()
+ o "partial for" is added to the ylabel of linear terms of a vgam()
object when it is plotted.
- o When a vgam() object is plotted with se=TRUE and if there are
+ o When a vgam() object is plotted with se=TRUE and if there are
linear terms then the mean of x is added to the plot (this makes
the standard error curves meet there).
o This package has been tested (somewhat) under R 2.5.0.
@@ -445,7 +488,7 @@ CHANGES
- CHANGES IN VGAM VERSION 0.7-1
+ CHANGES IN VGAM VERSION 0.7-1
NEW FEATURES
@@ -548,15 +591,15 @@ CHANGES
- **************************************************
- * *
- * 0.6 SERIES NEWS *
- * *
- **************************************************
+ **************************************************
+ * *
+ * 0.6 SERIES NEWS *
+ * *
+ **************************************************
- CHANGES IN VGAM VERSION 0.6-9
+ CHANGES IN VGAM VERSION 0.6-9
NEW FEATURES
@@ -572,17 +615,17 @@ NEW FEATURES
BUG FIXES
- o Family functions lognormal(), lognormal3() now include the
+ o Family functions lognormal(), lognormal3() now include the
1/sqrt(2*pi) constant in @loglikelihood because of its use of
dnorm(..., log=TRUE) and dlnorm(..., log=TRUE).
- o [dpqr]lognormal() withdrawn as they exist in R already.
- o Documentation for betaff() contained mistakes.
- o summary() of a betabin.ab() object used to fail.
- o The assign statement has been removed from some FORTRAN code.
+ o [dpqr]lognormal() withdrawn as they exist in R already.
+ o Documentation for betaff() contained mistakes.
+ o summary() of a betabin.ab() object used to fail.
+ o The assign statement has been removed from some FORTRAN code.
- CHANGES IN VGAM VERSION 0.6-8
+ CHANGES IN VGAM VERSION 0.6-8
NEW FEATURES
@@ -613,7 +656,7 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-7
+ CHANGES IN VGAM VERSION 0.6-7
NEW FEATURES
@@ -642,7 +685,7 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-6
+ CHANGES IN VGAM VERSION 0.6-6
NEW FEATURES
@@ -669,7 +712,7 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-5
+ CHANGES IN VGAM VERSION 0.6-5
NEW FEATURES
@@ -712,7 +755,7 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-4
+ CHANGES IN VGAM VERSION 0.6-4
NEW FEATURES
@@ -743,7 +786,7 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-3
+ CHANGES IN VGAM VERSION 0.6-3
NEW FEATURES
@@ -758,16 +801,16 @@ NEW FEATURES
- CHANGES IN VGAM VERSION 0.6-2
+ CHANGES IN VGAM VERSION 0.6-2
NEW FEATURES
- o model.frame() and model.matrix() are roughly working for
+ o model.frame() and model.matrix() are roughly working for
objects that inherit from "vlm"s, e.g., "vglm" objects.
Both of these methods functions accept a "data"
argument etc.
Also, for these, smart prediction works.
- o A methods function for the generic function weights() has
+ o A methods function for the generic function weights() has
been written for VGLM objects. It returns
either the prior or working weights.
@@ -786,43 +829,43 @@ BUG FIXES
- CHANGES IN VGAM VERSION 0.6-1
+ CHANGES IN VGAM VERSION 0.6-1
NEW FEATURES
- o New functions: cao() for "constrained additive ordination",
+ o New functions: cao() for "constrained additive ordination",
and uqo() for "unconstrained quadratic ordination".
Both of these are unfinished but will hopefully be
completed in the forseeable future.
- o The function cgo() has been renamed to cqo(). Ouch!
+ o The function cgo() has been renamed to cqo(). Ouch!
CQO stands for "constrained quadratic ordination", and is
better than the old name cgo(), for
canonical Gaussian ordination.
- o The inverse() link function has been renamed to reciprocal().
- o More documentation: loglinb2() and loglinb3().
- o zipbipp() renamed to zapoisson(), where "za" stand for
+ o The inverse() link function has been renamed to reciprocal().
+ o More documentation: loglinb2() and loglinb3().
+ o zipbipp() renamed to zapoisson(), where "za" stand for
"zero-altered". This is more in line with the literature.
New families: zanegbin.mu, positive.negbin.mu.
New random variates: rposnegbin.mu, rpospois.
- o negbin.mu() works now for cgo(). The subsequent methods
+ o negbin.mu() works now for cgo(). The subsequent methods
functions have been adapted to work on it too.
However, negbin.mu() is not recommended because maximum
likelihood estimation of the index parameter is fraught
numerically. It is better to use quasipoissonff().
- o cgo() now uses the function .Init.Poisson.CGO() to obtain
+ o cgo() now uses the function .Init.Poisson.CGO() to obtain
initial values for the canonical coefficients, C.
The argument Use.Init.Poisson.CGO in qrrvglm.control()
now controls this feature.
- o Lazy loading has been enabled for the VGAM package.
- o Name spaces has been introduced into the VGAM package.
- The consequencies of this might be far reaching for
+ o Lazy loading has been enabled for the VGAM package.
+ o Name spaces has been introduced into the VGAM package.
+ The consequencies of this might be far reaching for
code heavily based on the internals of the VGAM package.
- o The application of name spaces means "ff" can be dropped
+ o The application of name spaces means "ff" can be dropped
from certain family functions. In particular, poisson() can
be used instead of poissonff(), and binomial() instead
of binomialff(). Ditto for quasipoissonff() and
quasibinomialff().
- o names.of() changed to namesof(). Many other function names
+ o names.of() changed to namesof(). Many other function names
have been changed, particularly those of the S3 classes
such as coef. something, e.g., coef.vlm to coefvlm.
In general, S3 methods functions such as print.summary.vlm have
@@ -841,53 +884,53 @@ BUG FIXES
- **************************************************
- * *
- * 0.5 SERIES NEWS *
- * *
- **************************************************
+ **************************************************
+ * *
+ * 0.5 SERIES NEWS *
+ * *
+ **************************************************
- CHANGES IN VGAM VERSION 0.5-24
+ CHANGES IN VGAM VERSION 0.5-24
NEW FEATURES
- o zipbipp() and zipoissonX() are new alternatives to yip88().
+ o zipbipp() and zipoissonX() are new alternatives to yip88().
They fit a zero-inflated Poisson distribution.
Both can handle covariates for both parameters (p0 or
phi, and lambda.)
- zipbipp() is recommended over the others.
+ zipbipp() is recommended over the others.
zipoissonX() is experimental at this stage
and should be used with caution.
rpospois() is new.
- o More documentation: rhobit and binom2.rho.
- o binom2.or() now has lp1 and lp2 arguments, which allow
+ o More documentation: rhobit and binom2.rho.
+ o binom2.or() now has lp1 and lp2 arguments, which allow
a different link function for each of the two marginal
probabilities.
- o bratt() is a new family function. It fits the Bradley Terry
+ o bratt() is a new family function. It fits the Bradley Terry
model with ties.
- o flush.console() is used if it exists. This will make
+ o flush.console() is used if it exists. This will make
Windows version more nicer for large data sets and when
trace=TRUE is used.
- o wweights() extracts the working weights of an object.
+ o wweights() extracts the working weights of an object.
Used to be called vweights().
- CHANGES IN VGAM VERSION 0.5-23
+ CHANGES IN VGAM VERSION 0.5-23
NEW FEATURES
- o The package works under the latest version, viz. 2.0.0.
- There are fewer warning messages when checking :)
- o persp() for CGO objects now handles Rank=1 models.
+ o The package works under the latest version, viz. 2.0.0.
+ There are fewer warning messages when checking :)
+ o persp() for CGO objects now handles Rank=1 models.
- CHANGES IN VGAM VERSION 0.5-22
+ CHANGES IN VGAM VERSION 0.5-22
BUG FIXES
@@ -895,12 +938,12 @@ BUG FIXES
NEW FEATURES
- o demo files now are avaible for VGAM. These include lmsqreg,
+ o demo files now are avaible for VGAM. These include lmsqreg,
distributions, and cgo. More will be added later.
- CHANGES IN VGAM VERSION 0.5-21
+ CHANGES IN VGAM VERSION 0.5-21
BUG FIXES
@@ -911,16 +954,16 @@ BUG FIXES
NEW FEATURES
- o cgo(..., FastAlgorithm=TRUE) has been fined-tuned to give
+ o cgo(..., FastAlgorithm=TRUE) has been fined-tuned to give
greater speed and accuracy.
- o lms.yjn() uses FORTRAN code to implement the Gauss-Legendre
+ o lms.yjn() uses FORTRAN code to implement the Gauss-Legendre
algorithm. This results in greater accuracy.
- o More documentation, especially for family functions for
+ o More documentation, especially for family functions for
extreme values modelling.
- CHANGES IN VGAM VERSION 0.5-20
+ CHANGES IN VGAM VERSION 0.5-20
BUG FIXES
@@ -930,16 +973,16 @@ BUG FIXES
NEW FEATURES
- o persp.qrrvglm() has been written to apply persp() to
+ o persp.qrrvglm() has been written to apply persp() to
a rank-2 CGO model.
- o cgo(..., FastAlgorithm=TRUE) now has a logical argument
+ o cgo(..., FastAlgorithm=TRUE) now has a logical argument
GradientFunction, which if TRUE (default), computes the
derivatives by using finite-difference approximations.
The default will cause the speed to generally increase.
- CHANGES IN VGAM VERSION 0.5-19
+ CHANGES IN VGAM VERSION 0.5-19
BUG FIXES
@@ -948,40 +991,40 @@ BUG FIXES
NEW FEATURES
- o trplot() is a new generic function, and for objects of
+ o trplot() is a new generic function, and for objects of
class "qrrvglm" (a cgo() object), it produces a trajectory plot
for species.
- o vcov.qrrvglm() now computes standard errors and returns the
+ o vcov.qrrvglm() now computes standard errors and returns the
variance-covariance matrix for rank-1 QRR-VGLMs.
- o A new fast algorithm is implemented for cgo(..., FastAlgorithm=TRUE)
+ o A new fast algorithm is implemented for cgo(..., FastAlgorithm=TRUE)
which only works under windows. It is a new undocumented algorithm.
- o New family functions: lognormal(), lognormal3(), weibull().
- o New family functions: genbetaII(), betaII(), sinmad(), dagum(),
+ o New family functions: lognormal(), lognormal3(), weibull().
+ o New family functions: genbetaII(), betaII(), sinmad(), dagum(),
lomax(), invlomax(), fisk(), invparalogistic(), paralogistic().
Additionally, d*, r* p* and q* forms of the
density/random-generation etc. functions for all of these
except for betaII and genbetaII.
- o New link function for (0,1) parameters: tanl() for tan link.
+ o New link function for (0,1) parameters: tanl() for tan link.
It has a heavier tail and corresponds to a Cauchy distribution
(cf. probit for normal).
- o New family function: brat() for the Bradley Terry model
+ o New family function: brat() for the Bradley Terry model
(intercept model only).
- CHANGES IN VGAM VERSION 0.5-18
+ CHANGES IN VGAM VERSION 0.5-18
NEW FEATURES
- o I've changed deplot.lmscreg() so that the "at" argument is now
+ o I've changed deplot.lmscreg() so that the "at" argument is now
"y.arg", and the density is returned with name "density" instead
of "y". That is, "at" is now "y", and "y" is now "density".
- o lvplot.rrvglm() and biplot.rrvglm() have been merged and are now
+ o lvplot.rrvglm() and biplot.rrvglm() have been merged and are now
equivalent.
- CHANGES IN VGAM VERSION 0.5-17
+ CHANGES IN VGAM VERSION 0.5-17
BUG FIXES
@@ -990,39 +1033,39 @@ BUG FIXES
NEW FEATURES
- o Updated to work under R 1.8.1
- o logLik() and AIC() methods functions supported for many VGAM objects.
- o lms.bcn.control(), lms.bcg.control(), lms.yjn.control() now
+ o Updated to work under R 1.8.1
+ o logLik() and AIC() methods functions supported for many VGAM objects.
+ o lms.bcn.control(), lms.bcg.control(), lms.yjn.control() now
have trace=TRUE because monitoring LMS quantile regression models
is a good idea.
- o lms.bcn(), lms.bcg(), lms.yjn() now improved.
+ o lms.bcn(), lms.bcg(), lms.yjn() now improved.
- CHANGES IN VGAM VERSION 0.5-16
+ CHANGES IN VGAM VERSION 0.5-16
BUG FIXES
o biplot.rrvglm() had a internal bug with @C.
- o Runs under R 1.8.0 now, having a fix with "qr" slot.
- o etastart, coefstart, mustart arguments were not functional in vgam().
- o vchol() did not replace the correct elements; sometimes the index
+ o Runs under R 1.8.0 now, having a fix with "qr" slot.
+ o etastart, coefstart, mustart arguments were not functional in vgam().
+ o vchol() did not replace the correct elements; sometimes the index
was out of subscript range.
- o residuals.vlm() tried to evaluate a deviance slot in a "vglmff" object
+ o residuals.vlm() tried to evaluate a deviance slot in a "vglmff" object
even when it was empty.
- o Documentation links to functions in other packages now work.
+ o Documentation links to functions in other packages now work.
NEW FEATURES
- o lvplot.qrrvglm() has been renamed biplot.qrrvglm().
+ o lvplot.qrrvglm() has been renamed biplot.qrrvglm().
Argument Equal.tolerances changed to EqualTolerances.
Argument Circular changed to ITolerances.
rrvglm.control() now split into qrrvglm.control() and itself.
- o cgo() now performs canonical Gaussian ordination.
+ o cgo() now performs canonical Gaussian ordination.
- CHANGES IN VGAM VERSION 0.5-15
+ CHANGES IN VGAM VERSION 0.5-15
BUG FIXES
@@ -1031,14 +1074,14 @@ BUG FIXES
NEW FEATURES
- o gco() is now an easier interface for fitting Gaussian canonical
+ o gco() is now an easier interface for fitting Gaussian canonical
ordination models. gco(...) is essentially rrvglm(..., Quadratic=TRUE).
- o Documentation for deplot.lmscreg(), qtplot.lmscreg(), cdf.lmscreg()
+ o Documentation for deplot.lmscreg(), qtplot.lmscreg(), cdf.lmscreg()
and related functions. Also for positive.poisson(),
positive.binomial() and yip88().
- o lvplot.qrrvglm() improved to handle non-diagonal tolerance matrices,
+ o lvplot.qrrvglm() improved to handle non-diagonal tolerance matrices,
and a new Rotate option is available for QRR-VGLMs.
- o By default, QRR-VGLMs now have the constraint that the latent
+ o By default, QRR-VGLMs now have the constraint that the latent
variables are uncorrelated and have unit variances, i.e.,
their variance-covariance matrix is diag(Rank).
Also, the Crow1positive argument allows ordinations to be reflected
@@ -1046,7 +1089,7 @@ NEW FEATURES
- CHANGES IN VGAM VERSION 0.5-14
+ CHANGES IN VGAM VERSION 0.5-14
BUG FIXES
@@ -1057,24 +1100,24 @@ BUG FIXES
NEW FEATURES
- o install.packages("VGAM", CRAN="http://www.stat.auckland.ac.nz/~yee")
+ o install.packages("VGAM", CRAN="http://www.stat.auckland.ac.nz/~yee")
now works for PC and Linux/Unix, i.e., the distribution of the
VGAM package allows for this type of download.
- o poissonff(), quasipoissonff(), binomialff() and
+ o poissonff(), quasipoissonff(), binomialff() and
quasibinomialff() now handle multiple dispersion parameters when
mv=TRUE and onedpar=FALSE.
- o Generic function predictx(), with methods function for "qrrvglm"
+ o Generic function predictx(), with methods function for "qrrvglm"
objects. This solves (with limited functionality) the calibration
problem.
- o predict.qrrvglm() and predict.rrvglm() written (but don't work 100%)
- o Coef.rrvglm() now returns an S4 object, which can be printed nicely.
- o summary.qrrvglm() has been improved.
- o Documentation for poissonff(), quasipoissonff(), binomialff() and
+ o predict.qrrvglm() and predict.rrvglm() written (but don't work 100%)
+ o Coef.rrvglm() now returns an S4 object, which can be printed nicely.
+ o summary.qrrvglm() has been improved.
+ o Documentation for poissonff(), quasipoissonff(), binomialff() and
quasibinomialff().
- CHANGES IN VGAM VERSION 0.5-13
+ CHANGES IN VGAM VERSION 0.5-13
BUG FIXES
@@ -1082,14 +1125,14 @@ BUG FIXES
NEW FEATURES
- o Documentation for lms.bcn(), lms.bcg(), lms.yjn(), and bmi.
- Additionally, the overall documentation has been improved
+ o Documentation for lms.bcn(), lms.bcg(), lms.yjn(), and bmi.
+ Additionally, the overall documentation has been improved
throughout.
- o print.Coef.qrrvglm prints the contents of Coef(qrrvglm.object)
- in a nicer format. It uses S4 features.
+ o print.Coef.qrrvglm prints the contents of Coef(qrrvglm.object)
+ in a nicer format. It uses S4 features.
- CHANGES IN VGAM VERSION 0.5-12
+ CHANGES IN VGAM VERSION 0.5-12
BUG FIXES
@@ -1100,13 +1143,13 @@ BUG FIXES
NEW FEATURES
- o documentation for beta2(), and dirichlet().
- o Easier installation; use something like
+ o documentation for beta2(), and dirichlet().
+ o Easier installation; use something like
"R CMD INSTALL -l ./myRlibs VGAM_0.5-12.tar.gz"
- for a local library.
+ for a local library.
- CHANGES IN VGAM VERSION 0.5-11
+ CHANGES IN VGAM VERSION 0.5-11
BUG FIXES
@@ -1115,12 +1158,12 @@ BUG FIXES
NEW FEATURES
- o levy() added, plus grc() documentation.
- o constraints added to binomialff() and poissonff() since
+ o levy() added, plus grc() documentation.
+ o constraints added to binomialff() and poissonff() since
they both handle multivariate responses.
- CHANGES IN VGAM VERSION 0.5-10
+ CHANGES IN VGAM VERSION 0.5-10
BUG FIXES
@@ -1130,15 +1173,15 @@ BUG FIXES
NEW FEATURES
- o logff() added.
- o The undocumented backchat facility now works for Splus 6.x.
+ o logff() added.
+ o The undocumented backchat facility now works for Splus 6.x.
This should increase the efficiency of vglm() in particular.
Thanks to Insightful and Dr J. Chambers for helping to get it
going under the S4 engine.
- CHANGES IN VGAM VERSION 0.5-9
+ CHANGES IN VGAM VERSION 0.5-9
BUG FIXES
@@ -1148,30 +1191,30 @@ BUG FIXES
NEW FEATURES
- o .Rd documentation included for vglm(), vgam(), rrvglm(), and
+ o .Rd documentation included for vglm(), vgam(), rrvglm(), and
associated control and class functions, plus smart prediction.
- CHANGES IN VGAM VERSION 0.5-8
+ CHANGES IN VGAM VERSION 0.5-8
NEW FEATURES
- o rrvglm() now has a Quadratic argument to implement the class of
- Quadratic Reduced-rank VGLMs, which gives maximum likelihood
+ o rrvglm() now has a Quadratic argument to implement the class of
+ Quadratic Reduced-rank VGLMs, which gives maximum likelihood
solutions to Gaussian canonical ordination problems.
- Documentation is in rrvglm.pdf
+ Documentation is in rrvglm.pdf
- CHANGES IN VGAM VERSION 0.5-7
+ CHANGES IN VGAM VERSION 0.5-7
NEW FEATURES
- o vglm() now has a xij argument which implements eta-specific covariates.
- Documentation is supplied on the VGAM website.
- o grc() has been written for Goodman's RC association model for a
- contingency table. Documentation is in rrvglm.pdf
+ o vglm() now has a xij argument which implements eta-specific covariates.
+ Documentation is supplied on the VGAM website.
+ o grc() has been written for Goodman's RC association model for a
+ contingency table. Documentation is in rrvglm.pdf
diff --git a/R/aamethods.q b/R/aamethods.q
index ee52a58..45c07a8 100644
--- a/R/aamethods.q
+++ b/R/aamethods.q
@@ -26,11 +26,11 @@ VGAMenv <- new.env()
-if (!any(search()=="package:methods"))
+if (!any(search() == "package:methods"))
library(methods)
-if (!any(search()=="package:splines"))
+if (!any(search() == "package:splines"))
require(splines)
@@ -88,7 +88,7 @@ if (FALSE)
if (!isGeneric("print"))
setGeneric("print", function(x, ...) standardGeneric("print"),
- package="VGAM")
+ package = "VGAM")
@@ -102,7 +102,7 @@ print.vglmff <- function(x, ...) {
invisible(return(x))
cat("Family: ", f[1], "\n")
- if (length(f)>1) cat("Informal classes:", paste(f, collapse=", "), "\n")
+ if (length(f)>1) cat("Informal classes:", paste(f, collapse = ", "), "\n")
cat("\n")
for(ii in 1:length(nn))
@@ -141,7 +141,7 @@ setClass("vlmsmall", representation(
"na.action" = "list",
"post" = "list",
"preplot" = "list",
- "prior.weights"= "numeric",
+ "prior.weights"= "matrix",
"residuals" = "matrix",
"weights" = "matrix",
"x" = "matrix",
@@ -194,39 +194,39 @@ setClass("vgam", representation(
setClass("summary.vgam", representation(
- anova="data.frame",
- cov.unscaled="matrix",
- correlation="matrix",
- df="numeric",
- pearson.resid="matrix",
- sigma="numeric"),
+ anova = "data.frame",
+ cov.unscaled = "matrix",
+ correlation = "matrix",
+ df = "numeric",
+ pearson.resid = "matrix",
+ sigma = "numeric"),
prototype(anova=data.frame()),
contains = "vgam")
setClass("summary.vglm", representation(
- coef3="matrix",
- cov.unscaled="matrix",
- correlation="matrix",
- df="numeric",
- pearson.resid="matrix",
- sigma="numeric"),
+ coef3 = "matrix",
+ cov.unscaled = "matrix",
+ correlation = "matrix",
+ df = "numeric",
+ pearson.resid = "matrix",
+ sigma = "numeric"),
contains = "vglm")
setClass("summary.vlm", representation(
- coef3="matrix",
- cov.unscaled="matrix",
- correlation="matrix",
- df="numeric",
- pearson.resid="matrix",
- sigma="numeric"),
+ coef3 = "matrix",
+ cov.unscaled = "matrix",
+ correlation = "matrix",
+ df = "numeric",
+ pearson.resid = "matrix",
+ sigma = "numeric"),
contains = "vlm")
- setClass(Class="rrvglm",
- contains="vglm")
+ setClass(Class = "rrvglm",
+ contains = "vglm")
@@ -253,7 +253,7 @@ if (FALSE)
"post" = "list",
"predictors" = "matrix",
"preplot" = "list",
- "prior.weights"= "numeric",
+ "prior.weights"= "matrix",
"residuals" = "matrix",
"smart.prediction" = "list",
"terms" = "list",
@@ -268,7 +268,7 @@ if (FALSE)
- setClass(Class="qrrvglm",
+ setClass(Class = "qrrvglm",
contains = "rrvglm")
@@ -315,9 +315,11 @@ new("vglm", "extra"=from at extra,
- setClass("rcam", representation(not.needed="numeric"),
+ setClass("rcam0", representation(not.needed = "numeric"),
+ contains = "vglm") # Added 20110506
+ setClass("rcam", representation(not.needed = "numeric"),
contains = "rrvglm")
- setClass("grc", representation(not.needed="numeric"),
+ setClass("grc", representation(not.needed = "numeric"),
contains = "rrvglm")
@@ -339,11 +341,11 @@ if (FALSE) {
if (!isGeneric("Coef"))
setGeneric("Coef", function(object, ...) standardGeneric("Coef"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("Coefficients"))
setGeneric("Coefficients", function(object, ...)
standardGeneric("Coefficients"),
- package="VGAM")
+ package = "VGAM")
@@ -354,15 +356,15 @@ setGeneric("Coefficients", function(object, ...)
if (!isGeneric("logLik"))
setGeneric("logLik", function(object, ...) standardGeneric("logLik"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("plot"))
setGeneric("plot", function(x, y, ...) standardGeneric("plot"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("vcov"))
setGeneric("vcov", function(object, ...) standardGeneric("vcov"),
- package="VGAM")
+ package = "VGAM")
@@ -380,17 +382,17 @@ setClass("uqo", representation(
contains = "vlmsmall")
-setClass(Class="cao",
- contains="vgam")
+setClass(Class = "cao",
+ contains = "vgam")
if (!isGeneric("lvplot"))
setGeneric("lvplot", function(object, ...) standardGeneric("lvplot"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("ccoef"))
setGeneric("ccoef", function(object, ...) standardGeneric("ccoef"),
- package="VGAM")
+ package = "VGAM")
@@ -398,26 +400,26 @@ if (!isGeneric("ccoef"))
if (!isGeneric("coef"))
setGeneric("coef", function(object, ...) standardGeneric("coef"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("coefficients"))
setGeneric("coefficients", function(object, ...)
standardGeneric("coefficients"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("df.residual"))
setGeneric("df.residual", function(object, ...)
standardGeneric("df.residual"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("fitted"))
setGeneric("fitted", function(object, ...) standardGeneric("fitted"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("fitted.values"))
setGeneric("fitted.values", function(object, ...)
standardGeneric("fitted.values"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("model.matrix"))
setGeneric("model.matrix", function(object, ...)
@@ -441,11 +443,11 @@ if (!isGeneric("resid"))
if (!isGeneric("residuals"))
setGeneric("residuals", function(object, ...) standardGeneric("residuals"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("weights"))
setGeneric("weights", function(object, ...) standardGeneric("weights"),
- package="VGAM")
+ package = "VGAM")
@@ -453,24 +455,24 @@ if (!isGeneric("weights"))
if (!isGeneric("AIC"))
setGeneric("AIC", function(object, ..., k=2) standardGeneric("AIC"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("formula"))
setGeneric("formula", function(x, ...) standardGeneric("formula"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("case.names"))
setGeneric("case.names", function(object, ...)
standardGeneric("case.names"),
- package="VGAM")
+ package = "VGAM")
if (!isGeneric("variable.names"))
setGeneric("variable.names", function(object, ...)
standardGeneric("variable.names"),
- package="VGAM")
+ package = "VGAM")
diff --git a/R/cao.R b/R/cao.R
index 35c536e..c1b03de 100644
--- a/R/cao.R
+++ b/R/cao.R
@@ -167,7 +167,7 @@ cao <- function(formula,
fit$misc$predictors.names)
slot(answer, "predictors") = fit$predictors
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
diff --git a/R/cao.fit.q b/R/cao.fit.q
index 336fb08..1351c7d 100644
--- a/R/cao.fit.q
+++ b/R/cao.fit.q
@@ -159,7 +159,7 @@ cao.fit <- function(x, y, w=rep(1, length(x[, 1])),
dim2wz=1, inited=0, # w(,dimw) cols
modelno, maxitl=control$maxitl, actnits=0, twice=0, p1star. ,
p2star. , Nice21, lenbeta, controlITolerances=0, control$trace,
- p1, p2=p2, imethod=control$method.init, bchat=0)
+ p1, p2=p2, imethod=control$imethod, bchat=0)
othdbl = c(small=control$SmallNo, fseps=control$epsilon,
.Machine$double.eps,
iKvector=rep(control$iKvector, len=NOS),
@@ -332,7 +332,7 @@ cao.control = function(Rank=1,
Bestof = if (length(Cinit)) 1 else 10,
maxitl = 10, # was 40 prior to 20100420
- method.init = 1,
+ imethod = 1,
bf.epsilon = 1.0e-7,
bf.maxit = 10, # was 40 prior to 20100420
Maxit.optim = 250,
@@ -350,8 +350,8 @@ cao.control = function(Rank=1,
stop("bad input for 'iShape'")
if (!is.Numeric(iKvector, posit=TRUE))
stop("bad input for 'iKvector'")
- if (!is.Numeric(method.init, posit=TRUE, allow=1, integer=TRUE))
- stop("bad input for 'method.init'")
+ if (!is.Numeric(imethod, posit=TRUE, allow=1, integer=TRUE))
+ stop("bad input for 'imethod'")
if (criterion != "deviance") stop("'criterion' must be 'deviance'")
if (GradientFunction)
stop("14/1/05; GradientFunction = TRUE not working yet")
@@ -421,7 +421,7 @@ cao.control = function(Rank=1,
maxitl = maxitl,
bf.epsilon = bf.epsilon,
bf.maxit = bf.maxit,
- method.init = method.init,
+ imethod = imethod,
Maxit.optim = Maxit.optim,
optim.maxit = optim.maxit,
Norrr=Norrr,
diff --git a/R/cqo.R b/R/cqo.R
index f3413eb..c83b268 100644
--- a/R/cqo.R
+++ b/R/cqo.R
@@ -154,7 +154,7 @@ cqo <- function(formula,
fit$misc$predictors.names)
slot(answer, "predictors") = fit$predictors
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
answer
}
attr(cqo, "smart") <- TRUE
diff --git a/R/cqo.fit.q b/R/cqo.fit.q
index 2543871..31d6d2d 100644
--- a/R/cqo.fit.q
+++ b/R/cqo.fit.q
@@ -70,7 +70,7 @@ callcqoc = function(cmatrix, etamat, xmat, ymat, wvec,
maxitl = control$maxitl, actnits = 0, twice = 0,
p1star = p1star, p2star = p2star, nice31 = nice31,
lenbeta = lenbeta, itol = itol, control$trace,
- p1 = p1, p2 = p2, control$method.init)
+ p1 = p1, p2 = p2, control$imethod)
bnumat = if (nice31) matrix(0,nstar,pstar) else
cbind(matrix(0,nstar,p2star), X_vlm_1save)
@@ -189,7 +189,7 @@ calldcqo = function(cmatrix, etamat, xmat, ymat, wvec,
modelno, maxitl = control$maxitl, actnits = 0, twice = 0,
p1star = p1star, p2star = p2star, nice31 = nice31, lenbeta,
itol = itol, control$trace,
- p1, p2, control$method.init) # other ints
+ p1, p2, control$imethod) # other ints
bnumat = if (nice31) matrix(0,nstar,pstar) else
cbind(matrix(0,nstar,p2star), X_vlm_1save)
flush.console()
diff --git a/R/family.aunivariate.R b/R/family.aunivariate.R
index 17aafc9..05fcdd3 100644
--- a/R/family.aunivariate.R
+++ b/R/family.aunivariate.R
@@ -171,8 +171,8 @@ pkumar = function(q, shape1, shape2) {
(y^shape1) / (1-y^shape1)
dl.dshape2 <- 1 / shape2 + log1p(-y^shape1)
- w * cbind(dl.dshape1 * dshape1.deta,
- dl.dshape2 * dshape2.deta)
+ c(w) * cbind(dl.dshape1 * dshape1.deta,
+ dl.dshape2 * dshape2.deta)
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
.eshape1 = eshape1, .eshape2 = eshape2 ))),
weight = eval(substitute(expression({
@@ -197,9 +197,10 @@ pkumar = function(q, shape1, shape2) {
wz[, iam(2, 2, M = M)] <- ed2l.dshape22 * dshape2.deta^2
wz[, iam(1, 2, M = M)] <- ed2l.dshape12 * dshape1.deta * dshape2.deta
- w * wz
+ c(w) * wz
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
- .eshape1 = eshape1, .eshape2 = eshape2, .tol12 = tol12 ))))
+ .eshape1 = eshape1, .eshape2 = eshape2,
+ .tol12 = tol12 ))))
}
@@ -340,8 +341,8 @@ riceff.control <- function(save.weight = TRUE, ...)
besselI(temp8, nu=1) / besselI(temp8, nu=0)
dl.dsigma = -2/sigma + (y^2 + vee^2)/(sigma^3) - (2 * temp8 / sigma) *
besselI(temp8, nu=1) / besselI(temp8, nu=0)
- w * cbind(dl.dvee * dvee.deta,
- dl.dsigma * dsigma.deta)
+ c(w) * cbind(dl.dvee * dvee.deta,
+ dl.dsigma * dsigma.deta)
}), list( .lvee = lvee, .lsigma = lsigma,
.evee = evee, .esigma = esigma, .nsimEIM = nsimEIM ))),
weight = eval(substitute(expression({
@@ -366,7 +367,7 @@ riceff.control <- function(save.weight = TRUE, ...)
dtheta.detas = cbind(dvee.deta, dsigma.deta)
index0 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list( .lvee = lvee, .lsigma = lsigma,
.evee = evee, .esigma = esigma, .nsimEIM = nsimEIM ))))
}
@@ -523,8 +524,8 @@ skellam.control <- function(save.weight = TRUE, ...)
temp6 = temp7 / temp9
dl.dmu1 = -1 + 0.5 * y / mu1 + sqrt(mu2/mu1) * temp6
dl.dmu2 = -1 - 0.5 * y / mu2 + sqrt(mu1/mu2) * temp6
- w * cbind(dl.dmu1 * dmu1.deta,
- dl.dmu2 * dmu2.deta)
+ c(w) * cbind(dl.dmu1 * dmu1.deta,
+ dl.dmu2 * dmu2.deta)
}), list( .lmu1 = lmu1, .lmu2 = lmu2,
.emu1 = emu1, .emu2 = emu2, .nsimEIM = nsimEIM ))),
weight = eval(substitute(expression({
@@ -549,7 +550,7 @@ skellam.control <- function(save.weight = TRUE, ...)
dtheta.detas = cbind(dmu1.deta, dmu2.deta)
index0 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list( .lmu1 = lmu1, .lmu2 = lmu2,
.emu1 = emu1, .emu2 = emu2, .nsimEIM = nsimEIM ))))
}
@@ -675,7 +676,7 @@ yulesimon.control <- function(save.weight = TRUE, ...)
wz = wz * drho.deta^2
- w * wz
+ c(w) * wz
}), list( .nsimEIM = nsimEIM ))))
}
@@ -840,8 +841,8 @@ slash.control <- function(save.weight = TRUE, ...)
ind0 = (abs(zedd) < .smallno)
dl.dmu[ind0] = 0
dl.dsigma[ind0] = -1/sigma[ind0]
- ans = w * cbind(dl.dmu * dmu.deta,
- dl.dsigma * dsigma.deta)
+ ans = c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsigma * dsigma.deta)
ans
}), list( .lmu = lmu, .lsigma = lsigma,
.emu = emu, .esigma = esigma, .smallno = smallno ))),
@@ -870,7 +871,7 @@ slash.control <- function(save.weight = TRUE, ...)
n, ncol(run.varcov), byrow = TRUE) else run.varcov
dthetas.detas = cbind(dmu.deta, dsigma.deta)
wz = wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
- w * wz
+ c(w) * wz
}), list( .lmu = lmu, .lsigma = lsigma,
.emu = emu, .esigma = esigma,
.nsimEIM = nsimEIM, .smallno = smallno ))))
@@ -896,16 +897,16 @@ dnefghs = function(x, tau, log = FALSE) {
nefghs <- function(link = "logit", earg = list(), itau = NULL,
- method.init = 1)
+ imethod = 1)
{
if (length(itau) && !is.Numeric(itau, positi = TRUE) || any(itau >= 1))
stop("argument 'itau' must be in (0,1)")
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("'imethod' must be 1 or 2")
new("vglmff",
blurb = c("Natural exponential family generalized hyperbolic ",
@@ -920,7 +921,7 @@ dnefghs = function(x, tau, log = FALSE) {
predictors.names = namesof("tau", .link, earg =.earg, tag = FALSE)
if (!length(etastart)) {
- wmeany = if ( .method.init == 1) weighted.mean(y,w) else
+ wmeany = if ( .imethod == 1) weighted.mean(y,w) else
median(rep(y,w))
if (abs(wmeany) < 0.01) wmeany = 0.01
tau.init = atan(pi / wmeany) / pi + 0.5
@@ -930,7 +931,7 @@ dnefghs = function(x, tau, log = FALSE) {
etastart = theta2eta(tau.init, .link, earg =.earg)
}
}), list( .link = link, .earg = earg, .itau = itau,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
tau = eta2theta(eta, .link, earg =.earg)
pi / tan(pi * tau)
@@ -939,8 +940,8 @@ dnefghs = function(x, tau, log = FALSE) {
misc$link <- c(tau = .link)
misc$earg <- list(tau = .earg)
misc$expected = TRUE
- misc$method.init= .method.init
- }), list( .link=link, .earg =earg, .method.init = method.init ))),
+ misc$imethod= .imethod
+ }), list( .link=link, .earg =earg, .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals= FALSE,eta, extra = NULL) {
tau = eta2theta(eta, .link, earg =.earg)
@@ -959,7 +960,7 @@ dnefghs = function(x, tau, log = FALSE) {
weight = eval(substitute(expression({
d2l.dtau2 = (pi / sin(pi * tau))^2
wz = d2l.dtau2 * dtau.deta^2
- w * wz
+ c(w) * wz
}), list( .link = link ))))
}
@@ -982,7 +983,7 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
logF = function(lshape1 = "loge", lshape2 = "loge",
eshape1 = list(), eshape2 = list(),
ishape1 = NULL, ishape2 = 1,
- method.init = 1)
+ imethod = 1)
{
if (length(ishape1) && !is.Numeric(ishape1, positi = TRUE))
stop("argument 'ishape1' must be positive")
@@ -995,9 +996,9 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
lshape2 = as.character(substitute(lshape2))
if (!is.list(eshape1)) eshape1 = list()
if (!is.list(eshape2)) eshape2 = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("'imethod' must be 1 or 2")
new("vglmff",
blurb = c("log F distribution\n",
@@ -1017,7 +1018,7 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
namesof("shape2", .lshape2, earg = .eshape2, tag = FALSE))
if (!length(etastart)) {
- wmeany = if ( .method.init == 1) weighted.mean(y,w) else
+ wmeany = if ( .imethod == 1) weighted.mean(y,w) else
median(rep(y,w))
@@ -1037,7 +1038,7 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
.eshape1 = eshape1, .eshape2 = eshape2,
.ishape1=ishape1, .ishape2=ishape2,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
shape1 = eta2theta(eta[,1], .lshape1, earg = .eshape1)
shape2 = eta2theta(eta[,2], .lshape2, earg = .eshape2)
@@ -1048,10 +1049,10 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
misc$link <- c(shape1 = .lshape1, shape2 = .lshape2)
misc$earg <- list(shape1 = .eshape1, shape2 = .eshape2)
misc$expected = TRUE
- misc$method.init= .method.init
+ misc$imethod= .imethod
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
.eshape1 = eshape1, .eshape2 = eshape2,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals= FALSE,eta, extra = NULL) {
shape1 = eta2theta(eta[,1], .lshape1, earg = .eshape1)
@@ -1071,7 +1072,8 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
dl.dshape2 = tmp888 - digamma(shape2) - y
dshape1.deta = dtheta.deta(shape1, .lshape1, earg = .eshape1)
dshape2.deta = dtheta.deta(shape2, .lshape2, earg = .eshape2)
- w * cbind(dl.dshape1 * dshape1.deta, dl.dshape2 * dshape2.deta)
+ c(w) * cbind(dl.dshape1 * dshape1.deta,
+ dl.dshape2 * dshape2.deta)
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
.eshape1 = eshape1, .eshape2 = eshape2 ))),
weight = eval(substitute(expression({
@@ -1084,7 +1086,7 @@ dlogF = function(x, shape1, shape2, log = FALSE) {
wz[,iam(2,2,M = M)] = d2l.dshape22 * dshape2.deta^2
wz[,iam(1,2,M = M)] = d2l.dshape1shape2 * dshape1.deta *
dshape2.deta
- w * wz
+ c(w) * wz
}), list( .lshape1 = lshape1, .lshape2 = lshape2,
.eshape1 = eshape1, .eshape2 = eshape2 ))))
}
diff --git a/R/family.binomial.R b/R/family.binomial.R
index ca8306a..cb5d155 100644
--- a/R/family.binomial.R
+++ b/R/family.binomial.R
@@ -66,16 +66,16 @@ process.binomial2.data.vgam <- expression({
-betabinomial.control <- function(save.weight=TRUE, ...)
+betabinomial.control <- function(save.weight = TRUE, ...)
{
- list(save.weight=save.weight)
+ list(save.weight = save.weight)
}
betabinomial <- function(lmu = "logit", lrho = "logit",
emu = list(), erho = list(), irho = NULL,
- method.init = 1, shrinkage.init = 0.95,
+ imethod = 1, shrinkage.init = 0.95,
nsimEIM = NULL, zero = 2)
{
if (mode(lmu) != "character" && mode(lmu) != "name")
@@ -86,13 +86,13 @@ betabinomial.control <- function(save.weight=TRUE, ...)
if (!is.list(emu )) emu <- list()
if (!is.list(erho)) erho <- list()
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 4) stop("argument 'method.init' must be 1, 2, 3 or 4")
+ if (!is.Numeric(imethod, allow=1, integ = TRUE, posit = TRUE) ||
+ imethod > 4) stop("argument 'imethod' must be 1, 2, 3 or 4")
if (!is.Numeric(shrinkage.init, allow=1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
if (!is.null(nsimEIM)) {
- if (!is.Numeric(nsimEIM, allow=1, integ=TRUE))
+ if (!is.Numeric(nsimEIM, allow=1, integ = TRUE))
stop("bad input for argument 'nsimEIM'")
if (nsimEIM <= 10)
warning("'nsimEIM' should be an integer greater than 10, say")
@@ -128,26 +128,26 @@ betabinomial.control <- function(save.weight=TRUE, ...)
warning("the response (as counts) does not appear to ",
"be integer-valued. Am rounding to integer values.")
ycounts <- round(ycounts) # Make sure it is an integer
- predictors.names <- c(namesof("mu", .lmu, earg = .emu, tag=FALSE),
- namesof("rho", .lrho, earg = .erho, tag=FALSE))
+ predictors.names <- c(namesof("mu", .lmu, earg = .emu, tag = FALSE),
+ namesof("rho", .lrho, earg = .erho, tag = FALSE))
if (!length(etastart)) {
betabinomial.Loglikfun = function(rhoval, y, x, w, extraargs) {
shape1 <- extraargs$mustart * (1-rhoval) / rhoval
shape2 <- (1-extraargs$mustart) * (1-rhoval) / rhoval
ycounts <- extraargs$ycounts # Ought to be integer-valued
nvec <- extraargs$nvec
- sum(dbetabin.ab(x = ycounts, size=nvec, shape1=shape1,
- shape2=shape2, log=TRUE))
+ sum(dbetabin.ab(x = ycounts, size=nvec, shape1 = shape1,
+ shape2 = shape2, log = TRUE))
}
rho.grid <- seq(0.05, 0.95, len=21) # rvar =
mustart.use =
if (length(mustart.orig)) {
mustart.orig
- } else if ( .method.init == 1) {
+ } else if ( .imethod == 1) {
rep(weighted.mean(y, w), len = n)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
.sinit * weighted.mean(y, w) + (1 - .sinit) * y
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
y.matrix <- cbind(y)
mat.temp <- matrix(colMeans(y.matrix), nrow(y.matrix),
ncol(y.matrix), byrow = TRUE)
@@ -162,14 +162,14 @@ betabinomial.control <- function(save.weight=TRUE, ...)
round(w / extra$orig.w) else round(w),
mustart = mustart.use))
init.rho <- if (is.Numeric( .irho )) rep( .irho, length=n) else
- rep(try.this, len=n)
+ rep(try.this, len = n)
etastart <- cbind(theta2eta(mustart.use, .lmu, earg = .emu),
theta2eta(init.rho, .lrho, earg = .erho))
mustart <- NULL # Since etastart has been computed.
}
}), list( .lmu = lmu, .lrho = lrho,
.emu = emu, .erho = erho,
- .method.init = method.init, .sinit = shrinkage.init,
+ .imethod = imethod, .sinit = shrinkage.init,
.nsimEIM = nsimEIM, .irho = irho ))),
inverse = eval(substitute(function(eta, extra = NULL)
eta2theta(eta[,1], .lmu, earg = .emu),
@@ -184,7 +184,7 @@ betabinomial.control <- function(save.weight=TRUE, ...)
.emu = emu, .erho = erho,
.nsimEIM = nsimEIM, .zero = zero ))),
loglikelihood = eval(substitute(
- function(mu,y,w,residuals=FALSE, eta, extra = NULL) {
+ function(mu,y,w,residuals = FALSE, eta, extra = NULL) {
ycounts <- if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
y * w # Convert proportions to counts
@@ -246,7 +246,7 @@ betabinomial.control <- function(save.weight=TRUE, ...)
mymu * digamma(shape1) -
(1 - mymu)*digamma(shape2) + digamma(shape1+shape2))
- (if (is.numeric(extra$orig.w)) extra$orig.w else 1) *
+ c(if (is.numeric(extra$orig.w)) extra$orig.w else 1) *
cbind(dl.dmu * dmu.deta, dl.drho * drho.deta)
}), list( .lmu = lmu, .lrho = lrho,
.emu = emu, .erho = erho ))),
@@ -274,12 +274,12 @@ betabinomial.control <- function(save.weight=TRUE, ...)
wz * (if (is.numeric(extra$orig.w)) extra$orig.w else 1)
} else {
run.varcov <- 0
- ind1 <- iam(NA, NA, M=M, both=TRUE, diag=TRUE)
+ ind1 <- iam(NA, NA, M = M, both = TRUE, diag = TRUE)
dthetas.detas <- cbind(dmu.deta, drho.deta)
for (ii in 1:( .nsimEIM )) {
- ysim <- rbetabin.ab(n=n, size=nvec, shape1=shape1,
- shape2=shape2)
+ ysim <- rbetabin.ab(n = n, size=nvec, shape1 = shape1,
+ shape2 = shape2)
dl.dmu <- dshape1.dmu * (digamma(shape1+ysim) -
digamma(shape2+nvec-ysim) -
digamma(shape1) + digamma(shape2))
@@ -323,22 +323,22 @@ dbinom2.or = function(mu1,
ErrorCheck = TRUE)
{
if (ErrorCheck) {
- if (!is.Numeric(mu1, positive=TRUE) || max(mu1) >= 1)
+ if (!is.Numeric(mu1, positive = TRUE) || max(mu1) >= 1)
stop("bad input for argument 'mu1'")
- if (!is.Numeric(mu2, positive=TRUE) || max(mu2) >= 1)
+ if (!is.Numeric(mu2, positive = TRUE) || max(mu2) >= 1)
stop("bad input for argument 'mu2'")
- if (!is.Numeric(oratio, positive=TRUE))
+ if (!is.Numeric(oratio, positive = TRUE))
stop("bad input for argument 'oratio'")
- if (!is.Numeric(tol, positive=TRUE, allow=1) || tol > 0.1)
+ if (!is.Numeric(tol, positive = TRUE, allow=1) || tol > 0.1)
stop("bad input for argument 'tol'")
if (exchangeable && max(abs(mu1 - mu2)) > 0.00001)
stop("argument 'exchangeable' is TRUE but 'mu1' and 'mu2' differ")
}
n = max(length(mu1), length(mu2), length(oratio))
- oratio = rep(oratio, len=n)
- mu1 = rep(mu1, len=n)
- mu2 = rep(mu2, len=n)
+ oratio = rep(oratio, len = n)
+ mu1 = rep(mu1, len = n)
+ mu2 = rep(mu2, len = n)
a.temp = 1 + (mu1+mu2)*(oratio-1)
b.temp = -4 * oratio * (oratio-1) * mu1 * mu2
@@ -355,23 +355,23 @@ dbinom2.or = function(mu1,
rbinom2.or = function(n, mu1,
mu2 = if (exchangeable) mu1 else stop("'mu2' not specified"),
- oratio=1,
- exchangeable=FALSE,
- tol=0.001,
- twoCols=TRUE,
+ oratio = 1,
+ exchangeable = FALSE,
+ tol = 0.001,
+ twoCols = TRUE,
colnames = if (twoCols) c("y1","y2") else c("00", "01", "10", "11"),
- ErrorCheck=TRUE)
+ ErrorCheck = TRUE)
{
if (ErrorCheck) {
- if (!is.Numeric(n, integer=TRUE, posit=TRUE, allow=1))
+ if (!is.Numeric(n, integer = TRUE, posit = TRUE, allow=1))
stop("bad input for argument 'n'")
- if (!is.Numeric(mu1, positive=TRUE) || max(mu1) >= 1)
+ if (!is.Numeric(mu1, positive = TRUE) || max(mu1) >= 1)
stop("bad input for argument 'mu1'")
- if (!is.Numeric(mu2, positive=TRUE) || max(mu2) >= 1)
+ if (!is.Numeric(mu2, positive = TRUE) || max(mu2) >= 1)
stop("bad input for argument 'mu2'")
- if (!is.Numeric(oratio, positive=TRUE))
+ if (!is.Numeric(oratio, positive = TRUE))
stop("bad input for argument 'oratio'")
- if (!is.Numeric(tol, positive=TRUE, allow=1) || tol > 0.1)
+ if (!is.Numeric(tol, positive = TRUE, allow=1) || tol > 0.1)
stop("bad input for argument 'tol'")
if (exchangeable && max(abs(mu1 - mu2)) > 0.00001)
stop("argument 'exchangeable' is TRUE but 'mu1' and 'mu2' differ")
@@ -381,7 +381,7 @@ rbinom2.or = function(n, mu1,
tol=tol, ErrorCheck=ErrorCheck)
answer = matrix(0, n, 2,
- dimnames=list(NULL, if (twoCols) colnames else NULL))
+ dimnames = list(NULL, if (twoCols) colnames else NULL))
yy = runif(n)
cs1 = dmat[,"00"] + dmat[,"01"]
cs2 = cs1 + dmat[,"10"]
@@ -392,7 +392,7 @@ rbinom2.or = function(n, mu1,
index = (yy > cs2)
answer[index,] = 1
if (twoCols) answer else {
- answer4 = matrix(0, n, 4, dimnames=list(NULL, colnames))
+ answer4 = matrix(0, n, 4, dimnames = list(NULL, colnames))
answer4[cbind(1:n, 1 + 2*answer[,1] + answer[,2])] = 1
answer4
}
@@ -418,8 +418,8 @@ rbinom2.or = function(n, mu1,
loratio = as.character(substitute(loratio))
if (is.logical(exchangeable) && exchangeable && ((lmu1 != lmu2) ||
!all.equal(emu1, emu2)))
- stop("exchangeable=TRUE but marginal links are not equal")
- if (!is.Numeric(tol, positive=TRUE, allow=1) || tol > 0.1)
+ stop("exchangeable = TRUE but marginal links are not equal")
+ if (!is.Numeric(tol, positive = TRUE, allow=1) || tol > 0.1)
stop("bad input for argument 'tol'")
if (!is.list(emu1)) emu1 = list()
if (!is.list(emu2)) emu2 = list()
@@ -434,7 +434,7 @@ rbinom2.or = function(n, mu1,
constraints = eval(substitute(expression({
constraints = cm.vgam(matrix(c(1,1,0,0,0,1),3,2), x,
.exchangeable, constraints,
- intercept.apply=TRUE)
+ intercept.apply = TRUE)
constraints = cm.zero.vgam(constraints, x, .zero, M)
}), list( .exchangeable = exchangeable, .zero = zero ))),
deviance = Deviance.categorical.data.vgam,
@@ -556,9 +556,9 @@ rbinom2.or = function(n, mu1,
dp11.doratio = Vab / use.oratio
dl.doratio = coeff3 * dp11.doratio
- w * cbind(dl.dmu1 * dtheta.deta(pmargin[,1], .lmu1, earg = .emu1),
- dl.dmu2 * dtheta.deta(pmargin[,2], .lmu2, earg = .emu2),
- dl.doratio * dtheta.deta(oratio, .loratio, earg = .eoratio))
+ c(w) * cbind(dl.dmu1 * dtheta.deta(pmargin[,1], .lmu1, earg = .emu1),
+ dl.dmu2 * dtheta.deta(pmargin[,2], .lmu2, earg = .emu2),
+ dl.doratio * dtheta.deta(oratio, .loratio, earg = .eoratio))
}), list( .lmu1 = lmu1, .lmu2 = lmu2, .loratio = loratio,
.emu1 = emu1, .emu2 = emu2, .eoratio = eoratio ))),
weight = eval(substitute(expression({
@@ -578,7 +578,7 @@ rbinom2.or = function(n, mu1,
wz[,iam(1,2,M)] = (Vab * Deltapi / myDelta) *
dtheta.deta(pmargin[,1], .lmu1, earg = .emu1) *
dtheta.deta(pmargin[,2], .lmu2, earg = .emu2)
- w * wz
+ c(w) * wz
}), list( .lmu1 = lmu1, .lmu2 = lmu2, .loratio = loratio,
.emu1 = emu1, .emu2 = emu2, .eoratio = eoratio ))))
}
@@ -587,14 +587,14 @@ rbinom2.or = function(n, mu1,
dbinom2.rho = function(mu1,
mu2 = if (exchangeable) mu1 else stop("'mu2' not specified"),
rho=0,
- exchangeable=FALSE,
+ exchangeable = FALSE,
colnames=c("00", "01", "10", "11"),
- ErrorCheck=TRUE)
+ ErrorCheck = TRUE)
{
if (ErrorCheck) {
- if (!is.Numeric(mu1, positive=TRUE) || max(mu1) >= 1)
+ if (!is.Numeric(mu1, positive = TRUE) || max(mu1) >= 1)
stop("bad input for argument 'mu1'")
- if (!is.Numeric(mu2, positive=TRUE) || max(mu2) >= 1)
+ if (!is.Numeric(mu2, positive = TRUE) || max(mu2) >= 1)
stop("bad input for argument 'mu2'")
if (!is.Numeric(rho) || min(rho) <= -1 || max(rho) >= 1)
stop("bad input for argument 'rho'")
@@ -620,17 +620,17 @@ dbinom2.rho = function(mu1,
rbinom2.rho = function(n, mu1,
mu2 = if (exchangeable) mu1 else stop("'mu2' not specified"),
rho=0,
- exchangeable=FALSE,
- twoCols=TRUE,
+ exchangeable = FALSE,
+ twoCols = TRUE,
colnames = if (twoCols) c("y1","y2") else c("00", "01", "10", "11"),
- ErrorCheck=TRUE)
+ ErrorCheck = TRUE)
{
if (ErrorCheck) {
- if (!is.Numeric(n, integer=TRUE, posit=TRUE, allow=1))
+ if (!is.Numeric(n, integer = TRUE, posit = TRUE, allow=1))
stop("bad input for argument 'n'")
- if (!is.Numeric(mu1, positive=TRUE) || max(mu1) >= 1)
+ if (!is.Numeric(mu1, positive = TRUE) || max(mu1) >= 1)
stop("bad input for argument 'mu1'")
- if (!is.Numeric(mu2, positive=TRUE) || max(mu2) >= 1)
+ if (!is.Numeric(mu2, positive = TRUE) || max(mu2) >= 1)
stop("bad input for argument 'mu2'")
if (!is.Numeric(rho) || min(rho) <= -1 || max(rho) >= 1)
stop("bad input for argument 'rho'")
@@ -642,7 +642,7 @@ rbinom2.rho = function(n, mu1,
ErrorCheck=ErrorCheck)
answer = matrix(0, n, 2,
- dimnames=list(NULL, if (twoCols) colnames else NULL))
+ dimnames = list(NULL, if (twoCols) colnames else NULL))
yy = runif(n)
cs1 = dmat[,"00"] + dmat[,"01"]
cs2 = cs1 + dmat[,"10"]
@@ -653,7 +653,7 @@ rbinom2.rho = function(n, mu1,
index = (yy > cs2)
answer[index,] = 1
if (twoCols) answer else {
- answer4 = matrix(0, n, 4, dimnames=list(NULL, colnames))
+ answer4 = matrix(0, n, 4, dimnames = list(NULL, colnames))
answer4[cbind(1:n, 1 + 2*answer[,1] + answer[,2])] = 1
answer4
}
@@ -663,17 +663,18 @@ rbinom2.rho = function(n, mu1,
-binom2.rho.control <- function(save.weight=TRUE, ...)
+binom2.rho.control <- function(save.weight = TRUE, ...)
{
- list(save.weight=save.weight)
+ list(save.weight = save.weight)
}
binom2.rho = function(lrho = "rhobit", erho = list(),
imu1 = NULL, imu2 = NULL, irho = NULL,
- method.init = 1,
- zero = 3, exchangeable = FALSE, nsimEIM = NULL)
+ imethod = 1,
+ zero = 3, exchangeable = FALSE,
+ nsimEIM = NULL)
{
@@ -688,8 +689,8 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
if (nsimEIM <= 100)
warning("'nsimEIM' should be an integer greater than 100")
}
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
new("vglmff",
blurb = c("Bivariate probit model\n",
@@ -733,7 +734,7 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
if (length(mustart.orig)) {
mu1.init = mustart.orig[,3] + mustart.orig[,4]
mu2.init = mustart.orig[,2] + mustart.orig[,4]
- } else if ( .method.init == 1) {
+ } else if ( .imethod == 1) {
glm1.fit = glm(cbind(ycounts[,3] + ycounts[,4],
ycounts[,1] + ycounts[,2]) ~ x - 1,
fam = binomial("probit"))
@@ -742,13 +743,13 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
fam = binomial("probit"))
mu1.init = fitted(glm1.fit)
mu2.init = fitted(glm2.fit)
- } else if ( .method.init == 2) {
- mu1.init = if (is.Numeric( .imu1 )) rep( .imu1, len=n) else
+ } else if ( .imethod == 2) {
+ mu1.init = if (is.Numeric( .imu1 )) rep( .imu1, len = n) else
mu[,3] + mu[,4]
- mu2.init = if (is.Numeric( .imu2 )) rep( .imu2, len=n) else
+ mu2.init = if (is.Numeric( .imu2 )) rep( .imu2, len = n) else
mu[,2] + mu[,4]
} else {
- stop("bad value for 'method.init'")
+ stop("bad value for 'imethod'")
}
@@ -774,7 +775,7 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
}
rho.grid = seq(-0.95, 0.95, len=31)
try.this = getMaxMin(rho.grid, objfun=binom2.rho.Loglikfun,
- y=y, x=x, w=w, extraargs=list(
+ y=y, x=x, w=w, extraargs = list(
orig.w = extra$orig.w,
ycounts = ycounts,
initmu1 = mu1.init,
@@ -794,7 +795,7 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
}
}), list( .lmu12 = lmu12, .emu12 = emu12, .nsimEIM = nsimEIM,
.lrho = lrho, .erho = erho,
- .method.init = method.init,
+ .imethod = imethod,
.imu1 = imu1, .imu2 = imu2, .irho = irho ))),
inverse = eval(substitute(function(eta, extra = NULL) {
pmargin = cbind(eta2theta(eta[,1], .lmu12, earg = .emu12),
@@ -840,8 +841,8 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
deriv = eval(substitute(expression({
nvec = if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
round(w)
- ycounts = if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
- y * w # Convert proportions to counts
+ ycounts = if (is.numeric(extra$orig.w)) y * c(w) / extra$orig.w else
+ y * c(w) # Convert proportions to counts
pmargin = cbind(eta2theta(eta[,1], .lmu12, earg = .emu12),
eta2theta(eta[,2], .lmu12, earg = .emu12))
@@ -922,7 +923,7 @@ binom2.rho.control <- function(save.weight=TRUE, ...)
wz = wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
}
- w * wz
+ c(w) * wz
}), list( .nsimEIM = nsimEIM ))))
}
@@ -947,7 +948,7 @@ pnorm2 <- function(ah, ak, r) {
ans <- ah
size <- length(ah)
singler <- ifelse(length(r) == 1, 1, 0)
- dotC(name="pnorm2", ah=as.double(-ah), ak=as.double(-ak), r=as.double(r),
+ dotC(name = "pnorm2", ah=as.double(-ah), ak=as.double(-ak), r=as.double(r),
size=as.integer(size), singler=as.integer(singler),
ans=as.double(ans))$ans
}
@@ -975,9 +976,9 @@ my.dbinom <- function(x,
if (!is.list(earg)) earg = list()
new("vglmff",
- blurb = c("Binomial with n unknown, prob known (prob=",prob,")\n",
+ blurb = c("Binomial with n unknown, prob known (prob = ",prob,")\n",
"Links: ",
- namesof("size", link, tag=TRUE),
+ namesof("size", link, tag = TRUE),
" (treated as real-valued)\n",
"Variance: Var(Y) = size * prob * (1-prob);",
" Var(size) is intractable"),
@@ -1002,7 +1003,7 @@ my.dbinom <- function(x,
theta2eta(nvec, .link)
}, list( .link = link ))),
loglikelihood = eval(substitute(
- function(mu, y, w, res=FALSE,eta, extra = NULL) {
+ function(mu, y, w, res = FALSE,eta, extra = NULL) {
nvec <- mu / extra$temp2
if (residuals)
stop("loglikelihood residuals not implemented yet") else {
@@ -1016,13 +1017,13 @@ my.dbinom <- function(x,
nvec <- mu/extra$temp2
dldnvec = digamma(nvec+1) - digamma(nvec-y+1) + log1p(-extra$temp2)
dnvecdeta <- dtheta.deta(nvec, .link)
- w * cbind(dldnvec * dnvecdeta)
+ c(w) * cbind(dldnvec * dnvecdeta)
}), list( .link = link ))),
weight = eval(substitute(expression({
d2ldnvec2 <- trigamma(nvec+1) - trigamma(nvec-y+1)
# Note: if y == 0 then d2ldnvec2 is 0. Below is a quick fix.
d2ldnvec2[y == 0] = -sqrt(.Machine$double.eps)
- wz = -w * dnvecdeta^2 * d2ldnvec2
+ wz = -c(w) * dnvecdeta^2 * d2ldnvec2
wz
}), list( .link = link ))))
}
@@ -1031,64 +1032,78 @@ my.dbinom <- function(x,
dbetabin.ab = function(x, size, shape1, shape2, log = FALSE) {
- log.arg = log
- rm(log)
- if (!is.Numeric(x)) stop("bad input for argument 'x'")
- if (!is.Numeric(size, posit=TRUE, integer=TRUE))
- stop("bad input for argument 'size'")
- if (!is.Numeric(shape1, pos=TRUE)) stop("bad input for argument 'shape1'")
- if (!is.Numeric(shape2, pos=TRUE)) stop("bad input for argument 'shape2'")
-
- LLL = max(length(x), length(size), length(shape1), length(shape2))
- if (length(x) != LLL) x = rep(x, len=LLL)
- if (length(size) != LLL) size = rep(size, len=LLL)
- if (length(shape1) != LLL) shape1 = rep(shape1, len=LLL)
- if (length(shape2) != LLL) shape2 = rep(shape2, len=LLL)
-
- answer = 0 * x
- ok = (round(x) == x) & (x >= 0) & (x <= size)
- answer[ok] = lchoose(size[ok], x[ok]) +
- lbeta(shape1[ok]+x[ok], shape2[ok]+size[ok]-x[ok]) -
- lbeta(shape1[ok], shape2[ok])
- if (log.arg) {
- answer[!ok] = log(0.0)
- } else {
- answer[ok] = exp(answer[ok])
- }
- answer
+ log.arg = log
+ rm(log)
+ if (!is.Numeric(x))
+ stop("bad input for argument 'x'")
+ if (!is.Numeric(size, integer = TRUE))
+ stop("bad input for argument 'size'")
+ if (!is.Numeric(shape1, pos = TRUE))
+ stop("bad input for argument 'shape1'")
+ if (!is.Numeric(shape2, pos = TRUE))
+ stop("bad input for argument 'shape2'")
+
+ LLL = max(length(x), length(size), length(shape1), length(shape2))
+ if (length(x) != LLL) x = rep(x, len = LLL)
+ if (length(size) != LLL) size = rep(size, len = LLL)
+ if (length(shape1) != LLL) shape1 = rep(shape1, len = LLL)
+ if (length(shape2) != LLL) shape2 = rep(shape2, len = LLL)
+
+ answer = 0 * x
+ ok = (round(x) == x) & (x >= 0) & (x <= size)
+ answer[ok] = lchoose(size[ok], x[ok]) +
+ lbeta(shape1[ok] + x[ok], shape2[ok] + size[ok] - x[ok]) -
+ lbeta(shape1[ok], shape2[ok])
+ if (log.arg) {
+ answer[!ok] = log(0.0)
+ } else {
+ answer[ok] = exp(answer[ok])
+ }
+ answer
}
- pbetabin.ab = function(q, size, shape1, shape2, log.p=FALSE) {
- if (!is.Numeric(q)) stop("bad input for argument 'q'")
- if (!is.Numeric(size, posit=TRUE, integer=TRUE))
- stop("bad input for argument 'size'")
- if (!is.Numeric(shape1, pos=TRUE)) stop("bad input for argument 'shape1'")
- if (!is.Numeric(shape2, pos=TRUE)) stop("bad input for argument 'shape2'")
+ pbetabin.ab = function(q, size, shape1, shape2, log.p = FALSE) {
+
+ if (!is.Numeric(q))
+ stop("bad input for argument 'q'")
+ if (!is.Numeric(size, integer = TRUE))
+ stop("bad input for argument 'size'")
+ if (!is.Numeric(shape1, pos = TRUE))
+ stop("bad input for argument 'shape1'")
+ if (!is.Numeric(shape2, pos = TRUE))
+ stop("bad input for argument 'shape2'")
LLL = max(length(q), length(size), length(shape1), length(shape2))
- if (length(q) != LLL) q = rep(q, len=LLL)
- if (length(shape1) != LLL) shape1 = rep(shape1, len=LLL)
- if (length(shape1) != LLL) shape2 = rep(shape2, len=LLL)
- if (length(size) != LLL) size = rep(size, len=LLL);
+ if (length(q) != LLL) q = rep(q, len = LLL)
+ if (length(shape1) != LLL) shape1 = rep(shape1, len = LLL)
+ if (length(shape1) != LLL) shape2 = rep(shape2, len = LLL)
+ if (length(size) != LLL) size = rep(size, len = LLL);
ans = q * 0 # Retains names(q)
- if (max(abs(size - size[1])) < 1.0e-08 &&
- max(abs(shape1-shape1[1])) < 1.0e-08 &&
- max(abs(shape2-shape2[1])) < 1.0e-08) {
- qstar = floor(q)
- temp = if (max(qstar) >= 0) dbetabin.ab(0:max(qstar),
- size=size[1], shape1=shape1[1], shape2=shape2[1]) else 0*qstar
+ if (max(abs(size - size[1])) < 1.0e-08 &&
+ max(abs(shape1 - shape1[1])) < 1.0e-08 &&
+ max(abs(shape2 - shape2[1])) < 1.0e-08) {
+ qstar = floor(q)
+ temp = if (max(qstar) >= 0) {
+ dbetabin.ab(0:max(qstar), size = size[1], shape1 = shape1[1],
+ shape2 = shape2[1])
+ } else {
+ 0 * qstar
+ }
unq = unique(qstar)
- for (ii in unq) {
- index = qstar == ii
- ans[index] = if (ii >= 0) sum(temp[1:(1+ii)]) else 0
- }
- } else
- for (ii in 1:LLL) {
+ for (ii in unq) {
+ index = qstar == ii
+ ans[index] = if (ii >= 0) sum(temp[1:(1+ii)]) else 0
+ }
+ } else {
+ for (ii in 1:LLL) {
qstar = floor(q[ii])
- ans[ii] = if (qstar >= 0) sum(dbetabin.ab(x=0:qstar, size=size[ii],
- shape1=shape1[ii], shape2=shape2[ii])) else 0
+ ans[ii] = if (qstar >= 0) {
+ sum(dbetabin.ab(x = 0:qstar, size = size[ii],
+ shape1 = shape1[ii], shape2 = shape2[ii]))
+ } else 0
+ }
}
if (log.p) log(ans) else ans
}
@@ -1096,41 +1111,45 @@ my.dbinom <- function(x,
rbetabin.ab = function(n, size, shape1, shape2) {
- if (!is.Numeric(size, posit=TRUE, integer=TRUE))
- stop("bad input for argument 'size'")
- if (!is.Numeric(shape1, pos=TRUE)) stop("bad input for argument 'shape1'")
- if (!is.Numeric(shape2, pos=TRUE)) stop("bad input for argument 'shape2'")
-
- use.n = if ((length.n <- length(n)) > 1) length.n else
- if (!is.Numeric(n, integ=TRUE, allow=1, posit=TRUE))
- stop("bad input for argument 'n'") else n
- if (length(size) != use.n) size = rep(size, len=use.n)
- if (length(shape1) != use.n) shape1 = rep(shape1, len=use.n)
- if (length(shape2) != use.n) shape2 = rep(shape2, len=use.n)
- rbinom(n=use.n, size=size, prob=rbeta(n=n, shape1=shape1, shape2=shape2))
+ if (!is.Numeric(size, integer = TRUE))
+ stop("bad input for argument 'size'")
+ if (!is.Numeric(shape1, pos = TRUE))
+ stop("bad input for argument 'shape1'")
+ if (!is.Numeric(shape2, pos = TRUE))
+ stop("bad input for argument 'shape2'")
+
+ use.n = if ((length.n <- length(n)) > 1) length.n else
+ if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
+ stop("bad input for argument 'n'") else n
+ if (length(size) != use.n) size = rep(size, len = use.n)
+ if (length(shape1) != use.n) shape1 = rep(shape1, len = use.n)
+ if (length(shape2) != use.n) shape2 = rep(shape2, len = use.n)
+ rbinom(n = use.n, size = size,
+ prob = rbeta(n = use.n, shape1 = shape1, shape2 = shape2))
}
+
dbetabin = function(x, size, prob, rho, log = FALSE) {
- dbetabin.ab(x=x, size=size, shape1=prob*(1-rho)/rho,
- shape2=(1-prob)*(1-rho)/rho, log=log)
+ dbetabin.ab(x=x, size = size, shape1 = prob*(1-rho)/rho,
+ shape2 = (1-prob)*(1-rho)/rho, log = log)
}
pbetabin = function(q, size, prob, rho, log.p = FALSE) {
- pbetabin.ab(q=q, size=size, shape1=prob*(1-rho)/rho,
- shape2=(1-prob)*(1-rho)/rho, log.p=log.p)
+ pbetabin.ab(q = q, size = size, shape1 = prob*(1-rho)/rho,
+ shape2 = (1-prob)*(1-rho)/rho, log.p = log.p)
}
rbetabin = function(n, size, prob, rho) {
- rbetabin.ab(n=n, size=size, shape1=prob*(1-rho)/rho,
- shape2=(1-prob)*(1-rho)/rho)
+ rbetabin.ab(n = n, size = size, shape1 = prob*(1-rho)/rho,
+ shape2 = (1-prob)*(1-rho)/rho)
}
expected.betabin.ab = function(nvec, shape1, shape2, first) {
NN = length(nvec)
- ans = rep(0.0, len=NN)
+ ans = rep(0.0, len = NN)
if (first) {
for (ii in 1:NN) {
temp639 = lbeta(shape1[ii], shape2[ii])
@@ -1153,32 +1172,32 @@ my.dbinom <- function(x,
-betabin.ab.control <- function(save.weight=TRUE, ...)
+betabin.ab.control <- function(save.weight = TRUE, ...)
{
- list(save.weight=save.weight)
+ list(save.weight = save.weight)
}
betabin.ab = function(lshape12 = "loge", earg = list(),
- i1 = 1, i2 = NULL, method.init = 1,
+ i1 = 1, i2 = NULL, imethod = 1,
shrinkage.init = 0.95, nsimEIM = NULL, zero = NULL) {
if (mode(lshape12) != "character" && mode(lshape12) != "name")
lshape12 = as.character(substitute(lshape12))
- if (!is.Numeric(i1, positive=TRUE)) stop("bad input for argument 'i1'")
- if (length(i2) && !is.Numeric(i2, pos=TRUE))
+ if (!is.Numeric(i1, positive = TRUE)) stop("bad input for argument 'i1'")
+ if (length(i2) && !is.Numeric(i2, pos = TRUE))
stop("bad input for argument 'i2'")
if (!is.list(earg)) earg = list()
if (!is.null(nsimEIM)) {
- if (!is.Numeric(nsimEIM, allow=1, integ=TRUE))
+ if (!is.Numeric(nsimEIM, allow=1, integ = TRUE))
stop("bad input for argument 'nsimEIM'")
if (nsimEIM <= 10)
warning("'nsimEIM' should be an integer greater than 10, say")
}
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 3)
- stop("argument 'method.init' must be 1, 2 or 3")
+ if (!is.Numeric(imethod, allow=1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1, 2 or 3")
new("vglmff",
blurb = c("Beta-binomial model\n",
@@ -1205,8 +1224,8 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
if (length(mustart.orig))
mustart = mustart.orig # Retain it if inputted
predictors.names =
- c(namesof("shape1", .lshape12, earg = .earg, tag=FALSE),
- namesof("shape2", .lshape12, earg = .earg, tag=FALSE))
+ c(namesof("shape1", .lshape12, earg = .earg, tag = FALSE),
+ namesof("shape2", .lshape12, earg = .earg, tag = FALSE))
if (!length(etastart)) {
@@ -1218,9 +1237,9 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
rep( .i2, len = n)
} else if (length(mustart.orig)) {
shape1 * (1 / mustart.use - 1)
- } else if ( .method.init == 1) {
+ } else if ( .imethod == 1) {
shape1 * (1 / weighted.mean(y, w) - 1)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
temp777 = .sinit * weighted.mean(y, w) + (1- .sinit) * y
shape1 * (1 / temp777 - 1)
} else {
@@ -1238,7 +1257,7 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
}
}), list( .lshape12 = lshape12, .earg = earg, .i1 = i1, .i2 = i2,
.nsimEIM = nsimEIM,
- .method.init = method.init, .sinit = shrinkage.init ))),
+ .imethod = imethod, .sinit = shrinkage.init ))),
inverse = eval(substitute(function(eta, extra = NULL) {
shape1 = eta2theta(eta[,1], .lshape12, earg = .earg)
shape2 = eta2theta(eta[,2], .lshape12, earg = .earg)
@@ -1254,7 +1273,7 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
misc$nsimEIM = .nsimEIM
}), list( .lshape12 = lshape12, .earg = earg, .nsimEIM = nsimEIM ))),
loglikelihood = eval(substitute(
- function(mu,y,w,residuals=FALSE,eta, extra = NULL) {
+ function(mu,y,w,residuals = FALSE,eta, extra = NULL) {
ycounts = if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
y * w # Convert proportions to counts
@@ -1311,12 +1330,12 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
wz * (if (is.numeric(extra$orig.w)) extra$orig.w else 1)
} else {
run.varcov = 0
- ind1 = iam(NA, NA, M=M, both=TRUE, diag=TRUE)
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
dthetas.detas = cbind(dshape1.deta, dshape2.deta)
for (ii in 1:( .nsimEIM )) {
- ysim = rbetabin.ab(n=n, size=nvec, shape1=shape1,
- shape2=shape2)
+ ysim = rbetabin.ab(n = n, size=nvec, shape1 = shape1,
+ shape2 = shape2)
dl.dshape1 = digamma(shape1+ysim) -
digamma(shape1+shape2+nvec) -
digamma(shape1) + digamma(shape1+shape2)
@@ -1340,8 +1359,8 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
- betageometric = function(lprob="logit", lshape="loge",
- eprob=list(), eshape=list(),
+ betageometric = function(lprob = "logit", lshape = "loge",
+ eprob = list(), eshape = list(),
iprob = NULL, ishape = 0.1,
moreSummation=c(2,100), tolerance=1.0e-10, zero = NULL)
{
@@ -1349,11 +1368,11 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
lprob = as.character(substitute(lprob))
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
- if (!is.Numeric(ishape, positive=TRUE))
+ if (!is.Numeric(ishape, positive = TRUE))
stop("bad input for argument 'ishape'")
- if (!is.Numeric(moreSummation, positive=TRUE, allow=2, integ=TRUE))
+ if (!is.Numeric(moreSummation, positive = TRUE, allow=2, integ = TRUE))
stop("bad input for argument 'moreSummation'")
- if (!is.Numeric(tolerance, positive=TRUE, allow=1) ||
+ if (!is.Numeric(tolerance, positive = TRUE, allow=1) ||
1.0-tolerance >= 1.0)
stop("bad input for argument 'tolerance'")
if (!is.list(eprob)) eprob = list()
@@ -1369,12 +1388,12 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
initialize = eval(substitute(expression({
eval(geometric()@initialize)
predictors.names =
- c(namesof("prob", .lprob, earg = .eprob, tag=FALSE),
- namesof("shape", .lshape, earg = .eshape, short=FALSE))
+ c(namesof("prob", .lprob, earg = .eprob, tag = FALSE),
+ namesof("shape", .lshape, earg = .eshape, short = FALSE))
if (length( .iprob))
- prob.init = rep( .iprob, len=n)
+ prob.init = rep( .iprob, len = n)
if (!length(etastart) || ncol(cbind(etastart)) != 2) {
- shape.init = rep( .ishape, len=n)
+ shape.init = rep( .ishape, len = n)
etastart = cbind(theta2eta(prob.init, .lprob, earg = .eprob),
theta2eta(shape.init, .lshape, earg = .eshape))
}
@@ -1403,7 +1422,7 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
.eprob = eprob, .eshape = eshape,
.moreSummation = moreSummation, .zero = zero ))),
loglikelihood = eval(substitute(
- function(mu,y,w,residuals=FALSE,eta, extra = NULL) {
+ function(mu,y,w,residuals = FALSE,eta, extra = NULL) {
prob = eta2theta(eta[,1], .lprob, earg = .eprob)
shape = eta2theta(eta[,2], .lshape, earg = .eshape)
ans = log(prob)
@@ -1443,7 +1462,8 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
(ii-1)/(1+(ii-1)*shape[index])
}
dl.dshape = dl.dshape - (y+1 -1)/(1+(y+1 -1)*shape)
- w * cbind(dl.dprob * dprob.deta, dl.dshape * dshape.deta)
+ c(w) * cbind(dl.dprob * dprob.deta,
+ dl.dshape * dshape.deta)
}), list( .lprob = lprob, .lshape = lshape,
.eprob = eprob, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -1452,7 +1472,7 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
moresum = .moreSummation
maxsummation = round(maxy * moresum[1] + moresum[2])
for (ii in 3:maxsummation) {
- temp7 = 1 - pbetageom(q=ii-1-1, shape1=shape1, shape2=shape2)
+ temp7 = 1 - pbetageom(q=ii-1-1, shape1 = shape1, shape2 = shape2)
denom1 = (1-prob+(ii-2)*shape)^2
denom2 = (1+(ii-2)*shape)^2
wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + temp7 / denom1
@@ -1462,7 +1482,7 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
if (max(temp7) < .tolerance ) break;
}
ii = 2
- temp7 = 1 - pbetageom(q=ii-1-1, shape1=shape1, shape2=shape2)
+ temp7 = 1 - pbetageom(q=ii-1-1, shape1 = shape1, shape2 = shape2)
denom1 = (1-prob+(ii-2)*shape)^2
denom2 = (1+(ii-2)*shape)^2
wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + temp7 / denom1
@@ -1470,17 +1490,18 @@ betabin.ab.control <- function(save.weight=TRUE, ...)
wz[,iam(1,1,M)] = wz[,iam(1,1,M)] * dprob.deta^2
wz[,iam(2,2,M)] = wz[,iam(2,2,M)] * dshape.deta^2
wz[,iam(2,1,M)] = wz[,iam(2,1,M)] * dprob.deta * dshape.deta
- w * wz
- }), list( .lprob = lprob, .lshape = lshape, .moreSummation = moreSummation,
+ c(w) * wz
+ }), list( .lprob = lprob, .lshape = lshape,
.eprob = eprob, .eshape = eshape,
+ .moreSummation = moreSummation,
.tolerance = tolerance ))))
}
-seq2binomial = function(lprob1="logit", lprob2="logit",
- eprob1=list(), eprob2=list(),
+seq2binomial = function(lprob1 = "logit", lprob2 = "logit",
+ eprob1 = list(), eprob2 = list(),
iprob1 = NULL, iprob2 = NULL,
zero = NULL)
{
@@ -1489,10 +1510,10 @@ seq2binomial = function(lprob1="logit", lprob2="logit",
if (mode(lprob2) != "character" && mode(lprob2) != "name")
lprob2 = as.character(substitute(lprob2))
if (length(iprob1) &&
- (!is.Numeric(iprob1, positive=TRUE) || max(iprob1) >= 1))
+ (!is.Numeric(iprob1, positive = TRUE) || max(iprob1) >= 1))
stop("bad input for argument 'iprob1'")
if (length(iprob2) &&
- (!is.Numeric(iprob2, positive=TRUE) || max(iprob2) >= 1))
+ (!is.Numeric(iprob2, positive = TRUE) || max(iprob2) >= 1))
stop("bad input for argument 'iprob2'")
if (!is.list(eprob1)) eprob1 = list()
if (!is.list(eprob2)) eprob2 = list()
@@ -1523,12 +1544,12 @@ seq2binomial = function(lprob1="logit", lprob2="logit",
if (any(abs(svector - round(svector)) > 1.0e-8))
warning("number of successes in column two should be integer-valued")
predictors.names =
- c(namesof("prob1", .lprob1,earg= .eprob1, tag=FALSE),
- namesof("prob2", .lprob2,earg= .eprob2, tag=FALSE))
- prob1.init = if (is.Numeric( .iprob1)) rep( .iprob1, len=n) else
- rep(weighted.mean(y[,1], w=w), len=n)
- prob2.init = if (is.Numeric( .iprob2)) rep( .iprob2, len=n) else
- rep(weighted.mean(y[,2], w=w*y[,1]), len=n)
+ c(namesof("prob1", .lprob1,earg= .eprob1, tag = FALSE),
+ namesof("prob2", .lprob2,earg= .eprob2, tag = FALSE))
+ prob1.init = if (is.Numeric( .iprob1)) rep( .iprob1, len = n) else
+ rep(weighted.mean(y[,1], w=w), len = n)
+ prob2.init = if (is.Numeric( .iprob2)) rep( .iprob2, len = n) else
+ rep(weighted.mean(y[,2], w=w*y[,1]), len = n)
if (!length(etastart)) {
etastart = cbind(theta2eta(prob1.init, .lprob1, earg = .eprob1),
theta2eta(prob2.init, .lprob2, earg = .eprob2))
@@ -1551,7 +1572,7 @@ seq2binomial = function(lprob1="logit", lprob2="logit",
.eprob1 = eprob1, .eprob2 = eprob2,
.zero = zero ))),
loglikelihood = eval(substitute(
- function(mu,y,w,residuals=FALSE,eta, extra = NULL) {
+ function(mu,y,w,residuals = FALSE,eta, extra = NULL) {
prob1 = eta2theta(eta[,1], .lprob1, earg = .eprob1)
prob2 = eta2theta(eta[,2], .lprob2, earg = .eprob2)
smallno = 100 * .Machine$double.eps
@@ -1592,7 +1613,7 @@ seq2binomial = function(lprob1="logit", lprob2="logit",
wz = matrix(0, n, M)
wz[,iam(1,1,M)] = (dprob1.deta^2) / (prob1 * (1-prob1))
wz[,iam(2,2,M)] = (dprob2.deta^2) * prob1 / (prob2 * (1-prob2))
- w * wz
+ c(w) * wz
}), list( .lprob1 = lprob1, .lprob2 = lprob2,
.eprob1 = eprob1, .eprob2 = eprob2 ))))
}
@@ -1609,9 +1630,9 @@ zipebcom = function(lmu12 = "cloglog", lphi12 = "logit", loratio = "loge",
lphi12 = as.character(substitute(lphi12))
if (mode(loratio) != "character" && mode(loratio) != "name")
loratio = as.character(substitute(loratio))
- if (!is.Numeric(tol, positive=TRUE, allow=1) || tol > 0.1)
+ if (!is.Numeric(tol, positive = TRUE, allow=1) || tol > 0.1)
stop("bad input for argument 'tol'")
- if (!is.Numeric(addRidge, allow=1, posit=TRUE) || addRidge > 0.5)
+ if (!is.Numeric(addRidge, allow=1, posit = TRUE) || addRidge > 0.5)
stop("bad input for argument 'addRidge'")
if (!is.list(emu12)) emu12 = list()
if (!is.list(ephi12)) ephi12 = list()
@@ -1646,11 +1667,11 @@ zipebcom = function(lmu12 = "cloglog", lphi12 = "logit", loratio = "loge",
if (!length(etastart)) {
pstar.init = ((mu[,3]+mu[,4]) + (mu[,2]+mu[,4])) / 2
- phi.init = if (length(.iphi12)) rep(.iphi12, len=n) else
+ phi.init = if (length(.iphi12)) rep(.iphi12, len = n) else
min(propY1.eq.0 * 0.95, propY2.eq.0 * 0.95, pstar.init/1.5)
- oratio.init = if (length( .ioratio)) rep( .ioratio, len=n) else
+ oratio.init = if (length( .ioratio)) rep( .ioratio, len = n) else
mu[,4]*mu[,1]/(mu[,2]*mu[,3])
- mu12.init = if (length(.imu12)) rep(.imu12, len=n) else
+ mu12.init = if (length(.imu12)) rep(.imu12, len = n) else
pstar.init / (1-phi.init)
etastart = cbind(
theta2eta(mu12.init, .lmu12, earg = .emu12),
@@ -1731,7 +1752,9 @@ zipebcom = function(lmu12 = "cloglog", lphi12 = "logit", loratio = "loge",
dthetas.detas = cbind(dtheta.deta(A1vec, .lmu12, earg = .emu12),
dtheta.deta(phivec, .lphi12, earg = .ephi12),
dtheta.deta(oratio, .loratio, earg = .eoratio))
- w * cbind(dl.dmu1, dl.dphi1, dl.doratio) * dthetas.detas
+ c(w) * cbind(dl.dmu1,
+ dl.dphi1,
+ dl.doratio) * dthetas.detas
}), list( .lmu12 = lmu12, .lphi12 = lphi12, .loratio = loratio,
.emu12 = emu12, .ephi12 = ephi12, .eoratio = eoratio ))),
weight = eval(substitute(expression({
@@ -1752,7 +1775,7 @@ zipebcom = function(lmu12 = "cloglog", lphi12 = "logit", loratio = "loge",
wz[,iam(3,3,M)] = alternwz33
wz[,1:2] = wz[,1:2] * (1 + .addRidge)
- w * wz
+ c(w) * wz
}), list( .addRidge = addRidge ))))
}
@@ -1964,12 +1987,12 @@ if (FALSE)
binom2.Rho = function(rho = 0, imu1 = NULL, imu2 = NULL,
- exchangeable=FALSE, nsimEIM = NULL)
+ exchangeable = FALSE, nsimEIM = NULL)
{
lmu12 = "probit"
emu12 = list()
if (is.Numeric(nsimEIM)) {
- if (!is.Numeric(nsimEIM, allow=1, integ=TRUE))
+ if (!is.Numeric(nsimEIM, allow=1, integ = TRUE))
stop("bad input for argument 'nsimEIM'")
if (nsimEIM <= 100)
warning("'nsimEIM' should be an integer greater than 100")
@@ -1995,9 +2018,9 @@ if (FALSE)
save.weight <- control$save.weight <- FALSE
}
if (is.null(etastart)) {
- mu1.init= if (is.Numeric(.imu1)) rep(.imu1, len=n) else
+ mu1.init= if (is.Numeric(.imu1)) rep(.imu1, len = n) else
mu[,3] + mu[,4]
- mu2.init= if (is.Numeric(.imu2)) rep(.imu2, len=n) else
+ mu2.init= if (is.Numeric(.imu2)) rep(.imu2, len = n) else
mu[,2] + mu[,4]
etastart = cbind(theta2eta(mu1.init, .lmu12, earg = .emu12),
theta2eta(mu2.init, .lmu12, earg = .emu12))
@@ -2055,8 +2078,8 @@ if (FALSE)
ABmat = (eta[,1:2] - rhovec*eta[,2:1]) / sqrt(1-rhovec^2)
PhiA = pnorm(ABmat[,1])
PhiB = pnorm(ABmat[,2])
- onemPhiA = pnorm(ABmat[,1], lower.tail=FALSE)
- onemPhiB = pnorm(ABmat[,2], lower.tail=FALSE)
+ onemPhiA = pnorm(ABmat[,1], lower.tail = FALSE)
+ onemPhiB = pnorm(ABmat[,2], lower.tail = FALSE)
smallno = 1000 * .Machine$double.eps
p00[p00 < smallno] = smallno
@@ -2071,7 +2094,7 @@ if (FALSE)
dprob2.deta = dtheta.deta(pmargin[,2], .lmu12, earg = .emu12)
dthetas.detas = cbind(dprob1.deta, dprob2.deta)
- w * cbind(dl.dprob1, dl.dprob2) * dthetas.detas
+ c(w) * cbind(dl.dprob1, dl.dprob2) * dthetas.detas
}), list( .lmu12 = lmu12, .emu12 = emu12, .rho = rho ))),
weight = eval(substitute(expression({
if (is.null( .nsimEIM)) {
@@ -2085,10 +2108,10 @@ if (FALSE)
wz[,iam(1,2,M)] = d2l.dprob1prob2 * dprob1.deta * dprob2.deta
} else {
run.varcov = 0
- ind1 = iam(NA, NA, M=M, both=TRUE, diag=TRUE)
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
for (ii in 1:( .nsimEIM )) {
- ysim = rbinom2.rho(n=n, mu1=pmargin[,1], mu2=pmargin[,2],
- twoCols=FALSE, rho=rhovec)
+ ysim = rbinom2.rho(n = n, mu1=pmargin[,1], mu2=pmargin[,2],
+ twoCols = FALSE, rho=rhovec)
dl.dprob1 = PhiB * (ysim[,4]/p11-ysim[,2]/p01) +
onemPhiB * (ysim[,3]/p10-ysim[,1]/p00)
dl.dprob2 = PhiA * (ysim[,4]/p11-ysim[,3]/p10) +
@@ -2105,7 +2128,7 @@ if (FALSE)
wz = wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
}
- w * wz
+ c(w) * wz
}), list( .nsimEIM = nsimEIM ))))
}
diff --git a/R/family.bivariate.R b/R/family.bivariate.R
index b5377cf..428caef 100644
--- a/R/family.bivariate.R
+++ b/R/family.bivariate.R
@@ -12,25 +12,25 @@
-bilogistic4.control <- function(save.weight=TRUE, ...)
+bilogistic4.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- bilogistic4 = function(llocation="identity",
- lscale="loge",
- iloc1=NULL, iscale1=NULL,
- iloc2=NULL, iscale2=NULL,
- method.init=1, zero=NULL) {
+ bilogistic4 = function(llocation = "identity",
+ lscale = "loge",
+ iloc1 = NULL, iscale1 = NULL,
+ iloc2 = NULL, iscale2 = NULL,
+ imethod = 1, zero = NULL) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 2) stop("method.init must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("imethod must be 1 or 2")
new("vglmff",
- blurb=c("Bivariate logistic distribution\n\n",
+ blurb = c("Bivariate logistic distribution\n\n",
"Link: ",
namesof("location1", llocation), ", ",
namesof("scale1", lscale), ", ",
@@ -38,75 +38,77 @@ bilogistic4.control <- function(save.weight=TRUE, ...)
namesof("scale2", lscale),
"\n", "\n",
"Means: location1, location2"),
- constraints=eval(substitute(expression({
+ constraints = eval(substitute(expression({
constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list(.zero=zero))),
- initialize=eval(substitute(expression({
+ }), list( .zero = zero))),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
- stop("the response must be a 2 column matrix")
+ stop("the response must be a 2-column matrix")
+
predictors.names = c(namesof("location1", .llocation, tag= FALSE),
namesof("scale1", .lscale, tag= FALSE),
namesof("location2", .llocation, tag= FALSE),
namesof("scale2", .lscale, tag= FALSE))
+
if (!length(etastart)) {
- if ( .method.init == 1) {
- location.init1 = y[,1]
- scale.init1 = sqrt(3) * sd(y[,1]) / pi
+ if ( .imethod == 1) {
+ location.init1 = y[, 1]
+ scale.init1 = sqrt(3) * sd(y[, 1]) / pi
location.init2 = y[,2]
scale.init2 = sqrt(3) * sd(y[,2]) / pi
} else {
- location.init1 = median(rep(y[,1], w))
+ location.init1 = median(rep(y[, 1], w))
location.init2 = median(rep(y[,2], w))
- scale.init1=sqrt(3)*sum(w*(y[,1]-location.init1)^2)/(sum(w)*pi)
+ scale.init1=sqrt(3)*sum(w*(y[, 1]-location.init1)^2)/(sum(w)*pi)
scale.init2=sqrt(3)*sum(w*(y[,2]-location.init2)^2)/(sum(w)*pi)
}
- loc1.init = if (length(.iloc1)) rep(.iloc1, len=n) else
- rep(location.init1, len=n)
- loc2.init = if (length(.iloc2)) rep(.iloc2, len=n) else
- rep(location.init2, len=n)
- scale1.init = if (length(.iscale1)) rep(.iscale1, len=n) else
- rep(1, len=n)
- scale2.init = if (length(.iscale2)) rep(.iscale2, len=n) else
- rep(1, len=n)
- if (.llocation=="loge") location.init1 = abs(location.init1) + 0.001
- if (.llocation=="loge") location.init2 = abs(location.init2) + 0.001
+ loc1.init = if (length(.iloc1)) rep(.iloc1, len = n) else
+ rep(location.init1, len = n)
+ loc2.init = if (length(.iloc2)) rep(.iloc2, len = n) else
+ rep(location.init2, len = n)
+ scale1.init = if (length(.iscale1)) rep(.iscale1, len = n) else
+ rep(1, len = n)
+ scale2.init = if (length(.iscale2)) rep(.iscale2, len = n) else
+ rep(1, len = n)
+ if (.llocation == "loge") location.init1 = abs(location.init1) + 0.001
+ if (.llocation == "loge") location.init2 = abs(location.init2) + 0.001
etastart = cbind(theta2eta(location.init1, .llocation),
theta2eta(scale1.init, .lscale),
theta2eta(location.init2, .llocation),
theta2eta(scale2.init, .lscale))
}
- }), list(.method.init=method.init, .iloc1=iloc1, .iloc2=iloc2,
+ }), list(.imethod = imethod, .iloc1=iloc1, .iloc2=iloc2,
.llocation=llocation,
.iscale1=iscale1, .iscale2=iscale2, .lscale=lscale))),
- inverse=function(eta, extra=NULL) {
- cbind(eta[,1], eta[,2])
+ inverse=function(eta, extra = NULL) {
+ cbind(eta[, 1], eta[,2])
},
- last=eval(substitute(expression({
+ last = eval(substitute(expression({
misc$link = c(location1= .llocation, scale1= .lscale,
location2= .llocation, scale2= .lscale)
misc$expected = FALSE
misc$BFGS = TRUE
}), list(.lscale=lscale, .llocation=llocation))),
- loglikelihood=eval(substitute(
- function(mu,y,w,residuals= FALSE,eta, extra=NULL) {
- loc1 = eta2theta(eta[,1], .llocation)
+ loglikelihood = eval(substitute(
+ function(mu,y,w,residuals= FALSE,eta, extra = NULL) {
+ loc1 = eta2theta(eta[, 1], .llocation)
Scale1 = eta2theta(eta[,2], .lscale)
loc2 = eta2theta(eta[,3], .llocation)
Scale2 = eta2theta(eta[,4], .lscale)
- zedd1 = (y[,1]-loc1) / Scale1
+ zedd1 = (y[, 1]-loc1) / Scale1
zedd2 = (y[,2]-loc2) / Scale2
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else
sum(w * (-zedd1 - zedd2 - 3 * log1p(exp(-zedd1)+exp(-zedd2)) -
log(Scale1) - log(Scale2)))
}, list(.lscale=lscale, .llocation=llocation))),
- vfamily=c("bilogistic4"),
- deriv=eval(substitute(expression({
- loc1 = eta2theta(eta[,1], .llocation)
+ vfamily = c("bilogistic4"),
+ deriv = eval(substitute(expression({
+ loc1 = eta2theta(eta[, 1], .llocation)
Scale1 = eta2theta(eta[,2], .lscale)
loc2 = eta2theta(eta[,3], .llocation)
Scale2 = eta2theta(eta[,4], .lscale)
- zedd1 = (y[,1]-loc1) / Scale1
+ zedd1 = (y[, 1]-loc1) / Scale1
zedd2 = (y[,2]-loc2) / Scale2
ezedd1 = exp(-zedd1)
ezedd2 = exp(-zedd2)
@@ -126,13 +128,13 @@ bilogistic4.control <- function(save.weight=TRUE, ...)
etaold = etanew
etanew = eta
}
- derivnew = w * cbind(dl.dloc1 * dloc1.deta,
- dl.dscale1 * dscale1.deta,
- dl.dloc2 * dloc2.deta,
- dl.dscale2 * dscale2.deta)
+ derivnew = c(w) * cbind(dl.dloc1 * dloc1.deta,
+ dl.dscale1 * dscale1.deta,
+ dl.dloc2 * dloc2.deta,
+ dl.dscale2 * dscale2.deta)
derivnew
}), list(.lscale=lscale, .llocation=llocation))),
- weight=eval(substitute(expression({
+ weight = eval(substitute(expression({
if (iter == 1) {
wznew = cbind(matrix(w, n, M), matrix(0, n, dimm(M)-M))
} else {
@@ -147,27 +149,27 @@ bilogistic4.control <- function(save.weight=TRUE, ...)
-rbilogis4 = function(n, loc1=0, scale1=1, loc2=0, scale2=1) {
- if (!is.Numeric(n, posit=TRUE,allow=1,integ=TRUE)) stop("bad input for 'n'")
- if (!is.Numeric(scale1, posit=TRUE)) stop("bad input for 'scale1'")
- if (!is.Numeric(scale2, posit=TRUE)) stop("bad input for 'scale2'")
+rbilogis4 = function(n, loc1=0, scale1 = 1, loc2=0, scale2 = 1) {
+ if (!is.Numeric(n, posit = TRUE,allow = 1,integ = TRUE)) stop("bad input for 'n'")
+ if (!is.Numeric(scale1, posit = TRUE)) stop("bad input for 'scale1'")
+ if (!is.Numeric(scale2, posit = TRUE)) stop("bad input for 'scale2'")
y1 = rlogis(n, loc=loc1, scale=scale1)
ezedd1 = exp(-(y1-loc1)/scale1)
y2 = loc2 - scale2 * log(1/sqrt(runif(n) / (1 + ezedd1)^2) - 1 - ezedd1)
cbind(y1, y2)
}
-pbilogis4 = function(q1, q2, loc1=0, scale1=1, loc2=0, scale2=1) {
+pbilogis4 = function(q1, q2, loc1=0, scale1 = 1, loc2=0, scale2 = 1) {
if (!is.Numeric(q1)) stop("bad input for 'q1'")
if (!is.Numeric(q2)) stop("bad input for 'q2'")
- if (!is.Numeric(scale1, posit=TRUE)) stop("bad input for 'scale1'")
- if (!is.Numeric(scale2, posit=TRUE)) stop("bad input for 'scale2'")
+ if (!is.Numeric(scale1, posit = TRUE)) stop("bad input for 'scale1'")
+ if (!is.Numeric(scale2, posit = TRUE)) stop("bad input for 'scale2'")
1 / (1 + exp(-(q1-loc1)/scale1) + exp(-(q2-loc2)/scale2))
}
-dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
+dbilogis4 = function(x1, x2, loc1=0, scale1 = 1, loc2=0, scale2 = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -175,9 +177,9 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
L = max(length(x1), length(x2), length(loc1), length(loc2),
length(scale1), length(scale2))
- x1 = rep(x1, len=L); x2 = rep(x2, len=L);
- loc1 = rep(loc1, len=L); loc2 = rep(loc2, len=L);
- scale1 = rep(scale1, len=L); scale2 = rep(scale2, len=L);
+ x1 = rep(x1, len = L); x2 = rep(x2, len = L);
+ loc1 = rep(loc1, len = L); loc2 = rep(loc2, len = L);
+ scale1 = rep(scale1, len = L); scale2 = rep(scale2, len = L);
zedd1 = (-(x1-loc1)/scale1)
zedd2 = (-(x2-loc2)/scale2)
logdensity = log(2) + log(zedd1) + log(zedd2) - log(scale1) -
@@ -188,13 +190,13 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
- freund61 = function(la="loge",
- lap="loge",
- lb="loge",
- lbp="loge",
- ia=NULL, iap=NULL, ib=NULL, ibp=NULL,
- independent=FALSE,
- zero=NULL) {
+ freund61 = function(la = "loge",
+ lap = "loge",
+ lb = "loge",
+ lbp = "loge",
+ ia = NULL, iap = NULL, ib = NULL, ibp = NULL,
+ independent = FALSE,
+ zero = NULL) {
if (mode(la) != "character" && mode(la) != "name")
la = as.character(substitute(la))
if (mode(lap) != "character" && mode(lap) != "name")
@@ -205,60 +207,60 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
lbp = as.character(substitute(lbp))
new("vglmff",
- blurb=c("Freund (1961) Bivariate Exponential Distribution\n",
+ blurb = c("Freund (1961) bivariate exponential distribution\n",
"Links: ",
namesof("a", la), ", ",
namesof("ap", lap), ", ",
namesof("b", lb), ", ",
namesof("bp", lbp)),
- constraints=eval(substitute(expression({
+ constraints = eval(substitute(expression({
constraints <- cm.vgam(matrix(c(1,1,0,0, 0,0,1,1),M,2), x,
- .independent, constraints, intercept.apply=TRUE)
+ .independent, constraints, intercept.apply = TRUE)
constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list(.independent=independent, .zero=zero))),
- initialize=eval(substitute(expression({
+ }), list(.independent=independent, .zero = zero))),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
- predictors.names = c(namesof("a", .la, short=TRUE),
- namesof("ap", .lap, short=TRUE),
- namesof("b", .lb, short=TRUE),
- namesof("bp", .lbp, short=TRUE))
- extra$y1.lt.y2 = y[,1] < y[,2]
+ predictors.names = c(namesof("a", .la, short = TRUE),
+ namesof("ap", .lap, short = TRUE),
+ namesof("b", .lb, short = TRUE),
+ namesof("bp", .lbp, short = TRUE))
+ extra$y1.lt.y2 = y[, 1] < y[,2]
if (!(arr <- sum(extra$y1.lt.y2)) || arr==n)
stop("identifiability problem: either all y1<y2 or y2<y1")
if (!length(etastart)) {
- sumx = sum(y[extra$y1.lt.y2,1]); sumxp = sum(y[!extra$y1.lt.y2,1])
+ sumx = sum(y[extra$y1.lt.y2, 1]); sumxp = sum(y[!extra$y1.lt.y2, 1])
sumy = sum(y[extra$y1.lt.y2,2]); sumyp = sum(y[!extra$y1.lt.y2,2])
if (FALSE) { # Noise:
arr = min(arr + n/10, n*0.95)
sumx = sumx * 1.1; sumxp = sumxp * 1.2;
sumy = sumy * 1.2; sumyp = sumyp * 1.3;
}
- ainit = if (length(.ia)) rep(.ia, len=n) else arr / (sumx + sumyp)
- apinit = if (length(.iap)) rep(.iap,len=n) else (n-arr)/(sumxp-sumyp)
- binit = if (length(.ib)) rep(.ib, len=n) else (n-arr)/(sumx +sumyp)
- bpinit = if (length(.ib)) rep(.ibp,len=n) else arr / (sumy - sumx)
- etastart = cbind(theta2eta(rep(ainit, len=n), .la),
- theta2eta(rep(apinit, len=n), .lap),
- theta2eta(rep(binit, len=n), .lb),
- theta2eta(rep(bpinit, len=n), .lbp))
+ ainit = if (length(.ia)) rep(.ia, len = n) else arr / (sumx + sumyp)
+ apinit = if (length(.iap)) rep(.iap,len = n) else (n-arr)/(sumxp-sumyp)
+ binit = if (length(.ib)) rep(.ib, len = n) else (n-arr)/(sumx +sumyp)
+ bpinit = if (length(.ib)) rep(.ibp,len = n) else arr / (sumy - sumx)
+ etastart = cbind(theta2eta(rep(ainit, len = n), .la),
+ theta2eta(rep(apinit, len = n), .lap),
+ theta2eta(rep(binit, len = n), .lb),
+ theta2eta(rep(bpinit, len = n), .lbp))
}
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp, .ia=ia, .iap=iap,
.ib=ib, .ibp=ibp))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- alpha = eta2theta(eta[,1], .la)
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ alpha = eta2theta(eta[, 1], .la)
alphap = eta2theta(eta[,2], .lap)
beta = eta2theta(eta[,3], .lb)
betap = eta2theta(eta[,4], .lbp)
cbind((alphap+beta) / (alphap*(alpha+beta)),
(alpha+betap) / (betap*(alpha+beta)))
}, list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
- last=eval(substitute(expression({
+ last = eval(substitute(expression({
misc$link = c("a"= .la, "ap"= .lap, "b"= .lb, "bp"= .lbp)
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- alpha = eta2theta(eta[,1], .la)
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ alpha = eta2theta(eta[, 1], .la)
alphap = eta2theta(eta[,2], .lap)
beta = eta2theta(eta[,3], .lb)
betap = eta2theta(eta[,4], .lbp)
@@ -267,44 +269,44 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
tmp88 = extra$y1.lt.y2
ell1 = log(alpha[tmp88]) + log(betap[tmp88]) -
betap[tmp88] * y[tmp88,2] -
- (alpha+beta-betap)[tmp88] * y[tmp88,1]
+ (alpha+beta-betap)[tmp88] * y[tmp88, 1]
ell2 = log(beta[!tmp88]) + log(alphap[!tmp88]) -
- alphap[!tmp88] * y[!tmp88,1] -
+ alphap[!tmp88] * y[!tmp88, 1] -
(alpha+beta-alphap)[!tmp88] * y[!tmp88,2]
sum(w[tmp88] * ell1) + sum(w[!tmp88] * ell2) }
}, list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
- vfamily=c("freund61"),
- deriv=eval(substitute(expression({
+ vfamily = c("freund61"),
+ deriv = eval(substitute(expression({
tmp88 = extra$y1.lt.y2
- alpha = eta2theta(eta[,1], .la)
+ alpha = eta2theta(eta[, 1], .la)
alphap = eta2theta(eta[,2], .lap)
beta = eta2theta(eta[,3], .lb)
betap = eta2theta(eta[,4], .lbp)
- d1 = 1/alpha - y[,1]
+ d1 = 1/alpha - y[, 1]
d1[!tmp88] = -y[!tmp88,2]
d2 = 0 * alphap
- d2[!tmp88] = 1/alphap[!tmp88] - y[!tmp88,1] + y[!tmp88,2]
- d3 = -y[,1]
+ d2[!tmp88] = 1/alphap[!tmp88] - y[!tmp88, 1] + y[!tmp88,2]
+ d3 = -y[, 1]
d3[!tmp88] = 1/beta[!tmp88] - y[!tmp88,2]
- d4 = 1/betap - y[,2] + y[,1]
+ d4 = 1/betap - y[,2] + y[, 1]
d4[!tmp88] = 0
- w * cbind(d1 * dtheta.deta(alpha, .la),
- d2 * dtheta.deta(alphap, .lap),
- d3 * dtheta.deta(beta, .lb),
- d4 * dtheta.deta(betap, .lbp))
+ c(w) * cbind(d1 * dtheta.deta(alpha, .la),
+ d2 * dtheta.deta(alphap, .lap),
+ d3 * dtheta.deta(beta, .lb),
+ d4 * dtheta.deta(betap, .lbp))
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
- weight=eval(substitute(expression({
+ weight = eval(substitute(expression({
py1.lt.y2 = alpha / (alpha+beta)
d11 = py1.lt.y2 / alpha^2
d22 = (1-py1.lt.y2) / alphap^2
d33 = (1-py1.lt.y2) / beta^2
d44 = py1.lt.y2 / betap^2
wz = matrix(0, n, M) # diagonal
- wz[,iam(1,1,M)] = dtheta.deta(alpha, .la)^2 * d11
- wz[,iam(2,2,M)] = dtheta.deta(alphap, .lap)^2 * d22
- wz[,iam(3,3,M)] = dtheta.deta(beta, .lb)^2 * d33
- wz[,iam(4,4,M)] = dtheta.deta(betap, .lbp)^2 * d44
- w * wz
+ wz[, iam(1,1,M)] = dtheta.deta(alpha, .la)^2 * d11
+ wz[, iam(2,2,M)] = dtheta.deta(alphap, .lap)^2 * d22
+ wz[, iam(3,3,M)] = dtheta.deta(beta, .lb)^2 * d33
+ wz[, iam(4,4,M)] = dtheta.deta(betap, .lbp)^2 * d44
+ c(w) * wz
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))))
}
@@ -315,14 +317,14 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
- bivgamma.mckay = function(lscale="loge",
- lshape1="loge",
- lshape2="loge",
- iscale=NULL,
- ishape1=NULL,
- ishape2=NULL,
- method.init=1,
- zero=1) {
+ bivgamma.mckay = function(lscale = "loge",
+ lshape1 = "loge",
+ lshape2 = "loge",
+ iscale = NULL,
+ ishape1 = NULL,
+ ishape2 = NULL,
+ imethod = 1,
+ zero = 1) {
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
if (mode(lshape1) != "character" && mode(lshape1) != "name")
@@ -338,34 +340,34 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
if (!is.null(ishape2))
if (!is.Numeric(ishape2, positive = TRUE))
stop("'ishape2' must be positive or NULL")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, positi=TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
new("vglmff",
- blurb=c("Bivariate Gamma: McKay's Distribution\n",
+ blurb = c("Bivariate gamma: McKay's distribution\n",
"Links: ",
namesof("scale", lscale), ", ",
namesof("shape1", lshape1), ", ",
namesof("shape2", lshape2)),
- constraints=eval(substitute(expression({
+ constraints = eval(substitute(expression({
constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero=zero ))),
- initialize=eval(substitute(expression({
+ }), list( .zero = zero ))),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
- if (any(y[,1] >= y[,2]))
+ if (any(y[, 1] >= y[,2]))
stop("the second column minus the first column must be a vector ",
"of positive values")
- predictors.names = c(namesof("scale", .lscale, short=TRUE),
- namesof("shape1", .lshape1, short=TRUE),
- namesof("shape2", .lshape2, short=TRUE))
+ predictors.names = c(namesof("scale", .lscale, short = TRUE),
+ namesof("shape1", .lshape1, short = TRUE),
+ namesof("shape2", .lshape2, short = TRUE))
if (!length(etastart)) {
- momentsY = if ( .method.init == 1) {
- cbind(median(y[,1]), # This may not be monotonic
+ momentsY = if ( .imethod == 1) {
+ cbind(median(y[, 1]), # This may not be monotonic
median(y[,2])) + 0.01
} else {
- cbind(weighted.mean(y[,1], w),
+ cbind(weighted.mean(y[, 1], w),
weighted.mean(y[,2], w))
}
@@ -375,21 +377,21 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
p = (1/a) * abs(momentsY[1]) + 0.01
q = (1/a) * abs(momentsY[2] - momentsY[1]) + 0.01
sum(w * (-(p+q)*log(a) - lgamma(p) - lgamma(q) +
- (p-1)*log(y[,1]) + (q-1)*log(y[,2]-y[,1]) - y[,2] / a ))
+ (p - 1)*log(y[, 1]) + (q - 1)*log(y[,2]-y[, 1]) - y[,2] / a ))
}
a.grid = if (length( .iscale )) c( .iscale ) else
c(0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100)
extraargs = list(momentsY = momentsY)
ainit = getMaxMin(a.grid, objfun=mcg2.loglik,
- y=y, x=x, w=w, maximize=TRUE,
+ y=y, x=x, w=w, maximize = TRUE,
extraargs = extraargs)
- ainit = rep(if(is.Numeric( .iscale )) .iscale else ainit, len=n)
+ ainit = rep(if(is.Numeric( .iscale )) .iscale else ainit, len = n)
pinit = (1/ainit) * abs(momentsY[1]) + 0.01
qinit = (1/ainit) * abs(momentsY[2] - momentsY[1]) + 0.01
- pinit = rep(if(is.Numeric( .ishape1 )) .ishape1 else pinit, len=n)
- qinit = rep(if(is.Numeric( .ishape2 )) .ishape2 else qinit, len=n)
+ pinit = rep(if(is.Numeric( .ishape1 )) .ishape1 else pinit, len = n)
+ qinit = rep(if(is.Numeric( .ishape2 )) .ishape2 else qinit, len = n)
etastart = cbind(theta2eta(ainit, .lscale),
theta2eta(pinit, .lshape1),
@@ -397,14 +399,14 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
}
}), list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2,
.iscale=iscale, .ishape1=ishape1, .ishape2=ishape2,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- a = eta2theta(eta[,1], .lscale)
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ a = eta2theta(eta[, 1], .lscale)
p = eta2theta(eta[,2], .lshape1)
q = eta2theta(eta[,3], .lshape2)
cbind("y1"=p*a, "y2"=(p+q)*a)
}, list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2 ))),
- last=eval(substitute(expression({
+ last = eval(substitute(expression({
misc$link = c("scale"= .lscale, "shape1"= .lshape1, "shape2"= .lshape2)
misc$ishape1 = .ishape1
misc$ishape2 = .ishape2
@@ -412,29 +414,29 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
misc$expected = TRUE
}), list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2,
.iscale=iscale, .ishape1=ishape1, .ishape2=ishape2 ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- a = eta2theta(eta[,1], .lscale)
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ a = eta2theta(eta[, 1], .lscale)
p = eta2theta(eta[,2], .lshape1)
q = eta2theta(eta[,3], .lshape2)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else
sum(w * (-(p+q)*log(a) - lgamma(p) - lgamma(q) +
- (p-1)*log(y[,1]) + (q-1)*log(y[,2]-y[,1]) - y[,2] / a))
+ (p - 1)*log(y[, 1]) + (q - 1)*log(y[,2]-y[, 1]) - y[,2] / a))
}, list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2 ))),
- vfamily=c("bivgamma.mckay"),
- deriv=eval(substitute(expression({
- aparam = eta2theta(eta[,1], .lscale)
+ vfamily = c("bivgamma.mckay"),
+ deriv = eval(substitute(expression({
+ aparam = eta2theta(eta[, 1], .lscale)
shape1 = eta2theta(eta[,2], .lshape1)
shape2 = eta2theta(eta[,3], .lshape2)
dl.da = (-(shape1+shape2) + y[,2] / aparam) / aparam
- dl.dshape1 = -log(aparam) - digamma(shape1) + log(y[,1])
- dl.dshape2 = -log(aparam) - digamma(shape2) + log(y[,2]-y[,1])
- w * cbind(dl.da * dtheta.deta(aparam, .lscale),
- dl.dshape1 * dtheta.deta(shape1, .lshape1),
- dl.dshape2 * dtheta.deta(shape2, .lshape2))
+ dl.dshape1 = -log(aparam) - digamma(shape1) + log(y[, 1])
+ dl.dshape2 = -log(aparam) - digamma(shape2) + log(y[,2]-y[, 1])
+ c(w) * cbind(dl.da * dtheta.deta(aparam, .lscale),
+ dl.dshape1 * dtheta.deta(shape1, .lshape1),
+ dl.dshape2 * dtheta.deta(shape2, .lshape2))
}), list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2 ))),
- weight=eval(substitute(expression({
+ weight = eval(substitute(expression({
d11 = (shape1+shape2) / aparam^2
d22 = trigamma(shape1)
d33 = trigamma(shape2)
@@ -442,16 +444,16 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
d13 = 1 / aparam
d23 = 0
wz = matrix(0, n, dimm(M))
- wz[,iam(1,1,M)] = dtheta.deta(aparam, .lscale)^2 * d11
- wz[,iam(2,2,M)] = dtheta.deta(shape1, .lshape1)^2 * d22
- wz[,iam(3,3,M)] = dtheta.deta(shape2, .lshape2)^2 * d33
- wz[,iam(1,2,M)] = dtheta.deta(aparam, .lscale) *
+ wz[, iam(1,1,M)] = dtheta.deta(aparam, .lscale)^2 * d11
+ wz[, iam(2,2,M)] = dtheta.deta(shape1, .lshape1)^2 * d22
+ wz[, iam(3,3,M)] = dtheta.deta(shape2, .lshape2)^2 * d33
+ wz[, iam(1,2,M)] = dtheta.deta(aparam, .lscale) *
dtheta.deta(shape1, .lshape1) * d12
- wz[,iam(1,3,M)] = dtheta.deta(aparam, .lscale) *
+ wz[, iam(1,3,M)] = dtheta.deta(aparam, .lscale) *
dtheta.deta(shape2, .lshape2) * d13
- wz[,iam(2,3,M)] = dtheta.deta(shape1, .lshape1) *
+ wz[, iam(2,3,M)] = dtheta.deta(shape1, .lshape1) *
dtheta.deta(shape2, .lshape2) * d23
- w * wz
+ c(w) * wz
}), list( .lscale=lscale, .lshape1=lshape1, .lshape2=lshape2 ))))
}
@@ -465,21 +467,21 @@ dbilogis4 = function(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE) {
rfrank = function(n, alpha) {
- if (!is.Numeric(n, posit=TRUE, allow=1, integ=TRUE)) stop("bad input for 'n'")
- if (!is.Numeric(alpha, posit=TRUE)) stop("bad input for 'alpha'")
- alpha = rep(alpha, len=n)
+ if (!is.Numeric(n, posit = TRUE, allow = 1, integ = TRUE)) stop("bad input for 'n'")
+ if (!is.Numeric(alpha, posit = TRUE)) stop("bad input for 'alpha'")
+ alpha = rep(alpha, len = n)
U = runif(n)
V = runif(n)
T = alpha^U + (alpha - alpha^U) * V
X = U
- index = abs(alpha-1) < .Machine$double.eps
+ index = abs(alpha - 1) < .Machine$double.eps
Y = U
if (any(!index))
Y[!index] = logb(T[!index]/(T[!index]+(1-alpha[!index])*V[!index]),
base=alpha[!index])
- ans = matrix(c(X,Y), nrow=n, ncol=2)
+ ans = matrix(c(X,Y), nrow=n, ncol = 2)
if (any(index)) {
- ans[index,1] = runif(sum(index)) # Uniform density for alpha==1
+ ans[index, 1] = runif(sum(index)) # Uniform density for alpha == 1
ans[index,2] = runif(sum(index))
}
ans
@@ -488,27 +490,28 @@ rfrank = function(n, alpha) {
pfrank = function(q1, q2, alpha) {
if (!is.Numeric(q1)) stop("bad input for 'q1'")
if (!is.Numeric(q2)) stop("bad input for 'q2'")
- if (!is.Numeric(alpha, posit=TRUE)) stop("bad input for 'alpha'")
+ if (!is.Numeric(alpha, posit = TRUE)) stop("bad input for 'alpha'")
L = max(length(q1), length(q2), length(alpha))
- alpha = rep(alpha, len=L)
- q1 = rep(q1, len=L)
- q2 = rep(q2, len=L)
+ alpha = rep(alpha, len = L)
+ q1 = rep(q1, len = L)
+ q2 = rep(q2, len = L)
x=q1; y=q2
- index = (x>=1 & y<1) | (y>=1 & x<1) | (x<=0 | y<=0) | (x>=1 & y>=1) |
- (abs(alpha-1) < .Machine$double.eps)
+ index = (x >= 1 & y < 1) | (y >= 1 & x < 1) |
+ (x <= 0 | y <= 0) | (x >= 1 & y >= 1) |
+ (abs(alpha - 1) < .Machine$double.eps)
ans = as.numeric(index)
if (any(!index))
- ans[!index] = logb(1 + ((alpha[!index])^(x[!index])-1)*
- ((alpha[!index])^(y[!index])-1)/(alpha[!index]-1),
+ ans[!index] = logb(1 + ((alpha[!index])^(x[!index]) - 1)*
+ ((alpha[!index])^(y[!index]) - 1)/(alpha[!index] - 1),
base=alpha[!index])
- ind2 = (abs(alpha-1) < .Machine$double.eps)
+ ind2 = (abs(alpha - 1) < .Machine$double.eps)
ans[ind2] = x[ind2] * y[ind2]
- ans[x>=1 & y<1] = y[x>=1 & y<1] # P(Y2 < q2) = q2
- ans[y>=1 & x<1] = x[y>=1 & x<1] # P(Y1 < q1) = q1
- ans[x<=0 | y<=0] = 0
- ans[x>=1 & y>=1] = 1
+ ans[x >= 1 & y < 1] = y[x >= 1 & y < 1] # P(Y2 < q2) = q2
+ ans[y >= 1 & x < 1] = x[y >= 1 & x < 1] # P(Y1 < q1) = q1
+ ans[x <= 0 | y <= 0] = 0
+ ans[x >= 1 & y >= 1] = 1
ans
}
@@ -519,25 +522,25 @@ dfrank = function(x1, x2, alpha, log = FALSE) {
if (!is.Numeric(x1)) stop("bad input for 'x1'")
if (!is.Numeric(x2)) stop("bad input for 'x2'")
- if (!is.Numeric(alpha, posit=TRUE)) stop("bad input for 'alpha'")
+ if (!is.Numeric(alpha, posit = TRUE)) stop("bad input for 'alpha'")
L = max(length(x1), length(x2), length(alpha))
- alpha = rep(alpha, len=L)
- x1 = rep(x1, len=L)
- x2 = rep(x2, len=L)
+ alpha = rep(alpha, len = L)
+ x1 = rep(x1, len = L)
+ x2 = rep(x2, len = L)
if (log.arg) {
- denom = alpha-1 + (alpha^x1 -1) * (alpha^x2 -1)
+ denom = alpha-1 + (alpha^x1 - 1) * (alpha^x2 - 1)
denom = abs(denom) # Needed; Genest (1987) uses this too, eqn (4.1)
- log((alpha-1) * log(alpha)) + (x1+x2)*log(alpha) - 2 * log(denom)
+ log((alpha - 1) * log(alpha)) + (x1+x2)*log(alpha) - 2 * log(denom)
} else {
- temp = (alpha-1) + (alpha^x1 - 1) * (alpha^x2 - 1)
- index = (abs(alpha-1) < .Machine$double.eps)
+ temp = (alpha - 1) + (alpha^x1 - 1) * (alpha^x2 - 1)
+ index = (abs(alpha - 1) < .Machine$double.eps)
ans = x1
if (any(!index))
- ans[!index] = (alpha[!index]-1) * log(alpha[!index]) *
+ ans[!index] = (alpha[!index] - 1) * log(alpha[!index]) *
(alpha[!index])^(x1[!index]+x2[!index]) / (temp[!index])^2
- ans[x1<=0 | x2<=0 | x1>=1 | x2>=1] = 0
+ ans[x1<=0 | x2<=0 | x1 >= 1 | x2 >= 1] = 0
ans[index] = 1
ans
}
@@ -546,80 +549,80 @@ dfrank = function(x1, x2, alpha, log = FALSE) {
-frank.control <- function(save.weight=TRUE, ...)
+frank.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- frank = function(lapar="loge", eapar=list(), iapar=2, nsimEIM=250) {
+ frank = function(lapar = "loge", eapar=list(), iapar = 2, nsimEIM = 250) {
if (mode(lapar) != "character" && mode(lapar) != "name")
lapar = as.character(substitute(lapar))
if (!is.Numeric(iapar, positive = TRUE))
stop("'iapar' must be positive")
if (!is.list(eapar)) eapar = list()
if (length(nsimEIM) &&
- (!is.Numeric(nsimEIM, allow=1, integ=TRUE) || nsimEIM <= 50))
+ (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 50))
stop("'nsimEIM' should be an integer greater than 50")
new("vglmff",
- blurb=c("Frank's Bivariate Distribution\n",
+ blurb = c("Frank's bivariate distribution\n",
"Links: ",
- namesof("apar", lapar, earg= eapar )),
- initialize=eval(substitute(expression({
+ namesof("apar", lapar, earg = eapar )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y <= 0) || any(y >= 1))
stop("the response must have values between 0 and 1")
- predictors.names = c(namesof("apar", .lapar, earg= .eapar, short=TRUE))
+ predictors.names = c(namesof("apar", .lapar, earg = .eapar, short = TRUE))
if (length(dimnames(y)))
extra$dimnamesy2 = dimnames(y)[[2]]
if (!length(etastart)) {
- apar.init = rep(.iapar, len=n)
- etastart = cbind(theta2eta(apar.init, .lapar, earg= .eapar ))
+ apar.init = rep(.iapar, len = n)
+ etastart = cbind(theta2eta(apar.init, .lapar, earg = .eapar ))
}
- }), list( .lapar=lapar, .eapar=eapar, .iapar=iapar))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- apar = eta2theta(eta, .lapar, earg= .eapar )
+ }), list( .lapar = lapar, .eapar=eapar, .iapar=iapar))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ apar = eta2theta(eta, .lapar, earg = .eapar )
fv.matrix = matrix(0.5, length(apar), 2)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(names(eta), extra$dimnamesy2)
fv.matrix
- }, list(.lapar=lapar, .eapar=eapar ))),
- last=eval(substitute(expression({
+ }, list(.lapar = lapar, .eapar=eapar ))),
+ last = eval(substitute(expression({
misc$link = c("apar"= .lapar)
misc$earg = list("apar"= .eapar )
misc$expected = TRUE
misc$nsimEIM = .nsimEIM
misc$pooled.weight = pooled.weight
- }), list(.lapar=lapar, .eapar=eapar, .nsimEIM=nsimEIM ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- apar = eta2theta(eta, .lapar, earg= .eapar )
+ }), list(.lapar = lapar, .eapar=eapar, .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ apar = eta2theta(eta, .lapar, earg = .eapar )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dfrank(x1=y[,1], x2=y[,2], alpha=apar, log = TRUE))
+ sum(w * dfrank(x1=y[, 1], x2=y[,2], alpha=apar, log = TRUE))
}
- }, list(.lapar=lapar, .eapar=eapar ))),
- vfamily=c("frank"),
- deriv=eval(substitute(expression({
- apar = eta2theta(eta, .lapar, earg= .eapar )
- dapar.deta = dtheta.deta(apar, .lapar, earg= .eapar )
-
- de3 = deriv3(~ (log((apar-1) * log(apar)) + (y1+y2)*log(apar) -
- 2 * log(apar-1 + (apar^y1 -1) * (apar^y2 -1))),
- name="apar", hessian= TRUE)
-
- denom = apar-1 + (apar^y[,1] -1) * (apar^y[,2] -1)
- tmp700 = 2*apar^(y[,1]+y[,2]) - apar^y[,1] - apar^y[,2]
- numerator = 1 + y[,1] * apar^(y[,1]-1) * (apar^y[,2] -1) +
- y[,2] * apar^(y[,2]-1) * (apar^y[,1] -1)
- Dl.dapar = 1/(apar-1) + 1/(apar*log(apar)) + (y[,1]+y[,2])/apar -
+ }, list(.lapar = lapar, .eapar=eapar ))),
+ vfamily = c("frank"),
+ deriv = eval(substitute(expression({
+ apar = eta2theta(eta, .lapar, earg = .eapar )
+ dapar.deta = dtheta.deta(apar, .lapar, earg = .eapar )
+
+ de3 = deriv3(~ (log((apar - 1) * log(apar)) + (y1+y2)*log(apar) -
+ 2 * log(apar-1 + (apar^y1 - 1) * (apar^y2 - 1))),
+ name = "apar", hessian= TRUE)
+
+ denom = apar-1 + (apar^y[, 1] - 1) * (apar^y[,2] - 1)
+ tmp700 = 2*apar^(y[, 1]+y[,2]) - apar^y[, 1] - apar^y[,2]
+ numerator = 1 + y[, 1] * apar^(y[, 1] - 1) * (apar^y[,2] - 1) +
+ y[,2] * apar^(y[,2] - 1) * (apar^y[, 1] - 1)
+ Dl.dapar = 1/(apar - 1) + 1/(apar*log(apar)) + (y[, 1]+y[,2])/apar -
2 * numerator / denom
w * Dl.dapar * dapar.deta
- }), list(.lapar=lapar, .eapar=eapar, .nsimEIM=nsimEIM ))),
- weight=eval(substitute(expression({
+ }), list(.lapar = lapar, .eapar=eapar, .nsimEIM = nsimEIM ))),
+ weight = eval(substitute(expression({
if ( is.Numeric( .nsimEIM)) {
pooled.weight = FALSE # For @last
@@ -628,25 +631,25 @@ frank.control <- function(save.weight=TRUE, ...)
run.mean = 0
for(ii in 1:( .nsimEIM )) {
ysim = rfrank(n,alpha=apar)
- y1 = ysim[,1]; y2 = ysim[,2];
+ y1 = ysim[, 1]; y2 = ysim[,2];
eval.de3 = eval(de3)
d2l.dthetas2 = attr(eval.de3, "hessian")
rm(ysim)
- temp3 = -d2l.dthetas2[,1,1] # M=1
- run.mean = ((ii-1) * run.mean + temp3) / ii
+ temp3 = -d2l.dthetas2[,1, 1] # M = 1
+ run.mean = ((ii - 1) * run.mean + temp3) / ii
}
wz = if (intercept.only)
matrix(mean(run.mean), n, dimm(M)) else run.mean
wz = wz * dapar.deta^2
- w * wz
+ c(w) * wz
} else {
- nump = apar^(y[,1]+y[,2]-2) * (2 * y[,1] * y[,2] +
- y[,1]*(y[,1]-1) + y[,2]*(y[,2]-1)) -
- y[,1]*(y[,1]-1) * apar^(y[,1]-2) -
- y[,2]*(y[,2]-1) * apar^(y[,2]-2)
- D2l.dapar2 = 1/(apar-1)^2 + (1+log(apar))/(apar*log(apar))^2 +
- (y[,1]+y[,2])/apar^2 + 2 *
+ nump = apar^(y[, 1]+y[,2]-2) * (2 * y[, 1] * y[,2] +
+ y[, 1]*(y[, 1] - 1) + y[,2]*(y[,2] - 1)) -
+ y[, 1]*(y[, 1] - 1) * apar^(y[, 1]-2) -
+ y[,2]*(y[,2] - 1) * apar^(y[,2]-2)
+ D2l.dapar2 = 1/(apar - 1)^2 + (1+log(apar))/(apar*log(apar))^2 +
+ (y[, 1]+y[,2])/apar^2 + 2 *
(nump / denom - (numerator/denom)^2)
d2apar.deta2 = d2theta.deta2(apar, .lapar)
wz = w * (dapar.deta^2 * D2l.dapar2 - Dl.dapar * d2apar.deta2)
@@ -656,69 +659,69 @@ frank.control <- function(save.weight=TRUE, ...)
for(iii in 1:ncol(wz))
wz[,iii] = sum(wz[,iii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
wz
}
- }), list( .lapar=lapar, .eapar=eapar, .nsimEIM=nsimEIM ))))
+ }), list( .lapar = lapar, .eapar=eapar, .nsimEIM = nsimEIM ))))
}
- gammahyp = function(ltheta="loge", itheta=NULL, expected=FALSE) {
+ gammahyp = function(ltheta = "loge", itheta = NULL, expected = FALSE) {
if (mode(ltheta) != "character" && mode(ltheta) != "name")
ltheta = as.character(substitute(ltheta))
- if (!is.logical(expected) || length(expected)!=1)
- stop("'expected' must be a single logical")
+ if (!is.logical(expected) || length(expected) != 1)
+ stop("argument 'expected' must be a single logical")
new("vglmff",
- blurb=c("Gamma Hyperbola Bivariate Distribution\n",
+ blurb = c("Gamma hyperbola bivariate distribution\n",
"Links: ",
namesof("theta", ltheta)),
- initialize=eval(substitute(expression({
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
- if (any(y[,1] <= 0) || any(y[,2] <= 1))
+ if (any(y[, 1] <= 0) || any(y[,2] <= 1))
stop("the response has values that are out of range")
- predictors.names = c(namesof("theta", .ltheta, short=TRUE))
+ predictors.names = c(namesof("theta", .ltheta, short = TRUE))
if (!length(etastart)) {
- theta.init = if (length( .itheta)) rep(.itheta, len=n) else {
+ theta.init = if (length( .itheta)) rep(.itheta, len = n) else {
1 / (y[,2] - 1 + 0.01)
}
etastart = cbind(theta2eta(theta.init, .ltheta))
}
}), list(.ltheta=ltheta, .itheta=itheta))),
- inverse=eval(substitute(function(eta, extra=NULL) {
+ inverse = eval(substitute(function(eta, extra = NULL) {
theta = eta2theta(eta, .ltheta)
cbind(theta*exp(theta), 1+1/theta)
}, list(.ltheta=ltheta))),
- last=eval(substitute(expression({
+ last = eval(substitute(expression({
misc$link = c("theta"= .ltheta)
misc$expected = .expected
}), list(.ltheta=ltheta, .expected=expected))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
theta = eta2theta(eta, .ltheta)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * (-exp(-theta)*y[,1]/theta - theta*y[,2]))
+ sum(w * (-exp(-theta)*y[, 1]/theta - theta*y[,2]))
}
}, list(.ltheta=ltheta))),
- vfamily=c("gammahyp"),
- deriv=eval(substitute(expression({
+ vfamily = c("gammahyp"),
+ deriv = eval(substitute(expression({
theta = eta2theta(eta, .ltheta)
- Dl.dtheta = exp(-theta) * y[,1] * (1+theta) / theta^2 - y[,2]
+ Dl.dtheta = exp(-theta) * y[, 1] * (1+theta) / theta^2 - y[,2]
Dtheta.deta = dtheta.deta(theta, .ltheta)
w * Dl.dtheta * Dtheta.deta
}), list(.ltheta=ltheta))),
- weight=eval(substitute(expression({
+ weight = eval(substitute(expression({
temp300 = 2 + theta * (2 + theta)
if ( .expected) {
D2l.dtheta2 = temp300 / theta^2
wz = w * Dtheta.deta^2 * D2l.dtheta2
} else {
- D2l.dtheta2 = temp300 * y[,1] * exp(-theta) / theta^3
+ D2l.dtheta2 = temp300 * y[, 1] * exp(-theta) / theta^3
D2theta.deta2 = d2theta.deta2(theta, .ltheta)
wz = w * (Dtheta.deta^2 * D2l.dtheta2 - Dl.dtheta * D2theta.deta2)
}
@@ -728,83 +731,83 @@ frank.control <- function(save.weight=TRUE, ...)
- morgenstern = function(lapar="rhobit", earg=list(), iapar=NULL, tola0=0.01,
- method.init=1) {
+ morgenstern = function(lapar = "rhobit", earg =list(), iapar = NULL, tola0=0.01,
+ imethod = 1) {
if (mode(lapar) != "character" && mode(lapar) != "name")
lapar = as.character(substitute(lapar))
if (!is.list(earg)) earg = list()
- if (length(iapar) && (!is.Numeric(iapar, allow=1) || abs(iapar) >= 1))
+ if (length(iapar) && (!is.Numeric(iapar, allow = 1) || abs(iapar) >= 1))
stop("'iapar' must be a single number between -1 and 1")
- if (!is.Numeric(tola0, allow=1, posit=TRUE))
+ if (!is.Numeric(tola0, allow = 1, posit = TRUE))
stop("'tola0' must be a single positive number")
if (length(iapar) && abs(iapar) <= tola0)
stop("'iapar' must not be between -tola0 and tola0")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, positi=TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
new("vglmff",
- blurb=c("Morgenstern's Bivariate Exponential Distribution\n",
+ blurb = c("Morgenstern's bivariate exponential distribution\n",
"Links: ",
- namesof("apar", lapar, earg= earg )),
- initialize=eval(substitute(expression({
+ namesof("apar", lapar, earg = earg )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y < 0))
stop("the response must have non-negative values only")
- predictors.names = c(namesof("apar", .lapar, earg= .earg , short=TRUE))
+ predictors.names = c(namesof("apar", .lapar, earg = .earg , short = TRUE))
if (length(dimnames(y)))
extra$dimnamesy2 = dimnames(y)[[2]]
if (!length(etastart)) {
- ainit = if (length(.iapar)) rep(.iapar, len=n) else {
- mean1 = if ( .method.init == 1) median(y[,1]) else mean(y[,1])
- mean2 = if ( .method.init == 1) median(y[,2]) else mean(y[,2])
- Finit = 0.01 + mean(y[,1] <= mean1 & y[,2] <= mean2)
- ((Finit+expm1(-mean1)+exp(-mean2)) / exp(-mean1-mean2)-1)/(
+ ainit = if (length(.iapar)) rep(.iapar, len = n) else {
+ mean1 = if ( .imethod == 1) median(y[, 1]) else mean(y[, 1])
+ mean2 = if ( .imethod == 1) median(y[,2]) else mean(y[,2])
+ Finit = 0.01 + mean(y[, 1] <= mean1 & y[,2] <= mean2)
+ ((Finit+expm1(-mean1)+exp(-mean2)) / exp(-mean1-mean2) - 1)/(
expm1(-mean1) * expm1(-mean2))
}
- etastart = theta2eta(rep(ainit, len=n), .lapar, earg= .earg )
+ etastart = theta2eta(rep(ainit, len = n), .lapar, earg = .earg )
}
- }), list( .iapar=iapar, .lapar=lapar, .earg=earg,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list( .iapar=iapar, .lapar = lapar, .earg = earg,
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
fv.matrix = matrix(1, length(alpha), 2)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(names(eta), extra$dimnamesy2)
fv.matrix
- }, list( .lapar=lapar, .earg=earg ))),
- last=eval(substitute(expression({
+ }, list( .lapar = lapar, .earg = earg ))),
+ last = eval(substitute(expression({
misc$link = c("apar"= .lapar)
misc$earg = list(apar = .earg)
misc$expected = FALSE
misc$pooled.weight = pooled.weight
- }), list( .lapar=lapar, .earg=earg ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list( .lapar = lapar, .earg = earg ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
alpha[abs(alpha) < .tola0 ] = .tola0
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- denom = (1 + alpha - 2*alpha*(exp(-y[,1]) + exp(-y[,2])) +
- 4*alpha*exp(-y[,1] - y[,2]))
- sum(w * (-y[,1] - y[,2] + log(denom)))
+ denom = (1 + alpha - 2*alpha*(exp(-y[, 1]) + exp(-y[,2])) +
+ 4*alpha*exp(-y[, 1] - y[,2]))
+ sum(w * (-y[, 1] - y[,2] + log(denom)))
}
- }, list( .lapar=lapar, .earg=earg, .tola0=tola0 ))),
- vfamily=c("morgenstern"),
- deriv=eval(substitute(expression({
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }, list( .lapar = lapar, .earg = earg, .tola0=tola0 ))),
+ vfamily = c("morgenstern"),
+ deriv = eval(substitute(expression({
+ alpha = eta2theta(eta, .lapar, earg = .earg )
alpha[abs(alpha) < .tola0 ] = .tola0
- numerator = 1 - 2*(exp(-y[,1]) + exp(-y[,2])) + 4*exp(-y[,1] - y[,2])
- denom = (1 + alpha - 2*alpha*(exp(-y[,1]) + exp(-y[,2])) +
- 4 *alpha*exp(-y[,1] - y[,2]))
+ numerator = 1 - 2*(exp(-y[, 1]) + exp(-y[,2])) + 4*exp(-y[, 1] - y[,2])
+ denom = (1 + alpha - 2*alpha*(exp(-y[, 1]) + exp(-y[,2])) +
+ 4 *alpha*exp(-y[, 1] - y[,2]))
dl.dalpha = numerator / denom
- dalpha.deta = dtheta.deta(alpha, .lapar, earg= .earg )
- w * cbind(dl.dalpha * dalpha.deta)
- }), list( .lapar=lapar, .earg=earg, .tola0=tola0 ))),
- weight=eval(substitute(expression({
+ dalpha.deta = dtheta.deta(alpha, .lapar, earg = .earg )
+ c(w) * cbind(dl.dalpha * dalpha.deta)
+ }), list( .lapar = lapar, .earg = earg, .tola0=tola0 ))),
+ weight = eval(substitute(expression({
d2l.dalpha2 = dl.dalpha^2
- d2alpha.deta2 = d2theta.deta2(alpha, .lapar, earg= .earg )
+ d2alpha.deta2 = d2theta.deta2(alpha, .lapar, earg = .earg )
wz = w * (dalpha.deta^2 * d2l.dalpha2 - d2alpha.deta2 * dl.dalpha)
if (TRUE &&
intercept.only) {
@@ -813,18 +816,18 @@ frank.control <- function(save.weight=TRUE, ...)
for(iii in 1:ncol(wz))
wz[,iii] = sum(wz[,iii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
wz
- }), list( .lapar=lapar, .earg=earg ))))
+ }), list( .lapar = lapar, .earg = earg ))))
}
rfgm = function(n, alpha) {
- if (!is.Numeric(n, posit=TRUE, allow=1, integ=TRUE)) stop("bad input for 'n'")
+ if (!is.Numeric(n, posit = TRUE, allow = 1, integ = TRUE)) stop("bad input for 'n'")
if (!is.Numeric(alpha)) stop("bad input for 'alpha'")
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
@@ -834,23 +837,23 @@ rfgm = function(n, alpha) {
A = alpha * temp - 1
B = sqrt(1 - 2 * alpha * temp + (alpha*temp)^2 + 4 * alpha * V2 * temp)
y2 = 2 * V2 / (B - A)
- matrix(c(y1,y2), nrow=n, ncol=2)
+ matrix(c(y1,y2), nrow=n, ncol = 2)
}
-dfgm = function(x1, x2, alpha, log=FALSE) {
+dfgm = function(x1, x2, alpha, log = FALSE) {
log.arg = log
rm(log)
if (!is.Numeric(alpha)) stop("bad input for 'alpha'")
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
- if ( !is.logical( log.arg ) || length( log.arg )!=1 )
- stop("bad input for 'log'")
+ if ( !is.logical( log.arg ) || length( log.arg ) != 1 )
+ stop("bad input for argument 'log'")
L = max(length(x1), length(x2), length(alpha))
- if (length(x1) != L) x1 = rep(x1, len=L)
- if (length(x2) != L) x2 = rep(x2, len=L)
- if (length(alpha) != L) alpha = rep(alpha, len=L)
+ if (length(x1) != L) x1 = rep(x1, len = L)
+ if (length(x2) != L) x2 = rep(x2, len = L)
+ if (length(alpha) != L) alpha = rep(alpha, len = L)
ans = 0 * x1
xnok = (x1 <= 0) | (x1 >= 1) | (x2 <= 0) | (x2 >= 1)
if ( log.arg ) {
@@ -873,102 +876,102 @@ pfgm = function(q1, q2, alpha) {
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
L = max(length(q1), length(q2), length(alpha))
- if (length(q1) != L) q1 = rep(q1, len=L)
- if (length(q2) != L) q2 = rep(q2, len=L)
- if (length(alpha) != L) alpha = rep(alpha, len=L)
+ if (length(q1) != L) q1 = rep(q1, len = L)
+ if (length(q2) != L) q2 = rep(q2, len = L)
+ if (length(alpha) != L) alpha = rep(alpha, len = L)
x=q1; y=q2
- index = (x>=1 & y<1) | (y>=1 & x<1) | (x<=0 | y<=0) | (x>=1 & y>=1)
+ index = (x >= 1 & y<1) | (y >= 1 & x<1) | (x<=0 | y<=0) | (x >= 1 & y >= 1)
ans = as.numeric(index)
if (any(!index)) {
ans[!index] = q1[!index] * q2[!index] * (1 + alpha[!index] *
(1-q1[!index])*(1-q2[!index]))
}
- ans[x>=1 & y<1] = y[x>=1 & y<1] # P(Y2 < q2) = q2
- ans[y>=1 & x<1] = x[y>=1 & x<1] # P(Y1 < q1) = q1
+ ans[x >= 1 & y<1] = y[x >= 1 & y<1] # P(Y2 < q2) = q2
+ ans[y >= 1 & x<1] = x[y >= 1 & x<1] # P(Y1 < q1) = q1
ans[x<=0 | y<=0] = 0
- ans[x>=1 & y>=1] = 1
+ ans[x >= 1 & y >= 1] = 1
ans
}
-fgm.control <- function(save.weight=TRUE, ...)
+fgm.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- fgm = function(lapar="rhobit", earg=list(), iapar=NULL,
- method.init=1, nsimEIM=200) {
+ fgm = function(lapar = "rhobit", earg =list(), iapar = NULL,
+ imethod = 1, nsimEIM = 200) {
if (mode(lapar) != "character" && mode(lapar) != "name")
lapar = as.character(substitute(lapar))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow=1, integ=TRUE, positi=TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
if (!length(nsimEIM) ||
- (!is.Numeric(nsimEIM, allow=1, integ=TRUE) || nsimEIM <= 50))
+ (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 50))
stop("'nsimEIM' should be an integer greater than 50")
if (length(iapar) &&
(abs(iapar) >= 1))
stop("'iapar' should be less than 1 in absolute value")
new("vglmff",
- blurb=c("Farlie-Gumbel-Morgenstern Distribution\n",
+ blurb = c("Farlie-Gumbel-Morgenstern distribution\n",
"Links: ",
- namesof("apar", lapar, earg= earg )),
- initialize=eval(substitute(expression({
+ namesof("apar", lapar, earg = earg )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y < 0) || any(y > 1))
stop("the response must have values in the unit square")
- predictors.names = namesof("apar", .lapar, earg= .earg, short=TRUE)
+ predictors.names = namesof("apar", .lapar, earg = .earg, short = TRUE)
if (length(dimnames(y)))
extra$dimnamesy2 = dimnames(y)[[2]]
if (!length(etastart)) {
ainit = if (length( .iapar )) .iapar else {
- mean1 = if ( .method.init == 1) weighted.mean(y[,1],w) else
- median(y[,1])
- mean2 = if ( .method.init == 1) weighted.mean(y[,2],w) else
+ mean1 = if ( .imethod == 1) weighted.mean(y[, 1],w) else
+ median(y[, 1])
+ mean2 = if ( .imethod == 1) weighted.mean(y[,2],w) else
median(y[,2])
- Finit = weighted.mean(y[,1] <= mean1 & y[,2] <= mean2, w)
+ Finit = weighted.mean(y[, 1] <= mean1 & y[,2] <= mean2, w)
(Finit / (mean1 * mean2) - 1) / ((1-mean1) * (1-mean2))
}
ainit = min(0.95, max(ainit, -0.95))
- etastart = theta2eta(rep(ainit, len=n), .lapar, earg= .earg )
+ etastart = theta2eta(rep(ainit, len = n), .lapar, earg = .earg )
}
- }), list( .iapar=iapar, .lapar=lapar, .earg=earg,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list( .iapar=iapar, .lapar = lapar, .earg = earg,
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
fv.matrix = matrix(0.5, length(alpha), 2)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(names(eta), extra$dimnamesy2)
fv.matrix
- }, list( .lapar=lapar, .earg=earg ))),
- last=eval(substitute(expression({
+ }, list( .lapar = lapar, .earg = earg ))),
+ last = eval(substitute(expression({
misc$link = c("apar"= .lapar)
misc$earg = list(apar = .earg)
misc$expected = FALSE
misc$nsimEIM = .nsimEIM
- }), list(.lapar=lapar, .earg=earg, .nsimEIM=nsimEIM ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list(.lapar = lapar, .earg = earg, .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dfgm(x1=y[,1], x2=y[,2], alpha=alpha, log=TRUE))
+ sum(w * dfgm(x1=y[, 1], x2=y[,2], alpha=alpha, log = TRUE))
}
- }, list( .lapar=lapar, .earg=earg ))),
- vfamily=c("fgm"),
- deriv=eval(substitute(expression({
- alpha = eta2theta(eta, .lapar, earg= .earg )
- dalpha.deta = dtheta.deta(alpha, .lapar, earg= .earg )
- numerator = (1 - 2 * y[,1]) * (1 - 2 * y[,2])
+ }, list( .lapar = lapar, .earg = earg ))),
+ vfamily = c("fgm"),
+ deriv = eval(substitute(expression({
+ alpha = eta2theta(eta, .lapar, earg = .earg )
+ dalpha.deta = dtheta.deta(alpha, .lapar, earg = .earg )
+ numerator = (1 - 2 * y[, 1]) * (1 - 2 * y[,2])
denom = 1 + alpha * numerator
mytolerance = .Machine$double.eps
bad <- (denom <= mytolerance) # Range violation
@@ -978,79 +981,79 @@ fgm.control <- function(save.weight=TRUE, ...)
denom[bad] = 2 * mytolerance
}
dl.dalpha = numerator / denom
- w * cbind(dl.dalpha * dalpha.deta)
- }), list( .lapar=lapar, .earg=earg, .nsimEIM=nsimEIM ))),
- weight=eval(substitute(expression({
+ c(w) * cbind(dl.dalpha * dalpha.deta)
+ }), list( .lapar = lapar, .earg = earg, .nsimEIM = nsimEIM ))),
+ weight = eval(substitute(expression({
run.var = 0
for(ii in 1:( .nsimEIM )) {
ysim = rfgm(n, alpha=alpha)
- numerator = (1 - 2 * ysim[,1]) * (1 - 2 * ysim[,2])
+ numerator = (1 - 2 * ysim[, 1]) * (1 - 2 * ysim[,2])
denom = 1 + alpha * numerator
dl.dalpha = numerator / denom
rm(ysim)
temp3 = dl.dalpha
- run.var = ((ii-1) * run.var + temp3^2) / ii
+ run.var = ((ii - 1) * run.var + temp3^2) / ii
}
wz = if (intercept.only)
matrix(colMeans(cbind(run.var)),
- n, dimm(M), byrow=TRUE) else cbind(run.var)
+ n, dimm(M), byrow = TRUE) else cbind(run.var)
wz = wz * dalpha.deta^2
- w * wz
- }), list( .lapar=lapar, .earg=earg, .nsimEIM=nsimEIM ))))
+ c(w) * wz
+ }), list( .lapar = lapar, .earg = earg, .nsimEIM = nsimEIM ))))
}
- gumbelIbiv = function(lapar="identity", earg=list(),
- iapar=NULL, method.init=1) {
+ gumbelIbiv = function(lapar = "identity", earg =list(),
+ iapar = NULL, imethod = 1) {
if (mode(lapar) != "character" && mode(lapar) != "name")
lapar = as.character(substitute(lapar))
if (!is.list(earg)) earg = list()
- if (length(iapar) && !is.Numeric(iapar, allow=1))
+ if (length(iapar) && !is.Numeric(iapar, allow = 1))
stop("'iapar' must be a single number")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, positi=TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
new("vglmff",
- blurb=c("Gumbel's Type I Bivariate Distribution\n",
+ blurb = c("Gumbel's Type I bivariate distribution\n",
"Links: ",
- namesof("apar", lapar, earg= earg )),
- initialize=eval(substitute(expression({
+ namesof("apar", lapar, earg = earg )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y < 0))
stop("the response must have non-negative values only")
- predictors.names = c(namesof("apar", .lapar, earg= .earg , short=TRUE))
+ predictors.names = c(namesof("apar", .lapar, earg = .earg , short = TRUE))
if (!length(etastart)) {
- ainit = if (length( .iapar )) rep( .iapar, len=n) else {
- mean1 = if ( .method.init == 1) median(y[,1]) else mean(y[,1])
- mean2 = if ( .method.init == 1) median(y[,2]) else mean(y[,2])
- Finit = 0.01 + mean(y[,1] <= mean1 & y[,2] <= mean2)
+ ainit = if (length( .iapar )) rep( .iapar, len = n) else {
+ mean1 = if ( .imethod == 1) median(y[, 1]) else mean(y[, 1])
+ mean2 = if ( .imethod == 1) median(y[,2]) else mean(y[,2])
+ Finit = 0.01 + mean(y[, 1] <= mean1 & y[,2] <= mean2)
(log(Finit+expm1(-mean1)+exp(-mean2))+mean1+mean2)/(mean1*mean2)
}
- etastart = theta2eta(rep(ainit, len=n), .lapar, earg= .earg )
+ etastart = theta2eta(rep(ainit, len = n), .lapar, earg = .earg )
}
- }), list( .iapar=iapar, .lapar=lapar, .earg=earg,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list( .iapar=iapar, .lapar = lapar, .earg = earg,
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
cbind(rep(1, len=length(alpha)),
rep(1, len=length(alpha)))
- }, list( .lapar=lapar ))),
- last=eval(substitute(expression({
+ }, list( .lapar = lapar ))),
+ last = eval(substitute(expression({
misc$link = c("apar"= .lapar)
misc$earg = list(apar = .earg)
misc$expected = FALSE
misc$pooled.weight = pooled.weight
- }), list( .lapar=lapar, .earg=earg ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- alpha = eta2theta(eta, .lapar, earg= .earg )
+ }), list( .lapar = lapar, .earg = earg ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ alpha = eta2theta(eta, .lapar, earg = .earg )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- denom = (alpha*y[,1] - 1) * (alpha*y[,2] - 1) + alpha
+ denom = (alpha*y[, 1] - 1) * (alpha*y[,2] - 1) + alpha
mytolerance = .Machine$double.xmin
bad <- (denom <= mytolerance) # Range violation
if (any(bad)) {
@@ -1058,23 +1061,23 @@ fgm.control <- function(save.weight=TRUE, ...)
flush.console()
}
sum(bad) * (-1.0e10) +
- sum(w[!bad] * (-y[!bad,1] - y[!bad,2] +
- alpha[!bad]*y[!bad,1]*y[!bad,2] + log(denom[!bad])))
+ sum(w[!bad] * (-y[!bad, 1] - y[!bad,2] +
+ alpha[!bad]*y[!bad, 1]*y[!bad,2] + log(denom[!bad])))
}
- }, list( .lapar=lapar, .earg=earg ))),
- vfamily=c("gumbelIbiv"),
- deriv=eval(substitute(expression({
- alpha = eta2theta(eta, .lapar, earg= .earg )
- numerator = (alpha*y[,1] - 1)*y[,2] + (alpha*y[,2] - 1)*y[,1] + 1
- denom = (alpha*y[,1] - 1) * (alpha*y[,2] - 1) + alpha
+ }, list( .lapar = lapar, .earg = earg ))),
+ vfamily = c("gumbelIbiv"),
+ deriv = eval(substitute(expression({
+ alpha = eta2theta(eta, .lapar, earg = .earg )
+ numerator = (alpha*y[, 1] - 1)*y[,2] + (alpha*y[,2] - 1)*y[, 1] + 1
+ denom = (alpha*y[, 1] - 1) * (alpha*y[,2] - 1) + alpha
denom = abs(denom)
- dl.dalpha = numerator / denom + y[,1]*y[,2]
- dalpha.deta = dtheta.deta(alpha, .lapar, earg= .earg )
- w * cbind(dl.dalpha * dalpha.deta)
- }), list( .lapar=lapar, .earg=earg ))),
- weight=eval(substitute(expression({
- d2l.dalpha2 = (numerator/denom)^2 - 2*y[,1]*y[,2] / denom
- d2alpha.deta2 = d2theta.deta2(alpha, .lapar, earg= .earg )
+ dl.dalpha = numerator / denom + y[, 1]*y[,2]
+ dalpha.deta = dtheta.deta(alpha, .lapar, earg = .earg )
+ c(w) * cbind(dl.dalpha * dalpha.deta)
+ }), list( .lapar = lapar, .earg = earg ))),
+ weight = eval(substitute(expression({
+ d2l.dalpha2 = (numerator/denom)^2 - 2*y[, 1]*y[,2] / denom
+ d2alpha.deta2 = d2theta.deta2(alpha, .lapar, earg = .earg )
wz = w * (dalpha.deta^2 * d2l.dalpha2 - d2alpha.deta2 * dl.dalpha)
if (TRUE &&
intercept.only) {
@@ -1083,11 +1086,11 @@ fgm.control <- function(save.weight=TRUE, ...)
for(iii in 1:ncol(wz))
wz[,iii] = sum(wz[,iii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
wz
- }), list( .lapar=lapar, .earg=earg ))))
+ }), list( .lapar = lapar, .earg = earg ))))
}
@@ -1099,39 +1102,40 @@ fgm.control <- function(save.weight=TRUE, ...)
pplack = function(q1, q2, oratio) {
if (!is.Numeric(q1)) stop("bad input for 'q1'")
if (!is.Numeric(q2)) stop("bad input for 'q2'")
- if (!is.Numeric(oratio, posit=TRUE)) stop("bad input for 'oratio'")
+ if (!is.Numeric(oratio, posit = TRUE)) stop("bad input for 'oratio'")
L = max(length(q1), length(q2), length(oratio))
- if (length(q1) != L) q1 = rep(q1, len=L)
- if (length(q2) != L) q2 = rep(q2, len=L)
- if (length(oratio) != L) oratio = rep(oratio, len=L)
+ if (length(q1) != L) q1 = rep(q1, len = L)
+ if (length(q2) != L) q2 = rep(q2, len = L)
+ if (length(oratio) != L) oratio = rep(oratio, len = L)
x=q1; y=q2
- index = (x>=1 & y<1) | (y>=1 & x<1) | (x<=0 | y<=0) | (x>=1 & y>=1) |
- (abs(oratio-1) < 1.0e-6) # .Machine$double.eps
+ index = (x >= 1 & y < 1) | (y >= 1 & x < 1) |
+ (x <= 0 | y <= 0) | (x >= 1 & y >= 1) |
+ (abs(oratio - 1) < 1.0e-6) # .Machine$double.eps
ans = as.numeric(index)
if (any(!index)) {
- temp1 = 1 + (oratio[!index] -1) * (q1[!index] + q2[!index])
+ temp1 = 1 + (oratio[!index] - 1) * (q1[!index] + q2[!index])
temp2 = temp1 - sqrt(temp1^2 - 4 * oratio[!index] *
- (oratio[!index]-1) * q1[!index] * q2[!index])
+ (oratio[!index] - 1) * q1[!index] * q2[!index])
ans[!index] = 0.5 * temp2 / (oratio[!index] - 1)
}
- ind2 = (abs(oratio-1) < 1.0e-6) # .Machine$double.eps
+ ind2 = (abs(oratio - 1) < 1.0e-6) # .Machine$double.eps
ans[ind2] = x[ind2] * y[ind2]
- ans[x>=1 & y<1] = y[x>=1 & y<1] # P(Y2 < q2) = q2
- ans[y>=1 & x<1] = x[y>=1 & x<1] # P(Y1 < q1) = q1
+ ans[x >= 1 & y<1] = y[x >= 1 & y<1] # P(Y2 < q2) = q2
+ ans[y >= 1 & x<1] = x[y >= 1 & x<1] # P(Y1 < q1) = q1
ans[x<=0 | y<=0] = 0
- ans[x>=1 & y>=1] = 1
+ ans[x >= 1 & y >= 1] = 1
ans
}
rplack = function(n, oratio) {
- if (!is.Numeric(n, posit=TRUE, allow=1, integ=TRUE)) stop("bad input for 'n'")
- if (!is.Numeric(oratio, posit=TRUE)) stop("bad input for 'oratio'")
- if (length(oratio) != n) oratio = rep(oratio, len=n)
+ if (!is.Numeric(n, posit = TRUE, allow = 1, integ = TRUE)) stop("bad input for 'n'")
+ if (!is.Numeric(oratio, posit = TRUE)) stop("bad input for 'oratio'")
+ if (length(oratio) != n) oratio = rep(oratio, len = n)
y1 = U = runif(n)
V = runif(n)
@@ -1140,30 +1144,32 @@ rplack = function(n, oratio) {
(1 - 2 * V) *
sqrt(oratio * (oratio + 4*Z*y1*(1-y1)*(1-oratio)^2))) / (oratio +
Z*(1-oratio)^2)
- matrix(c(y1, 0.5 * y2), nrow=n, ncol=2)
+ matrix(c(y1, 0.5 * y2), nrow=n, ncol = 2)
}
-dplack = function(x1, x2, oratio, log=FALSE) {
+dplack = function(x1, x2, oratio, log = FALSE) {
log.arg = log
rm(log)
- if (!is.Numeric(oratio, posit=TRUE)) stop("bad input for 'oratio'")
+
+ if (!is.Numeric(oratio, posit = TRUE))
+ stop("bad input for 'oratio'")
L = max(length(x1), length(x2), length(oratio))
- if (length(x1) != L) x1 = rep(x1, len=L)
- if (length(x2) != L) x2 = rep(x2, len=L)
- if (length(oratio) != L) oratio = rep(oratio, len=L)
- if ( !is.logical( log.arg ) || length( log.arg )!=1 )
- stop("bad input for 'log'")
+ if (length(x1) != L) x1 = rep(x1, len = L)
+ if (length(x2) != L) x2 = rep(x2, len = L)
+ if (length(oratio) != L) oratio = rep(oratio, len = L)
+ if ( !is.logical( log.arg ) || length( log.arg ) != 1 )
+ stop("bad input for argument 'log'")
if ( log.arg ) {
- ans = log(oratio) + log1p((oratio-1) *
+ ans = log(oratio) + log1p((oratio - 1) *
(x1+x2-2*x1*x2)) - 1.5 *
- log((1 + (x1+x2)*(oratio-1))^2 - 4 * oratio * (oratio-1)*x1*x2)
+ log((1 + (x1+x2)*(oratio - 1))^2 - 4 * oratio * (oratio - 1)*x1*x2)
ans[(x1 < 0) | (x1 > 1) | (x2 < 0) | (x2 > 1)] = log(0)
} else {
- ans = oratio * ((oratio -1) * (x1+x2-2*x1*x2) + 1) / ((1 +
- (x1+x2)*(oratio-1))^2 - 4 * oratio * (oratio-1)*x1*x2)^1.5
+ ans = oratio * ((oratio - 1) * (x1+x2-2*x1*x2) + 1) / ((1 +
+ (x1+x2)*(oratio - 1))^2 - 4 * oratio * (oratio - 1)*x1*x2)^1.5
ans[(x1 < 0) | (x1 > 1) | (x2 < 0) | (x2 > 1)] = 0
}
ans
@@ -1171,122 +1177,122 @@ dplack = function(x1, x2, oratio, log=FALSE) {
-plackett.control <- function(save.weight=TRUE, ...)
+plackett.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- plackett = function(link="loge", earg=list(),
- ioratio=NULL, method.init=1, nsimEIM=200) {
+ plackett = function(link = "loge", earg =list(),
+ ioratio = NULL, imethod = 1, nsimEIM = 200) {
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (length(ioratio) && (!is.Numeric(ioratio, posit=TRUE)))
+ if (length(ioratio) && (!is.Numeric(ioratio, posit = TRUE)))
stop("'ioratio' must be positive")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 2) stop("method.init must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("imethod must be 1 or 2")
new("vglmff",
- blurb=c("Plackett Distribution\n",
+ blurb = c("Plackett distribution\n",
"Links: ",
- namesof("oratio", link, earg= earg )),
- initialize=eval(substitute(expression({
+ namesof("oratio", link, earg = earg )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y < 0) || any(y > 1))
stop("the response must have values in the unit square")
- predictors.names = namesof("oratio", .link, earg= .earg, short=TRUE)
+ predictors.names = namesof("oratio", .link, earg = .earg, short = TRUE)
if (length(dimnames(y)))
extra$dimnamesy2 = dimnames(y)[[2]]
if (!length(etastart)) {
orinit = if (length( .ioratio )) .ioratio else {
- if ( .method.init == 2) {
+ if ( .imethod == 2) {
scorp = cor(y)[1,2]
if (abs(scorp) <= 0.1) 1 else
if (abs(scorp) <= 0.3) 3^sign(scorp) else
if (abs(scorp) <= 0.6) 5^sign(scorp) else
if (abs(scorp) <= 0.8) 20^sign(scorp) else 40^sign(scorp)
} else {
- y10 = weighted.mean(y[,1], w)
+ y10 = weighted.mean(y[, 1], w)
y20 = weighted.mean(y[,2], w)
- (0.5 + sum(w[(y[,1] < y10) & (y[,2] < y20)])) *
- (0.5 + sum(w[(y[,1] >= y10) & (y[,2] >= y20)])) / (
- ((0.5 + sum(w[(y[,1] < y10) & (y[,2] >= y20)])) *
- (0.5 + sum(w[(y[,1] >= y10) & (y[,2] < y20)]))))
+ (0.5 + sum(w[(y[, 1] < y10) & (y[,2] < y20)])) *
+ (0.5 + sum(w[(y[, 1] >= y10) & (y[,2] >= y20)])) / (
+ ((0.5 + sum(w[(y[, 1] < y10) & (y[,2] >= y20)])) *
+ (0.5 + sum(w[(y[, 1] >= y10) & (y[,2] < y20)]))))
}
}
- etastart = theta2eta(rep(orinit, len=n), .link, earg= .earg)
+ etastart = theta2eta(rep(orinit, len = n), .link, earg = .earg)
}
- }), list( .ioratio=ioratio, .link=link, .earg=earg,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- oratio = eta2theta(eta, .link, earg= .earg )
+ }), list( .ioratio=ioratio, .link = link, .earg = earg,
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ oratio = eta2theta(eta, .link, earg = .earg )
fv.matrix = matrix(0.5, length(oratio), 2)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(dimnames(eta)[[1]], extra$dimnamesy2)
fv.matrix
- }, list( .link=link, .earg=earg ))),
- last=eval(substitute(expression({
+ }, list( .link = link, .earg = earg ))),
+ last = eval(substitute(expression({
misc$link = c("oratio"= .link)
misc$earg = list(oratio = .earg)
misc$expected = FALSE
misc$nsimEIM = .nsimEIM
- }), list( .link=link, .earg=earg,
- .nsimEIM=nsimEIM ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- oratio = eta2theta(eta, .link, earg= .earg )
+ }), list( .link = link, .earg = earg,
+ .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ oratio = eta2theta(eta, .link, earg = .earg )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dplack(x1= y[,1], x2= y[,2], oratio=oratio, log=TRUE))
+ sum(w * dplack(x1= y[, 1], x2= y[,2], oratio=oratio, log = TRUE))
}
- }, list( .link=link, .earg=earg ))),
- vfamily=c("plackett"),
- deriv=eval(substitute(expression({
- oratio = eta2theta(eta, .link, earg= .earg )
- doratio.deta = dtheta.deta(oratio, .link, earg= .earg )
- y1 = y[,1]
+ }, list( .link = link, .earg = earg ))),
+ vfamily = c("plackett"),
+ deriv = eval(substitute(expression({
+ oratio = eta2theta(eta, .link, earg = .earg )
+ doratio.deta = dtheta.deta(oratio, .link, earg = .earg )
+ y1 = y[, 1]
y2 = y[,2]
- de3 = deriv3(~ (log(oratio) + log(1+(oratio-1) *
+ de3 = deriv3(~ (log(oratio) + log(1+(oratio - 1) *
(y1+y2-2*y1*y2)) - 1.5 *
- log((1 + (y1+y2)*(oratio-1))^2 - 4 * oratio * (oratio-1)*y1*y2)),
- name="oratio", hessian= FALSE)
+ log((1 + (y1+y2)*(oratio - 1))^2 - 4 * oratio * (oratio - 1)*y1*y2)),
+ name = "oratio", hessian= FALSE)
eval.de3 = eval(de3)
dl.doratio = attr(eval.de3, "gradient")
w * dl.doratio * doratio.deta
- }), list( .link=link, .earg=earg ))),
- weight=eval(substitute(expression({
- sd3 = deriv3(~ (log(oratio) + log(1+(oratio-1) *
+ }), list( .link = link, .earg = earg ))),
+ weight = eval(substitute(expression({
+ sd3 = deriv3(~ (log(oratio) + log(1+(oratio - 1) *
(y1sim+y2sim-2*y1sim*y2sim)) - 1.5 *
- log((1 + (y1sim+y2sim)*(oratio-1))^2 -
- 4 * oratio * (oratio-1)*y1sim*y2sim)),
- name="oratio", hessian= FALSE)
+ log((1 + (y1sim+y2sim)*(oratio - 1))^2 -
+ 4 * oratio * (oratio - 1)*y1sim*y2sim)),
+ name = "oratio", hessian= FALSE)
run.var = 0
for(ii in 1:( .nsimEIM )) {
ysim = rplack(n, oratio=oratio)
- y1sim = ysim[,1]
- y2sim = ysim[,1]
+ y1sim = ysim[, 1]
+ y2sim = ysim[, 1]
eval.sd3 = eval(sd3)
dl.doratio = attr(eval.sd3, "gradient")
rm(ysim, y1sim, y2sim)
temp3 = dl.doratio
- run.var = ((ii-1) * run.var + temp3^2) / ii
+ run.var = ((ii - 1) * run.var + temp3^2) / ii
}
wz = if (intercept.only)
matrix(colMeans(cbind(run.var)),
- n, dimm(M), byrow=TRUE) else cbind(run.var)
+ n, dimm(M), byrow = TRUE) else cbind(run.var)
wz = wz * doratio.deta^2
- w * wz
- }), list( .link=link, .earg=earg, .nsimEIM=nsimEIM ))))
+ c(w) * wz
+ }), list( .link = link, .earg = earg, .nsimEIM = nsimEIM ))))
}
-damh = function(x1, x2, alpha, log=FALSE) {
+damh = function(x1, x2, alpha, log = FALSE) {
log.arg = log
rm(log)
if (!is.Numeric(x1)) stop("bad input for 'x1'")
@@ -1294,9 +1300,9 @@ damh = function(x1, x2, alpha, log=FALSE) {
if (!is.Numeric(alpha)) stop("bad input for 'alpha'")
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
L = max(length(x1), length(x2), length(alpha))
- alpha = rep(alpha, len=L)
- x1 = rep(x1, len=L)
- x2 = rep(x2, len=L)
+ alpha = rep(alpha, len = L)
+ x1 = rep(x1, len = L)
+ x2 = rep(x2, len = L)
temp = 1-alpha*(1-x1)*(1-x2)
if (log.arg) {
ans = log1p(-alpha+2*alpha*x1*x2/temp) - 2*log(temp)
@@ -1315,26 +1321,27 @@ pamh = function(q1, q2, alpha) {
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
L = max(length(q1), length(q2), length(alpha))
- if (length(q1) != L) q1 = rep(q1, len=L)
- if (length(q2) != L) q2 = rep(q2, len=L)
- if (length(alpha) != L) alpha = rep(alpha, len=L)
+ if (length(q1) != L) q1 = rep(q1, len = L)
+ if (length(q2) != L) q2 = rep(q2, len = L)
+ if (length(alpha) != L) alpha = rep(alpha, len = L)
x=q1; y=q2
- index = (x>=1 & y<1) | (y>=1 & x<1) | (x<=0 | y<=0) | (x>=1 & y>=1)
+ index = (x >= 1 & y < 1) | (y >= 1 & x < 1) |
+ (x <= 0 | y<= 0) | (x >= 1 & y >= 1)
ans = as.numeric(index)
if (any(!index)) {
ans[!index] = (q1[!index]*q2[!index]) / (1 -
alpha[!index]*(1-q1[!index])*(1-q2[!index]))
}
- ans[x>=1 & y<1] = y[x>=1 & y<1] # P(Y2 < q2) = q2
- ans[y>=1 & x<1] = x[y>=1 & x<1] # P(Y1 < q1) = q1
- ans[x<=0 | y<=0] = 0
- ans[x>=1 & y>=1] = 1
+ ans[x >= 1 & y < 1] = y[x >= 1 & y < 1] # P(Y2 < q2) = q2
+ ans[y >= 1 & x < 1] = x[y >= 1 & x < 1] # P(Y1 < q1) = q1
+ ans[x <= 0 | y <= 0] = 0
+ ans[x >= 1 & y >= 1] = 1
ans
}
ramh = function(n, alpha) {
- if (!is.Numeric(n, posit=TRUE, allow=1, integ=TRUE)) stop("bad input for 'n'")
+ if (!is.Numeric(n, posit = TRUE, allow = 1, integ = TRUE)) stop("bad input for 'n'")
if (!is.Numeric(alpha)) stop("bad input for 'alpha'")
if (any(abs(alpha) > 1)) stop("'alpha' values out of range")
@@ -1343,112 +1350,359 @@ ramh = function(n, alpha) {
b = 1-V1
A = -alpha*(2*b*V2+1)+2*alpha^2*b^2*V2+1
B = alpha^2*(4*b^2*V2-4*b*V2+1)+alpha*(4*V2-4*b*V2-2)+1
- U2 = (2*V2*(alpha*b-1)^2)/(A+sqrt(B))
- matrix(c(U1,U2), nrow=n, ncol=2)
+ U2 = (2*V2*(alpha*b - 1)^2)/(A+sqrt(B))
+ matrix(c(U1,U2), nrow=n, ncol = 2)
}
-amh.control <- function(save.weight=TRUE, ...)
+amh.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- amh = function(lalpha="rhobit", ealpha=list(), ialpha=NULL,
- method.init=1, nsimEIM=250)
+ amh = function(lalpha = "rhobit", ealpha=list(), ialpha = NULL,
+ imethod = 1, nsimEIM = 250)
{
if (mode(lalpha) != "character" && mode(lalpha) != "name")
lalpha = as.character(substitute(lalpha))
if (!is.list(ealpha)) ealpha = list()
if (length(ialpha) && (abs(ialpha) > 1))
stop("'ialpha' should be less than or equal to 1 in absolute value")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 2) stop("method.init must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("imethod must be 1 or 2")
if (length(nsimEIM) &&
- (!is.Numeric(nsimEIM, allow=1, integ=TRUE) || nsimEIM <= 50))
+ (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 50))
stop("'nsimEIM' should be an integer greater than 50")
new("vglmff",
- blurb=c("Ali-Mikhail-Haq Distribution\n",
+ blurb = c("Ali-Mikhail-Haq distribution\n",
"Links: ",
- namesof("alpha", lalpha, earg= ealpha )),
- initialize=eval(substitute(expression({
+ namesof("alpha", lalpha, earg = ealpha )),
+ initialize = eval(substitute(expression({
if (!is.matrix(y) || ncol(y) != 2)
stop("the response must be a 2 column matrix")
if (any(y < 0) || any(y > 1))
stop("the response must have values in the unit square")
- predictors.names=c(namesof("alpha", .lalpha, earg= .ealpha, short=TRUE))
+ predictors.names=c(namesof("alpha", .lalpha, earg = .ealpha, short = TRUE))
if (length(dimnames(y)))
extra$dimnamesy2 = dimnames(y)[[2]]
if (!length(etastart)) {
ainit = if (length( .ialpha )) .ialpha else {
- mean1 = if ( .method.init == 1) weighted.mean(y[,1],w) else
- median(y[,1])
- mean2 = if ( .method.init == 1) weighted.mean(y[,2],w) else
+ mean1 = if ( .imethod == 1) weighted.mean(y[, 1],w) else
+ median(y[, 1])
+ mean2 = if ( .imethod == 1) weighted.mean(y[,2],w) else
median(y[,2])
- Finit = weighted.mean(y[,1] <= mean1 & y[,2] <= mean2, w)
+ Finit = weighted.mean(y[, 1] <= mean1 & y[,2] <= mean2, w)
(1 - (mean1 * mean2 / Finit)) / ((1-mean1) * (1-mean2))
}
ainit = min(0.95, max(ainit, -0.95))
- etastart = theta2eta(rep(ainit, len=n), .lalpha, earg= .ealpha )
+ etastart = theta2eta(rep(ainit, len = n), .lalpha, earg = .ealpha )
}
- }), list( .lalpha=lalpha, .ealpha=ealpha, .ialpha=ialpha,
- .method.init=method.init))),
- inverse=eval(substitute(function(eta, extra=NULL) {
- alpha = eta2theta(eta, .lalpha, earg= .ealpha )
+ }), list( .lalpha = lalpha, .ealpha = ealpha, .ialpha=ialpha,
+ .imethod = imethod))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ alpha = eta2theta(eta, .lalpha, earg = .ealpha )
fv.matrix = matrix(0.5, length(alpha), 2)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(names(eta), extra$dimnamesy2)
fv.matrix
- }, list(.lalpha=lalpha, .ealpha=ealpha ))),
- last=eval(substitute(expression({
+ }, list(.lalpha = lalpha, .ealpha = ealpha ))),
+ last = eval(substitute(expression({
misc$link = c("alpha"= .lalpha)
misc$earg = list("alpha"= .ealpha )
misc$expected = TRUE
misc$nsimEIM = .nsimEIM
- }), list(.lalpha=lalpha, .ealpha=ealpha, .nsimEIM=nsimEIM ))),
- loglikelihood= eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra=NULL) {
- alpha = eta2theta(eta, .lalpha, earg= .ealpha )
+ }), list(.lalpha = lalpha, .ealpha = ealpha, .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ alpha = eta2theta(eta, .lalpha, earg = .ealpha )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * damh(x1=y[,1], x2=y[,2], alpha=alpha, log=TRUE))
+ sum(w * damh(x1=y[, 1], x2=y[,2], alpha=alpha, log = TRUE))
}
- }, list( .lalpha=lalpha, .earg=ealpha ))),
- vfamily=c("amh"),
- deriv=eval(substitute(expression({
- alpha = eta2theta(eta, .lalpha, earg= .ealpha )
- dalpha.deta = dtheta.deta(alpha, .lalpha, earg= .ealpha )
- y1 = y[,1]
+ }, list( .lalpha = lalpha, .earg = ealpha ))),
+ vfamily = c("amh"),
+ deriv = eval(substitute(expression({
+ alpha = eta2theta(eta, .lalpha, earg = .ealpha )
+ dalpha.deta = dtheta.deta(alpha, .lalpha, earg = .ealpha )
+ y1 = y[, 1]
y2 = y[,2]
de3 = deriv3(~ (log(1-alpha+(2*alpha*y1*y2/(1-alpha*(1-y1)*(1-y2))))-
2*log(1-alpha*(1-y1)*(1-y2))) ,
- name="alpha", hessian= FALSE)
+ name = "alpha", hessian= FALSE)
eval.de3 = eval(de3)
dl.dalpha = attr(eval.de3, "gradient")
w * dl.dalpha * dalpha.deta
- }), list(.lalpha=lalpha, .ealpha=ealpha ))),
- weight=eval(substitute(expression({
+ }), list(.lalpha = lalpha, .ealpha = ealpha ))),
+ weight = eval(substitute(expression({
sd3 = deriv3(~ (log(1-alpha+
(2*alpha*y1sim*y2sim/(1-alpha*(1-y1sim)*(1-y2sim))))-
2*log(1-alpha*(1-y1sim)*(1-y2sim))) ,
- name="alpha", hessian= FALSE)
+ name = "alpha", hessian= FALSE)
run.var = 0
for(ii in 1:( .nsimEIM )) {
ysim = ramh(n, alpha=alpha)
- y1sim = ysim[,1]
- y2sim = ysim[,1]
+ y1sim = ysim[, 1]
+ y2sim = ysim[, 1]
eval.sd3 = eval(sd3)
dl.alpha = attr(eval.sd3, "gradient")
rm(ysim, y1sim, y2sim)
temp3 = dl.dalpha
- run.var = ((ii-1) * run.var + temp3^2) / ii
+ run.var = ((ii - 1) * run.var + temp3^2) / ii
}
wz = if (intercept.only)
matrix(colMeans(cbind(run.var)),
- n, dimm(M), byrow=TRUE) else cbind(run.var)
+ n, dimm(M), byrow = TRUE) else cbind(run.var)
wz = wz * dalpha.deta^2
- w * wz
- }), list( .lalpha=lalpha, .ealpha=ealpha, .nsimEIM=nsimEIM ))))
+ c(w) * wz
+ }), list( .lalpha = lalpha, .ealpha = ealpha, .nsimEIM = nsimEIM ))))
}
+
+
+
+
+
+
+
+
+
+
+
+
+dbinorm = function(x1, x2, mean1 = 0, mean2 = 0, sd1 = 1, sd2 = 1,
+ rho = 0, log = FALSE) {
+ log.arg = log
+ rm(log)
+
+ temp5 = 1 - rho^2
+ zedd1 = (x1 - mean1) / sd1
+ zedd2 = (x2 - mean2) / sd2
+ logpdf = -log(2 * pi) - log(sd1 ) - log(sd2) -
+ 0.5 * log1p(-rho^2) +
+ -(0.5 / temp5) * (zedd1^2 - 2 * rho * zedd1 * zedd2 + zedd2^2)
+ if (log.arg) logpdf else exp(logpdf)
+}
+
+
+
+
+ binormal = function(lmean1 = "identity", emean1 = list(),
+ lmean2 = "identity", emean2 = list(),
+ lsd1 = "loge", esd1 = list(),
+ lsd2 = "loge", esd2 = list(),
+ lrho = "rhobit", erho = list(),
+ imean1 = NULL, imean2 = NULL,
+ isd1 = NULL, isd2 = NULL,
+ irho = NULL, imethod = 1,
+ equalmean = FALSE, equalsd = FALSE,
+ zero = 3:5) {
+ if (mode(lmean1) != "character" && mode(lmean1) != "name")
+ lmean1 = as.character(substitute(lmean1))
+ if (mode(lmean2) != "character" && mode(lmean2) != "name")
+ lmean2 = as.character(substitute(lmean2))
+ if (mode(lsd1 ) != "character" && mode(lsd1 ) != "name")
+ lsd1 = as.character(substitute(lsd1 ))
+ if (mode(lsd2 ) != "character" && mode(lsd2 ) != "name")
+ lsd2 = as.character(substitute(lsd2 ))
+ if (mode(lrho ) != "character" && mode(lrho ) != "name")
+ lrho = as.character(substitute(lrho ))
+
+ if (!is.list(emean1)) emean1 = list()
+ if (!is.list(emean2)) emean2 = list()
+ if (!is.list(esd1 )) esd1 = list()
+ if (!is.list(esd2 )) esd2 = list()
+ if (!is.list(erho )) erho = list()
+
+ trivial1 = is.logical(equalmean) && length(equalmean) == 1 && !equalmean
+ trivial2 = is.logical(equalsd ) && length(equalsd ) == 1 && !equalsd
+ if(!trivial1 && !trivial2)
+ stop("only one of 'equalmean' and 'equalsd' can be assigned a value")
+
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
+
+ new("vglmff",
+ blurb = c("Bivariate normal distribution\n",
+ "Links: ",
+ namesof("mean1", lmean1, earg = emean1 ), "\n",
+ namesof("mean2", lmean2, earg = emean2 ), "\n",
+ namesof("sd1", lsd1, earg = sd1 ), "\n",
+ namesof("sd2", lsd2, earg = sd2 ), "\n",
+ namesof("rho", lrho, earg = erho )),
+ constraints = eval(substitute(expression({
+ temp8.m <- diag(5)[, -2]
+ temp8.m[2, 1] <- 1
+ temp8.s <- diag(5)[, -4]
+ temp8.s[4, 3] <- 1
+ constraints <- cm.vgam(temp8.m, x, .equalmean,
+ constraints, intercept.apply = TRUE)
+ constraints <- cm.vgam(temp8.s, x, .equalsd,
+ constraints, intercept.apply = TRUE)
+ constraints = cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero,
+ .equalsd = equalsd,
+ .equalmean = equalmean ))),
+ initialize = eval(substitute(expression({
+ if (!is.matrix(y) || ncol(y) != 2)
+ stop("the response must be a 2 column matrix")
+
+ predictors.names = c(
+ namesof("mean1", .lmean1, earg = .emean1, short = TRUE),
+ namesof("mean2", .lmean2, earg = .emean2, short = TRUE),
+ namesof("sd1", .lsd1, earg = .esd1, short = TRUE),
+ namesof("sd2", .lsd2, earg = .esd2, short = TRUE),
+ namesof("rho", .lrho, earg = .erho, short = TRUE))
+
+ if (length(dimnames(y)))
+ extra$dimnamesy2 = dimnames(y)[[2]]
+
+ if (!length(etastart)) {
+ imean1 = rep(if (length( .imean1 )) .imean1 else
+ weighted.mean(y[, 1], w = w), len = n)
+ imean2 = rep(if (length( .imean2 )) .imean2 else
+ weighted.mean(y[, 2], w = w), len = n)
+ isd1 = rep(if (length( .isd1 )) .isd1 else sd(y[, 1]), len = n)
+ isd2 = rep(if (length( .isd2 )) .isd2 else sd(y[, 2]), len = n)
+ irho = rep(if (length( .irho )) .irho else cor(y[, 1], y[,2]),
+ len = n)
+
+ if ( .imethod == 2) {
+ imean1 = abs(imean1) + 0.01
+ imean2 = abs(imean2) + 0.01
+ }
+ etastart = cbind(theta2eta(imean1, .lmean1, earg = .emean1),
+ theta2eta(imean2, .lmean2, earg = .emean2),
+ theta2eta(isd1, .lsd1, earg = .esd1),
+ theta2eta(isd2, .lsd2, earg = .esd2),
+ theta2eta(irho, .lrho, earg = .erho))
+ }
+ }), list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho,
+ .imethod = imethod,
+ .imean1 = imean1, .imean2 = imean2,
+ .isd1 = isd1, .isd2 = isd2,
+ .irho = irho ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ mean1 = eta2theta(eta[, 1], .lmean1, earg = .emean1)
+ mean2 = eta2theta(eta[, 2], .lmean2, earg = .emean2)
+ fv.matrix = cbind(mean1, mean2)
+ if (length(extra$dimnamesy2))
+ dimnames(fv.matrix) = list(names(eta), extra$dimnamesy2)
+ fv.matrix
+ } , list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho ))),
+
+ last = eval(substitute(expression({
+ misc$link = c("mean1" = .lmean1,
+ "mean2" = .lmean2,
+ "sd1" = .lsd1,
+ "sd2" = .lsd2,
+ "rho" = .lrho)
+ misc$earg = list("mean1" = .emean1,
+ "mean2" = .emean2,
+ "sd1" = .esd1,
+ "sd2" = .esd2,
+ "rho" = .erho)
+ misc$expected = TRUE
+ }) , list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ mean1 = eta2theta(eta[, 1], .lmean1, earg = .emean1)
+ mean2 = eta2theta(eta[, 2], .lmean2, earg = .emean2)
+ sd1 = eta2theta(eta[, 3], .lsd1 , earg = .esd1 )
+ sd2 = eta2theta(eta[, 4], .lsd2 , earg = .esd2 )
+ Rho = eta2theta(eta[, 5], .lrho , earg = .erho )
+
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dbinorm(x1 = y[, 1], x2 = y[, 2],
+ mean1 = mean1, mean2 = mean2,
+ sd1 = sd1, sd2 = sd2, rho = Rho, log = TRUE))
+ }
+ } , list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho,
+ .imethod = imethod ))),
+ vfamily = c("binormal"),
+ deriv = eval(substitute(expression({
+ mean1 = eta2theta(eta[, 1], .lmean1, earg = .emean1)
+ mean2 = eta2theta(eta[, 2], .lmean2, earg = .emean2)
+ sd1 = eta2theta(eta[, 3], .lsd1 , earg = .esd1 )
+ sd2 = eta2theta(eta[, 4], .lsd2 , earg = .esd2 )
+ Rho = eta2theta(eta[, 5], .lrho , earg = .erho )
+
+ zedd1 = (y[, 1] - mean1) / sd1
+ zedd2 = (y[, 2] - mean2) / sd2
+ temp5 = 1 - Rho^2
+
+ SigmaInv = matrix(0, n, dimm(2))
+ SigmaInv[, iam(1, 1, M = 2)] = 1 / ((sd1^2) * temp5)
+ SigmaInv[, iam(2, 2, M = 2)] = 1 / ((sd2^2) * temp5)
+ SigmaInv[, iam(1, 2, M = 2)] = -Rho / (sd1 * sd2 * temp5)
+ dl.dmeans = mux22(t(SigmaInv), y - cbind(mean1, mean2), M = 2,
+ as.matrix = TRUE)
+ dl.dsd1 = -1 / sd1 + zedd1 * (zedd1 - Rho * zedd2) / (sd1 * temp5)
+ dl.dsd2 = -1 / sd2 + zedd2 * (zedd2 - Rho * zedd1) / (sd2 * temp5)
+ dl.drho = -Rho * (zedd1^2 - 2 * Rho * zedd1 * zedd2 +
+ zedd2^2) / temp5^2 +
+ zedd1 * zedd2 / temp5 +
+ Rho / temp5
+
+ dmean1.deta = dtheta.deta(mean1, .lmean1)
+ dmean2.deta = dtheta.deta(mean2, .lmean2)
+ dsd1.deta = dtheta.deta(sd1 , .lsd1 )
+ dsd2.deta = dtheta.deta(sd2 , .lsd2 )
+ drho.deta = dtheta.deta(Rho , .lrho )
+ dthetas.detas = cbind(dmean1.deta,
+ dmean2.deta,
+ dsd1.deta,
+ dsd2.deta,
+ drho.deta)
+
+ c(w) * cbind(dl.dmeans[, 1],
+ dl.dmeans[, 2],
+ dl.dsd1,
+ dl.dsd2,
+ dl.drho) * dthetas.detas
+ }), list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho,
+ .imethod = imethod ))),
+
+ weight = eval(substitute(expression({
+ wz = matrix(0.0, n, dimm(M))
+ wz[, iam(1, 1, M)] = SigmaInv[, iam(1, 1, M = 2)]
+ wz[, iam(2, 2, M)] = SigmaInv[, iam(2, 2, M = 2)]
+ wz[, iam(1, 2, M)] = SigmaInv[, iam(1, 2, M = 2)]
+ wz[, iam(3, 3, M)] = (1 + 1 / temp5) / sd1^2
+ wz[, iam(4, 4, M)] = (1 + 1 / temp5) / sd2^2
+ wz[, iam(3, 4, M)] = -(Rho^2) / (temp5 * sd1 * sd2)
+ wz[, iam(5, 5, M)] = 2 * (1 + 2 * Rho^2) / temp5^2 -
+ (1 + Rho^2) / temp5^2
+ wz[, iam(3, 5, M)] = -Rho / (sd1 * temp5)
+ wz[, iam(4, 5, M)] = -Rho / (sd2 * temp5)
+ for (ilocal in 1:M)
+ for (jlocal in ilocal:M)
+ wz[, iam(ilocal, jlocal, M)] = wz[, iam(ilocal, jlocal, M)] *
+ dthetas.detas[, ilocal] *
+ dthetas.detas[, jlocal]
+ c(w) * wz
+ }), list( .lmean1 = lmean1, .lmean2 = lmean2,
+ .emean1 = emean1, .emean2 = emean2,
+ .lsd1 = lsd1 , .lsd2 = lsd2 , .lrho = lrho,
+ .esd1 = esd1 , .esd2 = esd2 , .erho = erho,
+ .imethod = imethod ))))
+}
+
+
diff --git a/R/family.categorical.R b/R/family.categorical.R
index 7f37bb1..e9a47bb 100644
--- a/R/family.categorical.R
+++ b/R/family.categorical.R
@@ -261,11 +261,11 @@ dmultinomial = function(x, size = NULL, prob, log = FALSE,
if ( .reverse ) {
djr = eta2theta(eta, .link, earg = .earg )
Mp1 = ncol(extra$mymat)
- w * (y[,-1]/djr - extra$mymat[,-Mp1]/(1-djr)) *
+ c(w) * (y[,-1]/djr - extra$mymat[,-Mp1]/(1-djr)) *
dtheta.deta(djr, .link, earg = .earg )
} else {
dj = eta2theta(eta, .link, earg = .earg )
- w * (y[,-ncol(y)]/dj - extra$mymat[,-1]/(1-dj)) *
+ c(w) * (y[,-ncol(y)]/dj - extra$mymat[,-1]/(1-dj)) *
dtheta.deta(dj, .link, earg = .earg )
}
}), list( .earg = earg, .link = link, .reverse = reverse) )),
@@ -273,11 +273,13 @@ dmultinomial = function(x, size = NULL, prob, log = FALSE,
if ( .reverse ) {
cump = tapplymat1(mu, "cumsum")
ddjr.deta = dtheta.deta(djr, .link, earg = .earg )
- wz = w * ddjr.deta^2 * (mu[,-1]/djr^2 + cump[,1:M]/(1-djr)^2)
+ wz = c(w) * ddjr.deta^2 *
+ (mu[,-1] / djr^2 + cump[,1:M] / (1-djr)^2)
} else {
ccump = tapplymat1(mu[,ncol(mu):1], "cumsum")[,ncol(mu):1]
ddj.deta = dtheta.deta(dj, .link, earg = .earg )
- wz = w * ddj.deta^2 * (mu[,1:M]/dj^2 + ccump[,-1]/(1-dj)^2)
+ wz = c(w) * ddj.deta^2 *
+ (mu[,1:M] / dj^2 + ccump[,-1] / (1-dj)^2)
}
wz
@@ -387,11 +389,11 @@ dmultinomial = function(x, size = NULL, prob, log = FALSE,
if ( .reverse ) {
djrs = eta2theta(eta, .link, earg = .earg )
Mp1 = ncol(extra$mymat)
- -w * (y[,-1]/(1-djrs) - extra$mymat[,-Mp1]/djrs) *
+ -c(w) * (y[,-1]/(1-djrs) - extra$mymat[,-Mp1]/djrs) *
dtheta.deta(djrs, .link, earg = .earg )
} else {
djs = eta2theta(eta, .link, earg = .earg )
- -w * (y[,-ncol(y)]/(1-djs) - extra$mymat[,-1]/djs) *
+ -c(w) * (y[,-ncol(y)]/(1-djs) - extra$mymat[,-1]/djs) *
dtheta.deta(djs, .link, earg = .earg )
}
}), list( .earg = earg, .link = link, .reverse = reverse) )),
@@ -399,11 +401,13 @@ dmultinomial = function(x, size = NULL, prob, log = FALSE,
if ( .reverse ) {
cump = tapplymat1(mu, "cumsum")
ddjrs.deta = dtheta.deta(djrs, .link, earg = .earg )
- wz = w * ddjrs.deta^2 * (mu[,-1]/(1-djrs)^2 + cump[,1:M]/djrs^2)
+ wz = c(w) * ddjrs.deta^2 *
+ (mu[, -1] / (1-djrs)^2 + cump[, 1:M] / djrs^2)
} else {
- ccump = tapplymat1(mu[,ncol(mu):1], "cumsum")[,ncol(mu):1]
+ ccump = tapplymat1(mu[, ncol(mu):1], "cumsum")[, ncol(mu):1]
ddjs.deta = dtheta.deta(djs, .link, earg = .earg )
- wz = w * ddjs.deta^2 * (mu[,1:M]/(1-djs)^2 + ccump[,-1]/djs^2)
+ wz = c(w) * ddjs.deta^2 *
+ (mu[, 1:M] / (1 - djs)^2 + ccump[, -1] / djs^2)
}
wz
@@ -563,10 +567,10 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
vfamily = c("multinomial", "vcategorical"),
deriv = eval(substitute(expression({
if ( .refLevel < 0) {
- w * (y[,-ncol(y)] - mu[,-ncol(y)])
+ c(w) * (y[,-ncol(y)] - mu[,-ncol(y)])
} else {
use.refLevel = if ( .refLevel < 0) M+1 else .refLevel
- w * (y[,-use.refLevel] - mu[,-use.refLevel])
+ c(w) * (y[,-use.refLevel] - mu[,-use.refLevel])
}
}), list( .refLevel = refLevel ))),
weight = eval(substitute(expression({
@@ -575,7 +579,9 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
use.refLevel = if ( .refLevel < 0) M+1 else .refLevel
- if (M == 1) wz = mu[,3-use.refLevel] * (1-mu[,3-use.refLevel]) else {
+ if (M == 1) {
+ wz = mu[,3-use.refLevel] * (1-mu[,3-use.refLevel])
+ } else {
index = iam(NA, NA, M, both=TRUE, diag=TRUE)
myinc = (index$row.index >= use.refLevel)
index$row.index[myinc] = index$row.index[myinc] + 1
@@ -594,7 +600,7 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
wz[atiny,1:M] = wz[atiny,1:M] * (1 + .Machine$double.eps^0.5) +
.Machine$double.eps
}
- w * wz
+ c(w) * wz
}), list( .refLevel = refLevel ))))
}
@@ -636,7 +642,7 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
constraints = cm.vgam(matrix(1,M,1), x, .parallel, constraints,
intercept.apply = .intercept.apply)
}
- }), list( .parallel = parallel, .mv=mv, .intercept.apply=intercept.apply ))),
+ }), list( .parallel = parallel, .mv = mv, .intercept.apply=intercept.apply ))),
deviance=eval(substitute(
function(mu, y, w, residuals=FALSE, eta, extra = NULL) {
@@ -793,7 +799,7 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
earg= .earg)
}
answer
- }, list( .link = link, .reverse = reverse, .earg = earg, .mv=mv ))),
+ }, list( .link = link, .reverse = reverse, .earg = earg, .mv = mv ))),
loglikelihood = function(mu, y, w, residuals = FALSE, eta, extra = NULL)
if (residuals) stop("loglikelihood residuals ",
"not implemented yet") else {
@@ -828,15 +834,15 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
(y[,aindex, drop = FALSE]/mu.use[,aindex, drop = FALSE] -
y[,1+aindex, drop = FALSE]/mu.use[,1+aindex, drop = FALSE])
}
- (if ( .reverse) -w else w) * dcump.deta * resmat
+ (if ( .reverse) -c(w) else c(w)) * dcump.deta * resmat
} else {
cump = eta2theta(eta, .link, earg = .earg)
dcump.deta = dtheta.deta(cump, .link, earg = .earg)
- (if ( .reverse) -w else w) * dcump.deta *
+ c(if ( .reverse) -c(w) else c(w)) * dcump.deta *
(y[,-(M+1)]/mu.use[,-(M+1)] - y[,-1]/mu.use[,-1])
}
deriv.answer
- }), list( .link = link, .reverse = reverse, .earg = earg, .mv=mv ))),
+ }), list( .link = link, .reverse = reverse, .earg = earg, .mv = mv ))),
weight = eval(substitute(expression({
if ( .mv ) {
NOS = extra$NOS
@@ -845,13 +851,15 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
for(iii in 1:NOS) {
cindex = (iii-1)*(Llevels-1) + 1:(Llevels-1)
aindex = (iii-1)*(Llevels) + 1:(Llevels-1)
- wz[,cindex] = w * dcump.deta[,cindex, drop = FALSE]^2 *
- (1/mu.use[,aindex, drop = FALSE] + 1/mu.use[,1+aindex, drop = FALSE])
+ wz[,cindex] = c(w) * dcump.deta[,cindex, drop = FALSE]^2 *
+ (1 / mu.use[, aindex, drop = FALSE] +
+ 1 / mu.use[, 1+aindex, drop = FALSE])
}
if (Llevels-1 > 1) {
iii = 1
- oindex = (iii-1)*(Llevels-1) + 1:(Llevels-2)
- wz = cbind(wz, -w * dcump.deta[,oindex] * dcump.deta[,1+oindex])
+ oindex = (iii-1) * (Llevels-1) + 1:(Llevels-2)
+ wz = cbind(wz, -c(w) *
+ dcump.deta[, oindex] * dcump.deta[, 1+oindex])
if (NOS > 1) {
@@ -860,7 +868,7 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
for(iii in 2:NOS) {
oindex = (iii-1)*(Llevels-1) + 1:(Llevels-2)
wz[,cptrwz + 1 + (1:(Llevels-2))] =
- -w * dcump.deta[,oindex] *
+ -c(w) * dcump.deta[,oindex] *
dcump.deta[,1+oindex]
cptrwz = cptrwz + Llevels - 1 # Move it along a bit
}
@@ -870,13 +878,13 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
}
} else {
- wz = w * dcump.deta^2 * (1/mu.use[,1:M] + 1/mu.use[,-1])
+ wz = c(w) * dcump.deta^2 * (1/mu.use[,1:M] + 1/mu.use[,-1])
if (M > 1)
- wz = cbind(wz, -w * dcump.deta[,-M] *
+ wz = cbind(wz, -c(w) * dcump.deta[,-M] *
dcump.deta[,2:M] / mu.use[,2:M])
}
wz
- }), list( .earg = earg, .link = link, .mv=mv ))))
+ }), list( .earg = earg, .link = link, .mv = mv ))))
}
@@ -985,10 +993,10 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
dzeta.deta = dtheta.deta(zeta, .link, earg = .earg )
if ( .reverse ) {
cumy = tapplymat1(y, "cumsum")
- w * dzeta.deta * (cumy[,1:M] / zeta - score)
+ c(w) * dzeta.deta * (cumy[,1:M] / zeta - score)
} else {
ccumy = tapplymat1(y[,ncol(y):1], "cumsum")[,ncol(y):1]
- w * dzeta.deta * (ccumy[,-1] / zeta - score)
+ c(w) * dzeta.deta * (ccumy[,-1] / zeta - score)
}
}), list( .earg = earg, .link = link, .reverse = reverse) )),
weight = eval(substitute(expression({
@@ -1008,7 +1016,7 @@ vglm.vcategorical.control = function(maxit=30, trace=FALSE, panic=TRUE, ...)
ccump = tapplymat1(mu[,ncol(mu):1], "cumsum")[, ncol(mu):1]
wz[,1:M] = (ccump[,-1] / zeta^2 - score^2) * dzeta.deta^2
}
- w * wz
+ c(w) * wz
}), list( .earg = earg, .link = link, .reverse = reverse ))))
}
@@ -1151,7 +1159,7 @@ acat.deriv = function(zeta, reverse, M, n)
(alpha[uindex[ind5$row]] + alpha[uindex[ind5$col]])^2
}
}
- wz = wz * w
+ wz = c(w) * wz
wz
}), list( .refvalue = refvalue, .refgp = refgp ))))
}
@@ -1240,7 +1248,8 @@ bratt = function(refgp="last",
loglikelihood = function(mu, y, w, residuals = FALSE, eta, extra = NULL)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * (y * log(mu) + 0.5 * extra$ties * log(attr(mu, "probtie"))))
+ sum(c(w) * (y * log(mu) +
+ 0.5 * extra$ties * log(attr(mu, "probtie"))))
},
vfamily = c("bratt"),
deriv = eval(substitute(expression({
@@ -1315,7 +1324,7 @@ bratt = function(refgp="last",
-alpha[jay] * alpha0 * sum(naj / Daj^2)
}
}
- wz = wz * w
+ wz = c(w) * wz
wz
}), list( .refvalue = refvalue, .refgp = refgp ))))
}
@@ -1577,7 +1586,7 @@ tapplymat1 = function(mat, function.arg=c("cumsum", "diff", "cumprod"))
cptr = cptr + 1
}
}
- resmat = w * resmat * dmu.deta
+ resmat = c(w) * resmat * dmu.deta
resmat
}), list( .link = link, .earg = earg, .countdata=countdata ))),
weight = eval(substitute(expression({
@@ -1590,7 +1599,7 @@ tapplymat1 = function(mat, function.arg=c("cumsum", "diff", "cumprod"))
cptr = cptr + 1
}
}
- wz = w * d2l.dmu2 * dmu.deta^2
+ wz = c(w) * d2l.dmu2 * dmu.deta^2
wz
}), list( .earg = earg, .link = link, .countdata=countdata ))))
}
@@ -1807,11 +1816,11 @@ ordpoissonProbs = function(extra, mu, deriv=0) {
wz = matrix(0, n, 2*(2*M-3))
- wz[,2*(1:J)-1] = if (ooz) w * (dcump.deta / scalemat)^2 *
+ wz[,2*(1:J)-1] = if (ooz) c(w) * (dcump.deta / scalemat)^2 *
(1/mu.use[,1:J] + 1/mu.use[,-1]) else 1
- wz[,2*(1:J)] = if (ooz) 1 else w * (dcump.dscale * dscale.deta)^2 *
+ wz[,2*(1:J)] = if (ooz) 1 else c(w) * (dcump.dscale * dscale.deta)^2 *
(1/mu.use[,1:J] + 1/mu.use[,-1])
- wz0 = w * (dcump.deta / scalemat) *
+ wz0 = c(w) * (dcump.deta / scalemat) *
(dcump.dscale * dscale.deta) *
(1/mu.use[,1:J] + 1/mu.use[,-1])
wz0 = as.matrix(wz0)
@@ -1819,12 +1828,12 @@ ordpoissonProbs = function(extra, mu, deriv=0) {
wz[,iam(2*ii-1,2*ii,M=M)] = if (ooz) wz0[,ii] else 0
if (J > 1) {
- wz0 = -w * (dcump.deta[,-J] / scalemat[,-J]) *
+ wz0 = -c(w) * (dcump.deta[,-J] / scalemat[,-J]) *
(dcump.deta[,-1] / scalemat[,-1]) / mu.use[,2:J]
wz0 = as.matrix(wz0) # Just in case J=2
for(ii in 1:(J-1))
wz[,iam(2*ii-1,2*ii+1,M=M)] = if (ooz) wz0[,ii] else 0
- wz0 = -w * (dcump.dscale[,-1] * dscale.deta[,-1]) *
+ wz0 = -c(w) * (dcump.dscale[,-1] * dscale.deta[,-1]) *
(dcump.dscale[,-J] * dscale.deta[,-J]) / mu.use[,2:J]
wz0 = as.matrix(wz0)
for(ii in 1:(J-1))
@@ -1832,12 +1841,12 @@ ordpoissonProbs = function(extra, mu, deriv=0) {
- wz0 = -w * (dcump.deta[,-J] / scalemat[,-J]) *
+ wz0 = -c(w) * (dcump.deta[,-J] / scalemat[,-J]) *
(dcump.dscale[,-1] * dscale.deta[,-1]) / mu.use[,2:J]
wz0 = as.matrix(wz0)
for(ii in 1:(J-1))
wz[,iam(2*ii-1,2*ii+2,M=M)] = if (ooz) wz0[,ii] else 0
- wz0 = -w * (dcump.deta[,-1] / scalemat[,-1]) *
+ wz0 = -c(w) * (dcump.deta[,-1] / scalemat[,-1]) *
(dcump.dscale[,-J] * dscale.deta[,-J]) / mu.use[,2:J]
wz0 = as.matrix(wz0)
for(ii in 1:(J-1))
diff --git a/R/family.censored.R b/R/family.censored.R
index 6746b25..de0dc37 100644
--- a/R/family.censored.R
+++ b/R/family.censored.R
@@ -33,16 +33,16 @@
temp = y[, 2]
extra$uncensored = ifelse(temp == 1, TRUE, FALSE)
extra$rightcensored = ifelse(temp == 0, TRUE, FALSE)
- extra$leftcensored = rep(FALSE, len=n)
- extra$interval = rep(FALSE, len=n)
+ extra$leftcensored = rep(FALSE, len = n)
+ extra$interval = rep(FALSE, len = n)
init.mu = pmax(y[,1], 1/8)
} else
if (centype == "left") {
temp = y[, 2]
extra$uncensored = ifelse(temp == 1, TRUE, FALSE)
- extra$rightcensored = rep(FALSE, len=n)
+ extra$rightcensored = rep(FALSE, len = n)
extra$leftcensored = ifelse(temp == 0, TRUE, FALSE)
- extra$interval = rep(FALSE, len=n)
+ extra$interval = rep(FALSE, len = n)
init.mu = pmax(y[,1], 1/8)
} else
if (centype == "interval" || centype == "interval2") {
@@ -68,7 +68,7 @@
if (length( .imu )) init.mu = 0 * y[,1] + .imu
- predictors.names = namesof("mu", .link, earg = .earg, short=TRUE)
+ predictors.names = namesof("mu", .link, earg = .earg, short = TRUE)
if (!length(etastart))
etastart = theta2eta(init.mu, link = .link, earg = .earg)
}), list( .link = link, .earg = earg, .imu = imu))),
@@ -93,9 +93,9 @@
if (residuals){
stop("loglikelihood residuals not implemented yet")
} else {
- sum(w[cen0] * dpois(y[cen0,1], mu[cen0], log=TRUE)) +
+ sum(w[cen0] * dpois(y[cen0,1], mu[cen0], log = TRUE)) +
sum(w[cenU] * log1p(-ppois(y[cenU,1] - 1, mu[cenU]))) +
- sum(w[cenL] * ppois(y[cenL,1] - 1, mu[cenL], log=TRUE)) +
+ sum(w[cenL] * ppois(y[cenL,1] - 1, mu[cenL], log = TRUE)) +
sum(w[cenI] * log(ppois(y[cenI,2], mu[cenI]) -
ppois(y[cenI,1], mu[cenI])))
}
@@ -112,7 +112,7 @@
if (any(cenU)) {
yllim[cenU] = y[cenU,1]
densm1 = dpois(yllim-1, lambda)
- queue = ppois(yllim-1, lambda, lower=FALSE) # Right tail probability
+ queue = ppois(yllim-1, lambda, lower = FALSE) # Right tail probability
dl.dlambda[cenU] = densm1[cenU] / queue[cenU]
}
if (any(cenL)) {
@@ -164,9 +164,9 @@
if (FALSE)
cexpon =
- ecexpon = function(link="loge", location=0)
+ ecexpon = function(link = "loge", location = 0)
{
- if (!is.Numeric(location, allow=1))
+ if (!is.Numeric(location, allow = 1))
stop("bad input for 'location'")
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
@@ -178,7 +178,7 @@ if (FALSE)
namesof("rate", link, tag = FALSE), "\n",
"Variance: ",
if (location == 0) "Exponential: mu^2" else
- paste("(mu-", location, ")^2", sep="")),
+ paste("(mu-", location, ")^2", sep = "")),
initialize = eval(substitute(expression({
extra$location = .location # This is passed into, e.g., link, deriv etc.
if (any(y[,1] <= extra$location))
@@ -201,22 +201,22 @@ if (FALSE)
temp <- y[, 2]
extra$uncensored = ifelse(temp == 1, TRUE, FALSE)
extra$rightcensored = ifelse(temp == 0, TRUE, FALSE)
- extra$leftcensored = rep(FALSE, len=n)
- extra$interval = rep(FALSE, len=n)
+ extra$leftcensored = rep(FALSE, len = n)
+ extra$interval = rep(FALSE, len = n)
} else
if (type == "left") {
temp <- y[, 2]
extra$uncensored = ifelse(temp == 1, TRUE, FALSE)
- extra$rightcensored = rep(FALSE, len=n)
+ extra$rightcensored = rep(FALSE, len = n)
extra$leftcensored = ifelse(temp == 0, TRUE, FALSE)
- extra$interval = rep(FALSE, len=n)
+ extra$interval = rep(FALSE, len = n)
} else
if (type == "counting") {
stop("type == 'counting' not recognized")
extra$uncensored = rep(temp == 1, TRUE, FALSE)
- extra$interval = rep(FALSE, len=n)
- extra$leftcensored = rep(FALSE, len=n)
- extra$rightcensored = rep(FALSE, len=n)
+ extra$interval = rep(FALSE, len = n)
+ extra$leftcensored = rep(FALSE, len = n)
+ extra$rightcensored = rep(FALSE, len = n)
extra$counting = ifelse(temp == 0, TRUE, FALSE)
} else
if (type == "interval") {
@@ -227,8 +227,8 @@ if (FALSE)
extra$interval = ifelse(temp == 3, TRUE, FALSE)
} else
stop("'type' not recognized")
- #if(!length(extra$leftcensored)) extra$leftcensored = rep(FALSE, len=n)
- #if(!length(extra$rightcensored)) extra$rightcensored = rep(FALSE, len=n)
+ #if(!length(extra$leftcensored)) extra$leftcensored = rep(FALSE, len = n)
+ #if(!length(extra$rightcensored)) extra$rightcensored = rep(FALSE, len = n)
#if(any(extra$rightcensored & extra$leftcensored))
# stop("some observations are both right and left censored!")
}), list( .location=location, .link = link ))),
@@ -301,157 +301,183 @@ if (FALSE)
- cnormal1 = function(lmu="identity", lsd="loge", method.init=1, zero=2)
+ cennormal1 = function(lmu = "identity", lsd = "loge",
+ emu = list(), esd = list(),
+ imethod = 1,
+ zero = 2)
{
- if (mode(lmu) != "character" && mode(lmu) != "name")
- lmu = as.character(substitute(lmu))
- if (mode(lsd) != "character" && mode(lsd) != "name")
- lsd = as.character(substitute(lsd))
- if (!is.Numeric(method.init, allow=1, integer=TRUE, positi=TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
- new("vglmff",
- blurb = c("Censored univariate normal\n\n",
- "Links: ", namesof("mu", lmu, tag = TRUE), "; ",
- namesof("sd", lsd, tag = TRUE), "\n",
- "Conditional variance: sd^2"),
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero=zero ))),
- initialize = eval(substitute(expression({
- y = cbind(y)
- if (ncol(y) > 1)
- stop("the response must be a vector or a 1-column matrix")
- if (!length(extra$leftcensored))
- extra$leftcensored = rep(FALSE, len=n)
- if (!length(extra$rightcensored))
- extra$rightcensored = rep(FALSE, len=n)
- if (any(extra$rightcensored & extra$leftcensored))
- stop("some observations are both right and left censored!")
- predictors.names = c(namesof("mu", .lmu, tag = FALSE),
- namesof("sd", .lsd, tag = FALSE))
- if (!length(etastart)) {
- anyc = extra$leftcensored | extra$rightcensored
- i11 = if ( .method.init == 1) anyc else FALSE # can be all data
- junk = lm.wfit(x=cbind(x[!i11,]),y=y[!i11],w=w[!i11])
- sd.y.est = sqrt( sum(w[!i11] * junk$resid^2) / junk$df.residual )
- etastart = cbind(mu=y, rep(theta2eta(sd.y.est, .lsd), length=n))
- if (any(anyc)) etastart[anyc,1] = x[anyc,,drop=FALSE] %*% junk$coeff
- }
- }), list( .lmu = lmu, .lsd = lsd, .method.init = method.init ))),
- inverse = eval(substitute( function(eta, extra = NULL) {
- eta2theta(eta[,1], .lmu)
- }, list( .lmu = lmu ))),
- last = eval(substitute(expression({
- misc$link = c("mu"= .lmu, "sd"= .lsd)
- misc$expected = TRUE
- }), list( .lmu = lmu, .lsd = lsd ))),
- loglikelihood = eval(substitute(
- function(mu,y,w,residuals = FALSE,eta, extra = NULL) {
- cenL = extra$leftcensored
- cenU = extra$rightcensored
- cen0 = !cenL & !cenU # uncensored obsns
- mum = eta2theta(eta[,1], .lmu)
- sd = eta2theta(eta[,2], .lsd)
- Lower = ifelse(cenL, y, -Inf)
- Upper = ifelse(cenU, y, Inf)
- ell1 = -log(sd[cen0]) - 0.5 * ((y[cen0] - mum[cen0])/sd[cen0])^2
- ell2 = log1p(-pnorm((mum[cenL] - Lower[cenL])/sd[cenL]))
- ell3 = log1p(-pnorm(( Upper[cenU] - mum[cenU])/sd[cenU]))
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w[cen0] * ell1) + sum(w[cenL] * ell2) + sum(w[cenU] * ell3)
- }, list( .lmu = lmu, .lsd = lsd ))),
- vfamily = c("cnormal1"),
- deriv = eval(substitute(expression({
- cenL = extra$leftcensored
- cenU = extra$rightcensored
- cen0 = !cenL & !cenU # uncensored obsns
- Lower = ifelse(cenL, y, -Inf)
- Upper = ifelse(cenU, y, Inf)
- mum = eta2theta(eta[,1], .lmu)
- sd = eta2theta(eta[,2], .lsd)
- dl.dmu = (y-mum) / sd^2
- dl.dsd = (((y-mum)/sd)^2 - 1) / sd
- dmu.deta = dtheta.deta(mum, .lmu)
- dsd.deta = dtheta.deta(sd, .lsd)
- if (any(cenL)) {
- mumL = mum - Lower
- temp21L = mumL[cenL] / sd[cenL]
- PhiL = pnorm(temp21L)
- phiL = dnorm(temp21L)
- fred21 = phiL / (1 - PhiL)
- dl.dmu[cenL] = -fred21 / sd[cenL]
- dl.dsd[cenL] = mumL[cenL] * fred21 / sd[cenL]^2
- rm(fred21)
- }
- if (any(cenU)) {
- mumU = Upper - mum
- temp21U = mumU[cenU] / sd[cenU]
- PhiU = pnorm(temp21U)
- phiU = dnorm(temp21U)
- fred21 = phiU / (1 - PhiU)
- dl.dmu[cenU] = fred21 / sd[cenU] # Negated
- dl.dsd[cenU] = mumU[cenU] * fred21 / sd[cenU]^2
- rm(fred21)
- }
- w * cbind(dl.dmu * dmu.deta, dl.dsd * dsd.deta)
- }), list( .lmu = lmu, .lsd = lsd ))),
- weight = eval(substitute(expression({
- A1 = 1 - pnorm((mum - Lower) / sd) # Lower
- A3 = 1 - pnorm(( Upper - mum) / sd) # Upper
- A2 = 1 - A1 - A3 # Middle; uncensored
- wz = matrix(0, n, 3)
- wz[,iam(1,1,M)] = A2 * 1 / sd^2 # ed2l.dmu2
- wz[,iam(2,2,M)] = A2 * 2 / sd^2 # ed2l.dsd2
- mumL = mum - Lower
- temp21L = mumL / sd
- PhiL = pnorm(temp21L)
- phiL = dnorm(temp21L)
- temp31L = ((1-PhiL) * sd)^2
- wz.cenL11 = phiL * (phiL - (1-PhiL)*temp21L) / temp31L
- wz.cenL22 = mumL * phiL * ((1-PhiL) * (2 - temp21L^2) +
- mumL * phiL / sd) / (sd * temp31L)
- wz.cenL12 = phiL * ((1-PhiL)*(temp21L^2 - 1) -
- temp21L*phiL) / temp31L
- wz.cenL11[!is.finite(wz.cenL11)] = 0
- wz.cenL22[!is.finite(wz.cenL22)] = 0
- wz.cenL12[!is.finite(wz.cenL12)] = 0
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A1 * wz.cenL11
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A1 * wz.cenL22
- wz[,iam(1,2,M)] = A1 * wz.cenL12
- mumU = Upper - mum # often Inf
- temp21U = mumU / sd # often Inf
- PhiU = pnorm(temp21U) # often 1
- phiU = dnorm(temp21U) # often 0
- temp31U = ((1-PhiU) * sd)^2 # often 0
- tmp8 = (1-PhiU)*temp21U
- wzcenU11 = phiU * (phiU - tmp8) / temp31U
- tmp9 = (1-PhiU) * (2 - temp21U^2)
- wzcenU22 = mumU * phiU * (tmp9 + mumU * phiU / sd) / (sd * temp31U)
- wzcenU12 = -phiU * ((1-PhiU)*(temp21U^2 - 1) -
- temp21U*phiU) / temp31U
- wzcenU11[!is.finite(wzcenU11)] = 0 # Needed when Upper==Inf
- wzcenU22[!is.finite(wzcenU22)] = 0 # Needed when Upper==Inf
- wzcenU12[!is.finite(wzcenU12)] = 0 # Needed when Upper==Inf
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A3 * wzcenU11
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A3 * wzcenU22
- wz[,iam(1,2,M)] = wz[,iam(1,2,M)] + A3 * wzcenU12
- wz[,iam(1,1,M)] = w * wz[,iam(1,1,M)] * dmu.deta^2
- wz[,iam(2,2,M)] = w * wz[,iam(2,2,M)] * dsd.deta^2
- wz[,iam(1,2,M)] = w * wz[,iam(1,2,M)] * dmu.deta * dsd.deta
- wz
- }), list( .lmu = lmu, .lsd = lsd ))))
+ if (mode(lmu) != "character" && mode(lmu) != "name")
+ lmu = as.character(substitute(lmu))
+ if (mode(lsd) != "character" && mode(lsd) != "name")
+ lsd = as.character(substitute(lsd))
+ if (!is.Numeric(imethod, allow = 1, integer = TRUE, positi = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
+ if (!is.list(emu)) emu = list()
+ if (!is.list(esd)) esd = list()
+
+
+ new("vglmff",
+ blurb = c("Censored univariate normal\n\n",
+ "Links: ", namesof("mu", lmu, tag = TRUE), "; ",
+ namesof("sd", lsd, tag = TRUE), "\n",
+ "Conditional variance: sd^2"),
+ constraints = eval(substitute(expression({
+ constraints = cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero=zero ))),
+ initialize = eval(substitute(expression({
+ y = cbind(y)
+ if (ncol(y) > 1)
+ stop("the response must be a vector or a 1-column matrix")
+
+ if (!length(extra$leftcensored))
+ extra$leftcensored = rep(FALSE, len = n)
+ if (!length(extra$rightcensored))
+ extra$rightcensored = rep(FALSE, len = n)
+ if (any(extra$rightcensored & extra$leftcensored))
+ stop("some observations are both right and left censored!")
+
+ predictors.names =
+ c(namesof("mu", .lmu, earg =.emu, tag = FALSE),
+ namesof("sd", .lsd, earg =.esd, tag = FALSE))
+
+ if (!length(etastart)) {
+ anyc = extra$leftcensored | extra$rightcensored
+ i11 = if ( .imethod == 1) anyc else FALSE # can be all data
+ junk = lm.wfit(x=cbind(x[!i11,]),y=y[!i11],w=w[!i11])
+ sd.y.est = sqrt( sum(w[!i11] * junk$resid^2) / junk$df.residual )
+ etastart = cbind(mu = y,
+ rep(theta2eta(sd.y.est, .lsd), length = n))
+ if (any(anyc)) etastart[anyc,1] = x[anyc,,drop = FALSE] %*% junk$coeff
+ }
+ }), list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .imethod = imethod ))),
+ inverse = eval(substitute( function(eta, extra = NULL) {
+ eta2theta(eta[, 1], .lmu, earg = .emu)
+ }, list( .lmu = lmu, .emu = emu ))),
+ last = eval(substitute(expression({
+ misc$link = c("mu" = .lmu, "sd" = .lsd)
+ misc$earg = list("mu" = .emu ,"sd" = .esd )
+
+ misc$expected = TRUE
+ }), list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ cenL = extra$leftcensored
+ cenU = extra$rightcensored
+ cen0 = !cenL & !cenU # uncensored obsns
+
+ mum = eta2theta(eta[,1], .lmu, earg = .emu )
+ sdv = eta2theta(eta[,2], .lsd, earg = .esd )
+
+ Lower = ifelse(cenL, y, -Inf)
+ Upper = ifelse(cenU, y, Inf)
+ ell1 = -log(sdv[cen0]) - 0.5 * ((y[cen0] - mum[cen0])/sdv[cen0])^2
+ ell2 = log1p(-pnorm((mum[cenL] - Lower[cenL])/sdv[cenL]))
+ ell3 = log1p(-pnorm(( Upper[cenU] - mum[cenU])/sdv[cenU]))
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else
+ sum(w[cen0] * ell1) + sum(w[cenL] * ell2) + sum(w[cenU] * ell3)
+ }, list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd ))),
+ vfamily = c("cennormal1"),
+ deriv = eval(substitute(expression({
+ cenL = extra$leftcensored
+ cenU = extra$rightcensored
+ cen0 = !cenL & !cenU # uncensored obsns
+ Lower = ifelse(cenL, y, -Inf)
+ Upper = ifelse(cenU, y, Inf)
+
+ mum = eta2theta(eta[,1], .lmu)
+ sdv = eta2theta(eta[,2], .lsd)
+
+ dl.dmu = (y-mum) / sdv^2
+ dl.dsd = (((y-mum)/sdv)^2 - 1) / sdv
+
+ dmu.deta = dtheta.deta(mum, .lmu, earg = .emu )
+ dsd.deta = dtheta.deta(sdv, .lsd, earg = .esd )
+
+ if (any(cenL)) {
+ mumL = mum - Lower
+ temp21L = mumL[cenL] / sdv[cenL]
+ PhiL = pnorm(temp21L)
+ phiL = dnorm(temp21L)
+ fred21 = phiL / (1 - PhiL)
+ dl.dmu[cenL] = -fred21 / sdv[cenL]
+ dl.dsd[cenL] = mumL[cenL] * fred21 / sdv[cenL]^2
+ rm(fred21)
+ }
+ if (any(cenU)) {
+ mumU = Upper - mum
+ temp21U = mumU[cenU] / sdv[cenU]
+ PhiU = pnorm(temp21U)
+ phiU = dnorm(temp21U)
+ fred21 = phiU / (1 - PhiU)
+ dl.dmu[cenU] = fred21 / sdv[cenU] # Negated
+ dl.dsd[cenU] = mumU[cenU] * fred21 / sdv[cenU]^2
+ rm(fred21)
+ }
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsd * dsd.deta)
+ }), list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd ))),
+ weight = eval(substitute(expression({
+ A1 = 1 - pnorm((mum - Lower) / sdv) # Lower
+ A3 = 1 - pnorm(( Upper - mum) / sdv) # Upper
+ A2 = 1 - A1 - A3 # Middle; uncensored
+ wz = matrix(0, n, 3)
+ wz[,iam(1,1,M)] = A2 * 1 / sdv^2 # ed2l.dmu2
+ wz[,iam(2,2,M)] = A2 * 2 / sdv^2 # ed2l.dsd2
+ mumL = mum - Lower
+ temp21L = mumL / sdv
+ PhiL = pnorm(temp21L)
+ phiL = dnorm(temp21L)
+ temp31L = ((1-PhiL) * sdv)^2
+ wz.cenL11 = phiL * (phiL - (1-PhiL)*temp21L) / temp31L
+ wz.cenL22 = mumL * phiL * ((1-PhiL) * (2 - temp21L^2) +
+ mumL * phiL / sdv) / (sdv * temp31L)
+ wz.cenL12 = phiL * ((1-PhiL)*(temp21L^2 - 1) -
+ temp21L*phiL) / temp31L
+ wz.cenL11[!is.finite(wz.cenL11)] = 0
+ wz.cenL22[!is.finite(wz.cenL22)] = 0
+ wz.cenL12[!is.finite(wz.cenL12)] = 0
+ wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A1 * wz.cenL11
+ wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A1 * wz.cenL22
+ wz[,iam(1,2,M)] = A1 * wz.cenL12
+ mumU = Upper - mum # often Inf
+ temp21U = mumU / sdv # often Inf
+ PhiU = pnorm(temp21U) # often 1
+ phiU = dnorm(temp21U) # often 0
+ temp31U = ((1-PhiU) * sdv)^2 # often 0
+ tmp8 = (1-PhiU)*temp21U
+ wzcenU11 = phiU * (phiU - tmp8) / temp31U
+ tmp9 = (1-PhiU) * (2 - temp21U^2)
+ wzcenU22 = mumU * phiU * (tmp9 + mumU * phiU / sdv) / (sdv * temp31U)
+ wzcenU12 = -phiU * ((1-PhiU)*(temp21U^2 - 1) -
+ temp21U*phiU) / temp31U
+ wzcenU11[!is.finite(wzcenU11)] = 0 # Needed when Upper==Inf
+ wzcenU22[!is.finite(wzcenU22)] = 0 # Needed when Upper==Inf
+ wzcenU12[!is.finite(wzcenU12)] = 0 # Needed when Upper==Inf
+ wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A3 * wzcenU11
+ wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A3 * wzcenU22
+ wz[,iam(1,2,M)] = wz[,iam(1,2,M)] + A3 * wzcenU12
+ wz[,iam(1,1,M)] = wz[,iam(1,1,M)] * dmu.deta^2
+ wz[,iam(2,2,M)] = wz[,iam(2,2,M)] * dsd.deta^2
+ wz[,iam(1,2,M)] = wz[,iam(1,2,M)] * dmu.deta * dsd.deta
+ c(w) * wz
+ }), list( .lmu = lmu, .lsd = lsd ))))
}
- crayleigh = function(lscale = "loge", escale = list(),
- oim = TRUE) {
+ cenrayleigh = function(lscale = "loge", escale = list(),
+ oim = TRUE) {
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
if (!is.logical(oim) || length(oim) != 1)
@@ -471,7 +497,7 @@ if (FALSE)
if (length(extra$leftcensored))
stop("cannot handle left-censored data")
if (!length(extra$rightcensored))
- extra$rightcensored = rep(FALSE, len=n)
+ extra$rightcensored = rep(FALSE, len = n)
predictors.names =
namesof("scale", .lscale, earg = .escale, tag = FALSE)
@@ -501,7 +527,7 @@ if (FALSE)
0.5*(y[cen0]/Scale[cen0])^2)) -
sum(w[cenU] * (y[cenU]/Scale[cenU])^2) * 0.5
}, list( .lscale = lscale, .escale = escale ))),
- vfamily = c("crayleigh"),
+ vfamily = c("cenrayleigh"),
deriv = eval(substitute(expression({
cen0 = !extra$rightcensored # uncensored obsns
cenU = extra$rightcensored
@@ -522,7 +548,7 @@ if (FALSE)
ed2l.dScale2[cenU] = 6 / (Scale[cenU])^2
wz[cenU] = (dScale.deta[cenU])^2 * ed2l.dScale2[cenU]
}
- w * wz
+ c(w) * wz
}), list( .lscale = lscale, .escale = escale,
.oim = oim ))))
}
@@ -534,27 +560,28 @@ if (FALSE)
- weibull =
- weibull.sev = function(lshape = "loge", lscale = "loge",
+ weibull = function(lshape = "loge", lscale = "loge",
eshape = list(), escale = list(),
ishape = NULL, iscale = NULL,
nrfs = 1,
- method.init = 1, zero = 2)
+ imethod = 1, zero = 2)
{
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (length(zero) && !is.Numeric(zero, integer=TRUE, posit=TRUE))
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
- if (!is.Numeric(method.init, allow=1, integer=TRUE, positi=TRUE) ||
- method.init > 2)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integer = TRUE, positi = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
+
if (!is.list(eshape)) eshape = list()
if (!is.list(escale)) escale = list()
- if (!is.Numeric(nrfs, allow=1) || nrfs < 0 || nrfs > 1)
- stop("bad input for 'nrfs'")
+ if (!is.Numeric(nrfs, allow = 1) || nrfs < 0 || nrfs > 1)
+ stop("bad input for argument 'nrfs'")
new("vglmff",
blurb = c("Weibull distribution\n\n",
@@ -569,7 +596,7 @@ if (FALSE)
}), list( .zero = zero ))),
initialize = eval(substitute(expression({
y = cbind(y)
- if (ncol(y)>1)
+ if (ncol(y) > 1)
stop("the response must be a vector or a 1-column matrix")
if (is.SurvS4(y))
@@ -581,29 +608,29 @@ if (FALSE)
if (!length(.ishape) || !length(.iscale)) {
anyc = FALSE # extra$leftcensored | extra$rightcensored
- i11 = if ( .method.init == 1) anyc else FALSE # can be all data
+ i11 = if ( .imethod == 1) anyc else FALSE # can be all data
qvec = c(.25, .5, .75) # Arbitrary; could be made an argument
init.shape = if (length( .ishape)) .ishape else 1
xvec = log(-log1p(-qvec))
- fit0 = lsfit(x=xvec, y=log(quantile(y[!i11], qvec)))
+ fit0 = lsfit(x = xvec, y = log(quantile(y[!i11], qvec)))
}
if (!length(etastart)) {
- shape = rep(if(length(.ishape)) .ishape else 1/fit0$coef["X"],len=n)
- scale = rep(if(length(.iscale)) .iscale else
- exp(fit0$coef["Intercept"]), len=n)
- etastart =
- cbind(theta2eta(shape, .lshape, earg = .eshape ),
- theta2eta(scale, .lscale, earg = .escale ))
+ shape = rep(if(length(.ishape)) .ishape else
+ 1 / fit0$coef["X"], len = n)
+ Scale = rep(if(length(.iscale)) .iscale else
+ exp(fit0$coef["Intercept"]), len = n)
+ etastart = cbind(theta2eta(shape, .lshape, earg = .eshape ),
+ theta2eta(Scale, .lscale, earg = .escale ))
}
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape,
.iscale = iscale, .ishape = ishape,
- .method.init = method.init ) )),
+ .imethod = imethod ) )),
inverse = eval(substitute(function(eta, extra = NULL) {
shape = eta2theta(eta[,1], .lshape, earg = .eshape )
- scale = eta2theta(eta[,2], .lscale, earg = .escale )
- scale * gamma(1+1/shape)
+ Scale = eta2theta(eta[,2], .lscale, earg = .escale )
+ Scale * gamma(1 + 1 / shape)
}, list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ) )),
last = eval(substitute(expression({
@@ -621,23 +648,27 @@ if (FALSE)
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE,eta, extra = NULL) {
shape = eta2theta(eta[,1], .lshape, earg = .eshape )
- scale = eta2theta(eta[,2], .lscale, earg = .escale )
- ell1 = (log(shape) - log(scale) + (shape-1) *
- log(y/scale) - (y / scale)^shape)
+ Scale = eta2theta(eta[,2], .lscale, earg = .escale )
+ ell1 = (log(shape) - log(Scale) + (shape-1) *
+ log(y / Scale) - (y / Scale)^shape)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else
sum(w * ell1)
}, list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ) )),
- vfamily = c("weibull.sev"),
+ vfamily = c("weibull"),
deriv = eval(substitute(expression({
shape = eta2theta(eta[,1], .lshape, earg = .eshape )
- scale = eta2theta(eta[,2], .lscale, earg = .escale )
- dl.dshape = 1/shape + log(y/scale) - log(y/scale) * (y/scale)^shape
- dl.dscale = (shape/scale) * (-1 + (y/scale)^shape)
+ Scale = eta2theta(eta[,2], .lscale, earg = .escale )
+
+ dl.dshape = 1 / shape + log(y / Scale) -
+ log(y / Scale) * (y / Scale)^shape
+ dl.dscale = (shape / Scale) * (-1.0 + (y / Scale)^shape)
+
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape )
- dscale.deta = dtheta.deta(scale, .lscale, earg = .escale )
- w * cbind( dl.dshape * dshape.deta, dl.dscale * dscale.deta )
+ dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale )
+ c(w) * cbind(dl.dshape * dshape.deta,
+ dl.dscale * dscale.deta)
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ) )),
weight = eval(substitute(expression({
@@ -645,15 +676,14 @@ if (FALSE)
wz = matrix(as.numeric(NA), n, dimm(M)) #3=dimm(M)
- ed2l.dshape = (6*(EulerM-1)^2 +pi^2)/(6*shape^2) # Kleiber&Kotz (2003)
- ed2l.dscale = (shape/scale)^2
- ed2l.dshapescale = (EulerM-1)/scale
+ ed2l.dshape = (6*(EulerM - 1)^2 + pi^2)/(6*shape^2) # KK (2003)
+ ed2l.dscale = (shape / Scale)^2
+ ed2l.dshapescale = (EulerM-1) / Scale
wz[,iam(1,1,M)] = ed2l.dshape * dshape.deta^2
wz[,iam(2,2,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(1,2,M)] = ed2l.dshapescale * dscale.deta * dshape.deta
- wz = w * wz
- wz
+ c(w) * wz
}), list( .eshape = eshape, .nrfs = nrfs ))))
}
@@ -664,7 +694,7 @@ if (FALSE)
-setOldClass(c("SurvS4","Surv"))
+setOldClass(c("SurvS4", "Surv"))
SurvS4 <-
@@ -755,9 +785,14 @@ function (time, time2, event, type = c("right", "left", "interval",
+
+
is.SurvS4 <- function(x) inherits(x, "SurvS4")
- setIs(class1="SurvS4", class2="matrix") # Forces vglm()@y to be a matrix
+
+
+
+setIs(class1 = "SurvS4", class2 = "matrix") # Forces vglm()@y to be a matrix
@@ -790,12 +825,12 @@ function (x, ...)
-"[.SurvS4" <- function(x, i,j, drop=FALSE) {
+"[.SurvS4" <- function(x, i,j, drop = FALSE) {
if (missing(j)) {
temp <- class(x)
type <- attr(x, "type")
class(x) <- NULL
- x <- x[i, , drop=FALSE]
+ x <- x[i, , drop = FALSE]
class(x) <- temp
attr(x, "type") <- type
x
@@ -834,153 +869,4 @@ setMethod("show", "SurvS4",
-if (FALSE)
- weibullff = function(lscale = "loge", lshape = "loge",
- escale = list(), eshape = list(),
- iscale = NULL, ishape = NULL,
- nrfs = 1,
- method.init = 1, zero = 1)
-{
-
- if (mode(lscale) != "character" && mode(lscale) != "name")
- lscale = as.character(substitute(lscale))
- if (mode(lshape) != "character" && mode(lshape) != "name")
- lshape = as.character(substitute(lshape))
-
- if (length(zero) && !is.Numeric(zero, integer=TRUE, posit=TRUE))
- stop("bad input for argument 'zero'")
-
- if (!is.Numeric(method.init, allow=1, integer=TRUE, positi=TRUE) ||
- method.init > 2)
- stop("argument 'method.init' must be 1 or 2")
-
- if (!is.list(eshape)) eshape = list()
- if (!is.list(escale)) escale = list()
- if (!is.Numeric(nrfs, allow=1) || nrfs < 0 || nrfs > 1)
- stop("bad input for 'nrfs'")
-
- new("vglmff",
- blurb = c("Weibull distribution\n\n",
- "Links: ",
- namesof("scale", lscale, earg = escale), ", ",
- namesof("shape", lshape, earg = eshape), "\n",
- "Mean: scale * gamma(1 + 1/shape)\n",
- "Variance: scale^2 * (gamma(1 + 2/shape) - ",
- "gamma(1 + 1/shape)^2)"),
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- y = cbind(y)
- if (ncol(y)>1)
- stop("the response must be a vector or a 1-column matrix")
-
- if (is.SurvS4(y))
- stop("only uncensored observations are allowed; don't use SurvS4()")
-
- predictors.names =
- c(namesof("scale", .lscale, earg = .escale, tag = FALSE),
- namesof("shape", .lshape, earg = .eshape, tag = FALSE))
-
- if (!length(.ishape) || !length(.iscale)) {
- anyc = FALSE # extra$leftcensored | extra$rightcensored
- i11 = if ( .method.init == 1) anyc else FALSE # can be all data
- qvec = c(.25, .5, .75) # Arbitrary; could be made an argument
- init.shape = if (length( .ishape)) .ishape else 1
- xvec = log(-log1p(-qvec))
- fit0 = lsfit(x=xvec, y=log(quantile(y[!i11], qvec)))
- }
-
- if (!length(etastart)) {
- shape = rep(if(length(.ishape)) .ishape else 1/fit0$coef["X"],len=n)
- scale = rep(if(length(.iscale)) .iscale else
- exp(fit0$coef["Intercept"]), len=n)
- etastart =
- cbind(theta2eta(scale, .lscale, earg = .escale ),
- theta2eta(shape, .lshape, earg = .eshape ))
- }
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape,
- .iscale = iscale, .ishape = ishape,
- .method.init = method.init ) )),
- inverse = eval(substitute(function(eta, extra = NULL) {
- scale = eta2theta(eta[,1], .lshape, earg = .escale )
- shape = eta2theta(eta[,2], .lscale, earg = .eshape )
- scale * gamma(1+1/shape)
- }, list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ) )),
- last = eval(substitute(expression({
- if (regnotok <- any(shape <= 2))
- warning("MLE regularity conditions are violated",
- "(shape <= 2) at the final iteration")
-
-
- misc$link = c(scale = .lscale, shape = .lshape)
- misc$earg = list(scale = .escale, shape = .eshape)
- misc$nrfs = .nrfs
- misc$RegCondOK = !regnotok # Save this for later
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape, .nrfs = nrfs ) )),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE,eta, extra = NULL) {
- scale = eta2theta(eta[,1], .lscale, earg = .escale )
- shape = eta2theta(eta[,2], .lshape, earg = .eshape )
- ell2 = dweibull()
-
-
- ell1 = (log(shape) - log(scale) + (shape-1) *
- log(y/scale) - (y / scale)^shape)
-
- print("max(abs(ell1 - ell2))")
- print( max(abs(ell1 - ell2)) )
-
-
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * ell1)
- }, list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ) )),
- vfamily = c("weibullff"),
- deriv = eval(substitute(expression({
- scale = eta2theta(eta[,1], .lscale, earg = .escale )
- shape = eta2theta(eta[,2], .lshape, earg = .eshape )
-
- dl.dshape = 1/shape + log(y/scale) - log(y/scale) * (y/scale)^shape
- dl.dscale = (shape/scale) * (-1 + (y/scale)^shape)
-
- dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape )
- dscale.deta = dtheta.deta(scale, .lscale, earg = .escale )
-
- w * cbind( dl.dscale * dscale.deta,
- dl.dshape * dshape.deta)
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ) )),
- weight = eval(substitute(expression({
- EulerM = -digamma(1.0)
- wz = matrix(as.numeric(NA), n, dimm(M)) #3=dimm(M)
-
-
- ed2l.dshape = (6*(EulerM-1)^2 +pi^2)/(6*shape^2) # Kleiber&Kotz (2003)
- ed2l.dscale = (shape/scale)^2
- ed2l.dshapescale = (EulerM-1)/scale
- wz[,iam(1,1,M)] = ed2l.dscale * dscale.deta^2
- wz[,iam(2,2,M)] = ed2l.dshape * dshape.deta^2
- wz[,iam(1,2,M)] = ed2l.dshapescale * dscale.deta * dshape.deta
-
- wz = w * wz
- wz
- }), list( .eshape = eshape, .nrfs = nrfs ))))
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/R/family.circular.R b/R/family.circular.R
index e32284b..e92bb25 100644
--- a/R/family.circular.R
+++ b/R/family.circular.R
@@ -175,8 +175,8 @@ cardioid.control <- function(save.weight=TRUE, ...)
drho.deta = dtheta.deta(rho, link= .lrho, earg= .erho)
dl.dmu = 2 * rho * sin(y-mu) / (1 + 2 * rho * cos(y-mu))
dl.drho = 2 * cos(y-mu) / (1 + 2 * rho * cos(y-mu))
- w * cbind(dl.dmu * dmu.deta,
- dl.drho * drho.deta)
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.drho * drho.deta)
}), list( .lmu=lmu, .lrho=lrho,
.emu=emu, .erho=erho, .nsimEIM=nsimEIM ))),
weight = eval(substitute(expression({
@@ -198,7 +198,7 @@ cardioid.control <- function(save.weight=TRUE, ...)
dtheta.detas = cbind(dmu.deta, drho.deta)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list( .lmu=lmu, .lrho=lrho,
.emu=emu, .erho=erho, .nsimEIM=nsimEIM ))))
}
@@ -211,13 +211,13 @@ cardioid.control <- function(save.weight=TRUE, ...)
else list(),
escale=list(),
ilocation=NULL, iscale=NULL,
- method.init=1, zero=NULL) {
+ imethod=1, zero=NULL) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow=1, integ=TRUE, posit=TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (length(zero) && !is.Numeric(zero, integer=TRUE, posit=TRUE))
stop("bad input for argument 'zero'")
if (!is.list(escale)) escale = list()
@@ -239,7 +239,7 @@ cardioid.control <- function(save.weight=TRUE, ...)
c(namesof("location", .llocation, earg= .elocation, tag=FALSE),
namesof("scale", .lscale, earg=.escale, tag=FALSE))
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
location.init = mean(y)
rat10 = sqrt((sum(w*cos(y )))^2 + sum(w*sin(y))^2) / sum(w)
scale.init = sqrt(1 - rat10)
@@ -255,7 +255,7 @@ cardioid.control <- function(save.weight=TRUE, ...)
theta2eta(scale.init, .lscale, earg= .escale))
}
y = y %% (2*pi) # Coerce after initial values have been computed
- }), list( .method.init=method.init, .ilocation=ilocation,
+ }), list( .imethod=imethod, .ilocation=ilocation,
.escale=escale, .iscale=iscale,
.lscale=lscale, .llocation=llocation, .elocation=elocation ))),
inverse=eval(substitute(function(eta, extra=NULL) {
@@ -286,8 +286,8 @@ cardioid.control <- function(save.weight=TRUE, ...)
dlocation.deta = dtheta.deta(location, .llocation, earg= .elocation)
dl.dscale = cos(y - location) - tmp6[,2] / tmp6[,1]
dscale.deta = dtheta.deta(Scale, .lscale, earg= .escale)
- w * cbind(dl.dlocation * dlocation.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta)
}), list( .escale=escale, .lscale=lscale,
.llocation=llocation, .elocation=elocation ))),
weight=eval(substitute(expression({
@@ -296,7 +296,7 @@ cardioid.control <- function(save.weight=TRUE, ...)
wz = matrix(as.numeric(NA), nrow=n, ncol=2) # diagonal
wz[,iam(1,1,M)] = d2l.location2 * dlocation.deta^2
wz[,iam(2,2,M)] = d2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .escale=escale, .lscale=lscale,
.llocation=llocation, .elocation=elocation ))))
}
diff --git a/R/family.exp.R b/R/family.exp.R
index 107a844..94ae44f 100644
--- a/R/family.exp.R
+++ b/R/family.exp.R
@@ -337,7 +337,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
llocation = "identity", lscale = "loge",
elocation = list(), escale = list(),
ilocation = NULL, iscale = NULL,
- method.init = 1,
+ imethod = 1,
zero = 2)
{
@@ -365,9 +365,9 @@ rkoenker <- function(n, location = 0, scale = 1) {
if (!is.Numeric(percentile, posit = TRUE) ||
any(percentile >= 100))
stop("bad input for argument 'percentile'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("'imethod' must be 1 or 2")
new("vglmff",
blurb = c("Koenker distribution\n\n",
@@ -388,7 +388,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
namesof("scale", .lscale, earg = .escale, tag = FALSE))
if (!length(etastart)) {
- locat.init <- if ( .method.init == 2) {
+ locat.init <- if ( .imethod == 2) {
weighted.mean(y, w)
} else {
median(y)
@@ -403,7 +403,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
}), list( .llocat = llocat, .lscale = lscale,
.ilocat = ilocat, .iscale = iscale,
.elocat = elocat, .escale = escale,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL){
Perce <- .percentile
locat <- eta2theta(eta[, 1], link = .llocat, earg = .elocat)
@@ -422,7 +422,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
misc$earg <- list("location" = .elocat, "scale" = .escale)
misc$expected <- TRUE
misc$percentile <- .percentile
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
ncoly <- ncol(y)
for(ii in 1:length( .percentile )) {
@@ -433,7 +433,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
names(extra$percentile) = colnames(mu)
}), list( .llocat = llocat, .lscale = lscale,
.elocat = elocat, .escale = escale,
- .method.init = method.init, .percentile = percentile ))),
+ .imethod = imethod, .percentile = percentile ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
locat <- eta2theta(eta[, 1], link = .llocat, earg = .elocat)
@@ -457,8 +457,8 @@ rkoenker <- function(n, location = 0, scale = 1) {
dl.dlocat <- 3 * zedd / (Scale * (4 + zedd^2))
dl.dscale <- 3 * zedd^2 / (Scale * (4 + zedd^2)) - 1 / Scale
- w * cbind(dl.dlocat * dlocat.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta)
}), list( .llocat = llocat, .lscale = lscale,
.elocat = elocat, .escale = escale ))),
weight = eval(substitute(expression({
@@ -469,7 +469,7 @@ rkoenker <- function(n, location = 0, scale = 1) {
wz[, iam(1, 1, M = M)] <- ed2l.dlocat2 * dlocat.deta^2
wz[, iam(2, 2, M = M)] <- ed2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .llocat = llocat, .lscale = lscale,
.elocat = elocat, .escale = escale ))))
}
diff --git a/R/family.extremes.R b/R/family.extremes.R
index da4f622..fc0c620 100644
--- a/R/family.extremes.R
+++ b/R/family.extremes.R
@@ -29,7 +29,7 @@ rgev <- function(n, location = 0, scale = 1, shape = 0) {
nscase = sum(scase)
if (use.n - nscase)
ans[!scase] = location[!scase] + scale[!scase] *
- ((-log(runif(use.n-nscase)))^(-shape[!scase]) -1) / shape[!scase]
+ ((-log(runif(use.n - nscase)))^(-shape[!scase]) -1) / shape[!scase]
if (nscase)
ans[scase] = rgumbel(nscase, location[scase], scale[scase])
ans[scale <= 0] = NaN
@@ -145,7 +145,7 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
if (lshape == "elogit") list(min = -0.5, max = 0.5) else list(),
percentiles = c(95, 99),
iscale = NULL, ishape = NULL,
- method.init = 1, gshape = c(-0.45, 0.45),
+ imethod = 1, gshape = c(-0.45, 0.45),
tolshape0 = 0.001, giveWarning = TRUE,
zero = 3)
{
@@ -167,14 +167,14 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
if (!mean && length(percentiles) &&
(!is.Numeric(percentiles, posit = TRUE) || max(percentiles) >= 100))
stop("bad input for argument 'percentiles'")
- if (!is.Numeric(method.init, allow = 1, posit = TRUE, integer = TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, posit = TRUE, integer = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
if (length(ishape) && !is.Numeric(ishape))
stop("bad input for argument 'ishape'")
if (!is.Numeric(tolshape0, allow = 1, posit = TRUE) || tolshape0 > 0.1)
stop("bad input for argument 'tolshape0'")
- if (!is.Numeric(gshape, allow=2) || gshape[1] >= gshape[2])
+ if (!is.Numeric(gshape, allow = 2) || gshape[1] >= gshape[2])
stop("bad input for argument 'gshape'")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
@@ -184,7 +184,7 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
if (!is.list(eshape)) eshape = list()
new("vglmff",
- blurb = c("Generalized Extreme Value Distribution\n",
+ blurb = c("Generalized extreme value distribution\n",
"Links: ",
namesof("location", link = llocation, earg = elocation), ", ",
namesof("scale", link = lscale, earg = escale), ", ",
@@ -215,9 +215,9 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
if ( .lshape == "elogit" && length(init.xi) &&
(any(init.xi <= eshape$min | init.xi >= eshape$max)))
stop("bad input for argument 'eshape'")
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
nvector = 4:10 # Arbitrary; could be made an argument
- ynvector = quantile(y[,1], probs = 1-1/nvector)
+ ynvector = quantile(y[, 1], probs = 1-1/nvector)
objecFunction = -Inf # Actually the log-likelihood
est.sigma = !length(init.sig)
gshape = .gshape
@@ -226,14 +226,14 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
for(xi.try in temp234) {
xvec = if (abs(xi.try) < .tolshape0) log(nvector) else
(nvector^xi.try - 1) / xi.try
- fit0 = lsfit(x=xvec, y=ynvector, intercept = TRUE)
+ fit0 = lsfit(x = xvec, y=ynvector, intercept = TRUE)
sigmaTry = if (est.sigma)
rep(fit0$coef["X"], len = nrow(y)) else init.sig
muTry = rep(fit0$coef["Intercept"], len = nrow(y))
llTry = egev(giveWarning=
- FALSE)@loglikelihood(mu = NULL, y=y[,1], w=w,
+ FALSE)@loglikelihood(mu = NULL, y=y[, 1], w=w,
residuals = FALSE,
- eta=cbind(theta2eta(muTry, .llocation,earg = .elocation),
+ eta = cbind(theta2eta(muTry, .llocation,earg = .elocation),
theta2eta(sigmaTry, .lscale,earg = .escale),
theta2eta(xi.try, link= .lshape, earg = .eshape)))
if (llTry >= objecFunction) {
@@ -249,9 +249,9 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
} else {
init.xi = rep(0.05, len = nrow(y))
if (!length(init.sig))
- init.sig = rep(sqrt(6 * var(y[,1]))/pi, len = nrow(y))
+ init.sig = rep(sqrt(6 * var(y[, 1]))/pi, len = nrow(y))
EulerM = -digamma(1)
- init.mu = rep(median(y[,1]) - EulerM*init.sig, len = nrow(y))
+ init.mu = rep(median(y[, 1]) - EulerM*init.sig, len = nrow(y))
}
bad = ((1 + init.xi*(y-init.mu)/init.sig) <= 0)
@@ -261,9 +261,10 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
init.xi[bad] = ifelse(y[bad] > init.mu[bad], 0.1, -0.1)
}
- etastart = cbind(theta2eta(init.mu, .llocation, earg = .elocation),
- theta2eta(init.sig, .lscale, earg = .escale),
- theta2eta(init.xi, .lshape, earg = .eshape))
+ etastart =
+ cbind(theta2eta(init.mu, .llocation, earg = .elocation),
+ theta2eta(init.sig, .lscale, earg = .escale),
+ theta2eta(init.xi, .lshape, earg = .eshape))
}
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape,
@@ -271,17 +272,17 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
.gshape = gshape,
.percentiles = percentiles,
.tolshape0 = tolshape0,
- .method.init = method.init, .giveWarning= giveWarning ))),
+ .imethod = imethod, .giveWarning= giveWarning ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale)
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale)
xi = eta2theta(eta[,3], .lshape, earg = .eshape)
is.zero = (abs(xi) < .tolshape0)
cent = extra$percentiles
- lp = length(cent)
- fv = matrix(as.numeric(NA), nrow(eta), lp)
- if (lp) {
- for(ii in 1:lp) {
+ LP = length(cent)
+ fv = matrix(as.numeric(NA), nrow(eta), LP)
+ if (LP) {
+ for(ii in 1:LP) {
yp = -log(cent[ii]/100)
fv[!is.zero,ii] = loc[!is.zero] - sigma[!is.zero] *
(1 - yp^(-xi[!is.zero])) / xi[!is.zero]
@@ -291,19 +292,24 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
paste(as.character(cent), "%", sep = ""))
} else {
EulerM = -digamma(1)
- fv = loc + sigma * EulerM # When xi=0, is Gumbel
+ fv = loc + sigma * EulerM # When xi = 0, is Gumbel
fv[!is.zero] = loc[!is.zero] + sigma[!is.zero] *
(gamma(1-xi[!is.zero])-1) / xi[!is.zero]
fv[xi >= 1] = NA # Mean exists only if xi < 1.
}
fv
- }, list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
+ }, list( .llocation = llocation, .lscale = lscale,
+ .lshape = lshape,
.eshape = eshape, .tolshape0 = tolshape0 ))),
last = eval(substitute(expression({
- misc$links = c(location = .llocation, scale = .lscale, shape =.lshape)
+ misc$links = c(location = .llocation,
+ scale = .lscale,
+ shape = .lshape)
misc$true.mu = !length( .percentiles) # @fitted is not a true mu
misc$percentiles = .percentiles
- misc$earg = list(location= .elocation, scale= .escale, shape= .eshape)
+ misc$earg = list(location = .elocation,
+ scale = .escale,
+ shape = .eshape)
misc$expected = TRUE
misc$tolshape0 = .tolshape0
if (ncol(y) == 1)
@@ -315,8 +321,8 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
.tolshape0 = tolshape0, .percentiles = percentiles ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals = FALSE,eta,extra = NULL) {
- mmu = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale)
+ mmu = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale)
xi = eta2theta(eta[,3], .lshape, earg = .eshape)
is.zero = (abs(xi) < .tolshape0)
zedd = (y-mmu) / sigma
@@ -326,7 +332,8 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
A1 = A[cbind(ii, r.vec)]
mytolerance = 0 # .Machine$double.eps
if (any(bad <- (A1 <= mytolerance), na.rm = TRUE)) {
- cat("There are",sum(bad),"range violations in @loglikelihood\n")
+ cat("There are", sum(bad),
+ "range violations in @loglikelihood\n")
flush.console()
}
igev = !is.zero & !bad
@@ -351,8 +358,8 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
vfamily = c("gev", "vextremes"),
deriv = eval(substitute(expression({
r.vec = rowSums(cbind(!is.na(y)))
- mmu = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale)
+ mmu = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale)
xi = eta2theta(eta[,3], .lshape, earg = .eshape)
is.zero = (abs(xi) < .tolshape0)
ii = 1:nrow(eta)
@@ -364,10 +371,12 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
pow = 1 + 1/xi
A1 = A[cbind(ii, r.vec)]
- AAr1 = dA.dmu/(xi * A1^pow) - pow * rowSums(cbind(dA.dmu/A), na.rm = TRUE)
+ AAr1 = dA.dmu/(xi * A1^pow) -
+ pow * rowSums(cbind(dA.dmu/A), na.rm = TRUE)
AAr2 = dA.dsigma[cbind(ii,r.vec)] / (xi * A1^pow) -
pow * rowSums(cbind(dA.dsigma/A), na.rm = TRUE)
- AAr3 = 1/(xi * A1^pow) - pow * rowSums(cbind(dA.dsigma/A), na.rm = TRUE)
+ AAr3 = 1/(xi * A1^pow) -
+ pow * rowSums(cbind(dA.dsigma/A), na.rm = TRUE)
dl.dmu = AAr1
dl.dsi = AAr2 - r.vec/sigma
dl.dxi = rowSums(cbind(log(A)), na.rm = TRUE)/xi^2 -
@@ -386,7 +395,9 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
dmu.deta = dtheta.deta(mmu, .llocation, earg = .elocation)
dsi.deta = dtheta.deta(sigma, .lscale, earg = .escale)
dxi.deta = dtheta.deta(xi, .lshape, earg = .eshape)
- w * cbind(dl.dmu * dmu.deta, dl.dsi * dsi.deta, dl.dxi * dxi.deta)
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsi * dsi.deta,
+ dl.dxi * dxi.deta)
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape,
.tolshape0 = tolshape0 ))),
@@ -395,7 +406,8 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
dd = digamma(r.vec-kay+1)
ddd = digamma(r.vec+1) # Unnecessarily evaluated at each iteration
temp13 = -kay * dd + (kay^2 - kay + 1) / (1-kay)
- temp33 = 1 - 2 * kay * ddd + kay^2 * (1 + trigamma(r.vec+1) + ddd^2)
+ temp33 = 1 - 2 * kay * ddd +
+ kay^2 * (1 + trigamma(r.vec+1) + ddd^2)
temp23 = -kay * dd + (1+(1-kay)^2) / (1-kay)
GR.gev = function(j, ri, kay) gamma(ri - j*kay + 1) / gamma(ri)
tmp2 = (1-kay)^2 * GR.gev(2, r.vec, kay) # Latter is GR2
@@ -405,41 +417,44 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
k2 = k1 * kay
k3 = k2 * kay # kay^3 * (1-2*kay)
wz = matrix(as.numeric(NA), n, 6)
- wz[,iam(1,1,M)] = tmp2 / (sigma^2 * k0)
- wz[,iam(1,2,M)] = (tmp2 - tmp1) / (sigma^2 * k1)
- wz[,iam(1,3,M)] = (tmp1 * temp13 - tmp2) / (sigma * k2)
- wz[,iam(2,2,M)] = (r.vec*k0 - 2*tmp1 + tmp2) / (sigma^2 * k2)
- wz[,iam(2,3,M)] = (r.vec*k1*ddd + tmp1 *
+ wz[, iam(1, 1, M)] = tmp2 / (sigma^2 * k0)
+ wz[, iam(1, 2, M)] = (tmp2 - tmp1) / (sigma^2 * k1)
+ wz[, iam(1, 3, M)] = (tmp1 * temp13 - tmp2) / (sigma * k2)
+ wz[, iam(2, 2, M)] = (r.vec*k0 - 2*tmp1 + tmp2) / (sigma^2 * k2)
+ wz[, iam(2, 3, M)] = (r.vec*k1*ddd + tmp1 *
temp23 - tmp2 - r.vec*k0) / (sigma * k3)
- wz[,iam(3,3,M)] = (2*tmp1*(-temp13) + tmp2 + r.vec*k0*temp33)/(k3*kay)
+ wz[, iam(3, 3, M)] = (2*tmp1*(-temp13) + tmp2 +
+ r.vec*k0*temp33)/(k3*kay)
if (any(is.zero)) {
if (ncol(y) > 1)
- stop("cannot handle xi==0 with a multivariate response")
+ stop("cannot handle xi == 0 with a multivariate response")
EulerM = -digamma(1)
- wz[is.zero,iam(2,2,M)] = (pi^2/6 + (1-EulerM)^2) / sigma^2
- wz[is.zero,iam(3,3,M)] = 2.4236
- wz[is.zero,iam(1,2,M)] = (digamma(2) + 2*(EulerM-1)) / sigma^2
- wz[is.zero,iam(1,3,M)]= -(trigamma(1)/2 + digamma(1)*
+ wz[is.zero, iam(2, 2, M)] = (pi^2/6 + (1-EulerM)^2) / sigma^2
+ wz[is.zero, iam(3, 3, M)] = 2.4236
+ wz[is.zero, iam(1, 2, M)] = (digamma(2) +
+ 2*(EulerM-1)) / sigma^2
+ wz[is.zero, iam(1, 3, M)]= -(trigamma(1)/2 + digamma(1)*
(digamma(1)/2+1))/sigma
- wz[is.zero,iam(2,3,M)] = (-dgammadx(2,3)/6 + dgammadx(1,1) +
- 2*dgammadx(1,2) + 2*dgammadx(1,3)/3) / sigma
+ wz[is.zero, iam(2, 3, M)] = (-dgammadx(2,3)/6 + dgammadx(1, 1) +
+ 2*dgammadx(1, 2) +
+ 2*dgammadx(1,3)/3) / sigma
if (FALSE ) {
- wz[,iam(1,2,M)] = 2 * r.vec / sigma^2
- wz[,iam(2,2,M)] = -4 * r.vec * digamma(r.vec+1) + 2 * r.vec +
+ wz[, iam(1, 2, M)] = 2 * r.vec / sigma^2
+ wz[, iam(2, 2, M)] = -4 * r.vec * digamma(r.vec+1) + 2 * r.vec +
(4 * dgammadx(r.vec+1, der=1) -
- 3 * dgammadx(r.vec+1, der=2)) / gamma(r.vec) # Not checked
+ 3 * dgammadx(r.vec+1, der = 2)) / gamma(r.vec) # Not checked
}
}
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] * dmu.deta^2
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] * dsi.deta^2
- wz[,iam(3,3,M)] = wz[,iam(3,3,M)] * dxi.deta^2
- wz[,iam(1,2,M)] = wz[,iam(1,2,M)] * dmu.deta * dsi.deta
- wz[,iam(1,3,M)] = wz[,iam(1,3,M)] * dmu.deta * (-dxi.deta)
- wz[,iam(2,3,M)] = wz[,iam(2,3,M)] * dsi.deta * (-dxi.deta)
- w * wz
+ wz[, iam(1, 1, M)] = wz[, iam(1, 1, M)] * dmu.deta^2
+ wz[, iam(2, 2, M)] = wz[, iam(2, 2, M)] * dsi.deta^2
+ wz[, iam(3, 3, M)] = wz[, iam(3,3, M)] * dxi.deta^2
+ wz[, iam(1, 2, M)] = wz[, iam(1, 2, M)] * dmu.deta * dsi.deta
+ wz[, iam(1, 3, M)] = wz[, iam(1,3, M)] * dmu.deta * (-dxi.deta)
+ wz[, iam(2, 3, M)] = wz[, iam(2,3, M)] * dsi.deta * (-dxi.deta)
+ c(w) * wz
}), list( .eshape = eshape ))))
}
@@ -447,21 +462,21 @@ qgev <- function(p, location = 0, scale = 1, shape = 0) {
dgammadx <- function(x, deriv.arg=1) {
- if (deriv.arg==0) {
+ if (deriv.arg == 0) {
gamma(x)
} else if (deriv.arg == 1) {
digamma(x) * gamma(x)
} else if (deriv.arg == 2) {
gamma(x) * (trigamma(x) + digamma(x)^2)
} else if (deriv.arg == 3) {
- gamma(x) * (psigamma(x, der=2) + 2 * digamma(x) * trigamma(x)) +
+ gamma(x) * (psigamma(x, der = 2) + 2 * digamma(x) * trigamma(x)) +
dgammadx(x, der=1) * (trigamma(x) + digamma(x)^2)
} else if (deriv.arg == 4) {
- dgammadx(x, der=2) * (trigamma(x) + digamma(x)^2) +
- 2 * dgammadx(x, der=1) * (psigamma(x, der=2) + 2*digamma(x) * trigamma(x)) +
+ dgammadx(x, der = 2) * (trigamma(x) + digamma(x)^2) +
+ 2 * dgammadx(x, der=1) * (psigamma(x, der = 2) + 2*digamma(x) * trigamma(x)) +
gamma(x) * (psigamma(x, der=3) + 2*trigamma(x)^2 +
- 2 * digamma(x) * psigamma(x, der=2))
- } else stop("cannot handle deriv>4")
+ 2 * digamma(x) * psigamma(x, der = 2))
+ } else stop("cannot handle deriv > 4")
}
@@ -476,7 +491,7 @@ dgammadx <- function(x, deriv.arg=1) {
if (lshape == "elogit") list(min = -0.5, max = 0.5) else list(),
percentiles = c(95, 99),
iscale = NULL, ishape = NULL,
- method.init = 1, gshape = c(-0.45, 0.45),
+ imethod = 1, gshape = c(-0.45, 0.45),
tolshape0 = 0.001, giveWarning = TRUE,
zero = 3)
{
@@ -490,14 +505,14 @@ dgammadx <- function(x, deriv.arg=1) {
llocation <- as.character(substitute(llocation))
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape <- as.character(substitute(lshape))
- if (!is.Numeric(gshape, allow=2) || gshape[1] >= gshape[2])
+ if (!is.Numeric(gshape, allow = 2) || gshape[1] >= gshape[2])
stop("bad input for argument 'gshape'")
if (length(percentiles) &&
(!is.Numeric(percentiles, posit = TRUE) || max(percentiles) >= 100))
stop("bad input for argument 'percentiles'")
- if (!is.Numeric(method.init, allow = 1, posit = TRUE, integer = TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, posit = TRUE, integer = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
if (length(ishape) && !is.Numeric(ishape))
stop("bad input for argument 'ishape'")
if (!is.Numeric(tolshape0, allow = 1, posit = TRUE) || tolshape0 > 0.1)
@@ -509,7 +524,7 @@ dgammadx <- function(x, deriv.arg=1) {
if (!is.list(eshape)) eshape = list()
new("vglmff",
- blurb = c("Generalized Extreme Value Distribution\n",
+ blurb = c("Generalized extreme value distribution\n",
"Links: ",
namesof("location", link = llocation, earg = elocation), ", ",
namesof("scale", link = lscale, earg = escale), ", ",
@@ -531,7 +546,7 @@ dgammadx <- function(x, deriv.arg=1) {
if ( .lshape == "elogit" && length(init.xi) &&
(any(init.xi <= eshape$min | init.xi >= eshape$max)))
stop("bad input for argument 'eshape'")
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
nvector = 4:10 # Arbitrary; could be made an argument
ynvector = quantile(y, probs = 1-1/nvector)
objecFunction = -Inf # Actually the log-likelihood
@@ -542,7 +557,7 @@ dgammadx <- function(x, deriv.arg=1) {
for(xi.try in temp234) {
xvec = if (abs(xi.try) < .tolshape0) log(nvector) else
(nvector^xi.try - 1) / xi.try
- fit0 = lsfit(x=xvec, y=ynvector, intercept = TRUE)
+ fit0 = lsfit(x = xvec, y=ynvector, intercept = TRUE)
if (est.sigma) {
sigmaTry = rep(fit0$coef["X"], len = length(y))
} else {
@@ -552,7 +567,7 @@ dgammadx <- function(x, deriv.arg=1) {
llTry = egev(giveWarning=
FALSE)@loglikelihood(mu = NULL, y=y, w=w,
residuals = FALSE,
- eta=cbind(theta2eta(muTry, .llocation, earg = .elocation),
+ eta = cbind(theta2eta(muTry, .llocation, earg = .elocation),
theta2eta(sigmaTry, .lscale, earg = .escale),
theta2eta(xi.try, .lshape, earg = .eshape)))
if (llTry >= objecFunction) {
@@ -583,26 +598,27 @@ dgammadx <- function(x, deriv.arg=1) {
extra$percentiles = .percentiles
- etastart = cbind(theta2eta(init.mu, .llocation, earg = .elocation),
- theta2eta(init.sig, .lscale, earg = .escale),
- theta2eta(init.xi, .lshape, earg = .eshape))
+ etastart =
+ cbind(theta2eta(init.mu, .llocation, earg = .elocation),
+ theta2eta(init.sig, .lscale, earg = .escale),
+ theta2eta(init.xi, .lshape, earg = .eshape))
}
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.percentiles = percentiles, .tolshape0 = tolshape0,
.elocation = elocation, .escale = escale, .eshape = eshape,
- .method.init = method.init,
+ .imethod = imethod,
.giveWarning= giveWarning,
.iscale = iscale, .ishape = ishape, .gshape = gshape ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- loc <- eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma <- eta2theta(eta[,2], .lscale, earg = .escale)
+ loc <- eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma <- eta2theta(eta[, 2], .lscale, earg = .escale)
xi <- eta2theta(eta[,3], .lshape, earg = .eshape)
is.zero <- (abs(xi) < .tolshape0)
cent = extra$percentiles
- lp <- length(cent)
- fv <- matrix(as.numeric(NA), nrow(eta), lp)
- if (lp) {
- for(ii in 1:lp) {
+ LP <- length(cent)
+ fv <- matrix(as.numeric(NA), nrow(eta), LP)
+ if (LP) {
+ for(ii in 1:LP) {
yp = -log(cent[ii]/100)
fv[!is.zero,ii] = loc[!is.zero] - sigma[!is.zero] *
(1 - yp^(-xi[!is.zero])) / xi[!is.zero]
@@ -612,7 +628,7 @@ dgammadx <- function(x, deriv.arg=1) {
paste(as.character(cent), "%", sep = ""))
} else {
EulerM = -digamma(1)
- fv = loc + sigma * EulerM # When xi=0, is Gumbel
+ fv = loc + sigma * EulerM # When xi = 0, is Gumbel
fv[!is.zero] = loc[!is.zero] + sigma[!is.zero] *
(gamma(1-xi[!is.zero])-1) / xi[!is.zero]
fv[xi >= 1] = NA # Mean exists only if xi < 1.
@@ -629,14 +645,14 @@ dgammadx <- function(x, deriv.arg=1) {
misc$tolshape0 = .tolshape0
misc$expected = TRUE
if (any(xi < -0.5))
- warning("some values of the shape parameter are less than -0.5")
+ warning("some values of the shape parameter are less than -0.5")
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape,
.tolshape0 = tolshape0, .percentiles = percentiles ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- mmu <- eta2theta(eta[,1], .llocation, earg = .elocation )
- sigma <- eta2theta(eta[,2], .lscale, earg = .escale )
+ mmu <- eta2theta(eta[, 1], .llocation, earg = .elocation )
+ sigma <- eta2theta(eta[, 2], .lscale, earg = .escale )
xi <- eta2theta(eta[,3], .lshape, earg = .eshape )
if (residuals) stop("loglikelihood residuals not ",
@@ -651,8 +667,8 @@ dgammadx <- function(x, deriv.arg=1) {
.giveWarning= giveWarning, .tolshape0 = tolshape0 ))),
vfamily = c("egev", "vextremes"),
deriv = eval(substitute(expression({
- mmu = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale )
+ mmu = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale )
xi = eta2theta(eta[,3], .lshape, earg = .eshape)
is.zero <- (abs(xi) < .tolshape0)
zedd = (y-mmu) / sigma
@@ -661,8 +677,9 @@ dgammadx <- function(x, deriv.arg=1) {
dA.dmu = -xi / sigma
dA.dsigma = -xi * zedd / sigma
pow = 1 + 1/xi
- if (any(bad <- A<=0, na.rm = TRUE)) stop(sum(bad, na.rm = TRUE),
- " observations violating boundary constraints in '@deriv'")
+ if (any(bad <- A <= 0, na.rm = TRUE))
+ stop(sum(bad, na.rm = TRUE),
+ " observations violating boundary constraints in '@deriv'")
AA = 1/(xi*A^pow)- pow/A
dl.dmu = dA.dmu * AA
dl.dsi = dA.dsigma * AA - 1/sigma
@@ -677,45 +694,48 @@ dgammadx <- function(x, deriv.arg=1) {
dmu.deta = dtheta.deta(mmu, .llocation, earg = .elocation)
dsi.deta = dtheta.deta(sigma, .lscale, earg = .escale )
dxi.deta = dtheta.deta(xi, .lshape, earg = .eshape)
- w * cbind(dl.dmu * dmu.deta, dl.dsi * dsi.deta, dl.dxi*dxi.deta)
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsi * dsi.deta,
+ dl.dxi * dxi.deta)
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape,
.tolshape0 = tolshape0 ))),
weight = eval(substitute(expression({
bad <- A <= 0
- if (any(bad, na.rm = TRUE)) stop(sum(bad, na.rm = TRUE),
- " observations violating boundary constraints in '@weight'")
+ if (any(bad, na.rm = TRUE))
+ stop(sum(bad, na.rm = TRUE),
+ " observations violating boundary constraints in '@weight'")
kay = -xi # for the formulae
kay[abs(kay-0.5) < .tolshape0] = 0.501
temp100 = gamma(2-kay)
pp = (1-kay)^2 * gamma(1-2*kay) # gamma(0) is undefined so kay != 0.5
qq = temp100 * (digamma(1-kay) - (1-kay)/kay)
wz = matrix(as.numeric(NA), n, 6)
- wz[,iam(1,1,M)] = pp / sigma^2
- wz[,iam(2,2,M)] = (1-2*temp100 + pp) / (sigma * kay)^2
+ wz[, iam(1, 1, M)] = pp / sigma^2
+ wz[, iam(2, 2, M)] = (1-2*temp100 + pp) / (sigma * kay)^2
EulerM = -digamma(1)
- wz[,iam(3,3,M)] = (pi^2 / 6 + (1-EulerM-1/kay)^2 +
+ wz[, iam(3,3, M)] = (pi^2 / 6 + (1-EulerM-1/kay)^2 +
(2*qq + pp/kay)/kay) / kay^2
- wz[,iam(1,2,M)] = (pp - temp100) / (sigma^2 * kay)
- wz[,iam(1,3,M)] = -(qq + pp/kay) / (sigma * kay)
- wz[,iam(2,3,M)] = (1-EulerM - (1-temp100)/kay - qq -
+ wz[, iam(1, 2, M)] = (pp - temp100) / (sigma^2 * kay)
+ wz[, iam(1,3, M)] = -(qq + pp/kay) / (sigma * kay)
+ wz[, iam(2,3, M)] = (1-EulerM - (1-temp100)/kay - qq -
pp/kay) / (sigma * kay^2)
if (any(is.zero)) {
- wz[is.zero,iam(2,2,M)] = (pi^2/6 + (1-EulerM)^2) / sigma^2
- wz[is.zero,iam(3,3,M)] <- 2.4236
- wz[is.zero,iam(1,2,M)] <- (digamma(2) + 2*(EulerM-1)) / sigma^2
- wz[is.zero,iam(1,3,M)] <- -(trigamma(1)/2 + digamma(1)*
+ wz[is.zero, iam(2, 2, M)] = (pi^2/6 + (1-EulerM)^2) / sigma^2
+ wz[is.zero, iam(3,3, M)] <- 2.4236
+ wz[is.zero, iam(1, 2, M)] <- (digamma(2) + 2*(EulerM-1)) / sigma^2
+ wz[is.zero, iam(1,3, M)] <- -(trigamma(1)/2 + digamma(1)*
(digamma(1)/2+1))/sigma
- wz[is.zero,iam(2,3,M)] <- (-dgammadx(2,3)/6 + dgammadx(1,1) +
- 2*dgammadx(1,2) + 2*dgammadx(1,3)/3)/sigma
+ wz[is.zero, iam(2,3, M)] <- (-dgammadx(2,3)/6 + dgammadx(1, 1) +
+ 2*dgammadx(1, 2) + 2*dgammadx(1,3)/3)/sigma
}
- wz[,iam(1,1,M)] <- wz[,iam(1,1,M)] * dmu.deta^2
- wz[,iam(2,2,M)] <- wz[,iam(2,2,M)] * dsi.deta^2
- wz[,iam(3,3,M)] <- wz[,iam(3,3,M)] * dxi.deta^2
- wz[,iam(1,2,M)] <- wz[,iam(1,2,M)] * dmu.deta * dsi.deta
- wz[,iam(1,3,M)] <- wz[,iam(1,3,M)] * dmu.deta * (-dxi.deta)
- wz[,iam(2,3,M)] <- wz[,iam(2,3,M)] * dsi.deta * (-dxi.deta)
- w * wz
+ wz[, iam(1, 1, M)] <- wz[, iam(1, 1, M)] * dmu.deta^2
+ wz[, iam(2, 2, M)] <- wz[, iam(2, 2, M)] * dsi.deta^2
+ wz[, iam(3,3, M)] <- wz[, iam(3,3, M)] * dxi.deta^2
+ wz[, iam(1, 2, M)] <- wz[, iam(1, 2, M)] * dmu.deta * dsi.deta
+ wz[, iam(1,3, M)] <- wz[, iam(1,3, M)] * dmu.deta * (-dxi.deta)
+ wz[, iam(2,3, M)] <- wz[, iam(2,3, M)] * dsi.deta * (-dxi.deta)
+ c(w) * wz
}), list( .eshape = eshape, .tolshape0 = tolshape0 ))))
}
@@ -765,7 +785,7 @@ pgumbel <- function(q, location = 0, scale = 1) {
elocation = list(),
escale = list(),
iscale = NULL,
- R=NA, percentiles=c(95,99),
+ R=NA, percentiles = c(95,99),
mpv = FALSE, zero = NULL)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
@@ -785,7 +805,7 @@ pgumbel <- function(q, location = 0, scale = 1) {
if (!is.list(escale)) escale = list()
new("vglmff",
- blurb = c("Gumbel Distribution for Extreme Value Regression\n",
+ blurb = c("Gumbel distribution for extreme value regression\n",
"Links: ",
namesof("location", link = llocation, earg = elocation), ", ",
namesof("scale", link = lscale, earg = escale )),
@@ -829,17 +849,18 @@ pgumbel <- function(q, location = 0, scale = 1) {
.elocation = elocation, .escale = escale,
.R=R, .mpv=mpv, .percentiles = percentiles ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale ) # sigma
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale ) # sigma
Percentiles = extra$percentiles
- lp = length(Percentiles) # may be 0
- if (lp > 0) {
+ LP = length(Percentiles) # may be 0
+ if (LP > 0) {
mpv = extra$mpv
- mu = matrix(as.numeric(NA), nrow(eta), lp + mpv) # lp could be 0
+ mu = matrix(as.numeric(NA), nrow(eta), LP + mpv) # LP may be 0
Rvec = extra$R
- for(ii in 1:lp) {
- ci = if (is.Numeric(Rvec)) Rvec * (1 - Percentiles[ii] / 100) else
- -log(Percentiles[ii] / 100)
+ for(ii in 1:LP) {
+ ci = if (is.Numeric(Rvec))
+ Rvec * (1 - Percentiles[ii] / 100) else
+ -log(Percentiles[ii] / 100)
mu[,ii] = loc - sigma * log(ci)
}
if (mpv)
@@ -868,8 +889,8 @@ pgumbel <- function(q, location = 0, scale = 1) {
vfamily = c("gumbel", "vextremes"),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale )
r.vec = rowSums(cbind(!is.na(y)))
yiri = y[cbind(1:nrow(y),r.vec)]
ans = -r.vec * log(sigma) - exp( -(yiri-loc)/sigma )
@@ -887,8 +908,8 @@ pgumbel <- function(q, location = 0, scale = 1) {
}, list( .llocation = llocation, .lscale = lscale,
.elocation = elocation, .escale = escale ))),
deriv = eval(substitute(expression({
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale )
r.vec = rowSums(cbind(!is.na(y)))
yiri = y[cbind(1:nrow(y),r.vec)]
yi.bar = rowMeans(y, na.rm = TRUE)
@@ -899,7 +920,8 @@ pgumbel <- function(q, location = 0, scale = 1) {
dl.dloc = (r.vec - term2) / sigma
dl.dsigma = (rowSums((y - loc) / sigma, na.rm = TRUE) - r.vec -
temp2 * term2) / sigma
- w * cbind(dl.dloc * dloc.deta, dl.dsigma * dsigma.deta)
+ c(w) * cbind(dl.dloc * dloc.deta,
+ dl.dsigma * dsigma.deta)
}), list( .llocation = llocation, .lscale = lscale,
.elocation = elocation, .escale = escale ))),
weight = eval(substitute(expression({
@@ -909,14 +931,14 @@ pgumbel <- function(q, location = 0, scale = 1) {
temp5[col(temp5) > r.vec] = 0
temp5 = temp5 %*% rep(1, ncol(temp5))
wz = matrix(as.numeric(NA), n, dimm(M = 2)) # 3=dimm(M = 2)
- wz[,iam(1,1,M)] = r.vec / sigma^2
- wz[,iam(2,1,M)] = -(1 + r.vec * temp6) / sigma^2
- wz[,iam(2,2,M)] = (2*(r.vec+1)*temp6 + r.vec*(trigamma(r.vec) +
+ wz[, iam(1, 1, M)] = r.vec / sigma^2
+ wz[, iam(2, 1, M)] = -(1 + r.vec * temp6) / sigma^2
+ wz[, iam(2, 2, M)] = (2*(r.vec+1)*temp6 + r.vec*(trigamma(r.vec) +
temp6^2) + 2 - r.vec - 2*temp5) / sigma^2
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] * dloc.deta^2
- wz[,iam(2,1,M)] = wz[,iam(2,1,M)] * dsigma.deta * dloc.deta
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] * dsigma.deta^2
- w * wz
+ wz[, iam(1, 1, M)] = wz[, iam(1, 1, M)] * dloc.deta^2
+ wz[, iam(2, 1, M)] = wz[, iam(2, 1, M)] * dsigma.deta * dloc.deta
+ wz[, iam(2, 2, M)] = wz[, iam(2, 2, M)] * dsigma.deta^2
+ c(w) * wz
}), list( .lscale = lscale ))))
}
@@ -927,8 +949,10 @@ rgpd <- function(n, location = 0, scale = 1, shape = 0) {
if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
stop("bad input for argument 'n'") else n
- if (!is.Numeric(location)) stop("bad input for argument 'location'")
- if (!is.Numeric(shape)) stop("bad input for argument 'shape'")
+ if (!is.Numeric(location))
+ stop("bad input for argument 'location'")
+ if (!is.Numeric(shape))
+ stop("bad input for argument 'shape'")
ans = numeric(use.n)
shape = rep(shape, len = use.n); location = rep(location, len = use.n);
scale = rep(scale, len = use.n)
@@ -936,7 +960,7 @@ rgpd <- function(n, location = 0, scale = 1, shape = 0) {
nscase = sum(scase)
if (use.n - nscase)
ans[!scase] = location[!scase] + scale[!scase] *
- ((runif(use.n-nscase))^(-shape[!scase])-1) / shape[!scase]
+ ((runif(use.n - nscase))^(-shape[!scase])-1) / shape[!scase]
if (nscase)
ans[scase] = location[scase] - scale[scase] * log(runif(nscase))
ans[scale <= 0] = NaN
@@ -974,20 +998,21 @@ dgpd <- function(x, location = 0, scale = 1, shape = 0, log = FALSE,
logdensity[outofbounds] = oobounds.log
no.oob = sum(outofbounds)
if (giveWarning)
- warning(no.oob, " observation",
- ifelse(no.oob > 1, "s are", " is"), " out of bounds")
+ warning(no.oob, " observation",
+ ifelse(no.oob > 1, "s are", " is"), " out of bounds")
}
}
if (nscase) {
xok = scase & (x > location)
- logdensity[xok] = -(x[xok]-location[xok])/scale[xok] - log(scale[xok])
+ logdensity[xok] = -(x[xok] - location[xok]) / scale[xok] -
+ log(scale[xok])
outofbounds = scase & (x <= location)
if (any(outofbounds)) {
logdensity[outofbounds] = oobounds.log
no.oob = sum(outofbounds)
if (giveWarning)
- warning(no.oob, " observation",
- ifelse(no.oob > 1, "s are", " is"), " out of bounds")
+ warning(no.oob, " observation",
+ ifelse(no.oob > 1, "s are", " is"), " out of bounds")
}
}
@@ -998,23 +1023,28 @@ dgpd <- function(x, location = 0, scale = 1, shape = 0, log = FALSE,
pgpd <- function(q, location = 0, scale = 1, shape = 0) {
- if (!is.Numeric(q)) stop("bad input for argument 'q'")
- if (!is.Numeric(location)) stop("bad input for argument 'location'")
- if (!is.Numeric(shape)) stop("bad input for argument 'shape'")
+ if (!is.Numeric(q))
+ stop("bad input for argument 'q'")
+ if (!is.Numeric(location))
+ stop("bad input for argument 'location'")
+ if (!is.Numeric(shape))
+ stop("bad input for argument 'shape'")
use.n = max(length(q), length(location), length(scale), length(shape))
ans = numeric(use.n)
- shape = rep(shape, len = use.n); location = rep(location, len = use.n);
- scale = rep(scale, len = use.n);
- q = rep(q-location, len = use.n) # Note the centering, careful with dgumbel()!
+ shape = rep(shape, len = use.n);
+ location = rep(location, len = use.n);
+ scale = rep(scale, len = use.n);
+ q = rep(q-location, len = use.n)
+
scase = abs(shape) < sqrt(.Machine$double.eps)
nscase = sum(scase)
if (use.n - nscase) {
- q[q<0] = 0
- ans = 1 - pmax(0, (1+shape*q/scale))^(-1/shape)
+ q[q < 0] = 0
+ ans = 1 - pmax(0, (1 + shape*q/scale))^(-1/shape)
}
if (nscase) {
- pos = q>=0
+ pos = q >= 0
ind9 = pos & scase
ans[ind9] = -expm1(-q[ind9]/scale[ind9])
ind9 = !pos & scase
@@ -1055,41 +1085,45 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
- gpd <- function(threshold=0,
+ gpd <- function(threshold = 0,
lscale = "loge",
lshape = "logoff",
escale = list(),
- eshape = if (lshape == "logoff") list(offset=0.5) else
- if (lshape == "elogit") list(min=-0.5, max=0.5) else NULL,
- percentiles=c(90,95),
+ eshape = if (lshape == "logoff") list(offset = 0.5) else
+ if (lshape == "elogit") list(min = -0.5, max = 0.5) else NULL,
+ percentiles = c(90,95),
iscale = NULL,
ishape = NULL,
tolshape0 = 0.001, giveWarning = TRUE,
- method.init = 1,
- zero=2) {
+ imethod = 1,
+ zero = 2) {
if (!is.logical(giveWarning) || length(giveWarning) != 1)
stop("bad input for argument 'giveWarning'")
if (!is.Numeric(threshold))
stop("bad input for argument 'threshold'")
- if (!is.Numeric(method.init, allow = 1, posit = TRUE, integer = TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, posit = TRUE, integer = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
+
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
+
if (length(percentiles) &&
- (!is.Numeric(percentiles, posit = TRUE) || max(percentiles) >= 100))
+ (!is.Numeric(percentiles, posit = TRUE) ||
+ max(percentiles) >= 100))
stop("bad input for argument 'percentiles'")
if (!is.Numeric(tolshape0, allow = 1, posit = TRUE) || tolshape0 > 0.1)
stop("bad input for argument 'tolshape0'")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
+
if (!is.list(escale)) escale = list()
if (!is.list(eshape)) eshape = list()
new("vglmff",
- blurb = c("Generalized Pareto Distribution\n",
+ blurb = c("Generalized Pareto distribution\n",
"Links: ",
namesof("scale", link = lscale, earg = escale ), ", ",
namesof("shape", link = lshape, earg = eshape)),
@@ -1112,11 +1146,11 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
meany = mean(ystar)
vary = var(ystar)
init.xi = if (length( .ishape)) .ishape else {
- if ( .method.init == 1) -0.5*(meany^2/vary - 1) else
+ if ( .imethod == 1) -0.5*(meany^2/vary - 1) else
0.5 * (1 - median(ystar)^2 / vary)
}
init.sig = if (length( .iscale)) .iscale else {
- if (.method.init == 1) 0.5*meany*(meany^2/vary + 1) else
+ if (.imethod == 1) 0.5*meany*(meany^2/vary + 1) else
abs(1-init.xi) * median(ystar)
}
init.sig[init.sig <= 0] = 0.01 # sigma > 0
@@ -1132,27 +1166,28 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
}), list( .lscale = lscale, .lshape = lshape, .threshold=threshold,
.iscale = iscale, .ishape = ishape,
.escale = escale, .eshape = eshape,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- sigma = eta2theta(eta[,1], .lscale, earg = .escale )
- xi = eta2theta(eta[,2], .lshape, earg = .eshape )
+ sigma = eta2theta(eta[, 1], .lscale, earg = .escale )
+ Shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
cent = .percentiles
- lp = length(cent) # NULL means lp==0 and the mean is returned
+ LP = length(cent) # NULL means LP == 0 and the mean is returned
Threshold = if (is.Numeric( .threshold)) .threshold else 0
- if (lp) {
- fv = matrix(as.numeric(NA), nrow(eta), lp)
- is.zero = (abs(xi) < .tolshape0)
- for(ii in 1:lp) {
+ if (LP) {
+ fv = matrix(as.numeric(NA), nrow(eta), LP)
+ is.zero = (abs(Shape) < .tolshape0)
+ for(ii in 1:LP) {
temp = 1-cent[ii]/100
- fv[!is.zero,ii] = Threshold + (temp^(-xi[!is.zero]) -1) *
- sigma[!is.zero] / xi[!is.zero]
+ fv[!is.zero,ii] = Threshold + (temp^(-Shape[!is.zero])-1) *
+ sigma[!is.zero] / Shape[!is.zero]
fv[ is.zero,ii] = Threshold - sigma[is.zero] * log(temp)
}
dimnames(fv) = list(dimnames(eta)[[1]],
- paste(as.character(.percentiles), "%", sep = ""))
+ paste(as.character(.percentiles), "%",
+ sep = ""))
} else {
- fv = Threshold + sigma / (1 - xi) # This is the mean, E(Y)
- fv[xi >= 1] = NA # Mean exists only if xi < 1.
+ fv = Threshold + sigma / (1 - Shape) # This is the mean, E(Y)
+ fv[Shape >= 1] = NA # Mean exists only if Shape < 1.
}
fv
}, list( .lscale = lscale, .lshape = lshape, .threshold=threshold,
@@ -1166,20 +1201,21 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
misc$threshold = if (is.Numeric( .threshold)) .threshold else 0
misc$expected = TRUE
misc$tolshape0 = .tolshape0
- if (any(xi < -0.5))
+ if (any(Shape < -0.5))
warning("some values of the shape parameter are less than -0.5")
}), list( .lscale = lscale, .lshape = lshape, .threshold=threshold,
.escale = escale, .eshape = eshape,
.tolshape0 = tolshape0, .percentiles = percentiles ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- sigma = eta2theta(eta[,1], .lscale, earg = .escale )
- xi = eta2theta(eta[,2], .lshape, earg = .eshape )
+ sigma = eta2theta(eta[, 1], .lscale, earg = .escale )
+ Shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
Threshold = extra$threshold
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgpd(x=y, location=Threshold, scale=sigma, shape=xi,
- tolshape0 = .tolshape0, giveWarning= .giveWarning,
+ sum(w * dgpd(x = y, location = Threshold, scale = sigma,
+ shape = Shape, tolshape0 = .tolshape0,
+ giveWarning = .giveWarning,
log = TRUE, oobounds.log = -1.0e04))
}
}, list( .tolshape0 = tolshape0, .giveWarning= giveWarning,
@@ -1187,11 +1223,11 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
.lscale = lscale, .lshape = lshape ))),
vfamily = c("gpd", "vextremes"),
deriv = eval(substitute(expression({
- sigma = eta2theta(eta[,1], .lscale, earg = .escale )
- xi = eta2theta(eta[,2], .lshape, earg = .eshape )
+ sigma = eta2theta(eta[, 1], .lscale, earg = .escale )
+ Shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
Threshold = extra$threshold
ystar = y - Threshold # Operate on ystar
- A = 1 + xi*ystar/sigma
+ A = 1 + Shape*ystar/sigma
mytolerance = .Machine$double.eps
bad <- (A <= mytolerance)
if (any(bad) && any(w[bad] != 0)) {
@@ -1199,33 +1235,34 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
"observations violating boundary constraints\n")
flush.console()
}
- if (any(is.zero <- (abs(xi) < .tolshape0))) {
+ if (any(is.zero <- (abs(Shape) < .tolshape0))) {
}
igpd = !is.zero & !bad
iexp = is.zero & !bad
- dl.dxi = dl.dsigma = rep(0, len = length(y))
- dl.dsigma[igpd] = ((1 + xi[igpd]) * ystar[igpd] / (sigma[igpd] +
- xi[igpd]*ystar[igpd]) - 1) / sigma[igpd]
- dl.dxi[igpd] = log(A[igpd])/xi[igpd]^2 - (1 + 1/xi[igpd]) *
- ystar[igpd] / (A[igpd] * sigma[igpd])
- dl.dxi[iexp] = ystar[iexp] *
+ dl.dShape = dl.dsigma = rep(0, len = length(y))
+ dl.dsigma[igpd] = ((1 + Shape[igpd]) * ystar[igpd] / (sigma[igpd] +
+ Shape[igpd]*ystar[igpd]) - 1) / sigma[igpd]
+ dl.dShape[igpd] = log(A[igpd])/Shape[igpd]^2 - (1 + 1/Shape[igpd]) *
+ ystar[igpd] / (A[igpd] * sigma[igpd])
+ dl.dShape[iexp] = ystar[iexp] *
(0.5*ystar[iexp]/sigma[iexp] - 1) / sigma[iexp]
dsigma.deta = dtheta.deta(sigma, .lscale, earg = .escale )
- dxi.deta = dtheta.deta(xi, .lshape, earg = .eshape )
- w * cbind(dl.dsigma * dsigma.deta, dl.dxi * dxi.deta)
- }), list( .tolshape0 = tolshape0, .lscale = lscale,
- .escale = escale, .eshape = eshape,
- .lshape = lshape ))),
+ dShape.deta = dtheta.deta(Shape, .lshape, earg = .eshape )
+ c(w) * cbind(dl.dsigma * dsigma.deta,
+ dl.dShape * dShape.deta)
+ }), list( .tolshape0 = tolshape0,
+ .lscale = lscale, .escale = escale,
+ .lshape = lshape, .eshape = eshape ))),
weight = eval(substitute(expression({
n <- length(w) # needed!
wz = matrix(as.numeric(NA), n, 3)
- wz[,iam(1,1,M)] = 1 / ((1+2*xi) * sigma^2)
- wz[,iam(2,2,M)] = 2 / ((1+2*xi) * (1+xi))
- wz[,iam(1,2,M)] = 1 / ((1+2*xi) * (1+xi) * sigma) # Positive!!!
- wz[,iam(1,1,M)] = w * wz[,iam(1,1,M)] * dsigma.deta^2
- wz[,iam(2,2,M)] = w * wz[,iam(2,2,M)] * dxi.deta^2
- wz[,iam(1,2,M)] = w * wz[,iam(1,2,M)] * dsigma.deta * dxi.deta
- wz
+ wz[, iam(1, 1, M)] = 1 / ((1+2*Shape) * sigma^2)
+ wz[, iam(2, 2, M)] = 2 / ((1+2*Shape) * (1+Shape))
+ wz[, iam(1, 2, M)] = 1 / ((1+2*Shape) * (1+Shape) * sigma) # > 0 !
+ wz[, iam(1, 1, M)] = wz[, iam(1, 1, M)] * dsigma.deta^2
+ wz[, iam(2, 2, M)] = wz[, iam(2, 2, M)] * dShape.deta^2
+ wz[, iam(1, 2, M)] = wz[, iam(1, 2, M)] * dsigma.deta * dShape.deta
+ c(w) * wz
}), list( .lscale = lscale ))))
}
@@ -1233,37 +1270,60 @@ qgpd <- function(p, location = 0, scale = 1, shape = 0) {
+
+
+
+
meplot.default <- function(y, main = "Mean Excess Plot",
- xlab="Threshold", ylab="Mean Excess", lty=c(2,1:2),
- conf=0.95, col=c("blue","black","blue"), type = "l", ...) {
- if (!is.Numeric(y)) stop("bad input for argument 'y'")
+ xlab = "Threshold", ylab = "Mean Excess", lty = c(2, 1:2),
+ conf = 0.95, col = c("blue", "black", "blue"), type = "l", ...) {
+
+
+ if (!is.Numeric(y))
+ stop("bad input for argument 'y'")
+
n = length(y)
sy = sort(y)
dsy = rev(sy) # decreasing sequence
- me = rev(cumsum(dsy))/(n:1) - sy
+ me = rev(cumsum(dsy)) / (n:1) - sy
me2 = rev(cumsum(dsy^2))
- var = (me2 - (n:1)*(me+sy)^2) / (n:1)
+ var = (me2 - (n:1) * (me+sy)^2) / (n:1)
ci = qnorm((1+conf)/2) * sqrt(abs(var)) / sqrt(n:1)
- mymat = cbind(me-ci, me, me+ci)
- sy = sy - sqrt(.Machine$double.eps)
- matplot(sy, mymat, main=main, xlab=xlab, ylab=ylab,
- lty=lty, col=col, type=type, ...)
- invisible(list(threshold=sy, meanExcess=me))
+
+ ci[length(ci)] = NA
+
+ mymat = cbind(me - ci, me, me + ci)
+ sy = sy - sqrt( .Machine$double.eps )
+
+ matplot(sy, mymat, main = main,
+ xlab = xlab, ylab = ylab,
+ lty = lty, col = col, type = type, ...)
+ invisible(list(threshold = sy, meanExcess = me,
+ plusminus = ci))
}
+
+
meplot.vlm <- function(object, ...) {
- if (!length(y <- object at y)) stop("y slot is empty")
+ if (!length(y <- object at y))
+ stop("y slot is empty")
ans = meplot(as.numeric(y), ...)
invisible(ans)
}
+
+
if (!isGeneric("meplot"))
- setGeneric("meplot", function(object, ...) standardGeneric("meplot"))
+ setGeneric("meplot",
+ function(object, ...)
+ standardGeneric("meplot"))
+
setMethod("meplot", "numeric",
function(object, ...)
meplot.default(y=object, ...))
+
setMethod("meplot", "vlm",
function(object, ...)
meplot.vlm(object, ...))
@@ -1271,28 +1331,40 @@ setMethod("meplot", "vlm",
guplot.default <- function(y, main = "Gumbel Plot",
- xlab="Reduced data", ylab="Observed data", type = "p", ...) {
- if (!is.Numeric(y)) stop("bad input for argument 'y'")
+ xlab = "Reduced data", ylab = "Observed data", type = "p", ...) {
+
+ if (!is.Numeric(y))
+ stop("bad input for argument 'y'")
+
n = length(y)
sy = sort(y)
x = -log(-log(((1:n) - 0.5) / n))
- plot(x, sy, main=main, xlab=xlab, ylab=ylab, type=type, ...)
- invisible(list(x=x, y=sy))
+ plot(x, sy, main = main, xlab = xlab, ylab = ylab,
+ type = type, ...)
+ invisible(list(x = x, y = sy))
}
+
+
guplot.vlm <- function(object, ...) {
- if (!length(y <- object at y)) stop("y slot is empty")
+ if (!length(y <- object at y))
+ stop("y slot is empty")
ans = guplot(as.numeric(y), ...)
invisible(ans)
}
+
+
if (!isGeneric("guplot"))
- setGeneric("guplot", function(object, ...) standardGeneric("guplot"))
+ setGeneric("guplot", function(object, ...)
+ standardGeneric("guplot"))
+
setMethod("guplot", "numeric",
function(object, ...)
guplot.default(y=object, ...))
+
setMethod("guplot", "vlm",
function(object, ...)
guplot.vlm(object, ...))
@@ -1302,12 +1374,13 @@ setMethod("guplot", "vlm",
+
egumbel <- function(llocation = "identity",
lscale = "loge",
elocation = list(),
escale = list(),
iscale = NULL,
- R=NA, percentiles=c(95,99),
+ R=NA, percentiles = c(95,99),
mpv = FALSE, zero = NULL)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
@@ -1363,24 +1436,25 @@ setMethod("guplot", "vlm",
.elocation=elocation, .escale = escale,
.R=R, .mpv=mpv, .percentiles = percentiles ))),
inverse = eval(substitute( function(eta, extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sigma = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sigma = eta2theta(eta[, 2], .lscale, earg = .escale )
EulerM = -digamma(1)
Percentiles = extra$percentiles
mpv = extra$mpv
- lp = length(Percentiles) # may be 0
- if (!lp) return(loc + sigma * EulerM)
- mu = matrix(as.numeric(NA), nrow(eta), lp + mpv)
+ LP = length(Percentiles) # may be 0
+ if (!LP) return(loc + sigma * EulerM)
+ mu = matrix(as.numeric(NA), nrow(eta), LP + mpv)
Rvec = extra$R
- if (1 <= lp)
- for(ii in 1:lp) {
+ if (1 <= LP)
+ for(ii in 1:LP) {
ci = if (is.Numeric(Rvec)) Rvec * (1 - Percentiles[ii] / 100) else
-log( Percentiles[ii] / 100)
mu[,ii] = loc - sigma * log(ci)
}
if (mpv)
mu[,ncol(mu)] = loc - sigma * log(log(2))
- dmn2 = if (lp>=1) paste(as.character(Percentiles), "%", sep = "") else NULL
+ dmn2 = if (LP >= 1) paste(as.character(Percentiles), "%",
+ sep = "") else NULL
if (mpv)
dmn2 = c(dmn2, "MPV")
dimnames(mu) = list(dimnames(eta)[[1]], dmn2)
@@ -1399,8 +1473,8 @@ setMethod("guplot", "vlm",
.R=R, .percentiles = percentiles ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals= FALSE,eta,extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sc = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sc = eta2theta(eta[, 2], .lscale, earg = .escale )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
sum(w * dgumbel(x=y, location = loc, scale=sc, log = TRUE))
@@ -1409,15 +1483,16 @@ setMethod("guplot", "vlm",
.elocation=elocation, .escale = escale ))),
vfamily = "egumbel",
deriv = eval(substitute(expression({
- loc = eta2theta(eta[,1], .llocation, earg = .elocation)
- sc = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation)
+ sc = eta2theta(eta[, 2], .lscale, earg = .escale )
zedd = (y-loc) / sc
temp2 = -expm1(-zedd)
dl.dloc = temp2 / sc
dl.dsc = -1/sc + temp2 * zedd / sc
dloc.deta = dtheta.deta(loc, .llocation, earg = .elocation)
dsc.deta = dtheta.deta(sc, .lscale, earg = .escale )
- w * cbind(dl.dloc * dloc.deta, dl.dsc * dsc.deta)
+ c(w) * cbind(dl.dloc * dloc.deta,
+ dl.dsc * dsc.deta)
}), list( .llocation = llocation, .lscale = lscale,
.elocation=elocation, .escale = escale ))),
weight=expression({
@@ -1426,10 +1501,10 @@ setMethod("guplot", "vlm",
ed2l.dloc2 = 1 / sc^2
ed2l.dscloc = -(1 + digamma1) / sc^2
wz = matrix(as.numeric(NA), n, dimm(M = 2))
- wz[,iam(1,1,M)] = ed2l.dloc2 * dloc.deta^2
- wz[,iam(2,2,M)] = ed2l.dsc2 * dsc.deta^2
- wz[,iam(1,2,M)] = ed2l.dscloc * dloc.deta * dsc.deta
- w * wz
+ wz[, iam(1, 1, M)] = ed2l.dloc2 * dloc.deta^2
+ wz[, iam(2, 2, M)] = ed2l.dsc2 * dsc.deta^2
+ wz[, iam(1, 2, M)] = ed2l.dscloc * dloc.deta * dsc.deta
+ c(w) * wz
}))
}
@@ -1440,7 +1515,7 @@ setMethod("guplot", "vlm",
lscale = "loge",
elocation = list(),
escale = list(), iscale = NULL,
- mean = TRUE, percentiles = NULL, zero=2)
+ mean = TRUE, percentiles = NULL, zero = 2)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
@@ -1496,15 +1571,15 @@ setMethod("guplot", "vlm",
.llocation = llocation,
.elocation = elocation, .escale = escale ))),
inverse = eval(substitute( function(eta, extra = NULL) {
- loc = eta2theta(eta[,1], .llocation)
- sc = eta2theta(eta[,2], .lscale)
+ loc = eta2theta(eta[, 1], .llocation)
+ sc = eta2theta(eta[, 2], .lscale)
EulerM = -digamma(1)
if (.mean) loc + sc * EulerM else {
- lp = length(.percentiles) # 0 if NULL
- mu = matrix(as.numeric(NA), nrow(eta), lp)
- for(ii in 1:lp) {
+ LP = length(.percentiles) # 0 if NULL
+ mu = matrix(as.numeric(NA), nrow(eta), LP)
+ for(ii in 1:LP) {
ci = -log( .percentiles[ii] / 100)
- mu[,ii] = loc - sc * log(ci)
+ mu[, ii] = loc - sc * log(ci)
}
dmn2 = paste(as.character(.percentiles), "%", sep = "")
dimnames(mu) <- list(dimnames(eta)[[1]], dmn2)
@@ -1525,8 +1600,8 @@ setMethod("guplot", "vlm",
.percentiles = percentiles ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals= FALSE,eta,extra = NULL) {
- loc = eta2theta(eta[,1], .llocation, earg = .elocation )
- sc = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation )
+ sc = eta2theta(eta[, 2], .lscale, earg = .escale )
zedd = (y-loc) / sc
cenL = extra$leftcensored
@@ -1548,8 +1623,8 @@ setMethod("guplot", "vlm",
cenU = extra$rightcensored
cen0 = !cenL & !cenU # uncensored obsns
- loc = eta2theta(eta[,1], .llocation, earg = .elocation )
- sc = eta2theta(eta[,2], .lscale, earg = .escale )
+ loc = eta2theta(eta[, 1], .llocation, earg = .elocation )
+ sc = eta2theta(eta[, 2], .lscale, earg = .escale )
zedd = (y-loc) / sc
temp2 = -expm1(-zedd)
dl.dloc = temp2 / sc
@@ -1569,7 +1644,8 @@ setMethod("guplot", "vlm",
dl.dloc[cenU] = -dFy.dloc[cenU] / (1-Fy[cenU])
dl.dsc[cenU] = -dFy.dsc[cenU] / (1-Fy[cenU])
}
- w * cbind(dl.dloc * dloc.deta, dl.dsc * dsc.deta)
+ c(w) * cbind(dl.dloc * dloc.deta,
+ dl.dsc * dsc.deta)
}), list( .lscale = lscale,
.llocation = llocation,
.elocation = elocation, .escale = escale ))),
@@ -1582,326 +1658,533 @@ setMethod("guplot", "vlm",
ed2l.dloc2 = 1 / sc^2
ed2l.dlocsc = -(1 + digamma1) / sc^2
wz = matrix(as.numeric(NA), n, dimm(M = 2))
- wz[,iam(1,1,M)] = A2 * ed2l.dloc2 * dloc.deta^2
- wz[,iam(2,2,M)] = A2 * ed2l.dsc2 * dsc.deta^2
- wz[,iam(1,2,M)] = A2 * ed2l.dlocsc * dloc.deta * dsc.deta
+ wz[, iam(1, 1, M)] = A2 * ed2l.dloc2 * dloc.deta^2
+ wz[, iam(2, 2, M)] = A2 * ed2l.dsc2 * dsc.deta^2
+ wz[, iam(1, 2, M)] = A2 * ed2l.dlocsc * dloc.deta * dsc.deta
d2l.dloc2 = -ezedd / sc^2
d2l.dsc2 = (2 - zedd) * zedd * ezedd / sc^2
d2l.dlocsc = (1 - zedd) * ezedd / sc^2
- wz[,iam(1,1,M)]=wz[,iam(1,1,M)]-A1^2 * d2l.dloc2 * dloc.deta^2
- wz[,iam(2,2,M)]=wz[,iam(2,2,M)]-A1^2 * d2l.dsc2 * dsc.deta^2
- wz[,iam(1,2,M)]=wz[,iam(1,2,M)]-A1^2 * d2l.dlocsc * dloc.deta * dsc.deta
+ wz[, iam(1, 1, M)] = wz[, iam(1, 1, M)]-A1^2 * d2l.dloc2 * dloc.deta^2
+ wz[, iam(2, 2, M)] = wz[, iam(2, 2, M)]-A1^2 * d2l.dsc2 * dsc.deta^2
+ wz[, iam(1, 2, M)] = wz[, iam(1, 2, M)]-A1^2 * d2l.dlocsc *
+ dloc.deta * dsc.deta
d2Fy.dloc2 = dFy.dloc * dl.dloc + Fy * d2l.dloc2
d2Fy.dsc2 = dFy.dsc * dl.dsc + Fy * d2l.dsc2
d2Fy.dlocsc = dFy.dsc * dl.dloc + Fy * d2l.dlocsc
d2l.dloc2 = -((1-Fy) * d2Fy.dloc2 - dFy.dloc^2) / (1-Fy)^2
d2l.dsc2 = -((1-Fy) * d2Fy.dsc2 - dFy.dsc^2) / (1-Fy)^2
- d2l.dlocsc =-((1-Fy) * d2Fy.dlocsc - dFy.dloc * dFy.dsc) / (1-Fy)^2
- wz[,iam(1,1,M)]=wz[,iam(1,1,M)]-A3^2 * d2l.dloc2 * dloc.deta^2
- wz[,iam(2,2,M)]=wz[,iam(2,2,M)]-A3^2 * d2l.dsc2 * dsc.deta^2
- wz[,iam(1,2,M)]=wz[,iam(1,2,M)]-A3^2 * d2l.dlocsc * dloc.deta * dsc.deta
- w * wz
+ d2l.dlocsc = -((1-Fy) * d2Fy.dlocsc - dFy.dloc * dFy.dsc) / (1-Fy)^2
+ wz[, iam(1, 1, M)] = wz[, iam(1, 1, M)]-A3^2 * d2l.dloc2 * dloc.deta^2
+ wz[, iam(2, 2, M)] = wz[, iam(2, 2, M)]-A3^2 * d2l.dsc2 * dsc.deta^2
+ wz[, iam(1, 2, M)] = wz[, iam(1, 2, M)]-A3^2 * d2l.dlocsc *
+ dloc.deta * dsc.deta
+ c(w) * wz
}))
}
dfrechet <- function(x, location = 0, scale = 1, shape, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
-
- L = max(length(x), length(scale), length(shape))
- x = rep(x, len = L); scale = rep(scale, len = L); shape = rep(shape, len = L);
- logdensity = rep(log(0), len = L)
- xok = (x > location)
- rzedd = scale / (x - location)
- logdensity[xok] = log(shape[xok]) - (rzedd[xok]^shape[xok]) +
- (shape[xok]+1) * log(rzedd[xok]) - log(scale[xok])
- logdensity[shape <= 0] = NaN
- logdensity[scale <= 0] = NaN
- if (log.arg) logdensity else exp(logdensity)
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ L = max(length(x), length(scale), length(shape), length(location))
+ x = rep(x, len = L); scale = rep(scale, len = L);
+ shape = rep(shape, len = L); location = rep(location, len = L);
+
+ logdensity = rep(log(0), len = L)
+ xok = (x > location)
+ rzedd = scale / (x - location)
+ logdensity[xok] = log(shape[xok]) - (rzedd[xok]^shape[xok]) +
+ (shape[xok]+1) * log(rzedd[xok]) - log(scale[xok])
+ logdensity[shape <= 0] = NaN
+ logdensity[scale <= 0] = NaN
+
+ if (log.arg) logdensity else exp(logdensity)
}
+
pfrechet <- function(q, location = 0, scale = 1, shape) {
- if (!is.Numeric(scale, posit = TRUE)) stop("scale must be positive")
- if (!is.Numeric(shape, posit = TRUE)) stop("shape must be positive")
- rzedd = scale / (q - location)
- ans = exp(-(rzedd^shape))
- ans[q <= location] = 0
- ans
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("scale must be positive")
+ if (!is.Numeric(shape, posit = TRUE))
+ stop("shape must be positive")
+ rzedd = scale / (q - location)
+ ans = exp(-(rzedd^shape))
+ ans[q <= location] = 0
+ ans
}
+
qfrechet <- function(p, location = 0, scale = 1, shape) {
- if (!is.Numeric(p, posit = TRUE) || any(p >= 1)) stop("0 < p < 1 is required")
- if (!is.Numeric(scale, posit = TRUE)) stop("scale must be positive")
- if (!is.Numeric(shape, posit = TRUE)) stop("shape must be positive")
- location + scale * (-log(p))^(-1/shape)
+ if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
+ stop("0 < p < 1 is required")
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("scale must be positive")
+ if (!is.Numeric(shape, posit = TRUE))
+ stop("shape must be positive")
+ location + scale * (-log(p))^(-1/shape)
}
+
rfrechet <- function(n, location = 0, scale = 1, shape) {
- if (!is.Numeric(n, posit = TRUE, allow = 1, integ = TRUE))
- stop("bad input for argument 'n'")
- if (!is.Numeric(scale, posit = TRUE)) stop("scale must be positive")
- if (!is.Numeric(shape, posit = TRUE)) stop("shape must be positive")
- location + scale * (-log(runif(n)))^(-1/shape)
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("scale must be positive")
+ if (!is.Numeric(shape, posit = TRUE))
+ stop("shape must be positive")
+
+ location + scale * (-log(runif(n)))^(-1/shape)
}
+
+
+
+
+
+
+
frechet2.control <- function(save.weight = TRUE, ...)
{
list(save.weight = save.weight)
}
+
+
frechet2 <- function(location = 0,
- lscale = "loge",
- lshape = "loglog",
- escale = list(),
- eshape = list(),
- iscale = NULL, ishape=3,
- zero = NULL)
+ lscale = "loge",
+ lshape = "logoff",
+ escale = list(),
+ eshape = list(offset = -2),
+ iscale = NULL, ishape = NULL,
+ nsimEIM = 250,
+ zero = NULL)
{
- if (!is.Numeric(location))
- stop("bad input for argument 'location'")
- if (mode(lscale) != "character" && mode(lscale) != "name")
- lscale <- as.character(substitute(lscale))
- if (mode(lshape) != "character" && mode(lshape) != "name")
- lshape <- as.character(substitute(lshape))
- if (!is.list(escale)) escale = list()
- if (!is.list(eshape)) eshape = list()
- new("vglmff",
- blurb = c("2-parameter Frechet Distribution\n",
+ if (!is.Numeric(location))
+ stop("bad input for argument 'location'")
+
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale <- as.character(substitute(lscale))
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape <- as.character(substitute(lshape))
+
+ if (!is.list(escale)) escale = list()
+ if (!is.list(eshape)) eshape = list()
+
+ stopifnot(nsimEIM > 10, length(nsimEIM) == 1, nsimEIM == round(nsimEIM))
+
+
+ new("vglmff",
+ blurb = c("2-parameter Frechet distribution\n",
"Links: ",
namesof("scale", link = lscale, earg = escale ), ", ",
namesof("shape", link = lshape, earg = eshape )),
- constraints=eval(substitute(expression({
- constraints <- cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- predictors.names =
- c(namesof("scale", .lscale, earg = .escale, short = TRUE),
- namesof("shape", .lshape, earg = .eshape, short = TRUE))
- extra$location = rep( .location, len = n) # stored here
- if (!length(etastart)) {
- # Initial values for limiting case as xi --> 0, r_i == 1
- locinit = extra$location
- if (any(y <= locinit))
- stop("initial values for 'location' are out of range")
- shape.init = if (length( .ishape)) rep( .ishape, len = n) else {
- rep(3.0, len = n) # variance exists if shape>2
- }
- Scale.init = if (length( .iscale)) rep( .iscale, len = n) else {
- if (all(shape.init > 1))
- abs( (y-locinit+0.001) / (gamma(1-1/shape.init)) ) else
- rep( 1.0, len = n)
- }
- etastart = cbind(theta2eta(Scale.init, .lscale, earg = .escale ),
- theta2eta(shape.init, .lshape, earg = .escale ))
- }
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape,
- .location = location, .iscale = iscale, .ishape = ishape ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- loc = extra$location
- Scale = eta2theta(eta[,1], .lscale, earg = .escale )
- shape = eta2theta(eta[,2], .lshape, earg = .eshape )
- ans = rep(as.numeric(NA), len = length(shape))
- ok = shape > 1
- ans[ok] = loc[ok] + Scale[ok] * gamma(1 - 1/shape[ok])
- ans
- }, list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
- last = eval(substitute(expression({
- misc$links <- c("scale" = .lscale, "shape" = .lshape)
- misc$expected = FALSE
- misc$BFGS = TRUE
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- loc = extra$location
- Scale = eta2theta(eta[,1], .lscale, earg = .escale )
- shape = eta2theta(eta[,2], .lshape, earg = .eshape )
- rzedd = Scale / (y-loc)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * dfrechet(x=y, location = loc, scale=Scale, shape=shape,
- log = TRUE))
- }, list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
- vfamily = c("frechet2", "vextremes"),
- deriv = eval(substitute(expression({
- loc = extra$location
- Scale = eta2theta(eta[,1], .lscale, earg = .escale )
- shape = eta2theta(eta[,2], .lshape, earg = .eshape )
- rzedd = Scale / (y-loc) # reciprocial of zedd
- dl.dloc = (shape+1)/(y-loc) - (shape / (y-loc)) * (rzedd)^shape
- dl.dScale = shape * (1-rzedd^shape) / Scale
- dl.dshape = 1/shape + log(rzedd) * (1 - rzedd^shape)
- if (iter == 1) {
- etanew = eta
+ constraints=eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names =
+ c(namesof("scale", .lscale, earg = .escale, short = TRUE),
+ namesof("shape", .lshape, earg = .eshape, short = TRUE))
+
+ extra$location = rep( .location, len = n) # stored here
+
+ if (!length(etastart)) {
+ locinit = extra$location
+ if (any(y <= locinit))
+ stop("initial values for 'location' are out of range")
+
+
+ frech.aux = function(shapeval, y, x, w, extraargs) {
+ myprobs = c(0.25, 0.5, 0.75)
+ myobsns = quantile(y, probs = myprobs)
+ myquant = (-log(myprobs))^(-1/shapeval)
+ myfit = lsfit(x = myquant, y = myobsns, intercept = TRUE)
+ sum(myfit$resid^2)
+ }
+
+ shape.grid = c(100, 70, 40, 20, 12, 8, 4, 2, 1.5)
+ shape.grid = c(1 / shape.grid, 1, shape.grid)
+ try.this = getMaxMin(shape.grid, objfun = frech.aux,
+ y = y, x = x, w = w, maximize = FALSE,
+ abs.arg = TRUE)
+
+ shape.init = if (length( .ishape )) rep( .ishape, len = n) else {
+ rep(try.this, len = n) # variance exists if shape > 2
+ }
+
+
+ myprobs = c(0.25, 0.5, 0.75)
+ myobsns = quantile(y, probs = myprobs)
+ myquant = (-log(myprobs))^(-1/shape.init[1])
+ myfit = lsfit(x = myquant, y = myobsns)
+
+ Scale.init = if (length( .iscale)) rep( .iscale, len = n) else {
+ if (all(shape.init > 1)) {
+ myfit$coef[2]
} else {
- derivold = derivnew
- etaold = etanew
- etanew = eta
+ rep( 1.0, len = n)
}
- derivnew = w *
- cbind(dl.dScale * dtheta.deta(Scale, .lscale, earg = .escale ),
- dl.dshape * dtheta.deta(shape, .lshape, earg = .eshape ))
- derivnew
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
- weight = eval(substitute(expression({
- if (iter == 1) {
- wznew = cbind(matrix(w, n, M), matrix(0, n, dimm(M)-M))
- } else {
- wzold = wznew
- wznew = qnupdate(w=w, wzold=wzold, dderiv=(derivold - derivnew),
- deta=etanew-etaold, M = M,
- trace=trace) # weights incorporated in args
- }
- wznew
- }), list( .lscale = lscale, .lshape = lshape ))))
+ }
+
+ etastart = cbind(theta2eta(Scale.init, .lscale, earg = .escale ),
+ theta2eta(shape.init, .lshape, earg = .escale ))
+ }
+ }), list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape,
+ .iscale = iscale, .ishape = ishape,
+ .location = location ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ loc = extra$location
+ Scale = eta2theta(eta[, 1], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
+
+ ans = rep(as.numeric(NA), len = length(shape))
+ ok = shape > 1
+ ans[ok] = loc[ok] + Scale[ok] * gamma(1 - 1/shape[ok])
+ ans
+ }, list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+ last = eval(substitute(expression({
+ misc$links <- c("scale" = .lscale, "shape" = .lshape)
+
+ misc$earg <- list("scale" = .escale, "shape" = .eshape)
+
+ misc$nsimEIM = .nsimEIM
+ }), list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape,
+ .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ loctn = extra$location
+ Scale = eta2theta(eta[, 1], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else
+ sum(w * dfrechet(x = y, location = loctn, scale = Scale,
+ shape = shape, log = TRUE))
+ }, list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+ vfamily = c("frechet2", "vextremes"),
+ deriv = eval(substitute(expression({
+ loctn = extra$location
+ Scale = eta2theta(eta[, 1], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape, earg = .eshape )
+
+ rzedd = Scale / (y - loctn) # reciprocial of zedd
+ dl.dloctn = (shape + 1) / (y - loctn) -
+ (shape / (y - loctn)) * (rzedd)^shape
+ dl.dScale = shape * (1 - rzedd^shape) / Scale
+ dl.dshape = 1 / shape + log(rzedd) * (1 - rzedd^shape)
+
+ dthetas.detas <- cbind(
+ dScale.deta <- dtheta.deta(Scale, .lscale, earg = .escale ),
+ dShape.deta <- dtheta.deta(shape, .lshape, earg = .eshape ))
+
+ c(w) * cbind(dl.dScale,
+ dl.dshape) * dthetas.detas
+ }), list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+ weight = eval(substitute(expression({
+
+ run.varcov = 0
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+
+ if (length( .nsimEIM )) {
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rfrechet(n, loc = loctn, scale = Scale, shape = shape)
+
+ rzedd = Scale / (ysim - loctn) # reciprocial of zedd
+ dl.dloctn = (shape + 1) / (ysim - loctn) -
+ (shape / (ysim - loctn)) * (rzedd)^shape
+ dl.dScale = shape * (1 - rzedd^shape) / Scale
+ dl.dshape = 1 / shape + log(rzedd) * (1 - rzedd^shape)
+
+ rm(ysim)
+ temp3 = cbind(dl.dScale, dl.dshape)
+ run.varcov = run.varcov +
+ temp3[, ind1$row.index] *
+ temp3[, ind1$col.index]
+ }
+ run.varcov = run.varcov / .nsimEIM
+
+ wz = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
+
+ wz = c(w) * wz * dthetas.detas[, ind1$row] *
+ dthetas.detas[, ind1$col]
+ } else {
+ stop("argument 'nsimEIM' must be numeric")
+ }
+
+ wz
+ }), list( .nsimEIM = nsimEIM ))))
}
+
+
frechet3.control <- function(save.weight = TRUE, ...)
{
list(save.weight = save.weight)
}
+
+
+if (FALSE)
frechet3 <- function(anchor = NULL,
ldifference = "loge",
lscale = "loge",
- lshape = "loglog",
+ lshape = "logoff",
edifference = list(),
escale = list(),
- eshape = list(),
- ilocation = NULL, iscale = NULL, ishape=3, zero = NULL,
- effpos = .Machine$double.eps^0.75)
+ eshape = list(offset = -2),
+ ilocation = NULL, iscale = NULL, ishape = NULL,
+ nsimEIM = 250,
+ zero = 1)
{
- if (mode(ldifference) != "character" && mode(ldifference) != "name")
- ldifference <- as.character(substitute(ldifference))
- if (mode(lscale) != "character" && mode(lscale) != "name")
- lscale <- as.character(substitute(lscale))
- if (mode(lshape) != "character" && mode(lshape) != "name")
- lshape <- as.character(substitute(lshape))
- if (!is.Numeric(ishape, allo=1, posi = TRUE)) stop("bad input for argument 'ishape'")
- if (!is.Numeric(effpos, allo=1)|| effpos<0) stop("bad input for argument 'effpos'")
- if (!is.list(edifference)) edifference = list()
- if (!is.list(escale)) escale = list()
- if (!is.list(eshape)) eshape = list()
+ ediffr = edifference
+ ldiffr = ldifference
- new("vglmff",
- blurb = c("3-parameter Frechet Distribution\n",
+ if (mode(ldiffr) != "character" && mode(ldiffr) != "name")
+ ldiffr <- as.character(substitute(ldiffr))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale <- as.character(substitute(lscale))
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape <- as.character(substitute(lshape))
+
+
+ if (!is.list(ediffr)) ediffr = list()
+ if (!is.list(escale)) escale = list()
+ if (!is.list(eshape)) eshape = list()
+
+ stopifnot(nsimEIM > 10, length(nsimEIM) == 1, nsimEIM == round(nsimEIM))
+
+
+ new("vglmff",
+ blurb = c("3-parameter Frechet distribution\n",
"Links: ",
- namesof("difference", link = ldifference, earg = edifference), ", ",
- namesof("scale", link = lscale, earg = escale), ", ",
- namesof("shape", link = lshape, earg = eshape)),
- constraints=eval(substitute(expression({
- constraints <- cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- predictors.names =
- c(namesof("difference", .ldifference, earg = .edifference, short = TRUE),
- namesof("scale", .lscale, earg = .escale, short = TRUE),
- namesof("shape", .lshape, earg = .eshape, short = TRUE))
- anchorpt = if (is.Numeric( .anchor, allow = 1)) .anchor else min(y)
- if (min(y) < anchorpt) stop("anchor point is too large")
- extra$LHSanchor = anchorpt
- if (!length(etastart)) {
- locinit = if (length( .ilocation)) rep( .ilocation, len = n) else
- rep(anchorpt - 0.01*diff(range(y)), len = n)
- if (any(y <= locinit))
- stop("initial values for 'location' are out of range")
- if (any(anchorpt <= locinit))
- stop("require anchor point > initial location parameter value")
- shape.init = if (length( .ishape)) rep( .ishape, len = n) else {
- rep(3.0, len = n) # variance exists if shape>2
- }
- Scale.init = if (length( .iscale)) rep( .iscale, len = n) else {
- if (all(shape.init > 1))
- abs( (y-locinit+0.001) / (gamma(1-1/shape.init)) ) else
- rep( 1.0, len = n)
- }
- etastart = cbind(theta2eta(anchorpt - locinit, .ldifference),
- theta2eta(Scale.init, .lscale),
- theta2eta(shape.init, .lshape))
- }
- }), list( .ldifference = ldifference, .lscale = lscale, .lshape = lshape,
- .edifference = edifference, .escale = escale, .eshape = eshape,
- .anchor=anchor,
- .ilocation = ilocation, .iscale = iscale, .ishape = ishape ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- loc = extra$LHSanchor - eta2theta(eta[,1], .ldifference, earg = .edifference)
- Scale = eta2theta(eta[,2], .lscale, earg = .escale )
- shape = eta2theta(eta[,3], .lshape, earg = .eshape )
- ans = rep(as.numeric(NA), len = length(shape))
- ok = shape > 1
- ans[ok] = loc[ok] + Scale[ok] * gamma(1 - 1/shape[ok])
- ans
- }, list( .ldifference = ldifference, .lscale = lscale, .lshape = lshape,
- .edifference = edifference, .escale = escale, .eshape = eshape ))),
- last = eval(substitute(expression({
- misc$links <- c("difference" = .ldifference, "scale" = .lscale,
- "shape" = .lshape)
- misc$expected = FALSE
- misc$BFGS = TRUE
- }), list( .ldifference = ldifference, .lscale = lscale, .lshape = lshape,
- .edifference = edifference, .escale = escale, .eshape = eshape ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- loc = extra$LHSanchor -
- eta2theta(eta[,1], .ldifference, earg = .edifference)
- Scale = eta2theta(eta[,2], .lscale, earg = .escale )
- shape = eta2theta(eta[,3], .lshape, earg = .eshape )
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dfrechet(x=y, location = loc, scale=Scale, shape=shape,
- log = TRUE))
- }
- }, list( .ldifference = ldifference, .lscale = lscale, .lshape = lshape,
- .edifference = edifference, .escale = escale, .eshape = eshape ))),
- vfamily = c("frechet3", "vextremes"),
- deriv = eval(substitute(expression({
- difference = eta2theta(eta[,1], .ldifference, earg = .edifference )
- Scale = eta2theta(eta[,2], .lscale, earg = .escale )
- shape = eta2theta(eta[,3], .lshape, earg = .eshape )
- loc = extra$LHSanchor - difference
- extra$location = loc # Store the location parameter estimate here
- rzedd = Scale / (y-loc) # reciprocial of zedd
- dl.dloc = (shape+1)/(y-loc) - (shape / (y-loc)) * (rzedd)^shape
- dl.ddiff = -dl.dloc
- dl.dScale = shape * (1-rzedd^shape) / Scale
- dl.dshape = 1/shape + log(rzedd) * (1 - rzedd^shape)
- if (iter == 1) {
- etanew = eta
+ namesof("difference", link = ldiffr, earg = ediffr), ", ",
+ namesof("scale", link = lscale, earg = escale), ", ",
+ namesof("shape", link = lshape, earg = eshape)),
+ constraints=eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names =
+ c(namesof("difference", .ldiffr, earg = .ediffr, short = TRUE),
+ namesof("scale", .lscale, earg = .escale, short = TRUE),
+ namesof("shape", .lshape, earg = .eshape, short = TRUE))
+
+ anchorpt = if (is.Numeric( .anchor, allow = 1)) .anchor else min(y)
+ if (min(y) < anchorpt)
+ stop("anchor point is too large")
+ extra$LHSanchor = anchorpt
+
+ if (!length(etastart)) {
+
+
+ frech.aux = function(shapeval, y, x, w, extraargs) {
+ myprobs = c(0.25, 0.5, 0.75)
+ myobsns = quantile(y, probs = myprobs)
+ myquant = (-log(myprobs))^(-1/shapeval)
+ myfit = lsfit(x = myquant, y = myobsns, intercept = TRUE)
+ sum(myfit$resid^2)
+ }
+
+ shape.grid = c(100, 70, 40, 20, 12, 8, 4, 2, 1.5)
+ shape.grid = c(1 / shape.grid, 1, shape.grid)
+ try.this = getMaxMin(shape.grid, objfun = frech.aux,
+ y = y, x = x, w = w, maximize = FALSE,
+ abs.arg = TRUE)
+ print("try.this")
+ print( try.this )
+
+ shape.init = if (length( .ishape )) rep( .ishape, len = n) else {
+ rep(try.this, len = n) # variance exists if shape > 2
+ }
+
+
+
+
+ myprobs = c(0.25, 0.5, 0.75)
+ myobsns = quantile(y, probs = myprobs)
+ myquant = (-log(myprobs))^(-1/shape.init[1])
+ myfit = lsfit(x = myquant, y = myobsns)
+ print("myfit$coef")
+ print( myfit$coef )
+ plot(myobsns ~ myquant)
+
+
+ Scale.init = if (length( .iscale)) rep( .iscale, len = n) else {
+ if (all(shape.init > 1)) {
+ myfit$coef[2]
} else {
- derivold = derivnew
- etaold = etanew
- etanew = eta
+ rep( 1.0, len = n)
}
- derivnew = w *
- cbind(dl.ddiff * dtheta.deta(difference, .ldifference,
- earg = .edifference ),
- dl.dScale * dtheta.deta(Scale, .lscale, earg = .escale ),
- dl.dshape * dtheta.deta(shape, .lshape, earg = .eshape ))
- derivnew
- }), list( .ldifference = ldifference, .lscale = lscale, .lshape = lshape,
- .edifference = edifference, .escale = escale, .eshape = eshape ))),
- weight = eval(substitute(expression({
- if (iter == 1) {
- wznew = cbind(matrix(w, n, M), matrix(0, n, dimm(M)-M))
+ }
+
+
+ locinit = if (length( .ilocation)) rep( .ilocation, len = n) else {
+ if (myfit$coef[1] < min(y)) {
+ print("using myfit$coef[1] for initial location")
+ print( myfit$coef[1] )
+ print( min(y) )
+ print( anchorpt )
+ rep(myfit$coef[1], len = n)
} else {
- wzold = wznew
- wznew = qnupdate(w=w, wzold=wzold, dderiv=(derivold - derivnew),
- deta=etanew-etaold, M = M, effpos = .effpos,
- trace=trace) # weights incorporated in args
+ print("using heuristic initial location")
+ rep(anchorpt - 0.01 * diff(range(y)), len = n)
}
- wznew
- }), list( .effpos = effpos ))))
+ }
+ if (any(y <= locinit))
+ stop("initial values for 'location' are out of range")
+ if (any(anchorpt <= locinit))
+ stop("require anchor point > initial location parameter value")
+
+
+
+
+ etastart = cbind(theta2eta(anchorpt - locinit, .ldiffr),
+ theta2eta(Scale.init, .lscale),
+ theta2eta(shape.init, .lshape))
+ print("head(etastart)")
+ print( head(etastart) )
+ print("summary(etastart)")
+ print( summary(etastart) )
+ }
+ }), list( .ldiffr = ldiffr, .lscale = lscale, .lshape = lshape,
+ .ediffr = ediffr, .escale = escale, .eshape = eshape,
+ .iscale = iscale, .ishape = ishape,
+ .ilocation = ilocation, .anchor = anchor ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ loctn = extra$LHSanchor -
+ eta2theta(eta[, 1], .ldiffr, earg = .ediffr)
+ Scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+ ans = rep(as.numeric(NA), len = length(shape))
+ okay = shape > 1
+ ans[okay] = loctn[okay] + Scale[okay] * gamma(1 - 1/shape[okay])
+ ans
+ }, list( .ldiffr = ldiffr, .lscale = lscale, .lshape = lshape,
+ .ediffr = ediffr, .escale = escale, .eshape = eshape ))),
+ last = eval(substitute(expression({
+ misc$links <- c("difference" = .ldiffr,
+ "scale" = .lscale,
+ "shape" = .lshape)
+
+ misc$earg <- list("difference" = .ediffr,
+ "scale" = .escale,
+ "shape" = .eshape)
+
+ misc$nsimEIM = .nsimEIM
+
+ extra$location = loctn # Store the location parameter estimate here
+
+ }), list( .ldiffr = ldiffr, .lscale = lscale, .lshape = lshape,
+ .ediffr = ediffr, .escale = escale, .eshape = eshape,
+ .nsimEIM = nsimEIM ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ loctn = extra$LHSanchor -
+ eta2theta(eta[, 1], .ldiffr, earg = .ediffr)
+ Scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dfrechet(x = y, location = loctn, scale = Scale,
+ shape = shape, log = TRUE))
+ }
+ }, list( .ldiffr = ldiffr, .lscale = lscale, .lshape = lshape,
+ .ediffr = ediffr, .escale = escale, .eshape = eshape ))),
+ vfamily = c("frechet3", "vextremes"),
+ deriv = eval(substitute(expression({
+ print("summary(eta) in @deriv ,,,,,,,,,,,,,,")
+ print( summary(eta) )
+ Difrc = eta2theta(eta[, 1], .ldiffr, earg = .ediffr )
+ Scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+
+ loctn = extra$LHSanchor - Difrc
+ rzedd = Scale / (y - loctn) # reciprocial of zedd
+
+ dl.dloct = (shape + 1) / (y - loctn) -
+ (shape / (y - loctn)) * (rzedd)^shape
+ dl.ddifff = -dl.dloct
+ dl.dScale = shape * (1 - rzedd^shape) / Scale
+ dl.dshape = 1 / shape + log(rzedd) * (1 - rzedd^shape)
+
+ dthetas.detas <- cbind(
+ ddifff.deta <- dtheta.deta(Difrc, .ldiffr, earg = .ediffr ),
+ dScale.deta <- dtheta.deta(Scale, .lscale, earg = .escale ),
+ dShape.deta <- dtheta.deta(shape, .lshape, earg = .eshape ))
+
+ ans =
+ c(w) * cbind(dl.ddifff,
+ dl.dScale,
+ dl.dshape) * dthetas.detas
+
+ print("head(ans)")
+ print( head(ans) )
+ print("summary(ans)")
+ print( summary(ans) )
+
+ ans
+ }), list( .ldiffr = ldiffr, .lscale = lscale, .lshape = lshape,
+ .ediffr = ediffr, .escale = escale, .eshape = eshape ))),
+ weight = eval(substitute(expression({
+
+ run.varcov = 0
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+
+ if (length( .nsimEIM )) {
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rfrechet(n, loc = loctn, scale = Scale, shape = shape)
+
+ rzedd = Scale / (ysim - loctn) # reciprocial of zedd
+
+ dl.dloct = (shape + 1) / (ysim - loctn) -
+ (shape / (ysim - loctn)) * (rzedd)^shape
+ dl.ddifff = -dl.dloct
+
+ dl.dScale = shape * (1 - rzedd^shape) / Scale
+ dl.dshape = 1 / shape + log(rzedd) * (1 - rzedd^shape)
+
+ rm(ysim)
+ temp3 = cbind(dl.ddifff, dl.dScale, dl.dshape)
+ run.varcov = run.varcov +
+ temp3[, ind1$row.index] *
+ temp3[, ind1$col.index]
+ }
+ run.varcov = run.varcov / .nsimEIM
+
+ wz = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
+
+ wz = c(w) * wz * dthetas.detas[, ind1$row] *
+ dthetas.detas[, ind1$col]
+ } else {
+ stop("argument 'nsimEIM' must be numeric")
+ }
+
+ print("head(wz)")
+ print( head(wz) )
+ print("summary(wz) ,,,,,,,,,,,,,,,,,,")
+ print( summary(wz) )
+
+ wz
+ }), list( .nsimEIM = nsimEIM ))))
}
@@ -1911,16 +2194,16 @@ recnormal1.control <- function(save.weight = TRUE, ...)
}
recnormal1 <- function(lmean = "identity", lsd = "loge",
- imean = NULL, isd = NULL, method.init = 1, zero = NULL)
+ imean = NULL, isd = NULL, imethod = 1, zero = NULL)
{
if (mode(lmean) != "character" && mode(lmean) != "name")
lmean = as.character(substitute(lmean))
if (mode(lsd) != "character" && mode(lsd) != "name")
lsd = as.character(substitute(lsd))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, positi = TRUE) ||
- method.init > 3.5)
- stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 3.5)
+ stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
blurb = c("Upper record values from a univariate normal distribution\n\n",
@@ -1945,17 +2228,17 @@ recnormal1.control <- function(save.weight = TRUE, ...)
mean.init = if (length( .imean)) rep( .imean, len = n) else {
if (.lmean == "loge") pmax(1/1024, min(y)) else min(y)}
sd.init = if (length( .isd)) rep( .isd, len = n) else {
- if (.method.init == 1) 1*(sd(y)) else
- if (.method.init == 2) 5*(sd(y)) else
+ if (.imethod == 1) 1*(sd(y)) else
+ if (.imethod == 2) 5*(sd(y)) else
.5*(sd(y))
}
etastart = cbind(theta2eta(rep(mean.init, len = n), .lmean),
theta2eta(rep(sd.init, len = n), .lsd))
}
}), list( .lmean = lmean, .lsd = lsd, .imean = imean, .isd = isd,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- eta2theta(eta[,1], .lmean)
+ eta2theta(eta[, 1], .lmean)
}, list( .lmean = lmean ))),
last = eval(substitute(expression({
misc$link = c("mu" = .lmean, "sd" = .lsd)
@@ -1963,7 +2246,7 @@ recnormal1.control <- function(save.weight = TRUE, ...)
}), list( .lmean = lmean, .lsd = lsd ))),
loglikelihood = eval(substitute(
function(mu,y,w,residuals= FALSE,eta, extra = NULL) {
- sd = eta2theta(eta[,2], .lsd)
+ sd = eta2theta(eta[, 2], .lsd)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
zedd = (y - mu) / sd
@@ -1975,8 +2258,8 @@ recnormal1.control <- function(save.weight = TRUE, ...)
vfamily = c("recnormal1"),
deriv = eval(substitute(expression({
NN = nrow(eta)
- mymu = eta2theta(eta[,1], .lmean)
- sd = eta2theta(eta[,2], .lsd)
+ mymu = eta2theta(eta[, 1], .lmean)
+ sd = eta2theta(eta[, 2], .lsd)
zedd = (y - mymu) / sd
temp200 = dnorm(zedd) / (1-pnorm(zedd))
dl.dmu = (zedd - temp200) / sd
@@ -1992,7 +2275,8 @@ recnormal1.control <- function(save.weight = TRUE, ...)
etaold = etanew
etanew = eta
}
- derivnew = w * cbind(dl.dmu * dmu.deta, dl.dsd * dsd.deta)
+ derivnew = c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsd * dsd.deta)
derivnew
}), list( .lmean = lmean, .lsd = lsd ))),
weight=expression({
@@ -2000,7 +2284,7 @@ recnormal1.control <- function(save.weight = TRUE, ...)
wznew = cbind(matrix(w, n, M), matrix(0, n, dimm(M)-M))
} else {
wzold = wznew
- wznew = qnupdate(w=w, wzold=wzold, dderiv=(derivold - derivnew),
+ wznew = qnupdate(w=w, wzold = wzold, dderiv=(derivold - derivnew),
deta=etanew-etaold, M = M,
trace=trace) # weights incorporated in args
}
@@ -2015,14 +2299,14 @@ recexp1.control <- function(save.weight = TRUE, ...)
list(save.weight = save.weight)
}
- recexp1 <- function(lrate = "loge", irate = NULL, method.init = 1)
+ recexp1 <- function(lrate = "loge", irate = NULL, imethod = 1)
{
if (mode(lrate) != "character" && mode(lrate) != "name")
lrate = as.character(substitute(lrate))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, positi = TRUE) ||
- method.init > 3.5)
- stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, positi = TRUE) ||
+ imethod > 3.5)
+ stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
blurb = c("Upper record values from a ",
@@ -2042,12 +2326,12 @@ recexp1.control <- function(save.weight = TRUE, ...)
if (!length(etastart)) {
rate.init = if (length( .irate)) rep( .irate, len = n) else {
init.rate =
- if (.method.init == 1) length(y) / y[length(y),1] else
- if (.method.init == 2) 1/mean(y) else 1/median(y)
+ if (.imethod == 1) length(y) / y[length(y), 1] else
+ if (.imethod == 2) 1/mean(y) else 1/median(y)
if (.lrate == "loge") pmax(1/1024, init.rate) else init.rate}
etastart = cbind(theta2eta(rep(rate.init, len = n), .lrate))
}
- }), list( .lrate = lrate, .irate = irate, .method.init = method.init ))),
+ }), list( .lrate = lrate, .irate = irate, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta, .lrate)
}, list( .lrate = lrate ))),
@@ -2062,7 +2346,7 @@ recexp1.control <- function(save.weight = TRUE, ...)
"implemented yet") else {
NN = length(eta)
y = cbind(y)
- sum(w * log(rate)) - w[NN] * rate[NN] * y[NN,1]
+ sum(w * log(rate)) - w[NN] * rate[NN] * y[NN, 1]
}
}, list( .lrate = lrate ))),
vfamily = c("recexp1"),
@@ -2070,14 +2354,14 @@ recexp1.control <- function(save.weight = TRUE, ...)
NN = length(eta)
rate = c(eta2theta(eta, .lrate))
dl.drate = 1 / rate
- dl.drate[NN] = 1/ rate[NN] - y[NN,1]
+ dl.drate[NN] = 1/ rate[NN] - y[NN, 1]
drate.deta = dtheta.deta(rate, .lrate)
- w * cbind(dl.drate * drate.deta)
+ c(w) * cbind(dl.drate * drate.deta)
}), list( .lrate = lrate ))),
weight=expression({
- ed2l.drate2 = -1 / rate^2
- wz = -w * drate.deta^2 * ed2l.drate2
- wz
+ ed2l.drate2 = 1 / rate^2
+ wz = drate.deta^2 * ed2l.drate2
+ c(w) * wz
}))
}
@@ -2091,7 +2375,7 @@ recexp1.control <- function(save.weight = TRUE, ...)
poissonp <- function(ostatistic, dimension = 2,
link = "loge", earg = list(),
- idensity = NULL, method.init = 1) {
+ idensity = NULL, imethod = 1) {
if (!is.Numeric(ostatistic, posit = TRUE, allow = 1, integ = TRUE))
stop("argument 'ostatistic' must be a single positive integer")
if (!is.Numeric(dimension, posit = TRUE, allow = 1, integ = TRUE) ||
@@ -2100,9 +2384,9 @@ recexp1.control <- function(save.weight = TRUE, ...)
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, posit = TRUE, integer = TRUE) ||
- method.init > 2.5)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, posit = TRUE, integer = TRUE) ||
+ imethod > 2.5)
+ stop("argument 'imethod' must be 1 or 2")
if (length(idensity) && !is.Numeric(idensity, posit = TRUE))
stop("bad input for argument 'idensity'")
@@ -2122,7 +2406,7 @@ recexp1.control <- function(save.weight = TRUE, ...)
stop("response must contain positive values only")
predictors.names = namesof("density", .link, earg = .earg, tag = FALSE)
if (!length(etastart)) {
- use.this = if ( .method.init == 1) median(y) + 1/8 else
+ use.this = if ( .imethod == 1) median(y) + 1/8 else
weighted.mean(y,w)
if ( .dimension == 2) {
myratio = exp(lgamma( .ostatistic +0.5) - lgamma( .ostatistic ))
@@ -2139,7 +2423,7 @@ recexp1.control <- function(save.weight = TRUE, ...)
}
}
}), list( .link = link, .earg = earg, .ostatistic = ostatistic,
- .dimension = dimension, .method.init = method.init,
+ .dimension = dimension, .imethod = imethod,
.idensity = idensity ))),
inverse = eval(substitute(function(eta, extra = NULL) {
density = eta2theta(eta, .link, earg = .earg)
@@ -2189,7 +2473,7 @@ recexp1.control <- function(save.weight = TRUE, ...)
weight = eval(substitute(expression({
ed2l.ddensity2 = .ostatistic / density^2
wz = ddensity.deta^2 * ed2l.ddensity2
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg, .ostatistic = ostatistic,
.dimension = dimension ))))
}
diff --git a/R/family.functions.R b/R/family.functions.R
index 0c76de7..919107b 100644
--- a/R/family.functions.R
+++ b/R/family.functions.R
@@ -177,11 +177,14 @@ rss.vgam <- function(z, wz, M)
if (M == 1)
return(sum(c(wz) * c(z^2)))
- wz.z <- mux22(t(wz), z, M, as.mat = TRUE) # else mux2(wz, z)
+
+ wz.z <- mux22(t(wz), z, M = M, as.matrix = TRUE) # else mux2(wz, z)
ans <- sum(wz.z * z)
ans
}
+
+
wweighted.mean <- function(y, w = NULL, matrix.arg = TRUE)
{
if (!matrix.arg)
diff --git a/R/family.genetic.R b/R/family.genetic.R
index 9b73f24..8fcd87b 100644
--- a/R/family.genetic.R
+++ b/R/family.genetic.R
@@ -101,7 +101,7 @@
dl2 = rowSums(y * dP2 / mu)
dl3 = rowSums(y * dP3 / mu)
dPP.deta = dtheta.deta(cbind(p1, p2, f), link = .link, earg = .earg)
- w * cbind(dPP.deta[,1] * dl1,
+ c(w) * cbind(dPP.deta[,1] * dl1,
dPP.deta[,2] * dl2,
dPP.deta[,3] * dl3)
}), list( .link = link, .earg = earg ))),
@@ -116,7 +116,7 @@
dPP[, , i2, drop = TRUE] / mu) *
dPP.deta[, i1] * dPP.deta[, i2]
}
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -197,7 +197,7 @@
dl1 = rowSums(y * dP1 / mu)
dl2 = rowSums(y * dP2 / mu)
dPP.deta = dtheta.deta(pA, link = .link, earg = .earg)
- w * cbind(dPP.deta * dl1,
+ c(w) * cbind(dPP.deta * dl1,
dl2)
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
@@ -212,7 +212,7 @@
dPP[,,i2,drop = TRUE] / mu) *
dPP.deta[,i1] * dPP.deta[,i2]
}
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -279,11 +279,11 @@
-0.5*(1-pp))
dl1 = rowSums(y * dP1 / mu)
dPP.deta = dtheta.deta(pp, link = .link, earg = .earg)
- w * dPP.deta * dl1
+ c(w) * dPP.deta * dl1
}), list( .link = link, .earg = earg ) )),
weight = eval(substitute(expression({
wz = rowSums(dP1 * dP1 / mu) * dPP.deta^2
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ) )))
}
@@ -363,7 +363,7 @@
dl.dp2 = (2*y[,3]+y[,2]+y[,5])/p2 - (2*y[,6]+y[,4]+y[,5])/(1-p1-p2)
dp1.deta = dtheta.deta(p1, link = .link, earg = .earg)
dp2.deta = dtheta.deta(p2, link = .link, earg = .earg)
- w * cbind(dl.dp1 * dp1.deta,
+ c(w) * cbind(dl.dp1 * dp1.deta,
dl.dp2 * dp2.deta)
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
@@ -375,7 +375,7 @@
wz[,iam(1,1,M)] = dp1.deta^2 * ed2l.dp12
wz[,iam(2,2,M)] = dp2.deta^2 * ed2l.dp22
wz[,iam(1,2,M)] = ed2l.dp1dp2 * dp1.deta * dp2.deta
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -469,7 +469,7 @@
dl2 = rowSums(y * dP2 / mu)
dl3 = rowSums(y * dP3 / mu)
dPP.deta = dtheta.deta(cbind(mS, ms, nS), link = .link, earg = .earg)
- w * dPP.deta * cbind(dl1, dl2, dl3)
+ c(w) * dPP.deta * cbind(dl1, dl2, dl3)
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
dPP = array(c(dP1,dP2,dP3), c(n,6,3))
@@ -481,7 +481,7 @@
dPP[,,i2,drop = TRUE] / mu) *
dPP.deta[,i1] * dPP.deta[,i2]
}
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -523,7 +523,7 @@
c(sqrt(mustart[,4]))
pA = if (is.Numeric( .ipA )) rep( .ipA , len = n) else
c(1 - sqrt(mustart[,2] + mustart[,4]))
- pB = 1 - pA - pO
+ pB = abs(1 - pA - pO)
etastart = cbind(theta2eta(pA, .link, earg = .earg),
theta2eta(pB, .link, earg = .earg))
}
@@ -531,7 +531,7 @@
inverse = eval(substitute(function(eta, extra = NULL) {
pA = eta2theta(eta[,1], link = .link, earg = .earg)
pB = eta2theta(eta[,2], link = .link, earg = .earg)
- pO = 1 - pA - pB
+ pO = abs(1 - pA - pB)
cbind(A = pA*(pA+2*pO),
B = pB*(pB+2*pO),
AB = 2*pA*pB,
@@ -548,7 +548,7 @@
index = (p2 >= 0) & (p2 <= 1)
pA = p1
pA[index] = p2[index]
- pB = abs(1-pA-pO)
+ pB = abs(1 - pA - pO)
cbind(theta2eta(pA, .link, earg = .earg),
theta2eta(pB, .link, earg = .earg))
}, list( .link = link, .earg = earg ))),
@@ -562,7 +562,7 @@
deriv = eval(substitute(expression({
ppp = eta2theta(eta[,1], link = .link, earg = .earg)
qqq = eta2theta(eta[,2], link = .link, earg = .earg)
- rrr = 1-ppp-qqq
+ rrr = abs(1 - ppp - qqq)
pbar = 2*rrr+ppp
@@ -577,7 +577,7 @@
dp.deta = dtheta.deta(ppp, link = .link, earg = .earg)
dq.deta = dtheta.deta(qqq, link = .link, earg = .earg)
- w * cbind(dl.dp * dp.deta,
+ c(w) * cbind(dl.dp * dp.deta,
dl.dq * dq.deta)
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
@@ -588,7 +588,7 @@
wz[,iam(1,1,M)] = dp.deta^2 * ed2l.dp2
wz[,iam(2,2,M)] = dq.deta^2 * ed2l.dq2
wz[,iam(1,2,M)] = ed2l.dpdq * dp.deta * dq.deta
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -658,9 +658,9 @@
dl.dp * dp.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
- ed2l.dp2 = 4 * w * p2 * (1/(2+p2) + 2/(1-p2) + 1/p2)
+ ed2l.dp2 = 4 * p2 * (1/(2+p2) + 2/(1-p2) + 1/p2)
wz = cbind((dp.deta^2) * ed2l.dp2)
- wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -718,10 +718,10 @@
},
vfamily = c("AA.Aa.aa", "vgenetic"),
deriv = eval(substitute(expression({
- pA = eta2theta(eta, link = .link, earg = .earg)
- nAA = w*y[,1]
- nAa = w*y[,2]
- naa = w*y[,3]
+ pA = eta2theta(eta, link = .link, earg = .earg)
+ nAA = w * y[,1]
+ nAa = w * y[,2]
+ naa = w * y[,3]
dl.dpA = (2*nAA+nAa)/pA - (nAa+2*naa)/(1-pA)
dpA.deta = dtheta.deta(pA, link = .link, earg = .earg)
dl.dpA * dpA.deta
diff --git a/R/family.glmgam.R b/R/family.glmgam.R
index 63baeea..a0fb87c 100644
--- a/R/family.glmgam.R
+++ b/R/family.glmgam.R
@@ -26,7 +26,7 @@
if (!is.list(earg)) earg = list()
new("vglmff",
- blurb = if (mv) c("Multivariate Binomial model\n\n",
+ blurb = if (mv) c("Multivariate binomial model\n\n",
"Link: ", namesof("mu[,j]", link, earg = earg), "\n",
"Variance: mu[,j]*(1-mu[,j])") else
c("Binomial model\n\n",
@@ -131,8 +131,8 @@
nrow.mu = if (is.matrix(mu)) nrow(mu) else length(mu)
for(ii in 1:M)
dpar[ii] = sum(temp87[,ii]) / (nrow.mu - ncol(x))
- if (is.matrix(y) && length(dimnames(y)[[2]]) == length(dpar))
- names(dpar) = dimnames(y)[[2]]
+ if (is.matrix(y) && length(dimnames(y)[[2]]) == length(dpar))
+ names(dpar) = dimnames(y)[[2]]
} else
dpar = sum(temp87) / (length(mu) - ncol(x))
}
@@ -140,7 +140,7 @@
misc$dispersion <- dpar
misc$default.dispersion <- 1
misc$estimated.dispersion <- .estimated.dispersion
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) dn2 else "mu"
misc$earg = vector("list", M)
@@ -150,11 +150,13 @@
misc$expected = TRUE
}), list( .dispersion = dispersion,
.estimated.dispersion = estimated.dispersion,
- .onedpar = onedpar, .link = link, .mv = mv, .earg = earg ))),
+ .onedpar = onedpar, .mv = mv,
+ .link = link, .earg = earg ))),
link = eval(substitute(function(mu, extra = NULL)
theta2eta(mu, .link, earg = .earg )
, list( .link = link, .earg = earg ))),
- loglikelihood = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ loglikelihood =
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
if (residuals) w * (y / mu - (1-y) / (1-mu)) else {
ycounts = if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
@@ -166,7 +168,7 @@
smallno = 1.0e6 * .Machine$double.eps
smallno = sqrt(.Machine$double.eps)
if (max(abs(ycounts - round(ycounts))) > smallno)
- warning("converting 'ycounts' to integer in @loglikelihood")
+ warning("converting 'ycounts' to integer in @loglikelihood")
ycounts = round(ycounts)
sum((if (is.numeric(extra$orig.w)) extra$orig.w else 1) *
@@ -199,10 +201,10 @@
cbind(w * dtheta.deta(mu, link = .link, earg = .earg)^2 / tmp100)
}
for(ii in 1:M) {
- index200 = !is.finite(tmp200[,ii]) |
- (abs(tmp200[,ii]) < .Machine$double.eps)
- if (any(index200)) { # Diagonal 0's are bad
- tmp200[index200,ii] = .Machine$double.eps
+ index500 = !is.finite(tmp200[, ii]) |
+ (abs(tmp200[, ii]) < .Machine$double.eps)
+ if (any(index500)) { # Diagonal 0's are bad
+ tmp200[index500, ii] = .Machine$double.eps
}
}
tmp200
@@ -263,7 +265,7 @@
misc$dispersion <- dpar
misc$default.dispersion <- 0
misc$estimated.dispersion <- .estimated.dispersion
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) paste("mu", 1:M, sep = "") else "mu"
misc$earg = vector("list", M)
@@ -331,7 +333,7 @@
misc$dispersion <- dpar
misc$default.dispersion <- 0
misc$estimated.dispersion <- .estimated.dispersion
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) paste("mu", 1:M, sep = "") else "mu"
}), list( .dispersion = dispersion,
.estimated.dispersion = estimated.dispersion,
@@ -373,17 +375,23 @@ dinv.gaussian = function(x, mu, lambda, log = FALSE) {
pinv.gaussian = function(q, mu, lambda) {
- if (any(mu <= 0)) stop("mu must be positive")
- if (any(lambda <= 0)) stop("lambda must be positive")
- ans = q
- mu = rep(mu, len = length(q))
- lambda = rep(lambda, len = length(q))
- ans[q <= 0] = 0
- bb = q > 0
- ans[bb] = pnorm(sqrt(lambda[bb]/q[bb])*(q[bb]/mu[bb]-1)) +
- exp(2*lambda[bb]/mu[bb]) *
- pnorm(-sqrt(lambda[bb]/q[bb])*(q[bb]/mu[bb]+1))
- ans
+ if (any(mu <= 0))
+ stop("mu must be positive")
+ if (any(lambda <= 0))
+ stop("lambda must be positive")
+
+ LLL = max(length(q), length(mu), length(lambda))
+ q = rep(q, len = LLL)
+ mu = rep(mu, len = LLL)
+ lambda = rep(lambda, len = LLL)
+ ans = q
+
+ ans[q <= 0] = 0
+ bb = q > 0
+ ans[bb] = pnorm( sqrt(lambda[bb]/q[bb]) * (q[bb]/mu[bb] - 1)) +
+ exp(2*lambda[bb]/mu[bb]) *
+ pnorm(-sqrt(lambda[bb]/q[bb]) * (q[bb]/mu[bb] + 1))
+ ans
}
@@ -391,7 +399,9 @@ rinv.gaussian = function(n, mu, lambda) {
use.n = if ((length.n <- length(n)) > 1) length.n else
if (!is.Numeric(n, integ=TRUE, allow = 1, posit = TRUE))
stop("bad input for argument 'n'") else n
+
mu = rep(mu, len = use.n); lambda = rep(lambda, len = use.n)
+
u = runif(use.n)
Z = rnorm(use.n)^2 # rchisq(use.n, df = 1)
phi = lambda / mu
@@ -414,7 +424,7 @@ rinv.gaussian = function(n, mu, lambda) {
inv.gaussianff = function(lmu = "loge", llambda = "loge",
emu = list(), elambda = list(),
- method.init = 1,
+ imethod = 1,
ilambda = 1,
shrinkage.init = 0.99,
zero = NULL)
@@ -429,9 +439,9 @@ rinv.gaussian = function(n, mu, lambda) {
if (!is.list(emu)) emu = list()
if (!is.list(elambda)) elambda = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
@@ -459,9 +469,9 @@ rinv.gaussian = function(n, mu, lambda) {
if (!length(etastart)) {
init.mu =
- if ( .method.init == 3) {
+ if ( .imethod == 3) {
0 * y + 1.1 * median(y) + 1/8
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
use.this = weighted.mean(y, w)
(1 - .sinit) * y + .sinit * use.this
} else {
@@ -478,19 +488,19 @@ rinv.gaussian = function(n, mu, lambda) {
}), list( .lmu = lmu, .llambda = llambda,
.emu = emu, .elambda = elambda,
.sinit = shrinkage.init,
- .method.init = method.init, .ilambda = ilambda ))),
+ .imethod = imethod, .ilambda = ilambda ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta[,1], link = .lmu, earg = .emu)
}, list( .lmu = lmu, .emu = emu, .elambda = elambda ))),
last = eval(substitute(expression({
misc$link = c(mu = .lmu, lambda = .llambda)
misc$earg = list(mu = .emu, lambda = .elambda)
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$shrinkage.init = .sinit
}), list( .lmu = lmu, .llambda = llambda,
.emu = emu, .elambda = elambda,
.sinit = shrinkage.init,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
lambda <- eta2theta(eta[,2], link = .llambda, earg = .elambda)
@@ -510,8 +520,8 @@ rinv.gaussian = function(n, mu, lambda) {
dl.dmu = lambda * (y - mymu) / mymu^3
dl.dlambda <- 0.5 / lambda - (y-mymu)^2 / (2 * mymu^2 * y)
- w * cbind(dl.dmu * dmu.deta,
- dl.dlambda * dlambda.deta)
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dlambda * dlambda.deta)
}), list( .lmu = lmu, .llambda = llambda,
.emu = emu, .elambda = elambda ))),
weight = eval(substitute(expression({
@@ -519,7 +529,7 @@ rinv.gaussian = function(n, mu, lambda) {
d2l.dlambda2 = 0.5 / (lambda^2)
wz <- cbind(dmu.deta^2 * d2l.dmu2,
dlambda.deta^2 * d2l.dlambda2)
- w * wz
+ c(w) * wz
}), list( .lmu = lmu, .llambda = llambda,
.emu = emu, .elambda = elambda ))))
}
@@ -529,7 +539,7 @@ rinv.gaussian = function(n, mu, lambda) {
poissonff <- function(link = "loge", earg = list(),
dispersion = 1, onedpar = FALSE,
- imu=NULL, method.init = 1,
+ imu = NULL, imethod = 1,
parallel = FALSE, zero = NULL)
{
@@ -537,9 +547,9 @@ rinv.gaussian = function(n, mu, lambda) {
if (mode(link )!= "character" && mode(link )!= "name")
link <- as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ=TRUE, posit = TRUE) ||
- method.init > 3)
- stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ=TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (length(imu) && !is.Numeric(imu, posit = TRUE))
stop("bad input for argument 'imu'")
@@ -579,9 +589,9 @@ rinv.gaussian = function(n, mu, lambda) {
if (!length(etastart)) {
mu.init = pmax(y, 1/8)
for(iii in 1:ncol(y)) {
- if ( .method.init == 2) {
+ if ( .imethod == 2) {
mu.init[,iii] = weighted.mean(y[,iii], w) + 1/8
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
mu.init[,iii] = median(y[,iii]) + 1/8
}
}
@@ -590,7 +600,7 @@ rinv.gaussian = function(n, mu, lambda) {
etastart <- theta2eta(mu.init, link = .link, earg = .earg)
}
}), list( .link = link, .estimated.dispersion = estimated.dispersion,
- .method.init=method.init, .imu=imu, .earg = earg ))),
+ .imethod = imethod, .imu = imu, .earg = earg ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mu = eta2theta(eta, link = .link, earg = .earg)
mu
@@ -617,14 +627,14 @@ rinv.gaussian = function(n, mu, lambda) {
misc$default.dispersion <- 1
misc$estimated.dispersion <- .estimated.dispersion
misc$expected = TRUE
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) dn2 else "mu"
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$earg = vector("list", M)
names(misc$earg) = names(misc$link)
for(ii in 1:M) misc$earg[[ii]] = .earg
- }), list( .dispersion = dispersion, .method.init=method.init,
+ }), list( .dispersion = dispersion, .imethod=imethod,
.estimated.dispersion = estimated.dispersion,
.onedpar = onedpar, .link = link, .earg = earg ))),
link = eval(substitute( function(mu, extra = NULL) {
@@ -756,7 +766,7 @@ poissonqn.control <- function(save.weight=TRUE, ...)
misc$default.dispersion <- 1
misc$estimated.dispersion <- .estimated.dispersion
misc$expected = FALSE
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) dn2 else "mu"
misc$earg = vector("list", M)
@@ -908,8 +918,8 @@ poissonqn.control <- function(save.weight=TRUE, ...)
dlambda.deta = dtheta.deta(theta = lambda, link = .lmean, earg = .emean)
dDisper.deta = dtheta.deta(theta = Disper, link = .ldispersion,
earg = .edispersion)
- w * cbind(dl.dlambda * dlambda.deta,
- dl.dDisper * dDisper.deta)
+ c(w) * cbind(dl.dlambda * dlambda.deta,
+ dl.dDisper * dDisper.deta)
}), list( .lmean = lmean, .emean = emean,
.ldispersion = ldispersion, .edispersion = edispersion ))),
weight = eval(substitute(expression({
@@ -917,7 +927,7 @@ poissonqn.control <- function(save.weight=TRUE, ...)
usethis.lambda = pmax(lambda, .Machine$double.eps / 10000)
wz[,iam(1,1,M)] = (Disper / usethis.lambda) * dlambda.deta^2
wz[,iam(2,2,M)] = (0.5 / Disper^2) * dDisper.deta^2
- w * wz
+ c(w) * wz
}), list( .lmean = lmean, .emean = emean,
.ldispersion = ldispersion, .edispersion = edispersion ))))
}
@@ -1150,7 +1160,7 @@ poissonqn.control <- function(save.weight=TRUE, ...)
mu[cbind(1:extra$n, extra$index9)]
}, list( .link = link, .earg = earg ))),
last = eval(substitute(expression({
- misc$link = rep( .link, length=M)
+ misc$link = rep( .link, length = M)
names(misc$link) = if (M > 1) paste("mu(matched set ",
1:M, ")", sep = "") else "mu"
misc$earg = vector("list", M)
@@ -1337,3 +1347,225 @@ mypool = function(x, index) {
+
+
+
+
+
+ augbinomial = function(link = "logit", earg = list(),
+ mv = FALSE,
+ parallel = TRUE)
+
+{
+ print("hi 20110222")
+
+ if (!is.logical(parallel) ||
+ length(parallel) != 1 ||
+ !parallel)
+ warning("Argument 'parallel' should be assigned 'TRUE' only")
+
+ if (mode(link )!= "character" && mode(link )!= "name")
+ link <- as.character(substitute(link))
+ if (!is.list(earg)) earg = list()
+
+ new("vglmff",
+ blurb = if (mv) c("Augmented multivariate binomial model\n\n",
+ "Link: ",
+ namesof("mu.1[,j]", link, earg = earg), ", ",
+ namesof("mu.2[,j]", link, earg = earg),
+ "\n",
+ "Variance: mu[,j]*(1-mu[,j])") else
+ c("Augmented binomial model\n\n",
+ "Link: ",
+ namesof("mu.1[,j]", link, earg = earg), ", ",
+ namesof("mu.2[,j]", link, earg = earg),
+ "\n",
+ "Variance: mu*(1-mu)"),
+ deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ Deviance.categorical.data.vgam(mu=cbind(mu, 1-mu), y=cbind(y, 1-y),
+ w=w, residuals = residuals,
+ eta=eta, extra=extra)
+ },
+ infos = eval(substitute(function(...) {
+ list(Musual = 2,
+ parallel = .parallel)
+ }, list( .parallel = parallel ))),
+ initialize = eval(substitute(expression({
+
+ Musual = 2
+
+ if ( .mv ) {
+ y = as.matrix(y)
+ M = Musual * ncol(y)
+ if (!all(y == 0 | y == 1))
+ stop("response must contain 0's and 1's only")
+ dn2 = if (is.matrix(y)) dimnames(y)[[2]] else NULL
+ dn2 = if (length(dn2)) {
+ paste("E[", dn2, "]", sep = "")
+ } else {
+ paste("mu", 1:M, sep = "")
+ }
+ predictors.names =
+ c(namesof(if (M > 1) dn2 else
+ "mu.1", .link, earg = .earg, short = TRUE),
+ namesof(if (M > 1) dn2 else
+ "mu.2", .link, earg = .earg, short = TRUE))
+ NOS = M / Musual
+ predictors.names =
+ predictors.names[interleave.VGAM(Musual * NOS, M = Musual)]
+
+
+ if (!length(mustart) && !length(etastart))
+ mustart = (0.5 + w * y) / (1 + w)
+ } else {
+
+ dn2 = c("mu1.", "mu2.")
+ M = Musual
+
+
+
+ if (!all(w == 1))
+ extra$orig.w = w
+
+
+ NCOL = function (x) if (is.array(x) && length(dim(x)) > 1 ||
+ is.data.frame(x)) ncol(x) else as.integer(1)
+ if (NCOL(y) == 1) {
+ if (is.factor(y)) y = (y != levels(y)[1])
+ nvec = rep(1, n)
+ y[w == 0] <- 0
+ if (!all(y == 0 || y == 1))
+ stop("response values 'y' must be 0 or 1")
+ if (!length(mustart) && !length(etastart))
+ mustart = (0.5 + w * y) / (1 + w)
+
+
+ no.successes = y
+ if (min(y) < 0)
+ stop("Negative data not allowed!")
+ if (any(abs(no.successes - round(no.successes)) > 1.0e-8))
+ stop("Number of successes must be integer-valued")
+ } else if (NCOL(y) == 2) {
+ if (min(y) < 0)
+ stop("Negative data not allowed!")
+ if (any(abs(y - round(y)) > 1.0e-8))
+ stop("Count data must be integer-valued")
+ y = round(y)
+ nvec = y[,1] + y[,2]
+ y = ifelse(nvec > 0, y[,1] / nvec, 0)
+ w = w * nvec
+ if (!length(mustart) && !length(etastart))
+ mustart = (0.5 + nvec * y) / (1 + nvec)
+ } else {
+ stop("for the binomialff family, response 'y' must be a ",
+ "vector of 0 and 1's\n",
+ "or a factor (first level = fail, ",
+ "other levels = success),\n",
+ "or a 2-column matrix where col 1 is the no. of ",
+ "successes and col 2 is the no. of failures")
+ }
+ predictors.names =
+ c(namesof("mu.1", .link, earg = .earg, short = TRUE),
+ namesof("mu.2", .link, earg = .earg, short = TRUE))
+ }
+ print("head(etastart) b 20110221")
+ print( head(etastart) )
+ }), list( .link = link, .mv = mv, .earg = earg ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ Mdiv2 = ncol(eta) / 2
+ index1 = 2*(1:Mdiv2) - 1
+ mu = eta2theta(eta[, index1],
+ link = .link, earg = .earg)
+ mu
+ }, list( .link = link, .earg = earg ))),
+ last = eval(substitute(expression({
+ misc$mv = .mv
+ misc$link = rep( .link, length = M)
+ names(misc$link) = if (M > 1) dn2 else "mu"
+
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:M) misc$earg[[ii]] = .earg
+
+ misc$parallel = .parallel
+ misc$expected = TRUE
+ }), list( .link = link, .mv = mv, .earg = earg,
+ .parallel = parallel ))),
+ link = eval(substitute(function(mu, extra = NULL) {
+ usualanswer = theta2eta(mu, .link, earg = .earg )
+ kronecker(usualanswer, matrix(1, 1, 2))
+ }, list( .link = link, .earg = earg ))),
+ loglikelihood =
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ if (residuals) w * (y / mu - (1-y) / (1-mu)) else {
+
+ ycounts = if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
+ y * w # Convert proportions to counts
+ nvec = if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
+ round(w)
+
+ smallno = 1.0e6 * .Machine$double.eps
+ smallno = sqrt(.Machine$double.eps)
+ if (max(abs(ycounts - round(ycounts))) > smallno)
+ warning("converting 'ycounts' to integer in @loglikelihood")
+ ycounts = round(ycounts)
+
+ sum((if (is.numeric(extra$orig.w)) extra$orig.w else 1) *
+ dbinom(x = ycounts, size = nvec, prob = mu,
+ log = TRUE))
+ }
+ },
+ vfamily = c("augbinomial", "vcategorical"),
+ deriv = eval(substitute(expression({
+ Musual = 2
+ Mdiv2 = M / 2
+
+ NOS = M / Musual
+
+ Konst1 = 1 # Works with this
+ deriv1 = Konst1 * w *
+ if ( .link == "logit") {
+ y * (1 - mu)
+ } else {
+ stop("this is not programmed in yet")
+ dtheta.deta(mu, link = .link, earg = .earg ) *
+ (y / mu - 1.0) / (1.0 - mu)
+ }
+ deriv2 = Konst1 * w *
+ if ( .link == "logit") {
+ -(1 - y) * mu
+ } else {
+ stop("this is not programmed in yet")
+ dtheta.deta(mu, link = .link, earg = .earg ) *
+ (y / mu - 1.0) / (1.0 - mu)
+ }
+
+ myderiv = (cbind(deriv1,
+ deriv2))[, interleave.VGAM(Musual * NOS, M = Musual)]
+ myderiv
+ }), list( .link = link, .earg = earg ))),
+ weight = eval(substitute(expression({
+ tmp100 = mu * (1.0 - mu)
+
+ tmp200 = if ( .link == "logit") {
+ cbind(w * tmp100)
+ } else {
+ cbind(w * dtheta.deta(mu, link = .link, earg = .earg)^2 / tmp100)
+ }
+
+ wk_wt1 = (Konst1^2) * tmp200 * (1 - mu)
+ wk_wt2 = (Konst1^2) * tmp200 * mu
+
+
+
+
+ my_wk_wt = cbind(wk_wt1, wk_wt2)
+ my_wk_wt = my_wk_wt[, interleave.VGAM(Musual * NOS, M = Musual)]
+ my_wk_wt
+ }), list( .link = link, .earg = earg ))))
+}
+
+
+
+
+
diff --git a/R/family.loglin.R b/R/family.loglin.R
index 512e4bf..6f8ad2c 100644
--- a/R/family.loglin.R
+++ b/R/family.loglin.R
@@ -76,9 +76,9 @@ loglinb2 <- function(exchangeable = FALSE, zero = NULL)
du0.du1 <- -(exp(u1) + exp(u1 + u2 + u12)) / denom
du0.du2 <- -(exp(u2) + exp(u1 + u2 + u12)) / denom
du0.du12 <- -exp(u1 + u2 + u12) / denom
- w * cbind(du0.du1 + y[,1],
- du0.du2 + y[,2],
- du0.du12 + y[,1]*y[,2])
+ c(w) * cbind(du0.du1 + y[,1],
+ du0.du2 + y[,2],
+ du0.du12 + y[,1] * y[,2])
}),
weight = expression({
d2u0.du1.2 <- -(exp(u1) + exp(u1 + u2 + u12)) * (1+exp(u2)) / denom^2
@@ -95,7 +95,7 @@ loglinb2 <- function(exchangeable = FALSE, zero = NULL)
wz[,iam(1,2,M)] <- -d2u0.du1u2
wz[,iam(1,3,M)] <- -d2u0.du1u3
wz[,iam(2,3,M)] <- -d2u0.du2u3
- w * wz
+ c(w) * wz
}))
}
@@ -195,12 +195,12 @@ loglinb3 <- function(exchangeable = FALSE, zero = NULL)
deriv = expression({
eval(extra$my.expression)
eval(extra$deriv.expression)
- w * cbind(-A1/denom + y[,1],
- -A2/denom + y[,2],
- -A3/denom + y[,3],
- -A12/denom + y[,1]*y[,2],
- -A13/denom + y[,1]*y[,3],
- -A23/denom + y[,2]*y[,3])
+ c(w) * cbind(-A1/denom + y[,1],
+ -A2/denom + y[,2],
+ -A3/denom + y[,3],
+ -A12/denom + y[,1]*y[,2],
+ -A13/denom + y[,1]*y[,3],
+ -A23/denom + y[,2]*y[,3])
}),
weight = expression({
u0 <- -log(denom)
@@ -230,8 +230,8 @@ loglinb3 <- function(exchangeable = FALSE, zero = NULL)
wz[,iam(3,4,M)] <- (allterms - expu0 * A3 * A12)
wz[,iam(3,5,M)] <- A13 * (1 - expu0 * A3)
wz[,iam(3,6,M)] <- A23 * (1 - expu0 * A3)
- wz <- w * expu0 * wz
- wz
+ wz <- expu0 * wz
+ c(w) * wz
}))
}
diff --git a/R/family.mixture.R b/R/family.mixture.R
index b1e1aa1..d454847 100644
--- a/R/family.mixture.R
+++ b/R/family.mixture.R
@@ -163,11 +163,11 @@ mix2normal1 = function(lphi="logit",
dl.dmu2 = (1-phi) * df2.dmu2 / pdf
dl.dsd1 = phi * df1.dsd1 / pdf
dl.dsd2 = (1-phi) * df2.dsd2 / pdf
- w * cbind(dl.dphi * dphi.deta,
- dl.dmu1 * dmu1.deta,
- dl.dsd1 * dsd1.deta,
- dl.dmu2 * dmu2.deta,
- dl.dsd2 * dsd2.deta)
+ c(w) * cbind(dl.dphi * dphi.deta,
+ dl.dmu1 * dmu1.deta,
+ dl.dsd1 * dsd1.deta,
+ dl.dmu2 * dmu2.deta,
+ dl.dsd2 * dsd2.deta)
}), list(.lphi=lphi, .lmu=lmu, .lsd=lsd,
.ephi=ephi, .emu1=emu1, .emu2=emu2, .esd1=esd1, .esd2=esd2,
.nsimEIM=nsimEIM ))),
@@ -195,10 +195,14 @@ mix2normal1 = function(lphi="logit",
wz = if (intercept.only)
matrix(colMeans(run.mean), n, dimm(M), byrow=TRUE) else run.mean
- dtheta.detas = cbind(dphi.deta,dmu1.deta,dsd1.deta,dmu2.deta,dsd2.deta)
+ dtheta.detas = cbind(dphi.deta,
+ dmu1.deta,
+ dsd1.deta,
+ dmu2.deta,
+ dsd2.deta)
index0 = iam(NA, NA, M=M, both=TRUE, diag=TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list(.lphi=lphi, .lmu=lmu, .nsimEIM=nsimEIM ))))
}
@@ -305,9 +309,9 @@ mix2poisson = function(lphi="logit", llambda="loge",
dl.dphi = (f1-f2) / pdf
dl.dlambda1 = phi * df1.dlambda1 / pdf
dl.dlambda2 = (1-phi) * df2.dlambda2 / pdf
- w * cbind(dl.dphi * dphi.deta,
- dl.dlambda1 * dlambda1.deta,
- dl.dlambda2 * dlambda2.deta)
+ c(w) * cbind(dl.dphi * dphi.deta,
+ dl.dlambda1 * dlambda1.deta,
+ dl.dlambda2 * dlambda2.deta)
}), list(.lphi=lphi, .llambda=llambda,
.ephi=ephi, .el1=el1, .el2=el2, .nsimEIM=nsimEIM ))),
weight = eval(substitute(expression({
@@ -352,7 +356,7 @@ mix2poisson = function(lphi="logit", llambda="loge",
dtheta.detas = cbind(dphi.deta, dlambda1.deta, dlambda2.deta)
index0 = iam(NA, NA, M=M, both=TRUE, diag=TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list(.lphi=lphi, .llambda=llambda,
.ephi=ephi, .el1=el1, .el2=el2, .nsimEIM=nsimEIM ))))
}
@@ -460,9 +464,9 @@ mix2exp = function(lphi="logit", llambda="loge",
dl.dphi = (f1-f2) / pdf
dl.dlambda1 = phi * df1.dlambda1 / pdf
dl.dlambda2 = (1-phi) * df2.dlambda2 / pdf
- w * cbind(dl.dphi * dphi.deta,
- dl.dlambda1 * dlambda1.deta,
- dl.dlambda2 * dlambda2.deta)
+ c(w) * cbind(dl.dphi * dphi.deta,
+ dl.dlambda1 * dlambda1.deta,
+ dl.dlambda2 * dlambda2.deta)
}), list(.lphi=lphi, .llambda=llambda,
.ephi=ephi, .el1=el1, .el2=el2 ))),
weight = eval(substitute(expression({
@@ -504,7 +508,7 @@ mix2exp = function(lphi="logit", llambda="loge",
dtheta.detas = cbind(dphi.deta, dlambda1.deta, dlambda2.deta)
index0 = iam(NA, NA, M=M, both=TRUE, diag=TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list(.lphi=lphi, .llambda=llambda,
.ephi=ephi, .el1=el1, .el2=el2, .nsimEIM=nsimEIM ))))
}
diff --git a/R/family.nonlinear.R b/R/family.nonlinear.R
index 6f7ec3c..f503c7f 100644
--- a/R/family.nonlinear.R
+++ b/R/family.nonlinear.R
@@ -83,7 +83,7 @@ micmen.control <- function(save.weight = TRUE, ...)
micmen <- function(rpar = 0.001, divisor = 10,
init1 = NULL, init2 = NULL,
- method.init = 1,
+ imethod = 1,
oim = TRUE,
link1 = "identity", link2 = "identity",
firstDeriv = c("nsimEIM", "rpar"),
@@ -100,10 +100,10 @@ micmen <- function(rpar = 0.001, divisor = 10,
firstDeriv <- match.arg(firstDeriv, c("nsimEIM", "rpar"))[1]
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE))
- stop("argument 'method.init' must be integer")
- if (method.init > 3)
- stop("argument 'method.init' must be 1, 2, or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE))
+ stop("argument 'imethod' must be integer")
+ if (imethod > 3)
+ stop("argument 'imethod' must be 1, 2, or 3")
if (!is.Numeric(prob.x, allow = 2))
stop("argument 'prob.x' must be numeric and of length two")
if (!is.logical(oim) || length(oim) != 1)
@@ -111,9 +111,9 @@ micmen <- function(rpar = 0.001, divisor = 10,
stopifnot(nsimEIM > 10, length(nsimEIM)==1, nsimEIM==round(nsimEIM))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("'imethod' must be 1 or 2 or 3")
estimated.dispersion <- (dispersion == 0)
@@ -163,14 +163,14 @@ micmen <- function(rpar = 0.001, divisor = 10,
stop("cannot handle 'mustart' or 'coefstart'")
if (!length(etastart)) {
- if ( .method.init == 3 ) {
+ if ( .imethod == 3 ) {
index0 <- (1:n)[Xm2 <= quantile(Xm2, prob = .prob.x[2] )]
init1 <- median(y[index0])
init2 <- median(init1 * Xm2 / y - Xm2)
}
- if ( .method.init == 1 || .method.init == 2) {
+ if ( .imethod == 1 || .imethod == 2) {
mysubset <- subset_lohi(Xm2, y, prob.x = .prob.x,
- type = ifelse( .method.init == 1, "median", "wtmean"),
+ type = ifelse( .imethod == 1, "median", "wtmean"),
wtvec = w)
mat.x <- with(mysubset, cbind(c(x1bar, x2bar), -c(y1bar, y2bar)))
@@ -196,7 +196,7 @@ micmen <- function(rpar = 0.001, divisor = 10,
}), list( .init1 = init1, .link1 = link1, .earg1 = earg1,
.init2 = init2, .link2 = link2, .earg2 = earg2,
- .method.init = method.init,
+ .imethod = imethod,
.prob.x = prob.x ))),
inverse = eval(substitute(function(eta, extra = NULL) {
theta1 <- eta2theta(eta[,1], .link1, earg = .earg1)
@@ -219,7 +219,7 @@ micmen <- function(rpar = 0.001, divisor = 10,
misc$dispersion <- dpar
misc$default.dispersion <- 0
misc$estimated.dispersion <- .estimated.dispersion
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$nsimEIM <- .nsimEIM
misc$firstDeriv <- .firstDeriv
misc$oim <- .oim
@@ -228,7 +228,7 @@ micmen <- function(rpar = 0.001, divisor = 10,
}), list( .link1 = link1, .earg1 = earg1,
.link2 = link2, .earg2 = earg2,
.dispersion = dispersion,
- .method.init = method.init,
+ .imethod = imethod,
.firstDeriv = firstDeriv,
.oim = oim, .rpar = rpar,
.nsimEIM = nsimEIM,
@@ -325,7 +325,7 @@ micmen <- function(rpar = 0.001, divisor = 10,
}
- w * wz
+ c(w) * wz
}), list( .link1 = link1, .link2 = link2,
.firstDeriv = firstDeriv,
.nsimEIM = nsimEIM, .oim = oim ))))
@@ -350,7 +350,7 @@ skira.control <- function(save.weight = TRUE, ...)
link1 = "identity", link2 = "identity",
earg1 = list(),
earg2 = list(),
- method.init = 1,
+ imethod = 1,
oim = TRUE,
prob.x = c(0.15, 0.85),
smallno = 1.0e-3,
@@ -370,10 +370,10 @@ skira.control <- function(save.weight = TRUE, ...)
if (mode(link2) != "character" && mode(link2) != "name")
link2 <- as.character(substitute(link2))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE))
- stop("argument 'method.init' must be integer")
- if (method.init > 5)
- stop("argument 'method.init' must be 1, 2, 3, 4 or 5")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE))
+ stop("argument 'imethod' must be integer")
+ if (imethod > 5)
+ stop("argument 'imethod' must be 1, 2, 3, 4 or 5")
if (!is.list(earg1))
earg1 = list()
if (!is.list(earg2))
@@ -422,10 +422,10 @@ skira.control <- function(save.weight = TRUE, ...)
min.q <- quantile(Xm2, probs = .prob.x[1] )
max.q <- quantile(Xm2, probs = .prob.x[2] )
- if ( .method.init == 3 || .method.init == 2 ) {
+ if ( .imethod == 3 || .imethod == 2 ) {
mysubset <- subset_lohi(Xm2, y, prob.x = .prob.x,
- type = ifelse( .method.init == 2, "median", "wtmean"),
+ type = ifelse( .imethod == 2, "median", "wtmean"),
wtvec = w)
mat.x <- with(mysubset, cbind(c(1, 1),
@@ -433,7 +433,7 @@ skira.control <- function(save.weight = TRUE, ...)
theta.temp <- solve(mat.x, c(1, 1))
init1 <- theta.temp[1]
init2 <- theta.temp[2]
- } else if ( .method.init == 1 ) {
+ } else if ( .imethod == 1 ) {
yy <- as.vector( y[(Xm2 > min.q) & (Xm2 < max.q)])
xx <- as.vector(Xm2[(Xm2 > min.q) & (Xm2 < max.q)])
ww <- as.vector( w[(Xm2 > min.q) & (Xm2 < max.q)])
@@ -447,9 +447,9 @@ skira.control <- function(save.weight = TRUE, ...)
mylm.wfit <- lm.wfit(x = cbind(1, xx), y = 1 / yy, w = wt.temp)
init1 <- mylm.wfit$coef[1]
init2 <- mylm.wfit$coef[2]
- } else if (( .method.init == 4) || ( .method.init == 5)) {
+ } else if (( .imethod == 4) || ( .imethod == 5)) {
- tempfit <- if ( .method.init == 4 ) {
+ tempfit <- if ( .imethod == 4 ) {
fitted(loess(y ~ Xm2))
} else {
fitted(smooth.spline(Xm2, y, w = w, df = 2.0))
@@ -465,7 +465,7 @@ skira.control <- function(save.weight = TRUE, ...)
init1 <- theta.temp[1]
init2 <- theta.temp[2]
} else {
- stop("argument 'method.init' unmatched")
+ stop("argument 'imethod' unmatched")
}
mu <- 1 / (init1 + init2 * Xm2)
@@ -474,7 +474,7 @@ skira.control <- function(save.weight = TRUE, ...)
matplot(Xm2, cbind(y, mu), col = c("blue", "green"),
main = "Initial values in green")
- if ( .method.init == 1 ) {
+ if ( .imethod == 1 ) {
points(Xm2, 1 / (init1 + init2 * Xm2), col = "green")
} else {
with(mysubset,
@@ -494,7 +494,7 @@ skira.control <- function(save.weight = TRUE, ...)
.init2 = init2, .link2 = link2, .earg2 = earg2,
.smallno = smallno, .prob.x = prob.x,
.nsimEIM = nsimEIM,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
theta1 <- eta2theta(eta[, 1], .link1, earg = .earg1)
theta2 <- eta2theta(eta[, 2], .link2, earg = .earg2)
@@ -515,14 +515,14 @@ skira.control <- function(save.weight = TRUE, ...)
misc$dispersion <- dpar
misc$default.dispersion <- 0
misc$estimated.dispersion <- .estimated.dispersion
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$nsimEIM <- .nsimEIM
misc$firstDeriv <- .firstDeriv
misc$oim <- .oim
}), list( .link1 = link1, .earg1 = earg1,
.link2 = link2, .earg2 = earg2,
.dispersion = dispersion, .rpar = rpar,
- .method.init = method.init, .nsimEIM = nsimEIM,
+ .imethod = imethod, .nsimEIM = nsimEIM,
.firstDeriv = firstDeriv, .oim = oim,
.estimated.dispersion = estimated.dispersion ))),
summary.dispersion = FALSE,
@@ -603,7 +603,7 @@ skira.control <- function(save.weight = TRUE, ...)
}
- w * wz
+ c(w) * wz
}), list( .link1 = link1, .link2 = link2,
.firstDeriv = firstDeriv,
.nsimEIM = nsimEIM, .oim = oim ))))
diff --git a/R/family.normal.R b/R/family.normal.R
index 25e1f67..d91a39c 100644
--- a/R/family.normal.R
+++ b/R/family.normal.R
@@ -10,13 +10,15 @@
VGAM.weights.function = function(w, M, n) {
+
+
ncolw = ncol(as.matrix(w))
if (ncolw == 1) {
wz = matrix(w, nrow=n, ncol=M) # w_i * diag(M)
} else if (ncolw == M) {
wz = as.matrix(w)
} else if (ncolw < M && M > 1) {
- stop("ambiguous input for weights")
+ stop("ambiguous input for 'weights'")
} else if (ncolw > M*(M+1)/2) {
stop("too many columns")
} else {
@@ -32,8 +34,12 @@ VGAM.weights.function = function(w, M, n) {
- gaussianff = function(dispersion=0, parallel = FALSE, zero = NULL)
+
+
+
+ gaussianff = function(dispersion = 0, parallel = FALSE, zero = NULL)
{
+
if (!is.Numeric(dispersion, allow = 1) || dispersion < 0)
stop("bad input for argument 'dispersion'")
estimated.dispersion = dispersion == 0
@@ -42,22 +48,22 @@ VGAM.weights.function = function(w, M, n) {
blurb = c("Vector linear/additive model\n",
"Links: identity for Y1,...,YM"),
constraints = eval(substitute(expression({
- constraints = cm.vgam(matrix(1,M,1), x, .parallel, constraints)
+ constraints = cm.vgam(matrix(1, M, 1), x, .parallel, constraints)
constraints = cm.zero.vgam(constraints, x, .zero, M)
}), list( .parallel = parallel, .zero = zero ))),
deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
M = if (is.matrix(y)) ncol(y) else 1
n = if (is.matrix(y)) nrow(y) else length(y)
- wz = VGAM.weights.function(w=w, M=M, n=n)
+ wz = VGAM.weights.function(w = w, M = M, n = n)
if (residuals) {
if (M > 1) {
- U <- vchol(wz, M=M, n=n)
- temp = mux22(U, y-mu, M=M, upper = TRUE, as.matrix = TRUE)
+ U <- vchol(wz, M = M, n = n)
+ temp = mux22(U, y-mu, M = M, upper = TRUE, as.matrix = TRUE)
dimnames(temp) = dimnames(y)
temp
} else (y-mu) * sqrt(wz)
} else
- rss.vgam(y-mu, wz=wz, M=M)
+ rss.vgam(y-mu, wz = wz, M = M)
},
initialize = eval(substitute(expression({
if (is.R())
@@ -81,9 +87,9 @@ VGAM.weights.function = function(w, M, n) {
dimnames(fit$fitted.values) = dy
dpar = .dispersion
if (!dpar) {
- wz = VGAM.weights.function(w=w, M=M, n=n)
- temp = rss.vgam(y-mu, wz=wz, M=M)
- dpar = temp / (length(y) -
+ wz = VGAM.weights.function(w = w, M = M, n = n)
+ temp5 = rss.vgam(y-mu, wz = wz, M = M)
+ dpar = temp5 / (length(y) -
(if(is.numeric(ncol(X_vlm_save))) ncol(X_vlm_save) else 0))
}
misc$dispersion = dpar
@@ -99,20 +105,48 @@ VGAM.weights.function = function(w, M, n) {
while (exists("CQO.FastAlgorithm"))
remove("CQO.FastAlgorithm")
}
- }), list( .dispersion=dispersion,
- .estimated.dispersion=estimated.dispersion ))),
- loglikelihood = function(mu,y,w,residuals = FALSE, eta, extra = NULL) {
+ }), list( .dispersion = dispersion,
+ .estimated.dispersion = estimated.dispersion ))),
+ loglikelihood =
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
M = if (is.matrix(y)) ncol(y) else 1
n = if (is.matrix(y)) nrow(y) else length(y)
- wz = VGAM.weights.function(w=w, M=M, n=n)
- temp = rss.vgam(y-mu, wz=wz, M=M)
- -0.5 * temp
+ wz = VGAM.weights.function(w = w, M = M, n = n)
+ temp1 = rss.vgam(y-mu, wz = wz, M = M)
+
+
+
+ if (M == 1 || ncol(wz) == M) {
+ -0.5 * temp1 + 0.5 * sum(log(wz)) - n * (M / 2) * log(2*pi)
+ } else {
+ if (all(wz[1, ] == apply(wz, 2, min)) &&
+ all(wz[1, ] == apply(wz, 2, max))) {
+ onewz = m2adefault(wz[1, , drop = FALSE], M = M)
+ onewz = onewz[,,1] # M x M
+
+ logdet <- sum(log(eigen(onewz, symmetric = TRUE,
+ only.values = TRUE)$values))
+ logretval <- -0.5 * temp1 + 0.5 * n * logdet -
+ n * (M / 2) * log(2*pi)
+ logretval
+ } else {
+ logretval = -0.5 * temp1 - n * (M / 2) * log(2*pi)
+ for (ii in 1:n) {
+ onewz = m2adefault(wz[ii, , drop = FALSE], M = M)
+ onewz = onewz[,,1] # M x M
+ logdet <- sum(log(eigen(onewz, symmetric = TRUE,
+ only.values = TRUE)$values))
+ logretval = logretval + 0.5 * logdet
+ }
+ logretval
+ }
+ }
},
link = function(mu, extra = NULL) mu,
vfamily = "gaussianff",
deriv=expression({
- wz = VGAM.weights.function(w=w, M=M, n=n)
- mux22(cc=t(wz), xmat=y-mu, M=M, as.mat = TRUE)
+ wz = VGAM.weights.function(w = w, M = M, n = n)
+ mux22(cc=t(wz), xmat=y-mu, M = M, as.matrix = TRUE)
}),
weight= expression({
wz
@@ -125,41 +159,46 @@ VGAM.weights.function = function(w, M, n) {
-dposnorm = function(x, mean = 0, sd = 1, log = FALSE) {
- log.arg = log
- rm(log)
- if (!is.logical(log.arg) || length(log.arg)!=1)
- stop("bad input for argument 'log'")
- L = max(length(x), length(mean), length(sd))
- x = rep(x, len=L); mean = rep(mean, len=L); sd = rep(sd, len=L);
- if (log.arg) {
- ifelse(x < 0, log(0), dnorm(x, m=mean, sd = sd, log = TRUE) -
- pnorm(mean/sd, log = TRUE))
- } else {
- ifelse(x < 0, 0, dnorm(x=x, me=mean, sd = sd) / pnorm(mean/sd))
- }
+
+
+dposnorm = function(x, mean = 0, sd = 1, log = FALSE) {
+ log.arg = log
+ rm(log)
+ if (!is.logical(log.arg) || length(log.arg)!=1)
+ stop("bad input for argument 'log'")
+ L = max(length(x), length(mean), length(sd))
+ x = rep(x, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+
+ if (log.arg) {
+ ifelse(x < 0, log(0), dnorm(x, m=mean, sd = sd, log = TRUE) -
+ pnorm(mean/sd, log = TRUE))
+ } else {
+ ifelse(x < 0, 0, dnorm(x = x, me=mean, sd = sd) / pnorm(mean/sd))
+ }
}
pposnorm = function(q, mean = 0, sd = 1) {
- L = max(length(q), length(mean), length(sd))
- q = rep(q, len=L); mean = rep(mean, len=L); sd = rep(sd, len=L);
- ifelse(q < 0, 0, (pnorm(q, mean = mean, sd = sd) -
- pnorm(0, mean = mean, sd = sd)) / pnorm(q = mean/sd))
+ L = max(length(q), length(mean), length(sd))
+ q = rep(q, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ ifelse(q < 0, 0, (pnorm(q, mean = mean, sd = sd) -
+ pnorm(0, mean = mean, sd = sd)) / pnorm(q = mean/sd))
}
qposnorm = function(p, mean = 0, sd = 1) {
- if (!is.Numeric(p, posit = TRUE) || max(p) >= 1)
- stop("bad input for argument 'p'")
- qnorm(p=p+(1-p)*pnorm(0, mean = mean, sd = sd), mean = mean, sd = sd)
+ if (!is.Numeric(p, posit = TRUE) || max(p) >= 1)
+ stop("bad input for argument 'p'")
+ qnorm(p = p + (1-p) * pnorm(0, mean = mean, sd = sd),
+ mean = mean, sd = sd)
}
rposnorm = function(n, mean = 0, sd = 1) {
- if (!is.Numeric(n, integ = TRUE, posit = TRUE))
- stop("bad input for argument 'n'")
- mean = rep(mean, length=n)
- sd = rep(sd, length=n)
- qnorm(p=runif(n, min=pnorm(0, m=mean, sd = sd)), m=mean, sd = sd)
+ if (!is.Numeric(n, integ = TRUE, posit = TRUE))
+ stop("bad input for argument 'n'")
+ mean = rep(mean, length = n)
+ sd = rep(sd, length = n)
+ qnorm(p = runif(n, min = pnorm(0, m = mean, sd = sd)),
+ m = mean, sd = sd)
}
@@ -174,7 +213,7 @@ rposnorm = function(n, mean = 0, sd = 1) {
posnormal1 = function(lmean = "identity", lsd = "loge",
emean = list(), esd = list(),
imean = NULL, isd = NULL,
- nsimEIM=100, zero = NULL)
+ nsimEIM = 100, zero = NULL)
{
warning("this VGAM family function is not working properly yet")
@@ -182,15 +221,18 @@ rposnorm = function(n, mean = 0, sd = 1) {
lmean = as.character(substitute(lmean))
if (mode(lsd) != "character" && mode(lsd) != "name")
lsd = as.character(substitute(lsd))
+
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (length(isd) && !is.Numeric(isd, posit = TRUE))
stop("bad input for argument 'isd'")
+
if (!is.list(emean)) emean = list()
if (!is.list(esd)) esd = list()
+
if (length(nsimEIM))
- if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 10)
- stop("'nsimEIM' should be an integer greater than 10")
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 10)
+ stop("argument 'nsimEIM' should be an integer greater than 10")
new("vglmff",
blurb = c("Positive (univariate) normal distribution\n\n",
@@ -209,10 +251,10 @@ rposnorm = function(n, mean = 0, sd = 1) {
c(namesof("mean", .lmean, earg = .emean, tag = FALSE),
namesof("sd", .lsd, earg = .esd, tag = FALSE))
if (!length(etastart)) {
- init.me = if (length( .imean)) rep( .imean, len=n) else NULL
- init.sd = if (length( .isd )) rep( .isd , len=n) else NULL
- if (!length(init.me)) init.me = rep(quantile(y, probs=0.40), len=n)
- if (!length(init.sd)) init.sd = rep(sd(y)*1.2, len=n)
+ init.me = if (length( .imean)) rep( .imean, len = n) else NULL
+ init.sd = if (length( .isd )) rep( .isd , len = n) else NULL
+ if (!length(init.me)) init.me = rep(quantile(y, probs=0.40), len = n)
+ if (!length(init.sd)) init.sd = rep(sd(y)*1.2, len = n)
etastart = cbind(theta2eta(init.me, .lmean, earg = .emean),
theta2eta(init.sd, .lsd, earg = .esd))
}
@@ -231,7 +273,7 @@ rposnorm = function(n, mean = 0, sd = 1) {
}), list( .lmean = lmean, .lsd = lsd, .emean = emean, .esd = esd,
.nsimEIM = nsimEIM ))),
loglikelihood=eval(substitute(
- function(mu,y,w,residuals = FALSE, eta, extra = NULL) {
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
mymu = eta2theta(eta[,1], .lmean, earg = .emean)
mysd = eta2theta(eta[,2], .lsd, earg = .esd)
if (residuals) stop("loglikelihood residuals ",
@@ -256,7 +298,7 @@ rposnorm = function(n, mean = 0, sd = 1) {
}), list( .lmean = lmean, .lsd = lsd, .emean = emean, .esd = esd ))),
weight = eval(substitute(expression({
run.varcov = 0
- ind1 = iam(NA, NA, M=M, both = TRUE, diag = TRUE)
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
if (length( .nsimEIM )) {
for(ii in 1:( .nsimEIM )) {
ysim <- rposnorm(n, m=mymu, sd = mysd)
@@ -287,7 +329,7 @@ rposnorm = function(n, mean = 0, sd = 1) {
wz[,iam(1,1,M)] = ed2l.dmu2 * dmu.deta^2
wz[,iam(2,2,M)] = ed2l.dsd2 * dsd.deta^2
wz[,iam(1,2,M)] = ed2l.dmusd * dsd.deta * dmu.deta
- wz = w * wz
+ wz = c(w) * wz
}
wz
}), list( .lmean = lmean, .lsd = lsd, .emean = emean, .esd = esd,
@@ -304,15 +346,15 @@ dbetanorm = function(x, shape1, shape2, mean = 0, sd = 1, log = FALSE) {
stop("bad input for argument 'log'")
ans =
if (is.R() && log.arg) {
- dnorm(x=x, mean = mean, sd = sd, log = TRUE) +
+ dnorm(x = x, mean = mean, sd = sd, log = TRUE) +
(shape1-1) * pnorm(q = x, mean = mean, sd = sd, log = TRUE) +
(shape2-1) * pnorm(q = x, mean = mean, sd = sd, log = TRUE,
lower = FALSE) -
lbeta(shape1, shape2)
} else {
- dnorm(x=x, mean = mean, sd = sd) *
- pnorm(q=x, mean = mean, sd = sd)^(shape1-1) *
- pnorm(q=x, mean = mean, sd = sd,
+ dnorm(x = x, mean = mean, sd = sd) *
+ pnorm(q = x, mean = mean, sd = sd)^(shape1-1) *
+ pnorm(q = x, mean = mean, sd = sd,
lower = FALSE)^(shape2-1) / beta(shape1, shape2)
}
if (!is.R() && log.arg) ans = log(ans)
@@ -322,7 +364,7 @@ dbetanorm = function(x, shape1, shape2, mean = 0, sd = 1, log = FALSE) {
pbetanorm = function(q, shape1, shape2, mean = 0, sd = 1,
lower.tail = TRUE, log.p = FALSE) {
- pbeta(q=pnorm(q=q, mean = mean, sd = sd),
+ pbeta(q=pnorm(q = q, mean = mean, sd = sd),
shape1=shape1, shape2=shape2,
lower.tail = lower.tail, log.p = log.p)
}
@@ -345,7 +387,7 @@ rbetanorm = function(n, shape1, shape2, mean = 0, sd = 1) {
-dtikuv = function(x, d, mean = 0, sigma=1, log = FALSE) {
+dtikuv = function(x, d, mean = 0, sigma = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -353,14 +395,14 @@ dtikuv = function(x, d, mean = 0, sigma=1, log = FALSE) {
if (!is.Numeric(d, allow = 1) || max(d) >= 2)
stop("bad input for argument 'd'")
L = max(length(x), length(mean), length(sigma))
- x = rep(x, len=L); mean = rep(mean, len=L); sigma = rep(sigma, len=L);
+ x = rep(x, len = L); mean = rep(mean, len = L); sigma = rep(sigma, len = L);
hh = 2 - d
KK = 1 / (1 + 1/hh + 0.75/hh^2)
if (log.arg) {
- dnorm(x=x, mean = mean, sd = sigma, log = TRUE) + log(KK) +
+ dnorm(x = x, mean = mean, sd = sigma, log = TRUE) + log(KK) +
2 * log1p(((x-mean)/sigma)^2 / (2*hh))
} else {
- dnorm(x=x, mean = mean, sd = sigma) * KK *
+ dnorm(x = x, mean = mean, sd = sigma) * KK *
(1 + ((x-mean)/sigma)^2 / (2*hh))^2
}
}
@@ -370,7 +412,7 @@ ptikuv = function(q, d, mean = 0, sigma=1) {
if (!is.Numeric(d, allow = 1) || max(d) >= 2)
stop("bad input for argument 'd'")
L = max(length(q), length(mean), length(sigma))
- q = rep(q, len=L); mean = rep(mean, len=L); sigma = rep(sigma, len=L);
+ q = rep(q, len = L); mean = rep(mean, len = L); sigma = rep(sigma, len = L);
zedd1 = 0.5 * ((q - mean) / sigma)^2
ans = q*0 + 0.5
hh = 2 - d
@@ -389,7 +431,7 @@ ptikuv = function(q, d, mean = 0, sigma=1) {
}
-qtikuv = function(p, d, mean = 0, sigma=1, ...) {
+qtikuv = function(p, d, mean = 0, sigma = 1, ...) {
if (!is.Numeric(p, posit = TRUE) || max(p) >= 1)
stop("bad input for argument 'p'")
if (!is.Numeric(d, allow = 1) || max(d) >= 2)
@@ -399,25 +441,25 @@ qtikuv = function(p, d, mean = 0, sigma=1, ...) {
if (!is.Numeric(sigma))
stop("bad input for argument 'sigma'")
L = max(length(p), length(mean), length(sigma))
- p = rep(p, len=L); mean = rep(mean, len=L); sigma = rep(sigma, len=L);
- ans = rep(0.0, len=L)
- myfun = function(x, d, mean = 0, sigma=1, p)
- ptikuv(q=x, d=d, mean = mean, sigma=sigma) - p
+ p = rep(p, len = L); mean = rep(mean, len = L); sigma = rep(sigma, len = L);
+ ans = rep(0.0, len = L)
+ myfun = function(x, d, mean = 0, sigma = 1, p)
+ ptikuv(q = x, d=d, mean = mean, sigma=sigma) - p
for(i in 1:L) {
Lower = ifelse(p[i] <= 0.5, mean[i] - 3 * sigma[i], mean[i])
- while (ptikuv(q=Lower, d=d, mean = mean[i], sigma=sigma[i]) > p[i])
+ while (ptikuv(q = Lower, d=d, mean = mean[i], sigma=sigma[i]) > p[i])
Lower = Lower - sigma[i]
Upper = ifelse(p[i] >= 0.5, mean[i] + 3 * sigma[i], mean[i])
- while (ptikuv(q=Upper, d=d, mean = mean[i], sigma=sigma[i]) < p[i])
+ while (ptikuv(q = Upper, d=d, mean = mean[i], sigma=sigma[i]) < p[i])
Upper = Upper + sigma[i]
- ans[i] = uniroot(f=myfun, lower=Lower, upper=Upper, d=d, p=p[i],
+ ans[i] = uniroot(f=myfun, lower = Lower, upper = Upper, d=d, p=p[i],
mean = mean[i], sigma=sigma[i], ...)$root
}
ans
}
-rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
+rtikuv = function(n, d, mean = 0, sigma = 1, Smallno=1.0e-6) {
if (!is.Numeric(n, posit = TRUE, integ = TRUE))
stop("bad input for argument 'n'")
if (!is.Numeric(d, allow = 1) || max(d) >= 2)
@@ -430,7 +472,7 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
Smallno > 0.01 ||
Smallno < 2 * .Machine$double.eps)
stop("bad input for argument 'Smallno'")
- ans = rep(0.0, len=n)
+ ans = rep(0.0, len = n)
ptr1 = 1; ptr2 = 0
hh = 2 - d
@@ -441,12 +483,12 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
KK / (sqrt(2 * pi) * sigma))
while (ptr2 < n) {
Lower = mean - 5 * sigma
- while (ptikuv(q=Lower, d=d, mean = mean, sigma=sigma) > Smallno)
+ while (ptikuv(q = Lower, d=d, mean = mean, sigma=sigma) > Smallno)
Lower = Lower - sigma
Upper = mean + 5 * sigma
- while (ptikuv(q=Upper, d=d, mean = mean, sigma=sigma) < 1-Smallno)
+ while (ptikuv(q = Upper, d=d, mean = mean, sigma=sigma) < 1-Smallno)
Upper = Upper + sigma
- x = runif(2*n, min=Lower, max=Upper)
+ x = runif(2*n, min = Lower, max = Upper)
index = runif(2*n, max=ymax) < dtikuv(x,d=d,m=mean,s=sigma)
sindex = sum(index)
if (sindex) {
@@ -495,13 +537,13 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
c(namesof("mean", .lmean, earg = .emean, tag = FALSE),
namesof("sigma", .lsigma, earg = .esigma, tag = FALSE))
if (!length(etastart)) {
- sigma.init = if (length(.isigma)) rep(.isigma, length=n) else {
+ sigma.init = if (length(.isigma)) rep(.isigma, length = n) else {
hh = 2 - .d
KK = 1 / (1 + 1/hh + 0.75/hh^2)
K2 = 1 + 3/hh + 15/(4*hh^2)
- rep(sqrt(var(y) / (KK*K2)), len=n)
+ rep(sqrt(var(y) / (KK*K2)), len = n)
}
- mean.init = rep(weighted.mean(y, w), len=n)
+ mean.init = rep(weighted.mean(y, w), len = n)
etastart = cbind(theta2eta(mean.init, .lmean, earg = .emean),
theta2eta(sigma.init, .lsigma, earg = .esigma))
}
@@ -519,7 +561,7 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
}), list( .lmean = lmean, .lsigma=lsigma, .d=d,
.emean = emean, .esigma=esigma ))),
loglikelihood=eval(substitute(
- function(mu,y,w,residuals = FALSE, eta, extra = NULL) {
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
mymu = eta2theta(eta[,1], .lmean, earg = .emean)
sigma = eta2theta(eta[,2], .lsigma, earg = .esigma)
if (residuals) stop("loglikelihood residuals ",
@@ -539,8 +581,8 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
gzedd = zedd / (1 + 0.5*zedd^2 / hh)
dl.dmu = zedd / sigma - 2 * gzedd / (hh*sigma)
dl.dsigma = (zedd^2 - 1 - 2 * zedd * gzedd / hh) / sigma
- w * cbind(dl.dmu * dmu.deta,
- dl.dsigma * dsigma.deta)
+ c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsigma * dsigma.deta)
}), list( .lmean = lmean, .lsigma=lsigma, .d=d,
.emean = emean, .esigma=esigma ))),
weight = eval(substitute(expression({
@@ -552,36 +594,37 @@ rtikuv = function(n, d, mean = 0, sigma=1, Smallno=1.0e-6) {
wz = matrix(as.numeric(NA), n, M) # diagonal matrix
wz[,iam(1,1,M)] = ed2l.dmymu2 * dmu.deta^2
wz[,iam(2,2,M)] = ed2l.dnu2 * dsigma.deta^2
- w * wz
+ c(w) * wz
}), list( .lmean = lmean, .lsigma=lsigma,
.emean = emean, .esigma=esigma ))))
}
-dfnorm = function(x, mean = 0, sd = 1, a1=1, a2=1) {
+dfnorm = function(x, mean = 0, sd = 1, a1 = 1, a2=1) {
if (!is.Numeric(a1, posit = TRUE) || !is.Numeric(a2, posit = TRUE))
stop("bad input for arguments 'a1' and 'a2'")
if (any(a1 <= 0 | a2 <= 0))
stop("arguments 'a1' and 'a2' must have positive values only")
- ans = dnorm(x=x/(a1*sd) - mean/sd)/(a1*sd) +
- dnorm(x=x/(a2*sd) + mean/sd)/(a2*sd)
+ ans = dnorm(x = x/(a1*sd) - mean/sd)/(a1*sd) +
+ dnorm(x = x/(a2*sd) + mean/sd)/(a2*sd)
ans[x < 0] = 0
ans[a1 <= 0 | a2 <= 0 | is.na(a1) | is.na(a2)] = NA
ans
}
-pfnorm = function(q, mean = 0, sd = 1, a1=1, a2=1) {
+pfnorm = function(q, mean = 0, sd = 1, a1 = 1, a2=1) {
if (!is.Numeric(a1, posit = TRUE) || !is.Numeric(a2, posit = TRUE))
stop("bad input for arguments 'a1' and 'a2'")
if (any(a1 <= 0 | a2 <= 0))
stop("arguments 'a1' and 'a2' must have positive values only")
L = max(length(q), length(mean), length(sd))
- q = rep(q, len=L); mean = rep(mean, len=L); sd = rep(sd, len=L);
- ifelse(q < 0, 0, pnorm(q=q/(a1*sd) - mean/sd) - pnorm(q=-q/(a2*sd) - mean/sd))
+ q = rep(q, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ ifelse(q < 0, 0,
+ pnorm(q = q/(a1*sd) - mean/sd) - pnorm(q=-q/(a2*sd) - mean/sd))
}
-qfnorm = function(p, mean = 0, sd = 1, a1=1, a2=1, ...) {
+qfnorm = function(p, mean = 0, sd = 1, a1 = 1, a2 = 1, ...) {
if (!is.Numeric(p, posit = TRUE) || max(p) >= 1)
stop("bad input for argument 'p'")
if (!is.Numeric(a1, posit = TRUE) || !is.Numeric(a2, posit = TRUE))
@@ -590,27 +633,27 @@ qfnorm = function(p, mean = 0, sd = 1, a1=1, a2=1, ...) {
stop("arguments 'a1' and 'a2' must have positive values only")
L = max(length(p), length(mean), length(sd), length(a1), length(a2))
- p = rep(p, len=L); mean = rep(mean, len=L); sd = rep(sd, len=L);
- a1 = rep(a1, len=L); a2 = rep(a2, len=L);
- ans = rep(0.0, len=L)
- myfun = function(x, mean = 0, sd = 1, a1=1, a2=2, p)
- pfnorm(q=x, mean = mean, sd = sd, a1 = a1, a2 = a2) - p
+ p = rep(p, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ a1 = rep(a1, len = L); a2 = rep(a2, len = L);
+ ans = rep(0.0, len = L)
+ myfun = function(x, mean = 0, sd = 1, a1 = 1, a2=2, p)
+ pfnorm(q = x, mean = mean, sd = sd, a1 = a1, a2 = a2) - p
for(i in 1:L) {
mytheta = mean[i]/sd[i]
EY = sd[i] * ((a1[i]+a2[i]) * (mytheta * pnorm(mytheta) + dnorm(mytheta)) -
a2[i] * mytheta)
Upper = 2 * EY
- while (pfnorm(q=Upper, mean = mean[i], sd = sd[i],
+ while (pfnorm(q = Upper, mean = mean[i], sd = sd[i],
a1 = a1[i], a2 = a2[i]) < p[i])
Upper = Upper + sd[i]
- ans[i] = uniroot(f=myfun, lower=0, upper=Upper, mean = mean[i],
+ ans[i] = uniroot(f=myfun, lower = 0, upper = Upper, mean = mean[i],
sd = sd[i], a1 = a1[i], a2 = a2[i],
p=p[i], ...)$root
}
ans
}
-rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
+rfnorm = function(n, mean = 0, sd = 1, a1 = 1, a2=1) {
if (!is.Numeric(n, integ = TRUE, posit = TRUE))
stop("bad input for argument 'n'")
if (!is.Numeric(a1, posit = TRUE) || !is.Numeric(a2, posit = TRUE))
@@ -622,19 +665,22 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
}
+
+
fnormal1 = function(lmean = "identity", lsd = "loge",
- emean = list(), esd = list(),
- imean = NULL, isd = NULL, a1=1, a2=1,
- nsimEIM=500, method.init = 1, zero = NULL)
+ emean = list(), esd = list(),
+ imean = NULL, isd = NULL,
+ a1 = 1, a2 = 1,
+ nsimEIM = 500, imethod = 1, zero = NULL)
{
if (!is.Numeric(a1, posit = TRUE, allow = 1) ||
!is.Numeric(a2, posit = TRUE, allow = 1))
stop("bad input for arguments 'a1' and 'a2'")
if (any(a1 <= 0 | a2 <= 0))
stop("arguments 'a1' and 'a2' must each be a positive value")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (mode(lmean) != "character" && mode(lmean) != "name")
lmean = as.character(substitute(lmean))
@@ -642,10 +688,12 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
lsd = as.character(substitute(lsd))
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
+
if (!is.list(emean)) emean = list()
if (!is.list(esd)) esd = list()
+
if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 10)
- stop("'nsimEIM' should be an integer greater than 10")
+ stop("argument 'nsimEIM' should be an integer greater than 10")
if (length(imean) && !is.Numeric(imean))
stop("bad input for 'imean'")
if (length(isd) && !is.Numeric(isd, posit = TRUE))
@@ -664,8 +712,8 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
stop("response must be a vector or a one-column ",
"matrix with positive values")
if (!length(etastart)) {
- junk = if (is.R()) lm.wfit(x=x, y=y, w=w) else
- lm.wfit(x=x, y=y, w=w, method="qr")
+ junk = if (is.R()) lm.wfit(x = x, y=y, w = w) else
+ lm.wfit(x = x, y=y, w = w, method="qr")
if (FALSE) {
@@ -678,24 +726,24 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
Ahat = m1d^2 / m2d
thetahat = sqrt(max(1/Ahat -1, 0.1))
mean.init = rep(if(length( .imean)) .imean else
- thetahat * sqrt((stddev^2 + meany^2) * Ahat), len=n)
+ thetahat * sqrt((stddev^2 + meany^2) * Ahat), len = n)
sd.init = rep(if(length( .isd)) .isd else
- sqrt((stddev^2 + meany^2) * Ahat), len=n)
+ sqrt((stddev^2 + meany^2) * Ahat), len = n)
}
stddev = sqrt( sum(w * junk$resid^2) / junk$df.residual )
meany = weighted.mean(y, w)
mean.init = rep(if(length( .imean)) .imean else
- {if( .method.init == 1) median(y) else meany}, len=n)
+ {if( .imethod == 1) median(y) else meany}, len = n)
sd.init = rep(if(length( .isd)) .isd else
- {if( .method.init == 1) stddev else 1.2*sd(y)}, len=n)
+ {if( .imethod == 1) stddev else 1.2*sd(y)}, len = n)
etastart = cbind(theta2eta(mean.init, .lmean, earg = .emean),
theta2eta(sd.init, .lsd, earg = .esd))
}
}), list( .lmean = lmean, .lsd = lsd, .emean = emean, .esd = esd,
.imean = imean, .isd = isd, .a1 = a1, .a2 = a2,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mymu = eta2theta(eta[,1], .lmean, earg = .emean)
mysd = eta2theta(eta[,2], .lsd, earg = .esd)
@@ -710,15 +758,15 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
misc$expected = TRUE
misc$nsimEIM = .nsimEIM
misc$simEIM = TRUE
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$a1 = .a1
misc$a2 = .a2
}), list( .lmean = lmean, .lsd = lsd,
.emean = emean, .esd = esd,
- .method.init = method.init, .nsimEIM = nsimEIM,
+ .imethod = imethod, .nsimEIM = nsimEIM,
.a1 = a1, .a2 = a2 ))),
loglikelihood=eval(substitute(
- function(mu,y,w,residuals = FALSE, eta, extra = NULL) {
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
mymu = eta2theta(eta[,1], .lmean, earg = .emean)
mysd = eta2theta(eta[,2], .lsd, earg = .esd)
a1vec = .a1
@@ -756,7 +804,7 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
name=c("mymu","mysd"), hessian= TRUE)
run.mean = 0
for(ii in 1:( .nsimEIM )) {
- ysim = rfnorm(n=n, mean = mymu, sd = mysd,
+ ysim = rfnorm(n = n, mean = mymu, sd = mysd,
a1 = a1vec, a2 = a2vec)
eval.de3 = eval(de3)
d2l.dthetas2 = attr(eval.de3, "hessian")
@@ -774,9 +822,9 @@ rfnorm = function(n, mean = 0, sd = 1, a1=1, a2=1) {
matrix(colMeans(run.mean), n, dimm(M), byrow = TRUE) else
run.mean
- index0 = iam(NA, NA, M=M, both = TRUE, diag = TRUE)
+ index0 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
wz = wz * dtheta.detas[,index0$row] * dtheta.detas[,index0$col]
- w * wz
+ c(w) * wz
}), list( .nsimEIM = nsimEIM, .a1 = a1, .a2 = a2 ))))
}
@@ -791,16 +839,16 @@ lqnorm.control = function(trace = TRUE, ...)
lqnorm = function(qpower = 2, link = "identity", earg = list(),
- method.init = 1, imu = NULL, shrinkage.init = 0.95)
+ imethod = 1, imu = NULL, shrinkage.init = 0.95)
{
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) eerg = list()
if (!is.Numeric(qpower, allow = 1) || qpower <= 1)
stop("bad input for argument 'qpower'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
@@ -820,14 +868,14 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
if (!length(etastart)) {
meany = weighted.mean(y, w)
mean.init = rep(if(length( .imu)) .imu else
- {if( .method.init == 2) median(y) else
- if ( .method.init == 1) meany else
+ {if( .imethod == 2) median(y) else
+ if ( .imethod == 1) meany else
.sinit * meany + (1 - .sinit) * y
- }, len=n)
+ }, len = n)
etastart = theta2eta(mean.init, link = .link, earg = .earg)
}
- }), list( .method.init = method.init, .imu=imu,
- .sinit=shrinkage.init, .link = link, .earg = earg ))),
+ }), list( .imethod = imethod, .imu = imu,
+ .sinit = shrinkage.init, .link = link, .earg = earg ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mu = eta2theta(eta, link = .link, earg = .earg)
mu
@@ -840,11 +888,11 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
names(misc$link) = predictors.names
misc$earg = list(mu = .earg)
misc$qpower = .qpower
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$objectiveFunction = sum( w * (abs(y - mu))^(.qpower) )
}), list( .qpower = qpower,
.link = link, .earg = earg,
- .method.init = method.init ))),
+ .imethod = imethod ))),
link = eval(substitute(function(mu, extra = NULL) {
theta2eta(mu, link = .link, earg = .earg)
}, list( .link = link, .earg = earg ))),
@@ -865,170 +913,533 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
- tobit <- function(Lower = 0, Upper = Inf, lmu = "identity",
- lsd = "loge", emu = list(), esd=list(),
- method.init = 1, zero = 2) {
- if (mode(lmu) != "character" && mode(lmu) != "name")
- lmu = as.character(substitute(lmu))
- if (mode(lsd) != "character" && mode(lsd) != "name")
- lsd = as.character(substitute(lsd))
- if (!is.Numeric(method.init, allow = 1, integer = TRUE, posi = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
- if (length(Lower) != 1 || length(Upper) != 1 ||
- !is.numeric(Lower) || !is.numeric(Upper) || Lower >= Upper)
- stop("Lower and Upper must have length 1 and ",
- "be numeric with Lower < Upper")
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
- stop("bad input for argument 'zero'")
- if (!is.list(emu)) emu = list()
- if (!is.list(esd)) esd = list()
- new("vglmff",
- blurb = c("Tobit model\n\n",
- "Links: ", namesof("mu", lmu, earg = emu, tag = TRUE), "; ",
- namesof("sd", lsd, earg = esd, tag = TRUE), "\n",
- "Conditional variance: sd^2"),
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- y = cbind(y)
- if (ncol(y)!=1)stop("the response must be a vector or a 1-column matrix")
- extra$censoredL = (y <= .Lower)
- extra$censoredU = (y >= .Upper)
- if (min(y) < .Lower) {
- warning("replacing response values less than the value ",
- .Lower, " by ", .Lower)
- y[y < .Lower] = .Lower
- }
- if (max(y) > .Upper) {
- warning("replacing response values greater than the value ",
- .Upper, " by ", .Upper)
- y[y > .Upper] = .Upper
- }
- predictors.names = c(namesof("mu", .lmu, earg = .emu, tag = FALSE),
- namesof("sd", .lsd, earg = .esd, tag = FALSE))
- if (!length(etastart)) {
- anyc = extra$censoredL | extra$censoredU
- i11 = if ( .method.init == 1) anyc else FALSE # can be all data
- junk = lm.wfit(x=cbind(x[!i11,]), y=y[!i11], w=w[!i11])
- sd.y.est = sqrt( sum(w[!i11] * junk$resid^2) / junk$df.residual )
- etastart = cbind(mu=y, rep(theta2eta(sd.y.est, .lsd, earg = .esd),
- length = n))
- if (any(anyc)) etastart[anyc,1] = x[anyc,, drop = FALSE] %*% junk$coeff
- }
- }), list( .Lower=Lower, .Upper=Upper, .lmu = lmu, .lsd=lsd,
- .emu = emu, .esd = esd, .method.init = method.init ))),
- inverse = eval(substitute( function(eta, extra = NULL) {
- eta2theta(eta[,1], .lmu, earg = .emu)
- }, list( .lmu = lmu, .emu = emu ))),
- last = eval(substitute(expression({
- misc$link = c("mu" = .lmu, "sd" = .lsd)
- misc$earg = list("mu" = .emu, "sd" = .esd)
- misc$expected = TRUE
- misc$Lower = .Lower
- misc$Upper = .Upper
- }), list( .lmu = lmu, .lsd=lsd,
- .emu = emu, .esd = esd,
- .Lower=Lower, .Upper=Upper ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- cenL = extra$censoredL
- cenU = extra$censoredU
- cen0 = !cenL & !cenU # uncensored obsns
- mum = eta2theta(eta[,1], .lmu, earg = .emu)
- sd = eta2theta(eta[,2], .lsd, earg = .esd)
- ell1 = -log(sd[cen0]) - 0.5 * ((y[cen0] - mum[cen0])/sd[cen0])^2
- ell2 = log1p(-pnorm((mum[cenL] - .Lower)/sd[cenL]))
- ell3 = log1p(-pnorm(( .Upper - mum[cenU])/sd[cenU]))
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w[cen0] * ell1) + sum(w[cenL] * ell2) + sum(w[cenU] * ell3)
- }, list( .lmu = lmu, .lsd=lsd,
- .emu = emu, .esd = esd,
- .Lower=Lower, .Upper=Upper ))),
- vfamily = c("tobit"),
- deriv = eval(substitute(expression({
- cenL = extra$censoredL
- cenU = extra$censoredU
+
+dtobit = function(x, mean = 0, sd = 1,
+ Lower = 0, Upper = Inf, log = FALSE) {
+
+ log.arg <- log
+ if (!is.logical(log.arg) || length(log.arg) != 1)
+ stop("argument 'log' must be a single logical")
+ rm(log)
+
+ L = max(length(x), length(mean), length(sd), length(Lower),
+ length(Upper))
+ x = rep(x, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ Lower = rep(Lower, len = L); Upper = rep(Upper, len = L);
+
+ ans = dnorm(x = x, mean = mean, sd = sd, log = log.arg)
+ ans[x < Lower] = if (log.arg) log(0.0) else 0.0
+ ans[x > Upper] = if (log.arg) log(0.0) else 0.0
+
+
+ ind3 <- x == Lower
+ ans[ind3] = if (log.arg) {
+ log(exp(ans[ind3]) +
+ pnorm(q = Lower[ind3], me = mean[ind3], sd = sd[ind3]))
+ } else {
+ ans[ind3] +
+ pnorm(q = Lower[ind3], mean = mean[ind3], sd = sd[ind3])
+ }
+
+ ind4 <- x == Upper
+ ans[ind4] = if (log.arg) {
+ log(exp(ans[ind4]) +
+ pnorm(q = Upper[ind4], mean = mean[ind4], sd = sd[ind4],
+ lower.tail = FALSE))
+ } else {
+ ans[ind4] +
+ pnorm(q = Upper[ind4], mean = mean[ind4], sd = sd[ind4],
+ lower.tail = FALSE)
+ }
+ ans
+}
+
+
+
+ptobit = function(q, mean = 0, sd = 1,
+ Lower = 0, Upper = Inf,
+ lower.tail = TRUE, log.p = FALSE) {
+
+ if (!is.logical(lower.tail) || length(lower.tail) != 1)
+ stop("argument 'lower.tail' must be a single logical")
+ if (!is.logical(log.p) || length(log.p) != 1)
+ stop("argument 'log.p' must be a single logical")
+
+ L = max(length(q), length(mean), length(sd), length(Lower),
+ length(Upper))
+ q = rep(q, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ Lower = rep(Lower, len = L); Upper = rep(Upper, len = L);
+
+ ans = pnorm(q = q, mean = mean, sd = sd, lower.tail = lower.tail)
+ ind1 <- q < Lower
+ ans[ind1] = if (lower.tail) ifelse(log.p, log(0.0), 0.0) else
+ ifelse(log.p, log(1.0), 1.0)
+ ind2 <- Upper <= q
+ ans[ind2] = if (lower.tail) ifelse(log.p, log(1.0), 1.0) else
+ ifelse(log.p, log(0.0), 0.0)
+
+ ans
+}
+
+
+
+
+qtobit = function(p, mean = 0, sd = 1,
+ Lower = 0, Upper = Inf) {
+
+ L = max(length(p), length(mean), length(sd), length(Lower),
+ length(Upper))
+ p = rep(p, len = L); mean = rep(mean, len = L); sd = rep(sd, len = L);
+ Lower = rep(Lower, len = L); Upper = rep(Upper, len = L);
+
+ ans = qnorm(p = p, mean = mean, sd = sd)
+ pnorm.Lower = ptobit(q = Lower, mean = mean, sd = sd)
+ pnorm.Upper = ptobit(q = Upper, mean = mean, sd = sd)
+
+ ind1 <- p <= pnorm.Lower
+ ans[ind1] = Lower[ind1]
+
+ ind2 <- pnorm.Upper <= p
+ ans[ind2] = Upper[ind2]
+
+ ans
+}
+
+
+
+
+
+
+rtobit = function(n, mean = 0, sd = 1,
+ Lower = 0, Upper = Inf) {
+
+ use.n = if ((length.n <- length(n)) > 1) length.n else
+ if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
+ stop("bad input for argument 'n'") else n
+ L = max(use.n, length(mean), length(sd), length(Lower),
+ length(Upper))
+ mean = rep(mean, len = L); sd = rep(sd, len = L);
+ Lower = rep(Lower, len = L); Upper = rep(Upper, len = L);
+
+ ans = rnorm(n = use.n, mean = mean, sd = sd)
+ cenL <- (ans < Lower)
+ ans[cenL] = Lower[cenL]
+ cenU <- (ans > Upper)
+ ans[cenU] = Upper[cenU]
+
+ attr(ans, "Lower") <- Lower
+ attr(ans, "Upper") <- Upper
+ attr(ans, "cenL") <- cenL
+ attr(ans, "cenU") <- cenU
+ ans
+}
+
+
+
+
+tobit.control <- function(save.weight = TRUE, ...)
+{
+ list(save.weight = save.weight)
+}
+
+
+ tobit <- function(Lower = 0, Upper = Inf,
+ lmu = "identity", lsd = "loge",
+ emu = list(), esd = list(),
+ nsimEIM = 250,
+ imu = NULL, isd = NULL,
+ type.fitted = c("uncensored", "censored", "mean.obs"),
+ imethod = 1, zero = -2) {
+
+
+
+
+
+
+ if (mode(lmu) != "character" && mode(lmu) != "name")
+ lmu = as.character(substitute(lmu))
+ if (mode(lsd) != "character" && mode(lsd) != "name")
+ lsd = as.character(substitute(lsd))
+
+ if (!is.Numeric(imethod, allow = 1, integer = TRUE, posi = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
+ if ( # length(Lower) != 1 || length(Upper) != 1 ||
+ !is.numeric(Lower) || !is.numeric(Upper) ||
+ any(Lower >= Upper))
+ stop("Lower and Upper must ",
+ "be numeric with Lower < Upper")
+ if (length(zero) &&
+ !is.Numeric(zero, integer = TRUE))
+ stop("bad input for argument 'zero'")
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) ||
+ nsimEIM <= 10)
+ stop("argument 'nsimEIM' should be an integer greater than 10")
+
+ if(mode(type.fitted) != "character" && mode(type.fitted) != "name")
+ type.fitted <- as.character(substitute(type.fitted))
+ type.fitted <- match.arg(type.fitted,
+ c("uncensored", "censored", "mean.obs"))[1]
+
+ if (!is.list(emu)) emu = list()
+ if (!is.list(esd)) esd = list()
+
+ stdTobit = all( Lower == 0.0) &&
+ all(!is.finite(Upper)) &&
+ all(lmu == "identity")
+
+ new("vglmff",
+ blurb = c("Tobit model\n\n",
+ "Links: ",
+ namesof("mu", lmu, earg = emu, tag = TRUE), "; ",
+ namesof("sd", lsd, earg = esd, tag = TRUE), "\n",
+ "Mean: mu", "\n",
+ "Conditional variance: sd^2"),
+ constraints = eval(substitute(expression({
+
+ dotzero <- .zero
+ Musual <- 2
+ eval(negzero.expression)
+
+ }), list( .zero = zero ))),
+ infos = eval(substitute(function(...) {
+ list(Musual = 2,
+ zero = .zero,
+ nsimEIM = .nsimEIM)
+ }, list( .zero = zero, .nsimEIM = nsimEIM ))),
+ initialize = eval(substitute(expression({
+ Musual = 2
+
+ y = cbind(y)
+ ncoly = ncol(y)
+ M = Musual * ncoly
+
+ Lowmat = matrix( .Lower, nrow = n, ncol = ncoly, byrow = TRUE)
+ Uppmat = matrix( .Upper, nrow = n, ncol = ncoly, byrow = TRUE)
+
+ extra$censoredL = (y <= Lowmat)
+ extra$censoredU = (y >= Uppmat)
+ if (any(y < Lowmat)) {
+ warning("replacing response values less than the value ",
+ .Lower, " by ", .Lower)
+ y[y < Lowmat] = Lowmat[y < Lowmat]
+ }
+ if (any(y > Uppmat)) {
+ warning("replacing response values greater than the value ",
+ .Upper, " by ", .Upper)
+ y[y > Uppmat] = Uppmat[y > Uppmat]
+ }
+
+ temp1.names =
+ if (ncoly == 1) "mu" else paste("mu", 1:ncoly, sep = "")
+ temp2.names =
+ if (ncoly == 1) "sd" else paste("sd", 1:ncoly, sep = "")
+ predictors.names =
+ c(namesof(temp1.names, .lmu, earg = .emu, tag = FALSE),
+ namesof(temp2.names, .lsd, earg = .esd, tag = FALSE))
+ predictors.names = predictors.names[interleave.VGAM(M, M = Musual)]
+
+ if (!length(etastart)) {
+ anyc = cbind(extra$censoredL | extra$censoredU)
+ i11 = if ( .imethod == 1) anyc else FALSE # can be all data
+
+ mu.init =
+ sd.init = matrix(0.0, n, ncoly)
+ for(ii in 1:ncol(y)) {
+ use.i11 = i11[, ii]
+ mylm = lm.wfit(x = cbind(x[!use.i11,]),
+ y = y[!use.i11, ii], w = w[!use.i11])
+ sd.init[, ii] = sqrt( sum(w[!use.i11] * mylm$resid^2)
+ / mylm$df.residual ) * 1.5
+ mu.init[!use.i11, ii] = mylm$fitted.values
+ if (any(anyc[, ii]))
+ mu.init[anyc[, ii], ii] = x[anyc[, ii],, drop = FALSE] %*%
+ mylm$coeff
+ }
+
+ if (length( .imu ))
+ mu.init = matrix( .imu, n, ncoly, byrow = TRUE)
+ if (length( .isd ))
+ sd.init = matrix( .isd, n, ncoly, byrow = TRUE)
+
+ etastart = cbind(theta2eta(mu.init, .lmu, earg = .emu),
+ theta2eta(sd.init, .lsd, earg = .esd))
+
+ etastart = etastart[, interleave.VGAM(M, M = Musual), drop = FALSE]
+ }
+ }), list( .Lower = Lower, .Upper = Upper,
+ .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .imu = imu, .isd = isd,
+ .imethod = imethod ))),
+ inverse = eval(substitute( function(eta, extra = NULL) {
+ Musual = 2
+ ncoly = ncol(eta) / Musual
+ mum = eta2theta(eta[,Musual*(1:ncoly)-1, drop=FALSE], .lmu, earg = .emu)
+ if ( .type.fitted == "uncensored")
+ return(mum)
+
+ Lowmat = matrix( .Lower, nrow = nrow(eta), ncol = ncoly, byrow = TRUE)
+ Uppmat = matrix( .Upper, nrow = nrow(eta), ncol = ncoly, byrow = TRUE)
+ if ( .type.fitted == "censored") {
+ mum[mum < Lowmat] <- Lowmat[mum < Lowmat]
+ mum[mum > Uppmat] <- Uppmat[mum > Uppmat]
+ mum
+ } else {
+
+ sdm = eta2theta(eta[,Musual*(1:ncoly)-0, drop=FALSE],.lsd, earg = .esd)
+ zeddL = (Lowmat - mum) / sdm
+ zeddU = (Uppmat - mum) / sdm
+ Phi.L = pnorm(zeddL)
+ phi.L = dnorm(zeddL)
+ Phi.U = pnorm(zeddU)
+ phi.U = dnorm(zeddU)
+ mum * (Phi.U - Phi.L) +
+ sdm * (phi.L - phi.U) +
+ Lowmat * Phi.L +
+ Uppmat * (1 - Phi.U)
+ }
+ }, list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .Lower = Lower, .Upper = Upper,
+ .type.fitted = type.fitted ))),
+ last = eval(substitute(expression({
+
+ temp0303 = c(rep( .lmu, length = ncoly),
+ rep( .lsd, length = ncoly))
+ names(temp0303) =
+ c(if (ncoly == 1) "mu" else paste("mu", 1:ncoly, sep = ""),
+ if (ncoly == 1) "sd" else paste("sd", 1:ncoly, sep = ""))
+ temp0303 = temp0303[interleave.VGAM(M, M = Musual)]
+ misc$link = temp0303 # Already named
+
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:ncoly) {
+ misc$earg[[Musual*ii-1]] = .emu
+ misc$earg[[Musual*ii ]] = .esd
+ }
+
+ misc$expected = TRUE
+ misc$Lower = .Lower
+ misc$Upper = .Upper
+ misc$imethod = .imethod
+ misc$nsimEIM = .nsimEIM
+ misc$Musual = Musual
+ misc$stdTobit = .stdTobit
+
+ if ( .stdTobit ) {
+ save.weight <- control$save.weight <- FALSE
+ fit$weights <- NULL
+ }
+
+
+ }), list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .nsimEIM = nsimEIM, .imethod = imethod,
+ .stdTobit = stdTobit,
+ .Lower = Lower, .Upper = Upper ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ Musual = 2
+ y = cbind(y)
+ ncoly = ncol(y)
+
+ cenL = extra$censoredL
+ cenU = extra$censoredU
+ cen0 = !cenL & !cenU # uncensored obsns
+ Lowmat = matrix( .Lower, nrow = nrow(eta), ncol = ncoly, byrow = TRUE)
+ Uppmat = matrix( .Upper, nrow = nrow(eta), ncol = ncoly, byrow = TRUE)
+
+
+ mum = eta2theta(eta[,Musual*(1:ncoly)-1, drop=FALSE],.lmu, earg = .emu)
+ sdm = eta2theta(eta[,Musual*(1:ncoly)-0, drop=FALSE],.lsd, earg = .esd)
+
+ ell0 = dnorm( y[cen0], mean = mum[cen0], sd = sdm[cen0],
+ log = TRUE)
+ ellL = pnorm(Lowmat[cenL], mean = mum[cenL], sd = sdm[cenL],
+ log = TRUE, lower.tail = TRUE)
+ ellU = pnorm(Uppmat[cenU], mean = mum[cenU], sd = sdm[cenU],
+ log = TRUE, lower.tail = FALSE)
+
+ wmat = matrix(w, nrow = nrow(eta), ncol = ncoly)
+ if (residuals) {
+ stop("loglikelihood residuals not ",
+ "implemented yet")
+ } else {
+ sum(wmat[cen0] * ell0) +
+ sum(wmat[cenL] * ellL) +
+ sum(wmat[cenU] * ellU)
+ }
+ }, list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .Lower = Lower, .Upper = Upper ))),
+ vfamily = c("tobit"),
+ deriv = eval(substitute(expression({
+ Musual = 2
+ y = cbind(y)
+ ncoly = ncol(y)
+
+ Lowmat = matrix( .Lower, nrow = n, ncol = ncoly, byrow = TRUE)
+ Uppmat = matrix( .Upper, nrow = n, ncol = ncoly, byrow = TRUE)
+
+ cenL = extra$censoredL
+ cenU = extra$censoredU
+ cen0 = !cenL & !cenU # uncensored obsns
+
+ mum = eta2theta(eta[, Musual*(1:ncoly)-1, drop = FALSE], .lmu, earg = .emu)
+ sdm = eta2theta(eta[, Musual*(1:ncoly)-0, drop = FALSE], .lsd, earg = .esd)
+
+ zedd = (y - mum) / sdm
+ dl.dmu = zedd / sdm
+ dl.dsd = (zedd^2 - 1) / sdm
+
+ dmu.deta = dtheta.deta(mum, .lmu, earg = .emu)
+ dsd.deta = dtheta.deta(sdm, .lsd, earg = .esd)
+
+ if (any(cenL)) {
+ mumL = Lowmat - mum
+ temp21L = mumL[cenL] / sdm[cenL]
+ PhiL = pnorm(temp21L)
+ phiL = dnorm(temp21L)
+ fred21 = phiL / PhiL
+ dl.dmu[cenL] = -fred21 / sdm[cenL]
+ dl.dsd[cenL] = fred21 * (-mumL[cenL] / sdm[cenL]^2)
+ }
+ if (any(cenU)) {
+ mumU = Uppmat - mum
+ temp21U = mumU[cenU] / sdm[cenU]
+ PhiU = pnorm(temp21U, lower.tail = FALSE)
+ phiU = dnorm(temp21U)
+ fred21 = -phiU / PhiU
+ dl.dmu[cenU] = -fred21 / sdm[cenU] # Negated
+ dl.dsd[cenU] = fred21 * (-mumU[cenU] / sdm[cenU]^2)
+ }
+
+ dthetas.detas = cbind(dmu.deta, dsd.deta)
+ dThetas.detas = dthetas.detas[, interleave.VGAM(M, M = Musual)]
+
+ myderiv = c(w) * cbind(dl.dmu, dl.dsd) * dthetas.detas
+ myderiv[, interleave.VGAM(M, M = Musual)]
+ }), list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .Lower = Lower, .Upper = Upper ))),
+ weight = eval(substitute(expression({
+
+ wz = matrix(0.0, n, M + M - 1) # wz is 'tridiagonal'
+ ind1 = iam(NA, NA, M = Musual, both = TRUE, diag = TRUE)
+
+
+ if (is.numeric( .nsimEIM ) &&
+ ! .stdTobit ) {
+ run.varcov = 0
+
+ for(spp. in 1:ncoly) {
+ run.varcov = 0
+ muvec = mum[, spp.]
+ sdvec = sdm[, spp.]
+
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rtobit(n = n, mean = muvec, sd = sdvec,
+ Lower = Lowmat[, spp.], Upper = Uppmat[, spp.])
+ cenL = attr(ysim, "cenL")
+ cenU = attr(ysim, "cenU")
cen0 = !cenL & !cenU # uncensored obsns
- mum = eta2theta(eta[,1], .lmu, earg = .emu)
- sd = eta2theta(eta[,2], .lsd, earg = .esd)
- dl.dmu = (y-mum) / sd^2
- dl.dsd = (((y-mum)/sd)^2 - 1) / sd
- dmu.deta = dtheta.deta(mum, .lmu, earg = .emu)
- dsd.deta = dtheta.deta(sd, .lsd, earg = .esd)
- if (any(cenL)) {
- mumL = mum - .Lower
- temp21L = mumL[cenL] / sd[cenL]
- PhiL = pnorm(temp21L)
- phiL = dnorm(temp21L)
- fred21 = phiL / (1 - PhiL)
- dl.dmu[cenL] = -fred21 / sd[cenL]
- dl.dsd[cenL] = mumL[cenL] * fred21 / sd[cenL]^2
- rm(fred21)
- }
- if (any(cenU)) {
- mumU = .Upper - mum
- temp21U = mumU[cenU] / sd[cenU]
- PhiU = pnorm(temp21U)
- phiU = dnorm(temp21U)
- fred21 = phiU / (1 - PhiU)
- dl.dmu[cenU] = fred21 / sd[cenU] # Negated
- dl.dsd[cenU] = mumU[cenU] * fred21 / sd[cenU]^2
- rm(fred21)
- }
- w * cbind(dl.dmu * dmu.deta, dl.dsd * dsd.deta)
- }), list( .lmu = lmu, .lsd=lsd,
- .emu = emu, .esd = esd,
- .Lower=Lower, .Upper=Upper ))),
- weight = eval(substitute(expression({
- A1 = 1 - pnorm((mum - .Lower) / sd) # Lower
- A3 = 1 - pnorm(( .Upper - mum) / sd) # Upper
- A2 = 1 - A1 - A3 # Middle; uncensored
- wz = matrix(0, n, 3)
- wz[,iam(1,1,M)] = A2 * 1 / sd^2 # ed2l.dmu2
- wz[,iam(2,2,M)] = A2 * 2 / sd^2 # ed2l.dsd2
- mumL = mum - .Lower
- temp21L = mumL / sd
+
+ zedd = (ysim - muvec) / sdvec
+ dl.dmu = zedd / sdvec
+ dl.dsd = (zedd^2 - 1) / sdvec
+ if (any(cenL)) {
+ mumL = Lowmat[, spp.] - muvec
+ temp21L = mumL[cenL] / sdvec[cenL]
PhiL = pnorm(temp21L)
phiL = dnorm(temp21L)
- temp31L = ((1-PhiL) * sd)^2
- wz.cenL11 = phiL * (phiL - (1-PhiL)*temp21L) / temp31L
- wz.cenL22 = mumL * phiL * ((1-PhiL) * (2 - temp21L^2) +
- mumL * phiL / sd) / (sd * temp31L)
- wz.cenL12 = phiL * ((1-PhiL)*(temp21L^2 - 1) - temp21L*phiL) / temp31L
- wz.cenL11[!is.finite(wz.cenL11)] = 0
- wz.cenL22[!is.finite(wz.cenL22)] = 0
- wz.cenL12[!is.finite(wz.cenL12)] = 0
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A1 * wz.cenL11
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A1 * wz.cenL22
- wz[,iam(1,2,M)] = A1 * wz.cenL12
- mumU = .Upper - mum # often Inf
- temp21U = mumU / sd # often Inf
- PhiU = pnorm(temp21U) # often 1
- phiU = dnorm(temp21U) # often 0
- temp31U = ((1-PhiU) * sd)^2 # often 0
- tmp8 = (1-PhiU)*temp21U
- wzcenU11 = phiU * (phiU - tmp8) / temp31U
- tmp9 = (1-PhiU) * (2 - temp21U^2)
- wzcenU22 = mumU * phiU * (tmp9 + mumU * phiU / sd) / (sd * temp31U)
- wzcenU12 = -phiU * ((1-PhiU)*(temp21U^2 - 1) - temp21U*phiU) / temp31U
- wzcenU11[!is.finite(wzcenU11)] = 0 # Needed when .Upper==Inf
- wzcenU22[!is.finite(wzcenU22)] = 0 # Needed when .Upper==Inf
- wzcenU12[!is.finite(wzcenU12)] = 0 # Needed when .Upper==Inf
- wz[,iam(1,1,M)] = wz[,iam(1,1,M)] + A3 * wzcenU11
- wz[,iam(2,2,M)] = wz[,iam(2,2,M)] + A3 * wzcenU22
- wz[,iam(1,2,M)] = wz[,iam(1,2,M)] + A3 * wzcenU12
- wz[,iam(1,1,M)] = w * wz[,iam(1,1,M)] * dmu.deta^2
- wz[,iam(2,2,M)] = w * wz[,iam(2,2,M)] * dsd.deta^2
- wz[,iam(1,2,M)] = w * wz[,iam(1,2,M)] * dmu.deta * dsd.deta
- wz
- }), list( .lmu = lmu, .Lower=Lower, .Upper=Upper, .lsd=lsd ))))
-}
+ fred21 = phiL / PhiL
+ dl.dmu[cenL] = -fred21 / sdvec[cenL]
+ dl.dsd[cenL] = fred21 * (-mumL[cenL] / sdvec[cenL]^2)
+ }
+ if (any(cenU)) {
+ mumU = Uppmat[, spp.] - muvec
+ temp21U = mumU[cenU] / sdvec[cenU]
+ PhiU = pnorm(temp21U, lower.tail = FALSE)
+ phiU = dnorm(temp21U)
+ fred21 = -phiU / PhiU
+ dl.dmu[cenU] = -fred21 / sdvec[cenU] # Negated
+ dl.dsd[cenU] = fred21 * (-mumU[cenU] / sdvec[cenU]^2)
+ }
+
+ rm(ysim)
+ temp3 = cbind(dl.dmu, dl.dsd)
+ run.varcov = run.varcov +
+ temp3[, ind1$row.index] *
+ temp3[, ind1$col.index]
+ }
+ run.varcov = run.varcov / .nsimEIM
+
+ wz1 = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else
+ run.varcov
+
+
+ wz1 = wz1 * dThetas.detas[, Musual * (spp. - 1) + ind1$row] *
+ dThetas.detas[, Musual * (spp. - 1) + ind1$col]
+
+
+ for(jay in 1:Musual)
+ for(kay in jay:Musual) {
+ cptr = iam((spp. - 1) * Musual + jay,
+ (spp. - 1) * Musual + kay,
+ M = M)
+ wz[, cptr] = wz1[, iam(jay, kay, M = Musual)]
+ }
+ } # End of for(spp.) loop
+
+ } else {
+
+ wz1 = matrix(0.0, n, dimm(Musual))
+ for(spp. in 1:ncoly) {
+ zedd = (y[, spp.] - mum[, spp.]) / sdm[, spp.]
+ zedd0 = ( mum[, spp.]) / sdm[, spp.]
+ phivec = dnorm(zedd0)
+ Phivec = pnorm(zedd0)
+
+ wz1[, iam(1, 1, M = Musual)] = -(phivec * zedd0 -
+ phivec^2 / (1 - Phivec) -
+ Phivec)
+ wz1[, iam(2, 2, M = Musual)] = -(phivec * zedd0^3 +
+ phivec * zedd0 -
+ phivec^2 * zedd0^2 / (1 - Phivec) -
+ 2 * Phivec)
+ wz1[, iam(1, 2, M = Musual)] = +(phivec * zedd0^2 +
+ phivec -
+ phivec^2 * zedd0 / (1 - Phivec))
+
+ wz1 = wz1 / sdm[, spp.]^2
+ wz1 = wz1 * dThetas.detas[, Musual * (spp. - 1) + ind1$row] *
+ dThetas.detas[, Musual * (spp. - 1) + ind1$col]
+
+ for(jay in 1:Musual)
+ for(kay in jay:Musual) {
+ cptr = iam((spp. - 1) * Musual + jay,
+ (spp. - 1) * Musual + kay,
+ M = M)
+ wz[, cptr] = wz1[, iam(jay, kay, M = Musual)]
+ }
+ } # End of for(spp.) loop
+
+ } # End of EIM
+
+
+ c(w) * wz
+ }), list( .lmu = lmu, .Lower = Lower, .Upper = Upper,
+ .lsd = lsd,
+ .stdTobit = stdTobit,
+ .nsimEIM = nsimEIM ))))
+} # End of tobit()
@@ -1036,7 +1447,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
normal1 <- function(lmean = "identity", lsd = "loge",
emean = list(), esd = list(),
- method.init = 1,
+ imethod = 1,
zero = -2)
{
@@ -1052,9 +1463,9 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
stop("bad input for argument 'zero'")
if (!is.list(emean)) emean <- list()
if (!is.list(esdev)) esdev <- list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
@@ -1095,13 +1506,13 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
jfit <- lm.wfit(x = x, y = y[, jay], w = w)
mean.init[, jay] <- if ( .lmean == "loge")
pmax(1/1024, y[, jay]) else
- if( .method.init == 1) median(y[, jay]) else
- if( .method.init == 2) weighted.mean(y[, jay], w = w) else
+ if( .imethod == 1) median(y[, jay]) else
+ if( .imethod == 2) weighted.mean(y[, jay], w = w) else
mean(jfit$fitted)
sdev.init[, jay] <-
- if( .method.init == 1)
+ if( .imethod == 1)
sqrt( sum(w * (y[, jay] - mean.init[, jay])^2) / sum(w) ) else
- if( .method.init == 2) {
+ if( .imethod == 2) {
if (jfit$df.resid > 0)
sqrt( sum(w * jfit$resid^2) / jfit$df.resid ) else
sqrt( sum(w * jfit$resid^2) / sum(w) )
@@ -1116,7 +1527,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
}
}), list( .lmean = lmean, .lsdev = lsdev,
.emean = emean, .esdev = esdev,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
ncoly <- extra$ncoly
eta2theta(eta[, 2*(1:ncoly) - 1], .lmean, earg = .emean)
@@ -1137,10 +1548,10 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
misc$Musual <- Musual
misc$expected <- TRUE
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
}), list( .lmean = lmean, .lsdev = lsdev,
.emean = emean, .esdev = esdev,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
ncoly <- extra$ncoly
@@ -1162,8 +1573,8 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
dmu.deta <- dtheta.deta(mymu, .lmean, earg = .emean)
dsd.deta <- dtheta.deta(sdev, .lsdev, earg = .esdev)
- ans <- w * cbind(dl.dmu * dmu.deta,
- dl.dsd * dsd.deta)
+ ans <- c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dsd * dsd.deta)
ans <- ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
}), list( .lmean = lmean, .lsdev = lsdev,
@@ -1174,7 +1585,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
ed2l.dsd2 <- -2 / sdev^2
wz[, 2*(1:ncoly) - 1] <- -ed2l.dmu2 * dmu.deta^2
wz[, 2*(1:ncoly) ] <- -ed2l.dsd2 * dsd.deta^2
- w * wz
+ c(w) * wz
}))
}
@@ -1216,8 +1627,8 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
namesof("sdlog", .lsdlog, earg = .esdlog, tag = FALSE))
if (!length(etastart)) {
- junk = lm.wfit(x=x, y=log(y), w=w)
- sdlog.y.est = sqrt( sum(w * junk$resid^2) / junk$df.residual )
+ mylm = lm.wfit(x = x, y=log(y), w = w)
+ sdlog.y.est = sqrt( sum(w * mylm$resid^2) / mylm$df.residual )
etastart = cbind(
meanlog = rep(theta2eta(log(median(y)), .lmeanlog,
earg = .emeanlog), length = n),
@@ -1259,8 +1670,8 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
dl.dsdlog = -1 / sdlog + (log(y) - mulog)^2 / sdlog^3
dl.dlambda = (1 + (log(y) - mulog) / sdlog^2) / y
- w * cbind(dl.dmulog * dmulog.deta,
- dl.dsdlog * dsdlog.deta)
+ c(w) * cbind(dl.dmulog * dmulog.deta,
+ dl.dsdlog * dsdlog.deta)
}), list( .lmeanlog = lmeanlog, .lsdlog = lsdlog,
.emeanlog = emeanlog, .esdlog = esdlog ))),
weight = expression({
@@ -1270,7 +1681,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
wz[,iam(1,1,M)] = ed2l.dmulog2 * dmulog.deta^2
wz[,iam(2,2,M)] = ed2l.dsdlog2 * dsdlog.deta^2
- wz = w * wz
+ wz = c(w) * wz
wz
}))
}
@@ -1328,18 +1739,20 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
shapiro.test(sample(log(y-miny+delta),
size=min(5000, length(y ))))$p.value)
}
- index.lambda=(1:length(powers.try))[pvalue.vec==max(pvalue.vec)]
+ index.lambda = (1:length(powers.try))[pvalue.vec ==
+ max(pvalue.vec)]
lambda.init = miny - 10^powers.try[index.lambda]
}
- junk = lm.wfit(x=x, y=log(y-lambda.init), w=w)
- sdlog.y.est = sqrt( sum(w * junk$resid^2) / junk$df.residual )
+ mylm = lm.wfit(x = x, y=log(y-lambda.init), w = w)
+ sdlog.y.est = sqrt( sum(w * mylm$resid^2) / mylm$df.residual )
etastart = cbind(mu = log(median(y - lambda.init)),
- sdlog=rep(theta2eta(sdlog.y.est, .lsdlog, earg = .esdlog), length = n),
+ sdlog = rep(theta2eta(sdlog.y.est, .lsdlog, earg = .esdlog),
+ length = n),
lambda = lambda.init)
}
}), list( .lmeanlog = lmeanlog, .lsdlog = lsdlog,
.emeanlog = emeanlog, .esdlog = esdlog,
- .delta = delta, .powers.try=powers.try ))),
+ .delta = delta, .powers.try = powers.try ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mymu = eta2theta(eta[,1], .lmeanlog, earg = .emeanlog)
sdlog = eta2theta(eta[,2], .lsdlog, earg = .esdlog)
@@ -1383,9 +1796,9 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
dmymu.deta = dtheta.deta(mymu, .lmeanlog, earg = .emeanlog)
dsdlog.deta = dtheta.deta(sdlog, .lsdlog, earg = .esdlog)
dlambda.deta = dtheta.deta(lambda, "identity", earg = list())
- w * cbind(dl.dmymu * dmymu.deta,
- dl.dsdlog * dsdlog.deta,
- dl.dlambda * dlambda.deta)
+ c(w) * cbind(dl.dmymu * dmymu.deta,
+ dl.dsdlog * dsdlog.deta,
+ dl.dlambda * dlambda.deta)
}), list( .lmeanlog = lmeanlog, .lsdlog = lsdlog,
.emeanlog = emeanlog, .esdlog = esdlog ))),
weight = expression({
@@ -1399,7 +1812,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
wz[,iam(3,3,M)] = ed2l.dlambda2 * dlambda.deta^2
wz[,iam(1,3,M)] = temp9 * dmymu.deta * dlambda.deta / sdlog^2
wz[,iam(2,3,M)] = -2 * temp9 / sdlog * dsdlog.deta * dlambda.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}))
}
@@ -1408,7 +1821,7 @@ lqnorm = function(qpower = 2, link = "identity", earg = list(),
-dsnorm = function(x, location=0, scale=1, shape=0, log = FALSE) {
+dsnorm = function(x, location = 0, scale = 1, shape = 0, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
@@ -1428,7 +1841,7 @@ dsnorm = function(x, location=0, scale=1, shape=0, log = FALSE) {
-rsnorm = function(n, location=0, scale=1, shape=0) {
+rsnorm = function(n, location = 0, scale = 1, shape=0) {
if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
stop("bad input for argument 'n'")
if (!is.Numeric(scale, posit = TRUE))
@@ -1500,7 +1913,8 @@ rsnorm = function(n, location=0, scale=1, shape=0) {
alpha = eta2theta(eta, .lshape, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dsnorm(x=y, location=0, scale=1, shape=alpha, log = TRUE))
+ sum(w * dsnorm(x = y, location = 0, scale = 1,
+ shape = alpha, log = TRUE))
}
}, list( .earg = earg, .lshape = lshape ))),
vfamily = c("skewnormal1"),
@@ -1532,7 +1946,7 @@ rsnorm = function(n, location=0, scale=1, shape=0) {
d2shape.deta2 = d2theta.deta2(alpha, .lshape, earg = .earg)
d2l.dshape2 = -y*y * tmp86 * (tmp76 * zedd + tmp86) / tmp76^2
wz = -(dshape.deta^2) * d2l.dshape2 - d2shape.deta2 * dl.dshape
- wz = w * wz
+ wz = c(w) * wz
}
wz
}), list( .earg = earg, .lshape = lshape, .nsimEIM = nsimEIM ))))
diff --git a/R/family.others.R b/R/family.others.R
new file mode 100644
index 0000000..3f0533e
--- /dev/null
+++ b/R/family.others.R
@@ -0,0 +1,1946 @@
+# These functions are Copyright (C) 1998-2011 T. W. Yee All rights reserved.
+
+
+# family.others.R
+# This file contains functions written by other people.
+
+
+# Last modified:
+# 20110317: (a) James Lauder files.
+# This file is in one part: see (a), and later (b), (c).
+
+
+
+
+
+
+
+# ----------------------------------------------------------------------
+# (a) James Lauder code put here.
+# ----------------------------------------------------------------------
+# Edited from james.familyfuncs.2.R on 20110317
+# ----------------------------------------------------------------------
+
+
+# 13/12/10; [drpq]exppois() and exppois().
+# reference: Karlis CSDA 53 (2009) pg 894 and
+# Kus CSDA 51 (2007) pg 4497
+# everything functioning except for hypergeometric function
+# (see R package "hypergeo")
+
+
+# ref: Kus, section 4.1, pg 4500
+# updated on 22/15/2010
+dexppois <- function(x, lambda, betave = 1, log = FALSE) {
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ N <- max(length(x), length(lambda), length(betave))
+ x <- rep(x, len = N); lambda = rep(lambda, len = N);
+ betave <- rep(betave, len = N)
+
+ logdensity <- rep(log(0), len = N)
+ xok <- (0 < x)
+
+ logdensity[xok] <- log(lambda[xok]) + log(betave[xok]) -
+ log1p(-exp(-lambda[xok])) - lambda[xok] -
+ betave[xok] * x[xok] + lambda[xok] *
+ exp(-betave[xok] * x[xok])
+
+ logdensity[lambda <= 0] <- NaN
+ logdensity[betave <= 0] <- NaN
+ if (log.arg) logdensity else exp(logdensity)
+}
+
+
+# ref: calculated from F(x) from Kus, pg 4499
+# updated and working on 22/15/2010
+qexppois<- function(p, lambda, betave = 1) {
+ ans <- -log(log(p * -(expm1(lambda)) +
+ exp(lambda)) / lambda) / betave
+ ans[(lambda <= 0) | (betave <= 0)] = NaN
+ ans[p < 0] <- NaN
+ ans[p > 1] <- NaN
+ ans
+}
+
+
+
+# ref: Kus, eqn 2, pg 4499
+# Updated on 22/12/2010
+pexppois<- function(q, lambda, betave = 1) {
+ ans <-(exp(lambda * exp(-betave * q)) - exp(lambda)) / -expm1(lambda)
+ ans[q <= 0] <- 0
+ ans[(lambda <= 0) | (betave <= 0)] <- NaN
+ ans
+}
+
+
+
+# ref: calculated from F(x) from Kus, pg 4499
+# updated and working on 22/15/2010
+rexppois <- function(n, lambda, betave = 1) {
+ ans <- -log(log(runif(n) * -(expm1(lambda)) +
+ exp(lambda)) / lambda) / betave
+ ans[(lambda <= 0) | (betave <= 0)] <- NaN
+ ans
+}
+
+
+
+
+
+
+###################
+# the family function
+# reference: Karlis CSDA 53 (2009) pg 894 and
+# Kus CSDA 51 (2007) pg 4497
+#
+# Notes:
+# 1. Requires the \pkg{hypergeo} package
+# (to use their \code{\link[hypergeo]{genhypergeo}} function).
+
+ exppoisson = function (llambda = "loge", lbetave = "loge",
+ elambda = list(), ebetave = list(),
+ ilambda = 1.1, ibetave = 2.0,
+ zero = NULL) {
+
+ if (mode(llambda) != "character" && mode(llambda) != "name")
+ llambda = as.character(substitute(llambda))
+ if (mode(lbetave) != "character" && mode(lbetave) != "name")
+ lbetave = as.character(substitute(lbetave))
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+ if (length(ilambda) && !is.Numeric(ilambda, posit = TRUE))
+ stop("bad input for argument 'ilambda'")
+ if (length(ibetave) && !is.Numeric(ibetave, posit = TRUE))
+ stop("bad input for argument 'ibetave'")
+
+ ilambda[abs(ilambda - 1) < 0.01] = 1.1
+ if (!is.list(ebetave))
+ ebetave = list()
+ if (!is.list(elambda))
+ elambda = list()
+
+#print("hi4, 20110319")
+ new("vglmff",
+ blurb = c("Exponential Poisson distribution \n \n",
+ "Links: ",
+ namesof("lambda", llambda, earg = elambda), ", ",
+ namesof("betave", lbetave, earg = ebetave), "\n",
+ "Mean: lambda/(expm1(lambda) * betave)) * ",
+ "genhypergeo(c(1,1),c(2,2),lambda)"),
+
+# genhypergeo() from package: hypergeo
+# ref = mean from Kus pg 4499
+
+ constraints = eval(substitute(expression({
+ constraints = cm.zero.vgam(constraints, x, .zero , M)
+ }), list( .zero = zero))),
+
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names = c(
+ namesof("lambda", .llambda, earg = .elambda, short = TRUE),
+ namesof("betave", .lbetave, earg = .ebetave, short = TRUE))
+
+ if (!length(etastart)) {
+#MLE for lambda from Kus eqn(6) pg 4500
+ betave.init = if (length( .ibetave ))
+ rep( .ibetave , len = n) else
+ stop("Need to input a value into argument 'ibetave'")
+ ## (lambda.init/(expm1(lambda.init) * (y + 1/8))) *
+ ## genhypergeo(c(1,1),c(2,2),lambda.init)
+ lambda.init = if (length( .ilambda ))
+ rep( .ilambda , len = n) else
+ (1/betave.init - mean(y)) / ((y *
+ exp(-betave.init * y))/n)
+
+# supply inital values for now to get function working
+
+ betave.init = rep(weighted.mean(betave.init, w = w), len = n)
+#print("head(lambda.init)")
+#print( head(lambda.init) )
+#print("head(betave.init)")
+#print( head(betave.init) )
+
+ etastart = cbind(theta2eta(lambda.init, .llambda ,earg = .elambda ),
+ theta2eta(betave.init, .lbetave ,earg = .ebetave ))
+
+#print("head(etastart, 3)")
+#print( head(etastart, 3) )
+ }
+ }), list( .llambda = llambda, .lbetave = lbetave,
+ .ilambda = ilambda, .ibetave = ibetave,
+ .elambda = elambda, .ebetave = ebetave))),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
+ betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
+
+# warning("returning dud means")
+# mu
+# runif(nrow(eta))
+
+# 20110319; not sure about the following:
+# 20110319; and not in .Rd file.
+ -lambda * genhypergeo(c(1, 1), c(2, 2), lambda) / (expm1(-lambda) *
+ betave)
+ }, list( .llambda = llambda, .lbetave = lbetave,
+ .elambda = elambda, .ebetave = ebetave))),
+
+ last = eval(substitute(expression({
+ misc$link = c(lambda = .llambda , betave = .lbetave )
+ misc$earg = list(lambda = .elambda , betave = .ebetave )
+ misc$expected = TRUE
+
+ }), list( .llambda = llambda, .lbetave = lbetave,
+ .elambda = elambda, .ebetave = ebetave))),
+
+ loglikelihood = eval(substitute(function(mu, y, w,
+ residuals = FALSE, eta, extra = NULL) {
+ lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
+ betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dexppois(x = y, lambda = lambda, betave = betave,
+ log = TRUE))
+ }
+ }, list( .lbetave = lbetave , .llambda = llambda ,
+ .elambda = elambda , .ebetave = ebetave ))),
+
+ vfamily = c("exppoisson"),
+
+# Updated 22/12/2010
+ deriv = eval(substitute(expression({
+ lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
+ betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
+ dl.dbetave = 1/betave - y - y * lambda * exp(-betave * y)
+ dl.dlambda = 1/lambda - 1/expm1(lambda) - 1 + exp(-betave * y)
+ dbetave.deta = dtheta.deta(betave, .lbetave , earg = .ebetave )
+ dlambda.deta = dtheta.deta(lambda, .llambda , earg = .elambda )
+ c(w) * cbind(dl.dlambda * dlambda.deta, dl.dbetave * dbetave.deta)
+ }), list( .llambda = llambda, .lbetave = lbetave,
+ .elambda = elambda, .ebetave = ebetave ))),
+
+ weight = eval(substitute(expression({
+
+# Updated 22/12/2010
+ temp1 = -expm1(-lambda)
+
+# Ref: Kus, pg 4502, J11
+ ed2l.dlambda2 = (1 + exp(2 * lambda) - lambda^2 * exp(lambda) - 2 *
+ exp(lambda)) / (lambda * temp1)^2
+
+
+# Ref: Kus, pg 4502, J22
+ ed2l.dbetave2 = 1 / betave^2 - (lambda^2 * exp(-lambda) / (4 *
+ betave^2 * temp1)) *
+ genhypergeo(c(2,2,2),c(3,3,3),lambda)
+
+# Ref: Kus, pg 4502,J12
+ ed2l.dbetavelambda = (lambda * exp(-lambda) / (4 * betave * temp1)) *
+ genhypergeo(c(2,2),c(3,3),lambda)
+
+ wz <- matrix(0, n, dimm(M))
+ wz[, iam(1, 1, M)] = dlambda.deta^2 * ed2l.dlambda2
+ wz[, iam(2, 2, M)] = dbetave.deta^2 * ed2l.dbetave2
+ wz[, iam(1, 2, M)] = dbetave.deta * dlambda.deta * ed2l.dbetavelambda
+ c(w) * wz
+ }), list( .zero = zero ))))
+}
+
+
+
+
+
+
+#=======================================================================
+# 14/12/10 [drpq]genray() and genrayleigh().
+# References: Kundu and Raqab, CSDA 49 (2005) pg 187 and
+# Raqab and Kundu "Burr Type X Distribution Revisited"
+
+# Updated by Thomas 10/01/2011
+# Notes:
+# 1. scale = 1 / \lambda here, = \delta, say.
+# 2. My calculations showed EIM_{12} did not agree with Kundu and
+# Raqab, (2005). So am using nsimEIM.
+
+
+
+# Ref: Kundu pg 188
+# Updated 22/12/10
+dgenray <- function(x, shape, scale = 1, log = FALSE) {
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ N <- max(length(x), length(shape), length(scale))
+ x <- rep(x, len = N)
+ shape <- rep(shape, len = N)
+ scale <- rep(scale, len = N)
+
+ logdensity <- rep(log(0), len = N)
+ if (any(xok <- (x > 0))) {
+ temp1 <- x[xok] / scale[xok]
+ logdensity[xok] <- log(2) + log(shape[xok]) + log(x[xok]) -
+ 2 * log(scale[xok]) - temp1^2 +
+ (shape[xok] - 1) * log1p(-exp(-temp1^2))
+ }
+ logdensity[(shape <= 0) | (scale <= 0)] <- NaN
+ if (log.arg) {
+ logdensity
+ } else {
+ exp(logdensity)
+ }
+}
+
+
+# Ref: Kundu pg 188
+# Updated 22/12/10
+pgenray <- function(q, shape, scale = 1) {
+ ans <- (-expm1(-(q/scale)^2))^shape
+ ans[q <= 0] <- 0
+ ans[(shape <= 0) | (scale <= 0)] <- NaN
+ ans
+}
+
+
+# Ref: Kundu pg 193
+# Updated 22/12/10
+qgenray <- function(p, shape, scale = 1) {
+ ans <- scale * sqrt(-log1p(-(p^(1/shape))))
+ ans[(shape <= 0) | (scale <= 0)] = NaN
+ ans[p < 0] <- NaN
+ ans[p > 1] <- NaN
+ ans[p == 0] <- 0
+ ans[p == 1] <- Inf
+ ans
+}
+
+
+
+
+# Ref: Kundu pg 193
+# Updated 22/12/10
+rgenray <- function(n, shape, scale = 1) {
+ ans <- qgenray(runif(n), shape = shape, scale = scale)
+ ans[(shape <= 0) | (scale <= 0)] <- NaN
+ ans
+}
+
+
+
+###################
+# The family function
+# References: Kundu CSDA 49 (2005) pg 187 & Raqab and
+# Kundu "Burr Type X Distribution Revisited"
+# updated 05/01/2011
+# updated by Thomas 10/01/2011
+
+genrayleigh.control <- function(save.weight = TRUE, ...)
+{
+# Because of nsimEIM in @weight
+ list(save.weight = save.weight)
+}
+
+ genrayleigh = function (lshape = "loge", lscale = "loge",
+ eshape = list(), escale = list(),
+ ishape = NULL, iscale = NULL,
+ tol12 = 1.0e-05,
+ nsimEIM = 300, zero = 1) {
+
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape = as.character(substitute(lshape))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+
+ if (length(ishape) && !is.Numeric(ishape, posit = TRUE))
+ stop("bad input for argument 'ishape'")
+ if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
+ stop("bad input for argument 'iscale'")
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 50)
+ stop("'nsimEIM' should be an integer greater than 50")
+
+ if (!is.list(escale))
+ escale = list()
+ if (!is.list(eshape))
+ eshape = list()
+
+
+ new("vglmff",
+ blurb = c("Generalized Rayleigh distribution\n",
+ "Links: ",
+ namesof("shape", lshape, earg = eshape), ", ",
+ namesof("scale", lscale, earg = escale), "\n"),
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names = c(
+ namesof("shape", .lshape , earg = .eshape , short = TRUE),
+ namesof("scale", .lscale , earg = .escale , short = TRUE))
+
+# Following getmaxmin method implemented on 06/01/11
+ if (!length(etastart)) {
+ genrayleigh.Loglikfun = function(scale, y, x, w, extraargs) {
+ temp1 <- y / scale
+# Equation (7) from Kundu and Raqab, p.190, which derives from their (2).
+# It gives the MLE of shape, given Scale.
+ shape = -1 / weighted.mean(log1p(-exp(-temp1^2)), w = w)
+
+ ans <- sum(w * (log(2) + log(shape) + log(y) - 2 * log(scale) -
+ temp1^2 + (shape - 1) * log1p(-exp(-temp1^2))))
+#print("c(scale, ans)")
+#print( c(scale, ans) )
+ ans
+ }
+# Note: problems occur if scale values too close to zero:
+ scale.grid = seq(0.2 * stats:::sd(y), 5 * stats:::sd(y), len = 29)
+ scale.init = if (length( .iscale )) .iscale else
+ getMaxMin(scale.grid, objfun = genrayleigh.Loglikfun,
+ y = y, x = x, w = w)
+#print("head(scale.init)")
+#print( head(scale.init) )
+ scale.init = rep(scale.init, length = length(y))
+
+ shape.init = if (length( .ishape )) .ishape else
+ -1 / weighted.mean(log1p(-exp(-(y/scale.init)^2)),
+ w = w)
+#print("head(shape.init)")
+#print( head(shape.init) )
+ shape.init = rep(shape.init, length = length(y))
+
+ etastart = cbind(theta2eta(shape.init, .lshape, earg = .eshape),
+ theta2eta(scale.init, .lscale, earg = .escale))
+#print(",,,,,,,,,,,,,,,,,,,")
+ }
+ }), list( .lscale = lscale, .lshape = lshape,
+ .iscale = iscale, .ishape = ishape,
+ .escale = escale, .eshape = eshape))),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
+ Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
+# zz yet to do: Find expression for mean
+# Much easier to return the median rather than the mean:
+ qgenray(p = 0.5, shape = shape, scale = Scale)
+ }, list( .lshape = lshape, .lscale = lscale,
+ .eshape = eshape, .escale = escale ))),
+
+ last = eval(substitute(expression({
+ misc$link = c(shape = .lshape , scale = .lscale )
+ misc$earg = list(shape = .eshape , scale = .escale )
+ misc$expected = TRUE
+ misc$nsimEIM = .nsimEIM
+ }), list( .lshape = lshape, .lscale = lscale,
+ .eshape = eshape, .escale = escale,
+ .nsimEIM = nsimEIM ))),
+
+ loglikelihood = eval(substitute(function(mu, y, w,
+ residuals = FALSE, eta, extra = NULL) {
+
+ shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
+ Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
+#print("head(shape, 3)")
+#print( head(shape, 3) )
+#print("head(Scale, 3)")
+#print( head(Scale, 3) )
+
+ if (residuals) stop("loglikelihood residuals",
+ "not implemented yet") else {
+ sum(w * dgenray(x = y, shape = shape, scale = Scale, log = TRUE))
+ }
+ }, list( .lshape = lshape , .lscale = lscale ,
+ .eshape = eshape , .escale = escale ))),
+
+ vfamily = c("genrayleigh"),
+
+ deriv = eval(substitute(expression({
+ shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
+ Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
+#print("head(shape, 3)")
+#print( head(shape, 3) )
+#print("head(Scale, 3)")
+#print( head(Scale, 3) )
+ dshape.deta = dtheta.deta(shape, .lshape , earg = .eshape )
+ dscale.deta = dtheta.deta(Scale, .lscale , earg = .escale )
+ dthetas.detas = cbind(dshape.deta, dscale.deta)
+
+# Note: singularities wrt derivatives at shape==0 and zz:
+ temp1 <- y / Scale
+ temp2 <- exp(-temp1^2)
+ temp3 <- temp1^2 / Scale
+ AAA <- 2 * temp1^2 / Scale # 2 * y^2 / Scale^3
+ BBB <- -expm1(-temp1^2) # denominator
+ dl.dshape = 1/shape + log1p(-temp2)
+ dl.dscale = -2 / Scale + AAA * (1 - (shape - 1) * temp2 / BBB)
+
+# Special fixup:
+ dl.dshape[!is.finite(dl.dshape)] = max(dl.dshape[is.finite(dl.dshape)])
+
+ answer <- c(w) * cbind(dl.dshape, dl.dscale) * dthetas.detas
+#print("summary(answer)")
+#print( summary(answer) )
+#print("head(answer, 3)")
+#print( head(answer, 3) )
+ answer
+ }), list( .lshape = lshape , .lscale = lscale,
+ .eshape = eshape, .escale = escale ))),
+
+ weight = eval(substitute(expression({
+# 20110108; I disagree with EIM_{12} of pg 190 of Kundu and Raqab.
+# So am using simulated Fisher scoring.
+
+# Notes:
+# 1. Inf occurs (albeit infequently) for dl.dshape when ysim is close to 0
+# Special fixup to handle this.
+
+ run.varcov = 0
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rgenray(n = n, shape = shape, scale = Scale)
+
+ temp1 <- ysim / Scale
+ temp2 <- exp(-temp1^2) # May be 1 if ysim is very close to 0.
+ temp3 <- temp1^2 / Scale
+ AAA <- 2 * temp1^2 / Scale # 2 * y^2 / Scale^3
+ BBB <- -expm1(-temp1^2) # denominator
+ dl.dshape = 1/shape + log1p(-temp2)
+ dl.dscale = -2 / Scale + AAA * (1 - (shape - 1) * temp2 / BBB)
+
+# Special fixup:
+ dl.dshape[!is.finite(dl.dshape)] = max(
+ dl.dshape[is.finite(dl.dshape)])
+
+ temp3 = cbind(dl.dshape, dl.dscale)
+ run.varcov = run.varcov + temp3[, ind1$row.index] *
+ temp3[, ind1$col.index]
+ }
+ run.varcov = run.varcov / .nsimEIM
+
+ wz = if (intercept.only)
+ matrix(colMeans(run.varcov, na.rm = FALSE),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
+ wz = wz * dthetas.detas[, ind1$row] * dthetas.detas[, ind1$col]
+#print("summary(run.varcov)")
+#print( summary(run.varcov) )
+#print("summary(wz)")
+#print( summary(wz) )
+#print("head(wz,3)")
+#print( head(wz,3) )
+ c(w) * wz
+ }), list( .lshape = lshape , .lscale = lscale,
+ .eshape = eshape, .escale = escale,
+ .tol12 = tol12, .nsimEIM = nsimEIM ))))
+}
+
+
+
+
+
+
+
+#=======================================================================
+# 20/01/10; [drpq]expgeom() and expgeometric().
+# Reference: Adamidis and Loukas, SPL 39 (1998) pg 35--42
+
+# Notes:
+# Scale is the reciprocal of scale in Adamidis.
+# Updated and working 03/02/2011
+
+
+# Ref: Adamidis pg.36
+dexpgeom <- function(x, scale = 1, shape, log = FALSE) {
+# 20110201; looks okay.
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ N <- max(length(x), length(scale), length(shape))
+ x <- rep(x, len = N)
+ scale <- rep(scale, len = N)
+ shape <- rep(shape, len = N)
+
+ logdensity <- rep(log(0), len = N)
+ if (any(xok <- (x > 0))) {
+ temp1 <- -x[xok] / scale[xok]
+ logdensity[xok] <- -log(scale[xok]) + log1p(-shape[xok]) +
+ temp1 - 2 * log1p(-shape[xok] * exp(temp1))
+ }
+
+ logdensity[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ if (log.arg) {
+ logdensity
+ } else {
+ exp(logdensity)
+ }
+}
+
+
+# Ref: Adamidis p.37, (3.1)
+pexpgeom <- function(q, scale = 1, shape) {
+# 20110201; looks okay.
+ temp1 <- -q / scale
+ ans <- -expm1(temp1) / (1 - shape * exp(temp1))
+ ans[q <= 0] <- 0
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans
+}
+
+
+qexpgeom <- function(p, scale = 1, shape) {
+# 20110201; looks okay.
+ ans <- (-scale) * log((p - 1) / (p * shape - 1))
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans[p < 0] <- NaN
+ ans[p > 1] <- NaN
+ ans[p == 0] <- 0
+ ans[p == 1] <- Inf
+ ans
+}
+
+
+rexpgeom <- function(n, scale = 1, shape) {
+ ans <- qexpgeom(runif(n), shape = shape, scale = scale)
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans
+}
+
+
+
+#=================================================================
+# Exponential geometric family function.
+# Reference: Adamidis & Loukas, SPL 39 (1998) pg 35--42
+# All derivatives etc copied directly from article
+# Updated and working 03/02/2011
+
+# Notes:
+# Scale is the reciprocal of scale in Adamidis.
+
+expgeometric.control <- function(save.weight = TRUE, ...)
+{
+# Because of nsimEIM in @weight
+ list(save.weight = save.weight)
+}
+
+
+ expgeometric = function (lscale = "loge", lshape = "logit",
+ escale = list(), eshape = list(),
+ iscale = NULL, ishape = NULL,
+ tol12 = 1.0e-05, zero = 1,
+ nsimEIM = 400) {
+
+# 20110102; modified by TWYee. Works.
+# Yet to do: get proper Fisher scoring going.
+
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape = as.character(substitute(lshape))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+
+ if (length(ishape))
+ if (!is.Numeric(ishape, posit = TRUE) || any(ishape >= 1))
+ stop("bad input for argument 'ishape'")
+
+ if (length(iscale))
+ if (!is.Numeric(iscale, posit = TRUE))
+ stop("bad input for argument 'iscale'")
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+
+ if (!is.list(escale))
+ escale = list()
+ if (!is.list(eshape))
+ eshape = list()
+
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
+ stop("bad input for argument 'nsimEIM'")
+ if (nsimEIM <= 50)
+ stop("'nsimEIM' should be an integer greater than 50")
+
+
+ new("vglmff",
+ blurb = c("Exponential geometric distribution\n\n",
+ "Links: ",
+ namesof("Scale", lscale, earg = escale), ", ",
+ namesof("shape", lshape, earg = eshape), "\n",
+ "Mean: ", "(shape - 1) * log(1 - ",
+ "shape) / (shape / Scale)"),
+# mean = Adamidis eqn. (3.2)
+
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+
+
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names = c(
+ namesof("Scale", .lscale , earg = .escale , short = TRUE),
+ namesof("shape", .lshape , earg = .eshape , short = TRUE))
+
+ if (!length(etastart)) {
+
+ scale.init = if (is.Numeric( .iscale , posit = TRUE)) {
+ rep( .iscale , len = n)
+ } else {
+# The scale parameter should be
+# the standard deviation of y.
+ stats:::sd(y) # The papers scale parameter beta
+ }
+#print("head(scale.init)")
+#print( head(scale.init) )
+
+ shape.init = if (is.Numeric( .ishape , posit = TRUE)) {
+ rep( .ishape , len = n)
+ } else {
+# Use the formula for the median:
+ rep(2 - exp(median(y)/scale.init), len = n)
+ }
+# But avoid extremes:
+ shape.init[shape.init >= 0.95] = 0.95
+ shape.init[shape.init <= 0.05] = 0.05
+
+#print("head(shape.init)")
+#print( head(shape.init) )
+
+ etastart = cbind(theta2eta(scale.init, .lscale , earg = .escale ),
+ theta2eta(shape.init, .lshape , earg = .eshape ))
+
+#print("head(etastart, 3)")
+#print( head(etastart, 3) )
+ }
+ }), list( .lscale = lscale, .lshape = lshape,
+ .iscale = iscale, .ishape = ishape,
+ .escale = escale, .eshape = eshape))),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+
+# Return the mean as fitted value; Adamidis Equation (3.2)
+ (shape - 1) * log1p(-shape) / (shape / Scale)
+
+ }, list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+
+ last = eval(substitute(expression({
+ misc$link = c(Scale = .lscale , shape = .lshape )
+ misc$earg = list(Scale = .escale , shape = .eshape )
+ misc$expected = TRUE
+ misc$nsimEIM = .nsimEIM
+ }), list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape,
+ .nsimEIM = nsimEIM ))),
+
+ loglikelihood = eval(substitute(function(mu, y, w,
+ residuals = FALSE, eta, extra = NULL) {
+
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+#print("head(shape, 3)")
+#print( head(shape, 3) )
+#print("head(Scale, 3)")
+#print( head(Scale, 3) )
+
+ if (residuals) stop("loglikelihood residuals",
+ "not implemented yet") else {
+ sum(w * dexpgeom(x = y, scale = Scale, shape = shape, log = TRUE))
+ }
+ }, list( .lscale = lscale , .lshape = lshape ,
+ .escale = escale , .eshape = eshape ))),
+
+ vfamily = c("expgeometric"),
+
+ deriv = eval(substitute(expression({
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+
+# JGL calculated:
+ temp2 <- exp(-y / Scale)
+ temp3 <- shape * temp2
+ temp4 <- y / Scale^2
+ dl.dscale = -1 / Scale + temp4 + 2 * temp4 * temp3 / (1 - temp3)
+ dl.dshape = -1 / (1 - shape) + 2 * temp2 / (1 - temp3)
+
+ dscale.deta = dtheta.deta(Scale, .lscale , earg = .escale )
+ dshape.deta = dtheta.deta(shape, .lshape , earg = .eshape )
+ dthetas.detas = cbind(dscale.deta, dshape.deta)
+
+ answer <- c(w) * cbind(dl.dscale, dl.dshape) * dthetas.detas
+#print("summary(answer)")
+#print( summary(answer) )
+#print("head(answer, 3)")
+#print( head(answer, 3) )
+ answer
+ }), list( .lscale = lscale , .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+
+#######################
+ weight = eval(substitute(expression({
+
+#EIM copied exactly as Adamidis article page 40
+# Yet to do: get this proper Fisher scoring going.
+
+# gls package function "dilog()" used for polylog function..check up
+# on this.
+# if (FALSE) {
+
+# ed2l.dscale2 = (3 * shape - 2 * (shape - (1 - shape) *
+# (gsl:::dilog(shape,2)$val))) / (3 * Scale^2 * shape)
+
+# ed2l.dshape2 = (1 - shape)^(-2) / 3
+
+# ed2l.dscaleshape = (4 * shape^2 - shape + (1 - shape)^2 *
+# log1p(-shape)) / (3 * Scale * shape^2 * (1 - shape))
+
+# wz <- matrix(0, n, dimm(M))
+# wz[, iam(1, 1, M)] = dscale.deta^2 * ed2l.dscale2
+# wz[, iam(2, 2, M)] = dshape.deta^2 * ed2l.dshape2
+# wz[, iam(1, 2, M)] = dscale.deta * dshape.deta * ed2l.dscaleshape
+# c(w) * wz
+# }
+
+
+# 5/10/07: Use simulation to estimate the EIM
+# Use an updating formula for the mean and variance
+# Ref.: Hastie and Tibshirani, 1990, GAM book, p.35.
+# Here, the variance has 'n' in denominator, not 'n-1'.
+
+ run.varcov = 0
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+
+ if (length( .nsimEIM )) {
+# Simulated FS used only if nsimEIM was specified.
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rexpgeom(n, scale=Scale, shape=shape)
+
+# Now compute some quantities
+ temp2 <- exp(-ysim / Scale)
+ temp3 <- shape * temp2
+ temp4 <- ysim / Scale^2
+ dl.dscale = -1 / Scale + temp4 +
+ 2 * temp4 * temp3 / (1 - temp3)
+ dl.dshape = -1 / (1 - shape) +
+ 2 * temp2 / (1 - temp3)
+
+ temp6 = cbind(dl.dscale, dl.dshape)
+#print("temp6[1:3,]")
+#print( temp6[1:3,] )
+ run.varcov = run.varcov +
+ temp6[,ind1$row.index] * temp6[,ind1$col.index]
+ }
+
+ run.varcov = run.varcov / .nsimEIM
+
+# Can do even better if it is an intercept-only model
+ wz = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
+
+#print("wz[1:3,]")
+#print( wz[1:3,] )
+ wz = wz * dthetas.detas[, ind1$row] *
+ dthetas.detas[, ind1$col]
+#print("using simulation")
+ }
+#print("wz[1:3,]")
+#print( wz[1:3,] )
+
+ c(w) * wz
+ }), list( .nsimEIM = nsimEIM ))))
+}
+
+
+
+
+
+
+#=======================================================================
+# 16/02/10; [drpq]explog() and explogarithmic().
+# Reference: Tahmasabi and Rezaei, CSDA 52 (2008) pg 3889--3901
+
+# Notes:
+# Scale is the reciprocal of scale in Tahmasabi.
+
+
+# Ref: Tahmasabi pg.3890
+dexplog <- function(x, scale = 1, shape, log = FALSE) {
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ N <- max(length(x), length(scale), length(shape))
+ x <- rep(x, len = N)
+ scale <- rep(scale, len = N)
+ shape <- rep(shape, len = N)
+
+ logdensity <- rep(log(0), len = N)
+ if (any(xok <- (x > 0))) {
+ temp1 <- -x[xok] / scale[xok]
+ logdensity[xok] <- -log(-log(shape[xok])) - log(scale[xok]) +
+ log1p(-shape[xok]) + temp1 -
+ log1p(-(1-shape[xok]) * exp(temp1))
+ }
+
+ logdensity[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ if (log.arg) {
+ logdensity
+ } else {
+ exp(logdensity)
+ }
+}
+
+
+# Ref: Tahmasabi pg. 3890
+pexplog <- function(q, scale = 1, shape) {
+ ans <- 1 - log1p(-(1-shape) * exp(-q / scale)) / log(shape)
+ ans[q <= 0] <- 0
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans
+}
+
+
+
+#ref: Tahmasabi pg. 3892
+# 20110319; this was wrong. Corrected by TWY.
+qexplog <- function(p, scale = 1, shape) {
+
+# orig is wrong:
+# ans <- scale * log((1 - shape) / (1 - shape^p))
+
+# 20110319, twy picked up an error:
+ ans <- -scale * (log1p(-shape^(1.0 - p)) - log1p(-shape))
+
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans[p < 0] <- NaN
+ ans[p > 1] <- NaN
+ ans[p == 0] <- 0
+ ans[p == 1] <- Inf
+ ans
+}
+
+
+
+#ref: Tahmasabi pg. 3892
+rexplog <- function(n, scale = 1, shape) {
+ ans <- qexplog(runif(n), scale = scale, shape = shape)
+ ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
+ ans
+}
+
+
+
+
+
+
+#=================================================================
+# Exponential logarithmic.
+# Reference: Tahmasbi and Rezaei, CSDA 52 (2008) pg 3889--3901
+
+# Notes:
+# Scale is the reciprocal of scale in Tahmasabi.
+
+#updated and working 27/02/11
+explogarithmic.control <- function(save.weight = TRUE, ...)
+{
+# Because of nsimEIM in @weight
+ list(save.weight = save.weight)
+}
+
+ explogarithmic = function (lscale = "loge", lshape = "logit",
+ escale = list(), eshape = list(),
+ iscale = NULL, ishape = NULL,
+ tol12 = 1.0e-05, zero = 1,
+ nsimEIM = 400) {
+
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape = as.character(substitute(lshape))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+
+ if (length(ishape))
+ if (!is.Numeric(ishape, posit = TRUE) || any(ishape >= 1))
+ stop("bad input for argument 'ishape'")
+
+ if (length(iscale))
+ if (!is.Numeric(iscale, posit = TRUE))
+ stop("bad input for argument 'iscale'")
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+
+ if (!is.list(escale))
+ escale = list()
+ if (!is.list(eshape))
+ eshape = list()
+
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
+ stop("bad input for argument 'nsimEIM'")
+ if (nsimEIM <= 50)
+ stop("'nsimEIM' should be an integer greater than 50")
+
+ new("vglmff",
+ blurb = c("Exponential logarithmic distribution\n\n",
+ "Links: ",
+ namesof("Scale", lscale, earg = escale), ", ",
+ namesof("shape", lshape, earg = eshape), "\n",
+ "Mean: ", "(-polylog(2, 1 - p) * Scale) / log(shape)"),
+# mean = Tahmabasi pg. 3891
+
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+
+ initialize = eval(substitute(expression({
+ if (ncol(cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+
+ predictors.names = c(
+ namesof("Scale", .lscale , earg = .escale , short = TRUE),
+ namesof("shape", .lshape , earg = .eshape , short = TRUE))
+
+ if (!length(etastart)) {
+
+ scale.init = if (is.Numeric( .iscale , posit = TRUE)) {
+ rep( .iscale , len = n)
+ } else {
+# The scale parameter should be
+# the standard deviation of y.
+ stats:::sd(y)
+ }
+
+ shape.init = if (is.Numeric( .ishape , posit = TRUE)) {
+ rep( .ishape , len = n)
+ } else {
+# Use the formula for the median (Tahmasabi pg. 3891):
+ rep((exp(median(y)/scale.init) - 1)^2, len = n)
+ }
+# But avoid extremes:
+ shape.init[shape.init >= 0.95] = 0.95
+ shape.init[shape.init <= 0.05] = 0.05
+
+#print("head(scale.init)")
+#print( head(scale.init) )
+#print("head(shape.init)")
+#print( head(shape.init) )
+
+ etastart = cbind(theta2eta(scale.init, .lscale , earg = .escale ),
+ theta2eta(shape.init, .lshape , earg = .eshape ))
+
+#print("head(etastart, 3)")
+#print( head(etastart, 3) )
+ }
+ }), list( .lscale = lscale, .lshape = lshape,
+ .iscale = iscale, .ishape = ishape,
+ .escale = escale, .eshape = eshape))),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+
+# warning("returning dud means")
+# runif(nrow(eta))
+# zz yet to do: Find polylog function
+
+# mean should be the fitted value; Tahmasabi pg. 3891
+# (-polylog(2, 1 - p) * Scale) / log(shape)
+# mean contains polylog function therefore return median for now:
+
+ qexplog(p = 0.5, shape = shape, scale = Scale)
+
+ }, list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+
+ last = eval(substitute(expression({
+ misc$link = c(Scale = .lscale , shape = .lshape )
+ misc$earg = list(Scale = .escale , shape = .eshape )
+ misc$expected = TRUE
+ misc$nsimEIM = .nsimEIM
+ }), list( .lscale = lscale, .lshape = lshape,
+ .escale = escale, .eshape = eshape,
+ .nsimEIM = nsimEIM ))),
+
+ loglikelihood = eval(substitute(function(mu, y, w,
+ residuals = FALSE, eta, extra = NULL) {
+
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+
+#print("head(shape, 3)")
+#print( head(shape, 3) )
+#print("head(Scale, 3)")
+#print( head(Scale, 3) )
+
+ if (residuals) stop("loglikelihood residuals",
+ "not implemented yet") else {
+ sum(w * dexplog(x = y, scale = Scale, shape = shape, log = TRUE))
+ }
+ }, list( .lscale = lscale , .lshape = lshape ,
+ .escale = escale , .eshape = eshape ))),
+
+ vfamily = c("explogarithmic"),
+
+ deriv = eval(substitute(expression({
+ Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
+ shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
+
+# JGL calculated:
+ temp2 <- exp(-y / Scale)
+ temp3 <- y / Scale^2
+ temp4 <- 1 - shape
+ dl.dscale = (-1 / Scale) + temp3 + (temp4 * temp3 *
+ temp2) / (1 - temp4 * temp2)
+ dl.dshape = -1 / (shape * log(shape)) - 1 / temp4 -
+ temp2 / (1 - temp4 * temp2)
+
+ dscale.deta = dtheta.deta(Scale, .lscale , earg = .escale )
+ dshape.deta = dtheta.deta(shape, .lshape , earg = .eshape )
+ dthetas.detas = cbind(dscale.deta, dshape.deta)
+
+ answer <- c(w) * cbind(dl.dscale, dl.dshape) * dthetas.detas
+#print("summary(answer)")
+#print( summary(answer) )
+#print("head(answer, 3)")
+#print( head(answer, 3) )
+ answer
+ }), list( .lscale = lscale , .lshape = lshape,
+ .escale = escale, .eshape = eshape ))),
+
+#######################
+ weight = eval(substitute(expression({
+
+
+# 5/10/07: Use simulation to estimate the EIM
+
+ run.varcov = 0
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+
+ if (length( .nsimEIM )) {
+# Simulated FS used only if nsimEIM was specified.
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rexplog(n, scale=Scale, shape=shape)
+
+# Now compute some quantities
+ temp2 <- exp(-ysim / Scale)
+ temp3 <- ysim / Scale^2
+ temp4 <- 1 - shape
+ dl.dscale = (-1 / Scale) + temp3 + (temp4 * temp3 *
+ temp2) / (1 - temp4 * temp2)
+ dl.dshape = -1 / (shape * log(shape)) - 1 / temp4 -
+ temp2 / (1 - temp4 * temp2)
+
+ temp6 = cbind(dl.dscale, dl.dshape)
+#print("temp6[1:3,]")
+#print( temp6[1:3,] )
+ run.varcov = run.varcov +
+ temp6[,ind1$row.index] * temp6[,ind1$col.index]
+ }
+
+ run.varcov = run.varcov / .nsimEIM
+
+# Can do even better if it is an intercept-only model
+ wz = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
+
+#print("wz[1:3,]")
+#print( wz[1:3,] )
+ wz = wz * dthetas.detas[, ind1$row] *
+ dthetas.detas[, ind1$col]
+#print("using simulation")
+ }
+#print("wz[1:3,]")
+#print( wz[1:3,] )
+
+ c(w) * wz
+ }), list( .nsimEIM = nsimEIM ))))
+}
+
+
+
+
+
+
+
+#=======================================================================
+# 09/02/10; [drpq]weibull3()
+# Reference "The Weibull distribution - A Handbook" by Horst Rinne
+
+
+# 20110319; withdrawing [dpqrt]weibull3() due to regularity conditions not
+# being met.
+
+
+
+#Ref: pg. 30
+#working 10/02/2010
+dweibull3 <- function(x, location = 0, scale = 1, shape, log = FALSE) {
+
+ log.arg = log
+ rm(log)
+ dweibull(x = x - location, shape = shape, scale = scale, log = log.arg)
+}
+
+# Ref: pg 43
+# working 10/02/2010
+pweibull3 <- function(q, location = 0, scale = 1, shape) {
+ pweibull(q = q - location, scale = scale, shape = shape)
+}
+
+
+# Ref: pg 68
+# updated and working 18/02/2010
+qweibull3 <- function(p, location = 0, scale = 1, shape) {
+ location + qweibull(p = p, shape = shape, scale = scale)
+}
+
+
+# Ref: pg 68
+# working 11/02/2010
+rweibull3 <- function(n, location = 0, scale = 1, shape) {
+ location + rweibull(n = n, shape = shape, scale = scale)
+}
+
+
+#=====================================
+# 3-parameter Weibull function
+# 07/02/2011
+
+# This code is based on the 2-parameter Weibull function weibull()
+# Does not accomodate censoring yet.
+# Reference "The Weibull distribution - A Handbook" by Horst Rinne
+
+if (FALSE)
+ weibull3 = function(llocation = "identity", lscale = "loge",
+ lshape = "loge", elocation = list(),
+ escale = list(), eshape = list(),
+ ilocation = NULL, iscale = NULL, ishape = NULL,
+ imethod = 1, zero = c(2, 3))
+{
+
+ llocat = llocation
+ elocat = elocation
+ ilocat = ilocation
+
+ if (mode(llocat) != "character" && mode(llocat) != "name")
+ llocat = as.character(substitute(llocat))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+ if (mode(lshape) != "character" && mode(lshape) != "name")
+ lshape = as.character(substitute(lshape))
+
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+
+ if (!is.Numeric(imethod, allow = 1, integer = TRUE, positi = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1, 2 or 3")
+
+ if (!is.list(elocat)) elocat = list()
+ if (!is.list(eshape)) eshape = list()
+ if (!is.list(escale)) escale = list()
+
+ new("vglmff",
+ blurb = c("3-parameter Weibull distribution\n\n",
+ "Links: ",
+ namesof("location", llocat, earg = elocat), ", ",
+ namesof("scale", lscale, earg = escale), ", ",
+ namesof("shape", lshape, earg = eshape), "\n",
+ "Mean: location + scale * gamma(1 + 1/shape)\n",
+ "Variance: scale^2 * (gamma(1 + 2/shape) - ",
+ "gamma(1 + 1/shape)^2)"),
+#Ref: Rinne (Mean - pg 77 eqn. 2.64b; Var - pg 89 eqn. 2.88a)
+ constraints = eval(substitute(expression({
+ constraints = cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+
+ initialize = eval(substitute(expression({
+ y = cbind(y)
+ if (ncol(y) > 1)
+ stop("the response must be a vector or a 1-column matrix")
+
+ if (is.SurvS4(y))
+ stop("only uncensored observations are allowed; don't use SurvS4()")
+
+ predictors.names =
+ c(namesof("location", .llocat, earg = .elocat, tag = FALSE),
+ namesof("scale", .lscale, earg = .escale, tag = FALSE),
+ namesof("shape", .lshape, earg = .eshape, tag = FALSE))
+
+
+ if (!length(etastart)) {
+#Assigning shape.init, scale.init, locat.init
+
+ if ( .imethod == 1) {
+# method of moments - Rinne page 464
+# working - 22/02/2011
+
+ if(length( .ishape )) {
+ shape.init = rep( .ishape , len = n )
+ } else {
+# approximating equation for shape
+# eqn (12.10b)
+ alpha3 = ((1/n) *(sum((y - mean(y))^3)))/((1/n) * (sum((y -
+ mean(y))^2)))^(3/2)
+# eqn (12.10d)
+ temp2 = (alpha3 + 1.14)
+ shape.init = rep(-0.729268 - 0.338679 * alpha3 + 4.96077 *
+ temp2^(-1.0422) + 0.683609 *
+ (log(temp2))^2, len = n)
+#valid for (0.52 <= shape.init <= 100)
+ }
+
+#eqn (12.9b)
+ scale.init = if(length( .iscale )) {
+ rep( .iscale , len = n )
+ } else {
+ rep(stats:::sd(y) / sqrt(gamma(1 + 2/shape.init) -
+ gamma(1 + 1/shape.init)^2) , len = n)
+ }
+
+#eqn (12.8b)
+ locat.init = if(length( .ilocat )) {
+ rep( .ilocat , len = n )
+ } else {
+ rep(mean(y) - scale.init * gamma(1 + 1/shape.init),
+ len = n)
+ }
+#location = just below min value if smaller than MOM locat.init
+ locat.init = pmin(min(y) - 0.05 * diff(range(y)), locat.init)
+ }
+ if ( .imethod == 2 || .imethod == 3) {
+ #least squares method for scale and shape
+ #with two separate methods for locat
+
+ #code from weibull (2-parameter) for least squares method
+ if (!length( .ishape ) || !length( .iscale )) {
+ anyc = FALSE # extra$leftcensored | extra$rightcensored
+ i11 = if ( .imethod == 2 || .imethod == 3) anyc else
+ FALSE
+ # can be all data
+ qvec = c(.25, .5, .75) # Arbitrary; could be made an argument
+ init.shape = if (length( .ishape )) .ishape else 1
+ ###init.shape??? should be shape.init?
+ xvec = log(-log1p(-qvec))
+ fit0 = lsfit(x = xvec, y=log(quantile(y[!i11], qvec)))
+ }
+
+ shape.init = rep(if(length( .ishape )) .ishape else
+ 1/fit0$coef["X"], len = n)
+ scale.init = rep(if(length( .iscale )) .iscale else
+ exp(fit0$coef["Intercept"]), len = n)
+ locat.init = rep(if(length( .ilocat )) .ilocat else
+ if ( .imethod == 2) {
+ ifelse(min(y)>0, 0.75, 1.25) * min(y)
+ } else {
+ min(y) - 0.05 * diff(range(y))
+ }
+ , len = n)
+ }
+#print("min(y)")
+#print( min(y) )
+#print("head(locat.init)")
+#print( head(locat.init) )
+#print("head(scale.init)")
+#print( head(scale.init) )
+#print("head(shape.init)")
+#print( head(shape.init) )
+
+ etastart =
+ cbind(theta2eta(locat.init, .llocat, earg = .elocat ),
+ theta2eta(scale.init, .lscale, earg = .escale ),
+ theta2eta(shape.init, .lshape, earg = .eshape ))
+
+ print("head(etastart, 3)")
+ print( head(etastart, 3) )
+
+ }
+ }), list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape,
+ .ilocat = ilocat, .iscale = iscale, .ishape = ishape,
+ .imethod = imethod) )),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ locat = eta2theta(eta[, 1], .llocat, earg = .elocat )
+ scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+
+# fitted value = mean (pg.77 eqn. 2.64b)
+ locat + scale * gamma(1 + 1/shape)
+
+ }, list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape ) )),
+ last = eval(substitute(expression({
+
+# From 2-parameter Weibull code:
+ if (regnotok <- any(shape <= 2))
+ warning("MLE regularity conditions are violated",
+ "(shape <= 2) at the final iteration")
+
+# Putting the MLE warning here good because it could possibly be violated
+# only in the early iterations.
+# Putting the MLE warning here is bad because vcov() gets no warning.
+
+ misc$link = c(location = .llocat, scale = .lscale, shape = .lshape)
+ misc$earg = list(location = .elocat, scale = .escale, shape = .eshape)
+ misc$RegCondOK = !regnotok # Save this for later
+ }), list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape
+ ) )),
+
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE,eta, extra = NULL) {
+ locat = eta2theta(eta[, 1], .llocat, earg = .elocat )
+ scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+
+
+# 20110319; Some of this code comes from gev().
+ if (any(bad <- (y <= locat))) {
+ cat("There are", sum(bad), "range violations in @loglikelihood\n")
+ flush.console()
+ }
+ old.answer =
+ sum(bad) * (-1.0e10) + ifelse(any(!bad),
+ sum(w[!bad] * dweibull3(x = y[!bad], location = locat[!bad],
+ scale = scale[!bad],
+ shape = shape[!bad], log = TRUE)), 0)
+
+# ell2 = dweibull3(x = y, location = locat, scale = scale,
+# shape = shape, log = TRUE)
+
+#pg 405 eqn. 11.4b
+
+# temp3 = y - locat
+# ell1 = log(shape) - shape * log(scale) + (shape-1) * log(temp3) -
+# (temp3/scale)^shape
+
+#print("max(abs(ell1 - ell2))")
+#print( max(abs(ell1 - ell2)) )
+
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+# sum(w * ell2)
+ old.answer
+ }
+ }, list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape ) )),
+ vfamily = c("weibull3"),
+ deriv = eval(substitute(expression({
+ print("in @deriv")
+ print("head(eta, 3)")
+ print( head(eta, 3) )
+ locat = eta2theta(eta[, 1], .llocat, earg = .elocat )
+ scale = eta2theta(eta[, 2], .lscale, earg = .escale )
+ shape = eta2theta(eta[, 3], .lshape, earg = .eshape )
+
+ dlocat.deta = dtheta.deta(locat, .llocat, earg = .elocat )
+ dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape )
+ dscale.deta = dtheta.deta(scale, .lscale, earg = .escale )
+
+# equations from pg 405
+ temp4 = shape / scale
+ zedd = (y - locat) / scale
+ print("min(zedd)")
+ print( min(zedd) )
+
+ if (min(zedd) <= 0)
+ warning("Boundary problem. Taking evasive action.")
+
+ dl.dlocat = (1 - shape) / (y - locat) + temp4 * zedd^(shape - 1)
+ dl.dscale = temp4 * (-1 + zedd^shape)
+ dl.dshape = 1 / shape + log(abs(zedd)) - log(abs(zedd)) * zedd^shape
+
+ c(w) * cbind( dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta,
+ dl.dshape * dshape.deta)
+ }), list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape ) )),
+ weight = eval(substitute(expression({
+ print("in @weight of weibull3()")
+# EulerM = 0.57721566490153286
+ EulerM = -digamma(1.0)
+
+ print("head(locat)")
+ print( head(locat) )
+ print("head(scale)")
+ print( head(scale) )
+ print("head(shape)")
+ print( head(shape) )
+
+
+ wz = matrix(as.numeric(NA), n, dimm(M))
+
+# equations involving location parameter from Horst Rinne pg 410
+ temp6 = 1 - 1 / shape
+ ed2l.dlocat2 = gamma(1 - 2/shape) * ((shape - 1) / scale)^2
+# ed2l.dshape2 = ((1 - EulerM)^2 + (pi^2)/6)/shape^2 # Kleiber&Kotz (2003)
+# ed2l.dshape2: modified from the 2-parameter weibull code:
+ ed2l.dscale2 = (shape/scale)^2
+ ed2l.dshape2 = (6 * (EulerM - 1)^2 + pi^2)/(6 * shape^2)
+ ed2l.dlocatscale = -gamma(2 - 1/shape) * (shape/scale)^2
+ ed2l.dlocatshape = -(1/scale) * temp6 * gamma(temp6) *
+ (1 + digamma(temp6))
+ ed2l.dshapescale = (EulerM - 1) / scale
+
+ wz[, iam(1,1,M)] = ed2l.dlocat2 * dlocat.deta^2
+ wz[, iam(2,2,M)] = ed2l.dscale2 * dscale.deta^2
+ wz[, iam(3,3,M)] = ed2l.dshape2 * dshape.deta^2
+ wz[, iam(1,2,M)] = ed2l.dlocatscale * dlocat.deta * dscale.deta
+ wz[, iam(1,3,M)] = ed2l.dlocatshape * dlocat.deta * dshape.deta
+ wz[, iam(2,3,M)] = ed2l.dshapescale * dshape.deta * dscale.deta
+
+# Putting the MLE warning here is bad because could possibly be violated
+# only in the early iterations.
+# Putting MLE warning here is good because vcov() gets another warning.
+
+ print("head(wz)")
+ print( head(wz) )
+
+ wz = c(w) * wz
+ wz
+ }), list( .llocat = llocat, .lscale = lscale, .lshape = lshape,
+ .elocat = elocat, .escale = escale, .eshape = eshape ))))
+}
+
+
+# End of James Lauder code here
+
+#=========================================================================
+
+
+
+
+# ----------------------------------------------------------------------
+# (b) Arash code
+# 20110615
+# TPN.R
+# ----------------------------------------------------------------------
+# ----------------------------------------------------------------------
+
+ ### Two-piece normal (TPN) family
+
+################ dtpn ##################################
+
+dtpn <- function(x, location = 0, scale = 1, skewpar = 0.5,
+ log.arg = FALSE) {
+
+# Reference: Arash handnotes
+
+ if (any(skewpar <= 0 |
+ skewpar >= 1 |
+ scale <= 0 ,
+ na.rm = TRUE))
+ stop("some parameters out of bound")
+
+# Recycle the vectors to equal lengths
+ LLL = max(length(x), length(location), length(scale),
+ length(skewpar))
+ if (length(x) != LLL) x = rep(x, length = LLL)
+ if (length(location) != LLL) location = rep(location, length = LLL)
+ if (length(scale) != LLL) scale = rep(scale, length = LLL)
+ if (length(skewpar) != LLL) skewpar = rep(skewpar, length = LLL)
+
+ zedd <- (x - location) / scale
+
+ log.s1 <- -zedd^2 / (8 * skewpar^2)
+ log.s2 <- -zedd^2 / (8 * (1 - skewpar)^2)
+
+ logdensity <- log.s1
+ logdensity[zedd > 0] <- log.s2[zedd > 0]
+
+ logdensity <- logdensity -log(scale) - log(sqrt(2 * pi))
+
+ if (log.arg) logdensity else exp(logdensity)
+}
+
+################ ptpn ################################
+ptpn <- function(q, location = 0, scale = 1, skewpar = 0.5) {
+
+ if (any(skewpar <= 0 |
+ skewpar >= 1 |
+ scale <= 0 ,
+ na.rm = TRUE))
+ stop("some parameters out of bound")
+
+# Reference: Arash handnotes
+
+ zedd <- (q - location) / scale
+
+ s1 <- 2 * skewpar * pnorm(zedd, sd = 2 * skewpar) #/ scale
+ s2 <- skewpar + (1 - skewpar) * pgamma(zedd^2 / (8 * (1-skewpar)^2), 0.5)
+
+ans <- rep(0.0, length(zedd))
+ans[zedd <= 0] <- s1[zedd <= 0]
+ans[zedd > 0] <- s2[zedd > 0]
+
+ans
+}
+
+
+
+##################### qtpn ############################################
+pos <- function(x) ifelse(x > 0, x, 0.0)
+
+
+qtpn <- function(p, location = 0, scale = 1, skewpar = 0.5){
+
+ pp = p
+ if (any(pp <= 0 |
+ pp >= 1 |
+ skewpar <= 0 |
+ skewpar >= 1 |
+ scale <= 0 ,
+ na.rm = TRUE))
+ stop("some parameters out of bound")
+ # Recycle the vectors to equal lengths
+ LLL = max(length(pp), length(location), length(scale),
+ length(skewpar))
+ if (length(pp) != LLL) pp = rep(pp, length = LLL)
+ if (length(location) != LLL) location = rep(location, length = LLL)
+ if (length(scale) != LLL) scale = rep(scale, length = LLL)
+ if (length(skewpar) != LLL) skewpar = rep(skewpar, length = LLL)
+
+ qtpn <- rep(as.numeric(NA), length(LLL))
+ qtpn <- qnorm(pp / (2 * skewpar), sd = 2 * skewpar)
+ qtpn[pp > skewpar] <- sqrt(8 * ( 1 - skewpar)^2 *
+ qgamma(pos( pp - skewpar) / (
+ 1 - skewpar),.5))[pp > skewpar]
+
+ qtpn * scale + location
+
+}
+
+
+
+
+########### rast ##########################################
+
+rtpn <- function(n, location = 0, scale = 1, skewpar = 0.5) {
+
+
+ qtpn(p = runif(n), location = location, scale = scale, skewpar = skewpar)
+}
+
+
+### Two-piece normal family function via VGAM
+
+tpnff <- function(llocation = "identity", lscale = "loge",
+ elocation = list(), escale = list(),
+ pp = 0.5, method.init = 1, zero = 2)
+{
+# Arash : At the moment, I am working on two important(In Quant. Reg.)
+# parameters of the TPN distribution, I am not worry about the skew
+# parameter p.
+# Note : pp = Skewparameter
+ if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
+ method.init > 4)
+ stop("'imethod' must be 1 or 2 or 3 or 4")
+
+ if (!is.Numeric(pp, allow = 1, posit = TRUE))
+ stop("bad input for argument 'pp'")
+
+ if (mode(llocation) != "character" && mode(llocation) != "name")
+ llocation = as.character(substitute(llocation))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+ if (!is.list(elocation)) elocation = list()
+ if (!is.list(escale)) escale = list()
+
+ new("vglmff",
+ blurb = c("Two-piece normal distribution \n\n",
+ "Links: ",
+ namesof("location", llocation, earg = elocation), ", ",
+ namesof("scale", lscale, earg = escale), "\n\n",
+ "Mean: "),
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+ initialize = eval(substitute(expression({
+ predictors.names <-
+ c(namesof("location", .llocat, earg = .elocat, tag = FALSE),
+ namesof("scale", .lscale, earg = .escale, tag = FALSE))
+ if (ncol(y <- cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+ if (!length(etastart)) {
+ junk = lm.wfit(x = x, y = y, w = w)
+ scale.y.est <- sqrt( sum(w * junk$resid^2) / junk$df.residual )
+ location.init <- if ( .llocat == "loge") pmax(1/1024, y) else {
+ if ( .method.init == 3) {
+ rep(weighted.mean(y, w), len = n)
+ } else if ( .method.init == 2) {
+ rep(median(rep(y, w)), len = n)
+ } else if ( .method.init == 1) {
+ junk$fitted
+ } else {
+ y
+ }
+ }
+ etastart <- cbind(
+ theta2eta(location.init, .llocat, earg = .elocat),
+ theta2eta(scale.y.est, .lscale, earg = .escale))
+ }
+ }), list( .llocat = llocation, .lscale = lscale,
+ .elocat = elocation, .escale = escale,
+ .method.init=method.init ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ eta2theta(eta[,1], .llocat, earg = .elocat)
+ }, list( .llocat = llocation,
+ .elocat = elocation, .escale = escale ))),
+ last = eval(substitute(expression({
+ misc$link <- c("location" = .llocat, "scale" = .lscale)
+ misc$earg <- list("location" = .elocat, "scale" = .escale)
+ misc$expected <- TRUE
+ misc$pp <- .pp
+ misc$method.init <- .method.init
+ }), list( .llocat = llocation, .lscale = lscale,
+ .elocat = elocation, .escale = escale,
+ .pp = pp, .method.init = method.init ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ location <- eta2theta(eta[,1], .llocat, earg = .elocat)
+ myscale <- eta2theta(eta[,2], .lscale, earg = .escale)
+ ppay <- .pp
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dtpn(y, skewpar = ppay, location = location, scale = myscale,
+ log.arg = TRUE))
+ }
+ }, list( .llocat = llocation, .lscale = lscale,
+ .elocat = elocation, .escale = escale,
+ .pp = pp ))),
+ vfamily = c("tpnff"),
+ deriv = eval(substitute(expression({
+ mylocat <- eta2theta(eta[,1], .llocat, earg = .elocat)
+ myscale <- eta2theta(eta[,2], .lscale, earg = .escale)
+ mypp <- .pp
+
+ zedd <- (y - mylocat) / myscale
+ # cond1 <- (zedd <= 0)
+ cond2 <- (zedd > 0)
+
+ dl.dlocat <- zedd / (4 * mypp^2) # cond1
+ dl.dlocat[cond2] <- (zedd / (4 * (1 - mypp)^2))[cond2]
+ dl.dlocat <- dl.dlocat / myscale
+
+ dl.dscale <- zedd^2 / (4 * mypp^2)
+ dl.dscale[cond2] <- (zedd^2 / (4 * (1 - mypp)^2))[cond2]
+ dl.dscale <- (-1 + dl.dscale) / myscale
+
+ #dl.dpp <- zedd^2 / (4 * mypp^3)
+ #dl.dpp[cond2] <- -zedd^2 / (4 * (1 - mypp)^3)[cond2]
+
+
+
+ dlocat.deta <- dtheta.deta(mylocat, .llocat, earg = .elocat)
+ dscale.deta <- dtheta.deta(myscale, .lscale, earg = .escale)
+ ans <-
+ w * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta)
+ ans
+ }), list( .llocat = llocation, .lscale = lscale,
+ .elocat = elocation, .escale = escale,
+ .pp = pp ))),
+ weight = eval(substitute(expression({
+ wz <- matrix(as.numeric(NA), n, M) # diag matrix; y is one-col too
+ temp10 <- mypp * (1 - mypp)
+ ed2l.dlocat2 <- 1 / ((4 * temp10) * myscale^2)
+ ed2l.dscale2 <- 2 / myscale^2
+# ed2l.dskewpar <- 1 / temp10
+# ed2l.dlocatdskewpar <- (-2 * sqrt(2)) / (temp10 * sqrt(pi) * myscale)
+
+
+ wz[, iam(1,1,M)] <- ed2l.dlocat2 * dlocat.deta^2
+ wz[, iam(2,2,M)] <- ed2l.dscale2 * dscale.deta^2
+ # wz[, iam(3,3,M)] <- ed2l.dskewpar2 * dskewpa.deta^2
+ # wz[, iam(1,3,M)] <- ed2l.dlocatdskewpar * dskewpar.deta * dlocat.deta
+ ans
+ w * wz
+ })
+
+ )))
+}
+
+
+
+ ########################################################################
+# Two-piece normal family function via VGAM (All 3 parameters will estimate)
+
+tpnff3 <- function(llocation = "identity", elocation = list(),
+ lscale = "loge", escale = list(),
+ lskewpar = "identity", eskewpar = list(),
+ method.init = 1, zero = 2)
+{
+ if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
+ method.init > 4)
+ stop("'imethod' must be 1 or 2 or 3 or 4")
+
+ # if (!is.Numeric(pp, allow = 1, posit = TRUE))
+ # stop("bad input for argument 'pp'")
+
+ if (mode(llocation) != "character" && mode(llocation) != "name")
+ llocation = as.character(substitute(llocation))
+ if (mode(lscale) != "character" && mode(lscale) != "name")
+ lscale = as.character(substitute(lscale))
+ if (mode(lskewpar) != "character" && mode(lskewpar) != "name")
+ lscale = as.character(substitute(lscale))
+ if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ stop("bad input for argument 'zero'")
+ if (!is.list(elocation)) elocation = list()
+ if (!is.list(escale)) escale = list()
+ if (!is.list(eskewpar)) eskewpar = list()
+
+ new("vglmff",
+ blurb = c("Two-piece normal distribution \n\n",
+ "Links: ",
+ namesof("location", llocation, earg = elocation), ", ",
+ namesof("scale", lscale, earg = escale), ", ",
+ namesof("skewpar", lscale, earg = epp), "\n\n",
+ "Mean: "),
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero = zero ))),
+ initialize = eval(substitute(expression({
+ predictors.names <-
+ c(namesof("location", .llocat, earg = .elocat, tag = FALSE),
+ namesof("scale", .lscale, earg = .escale, tag = FALSE),
+ namesof("skewpar", .lskewpar, earg = .eskewpar, tag = FALSE))
+ if (ncol(y <- cbind(y)) != 1)
+ stop("response must be a vector or a one-column matrix")
+ if (!length(etastart)) {
+ junk = lm.wfit(x = x, y = y, w = w)
+ scale.y.est <- sqrt( sum(w * junk$resid^2) / junk$df.residual )
+ location.init <- if ( .llocat == "loge") pmax(1/1024, y) else {
+ if ( .method.init == 3) {
+ rep(weighted.mean(y, w), len = n)
+ } else if ( .method.init == 2) {
+ rep(median(rep(y, w)), len = n)
+ } else if ( .method.init == 1) {
+ junk$fitted
+ } else {
+ y
+ }
+ }
+ skew.l.in <- sum((y < location.init)) / length(y)
+ etastart <- cbind(
+ theta2eta(location.init, .llocat, earg = .elocat),
+ theta2eta(scale.y.est, .lscale, earg = .escale),
+ theta2eta(skew.l.in, .lskewpar, earg = .escale))
+ }
+ }), list( .llocat = llocation, .lscale = lscale, .lskewpar = lskewpar,
+ .elocat = elocation, .escale = escale, .eskewpar = eskewpar,
+
+ .method.init=method.init ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ eta2theta(eta[,1], .llocat, earg = .elocat)
+ }, list( .llocat = llocation,
+ .elocat = elocation, .escale = escale ))),
+ last = eval(substitute(expression({
+ misc$link <- c("location" = .llocat, "scale" = .lscale,
+ "skewpar" = .lskewpar)
+ misc$earg <- list( "location" = .elocat, "scale" = .escale,
+ "skewpar" = .eskewpar)
+ misc$expected <- TRUE
+ misc$method.init <- .method.init
+ }), list( .llocat = llocation, .lscale = lscale, .lskewpar = lskewpar,
+ .elocat = elocation, .escale = escale, .eskewpar = lskewpar,
+ .method.init = method.init ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ location <- eta2theta(eta[,1], .llocat, earg = .elocat)
+ myscale <- eta2theta(eta[,2], .lscale, earg = .escale)
+ myskew <- eta2theta(eta[,3], .lskewpar, earg = .eskewpar)
+
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dtpn(y, location = location, scale = myscale,
+ skewpar = myskew, log.arg = TRUE))
+ }
+ }, list( .llocat = llocation, .lscale = lscale, .lskewpar = lskewpar,
+ .elocat = elocation, .escale = escale, .eskewpar = eskewpar
+ ))),
+ vfamily = c("tpnff3"),
+ deriv = eval(substitute(expression({
+ mylocat <- eta2theta(eta[,1], .llocat, earg = .elocat)
+ myscale <- eta2theta(eta[,2], .lscale, earg = .escale)
+ myskew <- eta2theta(eta[,3], .lskewpar, earg = .eskewpar)
+
+
+ zedd <- (y - mylocat) / myscale
+ # cond1 <- (zedd <= 0)
+ cond2 <- (zedd > 0)
+
+ dl.dlocat <- zedd / (4 * myskew^2) # cond1
+ dl.dlocat[cond2] <- (zedd / (4 * (1 - myskew)^2))[cond2]
+ dl.dlocat <- dl.dlocat / myscale
+
+ dl.dscale <- zedd^2 / (4 * myskew^2)
+ dl.dscale[cond2] <- (zedd^2 / (4 * (1 - myskew)^2))[cond2]
+ dl.dscale <- (-1 + dl.dscale) / myscale
+
+ dl.dskewpar <- zedd^2 / (4 * myskew^3)
+ dl.dskewpar[cond2] <- (-zedd^2 / (4 * (1 - myskew)^3))[cond2]
+
+
+
+ dlocat.deta <- dtheta.deta(mylocat, .llocat, earg = .elocat)
+ dscale.deta <- dtheta.deta(myscale, .lscale, earg = .escale)
+ dskewpar.deta <- dtheta.deta(myskew, .lskewpar, earg = .eskewpar)
+ ans <-
+ w * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta,
+ dl.dskewpar * dskewpar.deta
+ )
+ ans
+ }), list( .llocat = llocation, .lscale = lscale, .lskewpar = lskewpar,
+ .elocat = elocation, .escale = escale, .eskewpar = eskewpar
+ ))),
+ weight = eval(substitute(expression({
+ wz <- matrix(as.numeric(NA), n, dimm(M)) # diag matrix; y is one-col too
+
+ temp10 <- myskew * (1 - myskew)
+ ed2l.dlocat2 <- 1 / ((4 * temp10) * myscale^2)
+ ed2l.dscale2 <- 2 / myscale^2
+ ed2l.dskewpar2 <- 3 / temp10
+ ed2l.dlocatdskewpar <- (-2 * sqrt(2)) / (temp10 * sqrt(pi) * myscale)
+
+ print("hello")
+ wz[, iam(1,1,M)] <- ed2l.dlocat2 * dlocat.deta^2
+ wz[, iam(2,2,M)] <- ed2l.dscale2 * dscale.deta^2
+ wz[, iam(3,3,M)] <- ed2l.dskewpar2 * dskewpar.deta^2
+ wz[, iam(1,3,M)] <- ed2l.dlocatdskewpar * dskewpar.deta * dlocat.deta
+
+ ans
+ w * wz
+ })
+
+ )))
+}
+
+
+# ----------------------------------------------------------------------
+# (c) Not yet assigned
+# ----------------------------------------------------------------------
+# ----------------------------------------------------------------------
+
+
+
+
diff --git a/R/family.positive.R b/R/family.positive.R
index a085dec..ae30ba5 100644
--- a/R/family.positive.R
+++ b/R/family.positive.R
@@ -8,6 +8,386 @@
+rhuggins91 =
+ function(n, nTimePts = 5, pvars = length(xcoeff),
+ xcoeff = c(-2, 1, 2),
+ capeffect = -1,
+ double.ch = FALSE,
+ link = "logit", earg = list()
+ ) {
+
+
+ use.n <- if ((length.n <- length(n)) > 1) length.n else
+ if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
+ stop("bad input for argument 'n'") else n
+ orig.n <- use.n
+ use.n <- 1.50 * use.n + 100 # Bigger due to rejections
+
+ if (pvars == 0)
+ stop("argument 'pvars' must be at least one")
+ if (pvars > length(xcoeff))
+ stop("argument 'pvars' is too high")
+
+ if (mode(link) != "character" && mode(link) != "name")
+ link = as.character(substitute(link))
+ if (!is.list(earg)) earg = list()
+
+
+ Ymatrix = matrix(0, use.n, nTimePts, dimnames =
+ list(as.character(1:use.n),
+ paste("y", 1:nTimePts, sep = "")))
+
+ CHmatrix = matrix(0, use.n, nTimePts, dimnames =
+ list(as.character(1:use.n),
+ paste("ch", 0:(nTimePts-1), sep = "")))
+
+ Xmatrix = cbind(x1 = rep(1.0, len = use.n))
+ if (pvars > 1)
+ Xmatrix = cbind(Xmatrix,
+ matrix(runif(n = use.n * (pvars-1)), use.n, pvars - 1,
+ dimnames = list(as.character(1:use.n),
+ paste("x", 2:pvars, sep = ""))))
+
+
+ linpred.baseline = xcoeff[1]
+ if (pvars > 1)
+ linpred.baseline = linpred.baseline +
+ Xmatrix[, 2:pvars, drop = FALSE] %*% xcoeff[2:pvars]
+ sumrowy = rep(0, length = use.n)
+ for (jlocal in 1:nTimePts) {
+
+ CHmatrix[, jlocal] = as.numeric(sumrowy > 0) *
+ (1 + double.ch)
+
+ linpred = linpred.baseline + (CHmatrix[, jlocal] > 0) * capeffect
+
+ Ymatrix[, jlocal] = rbinom(use.n, size = 1,
+ prob = eta2theta(linpred, link = link, earg = earg))
+
+ sumrowy = sumrowy + Ymatrix[, jlocal]
+ }
+
+
+ # Strip off rows where the animals were never caught
+ # Bug: problem if all values of sumrowy are zero.
+ index0 = (sumrowy == 0)
+ if (all(!index0))
+ stop("bug in this code: cannot handle no animals being caught")
+ Ymatrix = Ymatrix[!index0, , drop = FALSE]
+ Xmatrix = Xmatrix[!index0, , drop = FALSE]
+ CHmatrix = CHmatrix[!index0, , drop = FALSE]
+
+ # Bug: problem if all values of sumrowy are zero:
+ zCHmatrix = matrix(0, nrow(CHmatrix), ncol(CHmatrix),
+ dimnames = list(as.character(1:nrow(CHmatrix)),
+ paste("zch", 0:(ncol(CHmatrix)-1), sep = "")))
+
+
+ ans = data.frame(Ymatrix, Xmatrix, CHmatrix, zCHmatrix,
+ Chistory = rep(0, length = nrow(Ymatrix)))
+
+
+ ans = if (nrow(ans) >= orig.n) ans[1:orig.n, ] else {
+ rbind(ans,
+ Recall(n = orig.n - nrow(ans),
+ nTimePts = nTimePts, pvars = pvars,
+ xcoeff = xcoeff,
+ capeffect = capeffect,
+ link = link, earg = earg))
+ }
+
+ rownames(ans) = as.character(1:orig.n)
+
+ attr(ans, "pvars") = pvars
+ attr(ans, "nTimePts") = nTimePts
+ attr(ans, "capeffect") = capeffect
+
+ ans
+}
+
+
+
+
+
+
+
+dhuggins91 = function(x, prob, prob0 = prob, log = FALSE) {
+
+
+ x = as.matrix(x)
+ prob = as.matrix(prob)
+ prob0 = as.matrix(prob0)
+ log.arg = log
+ rm(log)
+
+
+
+ logAA0 = rowSums(log1p(-prob0))
+ AA0 = exp(logAA0)
+
+ ell1 = rowSums(x * log(prob) + (1 - x) * log1p(-prob)) - log1p(-AA0)
+ if (log.arg) ell1 else exp(ell1)
+}
+
+
+
+
+
+
+
+ huggins91 = function(link = "logit", earg = list(),
+ parallel = TRUE,
+ iprob = NULL,
+ eim.not.oim = TRUE) {
+
+
+
+
+
+ if (mode(link) != "character" && mode(link) != "name")
+ link = as.character(substitute(link))
+ if (!is.list(earg)) earg = list()
+
+ if (length(iprob))
+ if (!is.Numeric(iprob, positive = TRUE) ||
+ max(iprob) >= 1)
+ stop("argument 'iprob' should have values in (0,1)")
+
+ if (!is.logical(eim.not.oim) ||
+ length(eim.not.oim) != 1)
+ stop("argument 'eim.not.oim' should be 'TRUE' or 'FALSE' only")
+
+
+ new("vglmff",
+ blurb = c("Huggins (1991) capture-recapture model\n\n",
+ "Links: ",
+ namesof("prob1", link, earg = earg, tag = FALSE), ", ",
+ namesof("prob1.0", link, earg = earg, tag = FALSE), ", ",
+ namesof("prob2", link, earg = earg, tag = FALSE), ", ",
+ namesof("prob2.0", link, earg = earg, tag = FALSE), ", ..., ",
+ namesof("probT.0", link, earg = earg, tag = FALSE),
+ "\n"),
+ constraints = eval(substitute(expression({
+ constraints <- cm.vgam(matrix(1, M, 1), x, .parallel, constraints,
+ intercept.apply = TRUE)
+ }), list( .parallel = parallel ))),
+ infos = eval(substitute(function(...) {
+ list(Musual = 2,
+ parallel = .parallel)
+ }, list( .parallel = parallel ))),
+
+ initialize = eval(substitute(expression({
+ Musual = 2
+ mustart.orig = mustart
+ y = as.matrix(y)
+ Mdiv2 = ncoly = ncol(y)
+ M = Musual * ncoly
+
+ w = matrix(w, n, ncoly)
+ mustart = matrix(colSums(y) / colSums(w),
+ n, ncol(y), byrow = TRUE)
+ mustart[mustart == 0] = 0.05
+ mustart[mustart == 1] = 0.95
+
+ if (ncoly == 1)
+ stop("the response is univariate, therefore use posbinomial()")
+
+
+ if (!all(y == 0 | y == 1))
+ stop("response must contain 0s and 1s only")
+ if (!all(w == 1))
+ stop("argument 'weight' must contain 1s only")
+
+ dn2 = if (is.matrix(y)) dimnames(y)[[2]] else NULL
+ dn2 = if (length(dn2)) {
+ paste("E[", dn2, "]", sep = "")
+ } else {
+ paste("prob", 1:Mdiv2, sep = "")
+ }
+ dn2 = c(dn2, paste(dn2, ".0", sep = ""))
+ dn2 = dn2[interleave.VGAM(M, M = Musual)]
+ predictors.names = namesof(dn2, .link, earg = .earg, short = TRUE)
+
+
+ if (!length(etastart)) {
+ mustart.use = if (length(mustart.orig)) {
+ mustart.orig
+ } else
+ if (length( .iprob )) {
+ matrix( .iprob, nrow(mustart), ncol(mustart), byrow = TRUE)
+ } else {
+ mustart
+ }
+ etastart = cbind(theta2eta(mustart.use, .link, earg = .earg ))
+ etastart = kronecker(etastart, cbind(1, 1))
+ }
+ mustart = NULL
+ }), list( .link = link, .earg = earg, .iprob = iprob ))),
+
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ Musual = 2
+ Mdiv2 = ncol(eta) / Musual
+ index1 = Musual * (1:Mdiv2) - 1
+ index2 = Musual * (1:Mdiv2) - 0
+
+ probs.numer = eta2theta(eta[, index1], # + extra$moffset[, index1],
+ .link, earg = .earg )
+
+ probs.denom = eta2theta(eta[, index1], .link, earg = .earg )
+
+ logAA0 = rowSums(log1p(-probs.denom))
+
+
+ AA0 = exp(logAA0)
+ AAA = exp(log1p(-AA0)) # 1 - AA0
+ probs.numer / AAA
+ }, list( .link = link, .earg = earg ))),
+ last = eval(substitute(expression({
+
+ misc$link = rep( .link, length = M)
+ names(misc$link) = dn2
+
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:M)
+ misc$earg[[ii]] = .earg
+
+ misc$expected = .eim.not.oim
+ misc$mv = TRUE
+ misc$iprob = .iprob
+ misc$eim.not.oim = .eim.not.oim
+
+ misc$parallel = .parallel
+ }), list( .link = link, .earg = earg,
+ .parallel = parallel,
+ .eim.not.oim = eim.not.oim, .iprob = iprob ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+
+ ycounts = y
+ Musual = 2
+ Mdiv2 = ncol(eta) / Musual
+ index1 = Musual * (1:Mdiv2) - 1
+ index2 = Musual * (1:Mdiv2) - 0
+
+ probs.numer = eta2theta(eta[, index1], # + extra$moffset[, index1],
+ .link, earg = .earg )
+
+ probs.denom = eta2theta(eta[, index1], .link, earg = .earg )
+
+
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(dhuggins91(x = ycounts, # size = 1, # Bernoulli trials
+ prob = probs.numer,
+ prob0 = probs.denom, # zz choose this??
+ log = TRUE))
+ }
+ }, list( .link = link, .earg = earg ))),
+ vfamily = c("huggins91"),
+ deriv = eval(substitute(expression({
+ Musual = 2
+ Mdiv2 = ncol(eta) / Musual
+ index1 = Musual * (1:Mdiv2) - 1
+ index2 = Musual * (1:Mdiv2) - 0
+ probs.numer = eta2theta(eta[, index1], .link, earg = .earg )
+
+
+ probs.denom = eta2theta(eta[, index1], .link, earg = .earg )
+
+ logAA0 = rowSums(log1p(-probs.denom))
+
+
+ AA0 = exp(logAA0)
+ AAA = exp(log1p(-AA0)) # 1 - AA0
+
+ B_s = AA0 / (1 - probs.denom)
+ B_st = array(0, c(n, Mdiv2, Mdiv2))
+ for(slocal in 1:(Mdiv2-1))
+ for(tlocal in (slocal+1):Mdiv2)
+ B_st[, slocal, tlocal] =
+ B_st[, tlocal, slocal] = B_s[, slocal] / (1 - probs.denom[, tlocal])
+
+
+ Temp2 = (1 - probs.numer)^2
+ temp2 = (1 - probs.denom)^2
+
+ dprob1.deta1 = dtheta.deta(probs.numer, .link , earg = .earg ) # trivial
+ dprob1.deta2 = dtheta.deta(probs.numer, .link , earg = .earg ) # trivial
+ dprob2.deta1 = dtheta.deta(probs.denom, .link , earg = .earg ) # trivial
+ dprob2.deta2 = dtheta.deta(probs.denom, .link , earg = .earg ) # trivial
+
+ dl.dprob1 = y / probs.numer - (1 - y) / (1 - probs.numer)
+ dl.dprob2 = -B_s / AAA
+ dl.deta1 = dl.dprob1 * dprob1.deta1
+ dl.deta2 = dl.dprob2 * dprob2.deta1
+ dl.deta2 = dl.dprob2 * dprob2.deta2 # zz
+
+ deriv.ans = cbind(dl.deta1 + dl.deta2,
+ dl.deta1 + dl.deta2)
+ deriv.ans = deriv.ans[, interleave.VGAM(M, M = Musual)]
+ deriv.ans = deriv.ans / Musual # Matches with CCCC
+
+ deriv.ans
+ }), list( .link = link, .earg = earg ))),
+
+ weight = eval(substitute(expression({
+ ed2l.dprob1.2 = 1 / (probs.numer * AAA) + 1 / Temp2 -
+ probs.numer / (AAA * Temp2) - (B_s / AAA)^2
+
+ od2l.dprob1.2 = y / probs.numer^2 + (1 - y) / (1 - probs.numer)^2 -
+ (B_s / AAA)^2
+
+
+
+
+ d2prob1.deta1.2 = d2theta.deta2(probs.numer, .link , earg = .earg )
+ d2prob1.deta2.2 = d2theta.deta2(probs.numer, .link , earg = .earg )
+ d2prob1.deta12 = d2theta.deta2(probs.numer, .link , earg = .earg )
+ d2prob2.deta1.2 = d2theta.deta2(probs.denom, .link , earg = .earg )
+ d2prob2.deta12 = d2theta.deta2(probs.denom, .link , earg = .earg )
+
+
+ wz = matrix(0, n, dimm(M))
+ wz[, index1] <-
+ wz[, index2] <-
+ if ( .eim.not.oim ) {
+ ed2l.dprob1.2 * (dprob1.deta1^2) # +
+ } else {
+ od2l.dprob1.2 * (dprob1.deta1^2) -
+ (dl.dprob1 + dl.dprob2) * d2prob1.deta1.2
+ }
+
+ for(slocal in 1:(Mdiv2-1))
+ for(tlocal in (slocal+1):Mdiv2)
+ wz[, iam(Musual*slocal - 1,
+ Musual*tlocal - 1, M = M)] =
+ wz[, iam(Musual*slocal ,
+ Musual*tlocal , M = M)] =
+ dprob2.deta1[, slocal] *
+ dprob2.deta1[, tlocal] *
+ (B_st[, slocal, tlocal] +
+ B_s [, slocal] *
+ B_s [, tlocal] / AAA) / (-AAA)
+
+
+ wz = wz / Musual # Matches with CCCC
+
+
+ wz
+ }), list( .link = link, .earg = earg, .eim.not.oim = eim.not.oim ))))
+}
+
+
+
+
+
+
+
+
+
+
+
dposnegbin = function(x, size, prob = NULL, munb = NULL, log = FALSE) {
if (length(munb)) {
if (length(prob))
@@ -18,19 +398,19 @@ dposnegbin = function(x, size, prob = NULL, munb = NULL, log = FALSE) {
rm(log)
L = max(length(x), length(prob), length(size))
- x = rep(x, len=L); prob = rep(prob, len=L); size = rep(size, len=L);
+ x = rep(x, len = L); prob = rep(prob, len = L); size = rep(size, len = L);
- ans = dnbinom(x=x, size=size, prob=prob, log=log.arg)
- index0 = x==0
+ ans = dnbinom(x = x, size = size, prob = prob, log=log.arg)
+ index0 = x == 0
if (log.arg) {
ans[ index0] = log(0.0)
- ans[!index0] = ans[!index0] - log1p(-dnbinom(x=0 * x[!index0],
- size=size[!index0], prob=prob[!index0]))
+ ans[!index0] = ans[!index0] - log1p(-dnbinom(x = 0 * x[!index0],
+ size = size[!index0], prob = prob[!index0]))
} else {
ans[ index0] = 0.0
ans[!index0] = ans[!index0] / pnbinom(q=0 * x[!index0],
- size=size[!index0], prob=prob[!index0], lower.tail=FALSE)
+ size = size[!index0], prob = prob[!index0], lower.tail=FALSE)
}
ans
}
@@ -43,11 +423,11 @@ pposnegbin = function(q, size, prob = NULL, munb = NULL) {
prob <- size/(size + munb)
}
L = max(length(q), length(prob), length(size))
- q = rep(q, len=L); prob = rep(prob, len=L); size = rep(size, len=L);
+ q = rep(q, len = L); prob = rep(prob, len = L); size = rep(size, len = L);
- ifelse(q < 1, 0, (pnbinom(q, size=size, prob=prob) -
- dnbinom(q*0, size=size, prob=prob)) / pnbinom(q*0,
- size=size, prob=prob, lower.tail = FALSE))
+ ifelse(q < 1, 0, (pnbinom(q, size = size, prob = prob) -
+ dnbinom(q*0, size = size, prob = prob)) / pnbinom(q * 0,
+ size = size, prob = prob, lower.tail = FALSE))
}
@@ -55,12 +435,14 @@ qposnegbin = function(p, size, prob = NULL, munb = NULL) {
if (length(munb)) {
if (length(prob))
stop("'prob' and 'munb' both specified")
- prob <- size/(size + munb)
+ prob <- size / (size + munb)
}
if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
stop("bad input for argument 'p'")
- qnbinom(p * pnbinom(q=p*0, size=size, prob=prob, lower.tail = FALSE) +
- dnbinom(x=p*0, size=size, prob=prob), size=size, prob=prob)
+ qnbinom(p * pnbinom(q = p*0, size = size, prob = prob,
+ lower.tail = FALSE) +
+ dnbinom(x = p*0, size = size, prob = prob),
+ size = size, prob = prob)
}
@@ -74,12 +456,12 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
stop("'prob' and 'munb' both specified")
prob <- size/(size + munb)
}
- ans = rnbinom(use.n, size=size, prob=prob)
+ ans = rnbinom(use.n, size = size, prob = prob)
index = (ans == 0)
size = rep(size, len=length(ans))
prob = rep(prob, len=length(ans))
while(any(index)) {
- more = rnbinom(n=sum(index), size=size[index], prob=prob[index])
+ more = rnbinom(n=sum(index), size = size[index], prob = prob[index])
ans[index] = more
index = (ans == 0)
}
@@ -92,39 +474,35 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
- posnegbinomial = function(lmunb = "loge", lk = "loge",
- emunb =list(), ek = list(),
- ik = NULL, zero = -2, cutoff = 0.995,
- shrinkage.init = 0.95, method.init = 1)
+ posnegbinomial = function(lmunb = "loge", lsize = "loge",
+ emunb = list(), esize = list(),
+ isize = NULL, zero = -2, cutoff = 0.995,
+ shrinkage.init = 0.95, imethod = 1)
{
-
- lkayy <- lk
- ekayy <- ek
- ikayy <- ik
-
- if (!is.Numeric(cutoff, allow = 1) || cutoff<0.8 || cutoff>=1)
+ if (!is.Numeric(cutoff, allow = 1) ||
+ cutoff < 0.8 || cutoff >= 1)
stop("range error in the argument 'cutoff'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
- if (length(ikayy) && !is.Numeric(ikayy, posit = TRUE))
- stop("bad input for argument 'ik'")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
+ if (length(isize) && !is.Numeric(isize, posit = TRUE))
+ stop("bad input for argument 'isize'")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
if (mode(lmunb) != "character" && mode(lmunb) != "name")
lmunb = as.character(substitute(lmunb))
- if (mode(lkayy) != "character" && mode(lkayy) != "name")
- lkayy = as.character(substitute(lkayy))
+ if (mode(lsize) != "character" && mode(lsize) != "name")
+ lsize = as.character(substitute(lsize))
if (!is.list(emunb)) emunb = list()
- if (!is.list(ek)) ek = list()
+ if (!is.list(esize)) esize = list()
new("vglmff",
blurb = c("Positive-negative binomial distribution\n\n",
"Links: ",
namesof("munb", lmunb, earg = emunb ), ", ",
- namesof("k", lkayy, earg = ek ), "\n",
- "Mean: munb / (1 - (k/(k+munb))^k)"),
+ namesof("size", lsize, earg = esize ), "\n",
+ "Mean: munb / (1 - (size / (size + munb))^size)"),
constraints = eval(substitute(expression({
dotzero = .zero
@@ -137,15 +515,15 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
M = 2 * ncol(y)
extra$NOS = NOS = ncoly = ncol(y) # Number of species
predictors.names = c(
- namesof(if (NOS == 1) "munb" else paste("munb", 1:NOS, sep = ""),
- .lmunb, earg = .emunb, tag = FALSE),
- namesof(if (NOS == 1) "k" else paste("k", 1:NOS, sep = ""),
- .lkayy, earg = .ekayy, tag = FALSE))
+ namesof(if (NOS == 1) "munb" else paste("munb", 1:NOS, sep = ""),
+ .lmunb, earg = .emunb, tag = FALSE),
+ namesof(if (NOS == 1) "size" else paste("size", 1:NOS, sep = ""),
+ .lsize, earg = .esize, tag = FALSE))
predictors.names = predictors.names[interleave.VGAM(M, M = 2)]
if (!length(etastart)) {
mu.init = y
for(iii in 1:ncol(y)) {
- use.this = if ( .method.init == 2) {
+ use.this = if ( .imethod == 2) {
weighted.mean(y[,iii], w)
} else {
median(y[,iii])
@@ -153,8 +531,8 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
mu.init[,iii] = (1 - .sinit) * y[,iii] + .sinit * use.this
}
- if ( is.Numeric( .ikayy )) {
- kmat0 = matrix( .ikayy, nr = n, nc = NOS, byrow = TRUE)
+ if ( is.Numeric( .isize )) {
+ kmat0 = matrix( .isize, nr = n, nc = NOS, byrow = TRUE)
} else {
posnegbinomial.Loglikfun =
function(kmat, y, x, w, extraargs) {
@@ -174,63 +552,63 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
p00 = (kmat0 / (kmat0 + mu.init))^kmat0
etastart =
cbind(theta2eta(mu.init*(1-p00), .lmunb, earg = .emunb ),
- theta2eta(kmat0, .lkayy, earg = .ekayy ))
- etastart = etastart[,interleave.VGAM(M, M = 2), drop = FALSE]
+ theta2eta(kmat0, .lsize, earg = .esize ))
+ etastart = etastart[, interleave.VGAM(M, M = 2), drop = FALSE]
}
- }), list( .lmunb = lmunb, .lkayy = lkayy, .ikayy = ikayy,
- .emunb = emunb, .ekayy = ekayy,
+ }), list( .lmunb = lmunb, .lsize = lsize, .isize = isize,
+ .emunb = emunb, .esize = esize,
.sinit = shrinkage.init,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
NOS = ncol(eta) / 2
munb = eta2theta(eta[,2*(1:NOS)-1, drop = FALSE],
.lmunb, earg = .emunb )
kmat = eta2theta(eta[,2*(1:NOS), drop = FALSE],
- .lkayy, earg = .ekayy )
+ .lsize, earg = .esize )
p0 = (kmat / (kmat + munb))^kmat
munb / (1 - p0)
- }, list( .lkayy = lkayy, .lmunb = lmunb,
- .ekayy = ekayy, .emunb = emunb ))),
+ }, list( .lsize = lsize, .lmunb = lmunb,
+ .esize = esize, .emunb = emunb ))),
last = eval(substitute(expression({
temp0303 = c(rep( .lmunb, length = NOS),
- rep( .lkayy, length = NOS))
+ rep( .lsize, length = NOS))
names(temp0303) =
c(if (NOS == 1) "munb" else paste("munb", 1:NOS, sep = ""),
- if (NOS == 1) "k" else paste("k", 1:NOS, sep = ""))
+ if (NOS == 1) "size" else paste("size", 1:NOS, sep = ""))
temp0303 = temp0303[interleave.VGAM(M, M = 2)]
misc$link = temp0303 # Already named
misc$earg = vector("list", 2*NOS)
names(misc$earg) = names(misc$link)
for(ii in 1:NOS) {
misc$earg[[2*ii-1]] = .emunb
- misc$earg[[2*ii ]] = .ekayy
+ misc$earg[[2*ii ]] = .esize
}
misc$cutoff = .cutoff
- misc$method.init = .method.init
- }), list( .lmunb = lmunb, .lkayy = lkayy,
- .emunb = emunb, .ekayy = ekayy,
- .cutoff = cutoff, .method.init = method.init ))),
+ misc$imethod = .imethod
+ }), list( .lmunb = lmunb, .lsize = lsize,
+ .emunb = emunb, .esize = esize,
+ .cutoff = cutoff, .imethod = imethod ))),
loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE,eta, extra = NULL) {
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
NOS = ncol(eta) / 2
munb = eta2theta(eta[,2*(1:NOS)-1, drop = FALSE],
.lmunb, earg = .emunb )
kmat = eta2theta(eta[,2*(1:NOS), drop = FALSE],
- .lkayy, earg = .ekayy )
+ .lsize, earg = .esize )
if (residuals)
stop("loglikelihood residuals not implemented yet") else {
sum(w * dposnegbin(x = y, size = kmat, munb = munb, log = TRUE))
}
- }, list( .lmunb = lmunb, .lkayy = lkayy,
- .emunb = emunb, .ekayy = ekayy ))),
+ }, list( .lmunb = lmunb, .lsize = lsize,
+ .emunb = emunb, .esize = esize ))),
vfamily = c("posnegbinomial"),
deriv = eval(substitute(expression({
NOS = extra$NOS
munb = eta2theta(eta[,2*(1:NOS)-1, drop = FALSE],
.lmunb, earg = .emunb )
kmat = eta2theta(eta[,2*(1:NOS), drop = FALSE],
- .lkayy, earg = .ekayy )
+ .lsize, earg = .esize )
d3 = deriv3(~ -log(1 - (kmat. / (kmat. + munb. ))^kmat. ),
c("munb.", "kmat."), hessian = TRUE) # Extra term
dl0.dthetas = array(NA, c(n, NOS, 2))
@@ -252,12 +630,12 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
(y+kmat) / (munb+kmat) + 1 +
log(kmat /(kmat+munb)) + dl0.dthetas[,,2]
dmunb.deta = dtheta.deta(munb, .lmunb, earg = .emunb )
- dkayy.deta = dtheta.deta(kmat, .lkayy, earg = .ekayy )
+ dkayy.deta = dtheta.deta(kmat, .lsize, earg = .esize )
myderiv = w * cbind(dl.dmunb * dmunb.deta,
dl.dkayy * dkayy.deta)
myderiv[, interleave.VGAM(M, M = 2)]
- }), list( .lmunb = lmunb, .lkayy = lkayy,
- .emunb = emunb, .ekayy = ekayy ))),
+ }), list( .lmunb = lmunb, .lsize = lsize,
+ .emunb = emunb, .esize = esize ))),
weight = eval(substitute(expression({
wz = matrix(0, n, 4*NOS-1) # wz is no longer 'diagonal'
p0 = (kmat / (kmat + munb))^kmat
@@ -274,11 +652,13 @@ rposnegbin = function(n, size, prob = NULL, munb = NULL) {
dim(fred$ans) = c(n, NOS)
ed2l.dk2 = -fred$ans/(1-p0) - 1/kmat + 1/(kmat+munb) -
munb * p0 / ((1-p0)*(munb+kmat)^2) - d2l0.dthetas2[,,2]
+
wz[,2*(1:NOS)-1] = dmunb.deta^2 * ed2l.dmunb2
wz[,2*(1:NOS) ] = dkayy.deta^2 * ed2l.dk2
wz[,2*NOS+2*(1:NOS)-1] = -d2l0.dthetas2[,,3] *
dmunb.deta * dkayy.deta
- w * wz
+
+ c(w) * wz
}), list( .cutoff = cutoff ))))
}
@@ -293,7 +673,7 @@ dpospois = function(x, lambda, log = FALSE) {
if (!is.Numeric(lambda, posit = TRUE))
stop("bad input for argument 'lambda'")
L = max(length(x), length(lambda))
- x = rep(x, len=L); lambda = rep(lambda, len=L);
+ x = rep(x, len = L); lambda = rep(lambda, len = L);
ans = if (log.arg) {
ifelse(x == 0, log(0.0), dpois(x, lambda, log = TRUE) -
log1p(-exp(-lambda)))
@@ -308,7 +688,7 @@ ppospois = function(q, lambda) {
if (!is.Numeric(lambda, posit = TRUE))
stop("bad input for argument 'lambda'")
L = max(length(q), length(lambda))
- q = rep(q, len=L); lambda = rep(lambda, len=L);
+ q = rep(q, len = L); lambda = rep(lambda, len = L);
ifelse(q < 1, 0, (ppois(q, lambda) - exp(-lambda)) / (-expm1(-lambda)))
}
@@ -343,7 +723,7 @@ rpospois = function(n, lambda) {
pospoisson = function(link = "loge", earg = list(), expected = TRUE,
- ilambda = NULL, method.init = 1)
+ ilambda = NULL, imethod = 1)
{
if (!missing(link))
@@ -354,8 +734,8 @@ rpospois = function(n, lambda) {
stop("bad input for argument 'expected'")
if (length( ilambda) && !is.Numeric(ilambda, posit = TRUE))
stop("bad input for argument 'ilambda'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3) stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
blurb = c("Positive-Poisson distribution\n\n",
@@ -373,10 +753,10 @@ rpospois = function(n, lambda) {
paste("lambda", if (ncol(y) > 1) 1:ncol(y) else "", sep = ""),
.link, earg = .earg, tag = FALSE)
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
lambda.init <- apply(y, 2, median) + 1/8
lambda.init <- matrix(lambda.init, n, ncol(y), byrow = TRUE)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
lambda.init <- apply(y, 2, weighted.mean, w=w) + 1/8
lambda.init <- matrix(lambda.init, n, ncol(y), byrow = TRUE)
} else {
@@ -387,7 +767,7 @@ rpospois = function(n, lambda) {
if (!length(etastart))
etastart <- theta2eta(lambda.init, .link, earg = .earg)
}), list( .link = link, .earg = earg,
- .ilambda = ilambda, .method.init = method.init ))),
+ .ilambda = ilambda, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
lambda <- eta2theta(eta, .link, earg = .earg )
-lambda / expm1(-lambda)
@@ -428,109 +808,71 @@ rpospois = function(n, lambda) {
d2lambda.deta2 <- d2theta.deta2(lambda, .link, earg = .earg)
wz <- (dlambda.deta^2) * d2l.dlambda2 - dl.dlambda * d2lambda.deta2
}
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg, .expected = expected ))))
}
- posbinomial = function(link = "logit", earg = list()) {
- if (!missing(link))
- link = as.character(substitute(link))
- if (!is.list(earg)) earg = list()
-
- new("vglmff",
- blurb = c("Positive-binomial distribution\n\n",
- "Links: ",
- namesof("prob", link, earg = earg, tag = FALSE), "\n"),
- initialize = eval(substitute(expression({
- mustart.orig = mustart
- eval(binomialff(link = .link, earg = .earg )@initialize)
- predictors.names = namesof("prob", .link, earg = .earg , tag = FALSE)
- if (length(extra)) extra$w = w else extra = list(w = w)
- if (!length(etastart)) {
- mustart.use = if (length(mustart.orig)) mustart.orig else mustart
- etastart = cbind(theta2eta(mustart.use, .link, earg = .earg ))
- }
- mustart = NULL
- }), list( .link = link, .earg = earg ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- w = extra$w
- mymu = eta2theta(eta, .link, earg = .earg )
- nvec = if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
- round(w)
- mymu / (1-(1-mymu)^(nvec))
- },
- list( .link = link, .earg = earg ))),
- last = eval(substitute(expression({
- extra$w = NULL # Kill it off
- misc$link = c(prob = .link)
- misc$earg = list(prob = .earg )
- }), list( .link = link, .earg = earg ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
-
- ycounts = if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
- y * w # Convert proportions to counts
- nvec = if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
- round(w)
- use.orig.w = if (is.numeric(extra$orig.w)) extra$orig.w else 1
- mymu = eta2theta(eta, .link, earg = .earg )
- if (residuals) stop("loglikelihood residuals ",
- "not implemented yet") else {
- sum(use.orig.w * dposbinom(x = ycounts, size = nvec,
- prob = mymu, log = TRUE))
- }
- }, list( .link = link, .earg = earg ))),
- vfamily = c("posbinomial"),
- deriv = eval(substitute(expression({
- use.orig.w = if (is.numeric(extra$orig.w)) extra$orig.w else
- rep(1, n)
- nvec = if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
- round(w)
-
- mymu = eta2theta(eta, .link, earg = .earg )
- dl.dmymu = y / mymu - (1 - y) / (1 - mymu) -
- ((1 - mymu)^(nvec-1)) / (1 - (1 - mymu)^nvec)
-
- dmymu.deta = dtheta.deta(mymu, .link, earg = .earg )
- w * dl.dmymu * dmymu.deta
- }), list( .link = link, .earg = earg ))),
- weight = eval(substitute(expression({
- temp1 = 1 - (1-mymu)^nvec
- temp2 = (1-mymu)^2
- ed2l.dmymu2 = -1/(mymu*temp1) - 1/temp2 + mymu/(temp2*temp1) +
- (nvec-1) * (1-mymu)^(nvec-2) / temp1 +
- nvec * (temp2^(nvec-1)) / temp1^2
- wz = -w * (dmymu.deta^2) * ed2l.dmymu2
- wz
- }), list( .link = link, .earg = earg ))))
+pposbinom = function(q, size, prob, lower.tail = TRUE, log.p = FALSE) {
+ if (!is.Numeric(prob, positive = TRUE))
+ stop("no zero or non-numeric values allowed for argument 'prob'")
+ L = max(length(q), length(size), length(prob))
+ q = rep(q, len = L); size = rep(size, len = L); prob = rep(prob, len = L)
+ ifelse(q < 1, 0,
+ (pbinom(q = q, size = size, prob = prob, lower.tail = lower.tail,
+ log.p = log.p) - (1-prob)^size) / (1 - (1-prob)^size))
}
+qposbinom = function(p, size, prob, lower.tail = TRUE, log.p = FALSE) {
+ if (!is.Numeric(prob, positive = TRUE))
+ stop("no zero or non-numeric values allowed for argument 'prob'")
+ if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
+ stop("bad input for argument 'p'")
+ qbinom(p = p * (1 - (1-prob)^size) + (1-prob)^size, size = size,
+ prob = prob, lower.tail = lower.tail, log.p = log.p)
+}
+rposbinom = function(n, size, prob) {
+ use.n = if ((length.n <- length(n)) > 1) length.n else
+ if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
+ stop("bad input for argument 'n'") else n
-
-
+ if (any(prob == 0))
+ stop("no zero values allowed for argument 'prob'")
+ ans = rbinom(n=use.n, size = size, prob = prob)
+ index = (ans == 0)
+ size = rep(size, len=length(ans))
+ prob = rep(prob, len=length(ans))
+ while(any(index)) {
+ more = rbinom(n=sum(index), size[index], prob = prob[index])
+ ans[index] = more
+ index = (ans == 0)
+ }
+ ans
+}
dposbinom = function(x, size, prob, log = FALSE) {
log.arg = log
rm(log)
L = max(length(x), length(size), length(prob))
- x = rep(x, len=L); size = rep(size, len=L); prob = rep(prob, len=L);
+ x = rep(x, len = L); size = rep(size, len = L);
+ prob = rep(prob, len = L);
answer = NaN * x
is0 <- (x == 0)
- ok2 <- prob > 0 & prob <= 1 & size == round(size) & size > 0
+ ok2 <- (prob > 0) & (prob <= 1) &
+ (size == round(size)) & (size > 0)
answer = dbinom(x = x, size = size, prob = prob, log = TRUE) -
- log1p(-dbinom(x=0*x, size=size, prob=prob))
+ log1p(-dbinom(x = 0*x, size = size, prob = prob))
answer[!ok2] = NaN
if (log.arg) {
answer[is0 & ok2] = log(0.0)
@@ -541,43 +883,167 @@ dposbinom = function(x, size, prob, log = FALSE) {
answer
}
-pposbinom = function(q, size, prob, lower.tail = TRUE, log.p = FALSE) {
- if (!is.Numeric(prob, positive = TRUE))
- stop("no zero or non-numeric values allowed for argument 'prob'")
- L = max(length(q), length(size), length(prob))
- q = rep(q, len=L); size = rep(size, len=L); prob = rep(prob, len=L);
- ifelse(q < 1, 0, (pbinom(q=q, size=size, prob=prob, lower.tail=lower.tail,
- log.p=log.p) - (1-prob)^size) / (1 - (1-prob)^size))
-}
-qposbinom = function(p, size, prob, lower.tail = TRUE, log.p = FALSE) {
- if (!is.Numeric(prob, positive = TRUE))
- stop("no zero or non-numeric values allowed for argument 'prob'")
- if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
- stop("bad input for argument 'p'")
- qbinom(p=p * (1 - (1-prob)^size) + (1-prob)^size, size=size, prob=prob,
- lower.tail=lower.tail, log.p=log.p)
-}
-rposbinom = function(n, size, prob) {
- use.n = if ((length.n <- length(n)) > 1) length.n else
- if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
- stop("bad input for argument 'n'") else n
- if (any(prob == 0))
- stop("no zero values allowed for argument 'prob'")
- ans = rbinom(n=use.n, size=size, prob=prob)
- index = (ans == 0)
- size = rep(size, len=length(ans))
- prob = rep(prob, len=length(ans))
- while(any(index)) {
- more = rbinom(n=sum(index), size[index], prob=prob[index])
- ans[index] = more
- index = (ans == 0)
+
+
+
+ posbinomial = function(link = "logit", earg = list(),
+ mv = FALSE, parallel = FALSE, zero = NULL) {
+
+
+ if (!missing(link))
+ link = as.character(substitute(link))
+ if (!is.list(earg)) earg = list()
+
+
+ new("vglmff",
+ blurb = c("Positive-binomial distribution\n\n",
+ "Links: ",
+ if (mv)
+ c(namesof("prob1", link, earg = earg, tag = FALSE),
+ ",...,",
+ namesof("probM", link, earg = earg, tag = FALSE)) else
+ namesof("prob", link, earg = earg, tag = FALSE),
+ "\n"),
+ constraints = eval(substitute(expression({
+ constraints <- cm.vgam(matrix(1, M, 1), x, .parallel, constraints)
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .parallel = parallel, .zero = zero ))),
+ infos = eval(substitute(function(...) {
+ list(Musual = 1,
+ zero = .zero)
+ }, list( .zero = zero ))),
+
+ initialize = eval(substitute(expression({
+
+ mustart.orig = mustart
+ if ( .mv ) {
+ y = as.matrix(y)
+ M = ncoly = ncol(y)
+ extra$orig.w = w
+ w = as.matrix(w) # Added 20110308
+ mustart = matrix(colSums(y) / colSums(w),
+ n, ncol(y), byrow = TRUE)
+
+ } else {
+ eval(binomialff(link = .link, earg = .earg )@initialize)
}
- ans
+
+
+ if ( .mv ) {
+
+ dn2 = if (is.matrix(y)) dimnames(y)[[2]] else NULL
+ dn2 = if (length(dn2)) {
+ paste("E[", dn2, "]", sep = "")
+ } else {
+ paste("prob", 1:M, sep = "")
+ }
+ predictors.names = namesof(if (M > 1) dn2 else
+ "prob", .link, earg = .earg, short = TRUE)
+
+ w = matrix(w, n, ncoly)
+ y = y / w # Now sample proportion
+ } else {
+ predictors.names =
+ namesof("prob", .link, earg = .earg , tag = FALSE)
+ }
+
+ if (length(extra)) extra$w = w else extra = list(w = w)
+
+ if (!length(etastart)) {
+ mustart.use = if (length(mustart.orig)) mustart.orig else mustart
+ etastart = cbind(theta2eta(mustart.use, .link, earg = .earg ))
+ }
+ mustart = NULL
+ }), list( .link = link, .earg = earg, .mv = mv ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ w = extra$w
+ mymu = eta2theta(eta, .link, earg = .earg )
+ nvec = if ( .mv ) {
+ w
+ } else {
+ if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
+ round(w)
+ }
+ mymu / (1.0 - (1.0 - mymu)^(nvec))
+ },
+ list( .link = link, .earg = earg, .mv = mv ))),
+ last = eval(substitute(expression({
+ extra$w = NULL # Kill it off
+
+
+ misc$link = rep( .link, length = M)
+ names(misc$link) = if (M > 1) dn2 else "prob"
+
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:M) misc$earg[[ii]] = .earg
+
+ misc$expected = TRUE
+
+ misc$mv = .mv
+ w = as.numeric(w)
+ }), list( .link = link, .earg = earg, .mv = mv ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+
+ ycounts = if ( .mv ) {
+ round(y * extra$orig.w)
+ } else {
+ if (is.numeric(extra$orig.w)) y * w / extra$orig.w else
+ y * w # Convert proportions to counts
+ }
+ nvec = if ( .mv ) {
+ w
+ } else {
+ if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
+ round(w)
+ }
+ use.orig.w = if (is.numeric(extra$orig.w)) extra$orig.w else 1
+ mymu = eta2theta(eta, .link, earg = .earg )
+
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(use.orig.w * dposbinom(x = ycounts, size = nvec,
+ prob = mymu, log = TRUE))
+ }
+ }, list( .link = link, .earg = earg, .mv = mv ))),
+ vfamily = c("posbinomial"),
+ deriv = eval(substitute(expression({
+ use.orig.w = if (is.numeric(extra$orig.w)) extra$orig.w else
+ rep(1, n)
+
+ nvec = if ( .mv ) {
+ w
+ } else {
+ if (is.numeric(extra$orig.w)) round(w / extra$orig.w) else
+ round(w)
+ }
+ mymu = eta2theta(eta, .link, earg = .earg )
+ dmu.deta = dtheta.deta(mymu, .link, earg = .earg )
+
+ temp1 = 1 - (1 - mymu)^nvec
+ temp2 = (1 - mymu)^2
+ temp3 = (1 - mymu)^(nvec-2)
+
+ dl.dmu = y / mymu - (1 - y) / (1 - mymu) -
+ (1 - mymu) * temp3 / temp1
+
+ w * dl.dmu * dmu.deta
+ }), list( .link = link, .earg = earg, .mv = mv ))),
+ weight = eval(substitute(expression({
+ ed2l.dmu2 = 1 / (mymu * temp1) + 1 / temp2 -
+ mymu / (temp1 * temp2) -
+ (nvec-1) * temp3 / temp1 -
+ nvec * (temp2^(nvec-1)) / temp1^2
+ wz = w * (dmu.deta^2) * ed2l.dmu2
+ wz
+ }), list( .link = link, .earg = earg, .mv = mv ))))
}
+
diff --git a/R/family.qreg.R b/R/family.qreg.R
index 615cab2..e788a6c 100644
--- a/R/family.qreg.R
+++ b/R/family.qreg.R
@@ -155,20 +155,20 @@ lms.yjn.control <- function(trace = TRUE, ...)
dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda)
dmu.deta = dtheta.deta(mymu, .lmu, earg = .emu)
dsigma.deta = dtheta.deta(sigma, .lsigma, earg = .esigma)
- w * cbind(dl.dlambda * dlambda.deta,
- dl.dmu * dmu.deta,
- dl.dsigma * dsigma.deta)
+ c(w) * cbind(dl.dlambda * dlambda.deta,
+ dl.dmu * dmu.deta,
+ dl.dsigma * dsigma.deta)
}), list( .llambda = llambda, .lmu = lmu, .lsigma = lsigma,
.elambda = elambda, .emu = emu, .esigma = esigma ))),
weight = eval(substitute(expression({
- wz = matrix(as.numeric(NA), n, 6)
- wz[,iam(1,1,M)] = (7 * sigma^2 / 4) * dlambda.deta^2
- wz[,iam(2,2,M)] = (1 + 2*(lambda*sigma)^2)/(mymu*sigma)^2 * dmu.deta^2
- wz[,iam(3,3,M)] = (2 / sigma^2) * dsigma.deta^2
- wz[,iam(1,2,M)] = (-1 / (2 * mymu)) * dlambda.deta * dmu.deta
- wz[,iam(1,3,M)] = (lambda * sigma) * dlambda.deta * dsigma.deta
- wz[,iam(2,3,M)] = (2*lambda/(mymu * sigma)) * dmu.deta * dsigma.deta
- wz * w
+ wz = matrix(as.numeric(NA), n, 6)
+ wz[,iam(1,1,M)] = (7 * sigma^2 / 4) * dlambda.deta^2
+ wz[,iam(2,2,M)] = (1 + 2*(lambda*sigma)^2)/(mymu*sigma)^2 * dmu.deta^2
+ wz[,iam(3,3,M)] = (2 / sigma^2) * dsigma.deta^2
+ wz[,iam(1,2,M)] = (-1 / (2 * mymu)) * dlambda.deta * dmu.deta
+ wz[,iam(1,3,M)] = (lambda * sigma) * dlambda.deta * dsigma.deta
+ wz[,iam(2,3,M)] = (2*lambda/(mymu * sigma)) * dmu.deta * dsigma.deta
+ c(w) * wz
}), list( .llambda = llambda, .lmu = lmu, .lsigma = lsigma,
.elambda = elambda, .emu = emu, .esigma = esigma ))))
}
@@ -328,7 +328,7 @@ lms.yjn.control <- function(trace = TRUE, ...)
dlambda.deta * dmu.deta
wz[,iam(1,3,M)] = 2 * theta^1.5 * (2 * theta * tritheta - 2 -
1 / theta) * dlambda.deta * dsigma.deta
- wz * w
+ c(w) * wz
}), list( .llambda = llambda, .lmu = lmu, .lsigma = lsigma,
.elambda = elambda, .emu = emu, .esigma = esigma ))))
}
@@ -709,7 +709,7 @@ lms.yjn2.control <- function(save.weight=TRUE, ...)
dl.dmu = AA / sigma
dl.dsigma = (AA^2 -1) / sigma
dthetas.detas = cbind(dlambda.deta, dmu.deta, dsigma.deta)
- w * cbind(dl.dlambda, dl.dmu, dl.dsigma) * dthetas.detas
+ c(w) * cbind(dl.dlambda, dl.dmu, dl.dsigma) * dthetas.detas
}), list( .elambda = elambda, .emu = emu, .esigma = esigma,
.llambda = llambda, .lmu = lmu,
.lsigma = lsigma ))),
@@ -739,7 +739,7 @@ lms.yjn2.control <- function(save.weight=TRUE, ...)
wz = run.varcov * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
dimnames(wz) = list(rownames(wz), NULL) # Remove the colnames
- wz * w
+ c(w) * wz
}), list(.lsigma = lsigma,
.esigma = esigma, .elambda = elambda,
.nsimEIM=nsimEIM,
@@ -1023,8 +1023,7 @@ lms.yjn2.control <- function(save.weight=TRUE, ...)
wz[,iam(2,3,M)] = wz[,iam(2,3,M)] * dsigma.deta
wz[,iam(3,3,M)] = wz[,iam(3,3,M)] * dsigma.deta^2
- wz = wz * w
- wz
+ c(w) * wz
}), list(.lsigma = lsigma,
.esigma = esigma, .elambda = elambda,
.rule=rule,
@@ -1082,14 +1081,14 @@ amlnormal.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
amlnormal <- function(w.aml = 1, parallel = FALSE,
lexpectile = "identity", eexpectile = list(),
iexpectile = NULL,
- method.init = 1, digw = 4)
+ imethod = 1, digw = 4)
{
if (!is.Numeric(w.aml, posit=TRUE))
stop("'w.aml' must be a vector of positive values")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1, 2 or 3")
+ if (!is.Numeric(imethod, allow=1, integ=TRUE, posit=TRUE) ||
+ imethod > 3) stop("argument 'imethod' must be 1, 2 or 3")
if (mode(lexpectile) != "character" && mode(lexpectile) != "name")
lexpectile = as.character(substitute(lexpectile))
if (!is.list(eexpectile)) eexpectile = list()
@@ -1120,9 +1119,9 @@ amlnormal.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
earg = .eexpectile, tag = FALSE))
if (!length(etastart)) {
- mean.init = if ( .method.init == 1)
+ mean.init = if ( .imethod == 1)
rep(median(y), length=n) else
- if ( .method.init == 2)
+ if ( .imethod == 2)
rep(weighted.mean(y, w), length=n) else {
junk = if (is.R()) lm.wfit(x=x, y = y, w=w) else
lm.wfit(x=x, y = y, w = w, method = "qr")
@@ -1135,7 +1134,7 @@ amlnormal.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
}
}), list( .lexpectile=lexpectile, .eexpectile=eexpectile,
.iexpectile=iexpectile,
- .method.init = method.init, .digw = digw, .w.aml = w.aml ))),
+ .imethod = imethod, .digw = digw, .w.aml = w.aml ))),
inverse = eval(substitute(function(eta, extra = NULL) {
ans = eta = as.matrix(eta)
for(ii in 1:ncol(eta))
@@ -1213,7 +1212,7 @@ amlpoisson.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
}
- amlpoisson <- function(w.aml = 1, parallel = FALSE, method.init = 1,
+ amlpoisson <- function(w.aml = 1, parallel = FALSE, imethod = 1,
digw = 4, link = "loge", earg = list())
{
if (!is.Numeric(w.aml, posit=TRUE))
@@ -1246,9 +1245,9 @@ amlpoisson.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
.link, earg = .earg, tag = FALSE))
if (!length(etastart)) {
- mean.init = if ( .method.init == 2)
+ mean.init = if ( .imethod == 2)
rep(median(y), length=n) else
- if ( .method.init == 1)
+ if ( .imethod == 1)
rep(weighted.mean(y, w), length=n) else {
junk = if (is.R()) lm.wfit(x=x, y = y, w=w) else
lm.wfit(x=x, y = y, w = w, method = "qr")
@@ -1256,7 +1255,7 @@ amlpoisson.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
}
etastart = matrix(theta2eta(mean.init, .link, earg = .earg), n, M)
}
- }), list( .link = link, .earg = earg, .method.init = method.init,
+ }), list( .link = link, .earg = earg, .imethod = imethod,
.digw = digw, .w.aml = w.aml ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mu.ans = eta = as.matrix(eta)
@@ -1492,7 +1491,7 @@ amlexponential.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NUL
}
- amlexponential <- function(w.aml = 1, parallel = FALSE, method.init = 1,
+ amlexponential <- function(w.aml = 1, parallel = FALSE, imethod = 1,
digw = 4, link = "loge", earg = list())
{
if (!is.Numeric(w.aml, posit=TRUE))
@@ -1500,8 +1499,8 @@ amlexponential.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NUL
if (mode(link)!= "character" && mode(link)!= "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1, 2 or 3")
+ if (!is.Numeric(imethod, allow=1, integ=TRUE, posit=TRUE) ||
+ imethod > 3) stop("argument 'imethod' must be 1, 2 or 3")
y.names = paste("w.aml = ", round(w.aml, dig=digw), sep = "")
predictors.names = c(namesof(
@@ -1534,16 +1533,16 @@ amlexponential.deviance = function(mu, y, w, residuals = FALSE, eta, extra = NUL
paste("expectile(",y.names,")", sep = ""), .link, earg = .earg, tag = FALSE))
if (!length(etastart)) {
- mean.init = if ( .method.init == 1)
+ mean.init = if ( .imethod == 1)
rep(median(y), length=n) else
- if ( .method.init == 2)
+ if ( .imethod == 2)
rep(weighted.mean(y, w), length=n) else {
1 / (y + 1)
}
etastart = matrix(theta2eta(mean.init, .link, earg = .earg),
n, M)
}
- }), list( .link = link, .earg = earg, .method.init = method.init,
+ }), list( .link = link, .earg = earg, .imethod = imethod,
.digw = digw, .w.aml = w.aml ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mu.ans = eta = as.matrix(eta)
@@ -1730,11 +1729,11 @@ qregal = function(tau = c(0.25, 0.5, 0.75),
elocation=list(),
lscale = "loge", escale=list(),
ilocation=NULL,
- parallel=FALSE, method.init=1, digt = 4) {
+ parallel=FALSE, imethod=1, digt = 4) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow=1, integ=TRUE, posit=TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (!is.Numeric(tau, posit=TRUE) || max(tau) >= 1)
stop("bad input for argument 'tau'")
if (!is.list(elocation)) elocation = list()
@@ -1765,7 +1764,7 @@ qregal = function(tau = c(0.25, 0.5, 0.75),
link = .llocat, earg = .elocat, tag = FALSE))
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init = median(y)
} else {
locat.init = y
@@ -1781,7 +1780,7 @@ qregal = function(tau = c(0.25, 0.5, 0.75),
matrix(
theta2eta(locat.init, .llocat, earg = .elocat), n, M-1))
}
- }), list( .method.init = method.init, .tau = tau, .digt = digt,
+ }), list( .imethod = imethod, .tau = tau, .digt = digt,
.elocat = elocation, .escale = escale,
.llocat = llocation, .lscale = lscale,
.ilocat = ilocation ))),
@@ -1838,7 +1837,7 @@ qregal = function(tau = c(0.25, 0.5, 0.75),
dl.dlocation[index1] = ((taumat - 1)/scalemat)[index1]
dlocation.deta = dtheta.deta(locmat, .llocat, earg = .elocat)
dscale.deta = dtheta.deta(scalemat, .lscale, earg = .escale)
- w * cbind(dl.dlocation * dlocation.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta)
}), list( .tau = tau, .elocat = elocation, .llocat = llocation,
.escale = escale, .lscale = lscale ))),
weight = eval(substitute(expression({
@@ -1848,7 +1847,7 @@ qregal = function(tau = c(0.25, 0.5, 0.75),
taumat * (1-taumat))
wz[,iam(1,1,M)] = ed2l.dscale2 * dscale.deta^2
wz[,-1] = ed2l.dlocation2 * dlocation.deta^2
- w * wz
+ c(w) * wz
}), list( .tau = tau, .elocat = elocation, .llocat = llocation,
.escale = escale, .lscale = lscale ))))
}
@@ -2214,7 +2213,7 @@ alaplace2.control <- function(maxit = 100, ...)
sameScale = TRUE,
dfmu.init = 3,
intparloc = FALSE,
- method.init = 1,
+ imethod = 1,
zero = -2) {
llocat <- llocation
@@ -2223,9 +2222,9 @@ alaplace2.control <- function(maxit = 100, ...)
if (!is.Numeric(kappa, posit = TRUE))
stop("bad input for argument 'kappa'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4)
- stop("argument 'method.init' must be 1, 2 or ... 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4)
+ stop("argument 'imethod' must be 1, 2 or ... 4")
if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
stop("bad input for argument 'iscale'")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
@@ -2365,14 +2364,14 @@ alaplace2.control <- function(maxit = 100, ...)
if (!length(etastart)) {
for(jay in 1:Mdiv2) {
y.use <- if (ncoly > 1) y[, jay] else y
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init[, jay] = weighted.mean(y.use, w)
scale.init[, jay] = sqrt(var(y.use) / 2)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init[, jay] = median(y.use)
scale.init[, jay] =
sqrt(sum(w * abs(y - median(y.use))) / (sum(w) * 2))
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
Fit5 = vsmooth.spline(x = x[, min(ncol(x), 2)],
y = y.use, w = w, df = .dfmu.init)
locat.init[, jay] = predict(Fit5, x = x[, min(ncol(x), 2)])$y
@@ -2400,7 +2399,7 @@ alaplace2.control <- function(maxit = 100, ...)
theta2eta(scale.init, .lscale, earg = .escale))
etastart = etastart[, interleave.VGAM(M, M = Musual), drop = FALSE]
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.dfmu.init = dfmu.init,
.sinit = shrinkage.init, .digt = digt,
.elocat = elocat, .escale = escale,
@@ -2502,8 +2501,8 @@ alaplace2.control <- function(maxit = 100, ...)
dlocat.deta = dtheta.deta(locat, .llocat, earg = .elocat)
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
- ans <- w * cbind(dl.dlocat * dlocat.deta,
- dl.dscale * dscale.deta)
+ ans <- c(w) * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta)
ans <- ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
}), list( .escale = escale, .lscale = lscale,
@@ -2517,7 +2516,7 @@ alaplace2.control <- function(maxit = 100, ...)
wz[, 2*(1:Mdiv2) - 1] <- d2l.dlocat2 * dlocat.deta^2
wz[, 2*(1:Mdiv2) ] <- d2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .escale = escale, .lscale = lscale,
.elocat = elocat, .llocat = llocat ))))
}
@@ -2547,7 +2546,7 @@ alaplace1.control <- function(maxit = 100, ...)
shrinkage.init = 0.95, parallelLocation = FALSE, digt = 4,
dfmu.init = 3,
intparloc = FALSE,
- method.init = 1) {
+ imethod = 1) {
@@ -2557,9 +2556,9 @@ alaplace1.control <- function(maxit = 100, ...)
stop("arguments 'kappa' and 'tau' do not match")
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4)
- stop("argument 'method.init' must be 1, 2 or ... 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4)
+ stop("argument 'imethod' must be 1, 2 or ... 4")
if (!is.list(elocation)) elocation = list()
@@ -2665,11 +2664,11 @@ alaplace1.control <- function(maxit = 100, ...)
for(jay in 1:M) {
y.use <- if (ncoly > 1) y[, jay] else y
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init[, jay] = weighted.mean(y.use, w)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init[, jay] = median(y.use)
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
Fit5 = vsmooth.spline(x = x[, min(ncol(x), 2)],
y = y.use, w = w, df = .dfmu.init)
locat.init[, jay] = c(predict(Fit5, x = x[, min(ncol(x), 2)])$y)
@@ -2687,7 +2686,7 @@ alaplace1.control <- function(maxit = 100, ...)
etastart = cbind(theta2eta(locat.init, .llocat, earg = .elocat))
}
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.dfmu.init = dfmu.init,
.sinit = shrinkage.init, .digt = digt,
.elocat = elocation, .Scale.arg = Scale.arg,
@@ -2766,14 +2765,14 @@ alaplace1.control <- function(maxit = 100, ...)
dl.dlocation = ifelse(ymat >= location, kappamat, 1/kappamat) *
sqrt(2) * sign(ymat - location) / Scale
dlocation.deta = dtheta.deta(location, .llocat, earg = .elocat)
- w * cbind(dl.dlocation * dlocation.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta)
}), list( .Scale.arg = Scale.arg, .elocat = elocation,
.llocat = llocation, .kappa = kappa ))),
weight = eval(substitute(expression({
d2l.dlocation2 = 2 / Scale^2
wz = cbind(d2l.dlocation2 * dlocation.deta^2)
- w * wz
+ c(w) * wz
}), list( .Scale.arg = Scale.arg,
.elocat = elocation, .llocat = llocation ))))
}
@@ -2798,7 +2797,7 @@ alaplace3.control <- function(maxit = 100, ...)
llocation = "identity", lscale = "loge", lkappa = "loge",
elocation = list(), escale = list(), ekappa = list(),
ilocation = NULL, iscale = NULL, ikappa = 1.0,
- method.init = 1, zero = 2:3) {
+ imethod = 1, zero = 2:3) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
@@ -2806,9 +2805,9 @@ alaplace3.control <- function(maxit = 100, ...)
if (mode(lkappa) != "character" && mode(lkappa) != "name")
lkappa = as.character(substitute(lkappa))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
@@ -2841,7 +2840,7 @@ alaplace3.control <- function(maxit = 100, ...)
if (!length(etastart)) {
kappa.init = if (length( .ikappa)) rep( .ikappa, len = n) else
rep( 1.0, len = n)
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init = median(y)
scale.init = sqrt(var(y) / 2)
} else {
@@ -2857,7 +2856,7 @@ alaplace3.control <- function(maxit = 100, ...)
theta2eta(scale.init, .lscale, earg = .escale),
theta2eta(kappa.init, .lkappa, earg = .ekappa))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.elocat = elocation, .escale = escale, .ekappa = ekappa,
.llocat = llocation, .lscale = lscale, .lkappa = lkappa,
.ilocat = ilocation, .iscale = iscale, .ikappa = ikappa ))),
@@ -2910,9 +2909,9 @@ alaplace3.control <- function(maxit = 100, ...)
dlocation.deta = dtheta.deta(location, .llocat, earg = .elocat)
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
dkappa.deta = dtheta.deta(kappa, .lkappa, earg = .ekappa)
- w * cbind(dl.dlocation * dlocation.deta,
- dl.dscale * dscale.deta,
- dl.dkappa * dkappa.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta,
+ dl.dkappa * dkappa.deta)
}), list( .escale = escale, .lscale = lscale,
.elocat = elocation, .llocat = llocation,
.ekappa = ekappa, .lkappa = lkappa ))),
@@ -2928,7 +2927,7 @@ alaplace3.control <- function(maxit = 100, ...)
wz[,iam(3,3,M)] = d2l.dkappa2 * dkappa.deta^2
wz[,iam(1,3,M)] = d2l.dkappadloc * dkappa.deta * dlocation.deta
wz[,iam(2,3,M)] = d2l.dkappadscale * dkappa.deta * dscale.deta
- w * wz
+ c(w) * wz
}), list( .escale = escale, .lscale = lscale,
.elocat = elocation, .llocat = llocation ))))
}
@@ -2978,13 +2977,13 @@ rlaplace = function(n, location=0, scale=1) {
laplace = function(llocation = "identity", lscale = "loge",
elocation = list(), escale = list(),
ilocation = NULL, iscale = NULL,
- method.init = 1, zero = 2) {
+ imethod = 1, zero = 2) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3) stop("argument 'imethod' must be 1 or 2 or 3")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (!is.list(elocation)) elocation = list()
@@ -3010,10 +3009,10 @@ rlaplace = function(n, location=0, scale=1) {
c(namesof("location", .llocat, earg = .elocat, tag = FALSE),
namesof("scale", .lscale, earg = .escale, tag = FALSE))
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init = median(y)
scale.init = sqrt(var(y) / 2)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init = weighted.mean(y, w)
scale.init = sqrt(var(y) / 2)
} else {
@@ -3028,7 +3027,7 @@ rlaplace = function(n, location=0, scale=1) {
cbind(theta2eta(locat.init, .llocat, earg = .elocat),
theta2eta(scale.init, .lscale, earg = .escale))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.elocat = elocation, .escale = escale,
.llocat = llocation, .lscale = lscale,
.ilocat = ilocation, .iscale = iscale ))),
@@ -3062,7 +3061,8 @@ rlaplace = function(n, location=0, scale=1) {
dl.dscale = zedd / Scale - 1/Scale
dlocation.deta = dtheta.deta(location, .llocat, earg = .elocat)
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
- w * cbind(dl.dlocation * dlocation.deta, dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta)
}), list( .escale = escale, .lscale = lscale,
.elocat = elocation, .llocat = llocation ))),
weight = eval(substitute(expression({
@@ -3070,7 +3070,7 @@ rlaplace = function(n, location=0, scale=1) {
wz = matrix(0, nrow=n, ncol=M) # diagonal
wz[,iam(1,1,M)] = d2l.dlocation2 * dlocation.deta^2
wz[,iam(2,2,M)] = d2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .escale = escale, .lscale = lscale,
.elocat = elocation, .llocat = llocation ))))
}
@@ -3084,11 +3084,11 @@ fff.control <- function(save.weight = TRUE, ...)
fff = function(link = "loge", earg = list(),
idf1 = NULL, idf2 = NULL, nsimEIM = 100, # ncp=0,
- method.init = 1, zero = NULL) {
+ imethod = 1, zero = NULL) {
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (!is.list(earg)) earg = list()
@@ -3116,7 +3116,7 @@ fff.control <- function(save.weight = TRUE, ...)
predictors.names = c(namesof("df1", .link, earg = .earg, tag = FALSE),
namesof("df2", .link, earg = .earg, tag = FALSE))
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
df2.init = b = 2*mean(y) / (mean(y)-1)
df1.init = 2*b^2*(b-2)/(var(y)*(b-2)^2 * (b-4) - 2*b^2)
if (df2.init < 4) df2.init = 5
@@ -3133,7 +3133,7 @@ fff.control <- function(save.weight = TRUE, ...)
etastart = cbind(theta2eta(df1.init, .link, earg = .earg),
theta2eta(df2.init, .link, earg = .earg))
}
- }), list( .method.init = method.init, .idf1=idf1, .earg = earg,
+ }), list( .imethod = imethod, .idf1=idf1, .earg = earg,
.idf2=idf2, .link = link ))),
inverse = eval(substitute(function(eta, extra = NULL) {
df2 = eta2theta(eta[,2], .link, earg = .earg)
@@ -3198,7 +3198,7 @@ fff.control <- function(save.weight = TRUE, ...)
matrix(colMeans(run.varcov),
n, ncol(run.varcov), byrow = TRUE) else run.varcov
- wz = w * wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
+ wz = c(w) * wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
wz
}), list( .link = link, .earg = earg, .nsimEIM = nsimEIM,
.ncp = ncp ))))
@@ -3336,7 +3336,7 @@ fff.control <- function(save.weight = TRUE, ...)
d2prob.deta2 = d2theta.deta2(prob, .lprob, earg = .earg)
wz = -(dprob.deta^2) * d2l.dprob2
- wz = w * wz
+ wz = c(w) * wz
wz[wz < .Machine$double.eps] = .Machine$double.eps
wz
}), list( .lprob = lprob, .earg = earg ))))
@@ -3390,11 +3390,11 @@ rbenini = function(n, shape, y0) {
benini = function(y0=stop("argument 'y0' must be specified"),
lshape = "loge", earg = list(),
- ishape = NULL, method.init = 1) {
+ ishape = NULL, imethod = 1) {
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (!is.Numeric(y0, allow = 1, posit = TRUE))
stop("bad input for argument 'y0'")
if (!is.list(earg)) earg = list()
@@ -3414,7 +3414,7 @@ rbenini = function(n, shape, y0) {
if (!length(etastart)) {
probs = (1:3) / 4
qofy= quantile(rep(y, times=w), probs=probs) # fails if w != integer
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
shape.init = mean(-log1p(-probs) / (log(qofy))^2)
} else {
shape.init = median(-log1p(-probs) / (log(qofy))^2)
@@ -3423,7 +3423,7 @@ rbenini = function(n, shape, y0) {
rep(shape.init, len = n)
etastart = cbind(theta2eta(shape.init, .lshape, earg = .earg))
}
- }), list( .method.init = method.init, .ishape=ishape, .lshape = lshape, .earg = earg,
+ }), list( .imethod = imethod, .ishape=ishape, .lshape = lshape, .earg = earg,
.y0=y0 ))),
inverse = eval(substitute(function(eta, extra = NULL) {
shape = eta2theta(eta, .lshape, earg = .earg)
@@ -3457,7 +3457,7 @@ rbenini = function(n, shape, y0) {
weight = eval(substitute(expression({
d2l.dshape2 = 1 / shape^2
wz = d2l.dshape2 * dshape.deta^2
- w * wz
+ c(w) * wz
}), list( .lshape = lshape, .earg = earg ))))
}
@@ -3700,7 +3700,7 @@ ptriangle = function(q, theta, lower=0, upper=1) {
weight = eval(substitute(expression({
d2l.dTheta2 = 1 / ((Theta-lower)*(upper-Theta))
wz = dTheta.deta^2 * d2l.dTheta2
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -3732,7 +3732,7 @@ loglaplace1.control <- function(maxit = 300, ...)
dfmu.init = 3,
rep0 = 0.5, # 0.0001,
minquantile = 0, maxquantile = Inf,
- method.init = 1, zero = NULL) {
+ imethod = 1, zero = NULL) {
if (length(minquantile) != 1)
stop("bad input for argument 'minquantile'")
@@ -3746,8 +3746,8 @@ loglaplace1.control <- function(maxit = 300, ...)
stop("arguments 'kappa' and 'tau' do not match")
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4) stop("argument 'method.init' must be 1, 2 or ... 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4) stop("argument 'imethod' must be 1, 2 or ... 4")
if (!is.list(elocation)) elocation = list()
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
@@ -3808,13 +3808,13 @@ loglaplace1.control <- function(maxit = 300, ...)
}
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init = quantile(rep(y, w), probs= extra$tau) + 1/16
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init = weighted.mean(y, w)
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
locat.init = median(y)
- } else if ( .method.init == 4) {
+ } else if ( .imethod == 4) {
Fit5 = vsmooth.spline(x = x[, min(ncol(x), 2)], y = y, w = w,
df = .dfmu.init)
locat.init = c(predict(Fit5, x = x[, min(ncol(x), 2)])$y)
@@ -3830,7 +3830,7 @@ loglaplace1.control <- function(maxit = 300, ...)
etastart =
cbind(theta2eta(locat.init, .llocat, earg = .elocat))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.dfmu.init = dfmu.init, .rep0 = rep0,
.sinit = shrinkage.init, .digt = digt,
.elocat = elocation, .Scale.arg = Scale.arg,
@@ -3909,14 +3909,14 @@ loglaplace1.control <- function(maxit = 300, ...)
dl.dlocation = ifelse(w.mat >= location.w, kappamat, 1/kappamat) *
sqrt(2) * sign(w.mat-location.w) / Scale.w
dlocation.deta = dtheta.deta(location.w, "identity", earg = .elocat)
- w * cbind(dl.dlocation * dlocation.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta)
}), list( .Scale.arg = Scale.arg, .elocat = elocation,
.rep0 = rep0,
.llocat = llocation, .kappa = kappa ))),
weight = eval(substitute(expression({
d2l.dlocation2 = 2 / Scale.w^2
wz = cbind(d2l.dlocation2 * dlocation.deta^2)
- w * wz
+ c(w) * wz
}), list( .Scale.arg = Scale.arg,
.elocat = elocation, .llocat = llocation ))))
}
@@ -3939,7 +3939,7 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
sameScale = TRUE,
dfmu.init = 3,
rep0 = 0.5, nsimEIM = NULL,
- method.init = 1, zero = "(1 + M/2):M") {
+ imethod = 1, zero = "(1 + M/2):M") {
warning("it is best to use loglaplace1()")
if (length(nsimEIM) &&
@@ -3955,8 +3955,8 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4) stop("argument 'method.init' must be 1, 2 or ... 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4) stop("argument 'imethod' must be 1, 2 or ... 4")
if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
stop("bad input for argument 'iscale'")
if (!is.list(elocation)) elocation = list()
@@ -4033,13 +4033,13 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
"Choose larger values for 'tau'.")
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init.y = weighted.mean(y, w)
scale.init = sqrt(var(y) / 2)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init.y = median(y)
scale.init = sqrt(sum(w*abs(y-median(y))) / (sum(w) *2))
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
Fit5 = vsmooth.spline(x = x[, min(ncol(x), 2)], y = y, w = w,
df = .dfmu.init)
locat.init.y = c(predict(Fit5, x = x[, min(ncol(x), 2)])$y)
@@ -4059,7 +4059,7 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
cbind(theta2eta(locat.init.y, .llocat, earg = .elocat),
theta2eta(scale.init, .lscale, earg = .escale))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.dfmu.init = dfmu.init,
.sinit = shrinkage.init, .digt = digt,
.elocat = elocation, .escale = escale,
@@ -4135,8 +4135,8 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
zedd / Scale.w - 1 / Scale.w
dlocation.deta = dtheta.deta(location.w, .llocat, earg = .elocat)
dscale.deta = dtheta.deta(Scale.w, .lscale, earg = .escale)
- w * cbind(dl.dlocation * dlocation.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta)
}), list( .escale = escale, .lscale = lscale,
.elocat = elocation, .llocat = llocation,
.rep0 = rep0, .kappa = kappa ))),
@@ -4167,14 +4167,14 @@ loglaplace2.control <- function(save.weight = TRUE, ...)
n, ncol(run.varcov), byrow = TRUE) else run.varcov
wz = wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
- wz = w * matrix(wz, n, dimm(M))
+ wz = c(w) * matrix(wz, n, dimm(M))
wz
} else {
d2l.dlocation2 = 2 / (Scale.w * location.w)^2
d2l.dscale2 = 1 / Scale.w^2
wz = cbind(d2l.dlocation2 * dlocation.deta^2,
d2l.dscale2 * dscale.deta^2)
- w * wz
+ c(w) * wz
}
}), list( .elocat = elocation, .escale = escale,
.llocat = llocation, .lscale = lscale,
@@ -4206,7 +4206,7 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
shrinkage.init = 0.95, parallelLocation = FALSE, digt = 4,
dfmu.init = 3,
rep01 = 0.5,
- method.init = 1, zero = NULL) {
+ imethod = 1, zero = NULL) {
if (!is.Numeric(rep01, posit = TRUE, allow = 1) || rep01 > 0.5)
stop("bad input for argument 'rep01'")
@@ -4216,8 +4216,8 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
stop("arguments 'kappa' and 'tau' do not match")
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4) stop("argument 'method.init' must be 1, 2 or ... 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4) stop("argument 'imethod' must be 1, 2 or ... 4")
if (!is.list(elocation)) elocation = list()
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
@@ -4274,12 +4274,12 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
stop("sample proportion of 1s == ", round(prop.1., dig=4),
" < maximum 'tau' value. Choose smaller values for 'tau'.")
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
locat.init = quantile(rep(y, w), probs= extra$tau)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
locat.init = weighted.mean(y, w)
locat.init = median(rep(y, w))
- } else if ( .method.init == 3) {
+ } else if ( .imethod == 3) {
use.this = weighted.mean(y, w)
locat.init = (1- .sinit)*y + use.this * .sinit
} else {
@@ -4294,7 +4294,7 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
etastart =
cbind(theta2eta(locat.init, .llocat, earg = .elocat))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.dfmu.init = dfmu.init,
.sinit = shrinkage.init, .digt = digt,
.elocat = elocation, .Scale.arg = Scale.arg,
@@ -4366,14 +4366,14 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
dl.dlocation = ifelse(w.mat >= location.w, kappamat, 1/kappamat) *
sqrt(2) * sign(w.mat-location.w) / Scale.w
dlocation.deta = dtheta.deta(location.w, "identity", earg = .elocat)
- w * cbind(dl.dlocation * dlocation.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta)
}), list( .Scale.arg = Scale.arg, .elocat = elocation,
.rep01 = rep01,
.llocat = llocation, .kappa = kappa ))),
weight = eval(substitute(expression({
d2l.dlocation2 = 2 / Scale.w^2
wz = cbind(d2l.dlocation2 * dlocation.deta^2)
- w * wz
+ c(w) * wz
}), list( .Scale.arg = Scale.arg,
.elocat = elocation, .llocat = llocation ))))
}
@@ -4398,7 +4398,3 @@ adjust01.logitlaplace1 = function(ymat, y, w, rep01) {
-
-
-
-
diff --git a/R/family.rcam.R b/R/family.rcam.R
index 5e2386d..8142077 100644
--- a/R/family.rcam.R
+++ b/R/family.rcam.R
@@ -16,25 +16,19 @@
-
-
- rcam <- function(y, Rank = 0,
+ rcam <- function(y,
family = poissonff,
+ Rank = 0,
Musual = NULL,
Index.corner = if (!Rank) NULL else 1 + Musual * (1:Rank),
rprefix = "Row.",
cprefix = "Col.",
szero = if (!Rank) NULL else
- {if (Musual == 1) 1 else
+ { if (Musual == 1) 1 else
setdiff(1:(Musual*ncol(y)),
c( # 1:Musual,
1 + (1:ncol(y)) * Musual,
Index.corner))},
-
-
-
-
-
summary.arg = FALSE, h.step = 0.0001,
rbaseline = 1, cbaseline = 1, ...) {
@@ -42,23 +36,21 @@
+
+
if (!is.character(rprefix))
stop("argument 'rprefix' must be character")
if (!is.character(cprefix))
stop("argument 'cprefix' must be character")
-
-
-
- if (is.character(family))
- family <- get(family)
- if (is.function(family))
- family <- ((family)())
- if (!inherits(family, "vglmff")) {
- stop("'family = ", family, "' is not a VGAM family function")
- }
- efamily = family
-
+ if (is.character(family))
+ family <- get(family)
+ if (is.function(family))
+ family <- ((family)())
+ if (!inherits(family, "vglmff")) {
+ stop("'family = ", family, "' is not a VGAM family function")
+ }
+ efamily = family
if (!is.Numeric(Musual)) {
@@ -73,9 +65,6 @@
}
-
-
-
object.save <- y
y <- if (is(y, "rrvglm")) {
object.save at y
@@ -95,8 +84,6 @@
-
-
yn1 <- if (length(dimnames(y)[[1]])) dimnames(y)[[1]] else
paste("X2.", 1:nrow(y), sep = "")
warn.save = options()$warn
@@ -110,14 +97,14 @@
ncprefix <- as.name(cprefix)
- assign(rprefix, factor(1:nrow(y)))
- modmat.row <- substitute(
+ assign(rprefix, factor(1:nrow(y)))
+ modmat.row <- substitute(
model.matrix( ~ .rprefix ), list( .rprefix = nrprefix ))
- assign(cprefix, factor(1:ncol(y)))
- modmat.col <- substitute(
+ assign(cprefix, factor(1:ncol(y)))
+ modmat.col <- substitute(
model.matrix( ~ .cprefix ), list( .cprefix = ncprefix ))
- modmat.row <- eval( modmat.row )
- modmat.col <- eval( modmat.col )
+ modmat.row <- eval( modmat.row )
+ modmat.col <- eval( modmat.col )
@@ -170,7 +157,6 @@
}
-
str2 <- paste("y ", str1)
if (Rank > 0) {
for(ii in 2:nrow(y))
@@ -178,9 +164,8 @@
}
-
controlfun <- if (Rank == 0) rrvglm.control else rrvglm.control
- controlfun <- if (Rank == 0) vglm.control else rrvglm.control # orig.
+ controlfun <- if (Rank == 0) vglm.control else rrvglm.control # orig.
mycontrol <- controlfun(Rank = Rank,
@@ -221,8 +206,8 @@
- if (mycontrol$trace) {
- }
+ if (mycontrol$trace) {
+ }
}
@@ -254,7 +239,7 @@
summary(answer)
}
} else {
- as(answer, ifelse(Rank > 0, "rrvglm", "vglm"))
+ as(answer, ifelse(Rank > 0, "rcam", "rcam0"))
}
@@ -283,15 +268,21 @@ summaryrcam = function(object, ...) {
+ setClass("rcam0", representation(not.needed = "numeric"),
+ contains = "vglm") # Added 20110506
+
setClass("rcam", representation(not.needed = "numeric"),
contains = "rrvglm")
-setMethod("summary", "rcam",
+setMethod("summary", "rcam0",
function(object, ...)
summaryrcam(object, ...))
+setMethod("summary", "rcam",
+ function(object, ...)
+ summaryrcam(object, ...))
@@ -302,25 +293,20 @@ setMethod("summary", "rcam",
-
-
- Rcam <- function (mat, rbaseline = 1, cbaseline = 1) {
-
+ Rcam <- function (mat, rbaseline = 1, cbaseline = 1) {
mat <- as.matrix(mat)
RRR <- dim(mat)[1]
CCC <- dim(mat)[2]
-
if (is.null(rownames(mat)))
- rnames <- paste("X", 1:RRR, sep="") else
+ rnames <- paste("X", 1:RRR, sep = "") else
rnames <- rownames(mat)
if (is.null(colnames(mat)))
- cnames <- paste("Y", 1:CCC, sep="") else
+ cnames <- paste("Y", 1:CCC, sep = "") else
cnames <- colnames(mat)
-
r.index <- if (is.character(rbaseline))
which(rownames(mat) == rbaseline) else
if (is.numeric(rbaseline)) rbaseline else
@@ -331,30 +317,26 @@ setMethod("summary", "rcam",
which(colnames(mat) == cbaseline) else
if (is.numeric(cbaseline)) cbaseline else
stop("argement 'cbaseline' must be numeric",
- "or character of the level of row")
-
-
- yswap <- rbind(mat[r.index:RRR, ],
- if (r.index > 1) mat[1:(r.index - 1),] else NULL)
-
+ "or character of the level of row")
- if (length(r.index) != 1)
+ if (length(r.index) != 1)
stop("Could not match with argument 'rbaseline'")
- if (length(c.index) != 1)
+ if (length(c.index) != 1)
stop("Could not match with argument 'cbaseline'")
- yswap <- cbind(yswap[, c.index:CCC],
- if (c.index > 1) yswap[, 1:(c.index - 1)] else NULL)
- new.rnames <- rnames[ c(r.index:RRR,
- if (r.index > 1) 1:(r.index - 1) else NULL)]
-
- new.cnames <- cnames[ c(c.index:CCC,
- if (c.index > 1) 1:(c.index - 1) else NULL)]
+ yswap <- rbind(mat[r.index:RRR, ],
+ if (r.index > 1) mat[1:(r.index - 1),] else NULL)
+ yswap <- cbind(yswap[, c.index:CCC],
+ if (c.index > 1) yswap[, 1:(c.index - 1)] else NULL)
+ new.rnames <- rnames[c(r.index:RRR,
+ if (r.index > 1) 1:(r.index - 1) else NULL)]
+ new.cnames <- cnames[c(c.index:CCC,
+ if (c.index > 1) 1:(c.index - 1) else NULL)]
colnames(yswap) <- new.cnames
- rownames(yswap) <- new.rnames
+ rownames(yswap) <- new.rnames
yswap
}
@@ -363,69 +345,118 @@ setMethod("summary", "rcam",
- plotrcam0 <- function (object, rfirst = 1, cfirst = 1,
+
+
+
+
+
+
+
+
+ plotrcam0 <- function (object,
+ centered = TRUE, whichplots = c(1, 2),
+ hline0 = TRUE, hlty = "dashed", hcol = par()$col, hlwd = par()$lwd,
+ rfirst = 1, cfirst = 1,
rtype = "h", ctype = "h",
- rlas = 1, rcex.lab = 1,
- rcex.axis = 1, rlabels = FALSE,
- rtick = FALSE, clas = 1, ccex.lab = 1,
- ccex.axis = 1, clabels = FALSE, ctick = FALSE,
+ rcex.lab = 1, rcex.axis = 1, # rlabels = FALSE,
+ rtick = FALSE,
+ ccex.lab = 1, ccex.axis = 1, # clabels = FALSE,
+ ctick = FALSE,
rmain = "Row effects", rsub = "",
- rxlabel = "", rylabel = "Row effects",
- cmain = "Column effects", csub = "", cxlabel= "",
- cylabel = "Column effects",
+ rxlab = "", rylab = "Row effects",
+ cmain = "Column effects", csub = "",
+ cxlab = "", cylab = "Column effects",
rcol = par()$col, ccol = par()$col,
...) {
- if (object at family@infos()$Musual == 1) nparff <- 1 else nparff <- 2
+ nparff <- if (is.numeric(object at family@infos()$Musual)) {
+ object at family@infos()$Musual
+ } else {
+ 1
+ }
- orig.roweff <- c(0, coefficients(object)[(nparff+1): (nparff+nrow(object at y)-1)])
-
- orig.coleff <- c(0, coefficients(object)[(nparff+nrow(object at y)):
- (length(coefficients(object)))])
- rlast <- length(orig.roweff)
- clast <- length(orig.coleff)
+
+ if (is.numeric(object at control$Rank) && object at control$Rank != 0)
+ warning("argument 'object' is not Rank-0")
+
+
+ n_lm = nrow(object at y)
+
+ cobj <- coefficients(object)
+
+ upperbound = if (!is.numeric(object at control$Rank) ||
+ object at control$Rank == 0) length(cobj) else
+ length(object at control$colx1.index)
+
+ orig.roweff <- c("Row.1" = 0, cobj[(nparff + 1) : (nparff + n_lm - 1)])
+ orig.coleff <- c("Col.1" = 0, cobj[(nparff + n_lm) : upperbound])
+ last.r <- length(orig.roweff)
+ last.c <- length(orig.coleff)
+
orig.raxisl <- rownames(object at y)
orig.caxisl <- colnames(object at y)
- roweff <- orig.roweff[c(rfirst:rlast,
- if (rfirst > 1) 1:(rfirst-1) else NULL)]
+ roweff.orig <-
+ roweff <- orig.roweff[c(rfirst:last.r,
+ if (rfirst > 1) 1:(rfirst-1) else NULL)]
+ coleff.orig <-
+ coleff <- orig.coleff[c(cfirst:last.c,
+ if (cfirst > 1) 1:(cfirst-1) else NULL)]
+
+ if (centered) {
+ roweff = scale(roweff, scale = FALSE) # Center it only
+ coleff = scale(coleff, scale = FALSE) # Center it only
+ }
- coleff <- orig.coleff[c(cfirst:clast,
- if (cfirst > 1) 1:(cfirst-1) else NULL)]
+ raxisl <- orig.raxisl[c(rfirst:last.r,
+ if (rfirst > 1) 1:(rfirst-1) else NULL)]
- raxisl <- orig.raxisl[ c(rfirst:rlast,
- if (rfirst > 1) 1:(rfirst-1) else NULL)]
+ caxisl <- orig.caxisl[c(cfirst:last.c,
+ if (cfirst > 1) 1:(cfirst-1) else NULL)]
- caxisl <- orig.caxisl[ c(cfirst:clast,
- if (cfirst > 1) 1:(cfirst-1) else NULL)]
+ if (any(whichplots == 1, na.rm = TRUE)) {
+ plot(roweff, type = rtype,
+ axes = FALSE, col = rcol, main = rmain,
+ sub = rsub, xlab = rxlab, ylab = rylab, ...)
- plot(roweff, type = rtype,
- axes = FALSE, col = rcol,
- main = rmain,
- sub = rsub,
- xlab = rxlabel, ylab = rylabel, ...)
+ axis(1, at = 1:length(raxisl),
+ cex.lab = rcex.lab,
+ cex.axis = rcex.axis,
+ label = raxisl)
+ axis(2, cex.lab = rcex.lab, ...) # las = rlas)
+
+ if (hline0)
+ abline(h = 0, lty = hlty, col = hcol, lwd = hlwd)
+ }
+
+ if (any(whichplots == 2, na.rm = TRUE)) {
+ plot(coleff, type = ctype,
+ axes = FALSE, col = ccol, main = cmain, # lwd = 2, xpd = FALSE,
+ sub = csub, xlab = cxlab, ylab = cylab, ...)
+
+ axis(1, at = 1:length(caxisl),
+ cex.lab = ccex.lab,
+ cex.axis = ccex.axis,
+ label = caxisl)
+ axis(2, cex.lab = ccex.lab, ...) # las = clas)
- axis(1, at = 1:length(raxisl), cex.lab = rcex.lab,
- cex.axis = rcex.axis, label = raxisl)
- axis(2, cex.lab = rcex.lab, las = rlas)
- axis(3:4, labels = rlabels, tick = rtick)
+ if (hline0)
+ abline(h = 0, lty = hlty, col = hcol, lwd = hlwd)
+ }
- plot(coleff, type = ctype, col = ccol, # lwd=2, xpd=F,
- axes = FALSE, main = cmain,
- sub = csub, xlab = cxlabel, ylab = cylabel, ...)
- axis(1, at = 1:length(caxisl), cex.lab = ccex.lab,
- cex.axis = ccex.axis, label = caxisl)
- axis(2, cex.lab= ccex.lab, las = clas)
-
-
+ object at post$row.effects = roweff
+ object at post$col.effects = coleff
+ object at post$raw.row.effects = roweff.orig
+ object at post$raw.col.effects = coleff.orig
+
invisible(object)
}
@@ -433,44 +464,98 @@ setMethod("summary", "rcam",
+setMethod("plot", "rcam0",
+ function(x, y, ...)
+ plotrcam0(object = x, ...))
+
+
+setMethod("plot", "rcam",
+ function(x, y, ...)
+ plotrcam0(object = x, ...))
+
+
+
-moffset <- function (mat, roffset=1, coffset=1){
- y <- mat
-
- rowoffset <- function(y, roffset=1) {
- y <- as.matrix(y)
- roffset <- if (is.character(roffset))
- which(rownames(y) == roffset) else
- if (is.numeric(roffset)) roffset else
- stop("argument rstart/cstart must be numeric ",
- "or character of the level of row/column")
- if (roffset == 1) ye <- y else {
- ye <- y[1:roffset-1,,drop = FALSE]
- ye <- rbind(y[(roffset):nrow(y),,drop = FALSE],
- cbind(ye[,2:ncol(y),drop = FALSE], ye[,1,drop = FALSE]))
- ye
- }
- }
-
- if (((coffset >= 1) && (coffset <= ncol(y))) ||
- ((roffset >=1) && (roffset <= nrow(y)))) {
- y <- rowoffset(y, roffset)
- y <- t(rowoffset(t(y), coffset))
- y
- } else
- stop ("Error argument in 'rstart' or 'cstart'.",
- "It must be numeric or chacarter argument of row or column of",
- "'mat' matrix input")
- }
+
+
+moffset <- function (mat, roffset = 0, coffset = 0, postfix = "") {
+
+
+
+
+
+ if ((is.numeric(roffset) && (roffset == 0)) &&
+ (is.numeric(coffset) && (coffset == 0)))
+ return(mat)
+
+
+ vecmat = c(unlist(mat))
+ ind1 <- if (is.character(roffset))
+ which(rownames(mat) == roffset) else
+ if (is.numeric(roffset)) roffset + 1 else
+ stop("argument 'roffset' not matched (character). ",
+ "It must be numeric, ",
+ "else character and match the ",
+ "row names of the response")
+ ind2 <- if (is.character(coffset))
+ which(colnames(mat) == coffset) else
+ if (is.numeric(coffset)) coffset + 1 else
+ stop("argument 'coffset' not matched (character). ",
+ "It must be numeric, ",
+ "else character and match the ",
+ "column names of the response")
+
+ if (!is.Numeric(ind1, positive = TRUE, integ = TRUE, allow = 1) ||
+ !is.Numeric(ind2, positive = TRUE, integ = TRUE, allow = 1))
+ stop("bad input for arguments 'roffset' and/or 'coffset'")
+ if (ind1 > nrow(mat))
+ stop("too large a value for argument 'roffset'")
+ if (ind2 > ncol(mat))
+ stop("too large a value for argument 'coffset'")
+
+
+ start.ind = (ind2 - 1)* nrow(mat) + ind1
+
+
+ svecmat = vecmat[c(start.ind:(nrow(mat) * ncol(mat)),
+ 0:(start.ind - 1))]
+
+ rownames.mat = rownames(mat)
+ if (length(rownames.mat) != nrow(mat))
+ rownames.mat = paste("Row.", 1:nrow(mat), sep = "")
+
+ colnames.mat = colnames(mat)
+ if (length(colnames.mat) != ncol(mat))
+ colnames.mat = paste("Col.", 1:ncol(mat), sep = "")
+
+
+ newrn = if (roffset > 0)
+ c(rownames.mat[c(ind1:nrow(mat))],
+ paste(rownames.mat[0:(ind1-1)], postfix, sep = "")) else
+ rownames.mat
+
+ newcn = c(colnames.mat[c(ind2:ncol(mat), 0:(ind2 - 1))])
+ if (roffset > 0)
+ newcn = paste(newcn, postfix, sep = "")
+
+ newmat = matrix(svecmat, nrow(mat), ncol(mat),
+ dimnames = list(newrn, newcn))
+ newmat
+}
+
+
+
+
+
@@ -502,9 +587,9 @@ confint_rrnb <- function(rrnb2) {
if (!all(rrnb2 at misc$link == "loge"))
stop("argument 'rrnb2' does not have log links for both parameters")
- a21.hat <- (Coef(rrnb2)@A)["log(k)", 1]
+ a21.hat <- (Coef(rrnb2)@A)["log(size)", 1]
beta11.hat <- Coef(rrnb2)@B1["(Intercept)", "log(mu)"]
- beta21.hat <- Coef(rrnb2)@B1["(Intercept)", "log(k)"]
+ beta21.hat <- Coef(rrnb2)@B1["(Intercept)", "log(size)"]
delta1.hat <- exp(a21.hat * beta11.hat - beta21.hat)
delta2.hat <- 2 - a21.hat
@@ -546,7 +631,7 @@ confint_nb1 <- function(nb1) {
stop("argument 'nb1' does not have log links for both parameters")
cnb1 <- coefficients(as(nb1, "vglm"), matrix = TRUE)
- mydiff <- (cnb1["(Intercept)", "log(k)"] - cnb1["(Intercept)", "log(mu)"])
+ mydiff <- (cnb1["(Intercept)", "log(size)"] - cnb1["(Intercept)", "log(mu)"])
delta0.hat <- exp(mydiff)
(phi0.hat <- 1 + 1 / delta0.hat) # MLE of phi0
@@ -572,745 +657,3 @@ confint_nb1 <- function(nb1) {
- # ref: Kus, section 4.1, pg 4500
- # updated on 22/15/2010
-dexppois <- function(x, lambda, betave = 1, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
-
- N <- max(length(x), length(lambda), length(betave))
- x <- rep(x, len = N); lambda = rep(lambda, len = N);
- betave <- rep(betave, len = N)
-
- logdensity <- rep(log(0), len = N)
- xok <- (0 < x)
- # logdensity[xok] <- log(lambda[xok]) + log(betave[xok]) - lambda[xok] -
- # betave[xok] * x[xok] + lambda[xok] * exp(-betave[xok] *
- # x[xok]) - log(expm1(lambda[xok])) + 1
-
- logdensity[xok] <- log(lambda[xok]) + log(betave[xok]) -
- log1p(-exp(-lambda[xok])) - lambda[xok] - betave[xok] *
- x[xok] + lambda[xok] * exp(-betave[xok] * x[xok])
-
- logdensity[lambda <= 0] <- NaN
- logdensity[betave <= 0] <- NaN
- if (log.arg) logdensity else exp(logdensity)
-}
-
- # ref: calculated from F(x) from Kus, pg 4499
- # Not working 13/12/10
- # updated and working on 22/15/2010
-rexppois <- function(n, lambda, betave = 1) {
- # ans <- log(lambda/(log((exp(lambda) + 1) * runif(n))))/betave
- ans <- -log(log(runif(n) * -(expm1(lambda)) +
- exp(lambda)) / lambda) / betave
- ans[(lambda <= 0) | (betave <= 0)] <- NaN
- ans
-}
-
-
- # ref: calculated from F(x) from Kus, pg 4499
- # Not working 13/12/10
- # updated and working on 22/15/2010
-qexppois<- function(p, lambda, betave = 1) {
- # ans <- log(lambda/(log((exp(lambda) + 1) * p)))/betave
- ans <- -log(log(p * -(expm1(lambda)) +
- exp(lambda)) / lambda) / betave
- ans[(lambda <= 0) | (betave <= 0)] = NaN
- ans[p < 0] <- NaN
- ans[p > 1] <- NaN
- ans
-}
-
-
-
- # ref: Kus, eqn 2, pg 4499
- # Updated on 22/12/2010
-pexppois<- function(q, lambda, betave = 1) {
- #ans <- -(exp(lambda * exp(-betave * q)) - exp(lambda))/expm1(lambda)
- ans <-(exp(lambda * exp(-betave * q)) - exp(lambda)) / -expm1(lambda)
- ans[(lambda <= 0) | (betave <= 0)] <- NaN
- ans
-}
-
-
-
-
- exppoisson = function (llambda = "loge", lbetave = "loge",
- elambda = list(), ebetave = list(),
- ilambda = 1.1, ibetave = 1.5,
- zero = NULL) {
-
- if (mode(llambda) != "character" && mode(llambda) != "name")
- llambda = as.character(substitute(llambda))
- if (mode(lbetave) != "character" && mode(lbetave) != "name")
- lbetave = as.character(substitute(lbetave))
-
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
- stop("bad input for argument 'zero'")
-
- if (!is.Numeric(ilambda, posit = TRUE))
- stop("bad input for argument 'ilambda'")
- if (length(ibetave) && !is.Numeric(ibetave, posit = TRUE))
- stop("bad input for argument 'ibetave'")
-
- ilambda[ilambda == 1] = 1.1
-
- if (!is.list(ebetave))
- ebetave = list()
- if (!is.list(lambda))
- elambda = list()
-
- new("vglmff",
- blurb = c("Exponential Poisson Distribution \n \n",
- "Links: ",
- namesof("lambda", llambda, earg = elambda), ", ",
- namesof("betave", lbetave, earg = ebetave), "\n",
- "Mean: ",
- "(lambda/(expm1(lambda) * betave)) *",
- "genhypergeo(c(1,1),c(2,2),lambda)"),
-
- # genhypergeo() from package: hypergeo
- # ref = mean from Kus pg 4499
-
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero , M)
- }), list( .zero = zero))),
-
- initialize = eval(substitute(expression({
- if (ncol(cbind(y)) != 1)
- stop("response must be a vector or a one-column matrix")
-
- predictors.names = c(
- namesof("lambda", .llambda, earg = .elambda, short = TRUE),
- namesof("betave", .lbetave, earg = .ebetave, short = TRUE))
- if (!length(etastart)) {
-
- lambda.init = if (!is.Numeric( .ilambda , posit = TRUE))
- stop("argument 'ilambda' must be positive") else
- rep( .ilambda , len = n)
- betave.init = if (length( .ibetave ))
- rep( .ibetave , len = n) else
- stop("zz need to fix this code")
- ## (lambda.init/(expm1(lambda.init) * (y + 1/8))) *
- ## genhypergeo(c(1,1),c(2,2),lambda.init)
-
-
- betave.init = rep(weighted.mean(betave.init, w = w), len = n)
- etastart = cbind(theta2eta(lambda.init, .llambda , earg = .elambda ),
- theta2eta(betave.init, .lbetave , earg = .ebetave ))
- }
- }), list( .llambda = llambda, .lbetave = lbetave,
- .ilambda = ilambda, .ibetave = ibetave,
- .elambda = elambda, .ebetave = ebetave))),
-
- inverse = eval(substitute(function(eta, extra = NULL) {
- lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
- betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
- warning("returning dud means")
- runif(nrow(eta))
- }, list( .llambda = llambda, .lbetave = lbetave,
- .elambda = elambda, .ebetave = ebetave))),
-
- last = eval(substitute(expression({
- misc$link = c(lambda = .llambda , betave = .lbetave )
- misc$earg = list(lambda = .elambda , betave = .ebetave )
- misc$expected = TRUE
-
- }), list( .llambda = llambda, .lbetave = lbetave,
- .elambda = elambda, .ebetave = ebetave))),
-
- loglikelihood = eval(substitute(function(mu, y, w,
- residuals = FALSE, eta, extra = NULL) {
- lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
- betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dexppois(x = y, lambda = lambda, betave = betave, log = TRUE))
- }
- }, list( .lbetave = lbetave , .llambda = llambda ,
- .elambda = elambda , .ebetave = ebetave ))),
-
- vfamily = c("exppoisson"),
-
- deriv = eval(substitute(expression({
- lambda = eta2theta(eta[, 1], .llambda , earg = .elambda )
- betave = eta2theta(eta[, 2], .lbetave , earg = .ebetave )
-
- dl.dbetave = 1/betave - y - y * lambda * exp(-betave * y)
- dl.dlambda = 1/lambda - 1/expm1(lambda) - 1 + exp(-betave * y)
-
- dbetave.deta = dtheta.deta(betave, .lbetave , earg = .ebetave )
- dlambda.deta = dtheta.deta(lambda, .llambda , earg = .elambda )
-
- w * cbind(dl.dlambda * dlambda.deta,
- dl.dbetave * dbetave.deta)
- }), list( .llambda = llambda , .lbetave = lbetave,
- .elambda = elambda, .ebetave = ebetave ))),
-
- weight = eval(substitute(expression({
-
- temp1 = -expm1(-lambda)
-
- ed2l.dlambda2 = (1 + exp(2 * lambda) - lambda^2 * exp(lambda) - 2 *
- exp(lambda)) / (lambda * temp1)^2
-
-
- ed2l.dbetave2 = 1 / betave^2 - (lambda^2 * exp(-lambda) / (4 * betave^2 *
- temp1)) * genhypergeo(c(2,2,2),c(3,3,3),lambda)
-
- ed2l.dbetavelambda = (lambda * exp(-lambda) / (4 * betave * temp1)) *
- genhypergeo(c(2,2),c(3,3),lambda)
-
- wz <- matrix(0, n, dimm(M))
- wz[, iam(1, 1, M)] = ed2l.dlambda2 * dlambda.deta^2
- wz[, iam(2, 2, M)] = ed2l.dbetave2 * dbetave.deta^2
- wz[, iam(1, 2, M)] = dbetave.deta * dlambda.deta * ed2l.dbetavelambda
- w * wz
- }), list( .zero = zero ))))
-}
-
-
-
-
-
-dgenray <- function(x, shape, scale = 1, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
-
- N <- max(length(x), length(shape), length(scale))
- x <- rep(x, len = N)
- shape <- rep(shape, len = N)
- scale <- rep(scale, len = N)
-
- logdensity <- rep(log(0), len = N)
- if (any(xok <- (x > 0))) {
- temp1 <- x[xok] / scale[xok]
- logdensity[xok] <- log(2) + log(shape[xok]) + log(x[xok]) -
- 2 * log(scale[xok]) - temp1^2 +
- (shape[xok] - 1) * log1p(-exp(-temp1^2))
- }
- logdensity[(shape <= 0) | (scale <= 0)] <- NaN
- if (log.arg) {
- logdensity
- } else {
- exp(logdensity)
- }
-}
-
-
-pgenray <- function(q, shape, scale = 1) {
- ans <- (-expm1(-(q/scale)^2))^shape
- ans[q <= 0] <- 0
- ans[(shape <= 0) | (scale <= 0)] <- NaN
- ans
-}
-
-
-
-rgenray <- function(n, shape, scale = 1) {
- ans <- qgenray(runif(n), shape = shape, scale = scale)
- ans[(shape <= 0) | (scale <= 0)] <- NaN
- ans
-}
-
-
-qgenray <- function(p, shape, scale = 1) {
- ans <- scale * sqrt(-log1p(-(p^(1/shape))))
- ans[(shape <= 0) | (scale <= 0)] = NaN
- ans[p < 0] <- NaN
- ans[p > 1] <- NaN
- ans[p == 0] <- 0
- ans[p == 1] <- Inf
- ans
-}
-
-
-
-
-
-
-
-
-genrayleigh.control <- function(save.weight = TRUE, ...)
-{
- list(save.weight = save.weight)
-}
-
-
-
-
-
- genrayleigh = function (lshape = "loge", lscale = "loge",
- eshape = list(), escale = list(),
- ishape = NULL, iscale = NULL,
- tol12 = 1.0e-05,
- nsimEIM = 300, zero = 1) {
-
- if (mode(lshape) != "character" && mode(lshape) != "name")
- lshape = as.character(substitute(lshape))
- if (mode(lscale) != "character" && mode(lscale) != "name")
- lscale = as.character(substitute(lscale))
-
- if (length(ishape) && !is.Numeric(ishape, posit = TRUE))
- stop("bad input for argument 'ishape'")
- if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
- stop("bad input for argument 'iscale'")
-
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
- stop("bad input for argument 'zero'")
- if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE) || nsimEIM <= 50)
- stop("'nsimEIM' should be an integer greater than 50")
-
- if (!is.list(escale))
- escale = list()
- if (!is.list(eshape))
- eshape = list()
-
-
- new("vglmff",
- blurb = c("Generalized Rayleigh distribution\n",
- "Links: ",
- namesof("shape", lshape, earg = eshape), ", ",
- namesof("scale", lscale, earg = escale), "\n"),
- constraints = eval(substitute(expression({
- constraints <- cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- if (ncol(cbind(y)) != 1)
- stop("response must be a vector or a one-column matrix")
-
- predictors.names = c(
- namesof("shape", .lshape , earg = .eshape , short = TRUE),
- namesof("scale", .lscale , earg = .escale , short = TRUE))
-
- if (!length(etastart)) {
- genrayleigh.Loglikfun = function(scale, y, x, w, extraargs) {
- temp1 <- y / scale
- shape = -1 / weighted.mean(log1p(-exp(-temp1^2)), w = w)
-
- ans <-
- sum(w * (log(2) + log(shape) + log(y) - 2 * log(scale) -
- temp1^2 + (shape - 1) * log1p(-exp(-temp1^2))))
- ans
- }
- scale.grid = seq(0.2 * sd(y), 5 * sd(y), len = 29)
- scale.init = if (length( .iscale )) .iscale else
- getMaxMin(scale.grid, objfun = genrayleigh.Loglikfun,
- y = y, x = x, w = w)
- scale.init = rep(scale.init, length = length(y))
-
- shape.init = if (length( .ishape )) .ishape else
- -1 / weighted.mean(log1p(-exp(-(y/scale.init)^2)), w = w)
- shape.init = rep(shape.init, length = length(y))
-
- etastart = cbind(theta2eta(shape.init, .lshape, earg = .eshape),
- theta2eta(scale.init, .lscale, earg = .escale))
- }
- }), list( .lscale = lscale, .lshape = lshape,
- .iscale = iscale, .ishape = ishape,
- .escale = escale, .eshape = eshape))),
-
- inverse = eval(substitute(function(eta, extra = NULL) {
- shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
- Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
- qgenray(p = 0.5, shape = shape, scale = Scale)
- }, list( .lshape = lshape, .lscale = lscale,
- .eshape = eshape, .escale = escale ))),
-
- last = eval(substitute(expression({
- misc$link = c(shape = .lshape , scale = .lscale )
- misc$earg = list(shape = .eshape , scale = .escale )
- misc$expected = TRUE
- misc$nsimEIM = .nsimEIM
- }), list( .lshape = lshape, .lscale = lscale,
- .eshape = eshape, .escale = escale,
- .nsimEIM = nsimEIM ))),
-
- loglikelihood = eval(substitute(function(mu, y, w,
- residuals = FALSE, eta, extra = NULL) {
-
- shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
- Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
-
- if (residuals) stop("loglikelihood residuals",
- "not implemented yet") else {
- sum(w * dgenray(x = y, shape = shape, scale = Scale, log = TRUE))
- }
- }, list( .lshape = lshape , .lscale = lscale ,
- .eshape = eshape , .escale = escale ))),
-
- vfamily = c("genrayleigh"),
-
- deriv = eval(substitute(expression({
- shape = eta2theta(eta[, 1], .lshape , earg = .eshape )
- Scale = eta2theta(eta[, 2], .lscale , earg = .escale )
- dshape.deta = dtheta.deta(shape, .lshape , earg = .eshape )
- dscale.deta = dtheta.deta(Scale, .lscale , earg = .escale )
- dthetas.detas = cbind(dshape.deta, dscale.deta)
-
- temp1 <- y / Scale
- temp2 <- exp(-temp1^2)
- temp3 <- temp1^2 / Scale
- AAA <- 2 * temp1^2 / Scale # 2 * y^2 / Scale^3
- BBB <- -expm1(-temp1^2) # denominator
- dl.dshape = 1/shape + log1p(-temp2)
- dl.dscale = -2 / Scale + AAA * (1 - (shape - 1) * temp2 / BBB)
-
- dl.dshape[!is.finite(dl.dshape)] = max(dl.dshape[is.finite(dl.dshape)])
-
- answer <- w * cbind(dl.dshape, dl.dscale) * dthetas.detas
- answer
- }), list( .lshape = lshape , .lscale = lscale,
- .eshape = eshape, .escale = escale ))),
-
- weight = eval(substitute(expression({
-
-
- run.varcov = 0
- ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
- for(ii in 1:( .nsimEIM )) {
- ysim = rgenray(n = n, shape = shape, scale = Scale)
-
- temp1 <- ysim / Scale
- temp2 <- exp(-temp1^2) # May be 1 if ysim is very close to 0.
- temp3 <- temp1^2 / Scale
- AAA <- 2 * temp1^2 / Scale # 2 * y^2 / Scale^3
- BBB <- -expm1(-temp1^2) # denominator
- dl.dshape = 1/shape + log1p(-temp2)
- dl.dscale = -2 / Scale + AAA * (1 - (shape - 1) * temp2 / BBB)
-
- dl.dshape[!is.finite(dl.dshape)] = max(dl.dshape[is.finite(dl.dshape)])
-
- temp3 = cbind(dl.dshape, dl.dscale)
- run.varcov = run.varcov + temp3[, ind1$row.index] *
- temp3[, ind1$col.index]
- }
- run.varcov = run.varcov / .nsimEIM
-
- wz = if (intercept.only)
- matrix(colMeans(run.varcov, na.rm = FALSE),
- n, ncol(run.varcov), byrow = TRUE) else run.varcov
- wz = wz * dthetas.detas[, ind1$row] * dthetas.detas[, ind1$col]
- w * wz
- }), list( .lshape = lshape , .lscale = lscale,
- .eshape = eshape, .escale = escale,
- .tol12 = tol12, .nsimEIM = nsimEIM ))))
-}
-
-
-
-
-
-
-
-
-
- # Ref: Mudholker pg 293
- # Updated and working: 06/01/11
-desnorm <- function(x, location = 0, Scale = 1, epsilon = 0, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
-
- N <- max(length(x), length(location), length(Scale), length(epsilon))
- x <- rep(x, len = N)
- location <- rep(location, len = N)
- Scale <- rep(Scale, len = N)
- epsilon <- rep(epsilon, len = N)
- zedd <- (x - location)/Scale
-
- logdensity <- rep(log(0), len = N)
- xneg <- (zedd < 0)
- xpos <- (zedd >= 0)
- logdensity[xneg] <- 1/2 * log(2 * pi) - zedd[xneg]^2/(2 * (1 + epsilon[xneg])^2)
- logdensity[xpos] <- 1/2 * log(2 * pi) - zedd[xpos]^2/(2 * (1 - epsilon[xpos])^2)
- logdensity[(epsilon < -1) | (epsilon > 1)] <- NaN
-
- if (log.arg)
- logdensity
- else exp(logdensity)
-
-}
-
-
- # Ref: Mudholker pg 293
- # Updated and working: 06/01/11
-pesnorm <- function(q, location = 0, Scale = 1, epsilon = 0) {
-
- N <- max(length(q), length(location), length(Scale), length(epsilon))
- q <- rep(q, len = N)
- location <- rep(location, len = N)
- Scale <- rep(Scale, len = N)
- epsilon <- rep(epsilon, len = N)
- zedd <- (q - location)/Scale
-
- qneg <- (zedd < 0)
- qpos <- (zedd >= 0)
- ans <- rep(0, len = length(q))
-
- ans[qneg] <- (1 + epsilon[qneg]) * pnorm(q = zedd[qneg]/(1 + epsilon[qneg]),
- mean = 0, sd = 1)
- ans[qpos] <- epsilon[qpos] + (1 - epsilon[qpos]) * pnorm(q = zedd[qpos]/(1 -
- epsilon[qpos]),mean = 0, sd = 1)
-
- ans
-}
-
-
-
-
-
-
-
-
-
-
-
-dexpgeom <- function(x, scale = 1, shape, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
-
- N <- max(length(x), length(scale), length(shape))
- x <- rep(x, len = N)
- scale <- rep(scale, len = N)
- shape <- rep(shape, len = N)
-
- logdensity <- rep(log(0), len = N)
- if (any(xok <- (x > 0))) {
- temp1 <- (-x[xok]) * scale[xok]
- logdensity[xok] <- log(scale[xok]) + log1p(-shape[xok]) +
- temp1 - 2 * log1p(-shape[xok] * exp(temp1))
- }
-
- logdensity[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
- if (log.arg) {
- logdensity
- } else {
- exp(logdensity)
- }
-}
-
-
-
-pexpgeom <- function(q, scale = 1, shape) {
- temp1 <- (-q) * scale
- ans <- -expm1(temp1) / (1 - shape * exp(temp1))
- ans[q <= 0] <- 0
- ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
- ans
-}
-
-
-rexpgeom <- function(n, scale = 1, shape) {
- ans <- qexpgeom(runif(n), shape = shape, scale = scale)
- ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
- ans
-}
-
-
-
-qexpgeom <- function(p, scale = 1, shape) {
- ans <- (-1/scale) * log((p - 1) / (p * shape - 1))
- ans[(scale <= 0) | (shape <= 0) | (shape >= 1)] <- NaN
- ans[p < 0] <- NaN
- ans[p > 1] <- NaN
- ans[p == 0] <- 0
- ans[p == 1] <- Inf
- ans
-}
-
-
-
-
-
-expgeometric.control <- function(save.weight = TRUE, ...)
-{
- list(save.weight = save.weight)
-}
-
-
-
- expgeometric = function (lscale = "loge", lshape = "logit",
- escale = list(), eshape = list(),
- iscale = NULL, ishape = NULL,
- zero = 1, nsimEIM = 400) {
-
-
- if (mode(lshape) != "character" && mode(lshape) != "name")
- lshape = as.character(substitute(lshape))
- if (mode(lscale) != "character" && mode(lscale) != "name")
- lscale = as.character(substitute(lscale))
-
- if (length(ishape))
- if (!is.Numeric(ishape, posit = TRUE) || any(ishape >= 1))
- stop("bad input for argument 'ishape'")
-
- if (length(iscale))
- if (!is.Numeric(iscale, posit = TRUE))
- stop("bad input for argument 'iscale'")
-
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
- stop("bad input for argument 'zero'")
-
- if (!is.list(escale))
- escale = list()
- if (!is.list(eshape))
- eshape = list()
-
- if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
- stop("bad input for argument 'nsimEIM'")
- if (nsimEIM <= 50)
- stop("'nsimEIM' should be an integer greater than 50")
-
-
- new("vglmff",
- blurb = c("Exponential geometric distribution\n\n",
- "Links: ",
- namesof("Scale", lscale, earg = escale), ", ",
- namesof("shape", lshape, earg = eshape), "\n",
- "Mean: ", "(shape - 1) * log(1 - ",
- "shape) / (Scale * shape)"),
-
- constraints = eval(substitute(expression({
- constraints <- cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
-
-
-
- initialize = eval(substitute(expression({
- if (ncol(cbind(y)) != 1)
- stop("response must be a vector or a one-column matrix")
-
- predictors.names = c(
- namesof("Scale", .lscale , earg = .escale , short = TRUE),
- namesof("shape", .lshape , earg = .eshape , short = TRUE))
-
- if (!length(etastart)) {
-
- scale.init = if (is.Numeric( .iscale , posit = TRUE)) {
- rep( .iscale , len = n)
- } else {
- 1 / sd(y) # The papers scale parameter beta
- }
-
- shape.init = if (is.Numeric( .ishape , posit = TRUE)) {
- rep( .ishape , len = n)
- } else {
- rep(2 - exp(scale.init * median(y)), len = n)
- }
- shape.init[shape.init >= 0.95] = 0.95
- shape.init[shape.init <= 0.05] = 0.05
-
- etastart = cbind(theta2eta(scale.init, .lscale , earg = .escale ),
- theta2eta(shape.init, .lshape , earg = .eshape ))
-
- }
- }), list( .lscale = lscale, .lshape = lshape,
- .iscale = iscale, .ishape = ishape,
- .escale = escale, .eshape = eshape))),
-
- inverse = eval(substitute(function(eta, extra = NULL) {
- Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
- shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
-
- (shape - 1) * log1p(-shape) / (Scale * shape)
-
- }, list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
-
- last = eval(substitute(expression({
- misc$link = c(Scale = .lscale , shape = .lshape )
- misc$earg = list(Scale = .escale , shape = .eshape )
- misc$expected = TRUE
- misc$nsimEIM = .nsimEIM
- }), list( .lscale = lscale, .lshape = lshape,
- .escale = escale, .eshape = eshape,
- .nsimEIM = nsimEIM ))),
-
- loglikelihood = eval(substitute(function(mu, y, w,
- residuals = FALSE, eta, extra = NULL) {
-
- Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
- shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
-
- if (residuals) stop("loglikelihood residuals",
- "not implemented yet") else {
- sum(w * dexpgeom(x = y, shape = shape, scale = Scale, log = TRUE))
- }
- }, list( .lscale = lscale , .lshape = lshape ,
- .escale = escale , .eshape = eshape ))),
-
- vfamily = c("expgeometric"),
-
- deriv = eval(substitute(expression({
- Scale = eta2theta(eta[, 1], .lscale , earg = .escale )
- shape = eta2theta(eta[, 2], .lshape , earg = .eshape )
-
- temp2 <- exp(-Scale * y)
- temp3 <- shape * temp2
- dl.dscale = 1 / Scale - y - 2 * y * temp3 / (1 - temp3)
- dl.dshape = -1 / (1 - shape) + 2 * temp2 / (1 - temp3)
-
- dscale.deta = dtheta.deta(Scale, .lscale , earg = .escale )
- dshape.deta = dtheta.deta(shape, .lshape , earg = .eshape )
- dthetas.detas = cbind(dscale.deta, dshape.deta)
-
- answer <- w * cbind(dl.dscale, dl.dshape) * dthetas.detas
- answer
- }), list( .lscale = lscale , .lshape = lshape,
- .escale = escale, .eshape = eshape ))),
-
- weight = eval(substitute(expression({
-
-
-
-
-
-
-
-
-
- run.varcov = 0
- ind1 = iam(NA, NA, M=M, both = TRUE, diag = TRUE)
-
- if (length( .nsimEIM )) {
- for(ii in 1:( .nsimEIM )) {
- ysim = rexpgeom(n, scale=Scale, shape=shape)
-
- temp2 <- exp(-Scale * ysim)
- temp3 <- shape * temp2
- dl.dscale = 1 / Scale - ysim - 2 * ysim *
- temp3 / (1 - temp3)
- dl.dshape = -1 / (1 - shape) + 2 * temp2 / (1 - temp3)
-
- temp6 = cbind(dl.dscale, dl.dshape)
- run.varcov = run.varcov +
- temp6[,ind1$row.index] * temp6[,ind1$col.index]
- }
-
- run.varcov = run.varcov / .nsimEIM
-
- wz = if (intercept.only)
- matrix(colMeans(run.varcov),
- n, ncol(run.varcov), byrow = TRUE) else run.varcov
-
- wz = wz * dthetas.detas[, ind1$row] *
- dthetas.detas[, ind1$col]
- }
-
- w * wz
- }), list( .nsimEIM = nsimEIM ))))
-}
-
-
-
-
-
-
-
-
-
diff --git a/R/family.robust.R b/R/family.robust.R
index 2fa0e11..4576a19 100644
--- a/R/family.robust.R
+++ b/R/family.robust.R
@@ -123,14 +123,14 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
huber <- function(llocation = "identity", lscale = "loge",
elocation = list(), escale = list(),
k = 0.862,
- method.init = 1,
+ imethod = 1,
zero = 2) {
A1 <- (2 * dnorm(k) / k - 2 * pnorm(-k))
eps <- A1 / (1 + A1)
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4)
- stop("'method.init' must be 1 or 2 or 3 or 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4)
+ stop("'imethod' must be 1 or 2 or 3 or 4")
if (!is.Numeric(k, allow = 1, posit = TRUE))
stop("bad input for argument 'k'")
@@ -163,11 +163,11 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
junk = lm.wfit(x = x, y = y, w = w)
scale.y.est <- sqrt( sum(w * junk$resid^2) / junk$df.residual )
location.init <- if ( .llocat == "loge") pmax(1/1024, y) else {
- if ( .method.init == 3) {
+ if ( .imethod == 3) {
rep(weighted.mean(y, w), len = n)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
rep(median(rep(y, w)), len = n)
- } else if ( .method.init == 1) {
+ } else if ( .imethod == 1) {
junk$fitted
} else {
y
@@ -179,7 +179,7 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
}
}), list( .llocat = llocation, .lscale = lscale,
.elocat = elocation, .escale = escale,
- .method.init=method.init ))),
+ .imethod=imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta[,1], .llocat, earg = .elocat)
}, list( .llocat = llocation,
@@ -189,10 +189,10 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
misc$earg <- list("location" = .elocat, "scale" = .escale)
misc$expected <- TRUE
misc$k.huber <- .k
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
}), list( .llocat = llocation, .lscale = lscale,
.elocat = elocation, .escale = escale,
- .k = k, .method.init = method.init ))),
+ .k = k, .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
location <- eta2theta(eta[,1], .llocat, earg = .elocat)
@@ -230,8 +230,8 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
dlocat.deta <- dtheta.deta(mylocat, .llocat, earg = .elocat)
dscale.deta <- dtheta.deta(myscale, .lscale, earg = .escale)
ans <-
- w * cbind(dl.dlocat * dlocat.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta)
ans
}), list( .llocat = llocation, .lscale = lscale,
.elocat = elocation, .escale = escale,
@@ -251,7 +251,7 @@ phuber <- function(q, k = 0.862, mu = 0, sigma = 1)
wz[, iam(1,1,M)] <- ed2l.dlocat2 * dlocat.deta^2
wz[, iam(2,2,M)] <- ed2l.dscale2 * dscale.deta^2
ans
- w * wz
+ c(w) * wz
}), list( .eps = eps ))))
}
diff --git a/R/family.survival.R b/R/family.survival.R
index d1005ff..af3fd7b 100644
--- a/R/family.survival.R
+++ b/R/family.survival.R
@@ -10,109 +10,141 @@
- dcnormal1 = function(r1=0, r2=0, link.sd="loge",
- earg =list(),
- isd=NULL, zero=NULL)
+ dcennormal1 = function(r1 = 0, r2 = 0,
+ lmu = "identity",
+ lsd = "loge",
+ emu = list(),
+ esd = list(),
+ imu = NULL, isd = NULL, zero = 2)
{
- if (!is.Numeric(r1, allow=1, integ=TRUE) || r1<0) stop("bad input for r1")
- if (!is.Numeric(r2, allow=1, integ=TRUE) || r2<0) stop("bad input for r2")
- if (mode(link.sd) != "character" && mode(link.sd) != "name")
- link.sd = as.character(substitute(link.sd))
- if (!is.list(earg)) earg = list()
-
- new("vglmff",
- blurb=c("Univariate Normal distribution with double censoring\n\n",
+ if (!is.Numeric(r1, allow = 1, integ = TRUE) || r1 < 0)
+ stop("bad input for r1")
+ if (!is.Numeric(r2, allow = 1, integ = TRUE) || r2 < 0)
+ stop("bad input for r2")
+ if (mode(lmu) != "character" && mode(lmu) != "name")
+ lmu = as.character(substitute(lmu))
+ if (mode(lsd) != "character" && mode(lsd) != "name")
+ lsd = as.character(substitute(lsd))
+ if (!is.list(emu)) emu = list()
+ if (!is.list(esd)) esd = list()
+
+ new("vglmff",
+ blurb = c("Univariate Normal distribution with double censoring\n\n",
"Links: ",
- "mean; ", namesof("sd", link.sd, earg =earg, tag= TRUE),
+ namesof("mu", lmu, earg = emu, tag = TRUE), ", ",
+ namesof("sd", lsd, earg = esd, tag = TRUE),
"\n",
"Variance: sd^2"),
- constraints=eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }) , list( .zero = zero))),
- initialize=eval(substitute(expression({
- predictors.names =
- c("mean", namesof("sd", .link.sd, earg =.earg, tag= FALSE))
- if (ncol(y <- cbind(y)) != 1)
- stop("the response must be a vector or a one-column matrix")
- if (length(w) != n || !is.Numeric(w, integ=TRUE, posit=TRUE))
- stop("the argument 'weights' must be a vector ",
- "of positive integers")
- sumw = sum(w)
- extra$bign = sumw + .r1 + .r2 # Tot num of censored & uncensored obsns
- if (!length(etastart)) {
- sd.y.est = if (length(.isd)) rep(.isd, len=n) else {
- junk = if (is.R()) lm.wfit(x=x, y=y, w=w) else
- lm.wfit(x=x, y=y, w=w, method="qr")
- 1.25 * sqrt( sum(w * junk$resid^2) / junk$df.residual )
- }
- etastart = cbind(mu=y,
- theta2eta(sd.y.est, .link.sd, earg =.earg))
+ constraints = eval(substitute(expression({
+ constraints = cm.zero.vgam(constraints, x, .zero, M)
+ }) , list( .zero = zero))),
+
+
+ initialize = eval(substitute(expression({
+ predictors.names =
+ c(namesof("mu", .lmu, earg =.emu, tag = FALSE),
+ namesof("sd", .lsd, earg =.esd, tag = FALSE))
+
+ if (ncol(y <- cbind(y)) != 1)
+ stop("the response must be a vector or a one-column matrix")
+
+ if (length(w) != n || !is.Numeric(w, integ = TRUE, posit = TRUE))
+ stop("the argument 'weights' must be a vector ",
+ "of positive integers")
+
+ sumw = sum(w)
+ extra$bign = sumw + .r1 + .r2 # Tot num of censored & uncensored obsns
+
+ if (!length(etastart)) {
+ yyyy.est = if (length( .imu )) .imu else median(y)
+ sd.y.est = if (length( .isd )) .isd else {
+ junk = lm.wfit(x = x, y = y, w = w)
+ 1.25 * sqrt( sum(w * junk$resid^2) / junk$df.residual )
}
- }) , list( .link.sd=link.sd, .r1=r1, .r2=r2, .isd=isd,
- .earg =earg ))),
- inverse=function(eta, extra=NULL) eta[,1],
- last=eval(substitute(expression({
- misc$link = c(mu="identity", sd= .link.sd)
- misc$earg = list(mu=list(), sd= .earg)
- misc$expected = TRUE
- misc$r1 = .r1
- misc$r2 = .r2
- }) , list( .link.sd=link.sd, .r1=r1, .r2=r2,
- .earg =earg ))),
- loglikelihood=eval(substitute(
- function(mu,y,w,residuals= FALSE,eta, extra=NULL) {
- sd = eta2theta(eta[,2], .link.sd, earg =.earg)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * (-log(sd) - 0.5 * ((y - mu)/sd)^2)) +
- (if(.r1==0) 0 else {z1=min((y-mu)/sd); Fz1=pnorm(z1); .r1*log(Fz1)}) +
- (if(.r2==0) 0 else {z2=max((y-mu)/sd); Fz2=pnorm(z2); .r2*log1p(-Fz2)})
- } , list( .link.sd=link.sd, .r1=r1, .r2=r2,
- .earg =earg ))),
- vfamily=c("dcnormal1"),
- deriv=eval(substitute(expression({
- sd = eta2theta(eta[,2], .link.sd, earg =.earg)
- q1 = .r1 / extra$bign
- q2 = .r2 / extra$bign
- pee = 1 - q1 - q2 # 1 if r1==r2==0
- z1 = if (.r1 == 0) -100 else min((y - mu) / sd) # 100==Inf
- z2 = if (.r2 == 0) +100 else max((y - mu) / sd) # 100==Inf
- fz1 = if (.r1 == 0) 0 else dnorm(z1)
- fz2 = if (.r2 == 0) 0 else dnorm(z2)
- Fz1 = if (.r1 == 0) 0.02 else pnorm(z1) # 0/0 undefined
- Fz2 = if (.r2 == 0) 0.99 else pnorm(z2)
- dl.dmu = (y-mu) / sd^2 +
- ((- .r1 * fz1/Fz1 + .r2 * fz2/(1-Fz2)) / sd) / (n*w)
- dl.dsd = -1/sd + (y-mu)^2 / sd^3 +
- ((- .r1 * z1*fz1/Fz1 + .r2 * z2*fz2/(1-Fz2)) / sd) / (n*w)
- dmu.deta = dtheta.deta(mu, "identity")
- dsd.deta = dtheta.deta(sd, .link.sd, earg =.earg)
- cbind(w * dl.dmu * dmu.deta, w * dl.dsd * dsd.deta)
- }) , list( .link.sd=link.sd, .r1=r1, .r2=r2,
- .earg =earg ))),
- weight=expression({
- wz = matrix(as.numeric(NA), n, dimm(M))
- Q1 = ifelse(q1==0, 1, q1) # Saves division by 0 below; not elegant
- Q2 = ifelse(q2==0, 1, q2) # Saves division by 0 below; not elegant
- ed2l.dmu2 = 1 / (sd^2) +
- ((fz1*(z1+fz1/Q1) - fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
- ed2l.dmusd = ((fz1-fz2 + z1*fz1*(z1+fz1/Q1) -
- z2*fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
- ed2l.dsd2 = 2 / (sd^2) +
- ((z1*fz1-z2*fz2 + z1^2 *fz1 *(z1+fz1/Q1) -
- z2^2 *fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
- wz[,iam(1,1,M)] = w * ed2l.dmu2 * dmu.deta^2
- wz[,iam(2,2,M)] = w * ed2l.dsd2 * dsd.deta^2
- wz[,iam(1,2,M)] = w * ed2l.dmusd * dsd.deta * dmu.deta
- wz
- }))
+ yyyy.est = rep( yyyy.est , len = n)
+ sd.y.est = rep( sd.y.est , len = n)
+ etastart = cbind(mu = theta2eta(yyyy.est, .lmu, earg =.emu),
+ sd = theta2eta(sd.y.est, .lsd, earg =.esd))
+ }
+ }) , list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .imu = imu, .isd = isd,
+ .r1 = r1, .r2 = r2 ))),
+ inverse = function(eta, extra = NULL) eta[,1],
+ last = eval(substitute(expression({
+ misc$link = c(mu = .lmu , sd = .lsd )
+ misc$earg = list(mu = .emu , sd = .esd )
+ misc$expected = TRUE
+ misc$r1 = .r1
+ misc$r2 = .r2
+ }) , list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .r1 = r1, .r2 = r2 ))),
+ loglikelihood=eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ sd = eta2theta(eta[, 2], .lsd, earg = .esd )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else
+ sum(w * dnorm(y, m = mu, sd = sd, log = TRUE)) +
+ (if ( .r1 == 0) 0 else {
+ z1 = min((y - mu) / sd); Fz1 = pnorm(z1); .r1 * log(Fz1)}) +
+ (if ( .r2 == 0) 0 else {
+ z2 = max((y - mu) / sd); Fz2 = pnorm(z2); .r2 * log1p(-Fz2)})
+ } , list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .r1 = r1, .r2 = r2 ))),
+ vfamily = c("dcennormal1"),
+ deriv = eval(substitute(expression({
+ sd = eta2theta(eta[, 2], .lsd, earg =.esd)
+
+ q1 = .r1 / extra$bign
+ q2 = .r2 / extra$bign
+ pee = 1 - q1 - q2 # 1 if r1==r2==0
+ z1 = if ( .r1 == 0) - 100 else min((y - mu) / sd) # 100==Inf
+ z2 = if ( .r2 == 0) + 100 else max((y - mu) / sd) # 100==Inf
+ fz1 = if ( .r1 == 0) 0 else dnorm(z1)
+ fz2 = if ( .r2 == 0) 0 else dnorm(z2)
+ Fz1 = if ( .r1 == 0) 0.02 else pnorm(z1) # 0/0 undefined
+ Fz2 = if ( .r2 == 0) 0.99 else pnorm(z2)
+
+ dl.dmu = (y - mu) / sd^2 +
+ ((- .r1 * fz1/Fz1 + .r2 * fz2/(1-Fz2)) / sd) / (n*w)
+ dl.dsd = -1/sd + (y-mu)^2 / sd^3 +
+ ((- .r1 * z1*fz1/Fz1 + .r2 * z2*fz2/(1-Fz2)) / sd) / (n*w)
+
+ dmu.deta = dtheta.deta(mu, .lmu, earg =.emu)
+ dsd.deta = dtheta.deta(sd, .lsd, earg =.esd)
+
+ c(w) * cbind(dl.dmu * dmu.deta, dl.dsd * dsd.deta)
+ }) , list( .lmu = lmu, .lsd = lsd,
+ .emu = emu, .esd = esd,
+ .r1 = r1, .r2 = r2 ))),
+ weight=expression({
+ wz = matrix(as.numeric(NA), n, dimm(M))
+
+ Q1 = ifelse(q1 == 0, 1, q1) # Saves division by 0 below; not elegant
+ Q2 = ifelse(q2 == 0, 1, q2) # Saves division by 0 below; not elegant
+
+ ed2l.dmu2 = 1 / (sd^2) +
+ ((fz1*(z1+fz1/Q1) - fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
+ ed2l.dmusd = ((fz1-fz2 + z1*fz1*(z1+fz1/Q1) -
+ z2*fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
+ ed2l.dsd2 = 2 / (sd^2) +
+ ((z1*fz1-z2*fz2 + z1^2 *fz1 *(z1+fz1/Q1) -
+ z2^2 *fz2*(z2-fz2/Q2)) / sd^2) / (pee*w)
+
+ wz[,iam(1,1,M)] = w * ed2l.dmu2 * dmu.deta^2
+ wz[,iam(2,2,M)] = w * ed2l.dsd2 * dsd.deta^2
+ wz[,iam(1,2,M)] = w * ed2l.dmusd * dsd.deta * dmu.deta
+ wz
+ }))
}
-dbisa = function(x, shape, scale=1, log = FALSE) {
+dbisa = function(x, shape, scale = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -122,7 +154,7 @@ dbisa = function(x, shape, scale=1, log = FALSE) {
logdensity = rep(log(0), len=L)
xok = (x > 0)
xifun = function(x) {temp <- sqrt(x); temp - 1/temp}
- logdensity[xok] = dnorm(xifun(x[xok]/scale[xok]) / shape[xok], log=TRUE) +
+ logdensity[xok] = dnorm(xifun(x[xok]/scale[xok]) / shape[xok], log = TRUE) +
log1p(scale[xok]/x[xok]) - log(2) - log(shape[xok]) -
0.5 * log(x[xok]) - 0.5 * log(scale[xok])
logdensity[scale <= 0] = NaN
@@ -132,8 +164,8 @@ dbisa = function(x, shape, scale=1, log = FALSE) {
pbisa = function(q, shape, scale=1) {
if (!is.Numeric(q)) stop("bad input for argument 'q'")
- if (!is.Numeric(shape, pos=TRUE)) stop("bad input for argument 'shape'")
- if (!is.Numeric(scale, pos=TRUE)) stop("bad input for argument 'scale'")
+ if (!is.Numeric(shape, pos = TRUE)) stop("bad input for argument 'shape'")
+ if (!is.Numeric(scale, pos = TRUE)) stop("bad input for argument 'scale'")
ans = pnorm(((temp <- sqrt(q/scale)) - 1/temp) / shape)
ans[scale < 0 | shape < 0] = NA
ans[q <= 0] = 0
@@ -141,10 +173,10 @@ pbisa = function(q, shape, scale=1) {
}
qbisa = function(p, shape, scale=1) {
- if (!is.Numeric(p, posit=TRUE) || any(p >= 1))
+ if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
stop("argument 'p' must have values inside the interval (0,1)")
- if (!is.Numeric(shape, pos=TRUE)) stop("bad input for argument 'shape'")
- if (!is.Numeric(scale, pos=TRUE)) stop("bad input for argument 'scale'")
+ if (!is.Numeric(shape, pos = TRUE)) stop("bad input for argument 'shape'")
+ if (!is.Numeric(scale, pos = TRUE)) stop("bad input for argument 'scale'")
A = qnorm(p)
temp1 = A * shape * sqrt(4 + A^2 * shape^2)
ans1 = (2 + A^2 * shape^2 + temp1) * scale / 2
@@ -154,7 +186,7 @@ qbisa = function(p, shape, scale=1) {
rbisa = function(n, shape, scale=1) {
use.n = if ((length.n <- length(n)) > 1) length.n else
- if (!is.Numeric(n, integ=TRUE, allow=1, posit=TRUE))
+ if (!is.Numeric(n, integ = TRUE, allow = 1, posit = TRUE))
stop("bad input for argument 'n'") else n
A = rnorm(use.n)
@@ -179,28 +211,28 @@ rbisa = function(n, shape, scale=1) {
bisa = function(lshape = "loge", lscale = "loge",
eshape = list(), escale = list(),
- ishape = NULL, iscale=1,
- method.init=1, zero=NULL)
+ ishape = NULL, iscale = 1,
+ imethod = 1, zero = NULL)
{
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (length(ishape) && !is.Numeric(ishape, posit=TRUE))
+ if (length(ishape) && !is.Numeric(ishape, posit = TRUE))
stop("bad input for argument 'ishape'")
- if (!is.Numeric(iscale, posit=TRUE))
+ if (!is.Numeric(iscale, posit = TRUE))
stop("bad input for argument 'iscale'")
- if (!is.Numeric(method.init, allow=1, integ=TRUE, posit=TRUE) ||
- method.init > 3)
- stop("method.init must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("imethod must be 1 or 2 or 3")
if (!is.list(eshape)) eshape = list()
if (!is.list(escale)) escale = list()
new("vglmff",
blurb=c("Birnbaum-Saunders distribution\n\n",
"Links: ",
- namesof("shape", lshape, earg = eshape, tag= TRUE), "; ",
- namesof("scale", lscale, earg = escale, tag= TRUE)),
+ namesof("shape", lshape, earg = eshape, tag = TRUE), "; ",
+ namesof("scale", lscale, earg = escale, tag = TRUE)),
constraints=eval(substitute(expression({
constraints = cm.zero.vgam(constraints, x, .zero, M)
}) , list( .zero = zero))),
@@ -209,15 +241,15 @@ rbisa = function(n, shape, scale=1) {
stop("the response must be a vector or a one-column matrix")
predictors.names =
c(namesof("shape", .lshape, earg = .eshape, tag = FALSE),
- namesof("scale", .lscale, tag=FALSE))
+ namesof("scale", .lscale, tag = FALSE))
if (!length(etastart)) {
scale.init = rep( .iscale, len=n)
shape.init = if (is.Numeric( .ishape)) rep( .ishape, len=n) else {
- if ( .method.init==1) {
+ if ( .imethod==1) {
ybar = rep(weighted.mean(y, w), len=n)
ybarr = rep(1 / weighted.mean(1/y, w), len=n) # Reqrs y > 0
sqrt(ybar / scale.init + scale.init / ybarr - 2)
- } else if ( .method.init==2) {
+ } else if ( .imethod==2) {
sqrt(2*( pmax(y, scale.init+0.1) / scale.init - 1))
} else {
ybar = rep(weighted.mean(y, w), len=n)
@@ -230,8 +262,8 @@ rbisa = function(n, shape, scale=1) {
}) , list( .lshape = lshape, .lscale = lscale,
.ishape=ishape, .iscale=iscale,
.eshape = eshape, .escale = escale,
- .method.init=method.init ))),
- inverse=eval(substitute(function(eta, extra=NULL) {
+ .imethod=imethod ))),
+ inverse=eval(substitute(function(eta, extra = NULL) {
sh = eta2theta(eta[,1], .lshape, earg = .eshape)
sc = eta2theta(eta[,2], .lscale, earg = .escale)
sc * (1 + sh^2 / 2)
@@ -244,7 +276,7 @@ rbisa = function(n, shape, scale=1) {
}) , list( .lshape = lshape, .lscale = lscale,
.eshape = eshape, .escale = escale ))),
loglikelihood=eval(substitute(
- function(mu,y,w,residuals= FALSE,eta, extra=NULL) {
+ function(mu,y,w,residuals= FALSE,eta, extra = NULL) {
sh = eta2theta(eta[,1], .lshape, earg = .eshape)
sc = eta2theta(eta[,2], .lscale, earg = .escale)
if (residuals) stop("loglikelihood residuals not ",
@@ -262,7 +294,8 @@ rbisa = function(n, shape, scale=1) {
(sqrt(y/sc) - sqrt(sc/y)) / (2 * sh^2 * sc^1.5)
dsh.deta = dtheta.deta(sh, .lshape, earg = .eshape)
dsc.deta = dtheta.deta(sc, .lscale, earg = .escale)
- w * cbind(dl.dsh * dsh.deta, dl.dsc * dsc.deta)
+ c(w) * cbind(dl.dsh * dsh.deta,
+ dl.dsc * dsc.deta)
}) , list( .lshape = lshape, .lscale = lscale,
.eshape = eshape, .escale = escale ))),
weight=eval(substitute(expression({
@@ -273,7 +306,7 @@ rbisa = function(n, shape, scale=1) {
pnorm(2/alpha, lower.tail = FALSE)
wz[,iam(2,2,M)] = dsc.deta^2 * (sh * hfunction(sh) / sqrt(2*pi) +
1) / (sh*sc)^2
- w * wz
+ c(w) * wz
}), list( .zero = zero ))))
}
diff --git a/R/family.univariate.R b/R/family.univariate.R
index 19c2ea3..541b125 100644
--- a/R/family.univariate.R
+++ b/R/family.univariate.R
@@ -27,7 +27,7 @@ getMaxMin = function(vov, objfun, y, x, w, extraargs = NULL, maximize = TRUE,
if (!is.vector(vov)) stop("'vov' must be a vector")
objvals = vov
for(ii in 1:length(vov))
- objvals[ii] = objfun(vov[ii], y=y, x=x, w=w, extraargs=extraargs)
+ objvals[ii] = objfun(vov[ii], y = y, x = x, w = w, extraargs=extraargs)
try.this = if (abs.arg) {
if (maximize) vov[abs(objvals) == max(abs(objvals))] else
vov[abs(objvals) == min(abs(objvals))]
@@ -84,7 +84,7 @@ getMaxMin = function(vov, objfun, y, x, w, extraargs = NULL, maximize = TRUE,
mean((y-thetaval)*(thetaval^2-1)/(1-2*thetaval*y+thetaval^2))
theta.grid = seq(-0.9, 0.9, by=0.05)
try.this = getMaxMin(theta.grid, objfun=mccullagh89.aux,
- y=y, x=x, w=w, maximize = FALSE,
+ y = y, x = x, w = w, maximize = FALSE,
abs.arg = TRUE)
try.this = rep(try.this, len = n)
try.this
@@ -127,7 +127,8 @@ getMaxMin = function(vov, objfun, y, x, w, extraargs = NULL, maximize = TRUE,
dl.dTheta = 2 * nu * (y-Theta) / (1 -2*Theta*y + Theta^2)
dl.dnu = log1p(-y^2) - log1p(-2*Theta*y + Theta^2) -
digamma(nu+0.5) + digamma(nu+1)
- w * cbind(dl.dTheta * dTheta.deta, dl.dnu * dnu.deta)
+ c(w) * cbind(dl.dTheta * dTheta.deta,
+ dl.dnu * dnu.deta)
}), list( .ltheta=ltheta, .lnu=lnu, .etheta = etheta, .enu=enu ))),
weight = eval(substitute(expression({
d2l.dTheta2 = (2 * nu^2 / (1+nu)) / (1-Theta^2)
@@ -135,7 +136,7 @@ getMaxMin = function(vov, objfun, y, x, w, extraargs = NULL, maximize = TRUE,
wz = matrix(as.numeric(NA), n, M) #diagonal matrix
wz[,iam(1,1,M)] = d2l.dTheta2 * dTheta.deta^2
wz[,iam(2,2,M)] = d2l.dnu2 * dnu.deta^2
- w * wz
+ c(w) * wz
}), list( .ltheta=ltheta, .lnu=lnu ))))
}
@@ -162,7 +163,7 @@ hzeta.control <- function(save.weight = TRUE, ...)
new("vglmff",
blurb = c(
"Haight's Zeta distribution f(y) = (2y-1)^(-alpha) - (2y+1)^(-alpha),\n",
- " alpha>0, y=1,2,....\n\n",
+ " alpha>0, y = 1,2,....\n\n",
"Link: ",
namesof("alpha", link, earg = earg), "\n\n",
"Mean: (1-2^(-alpha)) * zeta(alpha) if alpha>1",
@@ -200,7 +201,7 @@ hzeta.control <- function(save.weight = TRUE, ...)
alpha = eta2theta(eta, .link, earg = .earg )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dhzeta(x=y, alpha=alpha, log = TRUE))
+ sum(w * dhzeta(x = y, alpha=alpha, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("hzeta"),
@@ -211,7 +212,7 @@ hzeta.control <- function(save.weight = TRUE, ...)
"alpha", hessian = FALSE)
eval.d3 = eval(d3)
dl.dalpha = attr(eval.d3, "gradient")
- w * dl.dalpha * dalpha.deta
+ c(w) * dl.dalpha * dalpha.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
sd3 = deriv3(~ log((2*ysim-1)^(-alpha) - (2*ysim+1)^(-alpha)),
@@ -230,7 +231,7 @@ hzeta.control <- function(save.weight = TRUE, ...)
n, dimm(M), byrow = TRUE) else cbind(run.var)
wz = wz * dalpha.deta^2
- w * wz
+ c(w) * wz
}), list( .nsimEIM = nsimEIM ))))
}
@@ -337,7 +338,7 @@ rhzeta = function(n, alpha)
eval(process.categorical.data.vgam)
y <- as.matrix(y)
- ycount <- as.matrix(y * w)
+ ycount <- as.matrix(y * c(w))
M <- ncol(y)
if (max(abs(ycount - round(ycount ))) > 1.0e-6)
warning("there appears to be non-integer responses")
@@ -380,7 +381,7 @@ rhzeta = function(n, alpha)
probs <- probs / as.vector(probs %*% rep(1, M))
phi <- eta2theta(eta[,M], .lphi, earg = .ephi )
n <- length(phi)
- ycount <- as.matrix(y * w)
+ ycount <- as.matrix(y * c(w))
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
ans <- rep(0.0, len = n)
@@ -429,7 +430,7 @@ rhzeta = function(n, alpha)
dl.dprobs <- matrix(0.0, n, M-1)
dl.dphi <- rep(0.0, len = n)
omega <- extra$n2
- ycount <- as.matrix(y * w)
+ ycount <- as.matrix(y * c(w))
for(jay in 1:M) {
maxyj <- max(ycount[,jay])
loopOveri <- n < maxyj
@@ -454,8 +455,9 @@ rhzeta = function(n, alpha)
for(rrr in 1:maxyj) {
index <- (rrr <= ycount[,jay]) & (ycount[,jay] > 0)
PHI <- phi[index]
- dl.dphi[index] <- dl.dphi[index] + (rrr-1-probs[index,jay]) /
- ((1-PHI)*probs[index,jay] + (rrr-1)*PHI)
+ dl.dphi[index] <- dl.dphi[index] +
+ (rrr-1-probs[index,jay]) / ((1-PHI)*probs[index,jay] +
+ (rrr-1)*PHI)
tmp9 <- (1-PHI) / ((1-PHI)*probs[index,jay] + (rrr-1)*PHI)
if (jay < M) {
dl.dprobs[index,jay] <- dl.dprobs[index,jay] + tmp9
@@ -481,7 +483,8 @@ rhzeta = function(n, alpha)
}
dprobs.deta <- probs[,-M] * (1 - probs[,-M]) # n x (M-1)
dphi.deta <- dtheta.deta(phi, .lphi, earg = .ephi )
- ans <- cbind(dl.dprobs * dprobs.deta, dl.dphi * dphi.deta)
+ ans <- cbind(dl.dprobs * dprobs.deta,
+ dl.dphi * dphi.deta)
ans
}), list( .ephi = ephi, .lphi = lphi ))),
weight = eval(substitute(expression({
@@ -637,7 +640,7 @@ dirmul.old = function(link = "loge", earg = list(), init.alpha = 0.01,
dl.dsh = digamma(sumshape) - digamma(extra$n2 + sumshape) +
digamma(y + shape) - digamma(shape)
dsh.deta = dtheta.deta(shape, .link, earg = .earg)
- w * dl.dsh * dsh.deta
+ c(w) * dl.dsh * dsh.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
index = iam(NA, NA, M, both = TRUE, diag = TRUE)
@@ -652,7 +655,7 @@ dirmul.old = function(link = "loge", earg = list(), init.alpha = 0.01,
for(ii in 1:ncol(wz))
wz[,ii] = sum(wz[,ii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
@@ -663,6 +666,8 @@ dirmul.old = function(link = "loge", earg = list(), init.alpha = 0.01,
+
+
rdiric = function(n, shape, dimension = NULL) {
if (!is.numeric(dimension))
dimension = length(shape)
@@ -677,11 +682,15 @@ rdiric = function(n, shape, dimension = NULL) {
}
- dirichlet = function(link = "loge", earg = list(), parallel = FALSE, zero = NULL)
+
+
+ dirichlet = function(link = "loge", earg = list(),
+ parallel = FALSE, zero = NULL)
{
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
+ if (length(zero) &&
+ !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (!is.list(earg)) earg = list()
@@ -689,7 +698,7 @@ rdiric = function(n, shape, dimension = NULL) {
blurb = c("Dirichlet distribution\n\n",
"Links: ",
namesof("shapej", link, earg = earg), "\n\n",
- "Mean: shape_j/(1 + sum(shape_j)), j=1,..,ncol(y)"),
+ "Mean: shape_j/(1 + sum(shape_j)), j = 1,..,ncol(y)"),
constraints = eval(substitute(expression({
constraints = cm.vgam(matrix(1, M, 1), x, .parallel, constraints, int= TRUE)
constraints = cm.zero.vgam(constraints, x, .zero, M)
@@ -728,8 +737,11 @@ rdiric = function(n, shape, dimension = NULL) {
M = if (is.matrix(eta)) ncol(eta) else 1
sumshape = as.vector(shape %*% rep(1, len = M))
if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * (lgamma(sumshape) - lgamma(shape) + (shape-1)*log(y )))
+ "implemented yet") else {
+ sum(c(w) * lgamma(sumshape)) -
+ sum(c(w) * lgamma(shape)) +
+ sum(c(w) * (shape-1) * log(y))
+ }
}, list( .link = link, .earg = earg ))),
vfamily = c("dirichlet"),
deriv = eval(substitute(expression({
@@ -737,19 +749,20 @@ rdiric = function(n, shape, dimension = NULL) {
sumshape = as.vector(shape %*% rep(1, len = M))
dl.dsh = digamma(sumshape) - digamma(shape) + log(y)
dsh.deta = dtheta.deta(shape, .link, earg = .earg )
- w * dl.dsh * dsh.deta
+ c(w) * dl.dsh * dsh.deta
}), list( .link = link, .earg = earg ))),
weight = expression({
index = iam(NA, NA, M, both = TRUE, diag = TRUE)
wz = matrix(trigamma(sumshape), nrow=n, ncol=dimm(M))
wz[,1:M] = wz[,1:M] - trigamma(shape)
- wz = -w * wz * dsh.deta[, index$row] * dsh.deta[, index$col]
+ wz = -c(w) * wz * dsh.deta[, index$row] * dsh.deta[, index$col]
wz
}))
}
+
zeta = function(x, deriv = 0) {
@@ -828,7 +841,7 @@ rdiric = function(n, shape, dimension = NULL) {
ans = rep(as.numeric(NA), length(x))
nn = sum(ok) # Effective length (excludes x < 0 and x = 1 values)
if (nn)
- ans[ok] = dotC(name = "vzetawr", as.double(x[ok]), ans=double(nn),
+ ans[ok] = dotC(name = "vzetawr", as.double(x[ok]), ans = double(nn),
as.integer(deriv.arg), as.integer(nn))$ans
@@ -878,7 +891,7 @@ dzeta = function(x, p, log = FALSE)
new("vglmff",
blurb = c("Zeta distribution ",
- "f(y) = 1/(y^(p+1) zeta(p+1)), p>0, y=1,2,..\n\n",
+ "f(y) = 1/(y^(p+1) zeta(p+1)), p>0, y = 1,2,..\n\n",
"Link: ",
namesof("p", link, earg = earg), "\n\n",
"Mean: zeta(p) / zeta(p+1), provided p>1\n",
@@ -896,11 +909,11 @@ dzeta = function(x, p, log = FALSE)
if (!length(etastart)) {
zetaff.Loglikfun = function(pp, y, x, w, extraargs) {
- sum(w * dzeta(x=y, p=pp, log = TRUE))
+ sum(w * dzeta(x = y, p=pp, log = TRUE))
}
p.grid = seq(0.1, 3.0, len=19)
pp.init = if (length( .init.p )) .init.p else
- getMaxMin(p.grid, objfun=zetaff.Loglikfun, y=y, x=x, w=w)
+ getMaxMin(p.grid, objfun=zetaff.Loglikfun, y = y, x = x, w = w)
pp.init = rep(pp.init, length=length(y))
if ( .link == "loglog") pp.init[pp.init <= 1] = 1.2
etastart = theta2eta(pp.init, .link, earg = .earg)
@@ -921,7 +934,7 @@ dzeta = function(x, p, log = FALSE)
pp = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dzeta(x=y, p=pp, log = TRUE))
+ sum(w * dzeta(x = y, p=pp, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("zetaff"),
@@ -931,18 +944,18 @@ dzeta = function(x, p, log = FALSE)
fred2 = zeta(pp+1, deriv=1)
dl.dpp = -log(y) - fred2 / fred1
dpp.deta = dtheta.deta(pp, .link, earg = .earg)
- w * dl.dpp * dpp.deta
+ c(w) * dl.dpp * dpp.deta
}), list( .link = link, .earg = earg ))),
weight = expression({
ed2l.dpp2 = zeta(pp+1, deriv=2) / fred1 - (fred2/fred1)^2
- wz = w * dpp.deta^2 * ed2l.dpp2
+ wz = c(w) * dpp.deta^2 * ed2l.dpp2
wz
}))
}
-gharmonic = function(n, s=1, lognexponent=0) {
+gharmonic = function(n, s = 1, lognexponent=0) {
if (!is.Numeric(n, integ = TRUE, posit = TRUE))
stop("bad input for argument 'n'")
@@ -1031,7 +1044,7 @@ pzipf = function(q, N, s) {
new("vglmff",
blurb = c("Zipf distribution f(y;s) = y^(-s) / sum((1:N)^(-s)),",
- " s>0, y=1,2,...,N", ifelse(enteredN, paste(" = ",N,sep = ""), ""),
+ " s>0, y = 1,2,...,N", ifelse(enteredN, paste(" = ",N,sep = ""), ""),
"\n\n",
"Link: ",
namesof("s", link, earg = earg),
@@ -1054,11 +1067,11 @@ pzipf = function(q, N, s) {
extra$N = NN
if (!length(etastart)) {
llfun = function(ss, y, N, w) {
- sum(w * dzipf(x=y, N=extra$N, s=ss, log = TRUE))
+ sum(w * dzipf(x = y, N=extra$N, s=ss, log = TRUE))
}
ss.init = if (length( .init.s )) .init.s else
getInitVals(gvals=seq(0.1, 3.0, len=19), llfun=llfun,
- y=y, N=extra$N, w=w)
+ y = y, N=extra$N, w = w)
ss.init = rep(ss.init, length=length(y))
if ( .link == "loglog") ss.init[ss.init <= 1] = 1.2
etastart = theta2eta(ss.init, .link, earg = .earg)
@@ -1079,7 +1092,7 @@ pzipf = function(q, N, s) {
ss = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dzipf(x=y, N=extra$N, s=ss, log = TRUE))
+ sum(w * dzipf(x = y, N=extra$N, s=ss, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("zipf"),
@@ -1090,11 +1103,11 @@ pzipf = function(q, N, s) {
dl.dss = -log(y) + fred2 / fred1
dss.deta = dtheta.deta(ss, .link, earg = .earg)
d2ss.deta2 = d2theta.deta2(ss, .link, earg = .earg)
- w * dl.dss * dss.deta
+ c(w) * dl.dss * dss.deta
}), list( .link = link, .earg = earg ))),
weight = expression({
d2l.dss = gharmonic(extra$N, ss, lognexp=2) / fred1 - (fred2/fred1)^2
- wz = w * (dss.deta^2 * d2l.dss - d2ss.deta2 * dl.dss)
+ wz = c(w) * (dss.deta^2 * d2l.dss - d2ss.deta2 * dl.dss)
wz
}))
}
@@ -1110,15 +1123,15 @@ cauchy.control <- function(save.weight = TRUE, ...)
elocation = list(), escale = list(),
ilocation = NULL, iscale = NULL,
iprobs = seq(0.2, 0.8, by=0.2),
- method.init = 1, nsimEIM = NULL, zero = 2)
+ imethod = 1, nsimEIM = NULL, zero = 2)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (!is.list(elocation)) elocation = list()
if (!is.list(escale)) escale = list()
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
@@ -1135,7 +1148,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
blurb = c("Two parameter Cauchy distribution (location & scale unknown)\n\n",
"Link: ",
namesof("location", llocation, earg = elocation), "\n",
- namesof("scale", lscale, earg = escale), "\n\n",
+ namesof("scale", lscale, earg = escale), "\n\n",
"Mean: NA\n",
"Variance: NA"),
constraints = eval(substitute(expression({
@@ -1150,8 +1163,8 @@ cauchy.control <- function(save.weight = TRUE, ...)
if (!length(etastart)) {
loc.init = if (length( .ilocation)) .ilocation else {
- if ( .method.init == 2) median(rep(y,w)) else
- if ( .method.init == 3) y else {
+ if ( .imethod == 2) median(rep(y,w)) else
+ if ( .imethod == 3) y else {
cauchy2.Loglikfun = function(loc, y, x, w, extraargs) {
iprobs = .iprobs
qy = quantile(rep(y,w), probs=iprobs)
@@ -1159,11 +1172,11 @@ cauchy.control <- function(save.weight = TRUE, ...)
btry = (qy - loc) / ztry
scal = median(btry, na.rm = TRUE)
if (scal <= 0) scal = 0.1
- sum(w * dcauchy(x=y, loc=loc, scale=scal, log = TRUE))
+ sum(w * dcauchy(x = y, loc=loc, scale=scal, log = TRUE))
}
loc.grid = c(quantile(y, probs=seq(0.1, 0.9, by=0.05)))
try.this = getMaxMin(loc.grid, objfun=cauchy2.Loglikfun,
- y=y, x=x, w=w)
+ y = y, x = x, w = w)
try.this = rep(c(try.this), len = n)
try.this
}
@@ -1188,7 +1201,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
}
}), list( .ilocation = ilocation, .elocation = elocation, .llocation = llocation,
.iscale = iscale, .escale = escale, .lscale = lscale,
- .iprobs=iprobs, .method.init = method.init ))),
+ .iprobs=iprobs, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta[,1], .llocation, earg = .elocation)
}, list( .llocation = llocation,
@@ -1197,9 +1210,9 @@ cauchy.control <- function(save.weight = TRUE, ...)
misc$expected = TRUE
misc$link = c("location" = .llocation, "scale" =.lscale)
misc$earg = list("location" = .elocation, "scale" = .escale)
- misc$method.init = .method.init
+ misc$imethod = .imethod
}), list( .escale = escale, .elocation = elocation,
- .method.init = method.init,
+ .imethod = imethod,
.llocation = llocation, .lscale = lscale ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
@@ -1207,7 +1220,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
myscale = eta2theta(eta[,2], .lscale, earg = .escale)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dcauchy(x=y, loc=location, sc=myscale, log = TRUE))
+ sum(w * dcauchy(x = y, loc=location, sc=myscale, log = TRUE))
}
}, list( .escale = escale, .lscale = lscale,
.elocation = elocation, .llocation = llocation ))),
@@ -1220,13 +1233,13 @@ cauchy.control <- function(save.weight = TRUE, ...)
Z = (y-location) / myscale
dl.dlocation = 2 * Z / ((1 + Z^2) * myscale)
dl.dscale = (Z^2 - 1) / ((1 + Z^2) * myscale)
- w * cbind(dl.dlocation * dlocation.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta)
}), list( .escale = escale, .lscale = lscale,
.elocation = elocation, .llocation = llocation ))),
weight = eval(substitute(expression({
run.varcov = 0
- ind1 = iam(NA, NA, M=M, both = TRUE, diag = TRUE)
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
dthetas.detas = cbind(dlocation.deta, dscale.deta)
if (length( .nsimEIM )) {
for(ii in 1:( .nsimEIM )) {
@@ -1244,11 +1257,11 @@ cauchy.control <- function(save.weight = TRUE, ...)
n, ncol(run.varcov), byrow = TRUE) else run.varcov
wz = wz * dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
- wz = w * matrix(wz, n, dimm(M))
+ wz = c(w) * matrix(wz, n, dimm(M))
} else {
wz = cbind(matrix(0.5 / myscale^2,n,2), matrix(0,n,1)) *
dthetas.detas[,ind1$row] * dthetas.detas[,ind1$col]
- wz = w * wz[,1:M] # diagonal wz
+ wz = c(w) * wz[,1:M] # diagonal wz
}
wz
@@ -1262,16 +1275,16 @@ cauchy.control <- function(save.weight = TRUE, ...)
- cauchy1 = function(scale.arg=1, llocation = "identity",
+ cauchy1 = function(scale.arg = 1, llocation = "identity",
elocation = list(),
- ilocation = NULL, method.init = 1)
+ ilocation = NULL, imethod = 1)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (!is.Numeric(scale.arg, posit = TRUE)) stop("bad input for 'scale.arg'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (!is.list(elocation)) elocation = list()
new("vglmff",
@@ -1289,15 +1302,15 @@ cauchy.control <- function(save.weight = TRUE, ...)
if (!length(etastart)) {
loc.init = if (length( .ilocation)) .ilocation else {
- if ( .method.init == 2) median(rep(y,w)) else
- if ( .method.init == 3) y else {
+ if ( .imethod == 2) median(rep(y,w)) else
+ if ( .imethod == 3) y else {
cauchy1.Loglikfun = function(loc, y, x, w, extraargs) {
scal = extraargs
- sum(w * dcauchy(x=y, loc=loc, scale=scal, log = TRUE))
+ sum(w * dcauchy(x = y, loc=loc, scale=scal, log = TRUE))
}
loc.grid = quantile(y, probs=seq(0.1, 0.9, by=0.05))
try.this = getMaxMin(loc.grid, objfun=cauchy1.Loglikfun,
- y=y, x=x, w=w, extraargs= .scale.arg)
+ y = y, x = x, w = w, extraargs= .scale.arg)
try.this = rep(try.this, len = n)
try.this
}
@@ -1308,7 +1321,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
}
}), list( .scale.arg=scale.arg, .ilocation = ilocation,
.elocation = elocation, .llocation = llocation,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta, .llocation, earg = .elocation)
}, list( .llocation = llocation,
@@ -1325,7 +1338,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
location = eta2theta(eta, .llocation, earg = .elocation)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dcauchy(x=y, loc=location, scale= .scale.arg, log = TRUE))
+ sum(w * dcauchy(x = y, loc=location, scale= .scale.arg, log = TRUE))
}
}, list( .scale.arg=scale.arg, .elocation = elocation,
.llocation = llocation ))),
@@ -1335,11 +1348,11 @@ cauchy.control <- function(save.weight = TRUE, ...)
temp = (y-location)/.scale.arg
dl.dlocation = 2 * temp / ((1 + temp^2) * .scale.arg)
dlocation.deta = dtheta.deta(location, .llocation, earg = .elocation)
- w * dl.dlocation * dlocation.deta
+ c(w) * dl.dlocation * dlocation.deta
}), list( .scale.arg=scale.arg, .elocation = elocation,
.llocation = llocation ))),
weight = eval(substitute(expression({
- wz = w * dlocation.deta^2 / ( .scale.arg^2 * 2)
+ wz = c(w) * dlocation.deta^2 / ( .scale.arg^2 * 2)
wz
}), list( .scale.arg=scale.arg, .elocation = elocation,
.llocation = llocation ))))
@@ -1352,15 +1365,15 @@ cauchy.control <- function(save.weight = TRUE, ...)
logistic1 = function(llocation = "identity",
elocation = list(),
- scale.arg=1, method.init = 1)
+ scale.arg = 1, imethod = 1)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (!is.Numeric(scale.arg, allow = 1, posit = TRUE))
stop("'scale.arg' must be a single positive number")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (!is.list(elocation)) elocation = list()
new("vglmff",
@@ -1374,12 +1387,12 @@ cauchy.control <- function(save.weight = TRUE, ...)
predictors.names = namesof("location", .llocation,
earg = .elocation, tag = FALSE)
if (!length(etastart)) {
- location.init = if ( .method.init == 1) y else median(rep(y, w))
+ location.init = if ( .imethod == 1) y else median(rep(y, w))
location.init = rep(location.init, len = n)
if ( .llocation == "loge") location.init = abs(location.init) + 0.001
etastart = theta2eta(location.init, .llocation, earg = .elocation)
}
- }), list( .method.init = method.init, .llocation = llocation,
+ }), list( .imethod = imethod, .llocation = llocation,
.elocation = elocation ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta, .llocation, earg = .elocation)
@@ -1398,7 +1411,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
zedd = (y-location)/.scale.arg
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dlogis(x=y, location = location,
+ sum(w * dlogis(x = y, location = location,
scale = .scale.arg, log = TRUE))
}
}, list( .llocation = llocation,
@@ -1409,11 +1422,11 @@ cauchy.control <- function(save.weight = TRUE, ...)
ezedd = exp(-(y-location)/.scale.arg)
dl.dlocation = (1 - ezedd) / ((1 + ezedd) * .scale.arg)
dlocation.deta = dtheta.deta(location, .llocation, earg = .elocation)
- w * dl.dlocation * dlocation.deta
+ c(w) * dl.dlocation * dlocation.deta
}), list( .llocation = llocation,
.elocation = elocation, .scale.arg=scale.arg ))),
weight = eval(substitute(expression({
- wz = w * dlocation.deta^2 / ( .scale.arg^2 * 3)
+ wz = c(w) * dlocation.deta^2 / ( .scale.arg^2 * 3)
wz
}), list( .scale.arg=scale.arg ))))
}
@@ -1421,14 +1434,14 @@ cauchy.control <- function(save.weight = TRUE, ...)
- erlang = function(shape.arg, link = "loge", earg = list(), method.init = 1)
+ erlang = function(shape.arg, link = "loge", earg = list(), imethod = 1)
{
if (!is.Numeric(shape.arg, allow = 1, integer = TRUE, positi = TRUE))
stop("'shape' must be a positive integer")
- if (!is.Numeric(method.init, allow = 1, integer = TRUE, positi = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integer = TRUE, positi = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
@@ -1449,16 +1462,16 @@ cauchy.control <- function(save.weight = TRUE, ...)
namesof("scale", .link, earg = .earg, tag = FALSE)
if (!length(etastart)) {
- if ( .method.init == 1)
+ if ( .imethod == 1)
sc.init = y / .shape.arg
- if ( .method.init==2) {
+ if ( .imethod==2) {
sc.init = median(y) / .shape.arg
sc.init = rep(sc.init, length = n)
}
etastart = theta2eta(sc.init, .link, earg = .earg)
}
}), list( .link = link, .earg = earg,
- .shape.arg=shape.arg, .method.init = method.init ))),
+ .shape.arg=shape.arg, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
sc = eta2theta(eta, .link, earg = .earg)
.shape.arg * sc
@@ -1483,11 +1496,11 @@ cauchy.control <- function(save.weight = TRUE, ...)
sc = eta2theta(eta, .link, earg = .earg)
dl.dsc = (y / sc - .shape.arg) / sc
dsc.deta = dtheta.deta(sc, .link, earg = .earg)
- w * dl.dsc * dsc.deta
+ c(w) * dl.dsc * dsc.deta
}), list( .link = link, .earg = earg, .shape.arg=shape.arg ))),
weight = eval(substitute(expression({
ed2l.dsc2 = .shape.arg / sc^2
- wz = w * dsc.deta^2 * ed2l.dsc2
+ wz = c(w) * dsc.deta^2 * ed2l.dsc2
wz
}), list( .earg = earg, .shape.arg=shape.arg ))))
}
@@ -1496,7 +1509,7 @@ cauchy.control <- function(save.weight = TRUE, ...)
-dbort = function(x, Qsize=1, a=0.5, log = FALSE) {
+dbort = function(x, Qsize = 1, a=0.5, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -1521,7 +1534,7 @@ dbort = function(x, Qsize=1, a=0.5, log = FALSE) {
}
-rbort = function(n, Qsize=1, a=0.5) {
+rbort = function(n, Qsize = 1, a=0.5) {
if (!is.Numeric(n, integ = TRUE, posit = TRUE, allow = 1))
stop("bad input for argument 'n'")
if (!is.Numeric(Qsize, allow = 1, integ = TRUE, posit = TRUE))
@@ -1543,16 +1556,16 @@ rbort = function(n, Qsize=1, a=0.5) {
}
- borel.tanner = function(Qsize=1, link = "logit", earg = list(), method.init = 1)
+ borel.tanner = function(Qsize = 1, link = "logit", earg = list(), imethod = 1)
{
if (!is.Numeric(Qsize, allow = 1, integ = TRUE, posit = TRUE))
stop("bad input for argument 'Qsize'")
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4)
- stop("'method.init' must be 1 or 2, 3 or 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4)
+ stop("argument 'imethod' must be 1 or 2, 3 or 4")
new("vglmff",
blurb = c("Borel-Tanner distribution\n\n",
@@ -1572,7 +1585,7 @@ rbort = function(n, Qsize=1, a=0.5) {
predictors.names = namesof("a", .link, earg = .earg, tag = FALSE)
if (!length(etastart)) {
- a.init = switch(as.character( .method.init ),
+ a.init = switch(as.character( .imethod ),
"1" = 1 - .Qsize / (y+1/8),
"2" = rep(1 - .Qsize / weighted.mean(y,w), len = n),
"3" = rep(1 - .Qsize / median(y), len = n),
@@ -1580,7 +1593,7 @@ rbort = function(n, Qsize=1, a=0.5) {
etastart = theta2eta(a.init, .link, earg = .earg)
}
}), list( .link = link, .earg = earg, .Qsize=Qsize,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
a = eta2theta(eta, .link, earg = .earg)
.Qsize / (1 - a)
@@ -1596,7 +1609,7 @@ rbort = function(n, Qsize=1, a=0.5) {
aa = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dbort(x=y, Qsize= .Qsize, a=aa, log = TRUE))
+ sum(w * dbort(x = y, Qsize= .Qsize, a=aa, log = TRUE))
}
}, list( .link = link, .earg = earg, .Qsize=Qsize ))),
vfamily = c("borel.tanner"),
@@ -1604,11 +1617,11 @@ rbort = function(n, Qsize=1, a=0.5) {
a = eta2theta(eta, .link, earg = .earg)
dl.da = (y- .Qsize)/a - y
da.deta = dtheta.deta(a, .link, earg = .earg)
- w * dl.da * da.deta
+ c(w) * dl.da * da.deta
}), list( .link = link, .earg = earg, .Qsize=Qsize ))),
weight = eval(substitute(expression({
ed2l.da2 = .Qsize / (a*(1-a))
- wz = w * da.deta^2 * ed2l.da2
+ wz = c(w) * da.deta^2 * ed2l.da2
wz
}), list( .Qsize=Qsize ))))
}
@@ -1639,14 +1652,14 @@ dfelix = function(x, a=0.25, log = FALSE) {
felix = function(link = "elogit",
earg=if (link == "elogit") list(min=0, max=0.5) else list(),
- method.init = 1)
+ imethod = 1)
{
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 4)
- stop("'method.init' must be 1 or 2, 3 or 4")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 4)
+ stop("argument 'imethod' must be 1 or 2, 3 or 4")
new("vglmff",
blurb = c("Felix distribution\n\n",
@@ -1663,7 +1676,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
if (!length(etastart)) {
wymean = weighted.mean(y,w)
- a.init = switch(as.character( .method.init ),
+ a.init = switch(as.character( .imethod ),
"1" = (y-1+1/8) / (2*(y+1/8)+1/8),
"2" = rep((wymean-1+1/8) / (2*(wymean+1/8)+1/8), len = n),
"3" = rep((median(y)-1+1/8) / (2*(median(y)+1/8)+1/8), len = n),
@@ -1671,7 +1684,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
etastart = theta2eta(a.init, .link, earg = .earg)
}
}), list( .link = link, .earg = earg,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
a = eta2theta(eta, .link, earg = .earg)
1 / (1 - 2*a)
@@ -1686,7 +1699,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
aa = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dfelix(x=y, a=aa, log = TRUE))
+ sum(w * dfelix(x = y, a=aa, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("felix"),
@@ -1694,11 +1707,11 @@ dfelix = function(x, a=0.25, log = FALSE) {
a = eta2theta(eta, .link, earg = .earg)
dl.da = (y- 1)/(2*a) - y
da.deta = dtheta.deta(a, .link, earg = .earg)
- w * dl.da * da.deta
+ c(w) * dl.da * da.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.da2 = 1 / (a*(1-2*a))
- wz = w * da.deta^2 * ed2l.da2
+ wz = c(w) * da.deta^2 * ed2l.da2
wz
}), list( .link = link ))))
}
@@ -1707,11 +1720,11 @@ dfelix = function(x, a=0.25, log = FALSE) {
- betaff = function(A=0, B=1,
+ betaff = function(A=0, B = 1,
lmu = if (A == 0 & B == 1) "logit" else "elogit", lphi = "loge",
emu = if (lmu == "elogit") list(min=A, max=B) else list(),
- ephi=list(),
- imu = NULL, iphi = NULL, method.init = 1, zero = NULL)
+ ephi = list(),
+ imu = NULL, iphi = NULL, imethod = 1, zero = NULL)
{
if (!is.Numeric(A, allow = 1) || !is.Numeric(B, allow = 1) || A >= B)
stop("A must be < B, and both must be of length one")
@@ -1728,9 +1741,9 @@ dfelix = function(x, a=0.25, log = FALSE) {
stop("bad input for argument 'imu'")
if (length(iphi) && !is.Numeric(iphi, posit = TRUE))
stop("bad input for argument 'iphi'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (!is.list(emu)) emu = list()
if (!is.list(ephi)) ephi = list()
@@ -1746,7 +1759,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
", mu = ", A, " + ", (B-A), " * mu1",
", phi > 0\n\n", sep = ""),
"Links: ",
- namesof("mu", lmu, earg = emu), ", ",
+ namesof("mu", lmu, earg = emu), ", ",
namesof("phi", lphi, earg = ephi)),
constraints = eval(substitute(expression({
constraints = cm.zero.vgam(constraints, x, .zero, M)
@@ -1760,7 +1773,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
namesof("phi", .lphi, .ephi, short = TRUE))
if (!length(etastart)) {
mu.init = if (is.Numeric( .imu)) .imu else
- {if ( .method.init == 1) weighted.mean(y,w) else
+ {if ( .imethod == 1) weighted.mean(y,w) else
median(rep(y,w))}
mu1.init = (mu.init - .A) / ( .B - .A) # In (0,1)
phi.init = if (is.Numeric( .iphi)) .iphi else
@@ -1770,7 +1783,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
etastart[,2] = theta2eta(phi.init, .lphi, earg = .ephi )
}
}), list( .lmu = lmu, .lphi = lphi, .imu=imu, .iphi=iphi,
- .A = A, .B = B, .emu = emu, .ephi = ephi, .method.init = method.init ))),
+ .A = A, .B = B, .emu = emu, .ephi = ephi, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mu = eta2theta(eta[,1], .lmu, .emu )
mu
@@ -1818,8 +1831,11 @@ dfelix = function(x, a=0.25, log = FALSE) {
(1-m1u)*digamma(temp2) +
m1u*log(y-.A) + (1-m1u)*log( .B-y) - log( .B -.A)
}
- w * cbind(dl.dmu1 * dmu1.dmu * dmu.deta, dl.dphi * dphi.deta)
- }), list( .lmu = lmu, .lphi = lphi, .A = A, .B = B, .emu = emu, .ephi = ephi,
+ c(w) * cbind(dl.dmu1 * dmu1.dmu * dmu.deta,
+ dl.dphi * dphi.deta)
+ }), list( .lmu = lmu, .lphi = lphi,
+ .emu = emu, .ephi = ephi,
+ .A = A, .B = B,
.stdbeta = stdbeta ))),
weight = eval(substitute(expression({
d2l.dmu12 = phi^2 * (trigamma(temp1) + trigamma(temp2))
@@ -1830,7 +1846,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
wz[,iam(1,1,M)] = d2l.dmu12 * dmu1.dmu^2 * dmu.deta^2
wz[,iam(2,2,M)] = d2l.dphi2 * dphi.deta^2
wz[,iam(1,2,M)] = d2l.dmu1phi * dmu1.dmu * dmu.deta * dphi.deta
- w * wz
+ c(w) * wz
}), list( .A = A, .B = B ))))
}
@@ -1865,11 +1881,11 @@ dfelix = function(x, a=0.25, log = FALSE) {
"(shape parameters parameterization)\n",
if (stdbeta)
paste("y^(shape1-1) * (1-y)^(shape2-1) / B(shape1,shape2),",
- "0<=y<=1, shape1>0, shape2>0\n\n") else
+ "0 <= y <= 1, shape1>0, shape2>0\n\n") else
paste("(y-",A,")^(shape1-1) * (",B,
"-y)^(shape2-1) / [B(shape1,shape2) * (",
B, "-", A, ")^(shape1+shape2-1)], ",
- A,"<=y< = ",B," shape1>0, shape2>0\n\n", sep = ""),
+ A," <= y <= ",B," shape1>0, shape2>0\n\n", sep = ""),
"Links: ",
namesof("shape1", lshape1, earg = eshape1), ", ",
namesof("shape2", lshape2, earg = eshape2)),
@@ -1935,7 +1951,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
dtheta.deta(shapes[,2], .lshape2, earg = .eshape2))
dl.dshapes = cbind(log(y-.A), log( .B-y)) - digamma(shapes) +
digamma(shapes[,1] + shapes[,2]) - log( .B - .A)
- w * dl.dshapes * dshapes.deta
+ c(w) * dl.dshapes * dshapes.deta
}), list( .lshape1 = lshape1, .lshape2 = lshape2, .A = A, .B = B,
.eshape1 = eshape1, .eshape2 = eshape2 ))),
weight = expression({
@@ -1949,7 +1965,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
wz[,iam(2,2,M)] = d2l.dshape22 * dshapes.deta[,2]^2
wz[,iam(1,2,M)] = d2l.dshape1shape2 * dshapes.deta[,1] * dshapes.deta[,2]
- -w * wz
+ -c(w) * wz
}))
}
@@ -2028,7 +2044,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
digamma(shapes[,1] + shapes[,2]) - log( .B - .A)
dl.dA = -(shapes[,1]-1) / (y- .A) + temp1
dl.dB = (shapes[,2]-1) / ( .B - y) - temp1
- w * cbind(dl.dshapes * dshapes.deta, dl.dA, dl.dB)
+ c(w) * cbind(dl.dshapes * dshapes.deta, dl.dA, dl.dB)
}), list( .link = link, .earg = earg ))),
weight = expression({
@@ -2060,7 +2076,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
wz[,iam(4,2,M)] = ed2l.dBshape2 * dshapes.deta[,2]
- -w * wz
+ -c(w) * wz
}))
}
@@ -2090,11 +2106,11 @@ dfelix = function(x, a=0.25, log = FALSE) {
rate = 1 / mu
dl.drate = mu - y
drate.deta = dtheta.deta(rate, "loge")
- w * dl.drate * drate.deta
+ c(w) * dl.drate * drate.deta
}),
weight = expression({
ed2l.drate2 = -1 / rate^2
- wz = -w * drate.deta^2 * ed2l.drate2
+ wz = -c(w) * drate.deta^2 * ed2l.drate2
wz
}))
}
@@ -2167,7 +2183,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
rate <- 1 / (mu - extra$loc)
dl.drate <- mu - y
drate.deta <- dtheta.deta(rate, .link, earg = .earg)
- w * dl.drate * drate.deta
+ c(w) * dl.drate * drate.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
d2l.drate2 <- -((mu-extra$loc)^2)
@@ -2176,7 +2192,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
d2rate.deta2 <- d2theta.deta2(rate, .link, earg = .earg)
wz <- wz - dl.drate * d2rate.deta2
}
- w * wz
+ c(w) * wz
}), list( .link = link, .expected = expected, .earg = earg ))))
}
@@ -2223,19 +2239,19 @@ dfelix = function(x, a=0.25, log = FALSE) {
loglikelihood= function(mu, y, w, residuals = FALSE, eta, extra = NULL)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgamma(x=y, shape=mu, scale=1, log = TRUE))
+ sum(w * dgamma(x = y, shape=mu, scale = 1, log = TRUE))
},
vfamily = c("gamma1"),
deriv = eval(substitute(expression({
shape = mu
dl.dshape = log(y) - digamma(shape)
dshape.deta = dtheta.deta(shape, .link, earg = .earg)
- w * dl.dshape * dshape.deta
+ c(w) * dl.dshape * dshape.deta
}), list( .link = link, .earg = earg ))),
weight = expression({
d2l.dshape = -trigamma(shape)
wz = -(dshape.deta^2) * d2l.dshape
- w * wz
+ c(w) * wz
}))
}
@@ -2262,7 +2278,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
new("vglmff",
blurb = c("2-parameter Gamma distribution\n",
"Links: ",
- namesof("rate", lrate, earg = erate), ", ",
+ namesof("rate", lrate, earg = erate), ", ",
namesof("shape", lshape, earg = eshape), "\n",
"Mean: mu = shape/rate\n",
"Variance: (mu^2)/shape = shape/rate^2"),
@@ -2309,7 +2325,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
shape = eta2theta(eta[,2], .lshape, earg = .eshape)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgamma(x=y, shape=shape, rate=rate, log = TRUE))
+ sum(w * dgamma(x = y, shape = shape, rate=rate, log = TRUE))
}
}, list( .lrate = lrate, .lshape = lshape,
.erate = erate, .eshape = eshape ))),
@@ -2321,7 +2337,8 @@ dfelix = function(x, a=0.25, log = FALSE) {
dl.dshape = log(y*rate) - digamma(shape)
dratedeta = dtheta.deta(rate, .lrate, earg = .erate)
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape)
- w * cbind(dl.drate * dratedeta, dl.dshape * dshape.deta)
+ c(w) * cbind(dl.drate * dratedeta,
+ dl.dshape * dshape.deta)
}), list( .lrate = lrate, .lshape = lshape,
.erate = erate, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -2338,7 +2355,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
wz[,iam(1,1,M)] = wz[,iam(1,1,M)] - dl.drate * d2ratedeta2
wz[,iam(2,2,M)] = wz[,iam(2,2,M)] - dl.dshape * d2shapedeta2
}
- w * wz
+ c(w) * wz
}), list( .lrate = lrate, .lshape = lshape,
.erate = erate, .eshape = eshape, .expected = expected ))))
}
@@ -2347,7 +2364,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
gamma2 = function(lmu = "loge", lshape = "loge",
emu = list(), eshape = list(),
- method.init = 1,
+ imethod = 1,
deviance.arg = FALSE, ishape = NULL, zero = -2)
{
@@ -2359,9 +2376,9 @@ dfelix = function(x, a=0.25, log = FALSE) {
stop("bad input for argument 'zero'")
if (length( ishape) && !is.Numeric(ishape, posit = TRUE))
stop("bad input for argument 'ishape'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (!is.list(emu)) emu = list()
if (!is.list(eshape)) eshape = list()
@@ -2370,7 +2387,7 @@ dfelix = function(x, a=0.25, log = FALSE) {
blurb = c("2-parameter Gamma distribution",
" (McCullagh and Nelder 1989 parameterization)\n",
"Links: ",
- namesof("mu", lmu, earg = emu), ", ",
+ namesof("mu", lmu, earg = emu), ", ",
namesof("shape", lshape, earg = eshape), "\n",
"Mean: mu\n",
"Variance: (mu^2)/shape"),
@@ -2382,6 +2399,8 @@ dfelix = function(x, a=0.25, log = FALSE) {
constraints = cm.zero.vgam(constraints, x, z_Index, M)
}), list( .zero = zero ))),
initialize = eval(substitute(expression({
+ Musual <- 2
+
assign("CQO.FastAlgorithm", ( .lmu == "loge" && .lshape == "loge"),
envir = VGAM:::VGAMenv)
if (any(function.name == c("cqo","cao")) &&
@@ -2389,14 +2408,16 @@ dfelix = function(x, a=0.25, log = FALSE) {
stop("argument zero=-2 is required")
y = as.matrix(y)
- M = 2 * ncol(y)
+ M = Musual * ncol(y)
NOS = ncoly = ncol(y) # Number of species
- temp1.names = if (NOS == 1) "mu" else paste("mu", 1:NOS, sep = "")
- temp2.names = if (NOS == 1) "shape" else paste("shape", 1:NOS, sep = "")
+ temp1.names =
+ if (NOS == 1) "mu" else paste("mu", 1:NOS, sep = "")
+ temp2.names =
+ if (NOS == 1) "shape" else paste("shape", 1:NOS, sep = "")
predictors.names =
c(namesof(temp1.names, .lmu, earg = .emu, tag = FALSE),
namesof(temp2.names, .lshape, earg = .eshape, tag = FALSE))
- predictors.names = predictors.names[interleave.VGAM(M, M = 2)]
+ predictors.names = predictors.names[interleave.VGAM(M, M = Musual)]
# Error check
@@ -2404,10 +2425,10 @@ dfelix = function(x, a=0.25, log = FALSE) {
stop("all responses must be positive") # see @loglikelihood
if (!length(etastart)) {
init.shape = matrix(1.0, n, NOS)
- mymu = y # + 0.167 * (y == 0) # method.init == 1 (the default)
- if ( .method.init == 2) {
+ mymu = y # + 0.167 * (y == 0) # imethod == 1 (the default)
+ if ( .imethod == 2) {
for(ii in 1:ncol(y)) {
- mymu[,ii] = weighted.mean(y[,ii], w=w)
+ mymu[,ii] = weighted.mean(y[,ii], w = w)
}
}
for(spp in 1:NOS) {
@@ -2420,14 +2441,15 @@ dfelix = function(x, a=0.25, log = FALSE) {
}
etastart = cbind(theta2eta(mymu, .lmu, earg = .emu ),
theta2eta(init.shape, .lshape, earg = .eshape ))
- etastart = etastart[,interleave.VGAM(M, M = 2), drop = FALSE]
+ etastart = etastart[,interleave.VGAM(M, M = Musual), drop = FALSE]
}
}), list( .lmu = lmu, .lshape = lshape, .ishape = ishape, .zero = zero,
.emu = emu, .eshape = eshape,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
- NOS = ncol(eta) / 2
- eta2theta(eta[,2*(1:NOS)-1, drop = FALSE], .lmu, earg = .emu )
+ Musual <- 2
+ NOS = ncol(eta) / Musual
+ eta2theta(eta[, 2*(1:NOS)-1, drop = FALSE], .lmu, earg = .emu )
}, list( .lmu = lmu, .emu = emu ))),
last = eval(substitute(expression({
if (exists("CQO.FastAlgorithm", envir = VGAM:::VGAMenv))
@@ -2456,38 +2478,45 @@ dfelix = function(x, a=0.25, log = FALSE) {
}, list( .lmu = lmu, .emu = emu ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- NOS = ncol(eta) / 2
+ Musual <- 2
+ NOS = ncol(eta) / Musual
mymu = mu # eta2theta(eta[,2*(1:NOS)-1], .lmu, earg = .emu )
shapemat = eta2theta(eta[,2*(1:NOS), drop = FALSE], .lshape, earg = .eshape )
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgamma(x=y, shape=c(shapemat), scale=c(mymu/shapemat),
+ sum(w * dgamma(x = y, shape = c(shapemat), scale = c(mymu/shapemat),
log = TRUE))
}
}, list( .lmu = lmu, .lshape = lshape,
.emu = emu, .eshape = eshape ))),
vfamily = c("gamma2"),
deriv = eval(substitute(expression({
- NOS = ncol(eta) / 2
- mymu = eta2theta(eta[,2*(1:NOS)-1], .lmu, earg = .emu )
- shape = eta2theta(eta[,2*(1:NOS)], .lshape, earg = .eshape )
+ Musual <- 2
+ NOS = ncol(eta) / Musual
+
+ mymu = eta2theta(eta[,2*(1:NOS)-1], .lmu, earg = .emu )
+ shape = eta2theta(eta[,2*(1:NOS)], .lshape, earg = .eshape )
+
dl.dmu = shape * (y / mymu - 1) / mymu
dl.dshape = log(y) + log(shape) - log(mymu) + 1 - digamma(shape) -
y / mymu
- dmu.deta = dtheta.deta(mymu, .lmu, earg = .emu )
+
+ dmu.deta = dtheta.deta(mymu, .lmu, earg = .emu )
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape )
- myderiv = w * cbind(dl.dmu * dmu.deta, dl.dshape * dshape.deta)
- myderiv[,interleave.VGAM(M, M = 2)]
+
+ myderiv = c(w) * cbind(dl.dmu * dmu.deta,
+ dl.dshape * dshape.deta)
+ myderiv[, interleave.VGAM(M, M = Musual)]
}), list( .lmu = lmu, .lshape = lshape,
.emu = emu, .eshape = eshape ))),
weight = eval(substitute(expression({
ed2l.dmu2 = shape / (mymu^2)
ed2l.dshape2 = trigamma(shape) - 1 / shape
- wz = matrix(as.numeric(NA), n, M) #2=M; diagonal!
- NOS = M / 2
+ wz = matrix(as.numeric(NA), n, M) # 2 = M; diagonal!
+
wz[,2*(1:NOS)-1] = ed2l.dmu2 * dmu.deta^2
wz[,2*(1:NOS)] = ed2l.dshape2 * dshape.deta^2
- w * wz
+ c(w) * wz
}), list( .lmu = lmu ))))
if (deviance.arg) ans at deviance = eval(substitute(
@@ -2513,16 +2542,16 @@ dfelix = function(x, a=0.25, log = FALSE) {
geometric =function(link = "logit", earg = list(), expected = TRUE,
- method.init= 1)
+ imethod= 1)
{
if (!is.logical(expected) || length(expected) != 1)
stop("bad input for argument 'expected'")
if (mode(link) != "character" && mode(link) != "name")
link = as.character(substitute(link))
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
blurb = c("Geometric distribution (P[Y=y] = prob*(1-prob)^y, y=0,1,2,...)\n",
@@ -2537,14 +2566,14 @@ dfelix = function(x, a=0.25, log = FALSE) {
if (any(y!=round(y ))) stop("response should be integer-valued")
predictors.names = namesof("prob", .link, earg = .earg, tag = FALSE)
if (!length(etastart)) {
- prob.init = if ( .method.init == 3)
+ prob.init = if ( .imethod == 3)
1 / (1 + y + 1/16) else
- if ( .method.init == 1)
+ if ( .imethod == 1)
1 / (1 + median(rep(y,w)) + 1/16) else
1 / (1 + weighted.mean(y,w) + 1/16)
etastart = theta2eta(prob.init, .link, earg = .earg)
}
- }), list( .link = link, .earg = earg, .method.init = method.init ))),
+ }), list( .link = link, .earg = earg, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
prob = eta2theta(eta, .link, earg = .earg)
(1-prob)/prob
@@ -2553,14 +2582,14 @@ dfelix = function(x, a=0.25, log = FALSE) {
misc$link = c(prob = .link)
misc$earg = list(prob = .earg )
misc$expected = .expected
- misc$method.init = .method.init
- }), list( .link = link, .earg = earg, .expected = expected, .method.init = method.init ))),
+ misc$imethod = .imethod
+ }), list( .link = link, .earg = earg, .expected = expected, .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
prob = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgeom(x=y, prob=prob, log = TRUE))
+ sum(w * dgeom(x = y, prob=prob, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("geometric"),
@@ -2568,14 +2597,14 @@ dfelix = function(x, a=0.25, log = FALSE) {
prob = eta2theta(eta, .link, earg = .earg)
dl.dprob = -y/(1-prob) + 1/prob
dprobdeta = dtheta.deta(prob, .link, earg = .earg)
- w * cbind(dl.dprob * dprobdeta)
+ c(w) * cbind(dl.dprob * dprobdeta)
}), list( .link = link, .earg = earg, .expected = expected ))),
weight = eval(substitute(expression({
ed2l.dprob2 = if ( .expected ) 1 / (prob^2 * (1-prob)) else
y / (1-prob)^2 + 1 / prob^2
wz = ed2l.dprob2 * dprobdeta^2
if ( !( .expected )) wz = wz - dl.dprob * d2theta.deta2(prob, .link, earg = .earg)
- w * wz
+ c(w) * wz
}), list( .link = link, .earg = earg, .expected = expected ))))
}
@@ -2631,7 +2660,7 @@ rbetageom = function(n, shape1, shape2) {
if (!is.Numeric(n, integ = TRUE,allow = 1)) stop("bad input for argument 'n'")
if (!is.Numeric(shape1, pos = TRUE)) stop("bad input for argument 'shape1'")
if (!is.Numeric(shape2, pos = TRUE)) stop("bad input for argument 'shape2'")
- rgeom(n=n, prob = rbeta(n=n, shape1=shape1, shape2=shape2))
+ rgeom(n = n, prob = rbeta(n = n, shape1=shape1, shape2=shape2))
}
@@ -2640,17 +2669,21 @@ rbetageom = function(n, shape1, shape2) {
interleave.VGAM = function(L, M) c(matrix(1:L, nrow=M, byrow = TRUE))
+
+
negbinomial.control <- function(save.weight = TRUE, ...)
{
list(save.weight = save.weight)
}
- negbinomial = function(lmu = "loge", lk = "loge",
- emu =list(), ek=list(),
- imu = NULL, ik = NULL,
+
+
+ negbinomial = function(lmu = "loge", lsize = "loge",
+ emu = list(), esize = list(),
+ imu = NULL, isize = NULL,
quantile.probs = 0.75,
nsimEIM = 100, cutoff = 0.995, Maxiter = 5000,
- deviance.arg = FALSE, method.init = 1,
+ deviance.arg = FALSE, imethod = 1,
parallel = FALSE,
shrinkage.init = 0.95, zero = -2)
{
@@ -2658,605 +2691,615 @@ negbinomial.control <- function(save.weight = TRUE, ...)
- if (length(imu) && !is.Numeric(imu, posit = TRUE))
- stop("bad input for argument 'imu'")
- if (length(ik) && !is.Numeric(ik, posit = TRUE))
- stop("bad input for argument 'ik'")
-
- if (!is.Numeric(cutoff, allow = 1) || cutoff<0.8 || cutoff>=1)
- stop("range error in the argument 'cutoff'")
- if (!is.Numeric(Maxiter, integ = TRUE, allow = 1) || Maxiter < 100)
- stop("bad input for argument 'Maxiter'")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1 or 2 or 3")
- if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
- shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
- if (!is.null(nsimEIM)) {
- if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
- stop("bad input for argument 'nsimEIM'")
- if (nsimEIM <= 10)
- warning("argument 'nsimEIM' should be an integer ",
- "greater than 10, say")
- }
- if (mode(lmu) != "character" && mode(lmu) != "name")
- lmu = as.character(substitute(lmu))
- if (mode(lk) != "character" && mode(lk) != "name")
- lk = as.character(substitute(lk))
- if (!is.list(emu)) emu = list()
- if (!is.list(ek)) ek = list()
+ lmuuu = lmu
+ emuuu = emu
+ imuuu = imu
+
+
+ if (length(imuuu) && !is.Numeric(imuuu, posit = TRUE))
+ stop("bad input for argument 'imu'")
+ if (length(isize) && !is.Numeric(isize, posit = TRUE))
+ stop("bad input for argument 'isize'")
+
+ if (!is.Numeric(cutoff, allow = 1) || cutoff < 0.8 || cutoff >= 1)
+ stop("range error in the argument 'cutoff'")
+ if (!is.Numeric(Maxiter, integ = TRUE, allow = 1) || Maxiter < 100)
+ stop("bad input for argument 'Maxiter'")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
+ if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
+ shrinkage.init > 1)
+ stop("bad input for argument 'shrinkage.init'")
+
+ if (!is.null(nsimEIM)) {
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
+ stop("bad input for argument 'nsimEIM'")
+ if (nsimEIM <= 10)
+ warning("argument 'nsimEIM' should be an integer ",
+ "greater than 10, say")
+ }
+
+ if (mode(lmuuu) != "character" && mode(lmuuu) != "name")
+ lmuuu = as.character(substitute(lmuuu))
+ if (mode(lsize) != "character" && mode(lsize) != "name")
+ lsize = as.character(substitute(lsize))
+ if (!is.list(emuuu)) emuuu = list()
+ if (!is.list(esize)) esize = list()
if (!is.logical( parallel ) || length( parallel ) != 1)
- stop("argument 'parallel' must be TRUE or FALSE")
+ stop("argument 'parallel' must be TRUE or FALSE")
if ( parallel && length(zero))
- stop("need to set 'zero = NULL' when parallel = TRUE")
+ stop("need to set 'zero = NULL' when parallel = TRUE")
- ans =
- new("vglmff",
- blurb = c("Negative-binomial distribution\n\n",
+ ans =
+ new("vglmff",
+ blurb = c("Negative-binomial distribution\n\n",
"Links: ",
- namesof("mu", lmu, earg = emu), ", ",
- namesof("k", lk, earg = ek), "\n",
+ namesof("mu", lmuuu, earg = emuuu), ", ",
+ namesof("size", lsize, earg = esize), "\n",
"Mean: mu\n",
- "Variance: mu * (1 + mu/k)"),
- constraints = eval(substitute(expression({
-
- dotzero <- .zero
- Musual <- 2
- eval(negzero.expression)
-
- if ( .parallel && ncol(cbind(y)) > 1)
- stop("univariate responses needed if parallel = TRUE")
- constraints = cm.vgam(matrix(1, M, 1), x, .parallel, constraints)
- }), list( .parallel = parallel, .zero = zero ))),
- infos = eval(substitute(function(...) {
- list(Musual = 2,
- zero = .zero)
- }, list( .zero = zero ))),
- initialize = eval(substitute(expression({
- assign("CQO.FastAlgorithm",
- ( .lmu == "loge") && ( .lk == "loge"), envir = VGAM:::VGAMenv)
- if (any(function.name == c("cqo","cao")) &&
- is.Numeric( .zero, allow = 1) && .zero != -2)
- stop("argument zero = -2 is required")
-
- if (any(y < 0))
- stop("negative values not allowed for the 'negbinomial' family")
- if (any(round(y) != y))
- stop("integer-values only allowed for the 'negbinomial' family")
- y = as.matrix(y)
- M = 2 * ncol(y)
- NOS = ncoly = ncol(y) # Number of species
- predictors.names =
- c(namesof(if (NOS == 1) "mu" else
- paste("mu", 1:NOS, sep = ""), .lmu, earg = .emu, tag = FALSE),
- namesof(if (NOS == 1) "k" else
- paste("k", 1:NOS, sep = ""), .lk, earg = .ek, tag = FALSE))
- predictors.names = predictors.names[interleave.VGAM(M, M = 2)]
-
- if (is.null( .nsimEIM )) {
- save.weight <- control$save.weight <- FALSE
- }
+ "Variance: mu * (1 + mu / size)"),
+ constraints = eval(substitute(expression({
- if (is.numeric( .mu.init ))
- MU.INIT <- matrix( .mu.init, nrow(y), ncol(y), byrow = TRUE)
+ dotzero <- .zero
+ Musual <- 2
+ eval(negzero.expression)
- if (!length(etastart)) {
- mu.init = y
- for(iii in 1:ncol(y)) {
- use.this = if ( .method.init == 1) {
- weighted.mean(y[,iii], w) + 1/16
- } else if ( .method.init == 3) {
- c(quantile(y[,iii], probs = .quantile.probs) + 1/16)
- } else {
- median(y[,iii]) + 1/16
- }
+ if ( .parallel && ncol(cbind(y)) > 1)
+ stop("univariate responses needed if parallel = TRUE")
+ constraints = cm.vgam(matrix(1, M, 1), x, .parallel, constraints)
+ }), list( .parallel = parallel, .zero = zero ))),
- if (is.numeric( .mu.init )) {
- mu.init[, iii] = MU.INIT[, iii]
- } else {
- medabsres = median(abs(y[,iii] - use.this)) + 1/32
- allowfun = function(z, maxtol=1) sign(z)*pmin(abs(z), maxtol)
- mu.init[,iii] = use.this + (1 - .sinit) * allowfun(y[,iii] -
- use.this, maxtol=medabsres)
+ infos = eval(substitute(function(...) {
+ list(Musual = 2,
+ zero = .zero)
+ }, list( .zero = zero ))),
- mu.init[,iii] = abs(mu.init[,iii]) + 1 / 1024
- }
+ initialize = eval(substitute(expression({
+ Musual <- 2
+ assign("CQO.FastAlgorithm",
+ ( .lmuuu == "loge") && ( .lsize == "loge"),
+ envir = VGAM:::VGAMenv)
+ if (any(function.name == c("cqo","cao")) &&
+ is.Numeric( .zero, allow = 1) && .zero != -2)
+ stop("argument zero = -2 is required")
+
+ if (any(y < 0))
+ stop("negative values not allowed for the 'negbinomial' family")
+ if (any(round(y) != y))
+ stop("integer-values only allowed for the 'negbinomial' family")
+
+ y = as.matrix(y)
+ M = 2 * ncol(y)
+ NOS = ncoly = ncol(y) # Number of species
+ predictors.names =
+ c(namesof(if (NOS == 1) "mu" else paste("mu", 1:NOS, sep = ""),
+ .lmuuu, earg = .emuuu, tag = FALSE),
+ namesof(if (NOS == 1) "size" else paste("size", 1:NOS, sep = ""),
+ .lsize, earg = .esize, tag = FALSE))
+ predictors.names = predictors.names[interleave.VGAM(M, M = 2)]
+
+ if (is.null( .nsimEIM )) {
+ save.weight <- control$save.weight <- FALSE
+ }
- }
+ if (is.numeric( .mu.init ))
+ MU.INIT <- matrix( .mu.init, nrow(y), ncol(y), byrow = TRUE)
- if ( is.Numeric( .k.init )) {
- kay.init = matrix( .k.init, nr=n, nc=NOS, byrow = TRUE)
+ if (!length(etastart)) {
+ mu.init = y
+ for(iii in 1:ncol(y)) {
+ use.this = if ( .imethod == 1) {
+ weighted.mean(y[, iii], w) + 1/16
+ } else if ( .imethod == 3) {
+ c(quantile(y[, iii], probs = .quantile.probs) + 1/16)
} else {
- negbinomial.Loglikfun = function(kmat, y, x, w, extraargs) {
- mu = extraargs
- sum(w * dnbinom(x=y, mu=mu, size=kmat, log = TRUE))
- }
- k.grid = 2^((-7):7)
- k.grid = 2^(seq(-8, 8, length = 40))
- kay.init = matrix(0, nr=n, nc=NOS)
- for(spp. in 1:NOS) {
- kay.init[,spp.] = getMaxMin(k.grid,
- objfun=negbinomial.Loglikfun,
- y=y[,spp.], x=x, w=w,
- extraargs= mu.init[,spp.])
- }
+ median(y[, iii]) + 1/16
}
- etastart = cbind(theta2eta(mu.init, .lmu, earg = .emu),
- theta2eta(kay.init, .lk, earg = .ek))
- etastart = etastart[,interleave.VGAM(M, M = 2), drop = FALSE]
- }
- }), list( .lmu = lmu, .lk = lk,
- .emu = emu, .ek = ek, .mu.init = imu,
- .k.init = ik, .quantile.probs = quantile.probs,
- .sinit = shrinkage.init, .nsimEIM = nsimEIM, .zero = zero,
- .method.init = method.init ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- NOS = ncol(eta) / 2
- eta2theta(eta[,2*(1:NOS)-1, drop = FALSE], .lmu, earg = .emu)
- }, list( .lmu = lmu, .emu = emu, .ek = ek ))),
- last = eval(substitute(expression({
- if (exists("CQO.FastAlgorithm", envir = VGAM:::VGAMenv))
- rm("CQO.FastAlgorithm", envir = VGAM:::VGAMenv)
- temp0303 = c(rep( .lmu, length = NOS), rep( .lk, length = NOS))
- names(temp0303) = c(if (NOS == 1) "mu" else paste("mu", 1:NOS, sep = ""),
- if (NOS == 1) "k" else paste("k", 1:NOS, sep = ""))
- temp0303 = temp0303[interleave.VGAM(M, M = 2)]
- misc$link = temp0303 # Already named
- misc$earg = vector("list", M)
- names(misc$earg) = names(misc$link)
- for(ii in 1:NOS) {
- misc$earg[[2*ii-1]] = .emu
- misc$earg[[2*ii ]] = .ek
- }
- misc$cutoff = .cutoff
- misc$method.init = .method.init
- misc$nsimEIM = .nsimEIM
- misc$expected = TRUE
- misc$shrinkage.init = .sinit
- }), list( .lmu = lmu, .lk = lk, .cutoff = cutoff,
- .emu = emu, .ek = ek, .nsimEIM = nsimEIM,
- .sinit = shrinkage.init,
- .method.init = method.init ))),
- link = eval(substitute(function(mu, extra = NULL) {
- temp = theta2eta(mu, .lmu, earg = .emu)
- kayy = theta2eta(if (is.numeric( .ik)) .ik else 1.0, .lk, earg = .ek)
- kayy = 0 * temp + kayy # Right dimension now.
- temp = cbind(temp, kayy)
- temp[, interleave.VGAM(ncol(temp), M = 2), drop = FALSE]
- }, list( .lmu = lmu, .emu = emu,
- .lk = lk, .ek = ek, .ik = ik ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- NOS = ncol(eta) / 2
- temp300 = eta[,2*(1:NOS), drop = FALSE]
- if ( .lk == "loge") {
- bigval = 28
- temp300 = ifelse(temp300 > bigval, bigval, temp300)
- temp300 = ifelse(temp300 < -bigval, -bigval, temp300)
- }
- kmat = eta2theta(temp300, .lk, earg = .ek)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * dnbinom(x=y, mu=mu, size=kmat, log = TRUE))
- }, list( .lk = lk, .emu = emu, .ek = ek ))),
- vfamily = c("negbinomial"),
- deriv = eval(substitute(expression({
- NOS = ncol(eta) / 2
- M = ncol(eta)
- temp3 = eta[,2*(1:NOS), drop = FALSE]
- bigval = 28
- temp3 = ifelse(temp3 > bigval, bigval, temp3)
- temp3 = ifelse(temp3 < -bigval, -bigval, temp3)
- kmat = eta2theta(temp3, .lk, earg = .ek)
- dl.dmu = y/mu - (y+kmat)/(kmat+mu)
- dl.dk = digamma(y+kmat) - digamma(kmat) - (y+kmat)/(mu+kmat) + 1 +
- log(kmat/(kmat+mu))
- dmu.deta = dtheta.deta(mu, .lmu, earg = .emu)
- dk.deta = dtheta.deta(kmat, .lk, earg = .ek)
- dthetas.detas = cbind(dmu.deta, dk.deta)
- myderiv = w * cbind(dl.dmu, dl.dk) * dthetas.detas
- myderiv[,interleave.VGAM(M, M = 2)]
- }), list( .lmu = lmu, .lk = lk, .emu = emu, .ek = ek ))),
- weight = eval(substitute(expression({
- wz = matrix(as.numeric(NA), n, M) # wz is 'diagonal'
- if (is.null( .nsimEIM)) {
- fred2 = dotFortran(name = "enbin9", ans=double(n*NOS),
- as.double(kmat), as.double(mu), as.double( .cutoff ),
- as.integer(n), ok=as.integer(1), as.integer(NOS),
- sumpdf=double(1), as.double( .Machine$double.eps),
- as.integer( .Maxiter ))
- if (fred2$ok != 1)
- stop("error in Fortran subroutine exnbin9")
- dim(fred2$ans) = c(n, NOS)
- ed2l.dk2 = -fred2$ans - 1/kmat + 1/(kmat+mu)
- wz[,2*(1:NOS)] = dk.deta^2 * ed2l.dk2
+ if (is.numeric( .mu.init )) {
+ mu.init[, iii] = MU.INIT[, iii]
} else {
- run.varcov = matrix(0, n, NOS)
- ind1 = iam(NA, NA, M=M, both = TRUE, diag = TRUE)
- for(ii in 1:( .nsimEIM )) {
- ysim = rnbinom(n=n*NOS, mu=c(mu), size=c(kmat))
- if (NOS > 1) dim(ysim) = c(n, NOS)
- dl.dk = digamma(ysim+kmat) - digamma(kmat) -
- (ysim+kmat)/(mu+kmat) + 1 + log(kmat/(kmat+mu))
- run.varcov = run.varcov + dl.dk^2
- }
- run.varcov = cbind(run.varcov / .nsimEIM)
- wz[,2*(1:NOS)] = if (intercept.only)
- matrix(colMeans(run.varcov),
- n, ncol(run.varcov), byrow = TRUE) else run.varcov
+ medabsres = median(abs(y[, iii] - use.this)) + 1/32
+ allowfun = function(z, maxtol=1) sign(z)*pmin(abs(z), maxtol)
+ mu.init[, iii] = use.this + (1 - .sinit) * allowfun(y[, iii] -
+ use.this, maxtol=medabsres)
- wz[,2*(1:NOS)] = wz[,2*(1:NOS)] * dk.deta^2
+ mu.init[, iii] = abs(mu.init[, iii]) + 1 / 1024
}
- ed2l.dmu2 = 1/mu - 1/(mu+kmat)
- wz[,2*(1:NOS)-1] = dmu.deta^2 * ed2l.dmu2
- w * wz
- }), list( .cutoff = cutoff, .Maxiter = Maxiter, .nsimEIM = nsimEIM ))))
+ } # of for(iii)
- if (deviance.arg) ans at deviance = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- NOS = ncol(eta) / 2
- temp300 = eta[,2*(1:NOS), drop = FALSE]
- if ( .lk == "loge") {
- bigval = 28
- temp300[temp300 > bigval] = bigval
- temp300[temp300 < -bigval] = -bigval
- } else stop("can only handle the 'loge' link")
- k = eta2theta(temp300, .lk, earg = .ek)
- devi = 2 * (y*log(ifelse(y < 1, 1, y)/mu) + (y+k)*log((mu+k)/(k+y)))
- if (residuals)
- sign(y - mu) * sqrt(abs(devi) * w) else
- sum(w * devi)
- }, list( .lk = lk, .emu = emu, .ek = ek )))
+ if ( is.Numeric( .k.init )) {
+ kay.init = matrix( .k.init, nrow = n, ncol = NOS, byrow = TRUE)
+ } else {
+ negbinomial.Loglikfun = function(kmat, y, x, w, extraargs) {
+ mu = extraargs
+ sum(w * dnbinom(x = y, mu = mu, size = kmat, log = TRUE))
+ }
+ k.grid = 2^((-7):7)
+ k.grid = 2^(seq(-8, 8, length = 40))
+ kay.init = matrix(0, nr=n, nc=NOS)
+ for(spp. in 1:NOS) {
+ kay.init[,spp.] = getMaxMin(k.grid,
+ objfun=negbinomial.Loglikfun,
+ y = y[,spp.], x = x, w = w,
+ extraargs= mu.init[,spp.])
+ }
+ }
+ etastart = cbind(theta2eta(mu.init, .lmuuu, earg = .emuuu),
+ theta2eta(kay.init, .lsize, earg = .esize))
+ etastart = etastart[,interleave.VGAM(M, M = 2), drop = FALSE]
+ }
+ }), list( .lmuuu = lmuuu, .lsize = lsize,
+ .emuuu = emuuu, .esize = esize,
+ .mu.init = imu,
+ .k.init = isize, .quantile.probs = quantile.probs,
+ .sinit = shrinkage.init, .nsimEIM = nsimEIM,
+ .zero = zero, .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ NOS = ncol(eta) / 2
+ eta2theta(eta[, 2*(1:NOS)-1, drop = FALSE],
+ .lmuuu, earg = .emuuu)
+ }, list( .lmuuu = lmuuu, .emuuu = emuuu,
+ .esize = esize ))),
+ last = eval(substitute(expression({
+ if (exists("CQO.FastAlgorithm", envir = VGAM:::VGAMenv))
+ rm("CQO.FastAlgorithm", envir = VGAM:::VGAMenv)
+
+ temp0303 = c(rep( .lmuuu, length = NOS),
+ rep( .lsize, length = NOS))
+ names(temp0303) = c(if (NOS == 1) "mu" else
+ paste("mu", 1:NOS, sep = ""),
+ if (NOS == 1) "size" else
+ paste("size", 1:NOS, sep = ""))
+ temp0303 = temp0303[interleave.VGAM(M, M = 2)]
+ misc$link = temp0303 # Already named
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:NOS) {
+ misc$earg[[2*ii-1]] = .emuuu
+ misc$earg[[2*ii ]] = .esize
+ }
+ misc$cutoff = .cutoff
+ misc$imethod = .imethod
+ misc$nsimEIM = .nsimEIM
+ misc$expected = TRUE
+ misc$shrinkage.init = .sinit
+ }), list( .lmuuu = lmuuu, .lsize = lsize,
+ .emuuu = emuuu, .esize = esize,
+ .cutoff = cutoff,
+ .nsimEIM = nsimEIM,
+ .sinit = shrinkage.init,
+ .imethod = imethod ))),
+ link = eval(substitute(function(mu, extra = NULL) {
+ temp = theta2eta(mu, .lmuuu, earg = .emuuu)
+ kayy = theta2eta(if (is.numeric( .isize)) .isize else 1.0,
+ .lsize, earg = .esize)
+ kayy = 0 * temp + kayy # Right dimension now.
+ temp = cbind(temp, kayy)
+ temp[, interleave.VGAM(ncol(temp), M = 2), drop = FALSE]
+ }, list( .lmuuu = lmuuu, .emuuu = emuuu,
+ .lsize = lsize, .esize = esize,
+ .isize = isize ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ NOS = ncol(eta) / 2
+ temp300 = eta[, 2*(1:NOS), drop = FALSE]
+ if ( .lsize == "loge") {
+ bigval = 28
+ temp300 = ifelse(temp300 > bigval, bigval, temp300)
+ temp300 = ifelse(temp300 < -bigval, -bigval, temp300)
+ }
+ kmat = eta2theta(temp300, .lsize, earg = .esize)
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else
+ sum(w * dnbinom(x = y, mu = mu, size = kmat, log = TRUE))
+ }, list( .lsize = lsize, .emu = emu, .esize = esize ))),
+ vfamily = c("negbinomial"),
+ deriv = eval(substitute(expression({
+ NOS = ncol(eta) / 2
+ M = ncol(eta)
+ temp3 = eta[, 2*(1:NOS), drop = FALSE]
+ bigval = 28
+ temp3 = ifelse(temp3 > bigval, bigval, temp3)
+ temp3 = ifelse(temp3 < -bigval, -bigval, temp3)
+ kmat = eta2theta(temp3, .lsize, earg = .esize)
+
+ dl.dmu = y/mu - (y+kmat)/(kmat+mu)
+ dl.dk = digamma(y+kmat) - digamma(kmat) - (y+kmat)/(mu+kmat) + 1 +
+ log(kmat/(kmat+mu))
+
+ dmu.deta = dtheta.deta(mu, .lmu, earg = .emu)
+ dk.deta = dtheta.deta(kmat, .lsize, earg = .esize)
+
+ dthetas.detas = cbind(dmu.deta, dk.deta)
+ myderiv = c(w) * cbind(dl.dmu, dl.dk) * dthetas.detas
+ myderiv[, interleave.VGAM(M, M = 2)]
+ }), list( .lmu = lmu, .lsize = lsize, .emu = emu, .esize = esize ))),
+ weight = eval(substitute(expression({
+ wz = matrix(as.numeric(NA), n, M) # wz is 'diagonal'
+ if (is.null( .nsimEIM)) {
+ fred2 = dotFortran(name = "enbin9", ans = double(n*NOS),
+ as.double(kmat), as.double(mu), as.double( .cutoff ),
+ as.integer(n), ok = as.integer(1), as.integer(NOS),
+ sumpdf = double(1), as.double( .Machine$double.eps ),
+ as.integer( .Maxiter ))
+ if (fred2$ok != 1)
+ stop("error in Fortran subroutine exnbin9")
+ dim(fred2$ans) = c(n, NOS)
+ ed2l.dk2 = -fred2$ans - 1/kmat + 1/(kmat+mu)
+ wz[,2*(1:NOS)] = dk.deta^2 * ed2l.dk2
+ } else {
+ run.varcov = matrix(0, n, NOS)
+ ind1 = iam(NA, NA, M = M, both = TRUE, diag = TRUE)
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rnbinom(n = n*NOS, mu = c(mu), size = c(kmat))
+ if (NOS > 1) dim(ysim) = c(n, NOS)
+ dl.dk = digamma(ysim+kmat) - digamma(kmat) -
+ (ysim+kmat)/(mu+kmat) + 1 + log(kmat/(kmat+mu))
+ run.varcov = run.varcov + dl.dk^2
+ }
+ run.varcov = cbind(run.varcov / .nsimEIM)
+ wz[, 2*(1:NOS)] = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ n, ncol(run.varcov), byrow = TRUE) else run.varcov
- ans
-}
+ wz[, 2*(1:NOS)] = wz[, 2*(1:NOS)] * dk.deta^2
+ }
+ ed2l.dmu2 = 1/mu - 1/(mu+kmat)
+ wz[, 2*(1:NOS)-1] = dmu.deta^2 * ed2l.dmu2
+ c(w) * wz
+ }), list( .cutoff = cutoff, .Maxiter = Maxiter,
+ .nsimEIM = nsimEIM ))))
- negbin.ab = function(link.alpha = "loge", link.k = "loge",
- ealpha=list(), ek=list(),
- k.init=1,
- zero = 2,
- cutoff=0.995)
-{
+ if (deviance.arg) ans at deviance = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ NOS = ncol(eta) / 2
+ temp300 = eta[,2*(1:NOS), drop = FALSE]
+ if ( .lsize == "loge") {
+ bigval = 28
+ temp300[temp300 > bigval] = bigval
+ temp300[temp300 < -bigval] = -bigval
+ } else stop("can only handle the 'loge' link")
+ k = eta2theta(temp300, .lsize, earg = .esize)
+ devi = 2 * (y*log(ifelse(y < 1, 1, y)/mu) + (y+k)*log((mu+k)/(k+y)))
+ if (residuals)
+ sign(y - mu) * sqrt(abs(devi) * w) else
+ sum(w * devi)
+ }, list( .lsize = lsize, .emu = emu, .esize = esize )))
+ ans
+}
- if (!is.Numeric(cutoff, allow = 1) || cutoff<0.8 || cutoff>=1)
- stop("range error in the argument cutoff")
- if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
- stop("bad input for argument 'zero'")
- if (mode(link.alpha) != "character" && mode(link.alpha) != "name")
- link.alpha = as.character(substitute(link.alpha))
- if (mode(link.k) != "character" && mode(link.k) != "name")
- link.k = as.character(substitute(link.k))
- if (!is.list(ealpha)) ealpha = list()
- if (!is.list(ek)) ek = list()
- new("vglmff",
- blurb = c("Negative-binomial distribution\n\n",
- "Links: ",
- namesof("alpha", link.alpha, earg = ealpha), ", ",
- namesof("k", link.k, earg = ek),
- "\n",
- "Mean: alpha * k",
- "\n",
- "Variance: alpha * k * (1 + alpha)"),
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- if (ncol(cbind(y)) != 1)
- stop("response must be a vector or a one-column matrix")
- predictors.names =
- c(namesof("alpha", .link.alpha, earg = .ealpha, tag = FALSE),
- namesof("k", .link.k, earg = .ek, tag = FALSE))
- if (!length(etastart)) {
- etastart = cbind(
- theta2eta((y + 1/8) / .k.init, .link.alpha, earg = .ealpha),
- theta2eta( .k.init, .link.k, earg = .ek))
- }
- }), list( .link.alpha=link.alpha, .link.k=link.k, .k.init=k.init,
- .ealpha=ealpha, .ek = ek ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
- k = eta2theta(eta[,2], .link.k, earg = .ek)
- alpha * k
- }, list( .link.alpha=link.alpha, .link.k=link.k,
- .ealpha=ealpha, .ek = ek ))),
- last = eval(substitute(expression({
- misc$link = c(alpha = .link.alpha, k = .link.k)
- misc$earg = list(alpha = .ealpha, k = .ek )
- }), list( .link.alpha = link.alpha, .link.k = link.k,
- .ealpha = ealpha, .ek = ek ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
- kvec = eta2theta(eta[,2], .link.k, earg = .ek)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dnbinom(x=y, mu=kvec*alpha, size=kvec, log = TRUE))
- }
- }, list( .link.alpha=link.alpha, .link.k=link.k,
- .ealpha=ealpha, .ek = ek ))),
- vfamily = c("negbin.ab"),
- deriv = eval(substitute(expression({
- alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
- k = eta2theta(eta[,2], .link.k, earg = .ek)
- dl.dalpha = (y/alpha - k)/(1+alpha)
- dl.dk = digamma(y+k) - digamma(k) - log1p(alpha)
- dalpha.deta = dtheta.deta(alpha, .link.alpha, earg = .ealpha)
- dk.deta = dtheta.deta(k, .link.k, earg = .ek)
- cbind(w * dl.dalpha * dalpha.deta, w * dl.dk * dk.deta)
- }), list( .link.alpha=link.alpha, .link.k=link.k,
- .ealpha=ealpha, .ek = ek ))),
- weight = eval(substitute(expression({
- wz = matrix(as.numeric(NA), n, dimm(M)) # 3==dimm(M)
- ed2l.dalpha2 = k/(alpha*(1+alpha))
- ed2l.dalphak = 1/(1+alpha) # Not -1/(1+alpha)
- fred = dotFortran(name = "enbin8",
- ans=double(n),
- as.double(k),
- as.double(1/(1+alpha)),
- as.double( .cutoff ),
- as.integer(n), ok=as.integer(1), as.integer(1),
- sumpdf=double(1), macheps=as.double( .Machine$double.eps))
- if (fred$ok != 1)
- stop("error in Fortran subroutine enbin8")
- ed2l.dk2 = -fred$ans
- wz[,iam(1,1,M)] = dalpha.deta^2 * ed2l.dalpha2
- wz[,iam(2,2,M)] = dk.deta^2 * ed2l.dk2
- wz[,iam(1,2,M)] = dk.deta * dalpha.deta * ed2l.dalphak
- w * wz
- }), list( .cutoff = cutoff,
- .ealpha=ealpha, .ek = ek ))))
+polya.control <- function(save.weight = TRUE, ...)
+{
+ list(save.weight = save.weight)
}
- if (FALSE)
-nbmud = function(lmu = c("loge","identity","reciprocal"),
- k.init = 1,
- zero = -2,
- cutoff = 0.995,
- deviance.arg = FALSE)
+ polya <-
+ function(lprob = "logit", lsize = "loge",
+ eprob = list(), esize = list(),
+ iprob = NULL, isize = NULL,
+ quantile.probs = 0.75,
+ nsimEIM = 100,
+ deviance.arg = FALSE, imethod = 1,
+ shrinkage.init = 0.95, zero = -2)
{
- ans = negbinomial(link.mu = lmu[1],
- link.k = "reciprocal",
- k.init = k.init,
- zero = zero,
- cutoff = cutoff,
- deviance.arg=deviance.arg)
- ans at vfamily = "nbmud"
- ans
-}
+ if (length(iprob) && !is.Numeric(iprob, posit = TRUE))
+ stop("bad input for argument 'iprob'")
+ if (length(isize) && !is.Numeric(isize, posit = TRUE))
+ stop("bad input for argument 'isize'")
- if (FALSE)
- neg.binomial = function(link.p = "logit", link.k = "loge",
- ep=list(), ek=list(),
- zero = 2,
- ik = NULL,
- cutoff=0.995)
-{
-
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
+ if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
+ shrinkage.init > 1)
+ stop("bad input for argument 'shrinkage.init'")
+ if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
+ stop("bad input for argument 'nsimEIM'")
+ if (nsimEIM <= 10)
+ warning("argument 'nsimEIM' should be an integer ",
+ "greater than 10, say")
- if (!is.Numeric(cutoff, allow = 1) || cutoff<0.8 || cutoff>=1)
- stop("range error in the argument cutoff")
+ if (mode(lprob) != "character" && mode(lprob) != "name")
+ lprob = as.character(substitute(lprob))
+ if (mode(lsize) != "character" && mode(lsize) != "name")
+ lsize = as.character(substitute(lsize))
+ if (!is.list(eprob)) eprob = list()
+ if (!is.list(esize)) esize = list()
- if (mode(link.p) != "character" && mode(link.p) != "name")
- link.p = as.character(substitute(link.p))
- if (link.p == "canonical")
- link.p = "logc"
- if (mode(link.k) != "character" && mode(link.k) != "name")
- link.k = as.character(substitute(link.k))
- if (!is.list(ep)) ep = list()
- if (!is.list(ek)) ek = list()
- new("vglmff",
- blurb = c("Negative-binomial distribution\n\n",
+ ans =
+ new("vglmff",
+ blurb = c("Polya (negative-binomial) distribution\n\n",
"Links: ",
- namesof("p", link.p, earg = ep), ", ",
- namesof("k", link.k, earg = ek), "; mu=k*(1-p)/p",
- "\n",
- "Variance: mu(1 + mu/k)"),
- constraints = eval(substitute(expression({
- constraints = cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero = zero ))),
- initialize = eval(substitute(expression({
- if (ncol(cbind(y)) != 1)
- stop("response must be a vector or a one-column matrix")
- y = as.numeric(y)
- if (any(y < 0))
- stop("response must be non-negative")
- if (max(abs(y - round(y )))>0.00001)
- stop("response must be integer-valued")
+ namesof("prob", lprob, earg = eprob), ", ",
+ namesof("size", lsize, earg = esize), "\n",
+ "Mean: size * (1 - prob) / prob\n",
+ "Variance: mean / prob"),
+ constraints = eval(substitute(expression({
- predictors.names =
- c(namesof("p", .link.p, earg = .ep, tag = FALSE),
- namesof("k", .link.k, earg = .ek, tag = FALSE))
+ dotzero <- .zero
+ Musual <- 2
+ eval(negzero.expression)
+ }), list( .zero = zero ))),
+ infos = eval(substitute(function(...) {
+ list(Musual = 2,
+ zero = .zero)
+ }, list( .zero = zero ))),
- junk = lm(y ~ x - 1, weight=w, smart= FALSE) # singular.ok = FALSE,
- var.y.est = summary(junk)$sigma^2
- mu.adj = fitted(junk)
+ initialize = eval(substitute(expression({
+ Musual = 2
+ if (any(function.name == c("cqo", "cao")))
+ stop("polya() does not work with cqo() or cao(). ",
+ "Try negbinomial()")
+
+ if (any(y < 0))
+ stop("negative values not allowed for the 'polya' family")
+ if (any(round(y) != y))
+ stop("integer-values only allowed for the 'polya' family")
+
+ y = as.matrix(y)
+ M = 2 * ncol(y)
+ NOS = ncoly = ncol(y) # Number of species
+
+ predictors.names =
+ c(namesof(if (NOS == 1) "prob" else
+ paste("prob", 1:NOS, sep = ""),
+ .lprob, earg = .eprob, tag = FALSE),
+ namesof(if (NOS == 1) "size" else
+ paste("size", 1:NOS, sep = ""),
+ .lsize, earg = .esize, tag = FALSE))
+ predictors.names = predictors.names[interleave.VGAM(M, M = 2)]
+
+ if (is.null( .nsimEIM )) {
+ save.weight <- control$save.weight <- FALSE
+ }
- if (FALSE) {
- mu = rep(weighted.mean(y, w=w), len = length(y))
- mu = rep(median(rep(y+0.167, times=w)), len = length(y))
+
+ PROB.INIT <- if (is.numeric( .pinit )) {
+ matrix( .pinit, nrow(y), ncol(y), byrow = TRUE)
+ } else {
+ NULL
+ }
- k = mean(rep(mu^2 / (var.y.est - mu), w), trim=0.05)
- k = rep(k, length(mu))
+ if (!length(etastart)) {
+ mu.init = y
+ for(iii in 1:ncol(y)) {
+ use.this = if ( .imethod == 1) {
+ weighted.mean(y[, iii], w) + 1/16
+ } else if ( .imethod == 3) {
+ c(quantile(y[, iii], probs = .quantile.probs) + 1/16)
} else {
- mu = mu.adj
- mu[mu <= 0] = min(mu[mu > 0])
- k = mu.adj^2 / (var.y.est - mu.adj)
- k[k <= 0] = quantile(k[k>0], prob=0.02)
+ median(y[, iii]) + 1/16
}
- if (length( .ik )) {
- mu = median(rep(y, times=w))
- k = rep( .ik , len = length(y))
+ if (FALSE) {
+ mu.init[, iii] = MU.INIT[, iii]
+ } else {
+ medabsres = median(abs(y[, iii] - use.this)) + 1/32
+ allowfun = function(z, maxtol = 1) sign(z) * pmin(abs(z), maxtol)
+ mu.init[, iii] = use.this + (1 - .sinit) * allowfun(y[, iii] -
+ use.this, maxtol = medabsres)
+
+ mu.init[, iii] = abs(mu.init[, iii]) + 1 / 1024
}
-
- if (!length(etastart)) {
- prob = k / (k + mu)
- etastart = cbind(theta2eta(prob, .link.p, earg = .ep),
- theta2eta(k, .link.k, earg = .ek))
+ }
+
+
+
+ if ( is.Numeric( .kinit )) {
+ kayy.init = matrix( .kinit, nrow = n, ncol = NOS, byrow = TRUE)
+ } else {
+ negbinomial.Loglikfun = function(kmat, y, x, w, extraargs) {
+ mu = extraargs
+ sum(w * dnbinom(x = y, mu = mu, size = kmat, log = TRUE))
+ }
+ k.grid = 2^((-7):7)
+ k.grid = 2^(seq(-8, 8, length = 40))
+ kayy.init = matrix(0, nrow = n, ncol = NOS)
+ for(spp. in 1:NOS) {
+ kayy.init[,spp.] = getMaxMin(k.grid,
+ objfun=negbinomial.Loglikfun,
+ y = y[,spp.], x = x, w = w,
+ extraargs= mu.init[,spp.])
}
- }), list( .link.p=link.p, .link.k=link.k, .ik=ik,
- .ep = ep, .ek = ek ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- prob = eta2theta(eta[,1], .link.p, earg = .ep)
- k = eta2theta(eta[,2], .link.k, earg = .ek)
- k * (1 - prob) / prob
- }, list( .link.p=link.p, .link.k=link.k,
- .ep = ep, .ek = ek ))),
- last = eval(substitute(expression({
- misc$link = c(p = .link.p, k = .link.k )
- misc$earg = list(p = .ep, k = .ek )
- }), list( .link.p=link.p, .link.k=link.k,
- .ep = ep, .ek = ek ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- prob = eta2theta(eta[,1], .link.p, earg = .ep)
- k = eta2theta(eta[,2], .link.k, earg = .ek)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * (y * log1p(-prob) + k * log(prob) + lgamma(y+k) -
- lgamma(k) - lgamma(y+1 )))
- }, list( .link.p=link.p, .link.k=link.k,
- .ep = ep, .ek = ek ))),
- vfamily = c("neg.binomial"),
- deriv = eval(substitute(expression({
- prob = eta2theta(eta[,1], .link.p, earg = .ep)
- k = eta2theta(eta[,2], .link.k, earg = .ek)
- dl.dp = k/prob - y/(1-prob)
- dl.dk = log(prob) + digamma(y+k) - digamma(k)
- dp.deta = dtheta.deta(prob, .link.p, earg = .ep)
- dk.deta = dtheta.deta(k, .link.k, earg = .ek)
- w * cbind(dl.dp * dp.deta, dl.dk * dk.deta)
- }), list( .link.p=link.p, .link.k=link.k,
- .ep = ep, .ek = ek ))),
- weight = eval(substitute(expression({
- wz = matrix(as.numeric(NA), n, dimm(M)) # 3==dimm(M)
- d2l.dpk = 1/prob
-
-
- ed2l.dp2 = -k/(prob^2 * (1-prob)) # "e" for expected value
- fred = dotFortran(name = "exnbin",
- ans=double(n),
- as.double(k),
- as.double(prob),
- as.double( .cutoff ),
- as.integer(n), ok=as.integer(1), as.integer(1),
- sumpdf=double(1))
- if (fred$ok != 1)
- stop("error in Fortran subroutine exnbin")
-
- ed2l.dk2 = fred$ans
-
- wz[,iam(1,1,M)] = dp.deta^2 * ed2l.dp2
- wz[,iam(1,2,M)] = d2l.dpk * dp.deta * dk.deta #ed2l.dpk=d2l.dpk
- wz[,iam(2,2,M)] = dk.deta^2 * ed2l.dk2
- wz = -w * wz
- wz
- }), list( .cutoff = cutoff,
- .ep = ep, .ek = ek ))))
-}
+ }
+ prob.init = if (length(PROB.INIT)) PROB.INIT else
+ kayy.init / (kayy.init + mu.init)
- if (FALSE)
- neg.binomial.k = function(k, link = "logit", earg = list(), expected = TRUE, ...)
-{
+ etastart = cbind(theta2eta(prob.init, .lprob, earg = .eprob),
+ theta2eta(kayy.init, .lsize, earg = .esize))
+ etastart = etastart[, interleave.VGAM(M, M = Musual), drop = FALSE]
+ }
+ }), list( .lprob = lprob, .lsize = lsize,
+ .eprob = eprob, .esize = esize,
+ .pinit = iprob, .kinit = isize,
+ .quantile.probs = quantile.probs,
+ .sinit = shrinkage.init, .nsimEIM = nsimEIM, .zero = zero,
+ .imethod = imethod ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ Musual = 2
+ NOS = ncol(eta) / Musual
+ pmat = eta2theta(eta[, Musual*(1:NOS) - 1, drop = FALSE],
+ .lprob, earg = .eprob)
+ kmat = eta2theta(eta[, Musual*(1:NOS)- 0, drop = FALSE],
+ .lsize, earg = .esize)
+ kmat / (kmat + pmat)
+ }, list( .lprob = lprob, .eprob = eprob,
+ .lsize = lsize, .esize = esize ))),
+ last = eval(substitute(expression({
+ temp0303 = c(rep( .lprob, length = NOS),
+ rep( .lsize, length = NOS))
+ names(temp0303) =
+ c(if (NOS == 1) "prob" else paste("prob", 1:NOS, sep = ""),
+ if (NOS == 1) "size" else paste("size", 1:NOS, sep = ""))
+ temp0303 = temp0303[interleave.VGAM(M, M = 2)]
+ misc$link = temp0303 # Already named
+
+ misc$earg = vector("list", M)
+ names(misc$earg) = names(misc$link)
+ for(ii in 1:NOS) {
+ misc$earg[[2*ii-1]] = .eprob
+ misc$earg[[2*ii ]] = .esize
+ }
- if (!is.Numeric(k, allow = 1, posit = TRUE))
- stop("bad input for argument argument 'k'")
- if (mode(link) != "character" && mode(link) != "name")
- link = as.character(substitute(link))
- if (!is.list(earg)) earg = list()
+ misc$isize = .isize
+ misc$imethod = .imethod
+ misc$nsimEIM = .nsimEIM
+ misc$expected = TRUE
+ misc$shrinkage.init = .sinit
+ misc$Musual = 2
+ }), list( .lprob = lprob, .lsize = lsize,
+ .eprob = eprob, .esize = esize,
+ .isize = isize,
+ .nsimEIM = nsimEIM,
+ .sinit = shrinkage.init, .imethod = imethod ))),
- new("vglmff",
- blurb = c("Negative-binomial distribution with k known and p unknown\n",
- "(k = ", k, ") ",
- if (k == 1) "Geometric\n\n" else "\n\n",
- "Links: ",
- namesof("p", link, earg = earg), "; p = ",k,"/(",k,"+mu)",
- "\n",
- "Variance: ",
- if (k == 1) "Geometric: mu(1+mu)" else
- paste("mu(1 + mu/",k,")", sep = "")),
- deviance = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- prob = .k / ( .k + mu)
- devy = .k * log( .k / ( .k + y))
- nz = y != 0
- devy[nz] = devy[nz] + y[nz] * log(y[nz] / ( .k + y[nz]))
- devmu = y * log1p(-prob) + .k * log(prob)
- devi = 2 * (devy - devmu)
- if (residuals)
- sign(y - mu) * sqrt(abs(devi) * w) else
- sum(w * devi)
- }, list( .link = link, .earg = earg, .k = k ))),
- initialize = eval(substitute(expression({
- predictors.names = namesof("p", .link, earg = .ep, tag = FALSE)
- mu = y + 0.167 * (y == 0)
- if (!length(etastart)) {
- prob = .k / ( .k + mu)
- etastart = theta2eta(prob, .link, earg = .earg)
- }
- }), list( .link = link, .earg = earg, .k = k ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- prob = eta2theta(eta, .link, earg = .earg)
- .k * (1 - prob) / prob
- }, list( .link = link, .earg = earg, .k = k ))),
- last = eval(substitute(expression({
- misc$link = c(p = .link)
- misc$earg = list(p = .earg)
- misc$k = .k
- }), list( .link = link, .earg = earg, .k = k ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- prob = eta2theta(eta, .link, earg = .earg)
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else
- sum(w * (y * log1p(-prob) + .k * log(prob) + lgamma(y+ .k) -
- lgamma( .k ) - lgamma(y+1 )))
- }, list( .link = link, .earg = earg, .k = k ))),
- vfamily = c("neg.binomial.k"),
- deriv = eval(substitute(expression({
- prob = .k / ( .k + mu)
- dp.deta = dtheta.deta(prob, .link, earg = .earg)
- w * ( .k/prob - y/(1-prob)) * dp.deta
- }), list( .link = link, .earg = earg, .k = k ))),
- weight = eval(substitute(expression({
- wz = dp.deta^2 * (y/(1 - prob)^2 + .k/prob^2)
- if (! .expected) {
- d2pdeta2 = d2theta.deta2(prob, .link, earg = .earg)
- wz = wz - d2pdeta2 * ( .k/prob - y/(1-prob))
- }
- w * wz
- }), list( .link = link, .earg = earg, .k = k, .expected = expected ))))
-}
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ Musual = 2
+ NOS = ncol(eta) / Musual
+ pmat = eta2theta(eta[, Musual*(1:NOS) - 1, drop = FALSE],
+ .lprob, earg = .eprob)
+ temp300 = eta[, Musual*(1:NOS) , drop = FALSE]
+ if ( .lsize == "loge") {
+ bigval = 28
+ temp300 = ifelse(temp300 > bigval, bigval, temp300)
+ temp300 = ifelse(temp300 < -bigval, -bigval, temp300)
+ }
+ kmat = eta2theta(temp300, .lsize, earg = .esize)
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else
+ sum(w * dnbinom(x = y, prob = pmat, size = kmat, log = TRUE))
+ }, list( .lsize = lsize, .lprob = lprob,
+ .esize = esize, .eprob = eprob ))),
+ vfamily = c("polya"),
+ deriv = eval(substitute(expression({
+ Musual = 2
+ NOS = ncol(eta) / Musual
+ M = ncol(eta)
+
+ pmat = eta2theta(eta[, Musual*(1:NOS) - 1, drop = FALSE],
+ .lprob, earg = .eprob)
+ temp3 = eta[, Musual*(1:NOS) , drop = FALSE]
+ if ( .lsize == "loge") {
+ bigval = 28
+ temp3 = ifelse(temp3 > bigval, bigval, temp3)
+ temp3 = ifelse(temp3 < -bigval, -bigval, temp3)
+ }
+ kmat = eta2theta(temp3, .lsize, earg = .esize)
+
+ dl.dprob = kmat / pmat - y / (1.0 - pmat)
+ dl.dkayy = digamma(y + kmat) - digamma(kmat) + log(pmat)
+
+ dprob.deta = dtheta.deta(pmat, .lprob, earg = .eprob)
+ dkayy.deta = dtheta.deta(kmat, .lsize, earg = .esize)
+ dthetas.detas = cbind(dprob.deta, dkayy.deta)
+ dThetas.detas = dthetas.detas[, interleave.VGAM(M, M = Musual)]
+ myderiv = c(w) * cbind(dl.dprob, dl.dkayy) * dthetas.detas
+ myderiv[, interleave.VGAM(M, M = Musual)]
+ }), list( .lprob = lprob, .lsize = lsize,
+ .eprob = eprob, .esize = esize ))),
+ weight = eval(substitute(expression({
+ wz = matrix(0.0, n, M + M - 1) # wz is 'tridiagonal'
+
+ ind1 = iam(NA, NA, M = Musual, both = TRUE, diag = TRUE)
+ mumat = as.matrix(mu)
+
+
+ for(spp. in 1:NOS) {
+ run.varcov = 0
+ kvec = kmat[, spp.]
+ pvec = pmat[, spp.]
+
+ for(ii in 1:( .nsimEIM )) {
+ ysim = rnbinom(n = n, prob = pvec, size = kvec)
+
+ dl.dprob = kvec / pvec - ysim / (1.0 - pvec)
+ dl.dkayy = digamma(ysim + kvec) - digamma(kvec) + log(pvec)
+ temp3 = cbind(dl.dprob, dl.dkayy)
+ run.varcov = run.varcov +
+ temp3[, ind1$row.index] *
+ temp3[, ind1$col.index]
+ }
+ run.varcov = cbind(run.varcov / .nsimEIM)
+
+ wz1 = if (intercept.only)
+ matrix(colMeans(run.varcov),
+ nrow = n, ncol = ncol(run.varcov), byrow = TRUE) else
+ run.varcov
+
+ wz1 = wz1 * dThetas.detas[, Musual * (spp. - 1) + ind1$row] *
+ dThetas.detas[, Musual * (spp. - 1) + ind1$col]
+
+
+ for(jay in 1:Musual)
+ for(kay in jay:Musual) {
+ cptr = iam((spp. - 1) * Musual + jay,
+ (spp. - 1) * Musual + kay,
+ M = M)
+ wz[, cptr] = wz1[, iam(jay, kay, M = Musual)]
+ }
+ } # End of for(spp.) loop
+ c(w) * wz
+ }), list( .nsimEIM = nsimEIM ))))
+
+
+
+
+ if (deviance.arg) ans at deviance = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ NOS = ncol(eta) / 2
+ temp300 = eta[, 2*(1:NOS), drop = FALSE]
+ if ( .lsize == "loge") {
+ bigval = 28
+ temp300[temp300 > bigval] = bigval
+ temp300[temp300 < -bigval] = -bigval
+ } else {
+ stop("can only handle the 'loge' link")
+ }
+ kayy = eta2theta(temp300, .lsize, earg = .esize)
+ devi = 2 * (y * log(ifelse(y < 1, 1, y) / mu) +
+ (y + kayy) * log((mu + kayy) / (kayy + y)))
+ if (residuals)
+ sign(y - mu) * sqrt(abs(devi) * w) else
+ sum(w * devi)
+ }, list( .lsize = lsize, .eprob = eprob,
+ .esize = esize )))
+
+ ans
+} # End of polya()
+
@@ -3295,11 +3338,11 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
lambda = mu
dl.dlambda = -1 + y/lambda
dlambda.deta = dtheta.deta(theta=lambda, link = "loge", earg = list())
- w * dl.dlambda * dlambda.deta
+ c(w) * dl.dlambda * dlambda.deta
}),
weight = expression({
d2l.dlambda2 = 1 / lambda
- w * d2l.dlambda2 * dlambda.deta^2
+ c(w) * d2l.dlambda2 * dlambda.deta^2
}))
}
@@ -3317,7 +3360,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
studentt <- function(ldf = "loglog", edf = list(), idf = NULL,
tol1 = 0.1,
- method.init = 1)
+ imethod = 1)
{
ldof <- ldf
@@ -3335,9 +3378,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
if (!is.Numeric(tol1, posit = TRUE))
stop("argument 'tol1' should be positive")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
new("vglmff",
@@ -3361,9 +3404,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
VarY = var(y)
MadY = mad(y)
if (VarY <= (1 + .tol1 )) VarY = 1.12
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
2 * VarY / (VarY - 1)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
ifelse(MadY < 1.05, 30, ifelse(MadY > 1.2, 2, 5))
} else
10
@@ -3374,7 +3417,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
len = length(y))
}
}), list( .ldof = ldof, .edof = edof, .idof = idof,
- .tol1 = tol1, .method.init = method.init ))),
+ .tol1 = tol1, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
Dof <- eta2theta(eta, .ldof, earg = .edof)
ans <- 0 * eta
@@ -3384,10 +3427,10 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
last = eval(substitute(expression({
misc$link <- c(df = .ldof )
misc$earg <- list(df = .edof )
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$expected = TRUE
}), list( .ldof = ldof,
- .edof = edof, .method.init = method.init ))),
+ .edof = edof, .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
Dof <- eta2theta(eta, .ldof, earg = .edof)
@@ -3408,7 +3451,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
temp1 <- temp0 * y^2
dl.ddf <- 0.5 * (-temp0 - log1p(temp1) +
(Dof + 1) * y^2 / (Dof^2 * (1 + temp1)) + DDS(Dof))
- w * dl.ddf * ddf.deta
+ c(w) * dl.ddf * ddf.deta
}), list( .ldof = ldof, .edof = edof ))),
weight = eval(substitute(expression({
@@ -3418,7 +3461,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
tmp6 = DDS(Dof)
edl2.dnu2 <- 0.5 * (tmp6 * (const2 * tmp6 - 2 / (Dof + 1)) - DDSp(Dof))
- wz <- w * edl2.dnu2 * ddf.deta^2
+ wz <- c(w) * edl2.dnu2 * ddf.deta^2
wz
}), list( .ldof = ldof, .edof = edof ))))
}
@@ -3452,10 +3495,10 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
studentt3 <- function(llocation = "identity", elocation = list(),
- lscale = "loge", escale = list(),
- ldf = "loglog", edf = list(),
+ lscale = "loge", escale = list(),
+ ldf = "loglog", edf = list(),
ilocation = NULL, iscale = NULL, idf = NULL,
- method.init = 1,
+ imethod = 1,
zero = -(2:3))
{
@@ -3477,9 +3520,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
ldof <- as.character(substitute(ldof))
if (!is.list(edof)) edof <- list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (length(iloc))
if (!is.Numeric(iloc))
@@ -3531,8 +3574,8 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
if (!length(etastart)) {
init.loc <- if (length( .iloc )) .iloc else {
- if ( .method.init == 2) apply(y, 2, median) else
- if ( .method.init == 3) y else {
+ if ( .imethod == 2) apply(y, 2, median) else
+ if ( .imethod == 3) y else {
colSums(w * y) / sum(w)
}
}
@@ -3562,7 +3605,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
}), list( .lloc = lloc, .eloc = eloc, .iloc = iloc,
.lsca = lsca, .esca = esca, .isca = isca,
.ldof = ldof, .edof = edof, .idof = idof,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
NOS <- extra$NOS
Musual <- extra$Musual
@@ -3592,12 +3635,12 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
}
misc$Musual <- Musual
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$expected = TRUE
}), list( .lloc = lloc, .eloc = eloc,
.lsca = lsca, .esca = esca,
.ldof = ldof, .edof = edof,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
NOS <- extra$NOS
@@ -3634,9 +3677,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
(Dof+1) * zedd^2 / (Dof^2 * (1 + temp1)) +
digamma((Dof+1)/2) - digamma(Dof/2))
- ans <- w * cbind(dl.dloc * dloc.deta,
- dl.dsca * dsca.deta,
- dl.ddof * ddof.deta)
+ ans <- c(w) * cbind(dl.dloc * dloc.deta,
+ dl.dsca * dsca.deta,
+ dl.ddof * ddof.deta)
ans <- ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
}), list( .lloc = lloc, .eloc = eloc,
@@ -3682,7 +3725,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
while (all(wz[, ncol(wz)] == 0))
wz <- wz[, -ncol(wz)]
- w * wz
+ c(w) * wz
}), list( .lloc = lloc, .eloc = eloc,
.lsca = lsca, .esca = esca,
.ldof = ldof, .edof = edof ))))
@@ -3694,9 +3737,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
studentt2 <- function(df = Inf,
llocation = "identity", elocation = list(),
- lscale = "loge", escale = list(),
+ lscale = "loge", escale = list(),
ilocation = NULL, iscale = NULL,
- method.init = 1,
+ imethod = 1,
zero = -2)
{
@@ -3719,9 +3762,9 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
if (!is.Numeric(doff, posit = TRUE))
stop("argument 'df' must be positive")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("argument 'method.init' must be 1 or 2 or 3")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (length(iloc))
if (!is.Numeric(iloc))
@@ -3768,8 +3811,8 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
if (!length(etastart)) {
init.loc <- if (length( .iloc )) .iloc else {
- if ( .method.init == 2) apply(y, 2, median) else
- if ( .method.init == 3) y else {
+ if ( .imethod == 2) apply(y, 2, median) else
+ if ( .imethod == 3) y else {
colSums(w * y) / sum(w)
}
}
@@ -3788,7 +3831,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
}), list( .lloc = lloc, .eloc = eloc, .iloc = iloc,
.lsca = lsca, .esca = esca, .isca = isca,
.doff = doff,
- .method.init = method.init ))),
+ .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
NOS <- extra$NOS
Musual <- extra$Musual
@@ -3816,12 +3859,12 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
misc$Musual <- Musual
misc$simEIM <- TRUE
misc$df <- .doff
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$expected = TRUE
}), list( .lloc = lloc, .eloc = eloc,
.lsca = lsca, .esca = esca,
.doff = doff,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
NOS <- extra$NOS
@@ -3855,8 +3898,8 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
dl.dlocat[!is.finite(Dof)] <- zedd / Sca # Adjust for df=Inf
dl.dscale <- zedd * dl.dlocat - 1 / Sca
- ans <- w * cbind(dl.dlocat * dlocat.deta,
- dl.dscale * dscale.deta)
+ ans <- c(w) * cbind(dl.dlocat * dlocat.deta,
+ dl.dscale * dscale.deta)
ans <- ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
}), list( .lloc = lloc, .eloc = eloc,
@@ -3877,7 +3920,7 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
wz = matrix(as.numeric(NA), n, M) #2=M; diagonal!
wz[, Musual*(1:NOS) - 1] = ed2l.dlocat2 * dlocat.deta^2
wz[, Musual*(1:NOS) ] = ed2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .lloc = lloc, .eloc = eloc,
.lsca = lsca, .esca = esca,
.doff = doff ))))
@@ -3933,12 +3976,12 @@ nbmud = function(lmu = c("loge","identity","reciprocal"),
mydf <- eta2theta(eta, .link, earg = .earg)
dl.dv <- (log(y / 2) - digamma(mydf / 2)) / 2
dv.deta <- dtheta.deta(mydf, .link, earg = .earg)
- w * dl.dv * dv.deta
+ c(w) * dl.dv * dv.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.dv2 <- -trigamma(mydf / 2) / 4
wz <- -ed2l.dv2 * dv.deta^2
- wz * w
+ c(w) * wz
}), list( .link = link, .earg = earg ))))
}
@@ -4023,7 +4066,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
simplex = function(lmu = "logit", lsigma = "loge",
emu = list(), esigma = list(),
imu = NULL, isigma = NULL,
- method.init = 1, shrinkage.init = 0.95,
+ imethod = 1, shrinkage.init = 0.95,
zero = 2) {
@@ -4031,13 +4074,16 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
lmu = as.character(substitute(lmu))
if (mode(lsigma) != "character" && mode(lsigma) != "name")
lsigma = as.character(substitute(lsigma))
+
if (!is.list(emu)) emu = list()
if (!is.list(esigma)) esigma = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3)
- stop("'method.init' must be 1 or 2 or 3")
+
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3)
+ stop("argument 'imethod' must be 1 or 2 or 3")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
+
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
@@ -4069,15 +4115,15 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
(((y - mu) / (mu * (1 - mu)))^2) / (y * (1 - y))
if (!length(etastart)) {
- use.this = if ( .method.init == 3) weighted.mean(y, w) else
- if ( .method.init == 1) median(y) else
+ use.this = if ( .imethod == 3) weighted.mean(y, w) else
+ if ( .imethod == 1) median(y) else
mean(y, trim = 0.1)
init.mu = (1 - .sinit) * y + .sinit * use.this
mu.init = rep(if (length( .imu )) .imu else init.mu, length = n)
sigma.init = if (length( .isigma )) rep( .isigma, leng = n) else {
use.this = deeFun(y, mu=init.mu)
- rep(sqrt( if ( .method.init == 3) weighted.mean(use.this, w) else
- if ( .method.init == 1) median(use.this) else
+ rep(sqrt( if ( .imethod == 3) weighted.mean(use.this, w) else
+ if ( .imethod == 1) median(use.this) else
mean(use.this, trim = 0.1)),
length = n)
}
@@ -4087,7 +4133,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
}), list( .lmu = lmu, .lsigma = lsigma,
.emu = emu, .esigma = esigma,
.imu = imu, .isigma = isigma,
- .sinit = shrinkage.init, .method.init = method.init ))),
+ .sinit = shrinkage.init, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
eta2theta(eta[,1], .lmu, earg = .emu)
}, list( .lmu = lmu, .emu = emu ))),
@@ -4096,19 +4142,18 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
misc$earg = list(mu = .emu, sigma = .esigma)
misc$imu = .imu
misc$isigma = .isigma
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$shrinkage.init = .sinit
}), list( .lmu = lmu, .lsigma = lsigma,
.imu = imu, .isigma = isigma,
.emu = emu, .esigma = esigma,
- .sinit = shrinkage.init, .method.init = method.init ))),
+ .sinit = shrinkage.init, .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
sigma = eta2theta(eta[,2], .lsigma, earg = .esigma)
- if (residuals)
- stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dsimplex(y, mu, sigma, log = TRUE))
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dsimplex(x = y, mu = mu, dispersion = sigma, log = TRUE))
}
}, list( .lsigma = lsigma, .emu = emu,
.esigma = esigma ))),
@@ -4132,7 +4177,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
eim11 = 3 / (mu * (1 - mu)) + 1 / (sigma^2 * (mu * (1 - mu))^3)
wz[, iam(1, 1, M)] = eim11 * dmu.deta^2
wz[, iam(2, 2, M)] = (2 / sigma^2) * dsigma.deta^2
- w * wz
+ c(w) * wz
}), list( .lmu = lmu, .lsigma = lsigma,
.emu = emu, .esigma = esigma ))))
}
@@ -4145,7 +4190,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
rig = function(lmu = "identity", llambda = "loge",
- emu = list(), elambda=list(), imu = NULL, ilambda=1)
+ emu = list(), elambda = list(), imu = NULL, ilambda=1)
{
if (mode(lmu) != "character" && mode(lmu) != "name")
@@ -4245,7 +4290,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
for(ii in 1:ncol(wz))
wz[,ii] = sum(wz[,ii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
@@ -4281,33 +4326,33 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
median(y), length = n)
etastart = theta2eta(theta.init, .link.theta, earg = .earg)
}
- }), list( .link.theta=link.theta, .earg = earg,
+ }), list( .link.theta = link.theta, .earg = earg,
.init.theta=init.theta ))),
inverse = eval(substitute(function(eta, extra = NULL) {
theta = eta2theta(eta, .link.theta, earg = .earg)
tan(theta)
- }, list( .link.theta=link.theta, .earg = earg ))),
+ }, list( .link.theta = link.theta, .earg = earg ))),
last = eval(substitute(expression({
misc$link = c(theta= .link.theta )
misc$earg = list(theta= .earg )
misc$expected = TRUE
- }), list( .link.theta=link.theta, .earg = earg ))),
+ }), list( .link.theta = link.theta, .earg = earg ))),
loglikelihood = eval(substitute(function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
theta = eta2theta(eta, .link.theta, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else
sum(w * (theta*y + log(cos(theta)) - log(cosh(pi*y/2 ))))
- }, list( .link.theta=link.theta, .earg = earg ))),
+ }, list( .link.theta = link.theta, .earg = earg ))),
vfamily = c("hypersecant"),
deriv = eval(substitute(expression({
theta = eta2theta(eta, .link.theta, earg = .earg)
dl.dthetas = y - tan(theta)
dparam.deta = dtheta.deta(theta, .link.theta, earg = .earg)
- w * dl.dthetas * dparam.deta
- }), list( .link.theta=link.theta, .earg = earg ))),
+ c(w) * dl.dthetas * dparam.deta
+ }), list( .link.theta = link.theta, .earg = earg ))),
weight = expression({
d2l.dthetas2 = 1 / cos(theta)^2
- wz = w * d2l.dthetas2 * dparam.deta^2
+ wz = c(w) * d2l.dthetas2 * dparam.deta^2
wz
}))
}
@@ -4345,34 +4390,34 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
etastart = theta2eta(theta.init, .link.theta, earg = .earg)
}
- }), list( .link.theta=link.theta, .earg = earg,
+ }), list( .link.theta = link.theta, .earg = earg,
.init.theta=init.theta ))),
inverse = eval(substitute(function(eta, extra = NULL) {
theta = eta2theta(eta, .link.theta, earg = .earg)
0.5 + theta/pi
- }, list( .link.theta=link.theta, .earg = earg ))),
+ }, list( .link.theta = link.theta, .earg = earg ))),
last = eval(substitute(expression({
misc$link = c(theta= .link.theta)
misc$earg = list(theta= .earg )
misc$expected = TRUE
- }), list( .link.theta=link.theta, .earg = earg ))),
+ }), list( .link.theta = link.theta, .earg = earg ))),
loglikelihood = eval(substitute(function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
theta = eta2theta(eta, .link.theta, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else
sum(w * (log(cos(theta)) + (-0.5+theta/pi)*log(y) +
(-0.5-theta/pi)*log1p(-y )))
- }, list( .link.theta=link.theta, .earg = earg ))),
+ }, list( .link.theta = link.theta, .earg = earg ))),
vfamily = c("hypersecant.1"),
deriv = eval(substitute(expression({
theta = eta2theta(eta, .link.theta, earg = .earg)
dl.dthetas = -tan(theta) + log(y/(1-y)) / pi
dparam.deta = dtheta.deta(theta, .link.theta, earg = .earg)
- w * dl.dthetas * dparam.deta
- }), list( .link.theta=link.theta, .earg = earg ))),
+ c(w) * dl.dthetas * dparam.deta
+ }), list( .link.theta = link.theta, .earg = earg ))),
weight = expression({
d2l.dthetas2 = 1 / cos(theta)^2
- wz = w * d2l.dthetas2 * dparam.deta^2
+ wz = c(w) * d2l.dthetas2 * dparam.deta^2
wz
}))
}
@@ -4380,7 +4425,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
leipnik = function(lmu = "logit", llambda = "loge",
- emu = list(), elambda=list(), imu = NULL, ilambda = NULL)
+ emu = list(), elambda = list(), imu = NULL, ilambda = NULL)
{
@@ -4446,10 +4491,11 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
vfamily = c("leipnik"),
deriv = eval(substitute(expression({
lambda = eta2theta(eta[,2], .llambda, earg = .elambda)
- dl.dthetas = w * cbind(dl.dmu = lambda*(y-mu) / (y*(1-y)+(y-mu)^2),
- dl.dlambda= -0.5 * log1p((y-mu)^2 / (y*(1-y))) -
- 0.5*digamma((lambda+1)/2) +
- 0.5*digamma(1+lambda/2))
+ dl.dthetas =
+ c(w) * cbind(dl.dmu = lambda*(y-mu) / (y*(1-y)+(y-mu)^2),
+ dl.dlambda= -0.5 * log1p((y-mu)^2 / (y*(1-y))) -
+ 0.5*digamma((lambda+1)/2) +
+ 0.5*digamma(1+lambda/2))
dmu.deta = dtheta.deta(mu, .lmu, earg = .emu)
dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda)
dtheta.detas = cbind(dmu.deta, dlambda.deta)
@@ -4460,10 +4506,10 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
if (is.R()) {
denominator = y*(1-y) + (y-mu)^2
d2l.dthetas2 = array(NA, c(n,2,2))
- d2l.dthetas2[,1,1] = w * lambda*(-y*(1-y)+(y-mu)^2)/denominator^2
+ d2l.dthetas2[,1,1] = c(w) * lambda*(-y*(1-y)+(y-mu)^2)/denominator^2
d2l.dthetas2[,1,2] =
- d2l.dthetas2[,2,1] = w * (y-mu) / denominator
- d2l.dthetas2[,2,2] = w * (-0.25*trigamma((lambda+1)/2) +
+ d2l.dthetas2[,2,1] = c(w) * (y-mu) / denominator
+ d2l.dthetas2[,2,2] = c(w) * (-0.25*trigamma((lambda+1)/2) +
0.25*trigamma(1+lambda/2))
} else {
d2l.dthetas2 = attr(eval.d3, "hessian")
@@ -4486,7 +4532,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
for(ii in 1:ncol(wz))
wz[,ii] = sum(wz[,ii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
@@ -4501,7 +4547,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
invbinomial = function(lrho = "elogit", llambda = "loge",
erho=if (lrho == "elogit") list(min = 0.5, max = 1) else list(),
- elambda=list(),
+ elambda = list(),
irho = NULL,
ilambda = NULL,
zero = NULL)
@@ -4580,7 +4626,8 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
log(rho)
drho.deta = dtheta.deta(rho, .lrho, earg = .erho)
dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda)
- w * cbind( dl.drho * drho.deta, dl.dlambda * dlambda.deta )
+ c(w) * cbind(dl.drho * drho.deta,
+ dl.dlambda * dlambda.deta )
}), list( .llambda = llambda, .lrho=lrho,
.elambda = elambda, .erho=erho ))),
weight = eval(substitute(expression({
@@ -4594,7 +4641,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
d2rhodeta2 = d2theta.deta2(rho, .lrho, earg = .erho)
d2lambda.deta2 = d2theta.deta2(lambda, .llambda, earg = .elambda)
- wz = w * wz
+ wz = c(w) * wz
if (intercept.only) {
pooled.weight = TRUE
@@ -4616,7 +4663,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
etheta = list(),
ilambda = NULL, itheta = NULL,
use.approx = TRUE,
- method.init = 1, zero=1)
+ imethod = 1, zero=1)
{
@@ -4628,9 +4675,9 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
stop("bad input for argument 'zero'")
if (!is.list(elambda)) elambda = list()
if (!is.list(etheta)) etheta = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (!is.logical(use.approx) || length(use.approx) != 1)
stop("'use.approx' must be logical value")
@@ -4650,9 +4697,9 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
predictors.names =
c(namesof("lambda", .llambda, earg = .elambda, tag = FALSE),
namesof("theta", .ltheta, earg = .etheta, tag = FALSE))
- init.lambda = if ( .method.init == 1)
+ init.lambda = if ( .imethod == 1)
1 - sqrt(weighted.mean(y,w) / var(y)) else 0.5
- init.theta = if ( .method.init == 1)
+ init.theta = if ( .imethod == 1)
sqrt((0.01+weighted.mean(y,w)^3)/var(y)) else
median(y)*(1-init.lambda)
if (init.theta <= 0)
@@ -4674,7 +4721,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
}
}), list( .ltheta=ltheta, .llambda = llambda,
.etheta=etheta, .elambda = elambda,
- .method.init = method.init,
+ .imethod = imethod,
.itheta=itheta, .ilambda=ilambda )) ),
inverse = eval(substitute(function(eta, extra = NULL) {
lambda = eta2theta(eta[,1], .llambda, earg = .elambda)
@@ -4711,7 +4758,8 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
dl.dtheta = -1 + (y-1)/(theta+y*lambda) + 1/theta
dTHETA.deta = dtheta.deta(theta, .ltheta, earg = .etheta)
dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda)
- w * cbind( dl.dlambda * dlambda.deta, dl.dtheta * dTHETA.deta )
+ c(w) * cbind(dl.dlambda * dlambda.deta,
+ dl.dtheta * dTHETA.deta )
}), list( .ltheta=ltheta, .llambda = llambda,
.etheta=etheta, .elambda = elambda ))),
weight = eval(substitute(expression({
@@ -4724,7 +4772,7 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
wz[,iam(1,1,M)] = d2l.dlambda2 * dlambda.deta^2
wz[,iam(2,2,M)] = d2l.dtheta2 * dTHETA.deta^2
wz[,iam(1,2,M)] = d2l.dthetalambda * dTHETA.deta * dlambda.deta
- wz = w * wz
+ wz = c(w) * wz
} else {
d2l.dlambda2 = -y^2 * (y-1) / (theta+y*lambda)^2
d2l.dtheta2 = -(y-1)/(theta+y*lambda)^2 - 1 / theta^2
@@ -4737,14 +4785,14 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
d2lambdadeta2 = d2theta.deta2(lambda, .llambda, earg = .elambda)
wz[,iam(1,1,M)] = wz[,iam(1,1,M)] - dl.dlambda * d2lambdadeta2
wz[,iam(2,2,M)] = wz[,iam(2,2,M)] - dl.dtheta * d2THETA.deta2
- wz = w * wz
+ wz = c(w) * wz
if (intercept.only) {
sumw = sum(w)
for(ii in 1:ncol(wz))
wz[,ii] = sum(wz[,ii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
}
@@ -4759,39 +4807,47 @@ rsimplex = function(n, mu = 0.5, dispersion = 1) {
-dlgamma = function(x, location=0, scale=1, k=1, log = FALSE) {
- if (!is.logical(log.arg <- log))
- stop("bad input for argument 'log'")
- rm(log)
+dlgamma = function(x, location = 0, scale = 1, k = 1, log = FALSE) {
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
- if (!is.Numeric(scale, posit = TRUE)) stop("bad input for argument 'scale'")
- if (!is.Numeric(k, posit = TRUE)) stop("bad input for argument 'k'")
- z = (x-location) / scale
- if (log.arg) {
- k * z - exp(z) - log(scale) - lgamma(k)
- } else {
- exp(k * z - exp(z)) / (scale * gamma(k))
- }
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("bad input for argument 'scale'")
+ if (!is.Numeric(k, posit = TRUE))
+ stop("bad input for argument 'k'")
+ z = (x-location) / scale
+ if (log.arg) {
+ k * z - exp(z) - log(scale) - lgamma(k)
+ } else {
+ exp(k * z - exp(z)) / (scale * gamma(k))
+ }
}
-plgamma = function(q, location=0, scale=1, k=1) {
- if (!is.Numeric(scale, posit = TRUE)) stop("bad input for argument 'scale'")
- if (!is.Numeric(k, posit = TRUE)) stop("bad input for argument 'k'")
- z = (q-location)/scale
- pgamma(exp(z), k)
+plgamma = function(q, location = 0, scale = 1, k=1) {
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("bad input for argument 'scale'")
+ if (!is.Numeric(k, posit = TRUE))
+ stop("bad input for argument 'k'")
+ z = (q-location)/scale
+ pgamma(exp(z), k)
}
-qlgamma = function(p, location=0, scale=1, k=1) {
- if (!is.Numeric(scale, posit = TRUE)) stop("bad input for argument 'scale'")
- if (!is.Numeric(k, posit = TRUE)) stop("bad input for argument 'k'")
- q = qgamma(p, k)
- location + scale * log(q)
+qlgamma = function(p, location = 0, scale = 1, k=1) {
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("bad input for argument 'scale'")
+ if (!is.Numeric(k, posit = TRUE))
+ stop("bad input for argument 'k'")
+ q = qgamma(p, k)
+ location + scale * log(q)
}
-rlgamma = function(n, location=0, scale=1, k=1) {
- if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
- stop("bad input for argument 'n'")
- if (!is.Numeric(scale, posit = TRUE)) stop("bad input for argument 'scale'")
- if (!is.Numeric(k, posit = TRUE)) stop("bad input for argument 'k'")
- y = rgamma(n, k)
- location + scale * log(y)
+rlgamma = function(n, location = 0, scale = 1, k=1) {
+ if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
+ stop("bad input for argument 'n'")
+ if (!is.Numeric(scale, posit = TRUE))
+ stop("bad input for argument 'scale'")
+ if (!is.Numeric(k, posit = TRUE))
+ stop("bad input for argument 'k'")
+ y = rgamma(n, k)
+ location + scale * log(y)
}
@@ -4833,7 +4889,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
kk = eta2theta(eta, .link, earg = .earg)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dlgamma(x=y, location=0, scale=1, k=kk, log = TRUE))
+ sum(w * dlgamma(x = y, location = 0, scale = 1, k=kk, log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("lgammaff"),
@@ -4841,11 +4897,11 @@ rlgamma = function(n, location=0, scale=1, k=1) {
k = eta2theta(eta, .link, earg = .earg)
dl.dk = y - digamma(k)
dk.deta = dtheta.deta(k, .link, earg = .earg)
- w * dl.dk * dk.deta
+ c(w) * dl.dk * dk.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.dk2 = trigamma(k)
- wz = w * dk.deta^2 * ed2l.dk2
+ wz = c(w) * dk.deta^2 * ed2l.dk2
wz
}), list( .link = link, .earg = earg ))))
}
@@ -4858,7 +4914,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
lgamma3ff = function(llocation = "identity", lscale = "loge", lshape = "loge",
elocation = list(), escale = list(), eshape = list(),
- ilocation = NULL, iscale = NULL, ishape=1, zero = NULL)
+ ilocation = NULL, iscale = NULL, ishape = 1, zero = NULL)
{
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
@@ -4928,7 +4984,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
kk = eta2theta(eta[,3], .lshape, earg = .eshape)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dlgamma(x=y, location=aa, scale=bb, k=kk, log = TRUE))
+ sum(w * dlgamma(x = y, location=aa, scale=bb, k=kk, log = TRUE))
}
}, list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape ))),
@@ -4944,7 +5000,9 @@ rlgamma = function(n, location=0, scale=1, k=1) {
da.deta = dtheta.deta(a, .llocation, earg = .elocation)
db.deta = dtheta.deta(b, .lscale, earg = .escale)
dk.deta = dtheta.deta(k, .lshape, earg = .eshape)
- w * cbind(dl.da * da.deta, dl.db * db.deta, dl.dk * dk.deta)
+ c(w) * cbind(dl.da * da.deta,
+ dl.db * db.deta,
+ dl.dk * dk.deta)
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -4961,7 +5019,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
wz[,iam(1,2,M)] = ed2l.dadb * da.deta * db.deta
wz[,iam(1,3,M)] = ed2l.dadk * da.deta * dk.deta
wz[,iam(2,3,M)] = ed2l.dbdk * db.deta * dk.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape ))))
@@ -5060,7 +5118,9 @@ rlgamma = function(n, location=0, scale=1, k=1) {
da.deta = dtheta.deta(a, .llocation, earg = .elocation)
db.deta = dtheta.deta(b, .lscale, earg = .escale)
dk.deta = dtheta.deta(k, .lshape, earg = .eshape)
- w * cbind(dl.da * da.deta, dl.db * db.deta, dl.dk * dk.deta)
+ c(w) * cbind(dl.da * da.deta,
+ dl.db * db.deta,
+ dl.dk * dk.deta)
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -5078,7 +5138,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
wz[,iam(1,2,M)] = ed2l.dadb * da.deta * db.deta
wz[,iam(1,3,M)] = ed2l.dadk * da.deta * dk.deta
wz[,iam(2,3,M)] = ed2l.dbdk * db.deta * dk.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .llocation = llocation, .lscale = lscale, .lshape = lshape,
.elocation = elocation, .escale = escale, .eshape = eshape ))))
@@ -5086,7 +5146,7 @@ rlgamma = function(n, location=0, scale=1, k=1) {
-dgengamma = function(x, scale=1, d=1, k=1, log = FALSE) {
+dgengamma = function(x, scale = 1, d = 1, k = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -5118,7 +5178,7 @@ dgengamma = function(x, scale=1, d=1, k=1, log = FALSE) {
-pgengamma = function(q, scale=1, d=1, k=1) {
+pgengamma = function(q, scale = 1, d = 1, k=1) {
if (!is.Numeric(scale, posit = TRUE))
stop("bad input for argument 'scale'")
if (!is.Numeric(d, posit = TRUE))
@@ -5130,7 +5190,7 @@ pgengamma = function(q, scale=1, d=1, k=1) {
}
-qgengamma = function(p, scale=1, d=1, k=1) {
+qgengamma = function(p, scale = 1, d = 1, k=1) {
if (!is.Numeric(scale, posit = TRUE))
stop("bad input for argument 'scale'")
if (!is.Numeric(d, posit = TRUE))
@@ -5142,7 +5202,7 @@ qgengamma = function(p, scale=1, d=1, k=1) {
}
-rgengamma = function(n, scale=1, d=1, k=1) {
+rgengamma = function(n, scale = 1, d = 1, k=1) {
if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
stop("bad input for 'n'")
if (!is.Numeric(scale, posit = TRUE))
@@ -5158,7 +5218,7 @@ rgengamma = function(n, scale=1, d=1, k=1) {
gengamma = function(lscale = "loge", ld = "loge", lk = "loge",
- escale = list(), ed=list(), ek=list(),
+ escale = list(), ed = list(), ek = list(),
iscale = NULL, id = NULL, ik = NULL, zero = NULL)
{
if (mode(lscale) != "character" && mode(lscale) != "name")
@@ -5230,7 +5290,7 @@ rgengamma = function(n, scale=1, d=1, k=1) {
k = eta2theta(eta[,3], .lk, earg = .ek)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dgengamma(x=y, scale=b, d=d, k=k, log = TRUE))
+ sum(w * dgengamma(x = y, scale=b, d=d, k=k, log = TRUE))
}
}, list( .lscale = lscale, .ld = ld, .lk = lk,
.escale = escale, .ed = ed, .ek = ek ))),
@@ -5247,7 +5307,9 @@ rgengamma = function(n, scale=1, d=1, k=1) {
db.deta = dtheta.deta(b, .lscale, earg = .escale)
dd.deta = dtheta.deta(d, .ld, earg = .ed)
dk.deta = dtheta.deta(k, .lk, earg = .ek)
- w * cbind(dl.db * db.deta, dl.dd * dd.deta, dl.dk * dk.deta)
+ c(w) * cbind(dl.db * db.deta,
+ dl.dd * dd.deta,
+ dl.dk * dk.deta)
}), list( .lscale = lscale, .ld = ld, .lk = lk,
.escale = escale, .ed = ed, .ek = ek ))),
weight = eval(substitute(expression({
@@ -5264,7 +5326,7 @@ rgengamma = function(n, scale=1, d=1, k=1) {
wz[,iam(1,2,M)] = ed2l.dbdd * db.deta * dd.deta
wz[,iam(1,3,M)] = ed2l.dbdk * db.deta * dk.deta
wz[,iam(2,3,M)] = ed2l.dddk * dd.deta * dk.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .lscale = lscale, .ld = ld, .lk = lk,
.escale = escale, .ed = ed, .ek = ek ))))
@@ -5328,7 +5390,7 @@ plog = function(q, prob, log.p = FALSE) {
seqp = rep(prob, floorq)
onevector = (seqp^seqq / seqq) / (-log1p(-seqp))
rlist = dotC(name = "tyee_C_cum8sum",
- as.double(onevector), answer=double(N),
+ as.double(onevector), answer = double(N),
as.integer(N), as.double(seqq),
as.integer(length(onevector)), notok=integer(1))
if (rlist$notok != 0) stop("error in 'cum8sum'")
@@ -5388,7 +5450,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
a = -1 / log1p(-prob)
mean = a*prob/(1-prob) # E(Y)
sigma = sqrt(a*prob*(1-a*prob)) / (1-prob) # sd(Y)
- ymax = dlog(x=1, prob)
+ ymax = dlog(x = 1, prob)
while(ptr2 < n) {
Lower = 0.5 # A continuity correction is used = 1 - 0.5.
Upper = mean + 5 * sigma
@@ -5424,7 +5486,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
if (!is.list(earg)) earg = list()
new("vglmff",
- blurb = c("Logarithmic distribution f(y) = a * c^y / y, y=1,2,3,...,\n",
+ blurb = c("Logarithmic distribution f(y) = a * c^y / y, y = 1,2,3,...,\n",
" 0 < c < 1, a = -1 / log(1-c) \n\n",
"Link: ", namesof("c", link, earg = earg), "\n", "\n",
"Mean: a * c / (1 - c)", "\n"),
@@ -5438,7 +5500,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
sum(w * (log(a) + y * log(cc) - log(y)))
}
c.init = if (length( .init.c )) .init.c else
- getInitVals(gvals=seq(0.05, 0.95, len=9), llfun=llfun, y=y, w=w)
+ getInitVals(gvals=seq(0.05, 0.95, len=9), llfun=llfun, y = y, w = w)
c.init = rep(c.init, length=length(y))
etastart = theta2eta(c.init, .link, earg = .earg)
}
@@ -5457,8 +5519,9 @@ rlog = function(n, prob, Smallno=1.0e-6) {
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
cc = eta2theta(eta, .link, earg = .earg)
a = -1 / log1p(-cc)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dlog(x=y, prob=-expm1(-1/a), log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dlog(x = y, prob=-expm1(-1/a), log = TRUE))
}
}, list( .link = link, .earg = earg ))),
vfamily = c("logff"),
@@ -5467,11 +5530,11 @@ rlog = function(n, prob, Smallno=1.0e-6) {
a = -1 / log1p(-cc)
dl.dc = 1 / ((1-cc) * log1p(-cc)) + y / cc
dc.deta = dtheta.deta(cc, .link, earg = .earg)
- w * dl.dc * dc.deta
+ c(w) * dl.dc * dc.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.dc2 = a * (1 - a * cc) / (cc * (1-cc)^2)
- wz = w * dc.deta^2 * ed2l.dc2
+ wz = c(w) * dc.deta^2 * ed2l.dc2
wz
}), list( .link = link, .earg = earg ))))
}
@@ -5530,7 +5593,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
if ( .delta.known) NULL else delta.init)
}
- }), list( .link.gamma=link.gamma, .earg = earg,
+ }), list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta,
.idelta=idelta,
@@ -5542,17 +5605,17 @@ rlog = function(n, prob, Smallno=1.0e-6) {
NA * mygamma
- }, list( .link.gamma=link.gamma, .earg = earg,
+ }, list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta ))),
last = eval(substitute(expression({
misc$link = if ( .delta.known) NULL else c(delta = "identity")
misc$link = c(gamma = .link.gamma, misc$link)
misc$earg = if ( .delta.known) list(gamma = .earg) else
- list(gamma = .earg, delta=list())
+ list(gamma = .earg, delta = list())
if ( .delta.known)
misc$delta = .delta
- }), list( .link.gamma=link.gamma, .earg = earg,
+ }), list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta ))),
loglikelihood = eval(substitute(
@@ -5560,9 +5623,10 @@ rlog = function(n, prob, Smallno=1.0e-6) {
eta = as.matrix(eta)
mygamma = eta2theta(eta[,1], .link.gamma, earg = .earg)
delta = if ( .delta.known) .delta else eta[,2]
- if (residuals) stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w * 0.5 * (log(mygamma) -3*log(y-delta) - mygamma / (y-delta )))
- }, list( .link.gamma=link.gamma, .earg = earg,
+ }, list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta ))),
vfamily = c("levy"),
@@ -5574,9 +5638,9 @@ rlog = function(n, prob, Smallno=1.0e-6) {
dl.ddelta = (3 - mygamma / (y-delta)) / (2 * (y-delta))
dl.dgamma = 0.5 * (1 / mygamma - 1 / (y-delta))
dgamma.deta = dtheta.deta(mygamma, .link.gamma, earg = .earg)
- w * cbind(dl.dgamma * dgamma.deta,
- if ( .delta.known) NULL else dl.ddelta)
- }), list( .link.gamma=link.gamma, .earg = earg,
+ c(w) * cbind(dl.dgamma * dgamma.deta,
+ if ( .delta.known) NULL else dl.ddelta)
+ }), list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta ))),
weight = eval(substitute(expression({
@@ -5586,9 +5650,9 @@ rlog = function(n, prob, Smallno=1.0e-6) {
wz[,iam(1,2,M)] = 3 * dgamma.deta
wz[,iam(2,2,M)] = 21
}
- wz = w * wz / (2 * mygamma^2)
+ wz = c(w) * wz / (2 * mygamma^2)
wz
- }), list( .link.gamma=link.gamma, .earg = earg,
+ }), list( .link.gamma = link.gamma, .earg = earg,
.delta.known=delta.known,
.delta=delta ))))
}
@@ -5599,7 +5663,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
if (FALSE)
stoppa = function(y0,
link.alpha = "loge",
- link.theta = "loge", ealpha=list(), etheta = list(),
+ link.theta = "loge", ealpha = list(), etheta = list(),
ialpha = NULL,
itheta=1.0,
zero = NULL)
@@ -5636,7 +5700,7 @@ rlog = function(n, prob, Smallno=1.0e-6) {
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.theta = if (length( .itheta)) .itheta else 1
xvec = log1p(-qvec^(1/init.theta))
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec))-log(y0), intercept = FALSE)
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec))-log(y0), intercept = FALSE)
}
extra$y0 = y0
@@ -5647,25 +5711,26 @@ rlog = function(n, prob, Smallno=1.0e-6) {
etastart = cbind(theta2eta(alpha, .link.alpha, earg = .ealpha),
theta2eta(theta, .link.theta, earg = .etheta))
}
- }), list( .link.theta=link.theta, .link.alpha=link.alpha,
+ }), list( .link.theta = link.theta, .link.alpha = link.alpha,
.y0=y0,
.itheta=itheta, .ialpha=ialpha ))),
inverse = eval(substitute(function(eta, extra = NULL) {
alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
theta = eta2theta(eta[,2], .link.theta, earg = .etheta)
theta * extra$y0 * beta(1-1/alpha, theta)
- }, list( .link.theta=link.theta, .link.alpha=link.alpha ))),
+ }, list( .link.theta = link.theta, .link.alpha = link.alpha ))),
last = eval(substitute(expression({
misc$link = c(alpha= .link.alpha, theta= .link.theta)
- }), list( .link.theta=link.theta, .link.alpha=link.alpha ))),
+ }), list( .link.theta = link.theta, .link.alpha = link.alpha ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
theta = eta2theta(eta[,2], .link.theta, earg = .etheta)
- if (residuals) stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w*(log(theta*alpha) + alpha*log(extra$y0) -(alpha+1)*log(y)+
(theta-1) * log1p(-(y/extra$y0)^(-alpha))))
- }, list( .link.theta=link.theta, .link.alpha=link.alpha ))),
+ }, list( .link.theta = link.theta, .link.alpha = link.alpha ))),
vfamily = c("stoppa"),
deriv = eval(substitute(expression({
alpha = eta2theta(eta[,1], .link.alpha, earg = .ealpha)
@@ -5678,8 +5743,9 @@ rlog = function(n, prob, Smallno=1.0e-6) {
dl.dtheta = 1/theta + temp8b
dalpha.deta = dtheta.deta(alpha, .link.alpha, earg = .ealpha)
dTHETA.deta = dtheta.deta(theta, .link.theta, earg = .etheta)
- w * cbind( dl.dalpha * dalpha.deta, dl.dtheta * dTHETA.deta )
- }), list( .link.theta=link.theta, .link.alpha=link.alpha ))),
+ c(w) * cbind( dl.dalpha * dalpha.deta,
+ dl.dtheta * dTHETA.deta )
+ }), list( .link.theta = link.theta, .link.alpha = link.alpha ))),
weight = eval(substitute(expression({
ed2l.dalpha = 1/alpha^2 + theta * (2 * log(extra$y0) * (digamma(2)-
digamma(theta+4)) - (trigamma(1) +
@@ -5691,20 +5757,20 @@ rlog = function(n, prob, Smallno=1.0e-6) {
wz[,iam(1,1,M)] = ed2l.dalpha * dalpha.deta^2
wz[,iam(2,2,M)] = ed2l.dtheta * dTHETA.deta^2
wz[,iam(1,2,M)] = ed2l.dalpha * dTHETA.deta * dalpha.deta
- wz = w * wz
+ wz = c(w) * wz
wz
- }), list( .link.theta=link.theta, .link.alpha=link.alpha ))) )
+ }), list( .link.theta = link.theta, .link.alpha = link.alpha ))) )
}
-dlino = function(x, shape1, shape2, lambda=1, log = FALSE) {
+dlino = function(x, shape1, shape2, lambda = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
- loglik = dbeta(x=x, shape1=shape1, shape2=shape2, log = TRUE) +
+ loglik = dbeta(x = x, shape1=shape1, shape2=shape2, log = TRUE) +
shape1 * log(lambda) -
(shape1+shape2) * log1p(-(1-lambda)*x)
if (log.arg) loglik else exp(loglik)
@@ -5742,7 +5808,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
stop("bad input for argument 'shape2'")
if (!is.Numeric(lambda, posit = TRUE))
stop("bad input for argument 'lambda'")
- Y = rbeta(n=n, shape1=shape1, shape2=shape2)
+ Y = rbeta(n = n, shape1=shape1, shape2=shape2)
Y / (lambda + (1-lambda)*Y)
}
@@ -5751,8 +5817,8 @@ rlino = function(n, shape1, shape2, lambda=1) {
lino = function(lshape1 = "loge",
lshape2 = "loge",
llambda = "loge",
- eshape1=list(), eshape2=list(), elambda=list(),
- ishape1 = NULL, ishape2 = NULL, ilambda=1, zero = NULL)
+ eshape1 = list(), eshape2 = list(), elambda = list(),
+ ishape1 = NULL, ishape2 = NULL, ilambda = 1, zero = NULL)
{
if (mode(lshape1) != "character" && mode(lshape1) != "name")
lshape1 = as.character(substitute(lshape1))
@@ -5817,7 +5883,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
.eshape1 = eshape1, .eshape2 = eshape2, .elambda = elambda ))),
last = eval(substitute(expression({
misc$link = c(shape1 = .lshape1, shape2 = .lshape2, lambda = .llambda)
- misc$earg =list(shape1 = .eshape1, shape2 = .eshape2, lambda = .elambda)
+ misc$earg = list(shape1 = .eshape1, shape2 = .eshape2, lambda = .elambda)
}), list( .lshape1 = lshape1, .lshape2 = lshape2, .llambda = llambda,
.eshape1 = eshape1, .eshape2 = eshape2, .elambda = elambda ))),
loglikelihood = eval(substitute(
@@ -5825,7 +5891,8 @@ rlino = function(n, shape1, shape2, lambda=1) {
sh1 = eta2theta(eta[,1], .lshape1, earg = .eshape1)
sh2 = eta2theta(eta[,2], .lshape2, earg = .eshape2)
lambda = eta2theta(eta[,3], .llambda, earg = .elambda)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
sum(w * dlino(y, shape1=sh1, shape2=sh2, lambda=lambda, log = TRUE))
}
}, list( .lshape1 = lshape1, .lshape2 = lshape2, .llambda = llambda,
@@ -5843,9 +5910,9 @@ rlino = function(n, shape1, shape2, lambda=1) {
dsh1.deta = dtheta.deta(sh1, .lshape1, earg = .eshape1)
dsh2.deta = dtheta.deta(sh2, .lshape2, earg = .eshape2)
dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda)
- w * cbind( dl.dsh1 * dsh1.deta,
- dl.dsh2 * dsh2.deta,
- dl.dlambda * dlambda.deta)
+ c(w) * cbind( dl.dsh1 * dsh1.deta,
+ dl.dsh2 * dsh2.deta,
+ dl.dlambda * dlambda.deta)
}), list( .lshape1 = lshape1, .lshape2 = lshape2, .llambda = llambda,
.eshape1 = eshape1, .eshape2 = eshape2, .elambda = elambda ))),
weight = eval(substitute(expression({
@@ -5863,7 +5930,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
wz[,iam(1,2,M)] = ed2l.dsh1sh2 * dsh1.deta * dsh2.deta
wz[,iam(1,3,M)] = ed2l.dsh1lambda * dsh1.deta * dlambda.deta
wz[,iam(2,3,M)] = ed2l.dsh2lambda * dsh2.deta * dlambda.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .lshape1 = lshape1, .lshape2 = lshape2, .llambda = llambda,
.eshape1 = eshape1, .eshape2 = eshape2, .elambda = elambda ))))
@@ -5874,8 +5941,8 @@ rlino = function(n, shape1, shape2, lambda=1) {
link.scale = "loge",
link.p = "loge",
link.q = "loge",
- earg.a=list(), earg.scale = list(),
- earg.p=list(), earg.q=list(),
+ earg.a = list(), earg.scale = list(),
+ earg.p = list(), earg.q = list(),
init.a = NULL,
init.scale = NULL,
init.p=1.0,
@@ -5920,7 +5987,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.q = if (length( .init.q)) .init.q else 1
xvec = log( (1-qvec)^(-1/ init.q ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -5936,7 +6003,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
theta2eta(qq, .link.q, earg = .earg.q))
}
}), list( .link.a = link.a, .link.scale = link.scale,
- .link.p=link.p, .link.q=link.q,
+ .link.p = link.p, .link.q = link.q,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
.init.a = init.a, .init.scale = init.scale,
@@ -5950,7 +6017,7 @@ rlino = function(n, shape1, shape2, lambda=1) {
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
last = eval(substitute(expression({
misc$link = c(a= .link.a, scale= .link.scale,
p= .link.p, q= .link.q)
@@ -5959,21 +6026,22 @@ rlino = function(n, shape1, shape2, lambda=1) {
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = eta2theta(eta[,1], .link.a, earg = .earg.a)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = eta2theta(eta[,3], .link.p, earg = .earg.p)
qq = eta2theta(eta[,4], .link.q, earg = .earg.q)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
sum(w*(log(aa) + (aa*parg-1)*log(y) - aa*parg*log(scale) +
-lbeta(parg, qq) - (parg+qq)*log1p((y/scale)^aa)))
}
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
vfamily = c("genbetaII"),
deriv = eval(substitute(expression({
aa = eta2theta(eta[,1], .link.a, earg = .earg.a)
@@ -5996,12 +6064,14 @@ rlino = function(n, shape1, shape2, lambda=1) {
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dp.deta = dtheta.deta(parg, .link.p, earg = .earg.p)
dq.deta = dtheta.deta(qq, .link.q, earg = .earg.q)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta,
- dl.dp * dp.deta, dl.dq * dq.deta )
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta,
+ dl.dp * dp.deta,
+ dl.dq * dq.deta )
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
weight = eval(substitute(expression({
temp5 = trigamma(parg + qq)
temp5a = trigamma(parg)
@@ -6030,40 +6100,40 @@ rlino = function(n, shape1, shape2, lambda=1) {
wz[,iam(2,3,M)] = ed2l.dscalep * dscale.deta * dp.deta
wz[,iam(2,4,M)] = ed2l.dscaleq * dscale.deta * dq.deta
wz[,iam(3,4,M)] = ed2l.dpq * dp.deta * dq.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))))
+ .link.p = link.p, .link.q = link.q ))))
}
-rsinmad <- function(n, a, scale=1, q.arg)
+rsinmad <- function(n, a, scale = 1, q.arg)
qsinmad(runif(n), a, scale, q.arg)
-rlomax <- function(n, scale=1, q.arg)
- rsinmad(n, a=1, scale, q.arg)
+rlomax <- function(n, scale = 1, q.arg)
+ rsinmad(n, a = 1, scale, q.arg)
-rfisk <- function(n, a, scale=1)
+rfisk <- function(n, a, scale = 1)
rsinmad(n, a, scale, q.arg=1)
-rparalogistic <- function(n, a, scale=1)
+rparalogistic <- function(n, a, scale = 1)
rsinmad(n, a, scale, a)
-rdagum <- function(n, a, scale=1, p.arg)
- qdagum(runif(n), a, scale=1, p.arg)
+rdagum <- function(n, a, scale = 1, p.arg)
+ qdagum(runif(n), a, scale = 1, p.arg)
-rinvlomax <- function(n, scale=1, p.arg)
- rdagum(n, a=1, scale, p.arg)
+rinvlomax <- function(n, scale = 1, p.arg)
+ rdagum(n, a = 1, scale, p.arg)
-rinvparalogistic <- function(n, a, scale=1)
+rinvparalogistic <- function(n, a, scale = 1)
rdagum(n, a, scale, a)
-qsinmad <- function(p, a, scale=1, q.arg) {
+qsinmad <- function(p, a, scale = 1, q.arg) {
bad = (p < 0) | (p > 1)
ans = NA * p
a = rep(a, len = length(p))[!bad]
@@ -6074,16 +6144,16 @@ qsinmad <- function(p, a, scale=1, q.arg) {
ans
}
-qlomax <- function(p, scale=1, q.arg)
- qsinmad(p, a=1, scale, q.arg)
+qlomax <- function(p, scale = 1, q.arg)
+ qsinmad(p, a = 1, scale, q.arg)
-qfisk <- function(p, a, scale=1)
+qfisk <- function(p, a, scale = 1)
qsinmad(p, a, scale, q.arg=1)
-qparalogistic <- function(p, a, scale=1)
+qparalogistic <- function(p, a, scale = 1)
qsinmad(p, a, scale, a)
-qdagum <- function(p, a, scale=1, p.arg) {
+qdagum <- function(p, a, scale = 1, p.arg) {
bad = (p < 0) | (p > 1)
ans = NA * p
a = rep(a, len = length(p))[!bad]
@@ -6094,10 +6164,10 @@ qdagum <- function(p, a, scale=1, p.arg) {
ans
}
-qinvlomax <- function(p, scale=1, p.arg)
- qdagum(p, a=1, scale, p.arg)
+qinvlomax <- function(p, scale = 1, p.arg)
+ qdagum(p, a = 1, scale, p.arg)
-qinvparalogistic <- function(p, a, scale=1)
+qinvparalogistic <- function(p, a, scale = 1)
qdagum(p, a, scale, a)
@@ -6105,7 +6175,7 @@ qinvparalogistic <- function(p, a, scale=1)
-psinmad <- function(q, a, scale=1, q.arg) {
+psinmad <- function(q, a, scale = 1, q.arg) {
zero = q <= 0
a = rep(a, len = length(q))[!zero]
scale = rep(scale, len = length(q))[!zero]
@@ -6116,18 +6186,18 @@ psinmad <- function(q, a, scale=1, q.arg) {
ans
}
-plomax = function(q, scale=1, q.arg)
- psinmad(q, a=1, scale, q.arg)
+plomax = function(q, scale = 1, q.arg)
+ psinmad(q, a = 1, scale, q.arg)
-pfisk = function(q, a, scale=1)
+pfisk = function(q, a, scale = 1)
psinmad(q, a, scale, q.arg=1)
-pparalogistic = function(q, a, scale=1)
+pparalogistic = function(q, a, scale = 1)
psinmad(q, a, scale, a)
-pdagum <- function(q, a, scale=1, p.arg) {
+pdagum <- function(q, a, scale = 1, p.arg) {
zero <- q <= 0
a <- rep(a, len = length(q))[!zero]
scale <- rep(scale, len = length(q))[!zero]
@@ -6138,15 +6208,15 @@ pdagum <- function(q, a, scale=1, p.arg) {
ans
}
-pinvlomax <- function(q, scale=1, p.arg)
- pdagum(q, a=1, scale, p.arg)
+pinvlomax <- function(q, scale = 1, p.arg)
+ pdagum(q, a = 1, scale, p.arg)
-pinvparalogistic <- function(q, a, scale=1)
+pinvparalogistic <- function(q, a, scale = 1)
pdagum(q, a, scale, a)
-dsinmad <- function(x, a, scale=1, q.arg, log = FALSE) {
+dsinmad <- function(x, a, scale = 1, q.arg, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -6164,18 +6234,18 @@ dsinmad <- function(x, a, scale=1, q.arg, log = FALSE) {
if (log.arg) Loglik else exp(Loglik)
}
-dlomax <- function(x, scale=1, q.arg, log = FALSE)
- dsinmad(x, a=1, scale, q.arg, log=log)
+dlomax <- function(x, scale = 1, q.arg, log = FALSE)
+ dsinmad(x, a = 1, scale, q.arg, log = log)
-dfisk <- function(x, a, scale=1, log = FALSE)
- dsinmad(x, a, scale, q.arg=1, log=log)
+dfisk <- function(x, a, scale = 1, log = FALSE)
+ dsinmad(x, a, scale, q.arg = 1, log = log)
-dparalogistic <- function(x, a, scale=1, log = FALSE)
- dsinmad(x, a, scale, a, log=log)
+dparalogistic <- function(x, a, scale = 1, log = FALSE)
+ dsinmad(x, a, scale, a, log = log)
-ddagum <- function(x, a, scale=1, p.arg, log = FALSE) {
+ddagum <- function(x, a, scale = 1, p.arg, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -6195,18 +6265,18 @@ ddagum <- function(x, a, scale=1, p.arg, log = FALSE) {
}
-dinvlomax <- function(x, scale=1, p.arg, log = FALSE)
- ddagum(x, a=1, scale, p.arg, log=log)
+dinvlomax <- function(x, scale = 1, p.arg, log = FALSE)
+ ddagum(x, a = 1, scale, p.arg, log = log)
-dinvparalogistic <- function(x, a, scale=1, log = FALSE)
- ddagum(x, a, scale, a, log=log)
+dinvparalogistic <- function(x, a, scale = 1, log = FALSE)
+ ddagum(x, a, scale, a, log = log)
sinmad = function(link.a = "loge",
link.scale = "loge",
link.q = "loge",
- earg.a=list(), earg.scale = list(), earg.q=list(),
+ earg.a = list(), earg.scale = list(), earg.q = list(),
init.a = NULL,
init.scale = NULL,
init.q=1.0,
@@ -6248,7 +6318,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.q = if (length( .init.q)) .init.q else 1
xvec = log( (1-qvec)^(-1/ init.q ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -6262,7 +6332,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
theta2eta(qq, .link.q, earg = .earg.q))
}
}), list( .link.a = link.a, .link.scale = link.scale,
- .link.q=link.q,
+ .link.q = link.q,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.q=earg.q,
.init.a = init.a, .init.scale = init.scale,
@@ -6275,24 +6345,25 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.q=earg.q,
- .link.q=link.q ))),
+ .link.q = link.q ))),
last = eval(substitute(expression({
misc$link = c(a= .link.a, scale= .link.scale, q= .link.q)
misc$earg = list(a= .earg.a, scale= .earg.scale, q= .earg.q)
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.q=earg.q,
- .link.q=link.q ))),
+ .link.q = link.q ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = eta2theta(eta[,1], .link.a, earg = .earg.a)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = 1
qq = eta2theta(eta[,3], .link.q, earg = .earg)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dsinmad(x=y, a=aa, scale=scale, q.arg=qq, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dsinmad(x = y, a=aa, scale = scale, q.arg=qq, log = TRUE))
}
- }, list( .link.a = link.a, .link.scale = link.scale, .link.q=link.q,
+ }, list( .link.a = link.a, .link.scale = link.scale, .link.q = link.q,
.earg.a = earg.a, .earg.scale = earg.scale, .earg.q=earg.q ))),
vfamily = c("sinmad"),
deriv = eval(substitute(expression({
@@ -6312,12 +6383,13 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
da.deta = dtheta.deta(aa, .link.a, earg = .earg.a)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dq.deta = dtheta.deta(qq, .link.q, earg = .earg.q)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta,
- dl.dq * dq.deta )
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta,
+ dl.dq * dq.deta )
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.q=earg.q,
- .link.q=link.q ))),
+ .link.q = link.q ))),
weight = eval(substitute(expression({
ed2l.da = (1 + parg+qq + parg * qq * (trigamma(parg) + trigamma(qq) +
(temp3b - temp3a + (parg-qq)/(parg*qq))^2 -
@@ -6335,19 +6407,19 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,2,M)] = ed2l.dascale * da.deta * dscale.deta
wz[,iam(1,3,M)] = ed2l.daq * da.deta * dq.deta
wz[,iam(2,3,M)] = ed2l.dscaleq * dscale.deta * dq.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.q=earg.q,
- .link.q=link.q ))))
+ .link.q = link.q ))))
}
dagum = function(link.a = "loge",
link.scale = "loge",
link.p = "loge",
- earg.a=list(), earg.scale = list(), earg.p=list(),
+ earg.a = list(), earg.scale = list(), earg.p = list(),
init.a = NULL,
init.scale = NULL,
init.p=1.0,
@@ -6390,7 +6462,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.p = if (length( .init.p)) .init.p else 1
xvec = log( qvec^(-1/ init.p ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -6404,7 +6476,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
theta2eta(parg, .link.p, earg = .earg.p))
}
}), list( .link.a = link.a, .link.scale = link.scale,
- .link.p=link.p,
+ .link.p = link.p,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p,
.init.a = init.a, .init.scale = init.scale,
@@ -6418,24 +6490,25 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))),
+ .link.p = link.p ))),
last = eval(substitute(expression({
misc$link = c(a= .link.a, scale= .link.scale, p= .link.p )
misc$earg = list(a= .earg.a, scale= .earg.scale, p= .earg.p)
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))),
+ .link.p = link.p ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = eta2theta(eta[,1], .link.a, earg = .earg.a)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = eta2theta(eta[,3], .link.p, earg = .earg.p)
qq = 1
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * ddagum(x=y, a=aa, scale=scale, p.arg=parg, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * ddagum(x = y, a=aa, scale = scale, p.arg=parg, log = TRUE))
}
- }, list( .link.a = link.a, .link.scale = link.scale, .link.p=link.p,
+ }, list( .link.a = link.a, .link.scale = link.scale, .link.p = link.p,
.earg.a = earg.a, .earg.scale = earg.scale, .earg.p=earg.p ))),
vfamily = c("dagum"),
deriv = eval(substitute(expression({
@@ -6455,12 +6528,13 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
da.deta = dtheta.deta(aa, .link.a, earg = .earg.a)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dp.deta = dtheta.deta(parg, .link.p, earg = .earg.p)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta,
- dl.dp * dp.deta )
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta,
+ dl.dp * dp.deta )
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))),
+ .link.p = link.p ))),
weight = eval(substitute(expression({
ed2l.da = (1 + parg+qq + parg * qq * (trigamma(parg) + trigamma(qq) +
(temp3b - temp3a + (parg-qq)/(parg*qq))^2 -
@@ -6478,18 +6552,18 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,2,M)] = ed2l.dascale * da.deta * dscale.deta
wz[,iam(1,3,M)] = ed2l.dap * da.deta * dp.deta
wz[,iam(2,3,M)] = ed2l.dscalep * dscale.deta * dp.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))))
+ .link.p = link.p ))))
}
betaII = function(link.scale = "loge", link.p = "loge", link.q = "loge",
- earg.scale = list(), earg.p=list(), earg.q=list(),
+ earg.scale = list(), earg.p = list(), earg.q = list(),
init.scale = NULL, init.p=1.0, init.q=1.0, zero = NULL)
{
@@ -6527,7 +6601,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.q = if (length( .init.q)) .init.q else 1
xvec = log( (1-qvec)^(-1/ init.q ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -6540,7 +6614,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
theta2eta(qq, .link.q, earg = .earg.q))
}
}), list( .link.scale = link.scale,
- .link.p=link.p, .link.q=link.q,
+ .link.p = link.p, .link.q = link.q,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
.init.scale = init.scale,
@@ -6554,27 +6628,28 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
}, list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
last = eval(substitute(expression({
misc$link = c(scale= .link.scale, p= .link.p, q= .link.q)
misc$earg = list(scale= .earg.scale, p= .earg.p, q= .earg.q)
}), list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = 1
scale = eta2theta(eta[,1], .link.scale, earg = .earg.scale)
parg = eta2theta(eta[,2], .link.p, earg = .earg.p)
qq = eta2theta(eta[,3], .link.q, earg = .earg.q)
- if (residuals) stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w*(log(aa) + (aa*parg-1)*log(y) - aa*parg*log(scale) +
(-lbeta(parg, qq)) - (parg+qq)*log1p((y/scale)^aa)))
}, list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
vfamily = c("betaII"),
deriv = eval(substitute(expression({
aa = 1
@@ -6595,12 +6670,13 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dp.deta = dtheta.deta(parg, .link.p, earg = .earg.p)
dq.deta = dtheta.deta(qq, .link.q, earg = .earg.q)
- w * cbind( dl.dscale * dscale.deta,
- dl.dp * dp.deta, dl.dq * dq.deta )
+ c(w) * cbind( dl.dscale * dscale.deta,
+ dl.dp * dp.deta,
+ dl.dq * dq.deta )
}), list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))),
+ .link.p = link.p, .link.q = link.q ))),
weight = eval(substitute(expression({
temp5 = trigamma(parg + qq)
ed2l.dscale = aa^2 * parg * qq / (scale^2 * (1+parg+qq))
@@ -6616,19 +6692,19 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,2,M)] = ed2l.dscalep * dscale.deta * dp.deta
wz[,iam(1,3,M)] = ed2l.dscaleq * dscale.deta * dq.deta
wz[,iam(2,3,M)] = ed2l.dpq * dp.deta * dq.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p, .earg.q=earg.q,
- .link.p=link.p, .link.q=link.q ))))
+ .link.p = link.p, .link.q = link.q ))))
}
lomax = function(link.scale = "loge",
link.q = "loge",
- earg.scale = list(), earg.q=list(),
+ earg.scale = list(), earg.q = list(),
init.scale = NULL,
init.q=1.0,
zero = NULL)
@@ -6664,7 +6740,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.q = if (length( .init.q)) .init.q else 1
xvec = log( (1-qvec)^(-1/ init.q ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -6674,19 +6750,19 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
etastart = cbind(theta2eta(scale, .link.scale, earg = .earg.scale),
theta2eta(qq, .link.q, earg = .earg.q))
}
- }), list( .link.scale = link.scale, .link.q=link.q,
+ }), list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q,
.init.scale = init.scale, .init.q=init.q ))),
inverse = eval(substitute(function(eta, extra = NULL) {
scale = eta2theta(eta[,1], .link.scale, earg = .earg.scale)
qq = eta2theta(eta[,2], .link.q, earg = .earg.q)
scale/(qq-1)
- }, list( .link.scale = link.scale, .link.q=link.q,
+ }, list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q ))),
last = eval(substitute(expression({
misc$link = c(scale= .link.scale, q= .link.q)
misc$earg = list(scale= .earg.scale, q= .earg.q)
- }), list( .link.scale = link.scale, .link.q=link.q,
+ }), list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
@@ -6694,10 +6770,11 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
scale = eta2theta(eta[,1], .link.scale, earg = .earg.scale)
parg = 1
qq = eta2theta(eta[,2], .link.q, earg = .earg.q)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dlomax(x=y, scale=scale, q.arg=qq, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dlomax(x = y, scale = scale, q.arg=qq, log = TRUE))
}
- }, list( .link.scale = link.scale, .link.q=link.q,
+ }, list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q ))),
vfamily = c("lomax"),
deriv = eval(substitute(expression({
@@ -6711,9 +6788,9 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dl.dq = digamma(parg + qq) - digamma(qq) - log1p(temp2)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dq.deta = dtheta.deta(qq, .link.q, earg = .earg.q)
- w * cbind( dl.dscale * dscale.deta,
- dl.dq * dq.deta )
- }), list( .link.scale = link.scale, .link.q=link.q,
+ c(w) * cbind( dl.dscale * dscale.deta,
+ dl.dq * dq.deta )
+ }), list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q ))),
weight = eval(substitute(expression({
ed2l.dscale = aa^2 * parg * qq / (scale^2 * (1+parg+qq))
@@ -6723,16 +6800,16 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,1,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(2,2,M)] = ed2l.dq * dq.deta^2
wz[,iam(1,2,M)] = ed2l.dscaleq * dscale.deta * dq.deta
- wz = w * wz
+ wz = c(w) * wz
wz
- }), list( .link.scale = link.scale, .link.q=link.q,
+ }), list( .link.scale = link.scale, .link.q = link.q,
.earg.scale = earg.scale, .earg.q=earg.q ))))
}
fisk = function(link.a = "loge",
link.scale = "loge",
- earg.a=list(), earg.scale = list(),
+ earg.a = list(), earg.scale = list(),
init.a = NULL,
init.scale = NULL,
zero = NULL)
@@ -6765,7 +6842,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
if (!length( .init.scale )) {
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
xvec = log( 1/qvec - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -6797,8 +6874,9 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
aa = eta2theta(eta[,1], .link.a, earg = .earg)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = qq = 1
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dfisk(x=y, a=aa, scale=scale, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dfisk(x = y, a=aa, scale = scale, log = TRUE))
}
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
@@ -6817,7 +6895,8 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dl.dscale = (aa/scale) * (-parg + (parg+qq) / (1+1/temp2))
da.deta = dtheta.deta(aa, .link.a, earg = .earg.a)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta )
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta )
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
weight = eval(substitute(expression({
@@ -6831,7 +6910,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,1,M)] = ed2l.da * da.deta^2
wz[,iam(2,2,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(1,2,M)] = ed2l.dascale * da.deta * dscale.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))))
@@ -6840,7 +6919,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
invlomax = function(link.scale = "loge",
link.p = "loge",
- earg.scale = list(), earg.p=list(),
+ earg.scale = list(), earg.p = list(),
init.scale = NULL,
init.p=1.0,
zero = NULL)
@@ -6876,7 +6955,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.p = if (length( .init.p)) .init.p else 1
xvec = log( qvec^(-1/ init.p ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
scale = rep(if (length( .init.scale )) .init.scale else
@@ -6886,7 +6965,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
theta2eta(parg, .link.p, earg = .earg.p))
}
}), list( .link.scale = link.scale,
- .link.p=link.p,
+ .link.p = link.p,
.earg.scale = earg.scale,
.earg.p=earg.p,
.init.scale = init.scale,
@@ -6896,23 +6975,24 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
}, list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))),
+ .link.p = link.p ))),
last = eval(substitute(expression({
misc$link = c(scale= .link.scale, p= .link.p )
misc$earg = list(scale= .earg.scale, p= .earg.p )
}), list( .link.scale = link.scale,
.earg.scale = earg.scale,
.earg.p=earg.p,
- .link.p=link.p ))),
+ .link.p = link.p ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = qq = 1
scale = eta2theta(eta[,1], .link.scale, earg = .earg.scale)
parg = eta2theta(eta[,2], .link.p, earg = .earg.p)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dinvlomax(x=y, scale=scale, p.arg=parg, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dinvlomax(x = y, scale = scale, p.arg=parg, log = TRUE))
}
- }, list( .link.scale = link.scale, .link.p=link.p,
+ }, list( .link.scale = link.scale, .link.p = link.p,
.earg.scale = earg.scale, .earg.p=earg.p ))),
vfamily = c("invlomax"),
deriv = eval(substitute(expression({
@@ -6927,9 +7007,9 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dl.dp = aa * temp1 + digamma(parg + qq) - digamma(parg) - log1p(temp2)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
dp.deta = dtheta.deta(parg, .link.p, earg = .earg.p)
- w * cbind( dl.dscale * dscale.deta,
- dl.dp * dp.deta )
- }), list( .link.scale = link.scale, .link.p=link.p,
+ c(w) * cbind( dl.dscale * dscale.deta,
+ dl.dp * dp.deta )
+ }), list( .link.scale = link.scale, .link.p = link.p,
.earg.scale = earg.scale, .earg.p=earg.p ))),
weight = eval(substitute(expression({
ed2l.dscale = aa^2 * parg * qq / (scale^2 * (1+parg+qq))
@@ -6939,16 +7019,16 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,1,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(2,2,M)] = ed2l.dp * dp.deta^2
wz[,iam(1,2,M)] = ed2l.dscalep * dscale.deta * dp.deta
- wz = w * wz
+ wz = c(w) * wz
wz
- }), list( .link.scale = link.scale, .link.p=link.p,
+ }), list( .link.scale = link.scale, .link.p = link.p,
.earg.scale = earg.scale, .earg.p=earg.p ))))
}
paralogistic = function(link.a = "loge",
link.scale = "loge",
- earg.a=list(), earg.scale = list(),
+ earg.a = list(), earg.scale = list(),
init.a=1.0,
init.scale = NULL,
zero = NULL)
@@ -6984,7 +7064,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.a = if (length( .init.a)) .init.a else 1
xvec = log( (1-qvec)^(-1/ init.a ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
if (!length(etastart)) {
@@ -7017,8 +7097,9 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = 1
qq = aa
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dparalogistic(x=y, a=aa, scale=scale, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dparalogistic(x = y, a=aa, scale = scale, log = TRUE))
}
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
@@ -7038,7 +7119,8 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dl.dscale = (aa/scale) * (-parg + (parg+qq) / (1+1/temp2))
da.deta = dtheta.deta(aa, .link.a, earg = .earg.a)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta)
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta)
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
weight = eval(substitute(expression({
@@ -7052,7 +7134,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,1,M)] = ed2l.da * da.deta^2
wz[,iam(2,2,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(1,2,M)] = ed2l.dascale * da.deta * dscale.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))))
@@ -7061,7 +7143,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
invparalogistic = function(link.a = "loge",
link.scale = "loge",
- earg.a=list(), earg.scale = list(),
+ earg.a = list(), earg.scale = list(),
init.a=1.0,
init.scale = NULL,
zero = NULL)
@@ -7096,7 +7178,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
qvec = c( .25, .5, .75) # Arbitrary; could be made an argument
init.p = if (length( .init.a)) .init.a else 1
xvec = log( qvec^(-1/ init.p ) - 1 )
- fit0 = lsfit(x=xvec, y=log(quantile(y, qvec )))
+ fit0 = lsfit(x = xvec, y=log(quantile(y, qvec )))
}
qq = 1
@@ -7131,8 +7213,9 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
scale = eta2theta(eta[,2], .link.scale, earg = .earg.scale)
parg = aa
qq = 1
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dinvparalogistic(x=y, a=aa, scale=scale, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dinvparalogistic(x = y, a=aa, scale = scale, log = TRUE))
}
}, list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
@@ -7152,7 +7235,8 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
dl.dscale = (aa/scale) * (-parg + (parg+qq) / (1+1/temp2))
da.deta = dtheta.deta(aa, .link.a, earg = .earg.a)
dscale.deta = dtheta.deta(scale, .link.scale, earg = .earg.scale)
- w * cbind( dl.da * da.deta, dl.dscale * dscale.deta )
+ c(w) * cbind( dl.da * da.deta,
+ dl.dscale * dscale.deta )
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))),
weight = eval(substitute(expression({
@@ -7166,7 +7250,7 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
wz[,iam(1,1,M)] = ed2l.da * da.deta^2
wz[,iam(2,2,M)] = ed2l.dscale * dscale.deta^2
wz[,iam(1,2,M)] = ed2l.dascale * da.deta * dscale.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}), list( .link.a = link.a, .link.scale = link.scale,
.earg.a = earg.a, .earg.scale = earg.scale ))))
@@ -7176,8 +7260,8 @@ dinvparalogistic <- function(x, a, scale=1, log = FALSE)
if (FALSE)
genlognormal = function(link.sigma = "loge", link.r = "loge",
- esigma=list(), er=list(),
- init.sigma=1, init.r=1, zero = NULL)
+ esigma = list(), er = list(),
+ init.sigma = 1, init.r = 1, zero = NULL)
{
warning("2/4/04; doesn't work, possibly because first derivs are ",
"not continuous (sign() is used). Certainly, the derivs wrt ",
@@ -7225,27 +7309,28 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
sigma=sigma.init,
r = r.init)
}
- }), list( .link.sigma=link.sigma, .link.r=link.r,
+ }), list( .link.sigma = link.sigma, .link.r = link.r,
.init.sigma=init.sigma, .init.r=init.r ))),
inverse = eval(substitute(function(eta, extra = NULL) {
mymu = eta2theta(eta[,1], "identity", earg = list())
sigma = eta2theta(eta[,2], .link.sigma, earg = .esigma)
r = eta2theta(eta[,3], .link.r, earg = .er)
r
- }, list( .link.sigma=link.sigma, .link.r=link.r ))),
+ }, list( .link.sigma = link.sigma, .link.r = link.r ))),
last = eval(substitute(expression({
misc$link = c(loc = "identity", "sigma" = .link.sigma, r = .link.r )
misc$expected = TRUE
- }), list( .link.sigma=link.sigma, .link.r=link.r ))),
+ }), list( .link.sigma = link.sigma, .link.r = link.r ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
mymu = eta2theta(eta[,1], "identity", earg = list())
sigma = eta2theta(eta[,2], .link.sigma, earg = .esigma)
r = eta2theta(eta[,3], .link.r, earg = .er)
temp89 = (abs(log(y)-mymu)/sigma)^r
- if (residuals) stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w * (-log(r^(1/r) * sigma) - lgamma(1+1/r) - temp89/r))
- }, list( .link.sigma=link.sigma, .link.r=link.r ))),
+ }, list( .link.sigma = link.sigma, .link.r = link.r ))),
vfamily = c("genlognormal3"),
deriv = eval(substitute(expression({
mymu = eta2theta(eta[,1], "identity", earg = list())
@@ -7262,10 +7347,10 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
dmymu.deta = dtheta.deta(mymu, "identity", earg = list())
dsigma.deta = dtheta.deta(sigma, .link.sigma, earg = .esigma)
dr.deta = dtheta.deta(r, .link.r, earg = .er)
- w * cbind(dl.dmymu * dmymu.deta,
- dl.dsigma * dsigma.deta,
- dl.dr * dr.deta)
- }), list( .link.sigma=link.sigma, .link.r=link.r ))),
+ c(w) * cbind(dl.dmymu * dmymu.deta,
+ dl.dsigma * dsigma.deta,
+ dl.dr * dr.deta)
+ }), list( .link.sigma = link.sigma, .link.r = link.r ))),
weight = expression({
wz = matrix(0, n, 6) # 5 will have small savings of 1 column
B = log(r) + digamma(ss)
@@ -7277,7 +7362,7 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
wz[,iam(2,2,M)] = ed2l.dsigma2 * dsigma.deta^2
wz[,iam(3,3,M)] = ed2l.dr2 * dr.deta^2
wz[,iam(2,3,M)] = ed2l.dsigmar * dsigma.deta * dr.deta
- wz = w * wz
+ wz = c(w) * wz
wz
}))
}
@@ -7331,7 +7416,8 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL){
shapes = eta2theta(eta, .link, earg = .earg)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
sum(w *((shapes[,1]-1) * log(y) - lbeta(shapes[,1], shapes[,2]) -
(shapes[,2]+shapes[,1]) * log1p(y)))
}
@@ -7344,7 +7430,7 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
digamma(shapes[,1]+shapes[,2]),
- log1p(y) - digamma(shapes[,2]) +
digamma(shapes[,1]+shapes[,2]))
- w * dl.dshapes * dshapes.deta
+ c(w) * dl.dshapes * dshapes.deta
}), list( .link = link, .earg = earg ))),
weight = expression({
temp2 = trigamma(shapes[,1]+shapes[,2])
@@ -7357,7 +7443,7 @@ warning("2/4/04; doesn't work, possibly because first derivs are ",
wz[,iam(2,2,M)] = d2l.dshape22 * dshapes.deta[,2]^2
wz[,iam(1,2,M)] = d2l.dshape1shape2 * dshapes.deta[,1] * dshapes.deta[,2]
- -w * wz
+ -c(w) * wz
}))
}
@@ -7391,7 +7477,7 @@ rmaxwell = function(n, a) {
if (!is.Numeric(n, posit = TRUE, allow = 1))
stop("bad input for argument 'n'")
if (any(a <= 0)) stop("argument 'a' must be positive")
- sqrt(2 * rgamma(n=n, 1.5) / a)
+ sqrt(2 * rgamma(n = n, 1.5) / a)
}
qmaxwell = function(p, a) {
@@ -7433,19 +7519,20 @@ qmaxwell = function(p, a) {
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
aa = eta2theta(eta, .link, earg = .earg)
- if (residuals) stop("loglikelihood residuals not implemented yet") else
- sum(w * dmaxwell(x=y, a=aa, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
+ sum(w * dmaxwell(x = y, a=aa, log = TRUE))
}, list( .link = link, .earg = earg ))),
vfamily = c("maxwell"),
deriv = eval(substitute(expression({
a = eta2theta(eta, .link, earg = .earg)
dl.da = 1.5 / a - 0.5 * y^2
da.deta = dtheta.deta(a, .link, earg = .earg)
- w * dl.da * da.deta
+ c(w) * dl.da * da.deta
}), list( .link = link, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.da2 = 1.5 / a^2
- wz = w * da.deta^2 * ed2l.da2
+ wz = c(w) * da.deta^2 * ed2l.da2
wz
}), list( .link = link, .earg = earg ))))
}
@@ -7453,7 +7540,7 @@ qmaxwell = function(p, a) {
-dnaka = function(x, shape, scale=1, log = FALSE) {
+dnaka = function(x, shape, scale = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -7462,14 +7549,14 @@ dnaka = function(x, shape, scale=1, log = FALSE) {
logdensity = rep(log(0), len = L)
xok = (x > 0)
- logdensity[xok] = dgamma(x=x[xok]^2, shape=shape[xok],
- scale=scale[xok]/shape[xok], log = TRUE) +
+ logdensity[xok] = dgamma(x = x[xok]^2, shape = shape[xok],
+ scale = scale[xok]/shape[xok], log = TRUE) +
log(2) + log(x[xok])
if (log.arg) logdensity else exp(logdensity)
}
-pnaka = function(q, shape, scale=1) {
+pnaka = function(q, shape, scale = 1) {
if (!is.Numeric(q))
stop("bad input for argument 'q'")
if (!is.Numeric(shape, posit = TRUE))
@@ -7482,7 +7569,7 @@ pnaka = function(q, shape, scale=1) {
}
-qnaka = function(p, shape, scale=1, ...) {
+qnaka = function(p, shape, scale = 1, ...) {
if (!is.Numeric(p, posit = TRUE) || max(p) >= 1)
stop("bad input for argument 'p'")
if (!is.Numeric(shape, posit = TRUE))
@@ -7490,23 +7577,25 @@ qnaka = function(p, shape, scale=1, ...) {
if (!is.Numeric(scale, posit = TRUE))
stop("bad input for argument 'scale'")
L = max(length(p), length(shape), length(scale))
- p = rep(p, len = L); shape = rep(shape, len = L); scale = rep(scale, len = L);
+ p = rep(p, len = L); shape = rep(shape, len = L);
+ scale = rep(scale, len = L);
ans = rep(0.0, len = L)
- myfun = function(x, shape, scale=1, p)
- pnaka(q=x, shape=shape, scale=scale) - p
+ myfun = function(x, shape, scale = 1, p)
+ pnaka(q=x, shape = shape, scale = scale) - p
for(ii in 1:L) {
EY = sqrt(scale[ii]/shape[ii]) * gamma(shape[ii]+0.5) / gamma(shape[ii])
Upper = 5 * EY
- while(pnaka(q=Upper, shape=shape[ii], scale=scale[ii]) < p[ii])
+ while(pnaka(q=Upper, shape = shape[ii], scale = scale[ii]) < p[ii])
Upper = Upper + scale[ii]
- ans[ii] = uniroot(f=myfun, lower=0, upper=Upper,
- shape=shape[ii], scale=scale[ii], p=p[ii], ...)$root
+ ans[ii] = uniroot(f = myfun, lower = 0, upper = Upper,
+ shape = shape[ii], scale = scale[ii],
+ p = p[ii], ...)$root
}
ans
}
-rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
+rnaka = function(n, shape, scale = 1, Smallno=1.0e-6) {
if (!is.Numeric(n, posit = TRUE, integ = TRUE))
stop("bad input for argument 'n'")
if (!is.Numeric(scale, posit = TRUE, allow = 1))
@@ -7519,14 +7608,16 @@ rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
ans = rep(0.0, len = n)
ptr1 = 1; ptr2 = 0
- ymax = dnaka(x=sqrt(scale*(1 - 0.5/shape)), shape=shape, scale=scale)
+ ymax = dnaka(x = sqrt(scale * (1 - 0.5 / shape)),
+ shape = shape, scale = scale)
while(ptr2 < n) {
- EY = sqrt(scale/shape) * gamma(shape+0.5) / gamma(shape)
+ EY = sqrt(scale / shape) * gamma(shape + 0.5) / gamma(shape)
Upper = EY + 5 * scale
- while(pnaka(q=Upper, shape=shape, scale=scale) < 1-Smallno)
+ while(pnaka(q=Upper, shape = shape, scale = scale) < 1-Smallno)
Upper = Upper + scale
x = runif(2*n, min=0, max=Upper)
- index = runif(2*n, max=ymax) < dnaka(x, shape=shape, scale=scale)
+ index = runif(2*n, max=ymax) < dnaka(x, shape = shape,
+ scale = scale)
sindex = sum(index)
if (sindex) {
ptr2 = min(n, ptr1 + sindex - 1)
@@ -7543,7 +7634,7 @@ rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
nakagami = function(lshape = "loge", lscale = "loge",
- eshape = list(), escale = list(), ishape = NULL, iscale=1) {
+ eshape = list(), escale = list(), ishape = NULL, iscale = 1) {
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
if (mode(lscale) != "character" && mode(lscale) != "name")
@@ -7598,8 +7689,9 @@ rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
shape = eta2theta(eta[,1], .lshape, earg = .eshape)
scale = eta2theta(eta[,2], .lscale, earg = .escale)
- if (residuals) stop("loglikelihood residuals not implemented yet") else
- sum(w * dnaka(x=y, shape=shape, scale=scale, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
+ sum(w * dnaka(x = y, shape = shape, scale = scale, log = TRUE))
}, list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))),
vfamily = c("nakagami"),
@@ -7611,7 +7703,8 @@ rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
dl.dscale = -shape/Scale + shape * (y/Scale)^2
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape)
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
- w * cbind(dl.dshape * dshape.deta, dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dshape * dshape.deta,
+ dl.dscale * dscale.deta)
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -7620,7 +7713,7 @@ rnaka = function(n, shape, scale=1, Smallno=1.0e-6) {
wz = matrix(as.numeric(NA), n, M) # diagonal
wz[,iam(1,1,M)] = d2l.dshape2 * dshape.deta^2
wz[,iam(2,2,M)] = d2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))))
}
@@ -7705,8 +7798,9 @@ rrayleigh = function(n, scale = 1) {
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
Scale = eta2theta(eta, .lscale, earg = .escale)
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * drayleigh(x=y, scale = Scale, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * drayleigh(x = y, scale = Scale, log = TRUE))
}
}, list( .lscale = lscale, .escale = escale ))),
vfamily = c("rayleigh"),
@@ -7714,12 +7808,12 @@ rrayleigh = function(n, scale = 1) {
Scale = eta2theta(eta, .lscale, earg = .escale)
dl.dScale = ((y/Scale)^2 - 2) / Scale
dScale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
- w * dl.dScale * dScale.deta
+ c(w) * dl.dScale * dScale.deta
}), list( .lscale = lscale, .escale = escale ))),
weight = eval(substitute(expression({
d2l.dScale2 = (3 * (y/Scale)^2 - 2) / Scale^2
ed2l.dScale2 = 4 / Scale^2
- wz = w * dScale.deta^2 *
+ wz = c(w) * dScale.deta^2 *
((1 - .nrfs) * d2l.dScale2 + .nrfs * ed2l.dScale2)
wz
}), list( .lscale = lscale, .escale = escale, .nrfs = nrfs ))))
@@ -7729,7 +7823,7 @@ rrayleigh = function(n, scale = 1) {
-dparetoIV = function(x, location=0, scale=1, inequality=1, shape=1, log = FALSE) {
+dparetoIV = function(x, location = 0, scale = 1, inequality = 1, shape = 1, log = FALSE) {
if (!is.logical(log.arg <- log))
stop("bad input for argument 'log'")
rm(log)
@@ -7749,7 +7843,7 @@ dparetoIV = function(x, location=0, scale=1, inequality=1, shape=1, log = FALSE)
if (log.arg) logdensity else exp(logdensity)
}
-pparetoIV = function(q, location=0, scale=1, inequality=1, shape=1) {
+pparetoIV = function(q, location = 0, scale = 1, inequality = 1, shape=1) {
if (!is.Numeric(q)) stop("bad input for argument 'q'")
if (!is.Numeric(scale, posit = TRUE))
stop("bad input for argument 'scale'")
@@ -7769,7 +7863,7 @@ pparetoIV = function(q, location=0, scale=1, inequality=1, shape=1) {
answer
}
-qparetoIV = function(p, location=0, scale=1, inequality=1, shape=1) {
+qparetoIV = function(p, location = 0, scale = 1, inequality = 1, shape=1) {
if (!is.Numeric(p, posit = TRUE) || any(p >= 1))
stop("bad input for argument 'p'")
if (!is.Numeric(scale, posit = TRUE))
@@ -7781,7 +7875,7 @@ qparetoIV = function(p, location=0, scale=1, inequality=1, shape=1) {
location + scale * (-1 + (1-p)^(-1/shape))^inequality
}
-rparetoIV = function(n, location=0, scale=1, inequality=1, shape=1) {
+rparetoIV = function(n, location = 0, scale = 1, inequality = 1, shape=1) {
if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
stop("bad input for argument n")
if (!is.Numeric(scale, posit = TRUE)) stop("bad input for argument 'scale'")
@@ -7792,59 +7886,63 @@ rparetoIV = function(n, location=0, scale=1, inequality=1, shape=1) {
}
-dparetoIII = function(x, location=0, scale=1, inequality=1, log = FALSE)
- dparetoIV(x=x, location=location, scale=scale, inequality=inequality,
- shape=1, log=log)
+dparetoIII = function(x, location = 0, scale = 1, inequality = 1, log = FALSE)
+ dparetoIV(x = x, location=location, scale = scale, inequality=inequality,
+ shape = 1, log = log)
-pparetoIII = function(q, location=0, scale=1, inequality=1)
- pparetoIV(q=q, location=location, scale=scale, inequality=inequality,
+pparetoIII = function(q, location = 0, scale = 1, inequality=1)
+ pparetoIV(q=q, location=location, scale = scale, inequality=inequality,
shape=1)
-qparetoIII = function(p, location=0, scale=1, inequality=1)
- qparetoIV(p=p, location=location, scale=scale, inequality=inequality,
+qparetoIII = function(p, location = 0, scale = 1, inequality=1)
+ qparetoIV(p=p, location=location, scale = scale, inequality=inequality,
shape=1)
-rparetoIII = function(n, location=0, scale=1, inequality=1)
- rparetoIV(n=n, location=location, scale=scale, inequality=inequality,
+rparetoIII = function(n, location = 0, scale = 1, inequality=1)
+ rparetoIV(n = n, location=location, scale = scale, inequality=inequality,
shape=1)
-dparetoII = function(x, location=0, scale=1, shape=1, log = FALSE)
- dparetoIV(x=x, location=location, scale=scale, inequality=1, shape=shape,
- log=log)
+dparetoII = function(x, location = 0, scale = 1, shape = 1, log = FALSE)
+ dparetoIV(x = x, location=location, scale = scale,
+ inequality = 1, shape = shape,
+ log = log)
-pparetoII = function(q, location=0, scale=1, shape=1)
- pparetoIV(q=q, location=location, scale=scale, inequality=1, shape=shape)
+pparetoII = function(q, location = 0, scale = 1, shape=1)
+ pparetoIV(q=q, location=location, scale = scale,
+ inequality = 1, shape = shape)
-qparetoII = function(p, location=0, scale=1, shape=1)
- qparetoIV(p=p, location=location, scale=scale, inequality=1, shape=shape)
+qparetoII = function(p, location = 0, scale = 1, shape=1)
+ qparetoIV(p=p, location=location, scale = scale,
+ inequality = 1, shape = shape)
-rparetoII = function(n, location=0, scale=1, shape=1)
- rparetoIV(n=n, location=location, scale=scale, inequality=1, shape=shape)
+rparetoII = function(n, location = 0, scale = 1, shape=1)
+ rparetoIV(n = n, location=location, scale = scale,
+ inequality = 1, shape = shape)
-dparetoI = function(x, scale=1, shape=1)
- dparetoIV(x=x, location=scale, scale=scale, inequality=1, shape=shape)
+dparetoI = function(x, scale = 1, shape=1)
+ dparetoIV(x = x, location=scale, scale = scale, inequality = 1, shape = shape)
-pparetoI = function(q, scale=1, shape=1)
- pparetoIV(q=q, location=scale, scale=scale, inequality=1, shape=shape)
+pparetoI = function(q, scale = 1, shape=1)
+ pparetoIV(q=q, location=scale, scale = scale, inequality = 1, shape = shape)
-qparetoI = function(p, scale=1, shape=1)
- qparetoIV(p=p, location=scale, scale=scale, inequality=1, shape=shape)
+qparetoI = function(p, scale = 1, shape=1)
+ qparetoIV(p=p, location=scale, scale = scale, inequality = 1, shape = shape)
-rparetoI = function(n, scale=1, shape=1)
- rparetoIV(n=n, location=scale, scale=scale, inequality=1, shape=shape)
+rparetoI = function(n, scale = 1, shape=1)
+ rparetoIV(n = n, location=scale, scale = scale, inequality = 1, shape = shape)
- paretoIV = function(location=0,
+ paretoIV = function(location = 0,
lscale = "loge",
linequality = "loge",
lshape = "loge",
- escale = list(), einequality=list(), eshape = list(),
- iscale=1, iinequality=1, ishape = NULL,
- method.init = 1) {
+ escale = list(), einequality = list(), eshape = list(),
+ iscale = 1, iinequality = 1, ishape = NULL,
+ imethod = 1) {
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
if (mode(linequality) != "character" && mode(linequality) != "name")
@@ -7859,10 +7957,10 @@ rparetoI = function(n, scale=1, shape=1)
stop("argument 'iinequality' must be positive")
if (is.Numeric(ishape) && any(ishape <= 0))
stop("argument 'ishape' must be positive")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE) || method.init>2)
- stop("bad input for argument 'method.init'")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE) || imethod>2)
+ stop("bad input for argument 'imethod'")
if (linequality == "nloge" && location != 0)
- warning("The Burr distribution has 'location=0' and 'linequality=nloge'")
+ warning("The Burr distribution has 'location = 0' and 'linequality=nloge'")
if (!is.list(escale)) escale = list()
if (!is.list(einequality)) einequality = list()
if (!is.list(eshape)) eshape = list()
@@ -7892,9 +7990,9 @@ rparetoI = function(n, scale=1, shape=1)
shape.init = if (length( .ishape)) .ishape else NULL
if (!length(shape.init)) {
zedd = (y - location) / scale.init
- if ( .method.init == 1) {
- A1 = weighted.mean(1/(1 + zedd^(1/inequality.init)), w=w)
- A2 = weighted.mean(1/(1 + zedd^(1/inequality.init))^2, w=w)
+ if ( .imethod == 1) {
+ A1 = weighted.mean(1/(1 + zedd^(1/inequality.init)), w = w)
+ A2 = weighted.mean(1/(1 + zedd^(1/inequality.init))^2, w = w)
} else {
A1 = median(1/(1 + zedd^(1/inequality.init )))
A2 = median(1/(1 + zedd^(1/inequality.init))^2)
@@ -7907,8 +8005,8 @@ rparetoI = function(n, scale=1, shape=1)
theta2eta(rep(shape.init, len = n), .lshape, earg = .eshape))
}
}), list( .location = location, .lscale = lscale,
- .linequality=linequality, .lshape = lshape, .method.init = method.init,
- .escale = escale, .einequality=einequality, .eshape = eshape,
+ .linequality = linequality, .lshape = lshape, .imethod = imethod,
+ .escale = escale, .einequality = einequality, .eshape = eshape,
.iscale = iscale, .iinequality=iinequality, .ishape = ishape ))),
inverse = eval(substitute(function(eta, extra = NULL) {
location = extra$location
@@ -7916,16 +8014,16 @@ rparetoI = function(n, scale=1, shape=1)
inequality = eta2theta(eta[,2], .linequality, earg = .einequality)
shape = eta2theta(eta[,3], .lshape, earg = .eshape)
location + Scale * NA
- }, list( .lscale = lscale, .linequality=linequality, .lshape = lshape,
- .escale = escale, .einequality=einequality, .eshape = eshape ))),
+ }, list( .lscale = lscale, .linequality = linequality, .lshape = lshape,
+ .escale = escale, .einequality = einequality, .eshape = eshape ))),
last = eval(substitute(expression({
- misc$link=c("scale" = .lscale, "inequality" = .linequality,
+ misc$link = c("scale" = .lscale, "inequality" = .linequality,
"shape" = .lshape)
misc$earg = list(scale = .escale, inequality= .einequality,
shape = .eshape)
misc$location = extra$location # Use this for prediction
- }), list( .lscale = lscale, .linequality=linequality, .lshape = lshape,
- .escale = escale, .einequality=einequality, .eshape = eshape ))),
+ }), list( .lscale = lscale, .linequality = linequality, .lshape = lshape,
+ .escale = escale, .einequality = einequality, .eshape = eshape ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
location = extra$location
@@ -7933,12 +8031,13 @@ rparetoI = function(n, scale=1, shape=1)
inequality = eta2theta(eta[,2], .linequality, earg = .einequality)
shape = eta2theta(eta[,3], .lshape, earg = .eshape)
zedd = (y - location) / Scale
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dparetoIV(x=y, location=location, scale=Scale,
- inequality=inequality, shape=shape, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dparetoIV(x = y, location=location, scale=Scale,
+ inequality=inequality, shape = shape, log = TRUE))
}
- }, list( .lscale = lscale, .linequality=linequality, .lshape = lshape,
- .escale = escale, .einequality=einequality, .eshape = eshape ))),
+ }, list( .lscale = lscale, .linequality = linequality, .lshape = lshape,
+ .escale = escale, .einequality = einequality, .eshape = eshape ))),
vfamily = c("paretoIV"),
deriv = eval(substitute(expression({
location = extra$location
@@ -7954,11 +8053,11 @@ rparetoI = function(n, scale=1, shape=1)
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
dinequality.deta = dtheta.deta(inequality, .linequality, earg = .einequality)
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape)
- w * cbind(dl.dscale * dscale.deta,
- dl.dinequality * dinequality.deta,
- dl.dshape * dshape.deta)
- }), list( .lscale = lscale, .linequality=linequality, .lshape = lshape,
- .escale = escale, .einequality=einequality, .eshape = eshape ))),
+ c(w) * cbind(dl.dscale * dscale.deta,
+ dl.dinequality * dinequality.deta,
+ dl.dshape * dshape.deta)
+ }), list( .lscale = lscale, .linequality = linequality, .lshape = lshape,
+ .escale = escale, .einequality = einequality, .eshape = eshape ))),
weight = eval(substitute(expression({
temp200 = digamma(shape) - digamma(1) - 1
d2scale.deta2 = shape / ((inequality*Scale)^2 * (shape+2))
@@ -7975,18 +8074,18 @@ rparetoI = function(n, scale=1, shape=1)
wz[,iam(1,2,M)] = dscale.deta * dinequality.deta * d2si.deta2
wz[,iam(1,3,M)] = dscale.deta * dshape.deta * d2ss.deta2
wz[,iam(2,3,M)] = dinequality.deta * dshape.deta * d2is.deta2
- w * wz
- }), list( .lscale = lscale, .linequality=linequality, .lshape = lshape,
- .escale = escale, .einequality=einequality, .eshape = eshape ))))
+ c(w) * wz
+ }), list( .lscale = lscale, .linequality = linequality, .lshape = lshape,
+ .escale = escale, .einequality = einequality, .eshape = eshape ))))
}
- paretoIII = function(location=0,
+ paretoIII = function(location = 0,
lscale = "loge",
linequality = "loge",
- escale = list(), einequality=list(),
+ escale = list(), einequality = list(),
iscale = NULL, iinequality = NULL) {
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
@@ -8025,7 +8124,7 @@ rparetoI = function(n, scale=1, shape=1)
if (!length(inequality.init) || !length(scale.init)) {
probs = (1:4)/5
ytemp = quantile(x=log(y-location), probs=probs)
- fittemp = lsfit(x=logit(probs), y=ytemp, int = TRUE)
+ fittemp = lsfit(x=logit(probs), y = ytemp, int = TRUE)
if (!length(inequality.init))
inequality.init = max(fittemp$coef["X"], 0.01)
if (!length(scale.init))
@@ -8036,34 +8135,35 @@ rparetoI = function(n, scale=1, shape=1)
theta2eta(rep(inequality.init, len = n), .linequality,
earg = .einequality))
}
- }), list( .location = location, .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality,
+ }), list( .location = location, .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality,
.iscale = iscale, .iinequality=iinequality ))),
inverse = eval(substitute(function(eta, extra = NULL) {
location = extra$location
Scale = eta2theta(eta[,1], .lscale, earg = .escale)
inequality = eta2theta(eta[,2], .linequality, earg = .einequality)
location + Scale * NA
- }, list( .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality ))),
+ }, list( .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality ))),
last = eval(substitute(expression({
- misc$link=c("scale" = .lscale, "inequality" = .linequality)
+ misc$link = c("scale" = .lscale, "inequality" = .linequality)
misc$earg = list(scale = .escale, inequality= .einequality)
misc$location = extra$location # Use this for prediction
- }), list( .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality ))),
+ }), list( .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
location = extra$location
Scale = eta2theta(eta[,1], .lscale, earg = .escale)
inequality = eta2theta(eta[,2], .linequality, earg = .einequality)
zedd = (y - location) / Scale
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dparetoIII(x=y, location=location, scale=Scale,
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dparetoIII(x = y, location=location, scale=Scale,
inequality=inequality, log = TRUE))
}
- }, list( .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality ))),
+ }, list( .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality ))),
vfamily = c("paretoIII"),
deriv = eval(substitute(expression({
location = extra$location
@@ -8077,26 +8177,26 @@ rparetoI = function(n, scale=1, shape=1)
inequality - 1) / inequality
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
dinequality.deta = dtheta.deta(inequality, .linequality, earg = .einequality)
- w * cbind(dl.dscale * dscale.deta,
- dl.dinequality * dinequality.deta)
- }), list( .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality ))),
+ c(w) * cbind(dl.dscale * dscale.deta,
+ dl.dinequality * dinequality.deta)
+ }), list( .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality ))),
weight = eval(substitute(expression({
d2scale.deta2 = 1 / ((inequality*Scale)^2 * 3)
d2inequality.deta2 = (1 + 2* trigamma(1)) / (inequality^2 * 3)
wz = matrix(0, n, M) # It is diagonal
wz[,iam(1,1,M)] = dscale.deta^2 * d2scale.deta2
wz[,iam(2,2,M)] = dinequality.deta^2 * d2inequality.deta2
- w * wz
- }), list( .lscale = lscale, .linequality=linequality,
- .escale = escale, .einequality=einequality ))))
+ c(w) * wz
+ }), list( .lscale = lscale, .linequality = linequality,
+ .escale = escale, .einequality = einequality ))))
}
- paretoII = function(location=0,
+ paretoII = function(location = 0,
lscale = "loge",
lshape = "loge",
escale = list(), eshape = list(),
@@ -8138,7 +8238,7 @@ rparetoI = function(n, scale=1, shape=1)
probs = (1:4)/5
scale.init.0 = 1
ytemp = quantile(x=log(y-location+scale.init.0), probs=probs)
- fittemp = lsfit(x=log1p(-probs), y=ytemp, int = TRUE)
+ fittemp = lsfit(x=log1p(-probs), y = ytemp, int = TRUE)
if (!length(shape.init))
shape.init = max(-1/fittemp$coef["X"], 0.01)
if (!length(scale.init))
@@ -8170,9 +8270,10 @@ rparetoI = function(n, scale=1, shape=1)
Scale = eta2theta(eta[,1], .lscale, earg = .escale)
shape = eta2theta(eta[,2], .lshape, earg = .eshape)
zedd = (y - location) / Scale
- if (residuals) stop("loglikelihood residuals not implemented yet") else {
- sum(w * dparetoII(x=y, location=location, scale=Scale,
- shape=shape, log = TRUE))
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dparetoII(x = y, location=location, scale=Scale,
+ shape = shape, log = TRUE))
}
}, list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))),
@@ -8187,8 +8288,8 @@ rparetoI = function(n, scale=1, shape=1)
dl.dshape = -log(temp100) + 1/shape
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape)
- w * cbind(dl.dscale * dscale.deta,
- dl.dshape * dshape.deta)
+ c(w) * cbind(dl.dscale * dscale.deta,
+ dl.dshape * dshape.deta)
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))),
weight = eval(substitute(expression({
@@ -8199,7 +8300,7 @@ rparetoI = function(n, scale=1, shape=1)
wz[,iam(1,1,M)] = dscale.deta^2 * d2scale.deta2
wz[,iam(2,2,M)] = dshape.deta^2 * d2shape.deta2
wz[,iam(1,2,M)] = dscale.deta * dshape.deta * d2ss.deta2
- w * wz
+ c(w) * wz
}), list( .lscale = lscale, .lshape = lshape,
.escale = escale, .eshape = eshape ))))
}
@@ -8284,10 +8385,10 @@ rpareto = function(n, location, shape) {
inverse = eval(substitute(function(eta, extra = NULL) {
k = eta2theta(eta, .lshape, earg = .earg)
location = extra$location
- ifelse(k>1, k * location / (k-1), NA)
+ ifelse(k > 1, k * location / (k-1), NA)
}, list( .lshape = lshape, .earg = earg ))),
last = eval(substitute(expression({
- misc$link = c(k= .lshape)
+ misc$link = c(k = .lshape)
misc$earg = list(k = .earg)
misc$location = extra$location # Use this for prediction
}), list( .lshape = lshape, .earg = earg ))),
@@ -8295,8 +8396,8 @@ rpareto = function(n, location, shape) {
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
k = eta2theta(eta, .lshape, earg = .earg)
location = extra$location
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else {
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
sum(w * (log(k) + k * log(location) - (k+1) * log(y )))
@@ -8308,33 +8409,53 @@ rpareto = function(n, location, shape) {
k = eta2theta(eta, .lshape, earg = .earg)
dl.dk = 1/k + log(location/y)
dk.deta = dtheta.deta(k, .lshape, earg = .earg)
- w * dl.dk * dk.deta
+ c(w) * dl.dk * dk.deta
}), list( .lshape = lshape, .earg = earg ))),
weight = eval(substitute(expression({
ed2l.dk2 = 1 / k^2
- wz = w * dk.deta^2 * ed2l.dk2
+ wz = c(w) * dk.deta^2 * ed2l.dk2
wz
}), list( .lshape = lshape, .earg = earg ))))
}
-dtpareto = function(x, lower, upper, shape) {
- if (!is.Numeric(x))
- stop("bad input for argument 'x'")
- if (!is.Numeric(lower, pos = TRUE))
- stop("argument 'lower' must be positive")
- if (!is.Numeric(upper, pos = TRUE))
- stop("argument 'upper' must be positive")
- if (!is.Numeric(shape, pos = TRUE))
- stop("argument 'shape' must be positive")
- L = max(length(x), length(lower), length(upper), length(shape))
- x = rep(x, len = L); lower = rep(lower, len = L); upper = rep(upper, len = L);
- shape= rep(shape, len = L)
- ifelse(x > lower & x < upper,
- shape * lower^shape / (x^(shape+1) * (1-(lower/upper)^shape)), 0)
+
+
+dtpareto = function(x, lower, upper, shape, log = FALSE) {
+
+ if (!is.logical(log.arg <- log))
+ stop("bad input for argument 'log'")
+ rm(log)
+
+ if (!is.Numeric(x))
+ stop("bad input for argument 'x'")
+ if (!is.Numeric(lower, pos = TRUE))
+ stop("argument 'lower' must be positive")
+ if (!is.Numeric(upper, pos = TRUE))
+ stop("argument 'upper' must be positive")
+ if (!is.Numeric(shape, pos = TRUE))
+ stop("argument 'shape' must be positive")
+
+ L = max(length(x), length(lower), length(upper), length(shape))
+ x = rep(x, len = L); shape = rep(shape, len = L)
+ lower = rep(lower, len = L); upper = rep(upper, len = L);
+
+
+ logdensity <- rep(log(0), len = L)
+ xok <- (0 < lower) & (lower < x) & (x < upper) & (shape > 0)
+
+ logdensity[xok] <- log(shape[xok]) + shape[xok] * log(lower[xok]) -
+ (shape[xok] + 1) * log(x[xok]) -
+ log1p(-(lower[xok] / upper[xok])^(shape[xok]))
+
+ logdensity[shape <= 0] <- NaN
+ logdensity[upper < lower] <- NaN
+ logdensity[0 > lower] <- NaN
+ if (log.arg) logdensity else exp(logdensity)
}
+
ptpareto = function(q, lower, upper, shape) {
if (!is.Numeric(q))
stop("bad input for argument 'q'")
@@ -8344,15 +8465,21 @@ ptpareto = function(q, lower, upper, shape) {
stop("argument 'upper' must be positive")
if (!is.Numeric(shape, pos = TRUE))
stop("argument 'shape' must be positive")
+
L = max(length(q), length(lower), length(upper), length(shape))
q = rep(q, len = L); lower = rep(lower, len = L);
upper = rep(upper, len = L); shape= rep(shape, len = L)
+
ans = q * 0
- ans[q > lower & q < upper] = (1-(lower/q)^shape) / (1-(lower/upper)^shape)
+ xok <- (0 < lower) & (lower < q) & (q < upper) & (shape > 0)
+ ans[xok] = (1 - (lower[xok]/q[xok])^shape[xok]) / (1 -
+ (lower[xok]/upper[xok])^shape[xok])
ans[q >= upper] = 1
+ ans[upper < lower] <- NaN
ans
}
+
qtpareto = function(p, lower, upper, shape) {
if (!is.Numeric(p, posit = TRUE))
stop("bad input for argument 'p'")
@@ -8363,41 +8490,46 @@ qtpareto = function(p, lower, upper, shape) {
if (!is.Numeric(shape, pos = TRUE))
stop("argument 'shape' must be positive")
if (max(p) >= 1)
- stop("argument 'p' must be between 0 and 1")
+ stop("argument 'p' must be in (0, 1)")
+ if (min(upper - lower, na.rm = TRUE) < 0)
+ stop("argument 'upper' must be greater than 'lower' values")
+
lower / (1 - p*(1-(lower/upper)^shape))^(1/shape)
}
+
rtpareto = function(n, lower, upper, shape) {
- if (!is.Numeric(n, posit = TRUE, integ = TRUE, allow = 1))
- stop("bad input for argument 'n'")
if (!is.Numeric(lower, pos = TRUE))
stop("argument 'lower' must be positive")
if (!is.Numeric(upper, pos = TRUE))
stop("argument 'upper' must be positive")
if (!is.Numeric(shape, pos = TRUE))
stop("argument 'shape' must be positive")
- lower / (1 - runif(n)*(1-(lower/upper)^shape))^(1/shape)
+
+ qtpareto(p = runif(n), lower = lower, upper = upper, shape = shape)
}
- tpareto1 = function(lower, upper, lshape = "loge", earg = list(), ishape = NULL,
- method.init = 1) {
+ tpareto1 = function(lower, upper, lshape = "loge", earg = list(),
+ ishape = NULL, imethod = 1) {
if (mode(lshape) != "character" && mode(lshape) != "name")
lshape = as.character(substitute(lshape))
+
if (!is.Numeric(lower, posit = TRUE, allow = 1))
stop("bad input for argument 'lower'")
if (!is.Numeric(upper, posit = TRUE, allow = 1))
stop("bad input for argument 'upper'")
if (lower >= upper)
stop("lower < upper is required")
+
if (length(ishape) && !is.Numeric(ishape, posit = TRUE))
stop("bad input for argument 'ishape'")
if (!is.list(earg)) earg = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
new("vglmff",
blurb = c("Truncated Pareto distribution f(y) = shape * lower^shape /",
@@ -8409,18 +8541,22 @@ rtpareto = function(n, lower, upper, shape) {
initialize = eval(substitute(expression({
if (ncol(cbind(y)) != 1)
stop("response must be a vector or a one-column matrix")
- predictors.names = namesof("shape", .lshape, earg = .earg, tag = FALSE)
+
+ predictors.names = namesof("shape", .lshape, earg = .earg,
+ tag = FALSE)
if (any(y <= .lower))
stop("the value of argument 'lower' is too high ",
"(requires '0 < lower < min(y)')")
+
extra$lower = .lower
if (any(y >= .upper))
stop("the value of argument 'upper' is too low ",
"(requires 'max(y) < upper')")
extra$upper = .upper
+
if (!length(etastart)) {
shape.init = if (is.Numeric( .ishape)) 0 * y + .ishape else
- if ( .method.init == 2) {
+ if ( .imethod == 2) {
0 * y + median(rep((y + 1/8) / (y - .lower + 1/8), times=w))
} else {
tpareto1.Loglikfun = function(shape, y, x, w, extraargs) {
@@ -8429,52 +8565,60 @@ rtpareto = function(n, lower, upper, shape) {
(shape+1) * log(y) - log1p(-myratio^shape)))
}
shape.grid = 2^((-4):4)
- try.this = getMaxMin(shape.grid, objfun=tpareto1.Loglikfun,
- y=y, x=x, w=w)
+ try.this = getMaxMin(shape.grid, objfun = tpareto1.Loglikfun,
+ y = y, x = x, w = w)
try.this = rep(try.this, len = n)
try.this
}
etastart = theta2eta(shape.init, .lshape, earg = .earg)
}
- }), list( .ishape = ishape, .earg = earg, .lshape = lshape,
- .method.init = method.init,
- .lower=lower, .upper=upper ))),
+ }), list( .lshape = lshape, .earg = earg,
+ .ishape = ishape,
+ .imethod = imethod,
+ .lower = lower, .upper = upper ))),
inverse = eval(substitute(function(eta, extra = NULL) {
shape = eta2theta(eta, .lshape, earg = .earg)
myratio = .lower / .upper
constprop = shape * .lower^shape / (1 - myratio^shape)
constprop * ( .upper^(1-shape) - .lower^(1-shape)) / (1-shape)
- }, list( .lshape = lshape, .earg = earg, .lower=lower, .upper=upper ))),
+ }, list( .lshape = lshape, .earg = earg,
+ .lower = lower, .upper = upper ))),
last = eval(substitute(expression({
- misc$link = c(shape= .lshape)
+ misc$link = c(shape = .lshape)
misc$earg = list(shape = .earg)
misc$lower = extra$lower
misc$upper = extra$upper
misc$expected = TRUE
- }), list( .lshape = lshape, .earg = earg, .lower=lower, .upper=upper ))),
+ }), list( .lshape = lshape, .earg = earg,
+ .lower = lower, .upper = upper ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
shape = eta2theta(eta, .lshape, earg = .earg)
- myratio = .lower / .upper
- if (residuals) stop("loglikelihood residuals not implemented yet") else
- sum(w * (log(shape) + shape * log( .lower) - (shape+1) * log(y) -
- log1p(-myratio^shape)))
- }, list( .lshape = lshape, .earg = earg, .lower=lower, .upper=upper ))),
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ ans = sum(w * dtpareto(x = y, lower = .lower , upper = .upper ,
+ shape = shape, log = TRUE))
+ ans
+ }
+ }, list( .lshape = lshape, .earg = earg,
+ .lower = lower, .upper = upper ))),
vfamily = c("tpareto1"),
deriv = eval(substitute(expression({
shape = eta2theta(eta, .lshape, earg = .earg)
myratio = .lower / .upper
- myratio2 = myratio^shape
+ myratio2 = myratio^shape
tmp330 = myratio2 * log(myratio) / (1 - myratio2)
- dl.dshape = 1/shape + log( .lower) - log(y) + tmp330
+ dl.dshape = 1 / shape + log( .lower) - log(y) + tmp330
dshape.deta = dtheta.deta(shape, .lshape, earg = .earg)
- w * dl.dshape * dshape.deta
- }), list( .lshape = lshape, .earg = earg, .lower=lower, .upper=upper ))),
+ c(w) * dl.dshape * dshape.deta
+ }), list( .lshape = lshape, .earg = earg,
+ .lower = lower, .upper = upper ))),
weight = eval(substitute(expression({
ed2l.dshape2 = 1 / shape^2 - tmp330^2 / myratio2
- wz = w * dshape.deta^2 * ed2l.dshape2
+ wz = c(w) * dshape.deta^2 * ed2l.dshape2
wz
- }), list( .lshape = lshape, .earg = earg, .lower=lower, .upper=upper ))))
+ }), list( .lshape = lshape, .earg = earg,
+ .lower = lower, .upper = upper ))))
}
@@ -8514,7 +8658,7 @@ erfc = function(x)
initlambda = rep(initlambda, len = n)
etastart = cbind(theta2eta(initlambda, link=.link.lambda, earg = .earg))
}
- }), list( .link.lambda=link.lambda, .earg = earg,
+ }), list( .link.lambda = link.lambda, .earg = earg,
.init.lambda=init.lambda ))),
inverse=function(eta, extra = NULL) {
0*eta + 1
@@ -8522,25 +8666,25 @@ erfc = function(x)
last = eval(substitute(expression({
misc$link = c(lambda = .link.lambda )
misc$earg = list(lambda = .earg )
- }), list( .link.lambda=link.lambda, .earg = earg ))),
+ }), list( .link.lambda = link.lambda, .earg = earg ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
lambda = eta2theta(eta, link=.link.lambda, earg = .earg)
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w * (0.5 * log(lambda/(2*pi*y^3)) - lambda * (y-1)^2 / (2*y)))
- }, list( .link.lambda=link.lambda, .earg = earg ))),
+ }, list( .link.lambda = link.lambda, .earg = earg ))),
vfamily = "wald",
deriv = eval(substitute(expression({
lambda = eta2theta(eta, link=.link.lambda, earg = .earg)
dl.dlambda = 0.5 / lambda + 1 - 0.5 * (y + 1/y)
dlambda.deta = dtheta.deta(theta=lambda, link=.link.lambda, earg = .earg)
- w * cbind(dl.dlambda * dlambda.deta)
- }), list( .link.lambda=link.lambda, .earg = earg ))),
+ c(w) * cbind(dl.dlambda * dlambda.deta)
+ }), list( .link.lambda = link.lambda, .earg = earg ))),
weight = eval(substitute(expression({
d2l.dlambda2 = 0.5 / (lambda^2)
- w * cbind(dlambda.deta^2 * d2l.dlambda2)
- }), list( .link.lambda=link.lambda, .earg = earg ))))
+ c(w) * cbind(dlambda.deta^2 * d2l.dlambda2)
+ }), list( .link.lambda = link.lambda, .earg = earg ))))
}
@@ -8587,7 +8731,7 @@ erfc = function(x)
rep( .ishape, len = n)
scale.init = if (length( .iscale)) rep( .iscale, len = n) else
(digamma(shape.init+1) - digamma(1)) / (y+1/8)
- scale.init = rep(weighted.mean(scale.init, w=w), len = n)
+ scale.init = rep(weighted.mean(scale.init, w = w), len = n)
etastart = cbind(theta2eta(shape.init, .lshape, earg = .eshape),
theta2eta(scale.init, .lscale, earg = .escale))
}
@@ -8609,8 +8753,8 @@ erfc = function(x)
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
shape = eta2theta(eta[,1], .lshape, earg = .eshape)
scale = eta2theta(eta[,2], .lscale, earg = .escale)
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w * (log(shape) + log(scale) +
(shape-1)*log1p(-exp(-scale*y)) - scale*y))
}, list( .lscale = lscale, .lshape = lshape,
@@ -8623,7 +8767,8 @@ erfc = function(x)
dl.dshape = 1/shape + log1p(-exp(-scale*y))
dscale.deta = dtheta.deta(scale, .lscale, earg = .escale)
dshape.deta = dtheta.deta(shape, .lshape, earg = .eshape)
- w * cbind(dl.dshape * dshape.deta, dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dshape * dshape.deta,
+ dl.dscale * dscale.deta)
}), list( .lshape = lshape, .lscale = lscale,
.eshape = eshape, .escale = escale ))),
weight = eval(substitute(expression({
@@ -8661,7 +8806,7 @@ erfc = function(x)
wz[,iam(1,1,M)] = dshape.deta^2 * d11
wz[,iam(2,2,M)] = dscale.deta^2 * d22
wz[,iam(1,2,M)] = dscale.deta * dshape.deta * d12
- w * wz
+ c(w) * wz
}), list( .tolerance=tolerance ))))
}
@@ -8726,8 +8871,8 @@ erfc = function(x)
scale = eta2theta(eta, .lscale, earg = .escale)
temp7 = -expm1(-scale*y)
shape = -extra$sumw / sum(w*log(temp7)) # \gamma(\theta)
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else
sum(w * (log(shape) + log(scale) +
(shape-1)*log1p(-exp(-scale*y)) - scale*y))
}, list( .lscale = lscale, .escale = escale ))),
@@ -8738,7 +8883,7 @@ erfc = function(x)
temp7 = 1-temp6
shape = -extra$sumw / sum(w*log(temp7)) # \gamma(\theta)
d1 = 1/scale + (shape-1)*y*temp6/temp7 - y
- w * cbind(d1 * dtheta.deta(scale, .lscale, earg = .escale))
+ c(w) * cbind(d1 * dtheta.deta(scale, .lscale, earg = .escale))
}), list( .lscale = lscale, .escale = escale ))),
weight = eval(substitute(expression({
d11 = 1/scale^2 + y*(temp6/temp7^2) * ((shape-1) *
@@ -8752,10 +8897,10 @@ erfc = function(x)
for(ii in 1:ncol(wz))
wz[,ii] = sum(wz[,ii]) / sumw
pooled.weight = TRUE
- wz = w * wz # Put back the weights
+ wz = c(w) * wz # Put back the weights
} else
pooled.weight = FALSE
- w * wz
+ c(w) * wz
}), list( .lscale = lscale, .escale = escale ))))
}
@@ -8783,10 +8928,10 @@ betaffqn.control <- function(save.weight = TRUE, ...)
new("vglmff",
blurb = c("Two-parameter Beta distribution\n",
if (stdbeta)
- "y^(shape1-1) * (1-y)^(shape2-1), 0<=y<=1, shape1>0, shape2>0\n\n"
+ "y^(shape1-1) * (1-y)^(shape2-1), 0<=y <= 1, shape1>0, shape2>0\n\n"
else
paste("(y-",A,")^(shape1-1) * (",B,
- "-y)^(shape2-1), ",A,"<=y< = ",B," shape1>0, shape2>0\n\n", sep = ""),
+ "-y)^(shape2-1), ",A,"<=y <= ",B," shape1>0, shape2>0\n\n", sep = ""),
"Links: ",
namesof("shape1", link, earg = earg), ", ",
namesof("shape2", link, earg = earg)),
@@ -8833,8 +8978,8 @@ betaffqn.control <- function(save.weight = TRUE, ...)
function(mu, y, w, residuals = FALSE, eta, extra = NULL){
shapes = eta2theta(eta, .link, earg = .earg)
temp = lbeta(shapes[,1], shapes[,2])
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else {
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
@@ -8855,7 +9000,7 @@ betaffqn.control <- function(save.weight = TRUE, ...)
etaold = etanew
etanew = eta
}
- derivnew = w * dl.dshapes * dshapes.deta
+ derivnew = c(w) * dl.dshapes * dshapes.deta
derivnew
}), list( .link = link, .earg = earg, .A = A, .B = B ))),
weight = expression({
@@ -8863,8 +9008,8 @@ betaffqn.control <- function(save.weight = TRUE, ...)
wznew = cbind(matrix(w, n, M), matrix(0, n, dimm(M)-M))
} else {
wzold = wznew
- wznew = qnupdate(w=w, wzold=wzold, dderiv=(derivold - derivnew),
- deta=etanew-etaold, M=M,
+ wznew = qnupdate(w = w, wzold=wzold, dderiv=(derivold - derivnew),
+ deta=etanew-etaold, M = M,
trace=trace) # weights incorporated in args
}
wznew
@@ -8880,13 +9025,13 @@ betaffqn.control <- function(save.weight = TRUE, ...)
elocation = list(),
escale = list(),
ilocation = NULL, iscale = NULL,
- method.init = 1, zero = NULL) {
+ imethod = 1, zero = NULL) {
if (mode(llocation) != "character" && mode(llocation) != "name")
llocation = as.character(substitute(llocation))
if (mode(lscale) != "character" && mode(lscale) != "name")
lscale = as.character(substitute(lscale))
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (length(zero) && !is.Numeric(zero, integer = TRUE, posit = TRUE))
stop("bad input for argument 'zero'")
if (length(iscale) && !is.Numeric(iscale, posit = TRUE))
@@ -8912,7 +9057,7 @@ betaffqn.control <- function(save.weight = TRUE, ...)
c(namesof("location", .llocation, earg = .elocation, tag = FALSE),
namesof("scale", .lscale, earg = .escale, tag = FALSE))
if (!length(etastart)) {
- if ( .method.init == 1) {
+ if ( .imethod == 1) {
location.init = y
scale.init = sqrt(3) * sd(y) / pi
} else {
@@ -8928,7 +9073,7 @@ betaffqn.control <- function(save.weight = TRUE, ...)
theta2eta(location.init, .llocation, earg = .elocation),
theta2eta(scale.init, .lscale, earg = .escale))
}
- }), list( .method.init = method.init,
+ }), list( .imethod = imethod,
.elocation = elocation, .escale = escale,
.llocation = llocation, .lscale = lscale,
.ilocation = ilocation, .iscale = iscale ))),
@@ -8945,9 +9090,9 @@ betaffqn.control <- function(save.weight = TRUE, ...)
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
location = eta2theta(eta[,1], .llocation, earg = .elocation)
Scale = eta2theta(eta[,2], .lscale, earg = .escale)
- if (residuals)
- stop("loglikelihood residuals not implemented yet") else {
- sum(w * dlogis(x=y, location = location,
+ if (residuals) stop("loglikelihood residuals ",
+ "not implemented yet") else {
+ sum(w * dlogis(x = y, location = location,
scale = Scale, log = TRUE))
}
}, list( .llocation = llocation, .lscale = lscale,
@@ -8962,8 +9107,8 @@ betaffqn.control <- function(save.weight = TRUE, ...)
dlocation.deta = dtheta.deta(location, .llocation, earg = .elocation)
dl.dscale = zedd * (1-ezedd) / ((1 + ezedd) * Scale) - 1/Scale
dscale.deta = dtheta.deta(Scale, .lscale, earg = .escale)
- w * cbind(dl.dlocation * dlocation.deta,
- dl.dscale * dscale.deta)
+ c(w) * cbind(dl.dlocation * dlocation.deta,
+ dl.dscale * dscale.deta)
}), list( .llocation = llocation, .lscale = lscale,
.elocation = elocation, .escale = escale ))),
weight = eval(substitute(expression({
@@ -8972,7 +9117,7 @@ betaffqn.control <- function(save.weight = TRUE, ...)
wz = matrix(as.numeric(NA), nrow=n, ncol=M) # diagonal
wz[,iam(1,1,M)] = d2l.location2 * dlocation.deta^2
wz[,iam(2,2,M)] = d2l.dscale2 * dscale.deta^2
- w * wz
+ c(w) * wz
}), list( .llocation = llocation, .lscale = lscale,
.elocation = elocation, .escale = escale ))))
}
diff --git a/R/family.zeroinf.R b/R/family.zeroinf.R
index aa303ff..b8f44b2 100644
--- a/R/family.zeroinf.R
+++ b/R/family.zeroinf.R
@@ -318,7 +318,7 @@ rzipois = function(n, lambda, phi = 0) {
phi = (1 - temp5 - extra$sumw/extra$narg) / (1 - temp5)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dzipois(x=y, phi = phi, lambda = lambda, log = TRUE))
+ sum(w * dzipois(x = y, phi = phi, lambda = lambda, log = TRUE))
}
}, list( .link.lambda = link.lambda ))),
vfamily = c("yip88"),
@@ -362,6 +362,7 @@ rzipois = function(n, lambda, phi = 0) {
eval(negzero.expression)
}), list( .zero = zero ))),
initialize = eval(substitute(expression({
+ Musual <- 2
y = as.matrix(y)
if (any(y != round(y )))
stop("the response must be integer-valued")
@@ -379,7 +380,7 @@ rzipois = function(n, lambda, phi = 0) {
predictors.names =
c(namesof(mynames1, .lp0, earg = .ep0, tag = FALSE),
namesof(mynames2, .llambda, earg = .elambda, tag = FALSE))
- predictors.names = predictors.names[interleave.VGAM(2*NOS, M = 2)]
+ predictors.names = predictors.names[interleave.VGAM(Musual*NOS, M = Musual)]
if (!length(etastart)) {
etastart = cbind(theta2eta((0.5+w*y0)/(1+w), .lp0, earg = .ep0 ),
@@ -390,7 +391,7 @@ rzipois = function(n, lambda, phi = 0) {
y[!sthese, spp.] / (-expm1(-y[!sthese, spp.])),
.llambda, earg = .elambda )
}
- etastart = etastart[, interleave.VGAM(ncol(etastart), M = 2)]
+ etastart = etastart[, interleave.VGAM(ncol(etastart), M = Musual)]
}
}), list( .lp0 = lp0, .llambda = llambda,
.ep0 = ep0, .elambda = elambda ))),
@@ -409,12 +410,12 @@ rzipois = function(n, lambda, phi = 0) {
last = eval(substitute(expression({
temp.names = c(rep( .lp0, len = NOS),
rep( .llambda, len = NOS))
- temp.names = temp.names[interleave.VGAM(2*NOS, M = 2)]
+ temp.names = temp.names[interleave.VGAM(Musual*NOS, M = Musual)]
misc$link = temp.names
misc$earg = vector("list", 2 * NOS)
names(misc$link) <-
names(misc$earg) <-
- c(mynames1, mynames2)[interleave.VGAM(2*NOS, M = 2)]
+ c(mynames1, mynames2)[interleave.VGAM(Musual*NOS, M = Musual)]
for(ii in 1:NOS) {
misc$earg[[2*ii-1]] = .ep0
misc$earg[[2*ii ]] = .elambda
@@ -460,7 +461,7 @@ rzipois = function(n, lambda, phi = 0) {
(y0 / mup0 - 1) / (1 - mup0)
ans <- cbind(temp3,
w * dl.dlambda * dlambda.deta)
- ans = ans[, interleave.VGAM(ncol(ans), M = 2)]
+ ans = ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
}), list( .lp0 = lp0, .llambda = llambda,
.ep0 = ep0, .elambda = elambda ))),
@@ -489,7 +490,7 @@ rzipois = function(n, lambda, phi = 0) {
}
wz[, 1:NOS] = tmp200
- wz = wz[, interleave.VGAM(ncol(wz), M = 2)]
+ wz = wz[, interleave.VGAM(ncol(wz), M = Musual)]
wz
}), list( .lp0 = lp0, .ep0 = ep0 ))))
@@ -500,36 +501,38 @@ rzipois = function(n, lambda, phi = 0) {
- zanegbinomial = function(lp0 = "logit", lmunb = "loge", lk = "loge",
- ep0 = list(), emunb = list(), ek = list(),
- ipnb0 = NULL, ik = NULL, zero = -3,
- cutoff = 0.995, method.init = 1,
- shrinkage.init = 0.95)
+ zanegbinomial =
+ function(lp0 = "logit", lmunb = "loge", lsize = "loge",
+ ep0 = list(), emunb = list(), esize = list(),
+ ipnb0 = NULL, isize = NULL, zero = -3,
+ cutoff = 0.995, imethod = 1,
+ shrinkage.init = 0.95)
{
- if (!is.Numeric(cutoff, positiv=TRUE, allow = 1) || cutoff<0.8 || cutoff>=1)
+ if (!is.Numeric(cutoff, positiv = TRUE, allow = 1) ||
+ cutoff < 0.8 || cutoff >= 1)
stop("range error in the argument 'cutoff'")
- if (length(ipnb0) && (!is.Numeric(ipnb0, positiv=TRUE) ||
+ if (length(ipnb0) && (!is.Numeric(ipnb0, positiv = TRUE) ||
max(ipnb0) >= 1))
stop("If given, 'ipnb0' must contain values in (0,1) only")
- if (length(ik) && !is.Numeric(ik, positiv=TRUE))
- stop("If given, 'ik' must contain positive values only")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
+ if (length(isize) && !is.Numeric(isize, positiv = TRUE))
+ stop("If given, 'isize' must contain positive values only")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
if (mode(lmunb) != "character" && mode(lmunb) != "name")
lmunb = as.character(substitute(lmunb))
- if (mode(lk) != "character" && mode(lk) != "name")
- lk = as.character(substitute(lk))
+ if (mode(lsize) != "character" && mode(lsize) != "name")
+ lsize = as.character(substitute(lsize))
if (mode(lp0) != "character" && mode(lp0) != "name")
lp0 = as.character(substitute(lp0))
if (!is.list(ep0)) ep0 = list()
if (!is.list(emunb)) emunb = list()
- if (!is.list(ek)) ek = list()
+ if (!is.list(esize)) esize = list()
new("vglmff",
blurb = c("Zero-altered negative binomial (binomial and\n",
@@ -537,8 +540,8 @@ rzipois = function(n, lambda, phi = 0) {
"Links: ",
namesof("p0", lp0, earg = ep0, tag = FALSE), ", ",
namesof("munb", lmunb, earg = emunb, tag = FALSE), ", ",
- namesof("k", lk, earg = ek, tag = FALSE), "\n",
- "Mean: (1-p0) * munb / [1 - (k/(k+munb))^k]"),
+ namesof("size", lsize, earg = esize, tag = FALSE), "\n",
+ "Mean: (1-p0) * munb / [1 - (size/(size+munb))^size]"),
constraints = eval(substitute(expression({
dotzero <- .zero
@@ -546,22 +549,24 @@ rzipois = function(n, lambda, phi = 0) {
eval(negzero.expression)
}), list( .zero = zero ))),
initialize = eval(substitute(expression({
+ Musual <- 3
y = as.matrix(y)
extra$NOS = NOS = ncoly = ncol(y) # Number of species
- M = 3 * ncoly #
+ M = Musual * ncoly #
if (any(y != round(y)))
stop("the response must be integer-valued")
if (any(y < 0))
stop("the response must not have negative values")
- mynames1 = if (NOS == 1) "p0" else paste("p0", 1:NOS, sep = "")
+ mynames1 = if (NOS == 1) "p0" else paste("p0", 1:NOS, sep = "")
mynames2 = if (NOS == 1) "munb" else paste("munb", 1:NOS, sep = "")
- mynames3 = if (NOS == 1) "k" else paste("k", 1:NOS, sep = "")
+ mynames3 = if (NOS == 1) "size" else paste("size", 1:NOS, sep = "")
predictors.names =
c(namesof(mynames1, .lp0, earg = .ep0, tag = FALSE),
namesof(mynames2, .lmunb, earg = .emunb, tag = FALSE),
- namesof(mynames3, .lk, earg = .ek, tag = FALSE))
- predictors.names = predictors.names[interleave.VGAM(3*NOS, M = 3)]
+ namesof(mynames3, .lsize, earg = .esize, tag = FALSE))
+ predictors.names =
+ predictors.names[interleave.VGAM(Musual*NOS, M = Musual)]
extra$y0 = y0 = ifelse(y == 0, 1, 0)
extra$skip.these = skip.these = matrix(as.logical(y0), n, NOS)
@@ -569,7 +574,7 @@ rzipois = function(n, lambda, phi = 0) {
mu.init = y
for(iii in 1:ncol(y)) {
index.posy = (y[,iii] > 0)
- use.this = if ( .method.init == 2) {
+ use.this = if ( .imethod == 2) {
weighted.mean(y[index.posy,iii], w[index.posy])
} else {
median(rep(y[index.posy,iii], w[index.posy])) + 1/2
@@ -585,7 +590,7 @@ rzipois = function(n, lambda, phi = 0) {
pnb0 = matrix(if(length( .ipnb0)) .ipnb0 else -1,
- nr=n, nc=NOS, byrow=TRUE)
+ nr=n, nc=NOS, byrow = TRUE)
for(spp. in 1:NOS) {
if (any(pnb0[,spp.] < 0)) {
index.y0 = y[,spp.] < 0.5
@@ -594,12 +599,12 @@ rzipois = function(n, lambda, phi = 0) {
}
- if ( is.Numeric( .ik )) {
- kmat0 = matrix( .ik, nr=n, nc=ncoly, byrow=TRUE)
+ if ( is.Numeric( .isize )) {
+ kmat0 = matrix( .isize, nr=n, nc=ncoly, byrow = TRUE)
} else {
posnegbinomial.Loglikfun = function(kmat, y, x, w, extraargs) {
munb = extraargs
- sum(w * dposnegbin(x=y, munb=munb, size=kmat, log = TRUE))
+ sum(w * dposnegbin(x = y, munb = munb, size = kmat, log = TRUE))
}
k.grid = 2^((-6):6)
kmat0 = matrix(0, nr=n, nc=NOS)
@@ -607,21 +612,22 @@ rzipois = function(n, lambda, phi = 0) {
index.posy = y[,spp.] > 0
posy = y[index.posy, spp.]
kmat0[,spp.] = getMaxMin(k.grid,
- objfun=posnegbinomial.Loglikfun,
- y=posy, x=x[index.posy,], w=w[index.posy],
- extraargs= mu.init[index.posy, spp.])
+ objfun = posnegbinomial.Loglikfun,
+ y = posy, x = x[index.posy,],
+ w = w[index.posy],
+ extraargs = mu.init[index.posy, spp.])
}
}
etastart = cbind(theta2eta(pnb0, .lp0, earg = .ep0 ),
theta2eta(mu.init, .lmunb, earg = .emunb),
- theta2eta(kmat0, .lk, earg = .ek ))
- etastart = etastart[, interleave.VGAM(ncol(etastart), M = 3)]
+ theta2eta(kmat0, .lsize, earg = .esize ))
+ etastart = etastart[, interleave.VGAM(ncol(etastart), M = Musual)]
}
- }), list( .lp0 = lp0, .lmunb = lmunb, .lk = lk,
- .ep0 = ep0, .emunb = emunb, .ek = ek,
- .ipnb0=ipnb0, .ik=ik,
- .method.init = method.init, .sinit = shrinkage.init ))),
+ }), list( .lp0 = lp0, .lmunb = lmunb, .lsize = lsize,
+ .ep0 = ep0, .emunb = emunb, .esize = esize,
+ .ipnb0 = ipnb0, .isize = isize,
+ .imethod = imethod, .sinit = shrinkage.init ))),
inverse = eval(substitute(function(eta, extra = NULL) {
NOS <- extra$NOS
p0 <- eta2theta(eta[,3*(1:NOS)-2],
@@ -629,49 +635,51 @@ rzipois = function(n, lambda, phi = 0) {
munb <- eta2theta(eta[,3*(1:NOS)-1, drop = FALSE],
.lmunb, earg = .emunb )
kmat <- eta2theta(eta[,3*(1:NOS), drop = FALSE],
- .lk, earg = .ek )
+ .lsize, earg = .esize )
pnb0 <- (kmat / (kmat + munb))^kmat # p(0) from negative binomial
(1 - p0) * munb / (1 - pnb0)
- }, list( .lp0 = lp0, .lk = lk, .lmunb = lmunb,
- .ep0 = ep0, .emunb = emunb, .ek = ek ))),
+ }, list( .lp0 = lp0, .lsize = lsize, .lmunb = lmunb,
+ .ep0 = ep0, .emunb = emunb, .esize = esize ))),
last = eval(substitute(expression({
- misc$link = c(rep( .lp0, length=NOS),
- rep( .lmunb, length=NOS),
- rep( .lk, length=NOS))
+ misc$link = c(rep( .lp0, length = NOS),
+ rep( .lmunb, length = NOS),
+ rep( .lsize, length = NOS))
temp.names = c(mynames1, mynames2, mynames3)
- temp.names = temp.names[interleave.VGAM(3*NOS, M = 3)]
+ temp.names = temp.names[interleave.VGAM(Musual*NOS, M = Musual)]
names(misc$link) = temp.names
- misc$earg = vector("list", 3*NOS)
+ misc$earg = vector("list", Musual*NOS)
names(misc$earg) = temp.names
for(ii in 1:NOS) {
misc$earg[[3*ii-2]] = .ep0
misc$earg[[3*ii-1]] = .emunb
- misc$earg[[3*ii ]] = .ek
+ misc$earg[[3*ii ]] = .esize
}
misc$cutoff = .cutoff
- misc$method.init = .method.init
- }), list( .lp0 = lp0, .lmunb = lmunb, .lk = lk, .cutoff = cutoff,
- .ep0 = ep0, .emunb = emunb, .ek = ek,
- .method.init = method.init ))),
+ misc$imethod = .imethod
+ }), list( .lp0 = lp0, .lmunb = lmunb, .lsize = lsize,
+ .ep0 = ep0, .emunb = emunb, .esize = esize,
+ .cutoff = cutoff,
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- NOS = extra$NOS
- p0 = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE], .lp0, earg = .ep0 )
- munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
- kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lk, earg = .ek )
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dzanegbin(x=y, p0=p0, munb=munb, size=kmat, log = TRUE))
- }
- }, list( .lp0 = lp0, .lmunb = lmunb, .lk = lk,
- .ep0 = ep0, .emunb = emunb, .ek = ek ))),
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ NOS = extra$NOS
+ p0 = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE], .lp0, earg = .ep0 )
+ munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
+ kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lsize, earg = .esize )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dzanegbin(x = y, p0 = p0, munb = munb, size = kmat, log = TRUE))
+ }
+ }, list( .lp0 = lp0, .lmunb = lmunb, .lsize = lsize,
+ .ep0 = ep0, .emunb = emunb, .esize = esize ))),
vfamily = c("zanegbinomial"),
deriv = eval(substitute(expression({
+ Musual <- 3
NOS = extra$NOS
y0 = extra$y0
- p0 = eta2theta(eta[,3*(1:NOS)-2], .lp0, earg = .ep0 )
+ p0 = eta2theta(eta[,3*(1:NOS)-2], .lp0, earg = .ep0 )
munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
- kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lk, earg = .ek )
+ kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lsize, earg = .esize )
skip = extra$skip.these
d3 = deriv3(~ -log(1 - (kmat. /(kmat. + munb. ))^kmat. ),
@@ -695,8 +703,9 @@ rzipois = function(n, lambda, phi = 0) {
dl.dk[skip[,spp.],spp.] = dl.dmunb[skip[,spp.],spp.] = 0
dmunb.deta = dtheta.deta(munb, .lmunb, earg = .emunb )
- dk.deta = dtheta.deta(kmat, .lk, earg = .ek )
- myderiv = w * cbind(dl.dmunb * dmunb.deta, dl.dk * dk.deta)
+ dk.deta = dtheta.deta(kmat, .lsize, earg = .esize )
+ myderiv = c(w) * cbind(dl.dmunb * dmunb.deta,
+ dl.dk * dk.deta)
mup0 = p0
temp3 = if ( .lp0 == "logit") {
@@ -706,10 +715,10 @@ rzipois = function(n, lambda, phi = 0) {
(y0/mup0 - 1) / (1-mup0)
ans = cbind(temp3, myderiv)
- ans = ans[, interleave.VGAM(ncol(ans), M = 3)]
+ ans = ans[, interleave.VGAM(ncol(ans), M = Musual)]
ans
- }), list( .lp0 = lp0, .lmunb = lmunb, .lk = lk,
- .ep0 = ep0, .emunb = emunb, .ek = ek ))),
+ }), list( .lp0 = lp0, .lmunb = lmunb, .lsize = lsize,
+ .ep0 = ep0, .emunb = emunb, .esize = esize ))),
weight = eval(substitute(expression({
wz = matrix(0, n, 6*NOS-1) # wz is not 'diagonal'
pnb0 = (kmat / (kmat + munb))^kmat
@@ -804,157 +813,158 @@ dposnegbin = function(x, munb, k, log = FALSE) {
zipoisson = function(lphi = "logit", llambda = "loge",
ephi = list(), elambda = list(),
- iphi = NULL, ilambda = NULL, method.init = 1,
+ iphi = NULL, ilambda = NULL, imethod = 1,
shrinkage.init = 0.8, zero = NULL)
{
- if (mode(lphi) != "character" && mode(lphi) != "name")
- lphi = as.character(substitute(lphi))
- if (mode(llambda) != "character" && mode(llambda) != "name")
- llambda = as.character(substitute(llambda))
- if (is.Numeric(iphi))
- if (!is.Numeric(iphi, posit = TRUE) || any(iphi >= 1))
- stop("'iphi' values must be inside the interval (0,1)")
- if (is.Numeric(ilambda))
- if (!is.Numeric(ilambda, posit = TRUE))
- stop("'ilambda' values must be positive")
- if (!is.list(ephi)) ephi = list()
- if (!is.list(elambda)) elambda = list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2) stop("argument 'method.init' must be 1 or 2")
- if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
- shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
-
- new("vglmff",
- blurb = c("Zero-inflated Poisson\n\n",
- "Links: ",
- namesof("phi", lphi, earg = ephi), ", ",
- namesof("lambda", llambda, earg = elambda), "\n",
- "Mean: (1-phi)*lambda"),
- constraints = eval(substitute(expression({
- constraints <- cm.zero.vgam(constraints, x, .zero, M)
- }), list( .zero=zero ))),
- initialize = eval(substitute(expression({
- if (ncol(as.matrix(y)) != 1)
- stop("multivariate responses not allowed")
- if (any(round(y) != y))
- stop("integer-valued responses only allowed for ",
- "the 'zipoisson' family")
-
- predictors.names = c(
- namesof("phi", .lphi, earg = .ephi, tag = FALSE),
- namesof("lambda", .llambda, earg = .ephi, tag = FALSE))
-
- if (!length(etastart)) {
- phi.init = if (length( .iphi )) .iphi else {
- 0.5 * sum(w[y == 0]) / sum(w)
- }
- phi.init[phi.init <= 0.02] = 0.02 # Last resort
- phi.init[phi.init >= 0.98] = 0.98 # Last resort
-
+ if (mode(lphi) != "character" && mode(lphi) != "name")
+ lphi = as.character(substitute(lphi))
+ if (mode(llambda) != "character" && mode(llambda) != "name")
+ llambda = as.character(substitute(llambda))
+ if (is.Numeric(iphi))
+ if (!is.Numeric(iphi, posit = TRUE) || any(iphi >= 1))
+ stop("'iphi' values must be inside the interval (0,1)")
+ if (is.Numeric(ilambda))
+ if (!is.Numeric(ilambda, posit = TRUE))
+ stop("'ilambda' values must be positive")
+ if (!is.list(ephi)) ephi = list()
+ if (!is.list(elambda)) elambda = list()
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2) stop("argument 'imethod' must be 1 or 2")
+ if (!is.Numeric(shrinkage.init, allow = 1) || shrinkage.init < 0 ||
+ shrinkage.init > 1) stop("bad input for argument 'shrinkage.init'")
- if ( length( .ilambda )) {
- lambda.init = rep( .ilambda, len = n)
- } else if ( length(mustart)) {
- lambda.init = mustart / (1 - phi.init)
- } else if ( .method.init == 2) {
- mymean = weighted.mean(y[y > 0], w[y > 0]) + 1/16
- lambda.init = (1 - .sinit) * (y + 1/8) + .sinit * mymean
- } else {
- use.this = median(y[y > 0]) + 1 / 16
- lambda.init = (1 - .sinit) * (y + 1/8) + .sinit * use.this
- }
+ new("vglmff",
+ blurb = c("Zero-inflated Poisson\n\n",
+ "Links: ",
+ namesof("phi", lphi, earg = ephi), ", ",
+ namesof("lambda", llambda, earg = elambda), "\n",
+ "Mean: (1-phi)*lambda"),
+ constraints = eval(substitute(expression({
+ constraints <- cm.zero.vgam(constraints, x, .zero, M)
+ }), list( .zero=zero ))),
+ initialize = eval(substitute(expression({
+ if (ncol(as.matrix(y)) != 1)
+ stop("multivariate responses not allowed")
+ if (any(round(y) != y))
+ stop("integer-valued responses only allowed for ",
+ "the 'zipoisson' family")
+
+ predictors.names = c(
+ namesof("phi", .lphi, earg = .ephi, tag = FALSE),
+ namesof("lambda", .llambda, earg = .ephi, tag = FALSE))
+
+ if (!length(etastart)) {
+ phi.init = if (length( .iphi )) .iphi else {
+ 0.5 * sum(w[y == 0]) / sum(w)
+ }
+ phi.init[phi.init <= 0.02] = 0.02 # Last resort
+ phi.init[phi.init >= 0.98] = 0.98 # Last resort
+
+
+ if ( length( .ilambda )) {
+ lambda.init = rep( .ilambda, len = n)
+ } else if ( length(mustart)) {
+ lambda.init = mustart / (1 - phi.init)
+ } else if ( .imethod == 2) {
+ mymean = weighted.mean(y[y > 0], w[y > 0]) + 1/16
+ lambda.init = (1 - .sinit) * (y + 1/8) + .sinit * mymean
+ } else {
+ use.this = median(y[y > 0]) + 1 / 16
+ lambda.init = (1 - .sinit) * (y + 1/8) + .sinit * use.this
+ }
- zipois.Loglikfun = function(phival, y, x, w, extraargs) {
- sum(w * dzipois(x=y, phi = phival,
- lambda = extraargs$lambda,
- log = TRUE))
- }
- phi.grid = seq(0.02, 0.98, len = 21)
- init.phi = getMaxMin(phi.grid,
- objfun=zipois.Loglikfun,
- y=y, x=x, w=w,
- extraargs= list(lambda = lambda.init))
- phi.init = if (length( .iphi )) .iphi else init.phi
- if (length(mustart)) {
- lambda.init = lambda.init / (1 - phi.init)
- }
+ zipois.Loglikfun = function(phival, y, x, w, extraargs) {
+ sum(w * dzipois(x = y, phi = phival,
+ lambda = extraargs$lambda,
+ log = TRUE))
+ }
+ phi.grid = seq(0.02, 0.98, len = 21)
+ init.phi = getMaxMin(phi.grid,
+ objfun = zipois.Loglikfun,
+ y = y, x = x, w = w,
+ extraargs = list(lambda = lambda.init))
+ phi.init = if (length( .iphi )) .iphi else init.phi
+ if (length(mustart)) {
+ lambda.init = lambda.init / (1 - phi.init)
+ }
- etastart = cbind(theta2eta(rep(phi.init, len = n), .lphi, .ephi ),
- theta2eta(lambda.init, .llambda, .elambda ))
- mustart <- NULL # Since etastart has been computed.
- }
- }), list( .lphi = lphi, .llambda = llambda,
- .ephi = ephi, .elambda = elambda,
- .iphi = iphi, .ilambda = ilambda,
- .method.init = method.init, .sinit = shrinkage.init ))),
- inverse = eval(substitute(function(eta, extra = NULL) {
- phivec = eta2theta(eta[, 1], .lphi, earg = .ephi )
- lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
- (1 - phivec) * lambda
- }, list( .lphi = lphi, .llambda = llambda,
- .ephi = ephi, .elambda = elambda ))),
- last = eval(substitute(expression({
- misc$link <- c("phi" = .lphi, "lambda" = .llambda)
- misc$earg <- list("phi" = .ephi, "lambda" = .elambda)
- if (intercept.only) {
- phi = eta2theta(eta[1, 1], .lphi, earg = .ephi )
- lambda = eta2theta(eta[1, 2], .llambda, earg = .elambda )
- misc$prob0 = phi + (1 - phi) * exp(-lambda) # P(Y=0)
- }
- }), list( .lphi = lphi, .llambda = llambda,
- .ephi = ephi, .elambda = elambda ))),
- loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- smallno = 100 * .Machine$double.eps
- phi = eta2theta(eta[, 1], .lphi, earg = .ephi )
- phi = pmax(phi, smallno)
- phi = pmin(phi, 1.0-smallno)
- lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w * dzipois(x=y, phi = phi, lambda = lambda, log = TRUE))
- }
+ etastart = cbind(theta2eta(rep(phi.init, len = n), .lphi, .ephi ),
+ theta2eta(lambda.init, .llambda, .elambda ))
+ mustart <- NULL # Since etastart has been computed.
+ }
+ }), list( .lphi = lphi, .llambda = llambda,
+ .ephi = ephi, .elambda = elambda,
+ .iphi = iphi, .ilambda = ilambda,
+ .imethod = imethod, .sinit = shrinkage.init ))),
+ inverse = eval(substitute(function(eta, extra = NULL) {
+ phivec = eta2theta(eta[, 1], .lphi, earg = .ephi )
+ lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
+ (1 - phivec) * lambda
+ }, list( .lphi = lphi, .llambda = llambda,
+ .ephi = ephi, .elambda = elambda ))),
+ last = eval(substitute(expression({
+ misc$link <- c("phi" = .lphi, "lambda" = .llambda)
+ misc$earg <- list("phi" = .ephi, "lambda" = .elambda)
+ if (intercept.only) {
+ phi = eta2theta(eta[1, 1], .lphi, earg = .ephi )
+ lambda = eta2theta(eta[1, 2], .llambda, earg = .elambda )
+ misc$prob0 = phi + (1 - phi) * exp(-lambda) # P(Y=0)
+ }
+ }), list( .lphi = lphi, .llambda = llambda,
+ .ephi = ephi, .elambda = elambda ))),
+ loglikelihood = eval(substitute(
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ smallno = 100 * .Machine$double.eps
+ phi = eta2theta(eta[, 1], .lphi, earg = .ephi )
+ phi = pmax(phi, smallno)
+ phi = pmin(phi, 1.0-smallno)
+ lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dzipois(x = y, phi = phi, lambda = lambda, log = TRUE))
+ }
}, list( .lphi = lphi, .llambda = llambda,
.ephi = ephi, .elambda = elambda ))),
- vfamily = c("zipoisson"),
- deriv = eval(substitute(expression({
- smallno = 100 * .Machine$double.eps
- phi = eta2theta(eta[, 1], .lphi, earg = .ephi )
- phi = pmax(phi, smallno)
- phi = pmin(phi, 1.0-smallno)
- lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
- tmp8 = phi + (1-phi)*exp(-lambda)
- index0 = (y == 0)
- dl.dphi = -expm1(-lambda) / tmp8
- dl.dphi[!index0] = -1 / (1-phi[!index0])
- dl.dlambda = -(1-phi) * exp(-lambda) / tmp8
- dl.dlambda[!index0] = (y[!index0] - lambda[!index0]) / lambda[!index0]
- dphi.deta = dtheta.deta(phi, .lphi, earg = .ephi)
- dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda )
- ans = w * cbind(dl.dphi * dphi.deta, dl.dlambda * dlambda.deta)
- if (.llambda == "loge" && (any(lambda[!index0] < .Machine$double.eps))) {
- ans[!index0,2] = w[!index0] * (y[!index0] - lambda[!index0])
- }
- ans
- }), list( .lphi = lphi, .llambda = llambda,
- .ephi = ephi, .elambda = elambda ))),
+ vfamily = c("zipoisson"),
+ deriv = eval(substitute(expression({
+ smallno = 100 * .Machine$double.eps
+ phi = eta2theta(eta[, 1], .lphi, earg = .ephi )
+ phi = pmax(phi, smallno)
+ phi = pmin(phi, 1.0-smallno)
+ lambda = eta2theta(eta[, 2], .llambda, earg = .elambda )
+ tmp8 = phi + (1-phi)*exp(-lambda)
+ index0 = (y == 0)
+ dl.dphi = -expm1(-lambda) / tmp8
+ dl.dphi[!index0] = -1 / (1-phi[!index0])
+ dl.dlambda = -(1-phi) * exp(-lambda) / tmp8
+ dl.dlambda[!index0] = (y[!index0] - lambda[!index0]) / lambda[!index0]
+ dphi.deta = dtheta.deta(phi, .lphi, earg = .ephi)
+ dlambda.deta = dtheta.deta(lambda, .llambda, earg = .elambda )
+ ans = c(w) * cbind(dl.dphi * dphi.deta,
+ dl.dlambda * dlambda.deta)
+ if (.llambda == "loge" && (any(lambda[!index0] < .Machine$double.eps))) {
+ ans[!index0,2] = w[!index0] * (y[!index0] - lambda[!index0])
+ }
+ ans
+ }), list( .lphi = lphi, .llambda = llambda,
+ .ephi = ephi, .elambda = elambda ))),
weight = eval(substitute(expression({
- wz = matrix(as.numeric(NA), nrow = n, ncol = dimm(M))
- d2l.dphi2 = -expm1(-lambda) / ((1-phi)*tmp8)
- d2l.dlambda2 = (1-phi)/lambda - phi*(1-phi)*exp(-lambda) / tmp8
- d2l.dphilambda = -exp(-lambda) / tmp8
- wz[, iam(1,1,M)] = d2l.dphi2 * dphi.deta^2
- wz[, iam(2,2,M)] = d2l.dlambda2 * dlambda.deta^2
- wz[, iam(1,2,M)] = d2l.dphilambda * dphi.deta * dlambda.deta
- if (.llambda == "loge" && (any(lambda[!index0] < .Machine$double.eps))) {
- ind5 = !index0 & (lambda < .Machine$double.eps)
- if (any(ind5))
- wz[ind5,iam(2,2,M)] = (1-phi[ind5]) * .Machine$double.eps
- }
- w * wz
- }), list( .llambda = llambda ))))
+ wz = matrix(as.numeric(NA), nrow = n, ncol = dimm(M))
+ d2l.dphi2 = -expm1(-lambda) / ((1-phi)*tmp8)
+ d2l.dlambda2 = (1-phi)/lambda - phi*(1-phi)*exp(-lambda) / tmp8
+ d2l.dphilambda = -exp(-lambda) / tmp8
+ wz[, iam(1,1,M)] = d2l.dphi2 * dphi.deta^2
+ wz[, iam(2,2,M)] = d2l.dlambda2 * dlambda.deta^2
+ wz[, iam(1,2,M)] = d2l.dphilambda * dphi.deta * dlambda.deta
+ if (.llambda == "loge" && (any(lambda[!index0] < .Machine$double.eps))) {
+ ind5 = !index0 & (lambda < .Machine$double.eps)
+ if (any(ind5))
+ wz[ind5,iam(2,2,M)] = (1-phi[ind5]) * .Machine$double.eps
+ }
+ c(w) * wz
+ }), list( .llambda = llambda ))))
}
@@ -1159,7 +1169,7 @@ qzibinom = function(p, size, prob, lower.tail = TRUE, log.p = FALSE, phi = 0) {
}
rzibinom = function(n, size, prob, phi = 0) {
- if (!is.Numeric(n, positive=TRUE, integer=TRUE, allow = 1))
+ if (!is.Numeric(n, positive = TRUE, integer = TRUE, allow = 1))
stop("n must be a single positive integer")
ans = rbinom(n, size, prob)
phi = rep(phi, len=length(ans))
@@ -1256,27 +1266,29 @@ rzinegbin = function(n, phi, size, prob = NULL, munb = NULL) {
-zinegbinomial.control <- function(save.weight=TRUE, ...)
+zinegbinomial.control <- function(save.weight = TRUE, ...)
{
list(save.weight=save.weight)
}
- zinegbinomial = function(lphi = "logit", lmunb = "loge", lk = "loge",
- ephi = list(), emunb = list(), ek = list(),
- iphi = NULL, ik = NULL, zero = -3,
- method.init = 1, shrinkage.init = 0.95,
- nsimEIM = 200)
+ zinegbinomial =
+ function(lphi = "logit", lmunb = "loge", lsize = "loge",
+ ephi = list(), emunb = list(), esize = list(),
+ iphi = NULL, isize = NULL, zero = -3,
+ imethod = 1, shrinkage.init = 0.95,
+ nsimEIM = 200)
{
- if (length(iphi) && (!is.Numeric(iphi, positiv=TRUE) || any(iphi >= 1)))
+ if (length(iphi) && (!is.Numeric(iphi, positiv = TRUE) ||
+ any(iphi >= 1)))
stop("'iphi' must contain values in (0,1)")
- if (length(ik) && !is.Numeric(ik, positiv=TRUE))
- stop("'ik' must contain positive values only")
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 3) stop("argument 'method.init' must be 1, 2 or 3")
+ if (length(isize) && !is.Numeric(isize, positiv = TRUE))
+ stop("'isize' must contain positive values only")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 3) stop("argument 'imethod' must be 1, 2 or 3")
if (!is.Numeric(nsimEIM, allow = 1, integ = TRUE))
stop("'nsimEIM' must be a positive integer")
if (nsimEIM <= 10)
@@ -1286,20 +1298,20 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
if (mode(lmunb) != "character" && mode(lmunb) != "name")
lmunb = as.character(substitute(lmunb))
- if (mode(lk) != "character" && mode(lk) != "name")
- lk = as.character(substitute(lk))
+ if (mode(lsize) != "character" && mode(lsize) != "name")
+ lsize = as.character(substitute(lsize))
if (mode(lphi) != "character" && mode(lphi) != "name")
lphi = as.character(substitute(lphi))
- if (!is.list(ephi)) ephi = list()
+ if (!is.list(ephi)) ephi = list()
if (!is.list(emunb)) emunb = list()
- if (!is.list(ek)) ek = list()
+ if (!is.list(esize)) esize = list()
new("vglmff",
blurb = c("Zero-inflated negative binomial\n\n",
"Links: ",
namesof("phi", lphi , earg = ephi, tag = FALSE), ", ",
namesof("munb", lmunb, earg = emunb, tag = FALSE), ", ",
- namesof("k", lk, earg = ek, tag = FALSE), "\n",
+ namesof("size", lsize, earg = esize, tag = FALSE), "\n",
"Mean: (1-phi) * munb"),
constraints = eval(substitute(expression({
@@ -1308,6 +1320,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
eval(negzero.expression)
}), list( .zero = zero ))),
initialize = eval(substitute(expression({
+ Musual <- 3
y = as.matrix(y)
extra$NOS = NOS = ncoly = ncol(y) # Number of species
if (length(dimnames(y)))
@@ -1315,20 +1328,21 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
mynames1 = if (NOS == 1) "phi" else paste("phi", 1:NOS, sep = "")
mynames2 = if (NOS == 1) "munb" else paste("munb", 1:NOS, sep = "")
- mynames3 = if (NOS == 1) "k" else paste("k", 1:NOS, sep = "")
+ mynames3 = if (NOS == 1) "size" else paste("size", 1:NOS, sep = "")
predictors.names =
c(namesof(mynames1, .lphi, earg = .ephi, tag = FALSE),
namesof(mynames2, .lmunb, earg = .emunb, tag = FALSE),
- namesof(mynames3, .lk, earg = .ek, tag = FALSE))
- predictors.names = predictors.names[interleave.VGAM(3*NOS, M = 3)]
+ namesof(mynames3, .lsize, earg = .esize, tag = FALSE))
+ predictors.names =
+ predictors.names[interleave.VGAM(Musual*NOS, M = Musual)]
if (!length(etastart)) {
- mu.init = if ( .method.init == 3) {
+ mu.init = if ( .imethod == 3) {
y + 1/16
} else {
mu.init = y
for(iii in 1:ncol(y)) {
index = (y[,iii] > 0)
- mu.init[,iii] = if ( .method.init == 2)
+ mu.init[,iii] = if ( .imethod == 2)
weighted.mean(y[index,iii], w=w[index]) else
median(rep(y[index,iii], w[index])) + 1/8
}
@@ -1336,7 +1350,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
phi.init = if (length( .iphi))
- matrix( .iphi, n, ncoly, byrow=TRUE) else {
+ matrix( .iphi, n, ncoly, byrow = TRUE) else {
phi.init = y
for(iii in 1:ncol(y))
phi.init[,iii] = sum(w[y[,iii] == 0]) / sum(w)
@@ -1346,8 +1360,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
kay.init =
- if ( is.Numeric( .ik )) {
- matrix( .ik, nr=n, nc=ncoly, byrow=TRUE)
+ if ( is.Numeric( .isize )) {
+ matrix( .isize, nr=n, nc=ncoly, byrow = TRUE)
} else {
zinegbin.Loglikfun = function(kval, y, x, w, extraargs) {
index = (y == 0)
@@ -1364,8 +1378,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
kay.init = matrix(0, nr=n, nc=NOS)
for(spp. in 1:NOS) {
kay.init[,spp.] = getMaxMin(k.grid,
- objfun=zinegbin.Loglikfun,
- y=y[,spp.], x=x, w=w,
+ objfun = zinegbin.Loglikfun,
+ y=y[,spp.], x = x, w = w,
extraargs= list(phi = phi.init[,spp.],
mu=mu.init[,spp.]))
}
@@ -1374,13 +1388,14 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
etastart = cbind(theta2eta(phi.init, .lphi, earg = .ephi),
theta2eta(mu.init, .lmunb, earg = .emunb),
- theta2eta(kay.init, .lk, earg = .ek))
- etastart = etastart[, interleave.VGAM(ncol(etastart),M = 3)]
+ theta2eta(kay.init, .lsize, earg = .esize))
+ etastart =
+ etastart[, interleave.VGAM(ncol(etastart), M = Musual)]
}
- }), list( .lphi = lphi, .lmunb = lmunb, .lk = lk,
- .ephi = ephi, .emunb = emunb, .ek = ek,
- .iphi = iphi, .ik = ik,
- .sinit = shrinkage.init, .method.init = method.init ))),
+ }), list( .lphi = lphi, .lmunb = lmunb, .lsize = lsize,
+ .ephi = ephi, .emunb = emunb, .esize = esize,
+ .iphi = iphi, .isize = isize,
+ .sinit = shrinkage.init, .imethod = imethod ))),
inverse = eval(substitute(function(eta, extra = NULL) {
NOS = extra$NOS
phi = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE],
@@ -1391,62 +1406,69 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
if (length(extra$dimnamesy2))
dimnames(fv.matrix) = list(dimnames(phi)[[1]], extra$dimnamesy2)
fv.matrix
- }, list( .lphi = lphi, .lk = lk, .lmunb = lmunb,
- .ephi = ephi, .ek = ek, .emunb = emunb ))),
+ }, list( .lphi = lphi, .lsize = lsize, .lmunb = lmunb,
+ .ephi = ephi, .esize = esize, .emunb = emunb ))),
last = eval(substitute(expression({
- misc$link = c(rep( .lphi, length=NOS), rep( .lmunb, length=NOS),
- rep( .lk, length=NOS))
+ misc$link = c(rep( .lphi, length = NOS),
+ rep( .lmunb, length = NOS),
+ rep( .lsize, length = NOS))
temp.names = c(mynames1, mynames2, mynames3)
- temp.names = temp.names[interleave.VGAM(3*NOS, M = 3)]
+ temp.names = temp.names[interleave.VGAM(Musual*NOS, M = Musual)]
names(misc$link) = temp.names
misc$earg = vector("list", 3*NOS)
names(misc$earg) = temp.names
for(ii in 1:NOS) {
misc$earg[[3*ii-2]] = .ephi
misc$earg[[3*ii-1]] = .emunb
- misc$earg[[3*ii ]] = .ek
+ misc$earg[[3*ii ]] = .esize
}
- misc$method.init = .method.init
+ misc$imethod = .imethod
misc$nsimEIM = .nsimEIM
misc$expected = TRUE
+ misc$Musual = Musual
if (intercept.only) {
phi = eta2theta(eta[1,3*(1:NOS)-2], .lphi, earg = .ephi)
munb = eta2theta(eta[1,3*(1:NOS)-1], .lmunb, earg = .emunb )
- kval = eta2theta(eta[1,3*(1:NOS)], .lk, earg = .ek)
+ kval = eta2theta(eta[1,3*(1:NOS)], .lsize, earg = .esize)
misc$prob0 = phi + (1-phi) * (kval / (kval + munb))^kval # P(Y=0)
}
- }), list( .lphi = lphi, .lmunb = lmunb, .lk = lk,
- .ephi = ephi, .emunb = emunb, .ek = ek,
- .nsimEIM = nsimEIM, .method.init = method.init ))),
+ }), list( .lphi = lphi, .lmunb = lmunb, .lsize = lsize,
+ .ephi = ephi, .emunb = emunb, .esize = esize,
+ .nsimEIM = nsimEIM, .imethod = imethod ))),
loglikelihood = eval(substitute(
- function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
- NOS = extra$NOS
- phi = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE], .lphi, earg = .ephi )
- munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
- kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lk, earg = .ek )
- if (residuals) stop("loglikelihood residuals not ",
- "implemented yet") else {
- sum(w*dzinegbin(x=y, phi = phi, munb=munb, size=kmat, log = TRUE))
- }
- }, list( .lphi = lphi, .lmunb = lmunb, .lk = lk,
- .ephi = ephi, .emunb = emunb, .ek = ek ))),
+ function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
+ NOS = extra$NOS
+ phi = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE], .lphi, earg = .ephi )
+ munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
+ kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lsize, earg = .esize )
+ if (residuals) stop("loglikelihood residuals not ",
+ "implemented yet") else {
+ sum(w * dzinegbin(x = y, phi = phi, munb = munb,
+ size = kmat, log = TRUE))
+ }
+ }, list( .lphi = lphi, .lmunb = lmunb, .lsize = lsize,
+ .ephi = ephi, .emunb = emunb, .esize = esize ))),
vfamily = c("zinegbinomial"),
deriv = eval(substitute(expression({
- NOS = extra$NOS
- phi = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE], .lphi, earg = .ephi )
- munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE], .lmunb, earg = .emunb )
- kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE], .lk, earg = .ek )
- dphi.deta = dtheta.deta(phi, .lphi, earg = .ephi )
- dmunb.deta = dtheta.deta(munb, .lmunb, earg = .emunb )
- dk.deta = dtheta.deta(kmat, .lk, earg = .ek )
- dthetas.detas =
- (cbind(dphi.deta,
- dmunb.deta,
- dk.deta))[, interleave.VGAM(3*NOS, M = 3)]
-
- d3 = deriv3(~ log(phi. + (1 - phi.) * (kmat. /(kmat. + munb. ))^kmat.),
- c("phi.", "munb.", "kmat."), hessian=FALSE)
- dl.dthetas = matrix(0, n, M) # M = 3*NOS; for all species
+ Musual <- 3
+ NOS = extra$NOS
+ phi = eta2theta(eta[,3*(1:NOS)-2, drop = FALSE],
+ .lphi, earg = .ephi )
+ munb = eta2theta(eta[,3*(1:NOS)-1, drop = FALSE],
+ .lmunb, earg = .emunb )
+ kmat = eta2theta(eta[,3*(1:NOS), drop = FALSE],
+ .lsize, earg = .esize )
+ dphi.deta = dtheta.deta(phi, .lphi, earg = .ephi )
+ dmunb.deta = dtheta.deta(munb, .lmunb, earg = .emunb )
+ dk.deta = dtheta.deta(kmat, .lsize, earg = .esize )
+ dthetas.detas =
+ (cbind(dphi.deta,
+ dmunb.deta,
+ dk.deta))[, interleave.VGAM(Musual*NOS, M = Musual)]
+
+ d3 = deriv3(~ log(phi. + (1 - phi.) * (kmat. /(kmat. + munb. ))^kmat.),
+ c("phi.", "munb.", "kmat."), hessian = FALSE)
+ dl.dthetas = matrix(0, n, M) # M = 3*NOS; for all species
for(spp. in 1:NOS) {
index = (y[,spp.] == 0)
if (!sum(index) || !sum(!index))
@@ -1472,8 +1494,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
cbind(dl.dphi, dl.dmunb, dl.dk)
}
w * dl.dthetas * dthetas.detas
- }), list( .lphi = lphi, .lmunb = lmunb, .lk = lk,
- .ephi = ephi, .emunb = emunb, .ek = ek ))),
+ }), list( .lphi = lphi, .lmunb = lmunb, .lsize = lsize,
+ .ephi = ephi, .emunb = emunb, .esize = esize ))),
weight = eval(substitute(expression({
wz = matrix(0, n, 3*(M-1))
@@ -1510,7 +1532,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
wz1 = if (intercept.only)
matrix(colMeans(run.varcov),
- nr=n, nc=ncol(run.varcov), byrow=TRUE) else run.varcov
+ nr=n, nc=ncol(run.varcov), byrow = TRUE) else run.varcov
wz1 = wz1 * dthetas.detas[,3*(spp. -1) + ind1$row] *
dthetas.detas[,3*(spp. -1) + ind1$col]
@@ -1520,8 +1542,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
cptr = iam((spp.-1)*3+jay, (spp.-1)*3+kay, M = M)
wz[,cptr] = wz1[,iam(jay, kay, M = 3)]
}
- }
- w * wz
+ } # End of for(spp.) loop
+ c(w) * wz
}), list( .lphi = lphi, .ephi = ephi, .nsimEIM = nsimEIM ))))
}
@@ -1532,7 +1554,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
zipoissonff <- function(llambda = "loge", lprobp = "logit",
elambda = list(), eprobp = list(),
- ilambda = NULL, iprobp = NULL, method.init = 1,
+ ilambda = NULL, iprobp = NULL, imethod = 1,
shrinkage.init = 0.8, zero = -2)
{
lprobp. <- lprobp
@@ -1554,9 +1576,9 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
if (!is.list(elambda)) elambda <- list()
if (!is.list(eprobp.)) eprobp. <- list()
- if (!is.Numeric(method.init, allow = 1, integ = TRUE, posit = TRUE) ||
- method.init > 2)
- stop("argument 'method.init' must be 1 or 2")
+ if (!is.Numeric(imethod, allow = 1, integ = TRUE, posit = TRUE) ||
+ imethod > 2)
+ stop("argument 'imethod' must be 1 or 2")
if (!is.Numeric(shrinkage.init, allow = 1) ||
shrinkage.init < 0 ||
shrinkage.init > 1)
@@ -1590,12 +1612,12 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
stop("responses must be integer-valued")
mynames1 <- paste("lambda", if (ncoly > 1) 1:ncoly else "", sep = "")
- mynames2 <- paste("probp", if (ncoly > 1) 1:ncoly else "", sep = "")
+ mynames2 <- paste("probp", if (ncoly > 1) 1:ncoly else "", sep = "")
predictors.names <-
c(namesof(mynames1, .llambda, earg = .elambda, tag = FALSE),
namesof(mynames2, .lprobp., earg = .eprobp., tag = FALSE))
- predictors.names <- predictors.names[interleave.VGAM(M, M = ncoly)]
+ predictors.names <- predictors.names[interleave.VGAM(M, M = Musual)]
if (!length(etastart)) {
@@ -1616,7 +1638,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
if ( length(mustart)) {
mustart <- matrix(mustart, n, ncoly) # Make sure right size
Lambda.init <- mustart / (1 - Phi.init)
- } else if ( .method.init == 2) {
+ } else if ( .imethod == 2) {
mymean <- weighted.mean(yjay[yjay > 0], w[yjay > 0]) + 1/16
Lambda.init <- (1 - .sinit) * (yjay + 1/8) + .sinit * mymean
} else {
@@ -1625,14 +1647,14 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
zipois.Loglikfun <- function(phival, y, x, w, extraargs) {
- sum(w * dzipois(x=y, phi = phival,
+ sum(w * dzipois(x = y, phi = phival,
lambda = extraargs$lambda,
log = TRUE))
}
phi.grid <- seq(0.02, 0.98, len = 21)
Phimat.init <- getMaxMin(phi.grid,
- objfun=zipois.Loglikfun,
- y=y, x=x, w=w,
+ objfun = zipois.Loglikfun,
+ y = y, x = x, w = w,
extraargs = list(lambda = Lambda.init))
if (length(mustart)) {
Lambda.init <- Lambda.init / (1 - Phimat.init)
@@ -1644,8 +1666,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
mat2[, jay] <- Phimat.init
}
- etastart <- cbind(theta2eta(mat1, .llambda, .elambda ),
- theta2eta(mat2, .lprobp., .eprobp. ))
+ etastart <- cbind(theta2eta( mat1, .llambda, .elambda ),
+ theta2eta(1 - mat2, .lprobp., .eprobp. ))
etastart <- etastart[, interleave.VGAM(ncol(etastart), M = Musual)]
mustart <- NULL # Since etastart has been computed.
@@ -1653,7 +1675,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}), list( .lprobp. = lprobp., .llambda = llambda,
.eprobp. = eprobp., .elambda = elambda,
.iprobp. = iprobp., .ilambda = ilambda,
- .method.init = method.init, .sinit = shrinkage.init ))),
+ .imethod = imethod, .sinit = shrinkage.init ))),
inverse = eval(substitute(function(eta, extra = NULL) {
ncoly <- extra$ncoly
lambda <- eta2theta(eta[, 2*(1:ncoly) - 1], .llambda, earg = .elambda )
@@ -1679,12 +1701,12 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
misc$Musual <- Musual
- misc$method.init <- .method.init
+ misc$imethod <- .imethod
misc$prob0 <- (1 - probp.) + probp. * exp(-lambda) # P(Y=0)
}), list( .lprobp. = lprobp., .llambda = llambda,
.eprobp. = eprobp., .elambda = elambda,
- .method.init = method.init ))),
+ .imethod = imethod ))),
loglikelihood = eval(substitute(
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
smallno <- 100 * .Machine$double.eps
@@ -1697,7 +1719,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
if (residuals) stop("loglikelihood residuals not ",
"implemented yet") else {
- sum(w * dzipois(x=y, phi = 1 - probp., lambda = lambda, log = TRUE))
+ sum(w * dzipois(x = y, phi = 1 - probp., lambda = lambda, log = TRUE))
}
}, list( .lprobp. = lprobp., .llambda = llambda,
.eprobp. = eprobp., .elambda = elambda ))),
@@ -1722,8 +1744,8 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
dl.dprobp. <- expm1(-lambda) / tmp8
dl.dprobp.[!ind0] <- 1 / probp.[!ind0]
- ans <- w * cbind(dl.dlambda * dlambda.deta,
- dl.dprobp. * dprobp..deta)
+ ans <- c(w) * cbind(dl.dlambda * dlambda.deta,
+ dl.dprobp. * dprobp..deta)
if (FALSE && .llambda == "loge" &&
(any(lambda[!ind0] < .Machine$double.eps))) {
ans[!ind0, 2] <- w[!ind0] * (y[!ind0] - lambda[!ind0])
@@ -1765,7 +1787,7 @@ zinegbinomial.control <- function(save.weight=TRUE, ...)
}
}
- w * wz
+ c(w) * wz
}), list( .llambda = llambda ))))
}
diff --git a/R/links.q b/R/links.q
index 93867f4..e456aba 100644
--- a/R/links.q
+++ b/R/links.q
@@ -5,7 +5,7 @@
- ToString = function(x) paste(x, collapse = ",")
+ ToString = function(x) paste(x, collapse = ", ")
@@ -17,40 +17,41 @@
-TypicalVGAMfamilyFunction <- function(lsigma = "loge", esigma = list(),
- isigma = NULL, parallel = TRUE,
- shrinkage.init = 0.95,
- nointercept = NULL, method.init = 1,
- prob.x = c(0.15, 0.85),
- oim = FALSE,
- nsimEIM = 100, zero = NULL) {
- NULL
+ TypicalVGAMfamilyFunction <- function(lsigma = "loge", esigma = list(),
+ isigma = NULL, parallel = TRUE,
+ shrinkage.init = 0.95,
+ nointercept = NULL, imethod = 1,
+ prob.x = c(0.15, 0.85),
+ mv = FALSE, oim = FALSE,
+ nsimEIM = 100, zero = NULL) {
+ NULL
}
TypicalVGAMlinkFunction <- function(theta,
- earg = list(), inverse=FALSE, deriv=0, short=TRUE, tag=FALSE) {
+ earg = list(), inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) {
NULL
}
-namesof <- function(theta,
- link,
- earg = list(),
- tag=FALSE,
- short=TRUE)
-{
+ namesof <- function(theta,
+ link,
+ earg = list(),
+ tag = FALSE,
+ short = TRUE) {
string <- paste(link,
- "(theta=theta, earg=earg, short=short, tag=tag)", sep = "")
+ "(theta = theta, earg = earg, short=short, tag=tag)", sep = "")
calls <- parse(text=string)[[1]]
ans <- eval(calls)
return(ans)
}
-theta2eta <- function(theta, link, earg = list()) {
- string <- paste(link, "(theta=theta, earg=earg)", sep = "")
+
+
+ theta2eta <- function(theta, link, earg = list()) {
+ string <- paste(link, "(theta = theta, earg = earg)", sep = "")
calls <- parse(text=string)[[1]]
eval(calls)
}
@@ -58,15 +59,15 @@ theta2eta <- function(theta, link, earg = list()) {
-eta2theta <- function(theta, link = "identity", earg = list()) {
- if (is.null(link))
- link <- "identity"
+ eta2theta <- function(theta, link = "identity", earg = list()) {
+ if (is.null(link))
+ link <- "identity"
llink <- length(link)
if (llink == 1) {
- string <- paste(link, "(theta=theta, earg=earg, inverse=TRUE)", sep = "")
+ string <- paste(link, "(theta = theta, earg = earg, inverse = TRUE)", sep = "")
calls <- parse(text=string)[[1]]
return(eval(calls))
} else
@@ -80,7 +81,7 @@ eta2theta <- function(theta, link = "identity", earg = list()) {
use.earg = if (is.list(earg) && length(earg)==llink &&
is.list(earg[[iii]])) earg[[iii]] else earg
string = paste(link[iii],
- "(theta=theta[,iii], earg=use.earg, inverse=TRUE)",
+ "(theta = theta[,iii], earg=use.earg, inverse = TRUE)",
sep = "")
calls <- parse(text=string)[[1]]
ans <- cbind(ans, eval(calls))
@@ -90,12 +91,12 @@ eta2theta <- function(theta, link = "identity", earg = list()) {
theta = rep(theta, len=llink)
if (length(theta) != llink)
- stop("length of theta and link don't match")
+ stop("length of 'theta' and 'link' do not match")
ans <- NULL
for(iii in 1:llink) {
string = paste(link[iii],
- "(theta=theta[iii], earg=earg, inverse=TRUE)",
+ "(theta = theta[iii], earg = earg, inverse = TRUE)",
sep = "")
calls <- parse(text=string)[[1]]
ans <- c(ans, eval(calls))
@@ -103,23 +104,22 @@ eta2theta <- function(theta, link = "identity", earg = list()) {
}
return(ans)
} else
- stop("length(link)==0 not allowed")
+ stop("length(link) == 0 not allowed")
}
-dtheta.deta <- function(theta, link, earg = list()) {
+ dtheta.deta <- function(theta, link, earg = list()) {
- string <- paste(link, "(theta=theta, earg=earg, deriv=1)", sep = "")
+ string <- paste(link, "(theta = theta, earg = earg, deriv = 1)", sep = "")
calls <- parse(text=string)[[1]]
eval(calls)
}
-d2theta.deta2 <- function(theta, link, earg = list())
-{
+ d2theta.deta2 <- function(theta, link, earg = list()) {
- string <- paste(link, "(theta=theta, earg=earg, deriv=2)", sep = "")
+ string <- paste(link, "(theta = theta, earg = earg, deriv = 2)", sep = "")
calls <- parse(text=string)[[1]]
eval(calls)
}
@@ -136,13 +136,13 @@ d2theta.deta2 <- function(theta, link, earg = list())
"golf", "polf", "nbolf", "nbolf2")
-loglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ loglog <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("loglog(",theta,")", sep = "") else
- paste("log(log(",theta,"))", sep = "")
+ paste("loglog(", theta, ")", sep = "") else
+ paste("log(log(", theta, "))", sep = "")
if (tag)
string <- paste("Log-Log:", string)
return(string)
@@ -151,7 +151,7 @@ loglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
theta[theta <= 1.0] <- earg$bval
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
exp(exp(theta))
}
@@ -169,13 +169,13 @@ loglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-cloglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ cloglog <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("cloglog(",theta,")", sep = "") else
- paste("log(-log(1-",theta,"))", sep = "")
+ paste("cloglog(", theta, ")", sep = "") else
+ paste("log(-log(1-", theta, "))", sep = "")
if (tag)
string <- paste("Complementary log-log:", string)
return(string)
@@ -186,7 +186,7 @@ cloglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
junk <- exp(theta)
-expm1(-junk)
@@ -205,12 +205,12 @@ cloglog <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-probit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ probit <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("probit(",theta,")", sep = "") else
+ paste("probit(", theta, ")", sep = "") else
paste("qnorm(", theta, ")", sep = "")
if (tag)
string <- paste("Probit:", string)
@@ -222,7 +222,7 @@ probit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
ans <- pnorm(theta)
if (is.matrix(theta))
@@ -251,7 +251,8 @@ probit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
dim(ans) <- dim(theta)
ans
} else {
- warning("can only handle vectors and matrices; converting to vector")
+ warning("can only handle vectors and matrices;",
+ " converting to vector")
ans
}
})
@@ -265,12 +266,12 @@ probit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-loge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ loge <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("log(",theta,")", sep = "") else
+ paste("log(", theta, ")", sep = "") else
paste("log(", theta, ")", sep = "")
if (tag)
string <- paste("Log:", string)
@@ -280,7 +281,7 @@ loge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
theta[theta <= 0.0] <- earg$bval
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
exp(theta)
}
@@ -295,18 +296,17 @@ loge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-identity <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ identity <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (is.character(theta)) {
- string <- theta
- if (tag)
- string <- paste("Identity:", string)
+ string <- theta
+ if (tag)
+ string <- paste("Identity:", string)
return(string)
}
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
theta
}
@@ -318,8 +318,8 @@ identity <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
}
-nidentity <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ nidentity <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- paste("-", theta, sep = "")
@@ -329,7 +329,7 @@ nidentity <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
-theta
}
@@ -342,11 +342,11 @@ nidentity <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
-reciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ reciprocal <- function(theta, earg = list(), inverse.arg = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
- string <- paste("1/",theta, sep = "")
+ string <- paste("1/", theta, sep = "")
if (tag)
string <- paste("Reciprocal:", string)
return(string)
@@ -355,7 +355,7 @@ reciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
theta[theta == 0.0] <- earg$bval
if (inverse.arg) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse.arg=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse.arg = FALSE, deriv = deriv)
} else {
1/theta
}
@@ -368,12 +368,11 @@ reciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
}
-nloge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ nloge <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (is.character(theta)) {
string <- if (short)
- paste("-log(",theta,")", sep = "") else
+ paste("-log(", theta, ")", sep = "") else
paste("-log(", theta, ")", sep = "")
if (tag)
string <- paste("Negative log:", string)
@@ -383,7 +382,7 @@ nloge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
theta[theta <= 0.0] <- earg$bval
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
exp(-theta)
}
@@ -397,11 +396,11 @@ nloge <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-nreciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ nreciprocal <- function(theta, earg = list(), inverse.arg = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
- string <- paste("-1/",theta, sep = "")
+ string <- paste("-1/", theta, sep = "")
if (tag)
string <- paste("Negative reciprocal:", string)
return(string)
@@ -410,7 +409,7 @@ nreciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
theta[theta == 0.0] <- earg$bval
if (inverse.arg) {
if (deriv > 0) {
- 1 / nreciprocal(theta, earg=earg, inverse.arg=FALSE, deriv)
+ 1 / nreciprocal(theta, earg = earg, inverse.arg = FALSE, deriv)
} else {
-1/theta
}
@@ -423,19 +422,19 @@ nreciprocal <- function(theta, earg = list(), inverse.arg=FALSE, deriv=0,
}
-natural.ig <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ natural.ig <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
- string <- paste("-1/",theta, sep = "")
+ string <- paste("-1/", theta, sep = "")
if (tag)
string <- paste("Negative inverse:", string)
return(string)
}
if (inverse) {
if (deriv > 0) {
- 1 / nreciprocal(theta, earg=earg, inverse=FALSE, deriv)
+ 1 / nreciprocal(theta, earg = earg, inverse = FALSE, deriv)
} else {
1/ sqrt(-2*theta)
}
@@ -451,12 +450,12 @@ natural.ig <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-rhobit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ rhobit <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("rhobit(",theta,")", sep = "") else
+ paste("rhobit(", theta, ")", sep = "") else
paste("log((1+", theta, ")/(1-", theta, "))", sep = "")
if (tag)
string <- paste("Rhobit:", string)
@@ -472,7 +471,7 @@ rhobit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
junk <- exp(theta)
expm1(theta) / (junk+1.0)
@@ -487,12 +486,12 @@ rhobit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-fisherz <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ fisherz <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("fisherz(",theta,")", sep = "") else
+ paste("fisherz(", theta, ")", sep = "") else
paste("(1/2)log((1+", theta, ")/(1-", theta, "))", sep = "")
if (tag)
string <- paste("Fisher's Z transformation:", string)
@@ -508,7 +507,7 @@ fisherz <- function(theta, earg = list(), inverse=FALSE, deriv=0,
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
junk <- exp(2*theta)
expm1(2*theta) / (junk+1.0)
@@ -524,26 +523,25 @@ fisherz <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-fsqrt <- function(theta, earg = list(min=0, max=1, mux=sqrt(2)),
- inverse=FALSE, deriv=0, short=TRUE, tag=FALSE)
-{
- min=0; max=1; mux=sqrt(2)
+fsqrt <- function(theta, earg = list(min = 0, max = 1, mux=sqrt(2)),
+ inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) {
+ min = 0; max = 1; mux=sqrt(2)
if (!is.list(earg)) stop("earg must be a list")
if (is.Numeric(earg$min)) min = earg$min
if (is.Numeric(earg$max)) max = earg$max
if (is.Numeric(earg$mux)) mux = earg$mux
- if (!is.Numeric(min,allow=1)) stop("bad input for 'min' component")
- if (!is.Numeric(max,allow=1)) stop("bad input for 'max' component")
- if (!is.Numeric(mux,allow=1,posit=TRUE)) stop("bad input for 'mux' component")
+ if (!is.Numeric(min,allow = 1)) stop("bad input for 'min' component")
+ if (!is.Numeric(max,allow = 1)) stop("bad input for 'max' component")
+ if (!is.Numeric(mux,allow = 1,posit = TRUE)) stop("bad input for 'mux' component")
if (min >= max) stop("'min' >= 'max' is not allowed")
if (is.character(theta)) {
string <- if (short)
- paste("fsqrt(",theta,")", sep = "") else {
+ paste("fsqrt(", theta, ")", sep = "") else {
if (abs(mux-sqrt(2)) < 1.0e-10)
- paste("sqrt(2*",theta,") - sqrt(2*(1-",theta,"))", sep = "") else
+ paste("sqrt(2*", theta, ") - sqrt(2*(1-", theta, "))", sep = "") else
paste(as.character(mux),
- " * (sqrt(",theta,"-",min,") - sqrt(",max,"-",theta,"))", sep = "")
+ " * (sqrt(", theta, "-",min, ") - sqrt(",max, "-", theta, "))", sep = "")
}
if (tag)
string <- paste("Folded Square Root:", string)
@@ -552,7 +550,7 @@ fsqrt <- function(theta, earg = list(min=0, max=1, mux=sqrt(2)),
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
mid = (min + max) / 2
boundary = mux * sqrt(max - min)
@@ -576,9 +574,8 @@ fsqrt <- function(theta, earg = list(min=0, max=1, mux=sqrt(2)),
-powl <- function(theta, earg = list(power=1), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ powl <- function(theta, earg = list(power = 1), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (!length(earg) || is.list(earg)) {
exponent = if (length(earg$power)) earg$power else 1
@@ -590,7 +587,7 @@ powl <- function(theta, earg = list(power=1), inverse=FALSE, deriv=0,
if (is.character(theta)) {
string <- if (short)
- paste("powl(",theta,", earg = list(power = ", as.character(exponent),
+ paste("powl(", theta, ", earg = list(power = ", as.character(exponent),
"))", sep = "") else
paste(theta, "^(", as.character(exponent), ")", sep = "")
if (tag)
@@ -599,7 +596,7 @@ powl <- function(theta, earg = list(power=1), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
theta^(1/exponent)
}
@@ -618,9 +615,8 @@ powl <- function(theta, earg = list(power=1), inverse=FALSE, deriv=0,
}
-elogit <- function(theta, earg = list(min=0, max=1), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ elogit <- function(theta, earg = list(min = 0, max = 1), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (!length(earg) || is.list(earg)) {
A = if (length(earg$min)) earg$min else 0
B = if (length(earg$max)) earg$max else 1
@@ -634,18 +630,18 @@ elogit <- function(theta, earg = list(min=0, max=1), inverse=FALSE, deriv=0,
if (is.character(theta)) {
string <- if (short) {
if (A != 0 || B != 1)
- paste("elogit(",theta,", earg = list(min = ",A,
- ", max = ",B,"))",sep = "") else
- paste("elogit(",theta,")",sep = "")
+ paste("elogit(", theta, ", earg = list(min = ",A,
+ ", max = ",B, "))",sep = "") else
+ paste("elogit(", theta, ")",sep = "")
} else
- paste("log((",theta,"-min)/(max-",theta,"))", sep = "")
+ paste("log((", theta, "-min)/(max-", theta, "))", sep = "")
if (tag)
string <- paste("Extended logit:", string)
return(string)
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
junk <- if (is.R()) care.exp(theta) else care.exp(theta)
(A + B*junk) / (1.0 + junk)
@@ -662,13 +658,12 @@ elogit <- function(theta, earg = list(min=0, max=1), inverse=FALSE, deriv=0,
- logit <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ logit <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (is.character(theta)) {
string <- if (short)
- paste("logit(",theta,")", sep = "") else
- paste("log(",theta,"/(1-",theta,"))", sep = "")
+ paste("logit(", theta, ")", sep = "") else
+ paste("log(", theta, "/(1-", theta, "))", sep = "")
if (tag)
string <- paste("Logit:", string)
return(string)
@@ -679,7 +674,7 @@ elogit <- function(theta, earg = list(min=0, max=1), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
eta <- care.exp(theta)
eta / (1.0 + eta)
@@ -697,13 +692,12 @@ elogit <- function(theta, earg = list(min=0, max=1), inverse=FALSE, deriv=0,
}
-logc <- function(theta, earg = list(), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ logc <- function(theta, earg = list(), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (is.character(theta)) {
string <- if (short)
- paste("logc(",theta,")", sep = "") else
- paste("log(1-",theta,")", sep = "")
+ paste("logc(", theta, ")", sep = "") else
+ paste("log(1-", theta, ")", sep = "")
if (tag)
string <- paste("Log Complementary:", string)
return(string)
@@ -715,7 +709,7 @@ logc <- function(theta, earg = list(), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
-expm1(theta)
}
@@ -729,9 +723,8 @@ logc <- function(theta, earg = list(), inverse=FALSE, deriv=0,
-logoff <- function(theta, earg = list(offset=0), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
-{
+ logoff <- function(theta, earg = list(offset = 0), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE) {
if (!length(earg) || is.list(earg)) {
offset = if (length(earg$offset)) earg$offset else 0
} else {
@@ -743,8 +736,8 @@ logoff <- function(theta, earg = list(offset=0), inverse=FALSE, deriv=0,
if (is.character(theta)) {
string <- if (short)
- paste("logoff(",theta,
- ", list(offset = ",as.character(offset),"))", sep = "") else
+ paste("logoff(", theta,
+ ", list(offset = ",as.character(offset), "))", sep = "") else
paste("log(", as.character(offset), "+", theta, ")", sep = "")
if (tag)
string <- paste("Log with offset:", string)
@@ -752,7 +745,7 @@ logoff <- function(theta, earg = list(offset=0), inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
exp(theta) - offset
}
@@ -766,15 +759,15 @@ logoff <- function(theta, earg = list(offset=0), inverse=FALSE, deriv=0,
if(FALSE)
-nlogoff <- function(theta, earg=0, inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+nlogoff <- function(theta, earg = 0, inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
offset = earg
if (!is.Numeric(offset))
stop("bad input for argument earg")
if (is.character(theta)) {
string <- if (short)
- paste("nlogoff(",theta,",",as.character(offset),")", sep = "") else
+ paste("nlogoff(", theta, ", ",as.character(offset), ")", sep = "") else
paste("log(", as.character(offset), "-", theta, ")", sep = "")
if (tag)
string <- paste("Negative-log with offset:", string)
@@ -782,7 +775,7 @@ nlogoff <- function(theta, earg=0, inverse=FALSE, deriv=0,
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
offset - exp(theta)
}
@@ -796,14 +789,14 @@ nlogoff <- function(theta, earg=0, inverse=FALSE, deriv=0,
-cauchit <- function(theta, earg = list(bvalue= .Machine$double.eps),
- inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ cauchit <- function(theta, earg = list(bvalue= .Machine$double.eps),
+ inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
if (is.character(theta)) {
string <- if (short)
- paste("cauchit(",theta,")", sep = "") else
- paste("tan(pi*(",theta,"-0.5))", sep = "")
+ paste("cauchit(", theta, ")", sep = "") else
+ paste("tan(pi*(", theta, "-0.5))", sep = "")
if (tag)
string <- paste("Cauchit:", string)
return(string)
@@ -814,7 +807,7 @@ cauchit <- function(theta, earg = list(bvalue= .Machine$double.eps),
}
if (inverse) {
if (deriv > 0) {
- 1/Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1/Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
0.5 + atan(theta)/pi
}
@@ -828,8 +821,8 @@ cauchit <- function(theta, earg = list(bvalue= .Machine$double.eps),
-golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
- short=TRUE, tag=FALSE)
+ golf <- function(theta, earg = list(lambda = 1), inverse = FALSE, deriv = 0,
+ short = TRUE, tag = FALSE)
{
@@ -842,17 +835,18 @@ golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
cutpoint = earg$cutpoint # Optional; if so then is a NULL
} else
stop("'earg' must be a list")
- if (!is.Numeric(lambda, posit=TRUE))
+ if (!is.Numeric(lambda, posit = TRUE))
stop('could not determine lambda or lambda has negative values')
if (is.Numeric(cutpoint))
- if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer=TRUE))
- warning("'cutpoint' should contain non-negative integer values")
+ if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer = TRUE))
+ warning("argument 'cutpoint' should contain ",
+ "non-negative integer values")
if (is.character(theta)) {
string <- if (short) {
lenl = length(lambda) > 1
lenc = length(cutpoint) > 1
- paste("golf(",theta,", earg = list(lambda = ",
+ paste("golf(", theta, ", earg = list(lambda = ",
if (lenl) "c(" else "",
ToString(lambda),
if (lenl) ")" else "",
@@ -864,10 +858,10 @@ golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
sep = "") else "",
"))", sep = "") } else {
if (is.Numeric(cutpoint)) {
- paste("-3*log(1-qnorm(",theta,")/(3*sqrt(lambda)))",
+ paste("-3*log(1-qnorm(", theta, ")/(3*sqrt(lambda)))",
" + log(cutpoint)", sep = "")
} else {
- paste("-3*log(1-qnorm(",theta,")/(3*sqrt(lambda)))", sep = "")
+ paste("-3*log(1-qnorm(", theta, ")/(3*sqrt(lambda)))", sep = "")
}
}
if (tag)
@@ -881,17 +875,17 @@ golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
if (ncol(thmat) > 1) {
answer = thmat
for(ii in 1:ncol(thmat))
- answer[,ii] = Recall(theta=thmat[,ii],
+ answer[,ii] = Recall(theta = thmat[,ii],
earg = list(lambda=lambda[ii],
cutpoint = if (is.Numeric(cutpoint)) cutpoint[ii] else NULL),
- inverse=inverse, deriv=deriv)
+ inverse=inverse, deriv = deriv)
return(answer)
}
answer =
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
if (is.Numeric(cutpoint)) {
pnorm((1-care.exp(-(theta-log(cutpoint))/3)) * 3 * sqrt(lambda))
@@ -903,14 +897,14 @@ golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
smallno = 1 * .Machine$double.eps
Theta = theta
Theta = pmin(Theta, 1 - smallno) # Since theta == 1 is a possibility
- Theta = pmax(Theta, smallno) # Since theta==0 is a possibility
+ Theta = pmax(Theta, smallno) # Since theta == 0 is a possibility
Ql = qnorm(Theta)
switch(deriv+1, {
temp = Ql / (3*sqrt(lambda))
temp = pmin(temp, 1.0 - smallno) # 100 / .Machine$double.eps
-3*log1p(-temp) + if (is.Numeric(cutpoint)) log(cutpoint) else 0},
(1 - Ql / (3*sqrt(lambda))) * sqrt(lambda) * dnorm(Ql),
- { stop('cannot handle deriv=2') },
+ { stop('cannot handle deriv = 2') },
stop("'deriv' unmatched"))
}
if (!is.Numeric(answer)) stop("the answer contains some NAs")
@@ -918,28 +912,29 @@ golf <- function(theta, earg = list(lambda=1), inverse=FALSE, deriv=0,
}
-polf <- function(theta, earg=stop("'earg' must be given"),
- inverse=FALSE, deriv=0, short=TRUE, tag=FALSE)
+ polf <- function(theta, earg=stop("'earg' must be given"),
+ inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE)
{
cutpoint = NULL
if (is.Numeric(earg)) cutpoint = earg
if (is.list(earg)) cutpoint = earg$cutpoint
if (!is.Numeric(cutpoint))
- stop('could not determine the cutpoint')
- if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer=TRUE))
- warning("'cutpoint' should contain non-negative integer values")
+ stop('could not determine the cutpoint')
+ if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer = TRUE))
+ warning("argument 'cutpoint' should",
+ " contain non-negative integer values")
if (is.character(theta)) {
string <- if (short) {
lenc = length(cutpoint) > 1
- paste("polf(",theta,", earg = list(cutpoint = ",
+ paste("polf(", theta, ", earg = list(cutpoint = ",
if (lenc) "c(" else "",
ToString(cutpoint),
if (lenc) ")" else "",
"))", sep = "")
} else
- paste("2*log(0.5*qnorm(",theta,") + sqrt(cutpoint+7/8))", sep = "")
+ paste("2*log(0.5*qnorm(", theta, ") + sqrt(cutpoint+7/8))", sep = "")
if (tag)
string <- paste("Poisson-ordinal link function:", string)
return(string)
@@ -951,38 +946,38 @@ polf <- function(theta, earg=stop("'earg' must be given"),
answer = thmat
cutpoint = rep(cutpoint, len=ncol(thmat)) # Reqd for the for loop
for(ii in 1:ncol(thmat))
- answer[,ii] = Recall(theta=thmat[,ii], earg=cutpoint[ii],
- inverse=inverse, deriv=deriv)
+ answer[,ii] = Recall(theta = thmat[,ii], earg=cutpoint[ii],
+ inverse=inverse, deriv = deriv)
return(answer)
}
answer =
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
if (cutpoint == 0) {
- cloglog(theta=theta, earg=earg, inverse=inverse, deriv=deriv)
+ cloglog(theta = theta, earg = earg, inverse=inverse, deriv = deriv)
} else {
pnorm(2 * exp(theta/2) - 2 * sqrt(cutpoint + 7/8))
}
}
} else {
if (cutpoint == 0) {
- cloglog(theta=theta, earg=earg, inverse=inverse, deriv=deriv)
+ cloglog(theta = theta, earg = earg, inverse=inverse, deriv = deriv)
} else {
smallno = 1 * .Machine$double.eps
SMALLNO = 1 * .Machine$double.xmin
Theta = theta
Theta = pmin(Theta, 1 - smallno) # Since theta == 1 is a possibility
- Theta = pmax(Theta, smallno) # Since theta==0 is a possibility
+ Theta = pmax(Theta, smallno) # Since theta == 0 is a possibility
Ql = qnorm(Theta)
switch(deriv+1, {
temp = 0.5 * Ql + sqrt(cutpoint + 7/8)
temp = pmax(temp, SMALLNO)
2 * log(temp)},
(Ql/2 + sqrt(cutpoint + 7/8)) * dnorm(Ql),
- { stop('cannot handle deriv=2') },
+ { stop('cannot handle deriv = 2') },
stop("'deriv' unmatched"))
}
}
@@ -991,27 +986,27 @@ polf <- function(theta, earg=stop("'earg' must be given"),
}
-nbolf <- function(theta, earg=stop("'earg' must be given"),
- inverse=FALSE, deriv=0, short=TRUE, tag=FALSE)
-{
+ nbolf <- function(theta, earg=stop("'earg' must be given"),
+ inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) {
cutpoint = kay = NULL
if (is.list(earg)) {
cutpoint = earg$cutpoint
kay = earg$k
}
- if (!is.Numeric(kay, positive=TRUE))
- stop("could not determine 'k' or it is not positive-valued")
+ if (!is.Numeric(kay, positive = TRUE))
+ stop("could not determine 'k' or it is not positive-valued")
if (!is.Numeric(cutpoint))
- stop("could not determine the cutpoint")
- if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer=TRUE))
- warning("'cutpoint' should contain non-negative integer values")
+ stop("could not determine the cutpoint")
+ if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer = TRUE))
+ warning("argument 'cutpoint' should",
+ " contain non-negative integer values")
if (is.character(theta)) {
string <- if (short) {
lenc = length(cutpoint) > 1
lenk = length(kay) > 1
- paste("nbolf(",theta,", earg = list(cutpoint = ",
+ paste("nbolf(", theta, ", earg = list(cutpoint = ",
if (lenc) "c(" else "",
ToString(cutpoint),
if (lenc) ")" else "",
@@ -1021,7 +1016,7 @@ nbolf <- function(theta, earg=stop("'earg' must be given"),
if (lenk) ")" else "",
"))", sep = "")
} else
- paste("2*log(sqrt(k) * sinh(qnorm(",theta,")/(2*sqrt(k)) + ",
+ paste("2*log(sqrt(k) * sinh(qnorm(", theta, ")/(2*sqrt(k)) + ",
"asinh(sqrt(cutpoint/k))))", sep = "")
if (tag)
string <- paste("Negative binomial-ordinal link function:", string)
@@ -1034,16 +1029,16 @@ nbolf <- function(theta, earg=stop("'earg' must be given"),
if (ncol(thmat) > 1) {
answer = thmat
for(ii in 1:ncol(thmat))
- answer[,ii] = Recall(theta=thmat[,ii],
- earg = list(cutpoint=cutpoint[ii], k=kay[ii]),
- inverse=inverse, deriv=deriv)
+ answer[,ii] = Recall(theta = thmat[,ii],
+ earg = list(cutpoint = cutpoint[ii], k = kay[ii]),
+ inverse=inverse, deriv = deriv)
return(answer)
}
answer =
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
if (cutpoint == 0) {
1.0 - (kay / (kay + care.exp(theta)))^kay
@@ -1057,14 +1052,14 @@ nbolf <- function(theta, earg=stop("'earg' must be given"),
SMALLNO = 1 * .Machine$double.xmin
Theta = theta
Theta = pmin(Theta, 1 - smallno) # Since theta == 1 is a possibility
- Theta = pmax(Theta, smallno) # Since theta==0 is a possibility
+ Theta = pmax(Theta, smallno) # Since theta == 0 is a possibility
if (cutpoint == 0) {
switch(deriv+1, {
temp = (1 - Theta)^(-1/kay) - 1
temp = pmax(temp, SMALLNO)
log(kay) + log(temp)},
(kay / (1 - Theta)^(1/kay) - kay) * (1 - Theta)^(kay+1/kay),
- { stop('cannot handle deriv=2') },
+ { stop('cannot handle deriv = 2') },
stop("'deriv' unmatched"))
} else {
Ql = qnorm(Theta)
@@ -1075,7 +1070,7 @@ nbolf <- function(theta, earg=stop("'earg' must be given"),
2 * log(temp)}, {
arg1 = (Ql/(2*sqrt(kay)) + asinh(sqrt(cutpoint/kay)))
sqrt(kay) * tanh(arg1) * dnorm(Ql) },
- { stop('cannot handle deriv=2') },
+ { stop('cannot handle deriv = 2') },
stop("'deriv' unmatched"))
}
}
@@ -1087,27 +1082,27 @@ nbolf <- function(theta, earg=stop("'earg' must be given"),
-nbolf2 <- function(theta, earg=stop("'earg' must be given"),
- inverse=FALSE, deriv=0, short=TRUE, tag=FALSE)
-{
+ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
+ inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) {
cutpoint = kay = NULL
if (is.list(earg)) {
cutpoint = earg$cutpoint
kay = earg$k
}
- if (!is.Numeric(kay, positive=TRUE))
- stop("could not determine 'k' or it is not positive-valued")
+ if (!is.Numeric(kay, positive = TRUE))
+ stop("could not determine 'k' or it is not positive-valued")
if (!is.Numeric(cutpoint))
- stop("could not determine the cutpoint")
- if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer=TRUE))
- warning("'cutpoint' should contain non-negative integer values")
+ stop("could not determine the cutpoint")
+ if (any(cutpoint < 0) || !is.Numeric(cutpoint, integer = TRUE))
+ warning("argument 'cutpoint' should",
+ " contain non-negative integer values")
if (is.character(theta)) {
string <- if (short) {
lenc = length(cutpoint) > 1
lenk = length(kay) > 1
- paste("nbolf2(",theta,", earg = list(cutpoint = ",
+ paste("nbolf2(", theta, ", earg = list(cutpoint = ",
if (lenc) "c(" else "",
ToString(cutpoint),
if (lenc) ")" else "",
@@ -1128,16 +1123,16 @@ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
if (ncol(thmat) > 1) {
answer = thmat
for(ii in 1:ncol(thmat))
- answer[,ii] = Recall(theta=thmat[,ii],
- earg = list(cutpoint=cutpoint[ii], k=kay[ii]),
- inverse=inverse, deriv=deriv)
+ answer[,ii] = Recall(theta = thmat[,ii],
+ earg = list(cutpoint = cutpoint[ii], k = kay[ii]),
+ inverse=inverse, deriv = deriv)
return(answer)
}
answer =
if (inverse) {
if (deriv > 0) {
- 1 / Recall(theta=theta, earg=earg, inverse=FALSE, deriv=deriv)
+ 1 / Recall(theta = theta, earg = earg, inverse = FALSE, deriv = deriv)
} else {
if (cutpoint == 0) {
1.0 - (kay / (kay + care.exp(theta)))^kay
@@ -1154,9 +1149,9 @@ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
ans = Re(t(apply(mymat, 2, polyroot)))
theta2 = invfun = pnorm(-ans) # pnorm(-x) = 1-pnorm(x)
for(ii in 1:4) {
- theta2[,ii] = Recall(theta=theta2[,ii],
- earg = list(cutpoint=cutpoint, k=kay),
- inverse=FALSE, deriv=deriv)
+ theta2[,ii] = Recall(theta = theta2[,ii],
+ earg = list(cutpoint = cutpoint, k = kay),
+ inverse = FALSE, deriv = deriv)
}
rankmat = t(apply(abs(theta2 - theta), 1, rank))
for(ii in 2:4) {
@@ -1172,15 +1167,15 @@ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
SMALLNO = 1 * .Machine$double.xmin
Theta = theta
Theta = pmin(Theta, 1 - smallno) # Since theta == 1 is a possibility
- Theta = pmax(Theta, smallno) # Since theta==0 is a possibility
+ Theta = pmax(Theta, smallno) # Since theta == 0 is a possibility
if (cutpoint == 0) {
switch(deriv+1, {
temp = (1 - Theta)^(-1/kay) - 1
temp = pmax(temp, SMALLNO)
log(kay) + log(temp)},
(kay / (1 - Theta)^(1/kay) - kay) * (1 - Theta)^(kay+1/kay),
- { stop('cannot handle deriv=2') },
- stop("'deriv' unmatched"))
+ { stop('cannot handle deriv = 2') },
+ stop("argument 'deriv' unmatched"))
} else {
Ql = qnorm(Theta)
a1 = -(9*cutpoint+8) / (cutpoint+1)
@@ -1201,8 +1196,8 @@ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
dA.dtheta = (-denomin * BB - numerat * CC) / denomin^2
argmax1 / (3 * dA.dtheta)
},
- { stop('cannot handle deriv=2') },
- stop("'deriv' unmatched"))
+ { stop('cannot handle deriv = 2') },
+ stop("argument 'deriv' unmatched"))
}
}
if (!is.Numeric(answer)) stop("the answer contains some NAs")
@@ -1211,13 +1206,14 @@ nbolf2 <- function(theta, earg=stop("'earg' must be given"),
-Cut = function(y, breaks=c(-Inf, quantile(c(y), prob = (1:4)/4))) {
+ Cut = function(y, breaks = c(-Inf, quantile(c(y), prob = (1:4)/4))) {
y = as.matrix(y)
- temp = cut(y, breaks=breaks, labels=FALSE)
+ temp = cut(y, breaks=breaks, labels = FALSE)
temp = c(temp) # integer vector of integers
- if (any(is.na(temp))) stop("there are NAs")
+ if (any(is.na(temp)))
+ stop("there are NAs")
answer = if (ncol(y) > 1) matrix(temp, nrow(y), ncol(y)) else temp
if (ncol(y) > 1) {
ynames = dimnames(y)[[2]]
@@ -1231,15 +1227,17 @@ Cut = function(y, breaks=c(-Inf, quantile(c(y), prob = (1:4)/4))) {
}
-checkCut = function(y) {
- if (!is.Numeric(y, posi=TRUE, integ=TRUE))
+ checkCut = function(y) {
+ if (!is.Numeric(y, posi = TRUE, integ = TRUE))
stop("'y' must contain positive integers only")
uy = unique(y)
L = max(uy)
oklevels = 1:L
- if (L == 1) stop("only one unique value")
+ if (L == 1)
+ stop("only one unique value")
for(ii in oklevels) {
- if (all(ii != uy)) stop("there is no ", ii, " value")
+ if (all(ii != uy))
+ stop("there is no ", ii, " value")
}
TRUE
}
diff --git a/R/model.matrix.vglm.q b/R/model.matrix.vglm.q
index f50b21c..4e806b6 100644
--- a/R/model.matrix.vglm.q
+++ b/R/model.matrix.vglm.q
@@ -129,6 +129,8 @@
} # End of if (assign.attributes)
+
+
if (!length(xij)) return(X_vlm)
diff --git a/R/plot.vglm.q b/R/plot.vglm.q
index 7372114..69e05cf 100644
--- a/R/plot.vglm.q
+++ b/R/plot.vglm.q
@@ -14,12 +14,12 @@
-plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
- se=FALSE, scale=0,
- raw=TRUE, offset.arg=0, deriv.arg=0, overlay=FALSE,
- type.residuals=c("deviance","working","pearson","response"),
- plot.arg=TRUE, which.term=NULL, which.cf=NULL,
- control=plotvgam.control(...),
+plotvgam = function(x, newdata = NULL, y = NULL, residuals = NULL, rugplot = TRUE,
+ se = FALSE, scale = 0,
+ raw = TRUE, offset.arg = 0, deriv.arg = 0, overlay = FALSE,
+ type.residuals = c("deviance", "working", "pearson", "response"),
+ plot.arg = TRUE, which.term = NULL, which.cf = NULL,
+ control = plotvgam.control(...),
varxij = 1, ...)
{
@@ -28,7 +28,7 @@ plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
na.act = x at na.action
x at na.action = list() # Don't want NAs returned from predict() or resid()
- if (!is.Numeric(varxij, integ=TRUE, allow=1, posit=TRUE))
+ if (!is.Numeric(varxij, integ = TRUE, allow=1, posit = TRUE))
stop("bad input for the 'varxij' argument")
if (any(slotNames(x) == "control")) {
x at control$varxij = varxij
@@ -43,19 +43,19 @@ plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
c("deviance","working","pearson","response"))[1]
- if (!is.Numeric(deriv.arg, integ=TRUE, allow=1) || deriv.arg<0)
+ if (!is.Numeric(deriv.arg, integ = TRUE, allow=1) || deriv.arg<0)
stop("bad input for the 'deriv' argument")
if (se && deriv.arg > 0) {
warning("standard errors not available with derivatives. ",
- "Setting 'se=FALSE'")
+ "Setting 'se = FALSE'")
se = FALSE
}
preplot.object <- x at preplot
if (!length(preplot.object)) {
preplot.object <- preplotvgam(x, newdata=newdata,
- raw=raw, deriv=deriv.arg, se=se,
+ raw=raw, deriv = deriv.arg, se=se,
varxij=varxij)
}
@@ -70,7 +70,7 @@ plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
} else {
residuals=resid(x,typ=type.residuals) #Get the prespecified type
if (!length(residuals))
- warning("residuals are NULL. Ignoring 'residuals=TRUE'")
+ warning("residuals are NULL. Ignoring 'residuals = TRUE'")
}
} else {
residuals <- NULL
@@ -87,7 +87,7 @@ plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
if (plot.arg)
plotpreplotvgam(preplot.object, residuals=residuals,
rugplot=rugplot, scale=scale, se=se,
- offset.arg=offset.arg, deriv.arg=deriv.arg,
+ offset.arg = offset.arg, deriv.arg = deriv.arg,
overlay=overlay,
which.term=which.term, which.cf=which.cf,
control=control)
@@ -99,7 +99,7 @@ plotvgam = function(x, newdata=NULL, y=NULL, residuals=NULL, rugplot=TRUE,
-ylim.scale <- function(ylim, scale=0) {
+ylim.scale <- function(ylim, scale = 0) {
if (length(ylim) != 2 || ylim[2] < ylim[1])
stop("error in 'ylim'")
try <- ylim[2] - ylim[1]
@@ -122,9 +122,9 @@ getallresponses = function(xij) {
-headpreplotvgam = function(object, newdata=NULL,
- terms=attr((object at terms)$terms, "term.labels"),
- raw=TRUE, deriv.arg=deriv.arg, se=FALSE,
+headpreplotvgam = function(object, newdata = NULL,
+ terms = attr((object at terms)$terms, "term.labels"),
+ raw = TRUE, deriv.arg = deriv.arg, se = FALSE,
varxij = 1) {
Terms <- terms(object) # 11/8/03; object at terms$terms
aa <- attributes(Terms)
@@ -190,7 +190,7 @@ headpreplotvgam = function(object, newdata=NULL,
stop("need to have names for fitted.values ",
"when call has a 'subset' or 'na.action' argument")
- form <- paste("~", unlist(xnames), collapse="+")
+ form <- paste("~", unlist(xnames), collapse = "+")
Mcall <- c(as.name("model.frame"), list(formula =
terms(as.formula(form)),
subset = Rownames, na.action = function(x) x))
@@ -213,13 +213,13 @@ headpreplotvgam = function(object, newdata=NULL,
-preplotvgam = function(object, newdata=NULL,
+preplotvgam = function(object, newdata = NULL,
terms=attr((object at terms)$terms, "term.labels"),
- raw=TRUE, deriv.arg=deriv.arg, se=FALSE,
+ raw = TRUE, deriv.arg = deriv.arg, se = FALSE,
varxij=1) {
result1 = headpreplotvgam(object, newdata=newdata, terms=terms,
- raw=raw, deriv.arg=deriv.arg, se=se,
+ raw=raw, deriv.arg = deriv.arg, se=se,
varxij=varxij)
xvars = result1$xvars
@@ -239,11 +239,11 @@ preplotvgam = function(object, newdata=NULL,
}
pred <- if (length(newdata)) {
- predict(object, newdata, type="terms",
- raw=raw, se.fit=se, deriv.arg=deriv.arg)
+ predict(object, newdata, type = "terms",
+ raw=raw, se.fit=se, deriv.arg = deriv.arg)
} else {
- predict(object, type="terms",
- raw=raw, se.fit=se, deriv.arg=deriv.arg)
+ predict(object, type = "terms",
+ raw=raw, se.fit=se, deriv.arg = deriv.arg)
}
fits <- if (is.atomic(pred)) NULL else pred$fit
@@ -251,7 +251,7 @@ preplotvgam = function(object, newdata=NULL,
if (is.null(fits))
fits <- pred
fred <- attr(fits, "vterm.assign") # NULL for M==1
- Constant = attr(fits, "constant") # NULL if se=TRUE
+ Constant = attr(fits, "constant") # NULL if se = TRUE
gamplot <- xnames
@@ -276,12 +276,12 @@ preplotvgam = function(object, newdata=NULL,
}
-plotvlm <- function(object, residuals=NULL, rugplot= FALSE, ...) {
+plotvlm <- function(object, residuals = NULL, rugplot= FALSE, ...) {
stop("sorry, this function hasn't been written yet")
}
-plotvglm <- function(x, residuals=NULL, smooths= FALSE,
+plotvglm <- function(x, residuals = NULL, smooths= FALSE,
rugplot= FALSE, id.n= FALSE, ...) {
stop("this function hasn't been written yet")
}
@@ -289,11 +289,11 @@ plotvglm <- function(x, residuals=NULL, smooths= FALSE,
-plotpreplotvgam <- function(x, y=NULL, residuals=NULL,
- rugplot= TRUE, se= FALSE, scale=0,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.term=NULL, which.cf=NULL,
- control=NULL)
+plotpreplotvgam <- function(x, y = NULL, residuals = NULL,
+ rugplot= TRUE, se= FALSE, scale = 0,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.term = NULL, which.cf = NULL,
+ control = NULL)
{
listof <- inherits(x[[1]], "preplotvgam")
if (listof) {
@@ -305,23 +305,23 @@ plotpreplotvgam <- function(x, y=NULL, residuals=NULL,
plot.no = plot.no + 1
if ((is.character(which.term) && any(which.term == ii)) ||
(is.numeric(which.term) && any(which.term == plot.no)))
- plotpreplotvgam(x[[ii]], y=NULL,
+ plotpreplotvgam(x[[ii]], y = NULL,
residuals, rugplot=rugplot, se=se, scale=scale,
- offset.arg=offset.arg,
- deriv.arg=deriv.arg, overlay=overlay,
+ offset.arg = offset.arg,
+ deriv.arg = deriv.arg, overlay=overlay,
which.cf=which.cf,
control=control)
}
} else {
- dummy <- function(residuals=NULL, rugplot= TRUE, se= FALSE, scale=0,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL, control=plotvgam.control())
+ dummy <- function(residuals = NULL, rugplot= TRUE, se= FALSE, scale = 0,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.cf = NULL, control=plotvgam.control())
c(list(residuals=residuals, rugplot=rugplot, se=se, scale=scale,
- offset.arg=offset.arg, deriv.arg=deriv.arg, overlay=overlay,
+ offset.arg = offset.arg, deriv.arg = deriv.arg, overlay=overlay,
which.cf=which.cf), control)
d <- dummy(residuals=residuals, rugplot=rugplot, se=se, scale=scale,
- offset.arg=offset.arg, deriv.arg=deriv.arg,
+ offset.arg = offset.arg, deriv.arg = deriv.arg,
overlay=overlay,
which.cf=which.cf,
control=control)
@@ -334,19 +334,19 @@ plotpreplotvgam <- function(x, y=NULL, residuals=NULL,
}
-vplot.default <- function(x, y, se.y=NULL, xlab="", ylab="",
- residuals=NULL, rugplot= FALSE,
- scale=0, se= FALSE,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL, ...) {
+vplot.default <- function(x, y, se.y = NULL, xlab = "", ylab = "",
+ residuals = NULL, rugplot= FALSE,
+ scale = 0, se= FALSE,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.cf = NULL, ...) {
switch(data.class(x)[1],
logical=vplot.factor(factor(x), y, se.y, xlab, ylab, residuals,
rugplot, scale, se,
- offset.arg=offset.arg, overlay=overlay, ...),
+ offset.arg = offset.arg, overlay=overlay, ...),
if (is.numeric(x)) {
vplot.numeric(as.vector(x), y, se.y, xlab, ylab,
residuals, rugplot, scale, se,
- offset.arg=offset.arg, overlay=overlay, ...)
+ offset.arg = offset.arg, overlay=overlay, ...)
} else {
warning("The \"x\" component of \"", ylab, "\" has class \"",
class(x), "\"; no vplot() methods available")
@@ -356,16 +356,16 @@ vplot.default <- function(x, y, se.y=NULL, xlab="", ylab="",
-vplot.list <- function(x, y, se.y=NULL, xlab, ylab,
- residuals=NULL, rugplot= FALSE, scale=0, se= FALSE,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL, ...)
+vplot.list <- function(x, y, se.y = NULL, xlab, ylab,
+ residuals = NULL, rugplot = FALSE, scale = 0, se = FALSE,
+ offset.arg = 0, deriv.arg = 0, overlay = FALSE,
+ which.cf = NULL, ...)
{
if (is.numeric(x[[1]])) {
vplot.numeric(x[[1]], y, se.y, xlab, ylab,
residuals, rugplot, scale, se,
- offset.arg=offset.arg, deriv.arg=deriv.arg,
+ offset.arg = offset.arg, deriv.arg = deriv.arg,
overlay=overlay, ...)
} else
stop("this function hasn't been written yet")
@@ -375,18 +375,18 @@ vplot.list <- function(x, y, se.y=NULL, xlab, ylab,
plotvgam.control = function(
- which.cf=NULL,
- xlim=NULL, ylim=NULL,
- llty=par()$lty,
- slty="dashed",
- pcex=par()$cex,
- pch=par()$pch,
- pcol=par()$col,
- lcol=par()$col,
- rcol=par()$col,
- scol=par()$col,
- llwd=par()$lwd,
- slwd=par()$lwd,
+ which.cf = NULL,
+ xlim = NULL, ylim = NULL,
+ llty = par()$lty,
+ slty = "dashed",
+ pcex = par()$cex,
+ pch = par()$pch,
+ pcol = par()$col,
+ lcol = par()$col,
+ rcol = par()$col,
+ scol = par()$col,
+ llwd = par()$lwd,
+ slwd = par()$lwd,
add.arg= FALSE,
one.at.a.time= FALSE,
.include.dots= TRUE,
@@ -431,21 +431,21 @@ vplot.list <- function(x, y, se.y=NULL, xlab, ylab,
-vplot.numeric <- function(x, y, se.y=NULL, xlab, ylab,
- residuals=NULL, rugplot= FALSE, se= FALSE, scale=0,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL,
- xlim=NULL, ylim=NULL,
- llty=par()$lty,
- slty="dashed",
- pcex=par()$cex,
- pch=par()$pch,
- pcol=par()$col,
- lcol=par()$col,
- rcol=par()$col,
- scol=par()$col,
- llwd=par()$lwd,
- slwd=par()$lwd,
+vplot.numeric <- function(x, y, se.y = NULL, xlab, ylab,
+ residuals = NULL, rugplot= FALSE, se= FALSE, scale = 0,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.cf = NULL,
+ xlim = NULL, ylim = NULL,
+ llty = par()$lty,
+ slty = "dashed",
+ pcex = par()$cex,
+ pch = par()$pch,
+ pcol = par()$col,
+ lcol = par()$col,
+ rcol = par()$col,
+ scol = par()$col,
+ llwd = par()$lwd,
+ slwd = par()$lwd,
add.arg= FALSE,
one.at.a.time= FALSE,
noxmean = FALSE,
@@ -531,7 +531,7 @@ vplot.numeric <- function(x, y, se.y=NULL, xlab, ylab,
if (overlay) {
if (!length(which.cf)) which.cf = 1:ncol(uy) # Added 7/8/04
if (!add.arg) {
- matplot(ux, uy[,which.cf], type="n",
+ matplot(ux, uy[,which.cf], type = "n",
xlim=xlim, ylim=ylim,
xlab=xlab, ylab=ylab, ...)
}
@@ -542,7 +542,7 @@ vplot.numeric <- function(x, y, se.y=NULL, xlab, ylab,
points(x, residuals, pch=pch, col=pcol, cex=pcex)
} else {
matpoints(x, residuals[,which.cf],
- pch=pch, col=pcol, cex=pcex) # add.arg=TRUE,
+ pch=pch, col=pcol, cex=pcex) # add.arg = TRUE,
}
if (rugplot)
rug(jx, col=rcol)
@@ -574,18 +574,18 @@ vplot.numeric <- function(x, y, se.y=NULL, xlab, ylab,
ylim <- range(ylim0, uy[,ii], na.rm= TRUE)
if (se && !is.null(se.y))
ylim <- range(ylim0, se.lower[,ii], se.upper[,ii],
- na.rm=TRUE)
+ na.rm = TRUE)
if (!is.null(residuals))
ylim <- range(c(ylim, residuals[,ii]), na.rm= TRUE)
ylim <- ylim.scale(ylim, scale)
}
if (ncol(uy)>1 && length(separator))
- YLAB <- paste(ylab, separator, ii, sep="")
+ YLAB <- paste(ylab, separator, ii, sep = "")
if (!add.arg) {
if (one.at.a.time) {
readline("Hit return for the next plot ")
}
- plot(ux, uy[,ii], type="n",
+ plot(ux, uy[,ii], type = "n",
xlim=xlim, ylim=ylim,
xlab=xlab, ylab=YLAB, ...)
}
@@ -610,17 +610,17 @@ vplot.numeric <- function(x, y, se.y=NULL, xlab, ylab,
-vplot.matrix <- function(x, y, se.y=NULL, xlab, ylab,
- residuals=NULL, rugplot= FALSE, scale=0, se= FALSE,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL, ...) {
+vplot.matrix <- function(x, y, se.y = NULL, xlab, ylab,
+ residuals = NULL, rugplot= FALSE, scale = 0, se= FALSE,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.cf = NULL, ...) {
stop("You shouldn't ever call this function!")
}
-add.hookey <- function(ch, deriv.arg=0) {
+add.hookey <- function(ch, deriv.arg = 0) {
- if (!is.Numeric(deriv.arg, integ=TRUE, allow=1) || deriv.arg<0)
+ if (!is.Numeric(deriv.arg, integ = TRUE, allow=1) || deriv.arg<0)
stop("bad input for the 'deriv' argument")
if (deriv.arg == 0)
@@ -631,19 +631,19 @@ add.hookey <- function(ch, deriv.arg=0) {
nc <- nchar(ch)
sub <- substring(ch, 1:nc, 1:nc)
if (nc >= 2 && sub[1] == "s" && sub[2] == "(") {
- paste("s", hookey, substring(ch, 2, nc), sep="", coll="")
+ paste("s", hookey, substring(ch, 2, nc), sep = "", coll = "")
} else {
- paste(ch, hookey, sep="", collapse="")
+ paste(ch, hookey, sep = "", collapse = "")
}
}
-vplot.factor <- function(x, y, se.y=NULL, xlab, ylab,
- residuals=NULL, rugplot= FALSE, scale=0,
- se= FALSE, xlim=NULL, ylim=NULL,
- offset.arg=0, deriv.arg=0, overlay= FALSE,
- which.cf=NULL, ...)
+vplot.factor <- function(x, y, se.y = NULL, xlab, ylab,
+ residuals = NULL, rugplot= FALSE, scale = 0,
+ se= FALSE, xlim = NULL, ylim = NULL,
+ offset.arg = 0, deriv.arg = 0, overlay= FALSE,
+ which.cf = NULL, ...)
{
if (deriv.arg>0)
return(NULL)
@@ -693,9 +693,9 @@ vplot.factor <- function(x, y, se.y=NULL, xlab, ylab,
-vvplot.factor <- function(x, y, se.y=NULL, xlab, ylab,
- residuals=NULL, rugplot= FALSE, scale=0,
- se= FALSE, xlim=NULL, ylim=NULL,
+vvplot.factor <- function(x, y, se.y = NULL, xlab, ylab,
+ residuals = NULL, rugplot= FALSE, scale = 0,
+ se= FALSE, xlim = NULL, ylim = NULL,
...)
{
@@ -759,12 +759,12 @@ vvplot.factor <- function(x, y, se.y=NULL, xlab, ylab,
uxx <- about(ux, M, Delta=min(delta))
xlim <- range(c(xlim, uxx))
- matplot(ux, uy, ylim=ylim, xlim=xlim, xlab="", type="n",
- ylab=ylab, axes= FALSE, frame.plot=TRUE, ...)
- mtext(xlab, 1, 2, adj=0.5)
+ matplot(ux, uy, ylim=ylim, xlim=xlim, xlab = "", type = "n",
+ ylab=ylab, axes= FALSE, frame.plot = TRUE, ...)
+ mtext(xlab, 1, 2, adj = 0.5)
axis(side=2)
lpos <- par("mar")[3]
- mtext(Levels, side=3, line=lpos/2, at=ux, adj=0.5, srt=45)
+ mtext(Levels, side=3, line=lpos/2, at=ux, adj = 0.5, srt=45)
for(ii in 1:M)
segments(uxx[,ii] - 1.0 * delta, uy[,ii],
@@ -827,7 +827,7 @@ plotqrrvglm = function(object,
rtype = c("pearson", "response", "deviance", "working"),
ask = FALSE,
main = paste(Rtype, "residuals vs latent variable(s)"),
- xlab="Latent Variable",
+ xlab = "Latent Variable",
ITolerances = object at control$EqualTolerances,
...) {
M = object at misc$M
@@ -839,14 +839,14 @@ plotqrrvglm = function(object,
my.ylab = if (length(object at misc$ynames)) object at misc$ynames else
rep(" ", len=M)
- Rtype = switch(rtype, pearson="Pearson", response="Response",
- deviance="Deviance", working="Working")
+ Rtype = switch(rtype, pearson = "Pearson", response = "Response",
+ deviance = "Deviance", working = "Working")
done = 0
for(rr in 1:Rank)
for(ii in 1:M) {
plot(Coef.object at lv[,rr], res[,ii],
- xlab=paste(xlab, if (Rank == 1) "" else rr, sep=""),
+ xlab=paste(xlab, if (Rank == 1) "" else rr, sep = ""),
ylab=my.ylab[ii],
main = main, ...)
done = done + 1
diff --git a/R/qrrvglm.control.q b/R/qrrvglm.control.q
index 0f19001..a261d6b 100644
--- a/R/qrrvglm.control.q
+++ b/R/qrrvglm.control.q
@@ -19,7 +19,7 @@ qrrvglm.control = function(Rank=1,
iShape = 0.1,
ITolerances = FALSE,
maxitl = 40,
- method.init = 1,
+ imethod = 1,
Maxit.optim = 250,
MUXfactor = rep(7, length=Rank),
Norrr = ~ 1,
@@ -50,8 +50,8 @@ qrrvglm.control = function(Rank=1,
stop("bad input for 'Hstep'")
if (!is.Numeric(maxitl, posit=TRUE, allow=1, integer=TRUE))
stop("bad input for 'maxitl'")
- if (!is.Numeric(method.init, posit=TRUE, allow=1, integer=TRUE))
- stop("bad input for 'method.init'")
+ if (!is.Numeric(imethod, posit=TRUE, allow=1, integer=TRUE))
+ stop("bad input for 'imethod'")
if (!is.Numeric(Maxit.optim, integ=TRUE, posit=TRUE))
stop("Bad input for 'Maxit.optim'")
if (!is.Numeric(MUXfactor, posit=TRUE))
@@ -103,7 +103,7 @@ qrrvglm.control = function(Rank=1,
iShape = as.numeric(iShape),
ITolerances = ITolerances,
maxitl = maxitl,
- method.init = method.init,
+ imethod = imethod,
Maxit.optim = Maxit.optim,
min.criterion = TRUE, # needed for calibrate
MUXfactor = rep(MUXfactor, length=Rank),
diff --git a/R/qtplot.q b/R/qtplot.q
index 1f3cb29..11f3732 100644
--- a/R/qtplot.q
+++ b/R/qtplot.q
@@ -13,57 +13,57 @@
-qtplot.lms.bcn <- function(percentiles=c(25,50,75),
- eta=NULL, yoffset=0)
+qtplot.lms.bcn <- function(percentiles = c(25,50,75),
+ eta = NULL, yoffset = 0)
{
lp = length(percentiles)
answer <- matrix(as.numeric(NA), nrow(eta), lp,
- dimnames=list(dimnames(eta)[[1]],
- paste(as.character(percentiles), "%", sep="")))
+ dimnames = list(dimnames(eta)[[1]],
+ paste(as.character(percentiles), "%", sep = "")))
for(ii in 1:lp) {
- answer[,ii] <- eta[,2] * (1+eta[,1] * eta[,3] *
- qnorm(percentiles[ii]/100))^(1/eta[,1])
+ answer[, ii] <- eta[, 2] * (1+eta[, 1] * eta[, 3] *
+ qnorm(percentiles[ii]/100))^(1/eta[, 1])
}
answer
}
-qtplot.lms.bcg <- function(percentiles=c(25,50,75),
- eta=NULL, yoffset=0)
+qtplot.lms.bcg <- function(percentiles = c(25,50,75),
+ eta = NULL, yoffset = 0)
{
cc <- percentiles
lp = length(percentiles)
answer <- matrix(as.numeric(NA), nrow(eta), lp,
- dimnames=list(dimnames(eta)[[1]],
- paste(as.character(percentiles), "%", sep="")))
- lambda <- eta[,1]
- sigma <- eta[,3]
+ dimnames = list(dimnames(eta)[[1]],
+ paste(as.character(percentiles), "%", sep = "")))
+ lambda <- eta[, 1]
+ sigma <- eta[, 3]
shape <- 1 / (lambda * sigma)^2
for(ii in 1:lp) {
ccc <- rep(cc[ii]/100, len=nrow(eta))
ccc <- ifelse(lambda > 0, ccc, 1-ccc)
- answer[,ii] <- eta[,2] * (qgamma(ccc, sh=shape)/shape)^(1/lambda)
+ answer[, ii] <- eta[, 2] * (qgamma(ccc, sh=shape)/shape)^(1/lambda)
}
answer
}
qtplot.lms.yjn2 <-
-qtplot.lms.yjn <- function(percentiles=c(25,50,75),
- eta=NULL, yoffset=0)
+qtplot.lms.yjn <- function(percentiles = c(25,50,75),
+ eta = NULL, yoffset = 0)
{
cc <- percentiles
lp = length(percentiles)
answer <- matrix(as.numeric(NA), nrow(eta), lp,
- dimnames=list(dimnames(eta)[[1]],
- paste(as.character(percentiles), "%", sep="")))
- lambda <- eta[,1]
- mu <- eta[,2]
- sigma <- eta[,3] # Link function already taken care of above
+ dimnames = list(dimnames(eta)[[1]],
+ paste(as.character(percentiles), "%", sep = "")))
+ lambda <- eta[, 1]
+ mu <- eta[, 2]
+ sigma <- eta[, 3] # Link function already taken care of above
for(ii in 1:lp) {
ccc <- mu + sigma * qnorm(cc[ii]/100)
- answer[,ii] <- yeo.johnson(ccc, lambda, inverse= TRUE) - yoffset
+ answer[, ii] <- yeo.johnson(ccc, lambda, inverse= TRUE) - yoffset
}
answer
}
@@ -80,7 +80,7 @@ qtplot.default <- function(object, ...) {
LL <- length(object at family@vfamily)
newcall = paste("qtplot.", object at family@vfamily[LL],
- "(object, ...)", sep="")
+ "(object, ...)", sep = "")
newcall = parse(text=newcall)[[1]]
if (Attach) {
@@ -92,7 +92,7 @@ qtplot.default <- function(object, ...) {
qtplot.lmscreg <- function(object,
- newdata=NULL,
+ newdata = NULL,
percentiles=object at misc$percentiles,
plot.it= TRUE, ...) {
@@ -102,14 +102,14 @@ qtplot.lmscreg <- function(object,
lp <- length(percentiles)
if (same) {
fitted.values <- if (!length(newdata)) object at fitted.values else {
- predict(object, newdata=newdata, type="response")
+ predict(object, newdata=newdata, type = "response")
}
fitted.values <- as.matrix(fitted.values)
} else {
if (!is.numeric(percentiles))
stop("'percentiles' must be specified")
- eta <- if (length(newdata)) predict(object, newdata=newdata, type="link") else
+ eta <- if (length(newdata)) predict(object, newdata=newdata, type = "link") else
object at predictors
eta <- eta2theta(eta, object at misc$link) # Now lambda, mu, sigma
@@ -118,19 +118,19 @@ qtplot.lmscreg <- function(object,
}
newcall = paste(if (expectiles) "explot." else "qtplot.",
- object at family@vfamily[1], "(percentiles=percentiles",
- ", eta=eta, yoffset=object at misc$yoffset)", sep="")
+ object at family@vfamily[1], "(percentiles = percentiles",
+ ", eta = eta, yoffset=object at misc$yoffset)", sep = "")
newcall = parse(text=newcall)[[1]]
fitted.values = as.matrix( eval(newcall) )
dimnames(fitted.values) <- list(dimnames(eta)[[1]],
- paste(as.character(percentiles), "%", sep=""))
+ paste(as.character(percentiles), "%", sep = ""))
}
if (plot.it) {
plotqtplot.lmscreg(fit=fitted.values, obj=object,
newdata=newdata,
- lp=lp,
- percentiles=percentiles, ...)
+ lp = lp,
+ percentiles = percentiles, ...)
}
list(fitted.values = fitted.values, percentiles = percentiles)
@@ -139,31 +139,31 @@ qtplot.lmscreg <- function(object,
plotqtplot.lmscreg <- function(fitted.values, object,
- newdata=NULL,
+ newdata = NULL,
percentiles=object at misc$percentiles,
- lp=NULL,
- add.arg=FALSE,
+ lp = NULL,
+ add.arg = FALSE,
y = if (length(newdata)) FALSE else TRUE,
- spline.fit=FALSE,
- label=TRUE,
- size.label=0.06,
- xlab=NULL, ylab="",
- pch=par()$pch, pcex=par()$cex, pcol.arg=par()$col,
- xlim=NULL, ylim=NULL,
- llty.arg=par()$lty,
- lcol.arg=par()$col, llwd.arg=par()$lwd,
- tcol.arg=par()$col,
- tadj=1, ...)
+ spline.fit = FALSE,
+ label = TRUE,
+ size.label = 0.06,
+ xlab = NULL, ylab = "",
+ pch = par()$pch, pcex = par()$cex, pcol.arg = par()$col,
+ xlim = NULL, ylim = NULL,
+ llty.arg = par()$lty,
+ lcol.arg = par()$col, llwd.arg = par()$lwd,
+ tcol.arg = par()$col,
+ tadj = 1, ...)
{
if (!length(newdata)) {
- X <- model.matrixvlm(object, type="lm")
+ X <- model.matrixvlm(object, type = "lm")
if (is.matrix(X) && length(object at y) && ncol(X)==2 &&
- dimnames(X)[[2]][1]=="(Intercept)")
+ dimnames(X)[[2]][1] == "(Intercept)")
{
- xx <- X[,2]
+ xx <- X[, 2]
if (is.null(xlab)) {
xlab <- if (object at misc$nonparametric)
as.vector(slot(object, "s.xargument")) else
@@ -179,13 +179,13 @@ plotqtplot.lmscreg <- function(fitted.values, object,
if (!is.numeric(ylim))
ylim <- c(min(fred), max(fred))
matplot(x=xx, y=fred,
- xlab=xlab, ylab=ylab, type="n",
+ xlab=xlab, ylab=ylab, type = "n",
xlim=xlim, ylim=ylim, ...)
}
if (y && length(object at y))
- matpoints(x=xx, y=object at y, pch=pch, cex=pcex,
- col=pcol.arg)
+ matpoints(x=xx, y=object at y, pch = pch, cex = pcex,
+ col = pcol.arg)
} else {
warning(paste("there is not a single covariate.",
"Returning the object."))
@@ -213,33 +213,33 @@ plotqtplot.lmscreg <- function(fitted.values, object,
if (!is.numeric(ylim))
ylim <- c(min(fitted.values), max(fitted.values))
matplot(x=xx, y=fitted.values,
- xlab=xlab, ylab=ylab, type="n",
- xlim=xlim, ylim=ylim, col=pcol.arg)
+ xlab=xlab, ylab=ylab, type = "n",
+ xlim=xlim, ylim=ylim, col = pcol.arg)
}
if (y && length(object at y))
- matpoints(x=xx, y=object at y, pch=pch, cex=pcex,
- col=pcol.arg)
+ matpoints(x=xx, y=object at y, pch = pch, cex = pcex,
+ col = pcol.arg)
}
- tcol.arg = rep(tcol.arg, length=lp)
- lcol.arg = rep(lcol.arg, length=lp)
- llwd.arg = rep(llwd.arg, length=lp)
- llty.arg = rep(llty.arg, length=lp)
+ tcol.arg = rep(tcol.arg, length = lp)
+ lcol.arg = rep(lcol.arg, length = lp)
+ llwd.arg = rep(llwd.arg, length = lp)
+ llty.arg = rep(llty.arg, length = lp)
for(ii in 1:lp) {
- temp <- cbind(xx, fitted.values[,ii])
- temp <- temp[sort.list(temp[,1]),]
- index <- !duplicated(temp[,1])
+ temp <- cbind(xx, fitted.values[, ii])
+ temp <- temp[sort.list(temp[, 1]),]
+ index <- !duplicated(temp[, 1])
if (spline.fit) {
- lines(spline(temp[index,1], temp[index,2]),
- lty=llty.arg[ii], col=lcol.arg[ii], err=-1, lwd=llwd.arg[ii])
+ lines(spline(temp[index, 1], temp[index, 2]),
+ lty = llty.arg[ii], col = lcol.arg[ii], err=-1, lwd = llwd.arg[ii])
} else {
- lines(temp[index,1], temp[index,2],
- lty=llty.arg[ii], col=lcol.arg[ii], err=-1, lwd=llwd.arg[ii])
+ lines(temp[index, 1], temp[index, 2],
+ lty = llty.arg[ii], col = lcol.arg[ii], err=-1, lwd = llwd.arg[ii])
}
if (label)
- text(par()$usr[2], temp[nrow(temp),2],
- paste( percentiles[ii], "%", sep=""),
+ text(par()$usr[2], temp[nrow(temp), 2],
+ paste( percentiles[ii], "%", sep = ""),
adj=tadj, col=tcol.arg[ii], err=-1)
}
@@ -252,21 +252,25 @@ if (TRUE) {
setGeneric("qtplot", function(object, ...) standardGeneric("qtplot"))
- setMethod("qtplot", signature(object="vglm"),
+ setMethod("qtplot", signature(object = "vglm"),
function(object, ...)
invisible(qtplot.vglm(object, ...)))
- setMethod("qtplot", signature(object="vgam"),
+ setMethod("qtplot", signature(object = "vgam"),
function(object, ...)
invisible(qtplot.vglm(object, ...)))
}
+
+
+
+
"qtplot.vextremes" <- function(object, ...) {
newcall = paste("qtplot.", object at family@vfamily[1],
- "(object=object, ... )", sep="")
+ "(object=object, ... )", sep = "")
newcall = parse(text=newcall)[[1]]
eval(newcall)
}
@@ -274,20 +278,20 @@ if (TRUE) {
qtplot.egumbel <-
qtplot.gumbel <-
- function(object, plot.it=TRUE, y.arg=TRUE, spline.fit=FALSE, label=TRUE,
+ function(object, plot.it = TRUE, y.arg = TRUE, spline.fit = FALSE, label = TRUE,
R=object at misc$R,
percentiles=object at misc$percentiles,
- add.arg=FALSE,
+ add.arg = FALSE,
mpv=object at misc$mpv,
- xlab=NULL, ylab="", main="",
- pch=par()$pch, pcol.arg=par()$col,
- llty.arg=par()$lty, lcol.arg=par()$col, llwd.arg=par()$lwd,
- tcol.arg=par()$col, tadj=1, ...)
+ xlab = NULL, ylab = "", main = "",
+ pch = par()$pch, pcol.arg = par()$col,
+ llty.arg = par()$lty, lcol.arg = par()$col, llwd.arg = par()$lwd,
+ tcol.arg = par()$col, tadj = 1, ...)
{
if (!is.logical(mpv) || length(mpv) != 1)
stop("bad input for 'mpv'")
if (!length(percentiles) ||
- (!is.Numeric(percentiles, posit=TRUE) || max(percentiles) >= 100))
+ (!is.Numeric(percentiles, posit = TRUE) || max(percentiles) >= 100))
stop("bad input for 'percentiles'")
@@ -306,7 +310,7 @@ qtplot.gumbel <-
extra$mpv = mpv # Overwrite if necessary
extra$R = R
extra$percentiles = percentiles
- fitted.values = object at family@inverse(eta=eta, extra=extra)
+ fitted.values = object at family@inverse(eta = eta, extra = extra)
answer = list(fitted.values = fitted.values,
percentiles = percentiles)
@@ -317,16 +321,16 @@ qtplot.gumbel <-
lp = length(percentiles) # Does not include mpv
- tcol.arg = rep(tcol.arg, length=lp+mpv)
- lcol.arg = rep(lcol.arg, length=lp+mpv)
- llwd.arg = rep(llwd.arg, length=lp+mpv)
- llty.arg = rep(llty.arg, length=lp+mpv)
+ tcol.arg = rep(tcol.arg, length = lp+mpv)
+ lcol.arg = rep(lcol.arg, length = lp+mpv)
+ llwd.arg = rep(llwd.arg, length = lp+mpv)
+ llty.arg = rep(llty.arg, length = lp+mpv)
- X <- model.matrixvlm(object, type="lm")
+ X <- model.matrixvlm(object, type = "lm")
if (is.matrix(X) && length(object at y) && ncol(X)==2 &&
- dimnames(X)[[2]][1]=="(Intercept)")
+ dimnames(X)[[2]][1] == "(Intercept)")
{
- xx <- X[,2]
+ xx <- X[, 2]
if (!length(xlab))
xlab <- if (object at misc$nonparametric &&
length(object at s.xargument))
@@ -334,10 +338,10 @@ qtplot.gumbel <-
if (!add.arg)
matplot(x=xx, y=cbind(object at y, fitted.values), main=main,
- xlab=xlab, ylab=ylab, type="n", ...)
+ xlab=xlab, ylab=ylab, type = "n", ...)
if (y.arg) {
- matpoints(x=xx, y=object at y, pch=pch, col=pcol.arg)
+ matpoints(x=xx, y=object at y, pch = pch, col = pcol.arg)
}
} else {
warning("there is not a single covariate.")
@@ -346,19 +350,19 @@ qtplot.gumbel <-
for(ii in 1:(lp+mpv))
{
- temp <- cbind(xx, fitted.values[,ii])
- temp <- temp[sort.list(temp[,1]),]
- index <- !duplicated(temp[,1])
+ temp <- cbind(xx, fitted.values[, ii])
+ temp <- temp[sort.list(temp[, 1]),]
+ index <- !duplicated(temp[, 1])
if (spline.fit) {
- lines(spline(temp[index,1], temp[index,2]),
- lty=llty.arg[ii], col=lcol.arg[ii], lwd=llwd.arg[ii])
+ lines(spline(temp[index, 1], temp[index, 2]),
+ lty = llty.arg[ii], col = lcol.arg[ii], lwd = llwd.arg[ii])
} else {
- lines(temp[index,1], temp[index,2],
- lty=llty.arg[ii], col=lcol.arg[ii], lwd=llwd.arg[ii])
+ lines(temp[index, 1], temp[index, 2],
+ lty = llty.arg[ii], col = lcol.arg[ii], lwd = llwd.arg[ii])
}
if (label) {
mylabel = (dimnames(answer$fitted)[[2]])[ii]
- text(par()$usr[2], temp[nrow(temp),2],
+ text(par()$usr[2], temp[nrow(temp), 2],
mylabel, adj=tadj, col=tcol.arg[ii], err=-1)
}
}
@@ -378,8 +382,8 @@ deplot.lms.bcn <- function(object,
if (!any(object at family@vfamily == "lms.bcn"))
warning("I think you've called the wrong function")
- Zvec <- ((y.arg/eta0[,2])^(eta0[,1]) -1) / (eta0[,1] * eta0[,3])
- dZ.dy <- ((y.arg/eta0[,2])^(eta0[,1]-1)) / (eta0[,2] * eta0[,3])
+ Zvec <- ((y.arg/eta0[, 2])^(eta0[, 1]) -1) / (eta0[, 1] * eta0[, 3])
+ dZ.dy <- ((y.arg/eta0[, 2])^(eta0[, 1]-1)) / (eta0[, 2] * eta0[, 3])
yvec <- dnorm(Zvec) * abs(dZ.dy)
list(newdata=newdata, y=y.arg, density=yvec)
@@ -395,10 +399,10 @@ deplot.lms.bcg <- function(object,
if (!any(object at family@vfamily == "lms.bcg"))
warning("I think you've called the wrong function")
- Zvec <- (y.arg/eta0[,2])^(eta0[,1]) # different from lms.bcn
- dZ.dy <- ((y.arg/eta0[,2])^(eta0[,1]-1)) * eta0[,1] / eta0[,2]
- lambda <- eta0[,1]
- sigma <- eta0[,3]
+ Zvec <- (y.arg/eta0[, 2])^(eta0[, 1]) # different from lms.bcn
+ dZ.dy <- ((y.arg/eta0[, 2])^(eta0[, 1]-1)) * eta0[, 1] / eta0[, 2]
+ lambda <- eta0[, 1]
+ sigma <- eta0[, 3]
shape <- 1 / (lambda * sigma)^2
yvec <- dgamma(Zvec, shape=shape, rate=shape) * abs(dZ.dy)
@@ -416,11 +420,11 @@ deplot.lms.yjn <- function(object,
if (!length(intersect(object at family@vfamily, c("lms.yjn","lms.yjn2"))))
warning("I think you've called the wrong function")
- lambda <- eta0[,1]
- Zvec <- (yeo.johnson(y.arg+object at misc$yoffset, lambda=eta0[,1]) -
- eta0[,2]) / eta0[,3]
+ lambda <- eta0[, 1]
+ Zvec <- (yeo.johnson(y.arg+object at misc$yoffset, lambda = eta0[, 1]) -
+ eta0[, 2]) / eta0[, 3]
dZ.dy <- dyj.dy.yeojohnson(y.arg+object at misc$yoffset,
- lambda=eta0[,1]) / eta0[,3]
+ lambda = eta0[, 1]) / eta0[, 3]
yvec <- dnorm(Zvec) * abs(dZ.dy)
list(newdata=newdata, y=y.arg, density=yvec)
@@ -439,7 +443,7 @@ deplot.default <- function(object, ...) {
"deplot.vglm" <- function(object, Attach= TRUE, ...) {
LL <- length(object at family@vfamily)
newcall = paste("deplot.", object at family@vfamily[LL],
- "(object, ...)", sep="")
+ "(object, ...)", sep = "")
newcall = parse(text=newcall)[[1]]
if (Attach) {
@@ -452,7 +456,7 @@ deplot.default <- function(object, ...) {
"deplot.lmscreg" <- function(object,
- newdata=NULL,
+ newdata = NULL,
x0,
y.arg, plot.it= TRUE, ...) {
@@ -473,7 +477,7 @@ deplot.default <- function(object, ...) {
eta0 <- eta2theta(eta0, object at misc$link) # lambda, mu, sigma
newcall = paste("deplot.", object at family@vfamily[1],
- "(object, newdata, y.arg=y.arg, eta0=eta0)", sep="")
+ "(object, newdata, y.arg=y.arg, eta0 = eta0)", sep = "")
newcall = parse(text=newcall)[[1]]
answer = eval(newcall)
@@ -488,10 +492,10 @@ deplot.default <- function(object, ...) {
plotdeplot.lmscreg <- function(answer,
y.arg,
add.arg= FALSE,
- xlab="", ylab="density",
- xlim=NULL, ylim=NULL,
- llty.arg=par()$lty, col.arg=par()$col,
- llwd.arg=par()$lwd, ...)
+ xlab = "", ylab = "density",
+ xlim = NULL, ylim = NULL,
+ llty.arg = par()$lty, col.arg = par()$col,
+ llwd.arg = par()$lwd, ...)
{
yvec <- answer$density
@@ -503,15 +507,15 @@ plotdeplot.lmscreg <- function(answer,
if (!is.numeric(ylim))
ylim <- c(min(yvec), max(yvec))
matplot(x=xx, y=yvec,
- xlab=xlab, ylab=ylab, type="n",
+ xlab=xlab, ylab=ylab, type = "n",
xlim=xlim, ylim=ylim, ...)
}
temp <- cbind(xx, yvec)
- temp <- temp[sort.list(temp[,1]),]
- index <- !duplicated(temp[,1])
- lines(temp[index,1], temp[index,2],
- lty=llty.arg, col=col.arg, err=-1, lwd=llwd.arg)
+ temp <- temp[sort.list(temp[, 1]),]
+ index <- !duplicated(temp[, 1])
+ lines(temp[index, 1], temp[index, 2],
+ lty = llty.arg, col=col.arg, err=-1, lwd = llwd.arg)
invisible(answer)
}
@@ -524,10 +528,10 @@ if (TRUE) {
if (!isGeneric("deplot"))
setGeneric("deplot", function(object, ...) standardGeneric("deplot"))
- setMethod("deplot", signature(object="vglm"),
+ setMethod("deplot", signature(object = "vglm"),
function(object, ...)
invisible(deplot.vglm(object, ...)))
- setMethod("deplot", signature(object="vgam"),
+ setMethod("deplot", signature(object = "vgam"),
function(object, ...)
invisible(deplot.vglm(object, ...)))
}
@@ -540,20 +544,20 @@ if (TRUE) {
if (!isGeneric("cdf"))
setGeneric("cdf", function(object, ...) standardGeneric("cdf"))
- setMethod("cdf", signature(object="vglm"),
+ setMethod("cdf", signature(object = "vglm"),
function(object, ...)
cdf.vglm(object, ...))
- setMethod("cdf", signature(object="vgam"),
+ setMethod("cdf", signature(object = "vgam"),
function(object, ...)
cdf.vglm(object, ...))
}
-"cdf.vglm" <- function(object, newdata=NULL, Attach= FALSE, ...) {
+"cdf.vglm" <- function(object, newdata = NULL, Attach= FALSE, ...) {
LL <- length(object at family@vfamily)
newcall = paste("cdf.", object at family@vfamily[LL],
- "(object, newdata, ...)", sep="")
+ "(object, newdata, ...)", sep = "")
newcall = parse(text=newcall)[[1]]
if (Attach) {
@@ -566,7 +570,7 @@ if (TRUE) {
"cdf.lmscreg" <- function(object,
- newdata=NULL, ...) {
+ newdata = NULL, ...) {
@@ -579,7 +583,7 @@ if (TRUE) {
y = vgety(object, newdata) # Includes yoffset
newcall = paste("cdf.", object at family@vfamily[1],
- "(y, eta0, ... )", sep="")
+ "(y, eta0, ... )", sep = "")
newcall = parse(text=newcall)[[1]]
eval(newcall)
}
@@ -588,8 +592,8 @@ if (TRUE) {
cdf.lms.bcn <- function(y, eta0)
{
- Zvec <- ((y/eta0[,2])^(eta0[,1]) -1) / (eta0[,1] * eta0[,3])
- Zvec[abs(eta0[,3]) < 1e-5] = log(y/eta0[,2]) / eta0[,3] # Singularity at 0
+ Zvec <- ((y/eta0[, 2])^(eta0[, 1]) -1) / (eta0[, 1] * eta0[, 3])
+ Zvec[abs(eta0[, 3]) < 1e-5] = log(y/eta0[, 2]) / eta0[, 3] # Singularity at 0
ans = c(pnorm(Zvec))
names(ans) = dimnames(eta0)[[1]]
ans
@@ -598,10 +602,10 @@ cdf.lms.bcn <- function(y, eta0)
cdf.lms.bcg <- function(y, eta0)
{
- shape = 1 / (eta0[,1] * eta0[,3])^2
- Gvec = shape * (y/eta0[,2])^(eta0[,1])
+ shape = 1 / (eta0[, 1] * eta0[, 3])^2
+ Gvec = shape * (y/eta0[, 2])^(eta0[, 1])
ans = c(pgamma(Gvec, sh=shape))
- ans[eta0[,1] < 0] = 1-ans
+ ans[eta0[, 1] < 0] = 1-ans
names(ans) = dimnames(eta0)[[1]]
ans
}
@@ -611,14 +615,14 @@ cdf.lms.yjn <- function(y, eta0)
{
- Zvec = (yeo.johnson(y, eta0[,1]) - eta0[,2])/eta0[,3]
+ Zvec = (yeo.johnson(y, eta0[, 1]) - eta0[, 2])/eta0[, 3]
ans = c(pnorm(Zvec))
names(ans) = dimnames(eta0)[[1]]
ans
}
-vgety = function(object, newdata=NULL) {
+vgety = function(object, newdata = NULL) {
y = if (length(newdata)) {
yname = dimnames(attr(terms(object at terms),"factors"))[[1]][1]
@@ -636,11 +640,11 @@ vgety = function(object, newdata=NULL) {
-"rlplot.vglm" <- function(object, Attach= TRUE, ...) {
+"rlplot.vglm" <- function(object, Attach = TRUE, ...) {
LL <- length(object at family@vfamily)
newcall = paste("rlplot.", object at family@vfamily[LL],
- "(object, ...)", sep="")
+ "(object, ...)", sep = "")
newcall = parse(text=newcall)[[1]]
if (Attach) {
@@ -658,62 +662,72 @@ vgety = function(object, newdata=NULL) {
newcall = paste("rlplot.", object at family@vfamily[1],
- "(object=object, ... )", sep="")
- newcall = parse(text=newcall)[[1]]
+ "(object = object, ... )", sep = "")
+ newcall = parse(text = newcall)[[1]]
eval(newcall)
}
+
rlplot.egev <-
rlplot.gev <-
- function(object, plot.it=TRUE,
+ function(object, plot.it = TRUE,
probability = c((1:9)/100, (1:9)/10, 0.95, 0.99, 0.995, 0.999),
- add.arg=FALSE,
- xlab="Return Period",ylab="Return Level", main="Return Level Plot",
- pch=par()$pch, pcol.arg=par()$col, pcex=par()$cex,
- llty.arg=par()$lty, lcol.arg=par()$col, llwd.arg=par()$lwd,
- slty.arg=par()$lty, scol.arg=par()$col, slwd.arg=par()$lwd,
- ylim=NULL,
- Log = TRUE,
+ add.arg = FALSE,
+ xlab = "Return Period",ylab = "Return Level", main = "Return Level Plot",
+ pch = par()$pch, pcol.arg = par()$col, pcex = par()$cex,
+ llty.arg = par()$lty, lcol.arg = par()$col, llwd.arg = par()$lwd,
+ slty.arg = par()$lty, scol.arg = par()$col, slwd.arg = par()$lwd,
+ ylim = NULL,
+ log = TRUE,
CI = TRUE,
epsilon = 1.0e-05,
...)
{
- if (!is.Numeric(epsilon, allow=1) || abs(epsilon) > 0.10)
+ log.arg = log
+ rm(log)
+ if (!is.Numeric(epsilon, allow = 1) || abs(epsilon) > 0.10)
stop("bad input for 'epsilon'")
- if (!is.Numeric(probability, posit=TRUE) || max(probability) >= 1 ||
+ if (!is.Numeric(probability, posit = TRUE) ||
+ max(probability) >= 1 ||
length(probability) < 5)
stop("bad input for 'probability'")
- if (!is.logical(Log) || length(Log) != 1)
- stop("bad input for argument 'Log'")
+
+ if (!is.logical(log.arg) || length(log.arg) != 1)
+ stop("bad input for argument 'log'")
if (!is.logical(CI) || length(CI) != 1)
stop("bad input for argument 'CI'")
+
if (!object at misc$intercept.only)
- stop("object must be an intercept-only fit, i.e., y ~ 1 is the response")
+ stop("object must be an intercept-only fit, ",
+ "i.e., y ~ 1 is the response")
extra2 = object at extra
extra2$percentiles = 100 * probability # Overwrite
- zp = object at family@inverse(eta=predict(object)[1:2,], extra=extra2)[1,]
+ zp = object at family@inverse(eta = predict(object)[1:2,],
+ extra = extra2)[1,]
yp = -log(probability)
- ydata = sort(object at y[,1])
+ ydata = sort(object at y[, 1])
n = object at misc$n
- if (Log) {
+ if (log.arg) {
if (!add.arg)
- plot(log(1/yp), zp, log="", type="n",
+ plot(log(1/yp), zp, log = "", type = "n",
ylim = if (length(ylim)) ylim else
c(min(c(ydata, zp)), max(c(ydata, zp))),
xlab=xlab, ylab=ylab, main=main, ...)
- points(log(-1/log((1:n)/(n+1))), ydata, col=pcol.arg, pch=pch, cex=pcex)
+ points(log(-1/log((1:n)/(n+1))), ydata, col = pcol.arg,
+ pch = pch, cex = pcex)
lines(log(1/yp), zp,
- lwd=llwd.arg, col=lcol.arg, lty=llty.arg)
+ lwd = llwd.arg, col = lcol.arg, lty = llty.arg)
} else {
if (!add.arg)
- plot(1/yp, zp, log="x", type="n",
+ plot(1/yp, zp, log = "x", type = "n",
ylim = if (length(ylim)) ylim else
c(min(c(ydata, zp)), max(c(ydata, zp))),
xlab=xlab, ylab=ylab, main=main, ...)
- points(-1/log((1:n)/(n+1)), ydata, col=pcol.arg, pch=pch, cex=pcex)
- lines(1/yp, zp, lwd=llwd.arg, col=lcol.arg, lty=llty.arg)
+ points(-1/log((1:n)/(n+1)), ydata, col = pcol.arg,
+ pch = pch, cex = pcex)
+ lines(1/yp, zp, lwd = llwd.arg, col = lcol.arg, lty = llty.arg)
}
if (CI) {
@@ -723,27 +737,29 @@ rlplot.gev <-
earg = object at misc$earg
M = object at misc$M
for(ii in 1:M) {
- TTheta = eta[,ii]
+ TTheta = eta[, ii]
use.earg = earg[[ii]]
newcall = paste(Links[ii],
- "(theta=TTheta, earg=use.earg, inverse=TRUE)", sep="")
+ "(theta=TTheta, earg=use.earg, inverse = TRUE)",
+ sep = "")
newcall = parse(text=newcall)[[1]]
uteta = eval(newcall) # Theta, the untransformed parameter
uteta = uteta + epsilon # perturb it
newcall = paste(Links[ii],
- "(theta=uteta, earg=use.earg)", sep="")
+ "(theta=uteta, earg=use.earg)", sep = "")
newcall = parse(text=newcall)[[1]]
teta = eval(newcall) # The transformed parameter
peta = eta
- peta[,ii] = teta
- zpp[,ii] = object at family@inverse(eta=peta, extra=extra2)[1,]
- zpp[,ii] = (zpp[,ii] - zp) / epsilon # On the transformed scale
+ peta[, ii] = teta
+ zpp[, ii] = object at family@inverse(eta = peta,
+ extra = extra2)[1,]
+ zpp[, ii] = (zpp[, ii] - zp) / epsilon # On the transformed scale
}
- VCOV = vcovvlm(object, untransform=TRUE)
+ VCOV = vcovvlm(object, untransform = TRUE)
v = numeric(nrow(zpp))
for(ii in 1:nrow(zpp))
v[ii] = t(as.matrix(zpp[ii,])) %*% VCOV %*% as.matrix(zpp[ii,])
- if (Log) {
+ if (log.arg) {
lines(log(1/yp), zp - 1.96 * sqrt(v),
lwd=slwd.arg, col=scol.arg, lty=slty.arg)
lines(log(1/yp), zp + 1.96 * sqrt(v),
@@ -764,8 +780,10 @@ rlplot.gev <-
invisible(answer)
}
+
if (!isGeneric("rlplot"))
- setGeneric("rlplot", function(object, ...) standardGeneric("rlplot"))
+ setGeneric("rlplot",
+ function(object, ...) standardGeneric("rlplot"))
setMethod("rlplot", "vglm", function(object, ...)
rlplot.vglm(object, ...))
@@ -776,16 +794,17 @@ setMethod("rlplot", "vglm", function(object, ...)
-explot.lms.bcn <- function(percentiles=c(25,50,75),
- eta=NULL, yoffset=0)
+explot.lms.bcn <- function(percentiles = c(25,50,75),
+ eta = NULL, yoffset = 0)
{
lp = length(percentiles)
- answer <- matrix(as.numeric(NA), nrow(eta), lp, dimnames=list(dimnames(eta)[[1]],
- paste(as.character(percentiles), "%", sep="")))
+ answer <- matrix(as.numeric(NA), nrow(eta), lp,
+ dimnames = list(dimnames(eta)[[1]],
+ paste(as.character(percentiles), "%", sep = "")))
for(ii in 1:lp) {
- answer[,ii] <- eta[,2] * (1+eta[,1] * eta[,3] *
- qenorm(percentiles[ii]/100))^(1/eta[,1])
+ answer[, ii] <- eta[, 2] * (1+eta[, 1] * eta[, 3] *
+ qenorm(percentiles[ii]/100))^(1/eta[, 1])
}
answer
}
diff --git a/R/rrvglm.R b/R/rrvglm.R
index 088fbc4..f1fd7ca 100644
--- a/R/rrvglm.R
+++ b/R/rrvglm.R
@@ -188,7 +188,7 @@ rrvglm <- function(formula,
fit$misc$predictors.names)
slot(answer, "predictors") = fit$predictors
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
diff --git a/R/rrvglm.fit.q b/R/rrvglm.fit.q
index 9e4e6a6..91b45f6 100644
--- a/R/rrvglm.fit.q
+++ b/R/rrvglm.fit.q
@@ -9,14 +9,14 @@
rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
- etastart=NULL, mustart=NULL, coefstart=NULL,
- offset=0, family,
+ etastart = NULL, mustart = NULL, coefstart = NULL,
+ offset = 0, family,
control=rrvglm.control(...),
- criterion="coefficients",
- qr.arg=FALSE,
- constraints=NULL,
- extra=NULL,
- Terms=Terms, function.name="rrvglm", ...)
+ criterion = "coefficients",
+ qr.arg = FALSE,
+ constraints = NULL,
+ extra = NULL,
+ Terms=Terms, function.name = "rrvglm", ...)
{
specialCM = NULL
post = list()
@@ -52,27 +52,27 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
new.crit <-
switch(criterion,
coefficients=new.coeffs,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ tfun(mu=mu, y=y, w=w, res = FALSE, eta=eta, extra))
if (trace && orig.stepsize == 1) {
cat(if(control$Quadratic) "QRR-VGLM" else "RR-VGLM",
" linear loop ", iter, ": ", criterion, "= ")
- uuuu = switch(criterion, coefficients=
+ UUUU = switch(criterion, coefficients=
format(new.crit, dig=round(2-log10(epsilon))),
format(round(new.crit, 4)))
switch(criterion,
coefficients={if(length(new.crit) > 2) cat("\n");
- cat(uuuu, fill=TRUE, sep=", ")},
- cat(uuuu, fill=TRUE, sep=", "))
+ cat(UUUU, fill = TRUE, sep = ", ")},
+ cat(UUUU, fill = TRUE, sep = ", "))
}
{
take.half.step <- (control$half.stepsizing && length(old.coeffs)) &&
!control$Quadratic &&
- ((orig.stepsize!=1) ||
- (criterion!="coefficients" &&
+ ((orig.stepsize != 1) ||
+ (criterion != "coefficients" &&
(if(minimize.criterion) new.crit > old.crit else
new.crit < old.crit)))
if (!is.logical(take.half.step))
@@ -98,7 +98,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
fv <- X_vlm_save %*% new.coeffs
if (M > 1)
- fv <- matrix(fv, n, M, byrow=TRUE)
+ fv <- matrix(fv, n, M, byrow = TRUE)
eta <- fv + offset
@@ -111,7 +111,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
new.crit <-
switch(criterion,
coefficients=new.coeffs,
- tfun(mu=mu,y=y,w=w,res=FALSE,eta=eta,extra))
+ tfun(mu=mu,y=y,w=w,res = FALSE,eta=eta,extra))
if ((criterion == "coefficients") ||
( minimize.criterion && new.crit < old.crit) ||
@@ -129,14 +129,14 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (trace) {
cat(if(control$Quadratic) "QRR-VGLM" else "RR-VGLM",
" linear loop ", iter, ": ", criterion, "= ")
- uuuu = switch(criterion, coefficients=
+ UUUU = switch(criterion, coefficients=
format(new.crit, dig=round(2-log10(epsilon))),
format(round(new.crit, 4)))
switch(criterion,
coefficients={if(length(new.crit) > 2) cat("\n");
- cat(uuuu, fill=TRUE, sep=", ")},
- cat(uuuu, fill=TRUE, sep=", "))
+ cat(UUUU, fill = TRUE, sep = ", ")},
+ cat(UUUU, fill = TRUE, sep = ", "))
}
one.more <- eval(control$convergence)
@@ -161,7 +161,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
z = eta + vbacksub(U, tvfor, M, n) - offset # Contains \bI \bnu
rrr.expression = paste("rrr", control$Algorithm,
- "expression", sep=".")
+ "expression", sep = ".")
rrr.expression = get(rrr.expression)
eval(rrr.expression)
@@ -231,7 +231,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
stop("Dzero argument didn't fully match y-names")
if (length(index) == M)
stop("all linear predictors are linear in the ",
- "latent variable(s); so set 'Quadratic=FALSE'")
+ "latent variable(s); so set 'Quadratic = FALSE'")
rrcontrol$Dzero = control$Dzero = index
}
@@ -292,8 +292,8 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
matrix(rnorm(p2 * Rank, sd=rrcontrol$SD.Cinit), p2, Rank)
} else
.Init.Poisson.QO(ymat=as.matrix(y),
- X1=if (length(colx1.index)) x[, colx1.index, drop=FALSE] else NULL,
- X2=x[, colx2.index, drop=FALSE],
+ X1=if (length(colx1.index)) x[, colx1.index, drop = FALSE] else NULL,
+ X2=x[, colx2.index, drop = FALSE],
Rank=rrcontrol$Rank, trace=rrcontrol$trace,
max.ncol.etamat = rrcontrol$Etamat.colmax,
Crow1positive=rrcontrol$Crow1positive,
@@ -330,8 +330,8 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
xsmall.qrr = tmp500$new.lv.model.matrix
B.list = tmp500$constraints # Doesn't change or contain \bI_{Rank} \bnu
if (modelno == 3 && FALSE) {
- B.list[[1]] = (B.list[[1]])[,c(TRUE,FALSE),drop=FALSE] # Amat
- B.list[[2]] = (B.list[[2]])[,c(TRUE,FALSE),drop=FALSE] # D
+ B.list[[1]] = (B.list[[1]])[,c(TRUE,FALSE),drop = FALSE] # Amat
+ B.list[[2]] = (B.list[[2]])[,c(TRUE,FALSE),drop = FALSE] # D
}
lv.mat = tmp500$lv.mat
@@ -340,7 +340,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
}
lm2vlm.model.matrix(xsmall.qrr, B.list, xij=control$xij)
} else {
- lv.mat = x[,colx2.index,drop=FALSE] %*% Cmat
+ lv.mat = x[,colx2.index,drop = FALSE] %*% Cmat
lm2vlm.model.matrix(x, Blist, xij=control$xij)
}
@@ -350,7 +350,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (length(coefstart)) {
eta <- if (ncol(X_vlm_save)>1) X_vlm_save %*% coefstart +
offset else X_vlm_save * coefstart + offset
- eta <- if (M > 1) matrix(eta, ncol=M, byrow=TRUE) else c(eta)
+ eta <- if (M > 1) matrix(eta, ncol=M, byrow = TRUE) else c(eta)
mu <- family at inverse(eta, extra)
@@ -362,8 +362,8 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
iter <- 1
new.crit <- switch(criterion,
- coefficients=1,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ coefficients = 1,
+ tfun(mu=mu, y=y, w=w, res = FALSE, eta=eta, extra))
old.crit <- if (minimize.criterion) 10*new.crit+10 else -10*new.crit-10
@@ -377,7 +377,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
tvfor <- vforsub(U, as.matrix(deriv.mu), M=M, n=n)
z <- eta + vbacksub(U, tvfor, M=M, n=n) - offset
- c.list <- list(z=as.double(z), fit=as.double(t(eta)), one.more=TRUE,
+ c.list <- list(z=as.double(z), fit=as.double(t(eta)), one.more = TRUE,
coeff=as.double(rep(1,ncol(X_vlm_save))), U=as.double(U),
copy_X_vlm=copy_X_vlm,
X_vlm = if (copy_X_vlm) as.double(X_vlm_save) else double(3))
@@ -412,7 +412,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
tfit <- eval(bf.call) # tfit$fitted.values is n x M
if (!control$Quadratic) {
- Cmat = tfit$mat.coef[colx2.index,,drop=FALSE] %*%
+ Cmat = tfit$mat.coef[colx2.index,,drop = FALSE] %*%
Amat %*% solve(t(Amat) %*% Amat)
rrcontrol$Ainit = control$Ainit = Amat # Good for valt()
rrcontrol$Cinit = control$Cinit = Cmat # Good for valt()
@@ -466,7 +466,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (nice31) {
R <- matrix(as.numeric(NA), 5, 5)
} else {
- R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop=FALSE]
+ R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop = FALSE]
R[lower.tri(R)] <- 0
attributes(R) <- list(dim=c(ncol_X_vlm, ncol_X_vlm),
dimnames=list(cnames, cnames), rank=rank)
@@ -579,7 +579,7 @@ rrvglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (ii != criterion &&
any(slotNames(family) == ii) && length(body(slot(family, ii)))) {
fit[[ii]] <- crit.list[[ii]] <-
- (slot(family, ii))(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra)
+ (slot(family, ii))(mu=mu, y=y, w=w, res = FALSE, eta=eta, extra)
}
}
diff --git a/R/summary.vlm.q b/R/summary.vlm.q
index 0ff5ccb..7ee03cd 100644
--- a/R/summary.vlm.q
+++ b/R/summary.vlm.q
@@ -7,7 +7,7 @@
-summaryvlm <- function(object, correlation=FALSE, dispersion=NULL)
+summaryvlm <- function(object, correlation = FALSE, dispersion = NULL)
{
@@ -23,7 +23,7 @@ summaryvlm <- function(object, correlation=FALSE, dispersion=NULL)
coef <- object at coefficients
cnames <- names(coef)
- presid = residualsvlm(object, type="pearson") # NULL if pooled.weight
+ presid = residualsvlm(object, type = "pearson") # NULL if pooled.weight
if (any(is.na(coef))) {
warning(paste("Some NAs in the coefficients---no summary",
@@ -107,7 +107,7 @@ summaryvlm <- function(object, correlation=FALSE, dispersion=NULL)
-printsummary.vlm <- function(x, digits=NULL, quote=TRUE, prefix="")
+printsummary.vlm <- function(x, digits = NULL, quote = TRUE, prefix = "")
{
@@ -151,12 +151,12 @@ printsummary.vlm <- function(x, digits=NULL, quote=TRUE, prefix="")
if (length(x at misc$predictors.names))
if (M==1) {
cat("\nName of response:",
- paste(x at misc$predictors.names, collapse=", "), "\n")
+ paste(x at misc$predictors.names, collapse = ", "), "\n")
} else {
- uuu = paste(x at misc$predictors.names, collapse=", ")
- uuu = x at misc$predictors.names
+ UUU = paste(x at misc$predictors.names, collapse = ", ")
+ UUU = x at misc$predictors.names
cat("\nNames of responses:\n")
- cat(uuu, fill=TRUE, sep=", ")
+ cat(UUU, fill = TRUE, sep = ", ")
}
if (!is.null(x at rss))
@@ -170,7 +170,7 @@ printsummary.vlm <- function(x, digits=NULL, quote=TRUE, prefix="")
ll <- lower.tri(correl)
correl[ll] <- format(round(correl[ll], digits))
correl[!ll] <- ""
- print(correl[-1, -ncol_X_vlm, drop=FALSE], quote=FALSE, digits=digits)
+ print(correl[-1, -ncol_X_vlm, drop = FALSE], quote = FALSE, digits=digits)
}
}
invisible(NULL)
diff --git a/R/uqo.R b/R/uqo.R
index ca0ba0f..9585148 100644
--- a/R/uqo.R
+++ b/R/uqo.R
@@ -228,7 +228,7 @@ uqo <- function(formula,
}
} else list() # R-1.5.0
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
answer
}
@@ -532,7 +532,7 @@ uqo.fit <- function(x, y, w=rep(1, len=nrow(x)),
othint = c(Rank, control$EqualTol, pstar, dimw=1, inited=290, # other ints
modelno, maxitl=control$maxitl, actnits=0, twice=0, p1star,
p2star, nice31, lenbeta, control$ITolerances, control$trace,
- p1, p2, control$method.init)
+ p1, p2, control$imethod)
othdbl = c(small=control$SmallNo, fseps=control$epsilon,
.Machine$double.eps,
kinit=rep(control$Kinit, len=NOS),
diff --git a/R/vgam.R b/R/vgam.R
index e3acf18..87c1a5b 100644
--- a/R/vgam.R
+++ b/R/vgam.R
@@ -235,7 +235,7 @@ vgam <- function(formula,
fit$misc$predictors.names)
slot(answer, "predictors") = fit$predictors
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
if (nonparametric) {
diff --git a/R/vgam.control.q b/R/vgam.control.q
index ac4b5a2..41ed049 100644
--- a/R/vgam.control.q
+++ b/R/vgam.control.q
@@ -4,18 +4,18 @@
-vgam.control <- function(all.knots=FALSE,
- bf.epsilon=1e-7,
- bf.maxit=30,
- checkwz=TRUE,
+vgam.control <- function(all.knots = FALSE,
+ bf.epsilon = 1e-7,
+ bf.maxit = 30,
+ checkwz = TRUE,
criterion = names(.min.criterion.VGAM),
- epsilon=1e-7,
- maxit=30,
+ epsilon = 1e-7,
+ maxit = 30,
na.action=na.fail,
- nk=NULL,
- save.weight=FALSE,
- se.fit=TRUE,
- trace=FALSE,
+ nk = NULL,
+ save.weight = FALSE,
+ se.fit = TRUE,
+ trace = FALSE,
wzepsilon = .Machine$double.eps^0.75,
...) {
@@ -25,31 +25,31 @@ vgam.control <- function(all.knots=FALSE,
if (mode(criterion) != "character" && mode(criterion) != "name")
criterion <- as.character(substitute(criterion))
- criterion <- pmatch(criterion[1], names(.min.criterion.VGAM), nomatch=1)
+ criterion <- pmatch(criterion[1], names(.min.criterion.VGAM), nomatch = 1)
criterion <- names(.min.criterion.VGAM)[criterion]
if (!is.logical(checkwz) || length(checkwz) != 1)
- stop("bad input for 'checkwz'")
- if (!is.Numeric(wzepsilon, allow=1, positive=TRUE))
- stop("bad input for 'wzepsilon'")
+ stop("bad input for argument 'checkwz'")
+ if (!is.Numeric(wzepsilon, allow = 1, positive = TRUE))
+ stop("bad input for argument 'wzepsilon'")
if (length(all.knots) > 1)
warning("all.knots should be of length 1; using first value only")
- if (!is.Numeric(bf.epsilon, allow=1, posit=TRUE)) {
- warning("bad input for 'bf.epsilon'; using 0.00001 instead")
+ if (!is.Numeric(bf.epsilon, allow = 1, posit = TRUE)) {
+ warning("bad input for argument 'bf.epsilon'; using 0.00001 instead")
bf.epsilon <- 0.00001
}
- if (!is.Numeric(bf.maxit, allow=1, posit=TRUE, integ=TRUE)) {
- warning("bad input for 'bf.maxit'; using 20 instead")
+ if (!is.Numeric(bf.maxit, allow = 1, posit = TRUE, integ = TRUE)) {
+ warning("bad input for argument 'bf.maxit'; using 20 instead")
bf.maxit <- 20
}
- if (!is.Numeric(epsilon, allow=1, posit=TRUE)) {
- warning("bad input for 'epsilon'; using 0.0001 instead")
+ if (!is.Numeric(epsilon, allow = 1, posit = TRUE)) {
+ warning("bad input for argument 'epsilon'; using 0.0001 instead")
epsilon <- 0.0001
}
- if (!is.Numeric(maxit, allow=1, posit=TRUE, integ=TRUE)) {
- warning("bad input for 'maxit'; using 20 instead")
- maxit <- 20
+ if (!is.Numeric(maxit, allow = 1, posit = TRUE, integ = TRUE)) {
+ warning("bad input for argument 'maxit'; using 30 instead")
+ maxit <- 30
}
convergence <- expression({
@@ -59,19 +59,19 @@ vgam.control <- function(all.knots=FALSE,
abs(old.crit-new.crit)/(abs(old.crit)+epsilon) > epsilon && iter<maxit)
})
- list(all.knots=as.logical(all.knots)[1],
- bf.epsilon=bf.epsilon,
- bf.maxit=bf.maxit,
- checkwz=checkwz,
- convergence=convergence,
- criterion=criterion,
- epsilon=epsilon,
- maxit=maxit,
+ list(all.knots = as.logical(all.knots)[1],
+ bf.epsilon = bf.epsilon,
+ bf.maxit = bf.maxit,
+ checkwz = checkwz,
+ convergence = convergence,
+ criterion = criterion,
+ epsilon = epsilon,
+ maxit = maxit,
nk=nk,
min.criterion = .min.criterion.VGAM,
- save.weight=as.logical(save.weight)[1],
- se.fit=as.logical(se.fit)[1],
- trace=as.logical(trace)[1],
+ save.weight = as.logical(save.weight)[1],
+ se.fit = as.logical(se.fit)[1],
+ trace = as.logical(trace)[1],
wzepsilon = wzepsilon)
}
@@ -96,16 +96,16 @@ vgam.nlchisq <- function(qr, resid, wz, smomat, deriv, U, smooth.labels,
index <- (ptr+1):(ptr+ncol(cmat))
for(jay in index) {
- yy <- t(cmat[,jay-ptr,drop=FALSE])
- yy <- kronecker(smomat[,jay,drop=FALSE], yy) # n x M
- Us <- mux22(U, yy, M=M, upper=TRUE, as.matrix=TRUE) # n * M
+ yy <- t(cmat[,jay-ptr,drop = FALSE])
+ yy <- kronecker(smomat[,jay,drop = FALSE], yy) # n x M
+ Us <- mux22(U, yy, M = M, upper = TRUE, as.matrix = TRUE) # n * M
- Uss <- matrix(c(t(Us)), nrow=n*M, ncol=1)
+ Uss <- matrix(c(t(Us)), nrow=n*M, ncol = 1)
Rsw <- qr.resid(qr, Uss)
- vRsw <- matrix(Rsw, nrow=n, ncol=M, byrow=TRUE)
- newans <- vbacksub(U, t(vRsw), M=M, n=n)
+ vRsw <- matrix(Rsw, nrow=n, ncol=M, byrow = TRUE)
+ newans <- vbacksub(U, t(vRsw), M = M, n=n)
ans[jay] <- sum(vRsw^2 + 2 * newans * deriv)
diff --git a/R/vgam.fit.q b/R/vgam.fit.q
index e089dcd..b0ce491 100644
--- a/R/vgam.fit.q
+++ b/R/vgam.fit.q
@@ -6,11 +6,11 @@
vgam.fit <- function(x, y, w, mf,
etastart, mustart, coefstart,
- offset, family, control, criterion="coefficients",
- constraints=NULL, extra, qr.arg,
+ offset, family, control, criterion = "coefficients",
+ constraints = NULL, extra, qr.arg,
Terms,
nonparametric, smooth.labels,
- function.name="vgam", ...)
+ function.name = "vgam", ...)
{
specialCM = NULL
post = list()
@@ -49,18 +49,18 @@ vgam.fit <- function(x, y, w, mf,
new.crit <- switch(criterion,
coefficients=new.coeffs,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ tfun(mu=mu, y=y, w=w, res = FALSE, eta=eta, extra))
if (trace) {
cat("VGAM ", bf, " loop ", iter, ": ", criterion, "= ")
- uuuu = switch(criterion, coefficients=
+ UUUU = switch(criterion, coefficients=
format(new.crit, dig=round(2-log10(epsilon))),
format(round(new.crit, 4)))
switch(criterion,
coefficients={if(length(new.crit) > 2) cat("\n");
- cat(uuuu, fill=TRUE, sep=", ")},
- cat(uuuu, fill=TRUE, sep=", "))
+ cat(UUUU, fill = TRUE, sep = ", ")},
+ cat(UUUU, fill = TRUE, sep = ", "))
}
one.more <- eval(control$convergence)
@@ -149,20 +149,20 @@ vgam.fit <- function(x, y, w, mf,
"bf.maxit, bf.epsilon, trace, se=se.fit, X_vlm_save, ",
"Blist, ncolBlist, M=M, qbig=qbig, Umat=U, ",
"all.knots=control$all.knots, nk=control$nk)",
- sep=""))[[1]]
+ sep = ""))[[1]]
qbig <- sum(ncolBlist[smooth.labels]) # Number of component funs
smomat <- matrix(0, n, qbig)
dy <- if (is.matrix(y)) dimnames(y)[[1]] else names(y)
d2 <- if (is.null(predictors.names))
- paste("(Additive predictor ",1:M,")", sep="") else
+ paste("(Additive predictor ",1:M,")", sep = "") else
predictors.names
dimnames(smomat) <- list(dy, vlabel(smooth.labels,
ncolBlist[smooth.labels], M))
tfit <- list(smomat = smomat, smooth.frame = smooth.frame)
} else {
- bf.call <- expression(vlm.wfit(xmat=X_vlm_save, z, Blist=NULL, U=U,
+ bf.call <- expression(vlm.wfit(xmat=X_vlm_save, z, Blist = NULL, U=U,
matrix.out = FALSE, is.vlmX = TRUE,
qr = qr.arg, xij = NULL))
bf <- "vlm.wfit"
@@ -174,7 +174,7 @@ vgam.fit <- function(x, y, w, mf,
if (length(coefstart)) {
eta <- if (ncol(X_vlm_save) > 1) X_vlm_save %*% coefstart +
offset else X_vlm_save * coefstart + offset
- eta <- if (M > 1) matrix(eta, ncol=M, byrow=TRUE) else c(eta)
+ eta <- if (M > 1) matrix(eta, ncol=M, byrow = TRUE) else c(eta)
mu <- family at inverse(eta, extra)
}
@@ -186,7 +186,7 @@ vgam.fit <- function(x, y, w, mf,
iter <- 1
new.crit <- switch(criterion,
coefficients=1,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ tfun(mu=mu, y=y, w=w, res = FALSE, eta=eta, extra))
old.crit <- if (minimize.criterion) 10*new.crit+10 else -10*new.crit-10
deriv.mu <- eval(family at deriv)
@@ -200,7 +200,7 @@ vgam.fit <- function(x, y, w, mf,
c.list <- list(wz=as.double(wz), z=as.double(z),
fit=as.double(t(eta)),
- one.more=TRUE, U=as.double(U),
+ one.more = TRUE, U=as.double(U),
coeff=as.double(rep(1,ncol(X_vlm_save))))
@@ -245,7 +245,7 @@ vgam.fit <- function(x, y, w, mf,
stop("rank < ncol(x) is bad")
} else rank <- ncol(x)
- R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop=FALSE]
+ R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop = FALSE]
R[lower.tri(R)] <- 0
attributes(R) <- list(dim=c(ncol_X_vlm, ncol_X_vlm),
dimnames=list(cnames, cnames), rank=rank)
@@ -304,7 +304,7 @@ vgam.fit <- function(x, y, w, mf,
list(yn, predictors.names)
NewBlist <- process.constraints(constraints, x, M, specialCM=specialCM,
- by.col=FALSE)
+ by.col = FALSE)
misc <- list(
colnames.x = xn,
@@ -349,7 +349,7 @@ vgam.fit <- function(x, y, w, mf,
any(slotNames(family) == ii) &&
length(body(slot(family, ii)))) {
fit[[ii]] <- crit.list[[ii]] <- (slot(family, ii))(mu=mu,
- y=y, w=w, res=FALSE, eta=eta, extra)
+ y=y, w=w, res = FALSE, eta=eta, extra)
}
}
diff --git a/R/vglm.R b/R/vglm.R
index 1273c12..19f1364 100644
--- a/R/vglm.R
+++ b/R/vglm.R
@@ -6,18 +6,18 @@
vglm <- function(formula,
- family, data=list(),
- weights=NULL, subset=NULL, na.action=na.fail,
- etastart=NULL, mustart=NULL, coefstart=NULL,
+ family, data = list(),
+ weights = NULL, subset = NULL, na.action = na.fail,
+ etastart = NULL, mustart = NULL, coefstart = NULL,
control=vglm.control(...),
- offset=NULL,
- method="vglm.fit",
- model=FALSE, x.arg=TRUE, y.arg=TRUE,
- contrasts=NULL,
- constraints=NULL,
- extra=list(),
- form2=NULL,
- qr.arg=FALSE, smart=TRUE, ...)
+ offset = NULL,
+ method = "vglm.fit",
+ model = FALSE, x.arg = TRUE, y.arg = TRUE,
+ contrasts = NULL,
+ constraints = NULL,
+ extra = list(),
+ form2 = NULL,
+ qr.arg = FALSE, smart = TRUE, ...)
{
dataname <- as.character(substitute(data)) # "list" if no data=
function.name <- "vglm"
@@ -56,17 +56,17 @@ vglm <- function(formula,
if (!is.null(form2)) {
if (!is.null(subset))
stop("argument 'subset' cannot be used when argument 'form2' is used")
- retlist = shadowvglm(formula=
+ retlist = shadowvglm(formula =
form2,
- family=family, data=data,
- na.action=na.action,
- control=vglm.control(...),
- method=method,
- model=model, x.arg=x.arg, y.arg=y.arg,
- contrasts=contrasts,
- constraints=constraints,
- extra=extra,
- qr.arg=qr.arg)
+ family = family, data = data,
+ na.action = na.action,
+ control = vglm.control(...),
+ method = method,
+ model = model, x.arg = x.arg, y.arg = y.arg,
+ contrasts = contrasts,
+ constraints = constraints,
+ extra = extra,
+ qr.arg = qr.arg)
Ym2 <- retlist$Ym2
Xm2 <- retlist$Xm2
@@ -87,9 +87,10 @@ if (!is.null(form2)) {
if (is.null(offset))
offset <- 0 # yyy ???
w <- model.weights(mf)
- if (!length(w))
+ if (!length(w)) {
w <- rep(1, nrow(mf))
- else if (ncol(as.matrix(w))==1 && any(w < 0))
+ } else
+ if (ncol(as.matrix(w)) == 1 && any(w < 0))
stop("negative weights not allowed")
if (is.character(family))
@@ -108,16 +109,16 @@ if (!is.null(form2)) {
vglm.fitter <- get(method)
- fit <- vglm.fitter(x=x, y=y, w=w, offset=offset,
- Xm2=Xm2, Ym2=Ym2,
- etastart=etastart, mustart=mustart, coefstart=coefstart,
- family=family,
- control=control,
- constraints=constraints,
- criterion=control$criterion,
- extra=extra,
+ fit <- vglm.fitter(x = x, y = y, w = w, offset = offset,
+ Xm2 = Xm2, Ym2 = Ym2,
+ etastart = etastart, mustart = mustart, coefstart = coefstart,
+ family = family,
+ control = control,
+ constraints = constraints,
+ criterion = control$criterion,
+ extra = extra,
qr.arg = qr.arg,
- Terms=mt, function.name=function.name, ...)
+ Terms = mt, function.name = function.name, ...)
fit$misc$dataname <- dataname
@@ -127,7 +128,7 @@ if (!is.null(form2)) {
}
answer <-
- new(Class="vglm",
+ new(Class = "vglm",
"assign" = attr(x, "assign"),
"call" = ocall,
"coefficients" = fit$coefficients,
@@ -145,9 +146,9 @@ if (!is.null(form2)) {
"residuals" = as.matrix(fit$residuals),
"rss" = fit$rss,
"smart.prediction" = as.list(fit$smart.prediction),
- "terms" = list(terms=mt))
+ "terms" = list(terms = mt))
- if (!smart) answer at smart.prediction <- list(smart.arg=FALSE)
+ if (!smart) answer at smart.prediction <- list(smart.arg = FALSE)
if (qr.arg) {
class(fit$qr) = "list"
@@ -197,7 +198,7 @@ if (!is.null(form2)) {
fit$misc$predictors.names)
slot(answer, "predictors") = fit$predictors
if (length(fit$prior.weights))
- slot(answer, "prior.weights") = fit$prior.weights
+ slot(answer, "prior.weights") = as.matrix(fit$prior.weights)
answer
@@ -211,17 +212,17 @@ attr(vglm, "smart") <- TRUE
shadowvglm <-
function(formula,
- family, data=list(),
- weights=NULL, subset=NULL, na.action=na.fail,
- etastart=NULL, mustart=NULL, coefstart=NULL,
+ family, data = list(),
+ weights = NULL, subset = NULL, na.action=na.fail,
+ etastart = NULL, mustart = NULL, coefstart = NULL,
control=vglm.control(...),
- offset=NULL,
- method="vglm.fit",
- model=FALSE, x.arg=TRUE, y.arg=TRUE,
- contrasts=NULL,
- constraints=NULL,
- extra=list(),
- qr.arg=FALSE, ...)
+ offset = NULL,
+ method = "vglm.fit",
+ model = FALSE, x.arg = TRUE, y.arg = TRUE,
+ contrasts = NULL,
+ constraints = NULL,
+ extra = list(),
+ qr.arg = FALSE, ...)
{
dataname <- as.character(substitute(data)) # "list" if no data=
function.name <- "shadowvglm"
diff --git a/R/vglm.control.q b/R/vglm.control.q
index afe87e8..87b9832 100644
--- a/R/vglm.control.q
+++ b/R/vglm.control.q
@@ -14,7 +14,7 @@
-vlm.control <- function(save.weight = TRUE, tol=1e-7, method="qr",
+vlm.control <- function(save.weight = TRUE, tol = 1e-7, method="qr",
checkwz = TRUE, wzepsilon = .Machine$double.eps^0.75,
...) {
if (tol <= 0) {
@@ -22,26 +22,26 @@ vlm.control <- function(save.weight = TRUE, tol=1e-7, method="qr",
tol <- 1e-7
}
if (!is.logical(checkwz) || length(checkwz) != 1)
- stop("bad input for 'checkwz'")
- if (!is.Numeric(wzepsilon, allow=1, positive = TRUE))
- stop("bad input for 'wzepsilon'")
+ stop("bad input for argument 'checkwz'")
+ if (!is.Numeric(wzepsilon, allow = 1, positive = TRUE))
+ stop("bad input for argument 'wzepsilon'")
list(save.weight=save.weight, tol=tol, method=method,
- checkwz=checkwz,
+ checkwz = checkwz,
wzepsilon = wzepsilon)
}
vglm.control <- function(checkwz = TRUE,
criterion = names(.min.criterion.VGAM),
- epsilon=1e-7,
+ epsilon = 1e-7,
half.stepsizing = TRUE,
- maxit=30,
- stepsize=1,
+ maxit = 30,
+ stepsize = 1,
save.weight = FALSE,
trace = FALSE,
wzepsilon = .Machine$double.eps^0.75,
- xij=NULL,
+ xij = NULL,
...)
{
@@ -49,48 +49,50 @@ vglm.control <- function(checkwz = TRUE,
if (mode(criterion) != "character" && mode(criterion) != "name")
criterion <- as.character(substitute(criterion))
- criterion <- pmatch(criterion[1], names(.min.criterion.VGAM), nomatch=1)
+ criterion <- pmatch(criterion[1], names(.min.criterion.VGAM), nomatch = 1)
criterion <- names(.min.criterion.VGAM)[criterion]
if (!is.logical(checkwz) || length(checkwz) != 1)
- stop("bad input for 'checkwz'")
- if (!is.Numeric(wzepsilon, allow=1, positive = TRUE))
- stop("bad input for 'wzepsilon'")
+ stop("bad input for argument 'checkwz'")
+ if (!is.Numeric(wzepsilon, allow = 1, positive = TRUE))
+ stop("bad input for argument 'wzepsilon'")
convergence <- expression({
switch(criterion,
- coefficients = if (iter == 1) iter<maxit else (iter<maxit &&
- max(abs(new.crit - old.crit)/(abs(old.crit)+epsilon)) > epsilon),
- abs(old.crit-new.crit)/(abs(old.crit)+epsilon) > epsilon && iter<maxit)
+ coefficients = if (iter == 1) iter < maxit else
+ (iter < maxit &&
+ max(abs(new.crit - old.crit) / (abs(old.crit) + epsilon)) > epsilon),
+ abs(old.crit-new.crit) / (abs(old.crit)+epsilon) > epsilon &&
+ iter < maxit)
})
- if (!is.Numeric(epsilon, allow=1, posit = TRUE)) {
- warning("bad input for 'epsilon'; using 0.00001 instead")
+ if (!is.Numeric(epsilon, allow = 1, posit = TRUE)) {
+ warning("bad input for argument 'epsilon'; using 0.00001 instead")
epsilon <- 0.00001
}
- if (!is.Numeric(maxit, allow=1, posit = TRUE, integ = TRUE)) {
- warning("bad input for 'maxit'; using 20 instead")
- maxit <- 20
+ if (!is.Numeric(maxit, allow = 1, posit = TRUE, integ = TRUE)) {
+ warning("bad input for argument 'maxit'; using 30 instead")
+ maxit <- 30
}
- if (!is.Numeric(stepsize, allow=1, posit = TRUE)) {
- warning("bad input for 'stepsize'; using 1 instead")
+ if (!is.Numeric(stepsize, allow = 1, posit = TRUE)) {
+ warning("bad input for argument 'stepsize'; using 1 instead")
stepsize <- 1
}
- list(checkwz=checkwz,
- convergence=convergence,
- criterion=criterion,
- epsilon=epsilon,
- half.stepsizing=as.logical(half.stepsizing)[1],
- maxit=maxit,
+ list(checkwz = checkwz,
+ convergence = convergence,
+ criterion = criterion,
+ epsilon = epsilon,
+ half.stepsizing = as.logical(half.stepsizing)[1],
+ maxit = maxit,
min.criterion = .min.criterion.VGAM,
- save.weight=as.logical(save.weight)[1],
- stepsize=stepsize,
- trace=as.logical(trace)[1],
+ save.weight = as.logical(save.weight)[1],
+ stepsize = stepsize,
+ trace = as.logical(trace)[1],
wzepsilon = wzepsilon,
xij = if (is(xij, "formula")) list(xij) else xij)
}
diff --git a/R/vglm.fit.q b/R/vglm.fit.q
index 697d601..c8f2b8b 100644
--- a/R/vglm.fit.q
+++ b/R/vglm.fit.q
@@ -5,19 +5,19 @@
vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
- Xm2=NULL, Ym2=NULL,
- etastart=NULL, mustart=NULL, coefstart=NULL,
- offset=0, family,
+ Xm2 = NULL, Ym2 = NULL,
+ etastart = NULL, mustart = NULL, coefstart = NULL,
+ offset = 0, family,
control=vglm.control(),
- criterion="coefficients",
- qr.arg=FALSE,
- constraints=NULL,
- extra=NULL,
- Terms=Terms, function.name="vglm", ...)
+ criterion = "coefficients",
+ qr.arg = FALSE,
+ constraints = NULL,
+ extra = NULL,
+ Terms=Terms, function.name = "vglm", ...)
{
specialCM = NULL
post = list()
- check.rank <- TRUE # Set this to false for family functions vppr() etc.
+ check.rank <- TRUE # Set this to false for family functions vppr() etc.
nonparametric <- FALSE
epsilon <- control$epsilon
maxit <- control$maxit
@@ -47,29 +47,29 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
old.crit <- new.crit
new.crit <-
switch(criterion,
- coefficients=new.coeffs,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ coefficients = new.coeffs,
+ tfun(mu = mu, y = y, w = w, res = FALSE, eta = eta, extra))
- if (trace && orig.stepsize==1) {
+ if (trace && orig.stepsize == 1) {
cat("VGLM linear loop ", iter, ": ", criterion, "= ")
- uuuu =
+ UUUU =
switch(criterion,
- coefficients=format(new.crit, dig=round(2-log10(epsilon))),
+ coefficients = format(new.crit, dig = round(2-log10(epsilon))),
format(round(new.crit, 4)))
switch(criterion,
- coefficients={if(length(new.crit) > 2) cat("\n");
- cat(uuuu, fill=TRUE, sep=", ")},
- cat(uuuu, fill=TRUE, sep=", "))
+ coefficients = {if(length(new.crit) > 2) cat("\n");
+ cat(UUUU, fill = TRUE, sep = ", ")},
+ cat(UUUU, fill = TRUE, sep = ", "))
}
{
- take.half.step=(control$half.stepsizing &&
+ take.half.step = (control$half.stepsizing &&
length(old.coeffs)) &&
- ((orig.stepsize!=1) ||
- (criterion!="coefficients" &&
+ ((orig.stepsize != 1) ||
+ (criterion != "coefficients" &&
(if(minimize.criterion) new.crit > old.crit else
new.crit < old.crit)))
if (!is.logical(take.half.step))
@@ -95,7 +95,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
fv <- X_vlm_save %*% new.coeffs
if (M > 1)
- fv <- matrix(fv, n, M, byrow=TRUE)
+ fv <- matrix(fv, n, M, byrow = TRUE)
eta <- fv + offset
mu <- slot(family, "inverse")(eta, extra)
@@ -106,10 +106,10 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
new.crit <-
switch(criterion,
- coefficients=new.coeffs,
- tfun(mu=mu,y=y,w=w,res=FALSE,eta=eta,extra))
+ coefficients = new.coeffs,
+ tfun(mu = mu,y = y,w = w,res = FALSE,eta = eta,extra))
- if ((criterion=="coefficients") ||
+ if ((criterion == "coefficients") ||
( minimize.criterion && new.crit < old.crit) ||
(!minimize.criterion && new.crit > old.crit))
break
@@ -126,16 +126,16 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
cat("VGLM linear loop ",
iter, ": ", criterion, "= ")
- uuuu = switch(criterion,
+ UUUU = switch(criterion,
coefficients = format(new.crit,
- dig=round(2-log10(epsilon))),
+ dig = round(2-log10(epsilon))),
format(round(new.crit, 4)))
switch(criterion,
- coefficients={
+ coefficients = {
if(length(new.crit) > 2) cat("\n");
- cat(uuuu, fill=TRUE, sep=", ")},
- cat(uuuu, fill=TRUE, sep=", "))
+ cat(UUUU, fill = TRUE, sep = ", ")},
+ cat(UUUU, fill = TRUE, sep = ", "))
}
one.more <- eval(control$convergence)
@@ -152,11 +152,11 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
deriv.mu <- eval(slot(family, "deriv"))
wz <- eval(slot(family, "weight"))
if (control$checkwz)
- wz= checkwz(wz, M=M, trace=trace, wzeps=control$wzepsilon)
+ wz = checkwz(wz, M = M, trace = trace, wzeps = control$wzepsilon)
- U <- vchol(wz, M=M, n=n, silent=!trace)
- tvfor <- vforsub(U, as.matrix(deriv.mu), M=M, n=n)
- z <- eta + vbacksub(U, tvfor, M=M, n=n) - offset
+ U <- vchol(wz, M = M, n = n, silent=!trace)
+ tvfor <- vforsub(U, as.matrix(deriv.mu), M = M, n = n)
+ z <- eta + vbacksub(U, tvfor, M = M, n = n) - offset
c.list$z <- z
c.list$U <- U
@@ -229,7 +229,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (length(coefstart)) {
eta <- if (ncol(X_vlm_save)>1) X_vlm_save %*% coefstart +
offset else X_vlm_save * coefstart + offset
- eta <- if (M > 1) matrix(eta, ncol=M, byrow=TRUE) else c(eta)
+ eta <- if (M > 1) matrix(eta, ncol = M, byrow = TRUE) else c(eta)
mu <- slot(family, "inverse")(eta, extra)
}
@@ -240,20 +240,20 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
iter <- 1
new.crit <- switch(criterion,
- coefficients=1,
- tfun(mu=mu, y=y, w=w, res=FALSE, eta=eta, extra))
+ coefficients = 1,
+ tfun(mu = mu, y = y, w = w, res = FALSE, eta = eta, extra))
old.crit <- if (minimize.criterion) 10*new.crit+10 else -10*new.crit-10
deriv.mu <- eval(slot(family, "deriv"))
wz <- eval(slot(family, "weight"))
if (control$checkwz)
- wz = checkwz(wz, M=M, trace=trace, wzeps=control$wzepsilon)
+ wz = checkwz(wz, M = M, trace = trace, wzeps = control$wzepsilon)
- U <- vchol(wz, M=M, n=n, silent=!trace)
- tvfor <- vforsub(U, as.matrix(deriv.mu), M=M, n=n)
- z <- eta + vbacksub(U, tvfor, M=M, n=n) - offset
+ U <- vchol(wz, M = M, n = n, silent=!trace)
+ tvfor <- vforsub(U, as.matrix(deriv.mu), M = M, n = n)
+ z <- eta + vbacksub(U, tvfor, M = M, n = n) - offset
- c.list <- list(z=as.double(z), fit=as.double(t(eta)), one.more=TRUE,
+ c.list <- list(z=as.double(z), fit=as.double(t(eta)), one.more = TRUE,
coeff=as.double(rep(1,ncol(X_vlm_save))), U=as.double(U),
copy_X_vlm=copy_X_vlm,
X_vlm = if (copy_X_vlm) as.double(X_vlm_save) else
@@ -269,9 +269,9 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
- bf.call <- expression(vlm.wfit(xmat=X_vlm_save, z, Blist=NULL, U=U,
- matrix.out=FALSE, is.vlmX=TRUE,
- qr=qr.arg, xij=NULL))
+ bf.call <- expression(vlm.wfit(xmat = X_vlm_save, z, Blist = NULL, U = U,
+ matrix.out = FALSE, is.vlmX = TRUE,
+ qr = qr.arg, xij = NULL))
while(c.list$one.more) {
tfit <- eval(bf.call) # fit$smooth.frame is new
@@ -285,7 +285,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
NULL
}
- if (maxit>1 && iter>=maxit)
+ if (maxit > 1 && iter >= maxit)
warning("convergence not obtained in ", maxit, " iterations")
@@ -297,7 +297,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (length(slot(family, "fini")))
eval(slot(family, "fini"))
- if (M>1)
+ if (M > 1)
tfit$predictors <- matrix(tfit$predictors, n, M)
coefs <- tfit$coefficients
@@ -311,7 +311,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (check.rank && rank < ncol_X_vlm)
stop("vglm only handles full-rank models (currently)")
- R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop=FALSE]
+ R <- tfit$qr$qr[1:ncol_X_vlm, 1:ncol_X_vlm, drop = FALSE]
R[lower.tri(R)] <- 0
attributes(R) <- list(dim=c(ncol_X_vlm, ncol_X_vlm),
dimnames=list(cnames, cnames), rank=rank)
@@ -328,7 +328,7 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
residuals <- z - tfit$predictors
- if (M==1) {
+ if (M == 1) {
tfit$predictors <- as.vector(tfit$predictors)
residuals <- as.vector(residuals)
names(residuals) <- names(tfit$predictors) <- yn
@@ -351,25 +351,25 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
df.residual <- nrow_X_vlm - rank
- fit <- list(assign=asgn,
- coefficients=coefs,
- constraints=Blist,
- df.residual=df.residual,
- df.total=n*M,
- effects=effects,
- fitted.values=mu,
- offset=offset,
- rank=rank,
- residuals=residuals,
- R=R,
- terms=Terms) # terms: This used to be done in vglm()
+ fit <- list(assign = asgn,
+ coefficients = coefs,
+ constraints = Blist,
+ df.residual = df.residual,
+ df.total = n*M,
+ effects = effects,
+ fitted.values = mu,
+ offset = offset,
+ rank = rank,
+ residuals = residuals,
+ R = R,
+ terms = Terms) # terms: This used to be done in vglm()
if (qr.arg) {
fit$qr <- tfit$qr
dimnames(fit$qr$qr) <- dnrow_X_vlm
}
- if (M==1) {
+ if (M == 1) {
wz <- as.vector(wz) # Convert wz into a vector
} # else
fit$weights <- if (save.weight) wz else NULL
@@ -400,8 +400,8 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (ii != criterion &&
any(slotNames(family) == ii) &&
length(body(slot(family, ii)))) {
- fit[[ii]] <- crit.list[[ii]] <- (slot(family, ii))(mu=mu,
- y=y, w=w, res=FALSE, eta=eta, extra)
+ fit[[ii]] <- crit.list[[ii]] <- (slot(family, ii))(mu = mu,
+ y = y, w = w, res = FALSE, eta = eta, extra)
}
}
@@ -413,18 +413,18 @@ vglm.fit <- function(x, y, w=rep(1, length(x[, 1])),
if (length(slot(family, "last")))
eval(slot(family, "last"))
- structure(c(fit, list(predictors=tfit$predictors,
- contrasts=attr(x, "contrasts"),
- control=control,
- crit.list=crit.list,
- extra=extra,
- family=family,
- iter=iter,
- misc=misc,
- post=post,
- rss=tfit$rss,
- x=x,
- y=y)),
- vclass=slot(family, "vfamily"))
+ structure(c(fit, list(predictors = tfit$predictors,
+ contrasts = attr(x, "contrasts"),
+ control = control,
+ crit.list = crit.list,
+ extra = extra,
+ family = family,
+ iter = iter,
+ misc = misc,
+ post = post,
+ rss = tfit$rss,
+ x = x,
+ y = y)),
+ vclass = slot(family, "vfamily"))
}
diff --git a/R/vlm.R b/R/vlm.R
index fdca4f3..c9fbd6d 100644
--- a/R/vlm.R
+++ b/R/vlm.R
@@ -163,7 +163,7 @@ vlm <- function(formula,
if (!smart) answer at smart.prediction <- list(smart.arg=FALSE)
- slot(answer, "prior.weights") = prior.weights
+ slot(answer, "prior.weights") = as.matrix(prior.weights)
if (length(attr(x, "contrasts")))
slot(answer, "contrasts") = attr(x, "contrasts")
diff --git a/data/alclevels.R b/data/alclevels.R
deleted file mode 100644
index 2ef9cf5..0000000
--- a/data/alclevels.R
+++ /dev/null
@@ -1,22 +0,0 @@
-alclevels <-
-structure(list(Monday = c(121L, 97L, 60L, 55L, 25L, 19L, 13L,
-20L, 5L, 7L, 7L, 8L, 10L, 9L, 22L, 39L, 28L, 46L, 53L, 74L, 74L,
-84L, 90L, 110L), Tuesday = c(98L, 92L, 69L, 60L, 38L, 10L, 9L,
-6L, 8L, 8L, 13L, 10L, 13L, 26L, 41L, 48L, 48L, 59L, 100L, 119L,
-135L, 154L, 143L, 169L), Wednesday = c(165L, 157L, 107L, 75L,
-48L, 20L, 9L, 9L, 12L, 14L, 20L, 20L, 8L, 32L, 31L, 62L, 71L,
-98L, 117L, 155L, 283L, 326L, 345L, 363L), Thursday = c(324L,
-278L, 229L, 238L, 145L, 56L, 55L, 42L, 29L, 28L, 36L, 32L, 39L,
-37L, 46L, 69L, 85L, 141L, 185L, 289L, 508L, 610L, 765L, 899L),
- Friday = c(827L, 619L, 410L, 401L, 223L, 139L, 70L, 40L,
- 40L, 38L, 38L, 27L, 37L, 27L, 42L, 59L, 55L, 136L, 223L,
- 335L, 591L, 866L, 976L, 1265L), Saturday = c(1379L, 1327L,
- 979L, 693L, 346L, 188L, 155L, 160L, 79L, 44L, 52L, 44L, 73L,
- 41L, 58L, 75L, 96L, 154L, 236L, 337L, 490L, 754L, 1026L,
- 1179L), Sunday = c(1332L, 1356L, 1011L, 718L, 410L, 287L,
- 213L, 200L, 96L, 58L, 69L, 39L, 59L, 45L, 53L, 70L, 95L,
- 130L, 121L, 146L, 166L, 131L, 114L, 159L)), .Names = c("Monday",
-"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-), class = "data.frame", row.names = c("0", "1", "2", "3", "4",
-"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
-"16", "17", "18", "19", "20", "21", "22", "23"))
diff --git a/data/alclevels.rda b/data/alclevels.rda
new file mode 100644
index 0000000..2a0009f
Binary files /dev/null and b/data/alclevels.rda differ
diff --git a/data/alcoff.R b/data/alcoff.R
deleted file mode 100644
index 600d3e1..0000000
--- a/data/alcoff.R
+++ /dev/null
@@ -1,22 +0,0 @@
-alcoff <-
-structure(list(Monday = c(121L, 97L, 60L, 55L, 25L, 19L, 13L,
-20L, 5L, 7L, 7L, 8L, 10L, 9L, 22L, 39L, 28L, 46L, 53L, 74L, 74L,
-84L, 90L, 110L), Tuesday = c(98L, 92L, 69L, 60L, 38L, 10L, 9L,
-6L, 8L, 8L, 13L, 10L, 13L, 26L, 41L, 48L, 48L, 59L, 100L, 119L,
-135L, 154L, 143L, 169L), Wednesday = c(165L, 157L, 107L, 75L,
-48L, 20L, 9L, 9L, 12L, 14L, 20L, 20L, 8L, 32L, 31L, 62L, 71L,
-98L, 117L, 155L, 283L, 326L, 345L, 363L), Thursday = c(324L,
-278L, 229L, 238L, 145L, 56L, 55L, 42L, 29L, 28L, 36L, 32L, 39L,
-37L, 46L, 69L, 85L, 141L, 185L, 289L, 508L, 610L, 765L, 899L),
- Friday = c(827L, 619L, 410L, 401L, 223L, 139L, 70L, 40L,
- 40L, 38L, 38L, 27L, 37L, 27L, 42L, 59L, 55L, 136L, 223L,
- 335L, 591L, 866L, 976L, 1265L), Saturday = c(1379L, 1327L,
- 979L, 693L, 346L, 188L, 155L, 160L, 79L, 44L, 52L, 44L, 73L,
- 41L, 58L, 75L, 96L, 154L, 236L, 337L, 490L, 754L, 1026L,
- 1179L), Sunday = c(1332L, 1356L, 1011L, 718L, 410L, 287L,
- 213L, 200L, 96L, 58L, 69L, 39L, 59L, 45L, 53L, 70L, 95L,
- 130L, 121L, 146L, 166L, 131L, 114L, 159L)), .Names = c("Monday",
-"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-), class = "data.frame", row.names = c("0", "1", "2", "3", "4",
-"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
-"16", "17", "18", "19", "20", "21", "22", "23"))
diff --git a/data/alcoff.rda b/data/alcoff.rda
new file mode 100644
index 0000000..291d0e2
Binary files /dev/null and b/data/alcoff.rda differ
diff --git a/data/auuc.R b/data/auuc.R
deleted file mode 100644
index e3d9beb..0000000
--- a/data/auuc.R
+++ /dev/null
@@ -1,6 +0,0 @@
-"auuc" <-
-structure(list(Commerce = c(446, 937, 311, 49), Arts = c(895,
-1834, 805, 157), SciEng = c(496, 994, 430, 62), Law = c(170,
-246, 95, 15), Medicine = c(184, 198, 48, 9)), .Names = c("Commerce",
-"Arts", "SciEng", "Law", "Medicine"), row.names = c("SES1", "SES2",
-"SES3", "SES4"), class = "data.frame")
diff --git a/data/auuc.rda b/data/auuc.rda
new file mode 100644
index 0000000..7761c87
Binary files /dev/null and b/data/auuc.rda differ
diff --git a/data/azprocedure.R b/data/azprocedure.R
deleted file mode 100644
index 9b6f457..0000000
--- a/data/azprocedure.R
+++ /dev/null
@@ -1,2289 +0,0 @@
-azprocedure <-
-structure(list(hospital = c(3.60000014305115, 6.7000002861023,
-2.5, 6.5, 3.70000004768372, 4.30000019073486, 6.5, 5.19999980926514,
-3.70000004768372, 4.30000019073486, 3.60000014305115, 5.19999980926514,
-6.80000019073486, 2.40000009536743, 3.09999990463257, 2.5, 3.09999990463257,
-3.70000004768372, 6, 6.80000019073486, 6.7000002861023, 5.19999980926514,
-2.5, 2.5, 5.19999980926514, 3.60000014305115, 3.70000004768372,
-2.5, 6.7000002861023, 2.5, 4.30000019073486, 3.60000014305115,
-6.7000002861023, 6.80000019073486, 3.09999990463257, 6, 3.09999990463257,
-4.30000019073486, 6, 6.5, 6, 2.5, 4.30000019073486, 6.5, 6, 3.60000014305115,
-2.5, 3.19999980926514, 2.70000004768372, 3.60000014305115, 6.80000019073486,
-3.19999980926514, 3.19999980926514, 4.30000019073486, 4.30000019073486,
-0.100000001490116, 2.5, 2.5, 2.40000009536743, 9.10000038146973,
-6.80000019073486, 3.70000004768372, 5.19999980926514, 3.70000004768372,
-2.5, 6.5, 5.19999980926514, 5.19999980926514, 2.5, 6.5, 4.30000019073486,
-2.5, 3.09999990463257, 6.7000002861023, 3.09999990463257, 3.19999980926514,
-4.30000019073486, 6, 6.5, 2.5, 5.19999980926514, 5.19999980926514,
-6.5, 2.5, 6.7000002861023, 2.5, 5.19999980926514, 3.60000014305115,
-3.09999990463257, 3.60000014305115, 2.70000004768372, 2.40000009536743,
-6.5, 3.60000014305115, 9.10000038146973, 4.30000019073486, 6,
-3.60000014305115, 3.60000014305115, 2.5, 3.19999980926514, 9.10000038146973,
-3.60000014305115, 6.5, 4.30000019073486, 3.09999990463257, 3.19999980926514,
-2.5, 2.5, 2.5, 3.19999980926514, 6.5, 6.5, 5.19999980926514,
-3.09999990463257, 3.19999980926514, 3.09999990463257, 6.7000002861023,
-6.7000002861023, 2.5, 6.5, 2.5, 2.5, 5.19999980926514, 2.70000004768372,
-3.09999990463257, 6.5, 5.19999980926514, 2.5, 2.5, 6.5, 2.5,
-2.5, 3.09999990463257, 2.5, 5.19999980926514, 6.7000002861023,
-4.30000019073486, 3.09999990463257, 6, 2.40000009536743, 2.5,
-4.30000019073486, 3.09999990463257, 5.19999980926514, 2.5, 6.5,
-3.09999990463257, 2.5, 2.5, 9.10000038146973, 6, 6.7000002861023,
-6.5, 6, 2.5, 5.19999980926514, 2.5, 2.40000009536743, 2.5, 9.10000038146973,
-5.19999980926514, 5.19999980926514, 9.10000038146973, 2.5, 5.19999980926514,
-6.5, 3.09999990463257, 6.5, 3.60000014305115, 5.19999980926514,
-3.09999990463257, 6, 2.5, 2.5, 6.5, 2.5, 2.5, 9.10000038146973,
-5.19999980926514, 3.70000004768372, 6.7000002861023, 6.5, 3.60000014305115,
-5.19999980926514, 3.09999990463257, 6.7000002861023, 4.30000019073486,
-3.09999990463257, 6.5, 3.5, 5.19999980926514, 2.5, 5.19999980926514,
-2.5, 3.09999990463257, 3.09999990463257, 6.5, 6, 2.5, 6.7000002861023,
-2.5, 3.60000014305115, 3.70000004768372, 2.40000009536743, 6.5,
-2.70000004768372, 6.7000002861023, 6, 5.19999980926514, 4.09999990463257,
-3.09999990463257, 6.5, 5.19999980926514, 3.70000004768372, 4.30000019073486,
-6.7000002861023, 5.19999980926514, 4.30000019073486, 2.5, 3.60000014305115,
-2.5, 6.7000002861023, 5.19999980926514, 2.40000009536743, 4.09999990463257,
-3.09999990463257, 2.5, 5.19999980926514, 3.5, 2.5, 6.7000002861023,
-6, 6.5, 5.19999980926514, 5.19999980926514, 5.19999980926514,
-6.7000002861023, 2.5, 6.5, 5.19999980926514, 2.40000009536743,
-4.30000019073486, 4.30000019073486, 3.60000014305115, 2.40000009536743,
-5.19999980926514, 3.09999990463257, 3.09999990463257, 5.19999980926514,
-2.5, 2.5, 3.60000014305115, 3.19999980926514, 6, 2.5, 3.19999980926514,
-3.09999990463257, 3.70000004768372, 6.7000002861023, 2.5, 3.70000004768372,
-6.7000002861023, 3.09999990463257, 3.70000004768372, 3.60000014305115,
-6.7000002861023, 6.5, 2.70000004768372, 5.19999980926514, 6.80000019073486,
-6, 6.5, 6.7000002861023, 6, 6.80000019073486, 3.70000004768372,
-2.5, 3.60000014305115, 5.19999980926514, 3.60000014305115, 3.09999990463257,
-6.5, 6, 4.30000019073486, 6, 6.7000002861023, 3.60000014305115,
-2.70000004768372, 3.70000004768372, 2.5, 2.5, 2.5, 5.19999980926514,
-3.09999990463257, 2.70000004768372, 4.09999990463257, 6.5, 6.7000002861023,
-6.80000019073486, 3.09999990463257, 3.60000014305115, 2.40000009536743,
-4.30000019073486, 6.5, 6.80000019073486, 2.5, 4.30000019073486,
-3.60000014305115, 3.60000014305115, 2.5, 2.5, 2.5, 6.5, 6, 5.19999980926514,
-5.19999980926514, 3.09999990463257, 2.5, 6.5, 3.09999990463257,
-3.09999990463257, 5.19999980926514, 3.70000004768372, 6.5, 5.19999980926514,
-3.5, 2.5, 6.5, 3.19999980926514, 9.10000038146973, 3.60000014305115,
-5.19999980926514, 6.5, 3.70000004768372, 6.5, 6.7000002861023,
-3.5, 6.5, 3.5, 6.5, 3.09999990463257, 2.5, 2.5, 3.60000014305115,
-3.70000004768372, 2.70000004768372, 3.5, 2.5, 2.5, 6, 2.5, 6.7000002861023,
-2.40000009536743, 4.30000019073486, 2.40000009536743, 6, 2.70000004768372,
-3.60000014305115, 6, 6.7000002861023, 2.5, 3.60000014305115,
-3.09999990463257, 2.5, 6.80000019073486, 4.09999990463257, 5.19999980926514,
-3.60000014305115, 6.80000019073486, 2.5, 5.19999980926514, 2.40000009536743,
-2.5, 6, 5.19999980926514, 5.19999980926514, 3.09999990463257,
-3.60000014305115, 2.5, 2.40000009536743, 5.19999980926514, 2.5,
-5.19999980926514, 5.19999980926514, 3.09999990463257, 2.5, 4.30000019073486,
-2.5, 5.19999980926514, 3.5, 2.5, 3.09999990463257, 3.09999990463257,
-4.09999990463257, 5.19999980926514, 2.5, 2.70000004768372, 3.70000004768372,
-9.10000038146973, 5.19999980926514, 3.60000014305115, 2.5, 2.5,
-9.10000038146973, 2.70000004768372, 2.5, 3.09999990463257, 5.19999980926514,
-3.19999980926514, 6, 2.70000004768372, 3.09999990463257, 2.5,
-6, 3.09999990463257, 6.5, 2.5, 3.09999990463257, 3.70000004768372,
-6.5, 3.09999990463257, 5.19999980926514, 9.10000038146973, 6,
-5.19999980926514, 2.5, 3.70000004768372, 3.19999980926514, 3.70000004768372,
-4.09999990463257, 2.5, 2.5, 2.5, 3.60000014305115, 2.5, 5.19999980926514,
-5.19999980926514, 2.5, 5.19999980926514, 5.19999980926514, 2.5,
-2.40000009536743, 6, 2.5, 6, 2.5, 2.5, 3.09999990463257, 2.5,
-3.60000014305115, 6.5, 3.70000004768372, 3.09999990463257, 2.40000009536743,
-2.5, 5.19999980926514, 6.5, 2.5, 3.70000004768372, 4.30000019073486,
-2.5, 9.10000038146973, 2.40000009536743, 6.5, 6, 2.5, 9.10000038146973,
-2.5, 2.5, 3.09999990463257, 2.5, 5.19999980926514, 2.5, 2.5,
-2.5, 6, 3.09999990463257, 2.70000004768372, 3.09999990463257,
-2.5, 2.40000009536743, 2.40000009536743, 5.19999980926514, 9.10000038146973,
-5.19999980926514, 6.7000002861023, 2.5, 3.09999990463257, 2.5,
-3.5, 3.09999990463257, 9.10000038146973, 3.09999990463257, 2.5,
-9.10000038146973, 2.5, 3.09999990463257, 6.7000002861023, 3.09999990463257,
-6, 2.5, 2.5, 2.5, 6, 2.40000009536743, 6.5, 2.70000004768372,
-5.19999980926514, 6.80000019073486, 4.30000019073486, 4.30000019073486,
-6.5, 3.09999990463257, 3.60000014305115, 3.60000014305115, 5.19999980926514,
-6.7000002861023, 2.5, 2.5, 6.7000002861023, 9.10000038146973,
-5.19999980926514, 5.19999980926514, 2.70000004768372, 2.5, 3.09999990463257,
-6.80000019073486, 2.5, 6.5, 6.7000002861023, 3.09999990463257,
-4.30000019073486, 3.09999990463257, 3.09999990463257, 2.70000004768372,
-2.5, 5.19999980926514, 6.7000002861023, 2.5, 2.5, 3.60000014305115,
-3.09999990463257, 2.5, 5.19999980926514, 2.5, 3.09999990463257,
-2.5, 3.09999990463257, 2.5, 2.5, 2.70000004768372, 3.09999990463257,
-5.19999980926514, 2.5, 2.5, 6.5, 6.80000019073486, 2.40000009536743,
-2.5, 5.19999980926514, 2.5, 9.10000038146973, 5.19999980926514,
-2.5, 2.40000009536743, 5.19999980926514, 3.09999990463257, 3.60000014305115,
-2.5, 2.5, 2.5, 3.09999990463257, 6.5, 6.7000002861023, 2.40000009536743,
-2.70000004768372, 6.5, 4.30000019073486, 9.10000038146973, 3.09999990463257,
-4.30000019073486, 3.09999990463257, 3.09999990463257, 3.60000014305115,
-3.09999990463257, 6, 2.5, 2.5, 2.5, 2.40000009536743, 3.09999990463257,
-5.19999980926514, 6.7000002861023, 5.19999980926514, 2.70000004768372,
-3.19999980926514, 4.30000019073486, 3.09999990463257, 2.5, 6.5,
-5.19999980926514, 3.09999990463257, 2.5, 3.09999990463257, 3.60000014305115,
-5.19999980926514, 4.09999990463257, 2.5, 5.19999980926514, 6,
-5.19999980926514, 5.19999980926514, 3.09999990463257, 6.5, 6.5,
-2.5, 5.19999980926514, 6.5, 3.19999980926514, 2.5, 6.5, 3.70000004768372,
-6.5, 9.10000038146973, 3.60000014305115, 3.09999990463257, 3.70000004768372,
-3.09999990463257, 2.5, 2.5, 2.5, 6.7000002861023, 5.19999980926514,
-6, 5.19999980926514, 5.19999980926514, 3.09999990463257, 2.5,
-2.5, 2.5, 6, 3.09999990463257, 2.5, 2.5, 3.09999990463257, 4.30000019073486,
-6, 6, 6.80000019073486, 3.60000014305115, 3.5, 2.5, 2.70000004768372,
-3.09999990463257, 6.5, 6, 3.09999990463257, 3.60000014305115,
-6, 5.19999980926514, 5.19999980926514, 2.40000009536743, 6.5,
-2.5, 2.5, 2.5, 5.19999980926514, 2.5, 6.7000002861023, 4.09999990463257,
-6.5, 2.5, 5.19999980926514, 6.5, 6.5, 2.5, 6.5, 5.19999980926514,
-3.09999990463257, 6.5, 2.70000004768372, 9.10000038146973, 2.5,
-2.5, 3.70000004768372, 2.5, 2.5, 3.70000004768372, 6.7000002861023,
-5.19999980926514, 2.40000009536743, 3.09999990463257, 2.5, 3.09999990463257,
-3.09999990463257, 5.19999980926514, 6, 6.5, 5.19999980926514,
-6.7000002861023, 2.5, 5.19999980926514, 6.7000002861023, 2.5,
-5.19999980926514, 5.19999980926514, 4.30000019073486, 3.09999990463257,
-5.19999980926514, 2.40000009536743, 2.5, 2.5, 3.60000014305115,
-6.7000002861023, 6, 3.09999990463257, 4.30000019073486, 2.5,
-6.7000002861023, 2.5, 4.09999990463257, 2.5, 3.09999990463257,
-4.30000019073486, 6.5, 2.5, 3.19999980926514, 6.5, 3.09999990463257,
-3.60000014305115, 3.19999980926514, 3.70000004768372, 6, 6.5,
-3.09999990463257, 6.5, 6.80000019073486, 2.70000004768372, 5.19999980926514,
-2.5, 5.19999980926514, 6, 5.19999980926514, 3.60000014305115,
-2.70000004768372, 5.19999980926514, 3.09999990463257, 3.60000014305115,
-9.10000038146973, 3.09999990463257, 6, 3.09999990463257, 6.5,
-6, 2.5, 2.5, 2.5, 5.19999980926514, 2.5, 9.10000038146973, 5.19999980926514,
-2.40000009536743, 5.19999980926514, 5.19999980926514, 5.19999980926514,
-5.19999980926514, 5.19999980926514, 6.5, 5.19999980926514, 2.5,
-5.19999980926514, 2.5, 5.19999980926514, 2.5, 6.5, 6.5, 6.7000002861023,
-2.40000009536743, 3.09999990463257, 6.5, 2.5, 5.19999980926514,
-3.60000014305115, 4.30000019073486, 2.70000004768372, 2.40000009536743,
-6.5, 6, 5.19999980926514, 6.80000019073486, 6, 9.10000038146973,
-4.30000019073486, 6, 6, 3.09999990463257, 2.5, 4.30000019073486,
-2.5, 5.19999980926514, 5.19999980926514, 3.09999990463257, 3.70000004768372,
-6.5, 3.60000014305115, 2.5, 2.5, 2.70000004768372, 5.19999980926514,
-2.5, 2.5, 6.5, 3.19999980926514, 2.5, 9.10000038146973, 6, 6.7000002861023,
-5.19999980926514, 2.5, 2.5, 6, 9.10000038146973, 2.5, 5.19999980926514,
-5.19999980926514, 2.5, 5.19999980926514, 5.19999980926514, 6.5,
-2.5, 4.09999990463257, 2.5, 6.7000002861023, 4.09999990463257,
-2.5, 2.5, 6.5, 5.19999980926514, 9.10000038146973, 5.19999980926514,
-5.19999980926514, 2.5, 6, 5.19999980926514, 6.7000002861023,
-2.5, 3.70000004768372, 5.19999980926514, 3.09999990463257, 4.09999990463257,
-6.7000002861023, 2.70000004768372, 3.09999990463257, 6.5, 4.30000019073486,
-6.7000002861023, 9.10000038146973, 6, 2.5, 3.09999990463257,
-3.19999980926514, 6.7000002861023, 2.5, 3.09999990463257, 2.5,
-3.09999990463257, 2.40000009536743, 3.09999990463257, 3.09999990463257,
-3.70000004768372, 9.10000038146973, 6.5, 3.60000014305115, 2.5,
-5.19999980926514, 2.5, 6, 3.60000014305115, 3.09999990463257,
-4.09999990463257, 4.09999990463257, 6.5, 2.40000009536743, 9.10000038146973,
-3.09999990463257, 5.19999980926514, 6, 2.70000004768372, 6.7000002861023,
-4.30000019073486, 3.5, 9.10000038146973, 5.19999980926514, 6.80000019073486,
-6.5, 5.19999980926514, 5.19999980926514, 3.19999980926514, 5.19999980926514,
-2.5, 6, 5.19999980926514, 2.70000004768372, 3.09999990463257,
-5.19999980926514, 5.19999980926514, 5.19999980926514, 2.5, 2.5,
-6.80000019073486, 6, 2.40000009536743, 2.70000004768372, 9.10000038146973,
-6.80000019073486, 6.5, 5.19999980926514, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 4.30000019073486, 3.70000004768372, 2.5, 2.5,
-6, 6.5, 3.09999990463257, 5.19999980926514, 6, 9.10000038146973,
-6, 5.19999980926514, 4.30000019073486, 9.10000038146973, 2.5,
-3.09999990463257, 6.7000002861023, 6, 5.19999980926514, 3.60000014305115,
-2.5, 3.70000004768372, 3.09999990463257, 6.5, 4.09999990463257,
-6.7000002861023, 2.5, 2.70000004768372, 5.19999980926514, 2.5,
-5.19999980926514, 2.40000009536743, 4.09999990463257, 2.5, 3.5,
-5.19999980926514, 5.19999980926514, 3.70000004768372, 9.10000038146973,
-6.5, 3.5, 3.09999990463257, 6, 5.19999980926514, 3.09999990463257,
-4.09999990463257, 2.5, 5.19999980926514, 5.19999980926514, 5.19999980926514,
-3.09999990463257, 5.19999980926514, 4.30000019073486, 6.80000019073486,
-3.09999990463257, 2.5, 5.19999980926514, 2.5, 3.70000004768372,
-6, 5.19999980926514, 5.19999980926514, 2.5, 2.5, 6.80000019073486,
-5.19999980926514, 3.09999990463257, 5.19999980926514, 4.09999990463257,
-3.60000014305115, 6, 3.09999990463257, 2.5, 3.09999990463257,
-3.09999990463257, 2.5, 6, 5.19999980926514, 4.30000019073486,
-3.09999990463257, 3.09999990463257, 5.19999980926514, 2.5, 6.80000019073486,
-2.5, 5.19999980926514, 2.5, 3.09999990463257, 6.7000002861023,
-3.60000014305115, 2.5, 6.5, 3.70000004768372, 3.09999990463257,
-5.19999980926514, 4.09999990463257, 6, 6, 3.70000004768372, 6,
-2.70000004768372, 2.70000004768372, 3.19999980926514, 6, 2.5,
-5.19999980926514, 6.5, 6.5, 3.19999980926514, 3.09999990463257,
-6, 2.70000004768372, 6, 6, 3.60000014305115, 2.5, 9.10000038146973,
-2.5, 6.5, 3.60000014305115, 5.19999980926514, 6.5, 2.70000004768372,
-6.7000002861023, 2.5, 6, 3.19999980926514, 0.100000001490116,
-2.70000004768372, 5.19999980926514, 5.19999980926514, 6.7000002861023,
-2.5, 2.5, 3.19999980926514, 5.19999980926514, 3.09999990463257,
-6, 2.5, 2.5, 2.5, 2.5, 6.5, 2.40000009536743, 2.5, 6.5, 6.5,
-2.5, 6.5, 3.09999990463257, 4.09999990463257, 5.19999980926514,
-6.5, 2.5, 6.5, 5.19999980926514, 6, 6.5, 2.5, 3.70000004768372,
-3.09999990463257, 2.5, 2.5, 6.80000019073486, 3.09999990463257,
-2.5, 2.40000009536743, 5.19999980926514, 6.7000002861023, 6.7000002861023,
-5.19999980926514, 2.5, 5.19999980926514, 6.5, 3.09999990463257,
-3.09999990463257, 6.5, 5.19999980926514, 4.30000019073486, 6.80000019073486,
-4.30000019073486, 2.5, 6, 2.5, 4.30000019073486, 6.5, 2.70000004768372,
-2.5, 5.19999980926514, 6.7000002861023, 2.5, 3.09999990463257,
-3.09999990463257, 6.5, 5.19999980926514, 3.70000004768372, 6.7000002861023,
-5.19999980926514, 3.09999990463257, 2.70000004768372, 6.5, 9.10000038146973,
-6, 6.5, 3.70000004768372, 6.80000019073486, 4.30000019073486,
-3.09999990463257, 5.19999980926514, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 3.09999990463257, 6.7000002861023, 6, 3.60000014305115,
-2.70000004768372, 3.70000004768372, 6, 3.60000014305115, 5.19999980926514,
-5.19999980926514, 6.5, 3.60000014305115, 3.09999990463257, 3.19999980926514,
-9.10000038146973, 6.5, 6.5, 6, 2.5, 6.80000019073486, 2.40000009536743,
-6, 9.10000038146973, 6.5, 6.7000002861023, 2.5, 6.7000002861023,
-6.5, 3.60000014305115, 3.70000004768372, 6.5, 6.5, 4.30000019073486,
-4.09999990463257, 2.5, 3.09999990463257, 2.70000004768372, 6.5,
-3.60000014305115, 3.5, 6.5, 2.40000009536743, 6.5, 5.19999980926514,
-5.19999980926514, 4.30000019073486, 2.40000009536743, 6, 3.19999980926514,
-6.5, 3.09999990463257, 6.7000002861023, 2.5, 6, 2.70000004768372,
-4.30000019073486, 6.5, 3.60000014305115, 2.70000004768372, 6.7000002861023,
-3.09999990463257, 6.7000002861023, 6.80000019073486, 6.5, 2.5,
-3.70000004768372, 3.5, 5.19999980926514, 2.70000004768372, 4.30000019073486,
-3.09999990463257, 3.70000004768372, 2.5, 6, 6, 6.7000002861023,
-6.80000019073486, 5.19999980926514, 3.70000004768372, 5.19999980926514,
-2.5, 5.19999980926514, 5.19999980926514, 2.70000004768372, 9.10000038146973,
-6.5, 3.60000014305115, 3.09999990463257, 3.70000004768372, 3.19999980926514,
-2.5, 2.70000004768372, 6, 5.19999980926514, 6.7000002861023,
-2.40000009536743, 6.7000002861023, 3.09999990463257, 6.5, 2.5,
-6.5, 5.19999980926514, 5.19999980926514, 3.09999990463257, 3.60000014305115,
-2.5, 4.09999990463257, 6.80000019073486, 6.7000002861023, 2.5,
-2.5, 6, 6.80000019073486, 3.19999980926514, 5.19999980926514,
-5.19999980926514, 2.5, 6.5, 9.10000038146973, 2.5, 2.5, 3.09999990463257,
-3.5, 6.5, 5.19999980926514, 4.09999990463257, 6.5, 3.09999990463257,
-2.5, 5.19999980926514, 2.40000009536743, 3.70000004768372, 2.5,
-3.60000014305115, 6.5, 9.10000038146973, 3.19999980926514, 6.80000019073486,
-9.10000038146973, 6, 3.09999990463257, 6.7000002861023, 5.19999980926514,
-9.10000038146973, 2.70000004768372, 2.40000009536743, 2.40000009536743,
-2.5, 5.19999980926514, 6.5, 6.7000002861023, 3.60000014305115,
-6.7000002861023, 3.60000014305115, 4.30000019073486, 6.80000019073486,
-3.70000004768372, 2.5, 3.09999990463257, 2.5, 2.5, 5.19999980926514,
-2.70000004768372, 6, 2.5, 3.60000014305115, 2.40000009536743,
-3.60000014305115, 2.70000004768372, 3.09999990463257, 6.80000019073486,
-6.80000019073486, 6.5, 3.19999980926514, 2.5, 2.5, 2.5, 2.70000004768372,
-2.40000009536743, 3.60000014305115, 2.70000004768372, 4.09999990463257,
-6.5, 3.09999990463257, 3.70000004768372, 6, 5.19999980926514,
-6.5, 5.19999980926514, 3.60000014305115, 3.09999990463257, 6,
-2.5, 3.60000014305115, 6.80000019073486, 6, 2.5, 9.10000038146973,
-6.7000002861023, 3.09999990463257, 2.5, 5.19999980926514, 2.5,
-6, 2.5, 6.80000019073486, 4.09999990463257, 6.5, 6.5, 2.5, 6.7000002861023,
-2.5, 6.7000002861023, 6.7000002861023, 6, 2.5, 2.70000004768372,
-6.5, 3.70000004768372, 3.60000014305115, 6.7000002861023, 4.30000019073486,
-3.60000014305115, 6.5, 3.09999990463257, 3.09999990463257, 2.5,
-3.09999990463257, 3.09999990463257, 3.70000004768372, 6.5, 6,
-3.09999990463257, 9.10000038146973, 3.09999990463257, 2.5, 3.19999980926514,
-2.5, 3.60000014305115, 2.5, 2.40000009536743, 2.70000004768372,
-6.5, 4.30000019073486, 9.10000038146973, 6, 5.19999980926514,
-6.7000002861023, 2.5, 3.19999980926514, 6.5, 2.5, 9.10000038146973,
-2.5, 9.10000038146973, 6.5, 2.40000009536743, 6.7000002861023,
-2.70000004768372, 3.60000014305115, 4.09999990463257, 6.5, 6.5,
-6.7000002861023, 3.60000014305115, 9.10000038146973, 3.19999980926514,
-3.70000004768372, 9.10000038146973, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 3.5, 3.09999990463257, 5.19999980926514, 3.09999990463257,
-2.5, 3.09999990463257, 6.7000002861023, 3.60000014305115, 3.60000014305115,
-2.5, 6.5, 2.5, 6.7000002861023, 6.5, 6.80000019073486, 3.09999990463257,
-6.7000002861023, 5.19999980926514, 2.5, 6.7000002861023, 3.09999990463257,
-6.5, 6, 2.5, 2.5, 2.70000004768372, 9.10000038146973, 9.10000038146973,
-3.09999990463257, 2.40000009536743, 3.09999990463257, 3.09999990463257,
-3.19999980926514, 5.19999980926514, 5.19999980926514, 6.80000019073486,
-6, 3.09999990463257, 6, 6.5, 6.80000019073486, 3.19999980926514,
-6.5, 5.19999980926514, 6.5, 6.5, 5.19999980926514, 3.60000014305115,
-3.19999980926514, 3.60000014305115, 2.5, 3.60000014305115, 5.19999980926514,
-6.7000002861023, 5.19999980926514, 6, 6.7000002861023, 2.40000009536743,
-9.10000038146973, 5.19999980926514, 9.10000038146973, 5.19999980926514,
-2.70000004768372, 3.70000004768372, 6.5, 2.70000004768372, 3.09999990463257,
-3.19999980926514, 3.09999990463257, 3.09999990463257, 6.5, 3.19999980926514,
-2.5, 9.10000038146973, 2.5, 3.09999990463257, 3.70000004768372,
-4.09999990463257, 6.7000002861023, 2.5, 6.7000002861023, 3.09999990463257,
-3.60000014305115, 6.7000002861023, 4.30000019073486, 4.09999990463257,
-2.40000009536743, 6.80000019073486, 4.30000019073486, 4.30000019073486,
-3.09999990463257, 3.09999990463257, 3.5, 5.19999980926514, 2.5,
-9.10000038146973, 9.10000038146973, 3.09999990463257, 3.60000014305115,
-3.70000004768372, 2.5, 3.09999990463257, 5.19999980926514, 6.5,
-3.09999990463257, 2.5, 4.30000019073486, 2.5, 3.70000004768372,
-4.30000019073486, 4.30000019073486, 2.5, 3.60000014305115, 3.60000014305115,
-6.80000019073486, 3.60000014305115, 6.5, 3.09999990463257, 9.10000038146973,
-2.70000004768372, 5.19999980926514, 3.09999990463257, 6.5, 6.80000019073486,
-6, 2.5, 3.09999990463257, 3.09999990463257, 3.60000014305115,
-2.5, 6.7000002861023, 3.70000004768372, 2.70000004768372, 4.09999990463257,
-2.70000004768372, 3.70000004768372, 2.5, 5.19999980926514, 6.5,
-3.5, 5.19999980926514, 3.19999980926514, 3.5, 3.09999990463257,
-3.60000014305115, 2.70000004768372, 5.19999980926514, 3.60000014305115,
-5.19999980926514, 9.10000038146973, 2.5, 6, 3.60000014305115,
-2.40000009536743, 3.70000004768372, 2.70000004768372, 5.19999980926514,
-2.5, 2.5, 6, 6, 6.5, 6.7000002861023, 3.5, 3.19999980926514,
-2.5, 3.60000014305115, 6.7000002861023, 6.5, 2.5, 4.30000019073486,
-9.10000038146973, 4.09999990463257, 6.7000002861023, 3.19999980926514,
-2.70000004768372, 3.60000014305115, 3.60000014305115, 2.5, 6.80000019073486,
-6, 5.19999980926514, 2.40000009536743, 2.5, 2.5, 2.40000009536743,
-6.7000002861023, 3.19999980926514, 6, 5.19999980926514, 5.19999980926514,
-9.10000038146973, 5.19999980926514, 6.5, 5.19999980926514, 2.5,
-6.80000019073486, 4.09999990463257, 5.19999980926514, 9.10000038146973,
-2.40000009536743, 4.30000019073486, 5.19999980926514, 5.19999980926514,
-3.09999990463257, 4.30000019073486, 2.70000004768372, 2.5, 5.19999980926514,
-4.30000019073486, 3.60000014305115, 6.5, 6, 5.19999980926514,
-5.19999980926514, 6.7000002861023, 9.10000038146973, 4.30000019073486,
-2.5, 2.5, 5.19999980926514, 3.60000014305115, 6, 6, 6.5, 2.5,
-2.5, 2.5, 9.10000038146973, 6.7000002861023, 2.70000004768372,
-6.5, 9.10000038146973, 6.80000019073486, 6, 2.70000004768372,
-3.70000004768372, 2.5, 5.19999980926514, 5.19999980926514, 3.60000014305115,
-3.70000004768372, 2.5, 6.80000019073486, 2.5, 6, 5.19999980926514,
-3.60000014305115, 6.5, 6.5, 6, 3.70000004768372, 5.19999980926514,
-2.40000009536743, 6, 5.19999980926514, 3.09999990463257, 6.7000002861023,
-3.60000014305115, 6.7000002861023, 9.10000038146973, 9.10000038146973,
-6.7000002861023, 6.5, 4.30000019073486, 6.7000002861023, 3.60000014305115,
-2.70000004768372, 5.19999980926514, 3.09999990463257, 2.70000004768372,
-3.60000014305115, 2.70000004768372, 3.70000004768372, 0.100000001490116,
-6.5, 5.19999980926514, 6.5, 3.70000004768372, 5.19999980926514,
-6.5, 3.09999990463257, 4.30000019073486, 3.70000004768372, 3.09999990463257,
-2.5, 6.5, 6.5, 9.10000038146973, 6.5, 6, 3.60000014305115, 6.7000002861023,
-3.60000014305115, 4.09999990463257, 6.5, 4.30000019073486, 2.5,
-3.19999980926514, 2.70000004768372, 6.7000002861023, 6.5, 6.7000002861023,
-6.7000002861023, 3.09999990463257, 2.5, 6.5, 4.30000019073486,
-3.70000004768372, 2.5, 5.19999980926514, 2.5, 3.09999990463257,
-2.5, 5.19999980926514, 4.09999990463257, 6, 6, 6, 3.09999990463257,
-6.80000019073486, 3.09999990463257, 2.40000009536743, 3.70000004768372,
-2.5, 2.5, 6.5, 3.19999980926514, 6.7000002861023, 5.19999980926514,
-4.30000019073486, 3.60000014305115, 4.09999990463257, 6.5, 4.09999990463257,
-2.5, 4.09999990463257, 5.19999980926514, 9.10000038146973, 2.5,
-5.19999980926514, 6, 6.5, 4.30000019073486, 2.5, 9.10000038146973,
-6.80000019073486, 3.19999980926514, 2.40000009536743, 6.5, 2.5,
-4.30000019073486, 2.40000009536743, 3.19999980926514, 6.5, 2.5,
-6, 2.5, 6.80000019073486, 5.19999980926514, 6, 3.60000014305115,
-2.5, 2.5, 3.60000014305115, 2.5, 2.5, 2.5, 2.40000009536743,
-2.40000009536743, 5.19999980926514, 3.19999980926514, 4.30000019073486,
-5.19999980926514, 3.19999980926514, 3.5, 6, 6.80000019073486,
-5.19999980926514, 4.09999990463257, 6, 9.10000038146973, 5.19999980926514,
-2.5, 9.10000038146973, 3.09999990463257, 3.09999990463257, 2.70000004768372,
-6.5, 3.19999980926514, 5.19999980926514, 2.70000004768372, 3.09999990463257,
-2.70000004768372, 3.70000004768372, 2.70000004768372, 3.09999990463257,
-6, 6, 6.80000019073486, 4.09999990463257, 6.5, 2.40000009536743,
-3.60000014305115, 0.100000001490116, 6, 2.5, 2.70000004768372,
-2.40000009536743, 6.7000002861023, 4.09999990463257, 2.40000009536743,
-3.09999990463257, 3.70000004768372, 3.60000014305115, 6.80000019073486,
-6.5, 5.19999980926514, 4.09999990463257, 3.09999990463257, 3.09999990463257,
-2.70000004768372, 2.5, 3.5, 6, 6.7000002861023, 6.5, 9.10000038146973,
-6, 9.10000038146973, 5.19999980926514, 5.19999980926514, 2.70000004768372,
-3.70000004768372, 4.30000019073486, 3.19999980926514, 9.10000038146973,
-5.19999980926514, 3.60000014305115, 3.60000014305115, 3.09999990463257,
-6.7000002861023, 6.7000002861023, 2.5, 3.70000004768372, 5.19999980926514,
-5.19999980926514, 6.80000019073486, 2.5, 2.5, 3.70000004768372,
-6.5, 4.30000019073486, 3.70000004768372, 5.19999980926514, 5.19999980926514,
-2.5, 2.5, 3.70000004768372, 2.5, 2.5, 3.19999980926514, 2.40000009536743,
-5.19999980926514, 6.5, 9.10000038146973, 3.5, 5.19999980926514,
-6.5, 6.5, 2.5, 6, 5.19999980926514, 5.19999980926514, 5.19999980926514,
-6, 2.5, 2.5, 3.09999990463257, 5.19999980926514, 6.5, 6, 6.5,
-6.80000019073486, 9.10000038146973, 2.70000004768372, 2.5, 2.70000004768372,
-2.40000009536743, 3.60000014305115, 3.19999980926514, 3.70000004768372,
-2.5, 9.10000038146973, 4.09999990463257, 3.70000004768372, 3.60000014305115,
-6.7000002861023, 2.5, 3.09999990463257, 3.70000004768372, 2.70000004768372,
-3.60000014305115, 2.5, 2.5, 2.5, 2.5, 6.80000019073486, 2.40000009536743,
-2.70000004768372, 9.10000038146973, 2.5, 6.5, 6.5, 6.7000002861023,
-3.70000004768372, 3.60000014305115, 3.60000014305115, 0.100000001490116,
-3.09999990463257, 6, 3.09999990463257, 4.09999990463257, 6.7000002861023,
-3.09999990463257, 2.5, 2.70000004768372, 3.09999990463257, 4.09999990463257,
-6.5, 3.19999980926514, 2.5, 3.60000014305115, 2.40000009536743,
-4.09999990463257, 2.5, 3.5, 3.09999990463257, 2.5, 5.19999980926514,
-4.30000019073486, 3.5, 3.19999980926514, 6.5, 5.19999980926514,
-3.19999980926514, 6.5, 6.7000002861023, 5.19999980926514, 3.09999990463257,
-3.60000014305115, 6, 3.09999990463257, 6.7000002861023, 6.7000002861023,
-2.5, 6.5, 6.7000002861023, 6, 3.19999980926514, 6.7000002861023,
-6.80000019073486, 3.09999990463257, 2.70000004768372, 5.19999980926514,
-4.30000019073486, 6.5, 5.19999980926514, 6.5, 3.09999990463257,
-5.19999980926514, 5.19999980926514, 2.5, 6.5, 6.5, 2.5, 2.5,
-4.30000019073486, 5.19999980926514, 2.70000004768372, 6.5, 6.80000019073486,
-5.19999980926514, 6.80000019073486, 5.19999980926514, 5.19999980926514,
-5.19999980926514, 6.5, 9.10000038146973, 2.5, 2.5, 4.30000019073486,
-5.19999980926514, 3.09999990463257, 6.5, 6.7000002861023, 2.40000009536743,
-2.5, 2.5, 6.5, 3.19999980926514, 2.70000004768372, 3.09999990463257,
-2.5, 2.40000009536743, 3.09999990463257, 5.19999980926514, 4.30000019073486,
-5.19999980926514, 5.19999980926514, 2.70000004768372, 5.19999980926514,
-5.19999980926514, 2.70000004768372, 3.5, 4.30000019073486, 6.5,
-3.60000014305115, 2.5, 4.09999990463257, 2.5, 5.19999980926514,
-3.09999990463257, 3.09999990463257, 3.09999990463257, 6.5, 2.70000004768372,
-2.70000004768372, 2.5, 5.19999980926514, 6.7000002861023, 3.09999990463257,
-9.10000038146973, 6.5, 0.100000001490116, 3.19999980926514, 2.5,
-6.5, 3.09999990463257, 5.19999980926514, 6.80000019073486, 6.7000002861023,
-2.5, 4.30000019073486, 6.5, 6.5, 6.80000019073486, 5.19999980926514,
-6.5, 3.60000014305115, 6.80000019073486, 6.5, 3.60000014305115,
-9.10000038146973, 4.09999990463257, 6.7000002861023, 2.5, 6.7000002861023,
-4.30000019073486, 2.70000004768372, 2.70000004768372, 3.5, 6.80000019073486,
-2.70000004768372, 3.60000014305115, 3.19999980926514, 4.09999990463257,
-2.5, 6.5, 5.19999980926514, 3.09999990463257, 2.5, 2.5, 2.70000004768372,
-2.5, 2.5, 6.80000019073486, 5.19999980926514, 3.09999990463257,
-3.5, 6.5, 5.19999980926514, 4.09999990463257, 2.5, 3.70000004768372,
-2.5, 3.09999990463257, 3.09999990463257, 0.100000001490116, 5.19999980926514,
-6, 0.100000001490116, 6, 6.5, 6.5, 3.09999990463257, 9.10000038146973,
-6.7000002861023, 6.80000019073486, 2.5, 6.5, 3.60000014305115,
-2.40000009536743, 6, 6, 3.09999990463257, 2.5, 6.5, 3.19999980926514,
-4.30000019073486, 2.5, 6.5, 2.70000004768372, 5.19999980926514,
-9.10000038146973, 3.09999990463257, 2.70000004768372, 3.70000004768372,
-5.19999980926514, 3.60000014305115, 2.5, 3.09999990463257, 6.5,
-5.19999980926514, 6.7000002861023, 9.10000038146973, 4.30000019073486,
-4.09999990463257, 6.7000002861023, 3.60000014305115, 3.09999990463257,
-4.30000019073486, 5.19999980926514, 5.19999980926514, 6.5, 6.5,
-5.19999980926514, 6, 4.30000019073486, 2.5, 2.70000004768372,
-2.5, 3.60000014305115, 2.5, 3.19999980926514, 6.80000019073486,
-2.5, 3.60000014305115, 6.80000019073486, 3.70000004768372, 3.09999990463257,
-6.7000002861023, 2.5, 4.30000019073486, 2.5, 6, 6, 3.09999990463257,
-2.5, 5.19999980926514, 2.5, 6.7000002861023, 3.5, 3.60000014305115,
-6.5, 4.09999990463257, 6.5, 6.5, 5.19999980926514, 5.19999980926514,
-2.70000004768372, 4.30000019073486, 3.09999990463257, 2.5, 3.19999980926514,
-2.5, 2.5, 6.5, 2.5, 6, 2.5, 2.5, 5.19999980926514, 5.19999980926514,
-4.30000019073486, 6.7000002861023, 6.5, 2.5, 6.5, 3.60000014305115,
-6, 5.19999980926514, 5.19999980926514, 5.19999980926514, 6.80000019073486,
-2.5, 2.40000009536743, 6.80000019073486, 6.7000002861023, 6.5,
-6.5, 6.7000002861023, 6.5, 6, 3.70000004768372, 3.5, 5.19999980926514,
-3.09999990463257, 3.09999990463257, 3.09999990463257, 3.09999990463257,
-3.09999990463257, 3.5, 3.09999990463257, 3.09999990463257, 3.19999980926514,
-2.5, 5.19999980926514, 3.09999990463257, 6.5, 6.5, 3.19999980926514,
-2.5, 3.60000014305115, 6.5, 3.70000004768372, 9.10000038146973,
-3.09999990463257, 5.19999980926514, 4.30000019073486, 2.40000009536743,
-6, 3.60000014305115, 6.7000002861023, 4.30000019073486, 6.80000019073486,
-2.70000004768372, 2.5, 6.5, 6.5, 2.40000009536743, 3.09999990463257,
-3.70000004768372, 4.30000019073486, 5.19999980926514, 5.19999980926514,
-4.09999990463257, 5.19999980926514, 3.19999980926514, 6.5, 6.5,
-6, 6.5, 6.80000019073486, 4.09999990463257, 2.40000009536743,
-6.7000002861023, 3.60000014305115, 2.40000009536743, 3.60000014305115,
-4.09999990463257, 3.09999990463257, 6.7000002861023, 6.5, 3.09999990463257,
-5.19999980926514, 6.5, 3.09999990463257, 2.5, 6.5, 3.09999990463257,
-2.5, 6.7000002861023, 3.60000014305115, 4.09999990463257, 5.19999980926514,
-2.40000009536743, 6.5, 2.5, 6.7000002861023, 3.09999990463257,
-3.70000004768372, 6.5, 4.09999990463257, 2.5, 2.5, 3.60000014305115,
-3.19999980926514, 2.5, 5.19999980926514, 6.5, 2.5, 2.70000004768372,
-3.19999980926514, 2.70000004768372, 3.09999990463257, 4.09999990463257,
-3.60000014305115, 2.40000009536743, 6.5, 9.10000038146973, 9.10000038146973,
-2.40000009536743, 4.30000019073486, 6.80000019073486, 2.40000009536743,
-5.19999980926514, 9.10000038146973, 3.60000014305115, 3.60000014305115,
-9.10000038146973, 3.09999990463257, 2.40000009536743, 3.70000004768372,
-5.19999980926514, 6.80000019073486, 3.09999990463257, 3.60000014305115,
-5.19999980926514, 3.70000004768372, 6.7000002861023, 5.19999980926514,
-3.09999990463257, 5.19999980926514, 6.5, 9.10000038146973, 9.10000038146973,
-9.10000038146973, 2.5, 4.09999990463257, 6.7000002861023, 2.5,
-3.09999990463257, 3.09999990463257, 6.7000002861023, 6.7000002861023,
-3.09999990463257, 6.5, 3.5, 6.5, 3.09999990463257, 2.5, 3.09999990463257,
-3.09999990463257, 3.70000004768372, 3.70000004768372, 3.60000014305115,
-3.09999990463257, 4.30000019073486, 4.30000019073486, 6.5, 5.19999980926514,
-6.5, 3.09999990463257, 2.70000004768372, 6, 3.60000014305115,
-5.19999980926514, 4.30000019073486, 3.60000014305115, 3.70000004768372,
-2.5, 6, 6.5, 6.7000002861023, 5.19999980926514, 6.80000019073486,
-3.60000014305115, 3.19999980926514, 2.5, 6.5, 6.5, 5.19999980926514,
-2.40000009536743, 2.5, 4.30000019073486, 3.09999990463257, 2.70000004768372,
-3.60000014305115, 2.70000004768372, 2.40000009536743, 2.5, 6,
-2.5, 2.5, 2.70000004768372, 6.5, 6.7000002861023, 6.7000002861023,
-3.19999980926514, 2.5, 3.09999990463257, 2.70000004768372, 5.19999980926514,
-9.10000038146973, 6.80000019073486, 2.5, 2.40000009536743, 3.60000014305115,
-3.09999990463257, 3.09999990463257, 4.30000019073486, 3.09999990463257,
-5.19999980926514, 6, 6.5, 2.70000004768372, 3.19999980926514,
-6, 5.19999980926514, 3.09999990463257, 3.09999990463257, 4.30000019073486,
-5.19999980926514, 2.5, 3.09999990463257, 4.30000019073486, 2.5,
-6, 2.5, 6.7000002861023, 2.5, 5.19999980926514, 3.70000004768372,
-6.7000002861023, 6.5, 3.09999990463257, 2.40000009536743, 6.7000002861023,
-2.5, 2.40000009536743, 6.5, 3.19999980926514, 6.5, 2.5, 6.7000002861023,
-2.5, 3.19999980926514, 3.70000004768372, 2.5, 2.5, 5.19999980926514,
-6.5, 3.70000004768372, 5.19999980926514, 2.5, 2.5, 2.40000009536743,
-6.7000002861023, 6.80000019073486, 6.5, 2.40000009536743, 6.7000002861023,
-3.70000004768372, 6, 3.09999990463257, 9.10000038146973, 6.7000002861023,
-6.5, 3.60000014305115, 2.5, 6.5, 2.70000004768372, 3.09999990463257,
-6.80000019073486, 2.70000004768372, 4.30000019073486, 4.30000019073486,
-3.09999990463257, 4.30000019073486, 2.40000009536743, 6.5, 6.5,
-5.19999980926514, 4.30000019073486, 3.09999990463257, 6.5, 2.40000009536743,
-3.09999990463257, 5.19999980926514, 2.5, 9.10000038146973, 2.5,
-2.70000004768372, 2.5, 2.5, 3.09999990463257, 2.5, 2.40000009536743,
-6.5, 2.5, 3.09999990463257, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 6.80000019073486, 6.5, 3.60000014305115, 3.60000014305115,
-2.5, 2.70000004768372, 2.5, 6, 6, 5.19999980926514, 6, 3.5, 4.30000019073486,
-6, 6.7000002861023, 2.40000009536743, 9.10000038146973, 5.19999980926514,
-2.5, 4.30000019073486, 3.09999990463257, 2.5, 6.5, 3.09999990463257,
-4.09999990463257, 6.7000002861023, 3.70000004768372, 6.7000002861023,
-2.40000009536743, 4.30000019073486, 2.70000004768372, 2.40000009536743,
-4.30000019073486, 3.09999990463257, 3.09999990463257, 6.80000019073486,
-3.19999980926514, 5.19999980926514, 2.40000009536743, 2.5, 6.5,
-2.70000004768372, 2.70000004768372, 5.19999980926514, 3.70000004768372,
-3.60000014305115, 6.80000019073486, 3.60000014305115, 6, 6.5,
-5.19999980926514, 2.40000009536743, 9.10000038146973, 6.5, 3.70000004768372,
-3.09999990463257, 3.5, 3.19999980926514, 3.09999990463257, 6.80000019073486,
-4.09999990463257, 3.19999980926514, 9.10000038146973, 6.7000002861023,
-6.5, 3.09999990463257, 6.7000002861023, 2.70000004768372, 6.5,
-6, 2.40000009536743, 3.70000004768372, 2.40000009536743, 5.19999980926514,
-9.10000038146973, 3.19999980926514, 6.5, 6.7000002861023, 2.5,
-6.5, 6.7000002861023, 5.19999980926514, 6, 6.5, 6.5, 3.09999990463257,
-4.30000019073486, 5.19999980926514, 3.19999980926514, 6, 5.19999980926514,
-6.5, 2.5, 5.19999980926514, 2.70000004768372, 9.10000038146973,
-2.40000009536743, 5.19999980926514, 3.19999980926514, 5.19999980926514,
-2.5, 3.09999990463257, 3.09999990463257, 2.5, 2.70000004768372,
-2.40000009536743, 5.19999980926514, 6.5, 6.5, 3.60000014305115,
-2.40000009536743, 6.7000002861023, 2.70000004768372, 3.70000004768372,
-5.19999980926514, 3.70000004768372, 3.60000014305115, 3.09999990463257,
-6.80000019073486, 6.7000002861023, 2.40000009536743, 2.5, 3.70000004768372,
-2.40000009536743, 3.70000004768372, 2.40000009536743, 3.19999980926514,
-3.09999990463257, 3.09999990463257, 3.19999980926514, 4.30000019073486,
-3.09999990463257, 3.70000004768372, 4.30000019073486, 6.5, 9.10000038146973,
-2.40000009536743, 3.09999990463257, 2.40000009536743, 6, 6.5,
-6.5, 5.19999980926514, 2.40000009536743, 5.19999980926514, 3.09999990463257,
-6.5, 6.5, 3.70000004768372, 6.5, 3.09999990463257, 4.30000019073486,
-5.19999980926514, 9.10000038146973, 2.5, 5.19999980926514, 5.19999980926514,
-9.10000038146973, 2.5, 2.5, 3.09999990463257, 4.09999990463257,
-2.40000009536743, 0.100000001490116, 4.30000019073486, 3.60000014305115,
-2.70000004768372, 6.5, 2.40000009536743, 3.60000014305115, 6.7000002861023,
-5.19999980926514, 3.5, 2.70000004768372, 3.09999990463257, 2.70000004768372,
-6, 6.5, 3.09999990463257, 2.70000004768372, 0.100000001490116,
-6.5, 5.19999980926514, 5.19999980926514, 5.19999980926514, 6.5,
-3.5, 6.80000019073486, 3.09999990463257, 3.60000014305115, 5.19999980926514,
-3.70000004768372, 9.10000038146973, 5.19999980926514, 2.5, 9.10000038146973,
-6.7000002861023, 9.10000038146973, 3.09999990463257, 3.60000014305115,
-3.09999990463257, 2.5, 5.19999980926514, 5.19999980926514, 6,
-5.19999980926514, 3.09999990463257, 3.60000014305115, 9.10000038146973,
-2.70000004768372, 6.5, 5.19999980926514, 5.19999980926514, 6.7000002861023,
-5.19999980926514, 6.80000019073486, 6.5, 6, 6.5, 2.40000009536743,
-6.80000019073486, 3.60000014305115, 3.60000014305115, 3.09999990463257,
-3.09999990463257, 5.19999980926514, 2.5, 5.19999980926514, 2.5,
-6.5, 3.5, 2.5, 4.09999990463257, 2.5, 2.5, 5.19999980926514,
-3.60000014305115, 2.5, 3.60000014305115, 3.60000014305115, 3.09999990463257,
-4.09999990463257, 6.80000019073486, 3.19999980926514, 6, 3.60000014305115,
-9.10000038146973, 5.19999980926514, 3.09999990463257, 5.19999980926514,
-6.5, 6.7000002861023, 5.19999980926514, 0.100000001490116, 2.5,
-2.5, 9.10000038146973, 2.70000004768372, 2.40000009536743, 9.10000038146973,
-6, 6.5, 3.09999990463257, 2.5, 3.09999990463257, 3.70000004768372,
-3.60000014305115, 6.5, 3.09999990463257, 3.5, 3.09999990463257,
-2.5, 2.5, 3.09999990463257, 3.09999990463257, 3.70000004768372,
-6.7000002861023, 3.60000014305115, 3.09999990463257, 6.5, 6.5,
-2.40000009536743, 6.7000002861023, 6.5, 3.09999990463257, 2.70000004768372,
-6.7000002861023, 6.5, 3.70000004768372, 6.5, 3.09999990463257,
-2.5, 4.30000019073486, 3.70000004768372, 6.5, 2.40000009536743,
-6.7000002861023, 3.09999990463257, 6.5, 6.7000002861023, 2.5,
-2.70000004768372, 2.5, 6.80000019073486, 4.09999990463257, 2.70000004768372,
-2.70000004768372, 6.5, 3.70000004768372, 2.70000004768372, 3.09999990463257,
-2.5, 6.80000019073486, 2.70000004768372, 3.09999990463257, 3.09999990463257,
-3.09999990463257, 3.60000014305115, 3.09999990463257, 6.7000002861023,
-3.19999980926514, 4.09999990463257, 2.70000004768372, 6.80000019073486,
-5.19999980926514, 6.5, 6.7000002861023, 2.5, 2.40000009536743,
-2.5, 6.5, 4.09999990463257, 4.09999990463257, 4.09999990463257,
-5.19999980926514, 3.09999990463257, 5.19999980926514, 6.7000002861023,
-6.7000002861023, 3.19999980926514, 5.19999980926514, 6.7000002861023,
-2.70000004768372, 5.19999980926514, 6.5, 5.19999980926514, 2.40000009536743,
-6.5, 2.70000004768372, 3.09999990463257, 5.19999980926514, 2.5,
-2.5, 5.19999980926514, 3.09999990463257, 2.5, 2.70000004768372,
-5.19999980926514, 6.5, 3.19999980926514, 3.60000014305115, 2.40000009536743,
-3.09999990463257, 3.60000014305115, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 6.5, 9.10000038146973, 6.5, 2.5, 3.09999990463257,
-6.5, 4.30000019073486, 3.60000014305115, 6, 3.60000014305115,
-4.30000019073486, 6.5, 9.10000038146973, 5.19999980926514, 6.5,
-2.5, 3.5, 6.7000002861023, 6.5, 3.09999990463257, 2.70000004768372,
-3.09999990463257, 2.40000009536743, 3.5, 6.5, 5.19999980926514,
-3.60000014305115, 4.30000019073486, 3.70000004768372, 6.7000002861023,
-5.19999980926514, 2.5, 6.7000002861023, 2.70000004768372, 3.5,
-6, 3.19999980926514, 4.09999990463257, 2.5, 3.60000014305115,
-6.5, 5.19999980926514, 4.09999990463257, 3.60000014305115, 2.40000009536743,
-3.5, 4.30000019073486, 2.70000004768372, 3.60000014305115, 2.70000004768372,
-5.19999980926514, 2.40000009536743, 5.19999980926514, 3.5, 4.09999990463257,
-6, 4.09999990463257, 3.5, 6, 3.09999990463257, 5.19999980926514,
-3.60000014305115, 3.5, 2.40000009536743, 5.19999980926514, 2.5,
-6.5, 2.5, 2.5, 2.5, 4.09999990463257, 5.19999980926514, 6.7000002861023,
-3.09999990463257, 6.5, 6.5, 6.80000019073486, 5.19999980926514,
-6.7000002861023, 3.19999980926514, 3.5, 2.5, 3.09999990463257,
-5.19999980926514, 6.5, 6.80000019073486, 2.70000004768372, 2.5,
-3.70000004768372, 2.5, 2.40000009536743, 6.7000002861023, 3.19999980926514,
-3.09999990463257, 5.19999980926514, 2.5, 6.5, 2.5, 2.5, 3.60000014305115,
-6.5, 3.09999990463257, 3.09999990463257, 3.60000014305115, 6.7000002861023,
-6, 2.5, 3.09999990463257, 6.5, 9.10000038146973, 2.40000009536743,
-6.80000019073486, 6.7000002861023, 3.70000004768372, 0.100000001490116,
-6.5, 3.09999990463257, 3.70000004768372, 3.70000004768372, 2.5,
-5.19999980926514, 5.19999980926514, 6.5, 3.09999990463257, 3.09999990463257,
-2.5, 6.80000019073486, 6.5, 2.40000009536743, 6.7000002861023,
-3.09999990463257, 3.09999990463257, 6.7000002861023, 4.30000019073486,
-3.19999980926514, 6.5, 9.10000038146973, 9.10000038146973, 2.70000004768372,
-3.19999980926514, 3.5, 3.09999990463257, 2.5, 4.09999990463257,
-5.19999980926514, 3.09999990463257, 4.09999990463257, 6, 2.70000004768372,
-3.09999990463257, 6.7000002861023, 3.19999980926514, 6.5, 2.5,
-3.09999990463257, 4.09999990463257, 3.60000014305115, 3.60000014305115,
-3.09999990463257, 3.09999990463257, 6.5, 3.19999980926514, 3.09999990463257,
-6.80000019073486, 5.19999980926514, 4.30000019073486, 3.60000014305115,
-3.60000014305115, 6.7000002861023, 6.5, 9.10000038146973, 9.10000038146973,
-3.09999990463257, 3.09999990463257, 3.09999990463257, 2.5, 0.100000001490116,
-2.40000009536743, 3.19999980926514, 6, 4.30000019073486, 3.70000004768372,
-6.80000019073486, 3.09999990463257, 4.09999990463257, 4.30000019073486,
-3.19999980926514, 3.09999990463257, 2.70000004768372, 0.100000001490116,
-3.70000004768372, 6.80000019073486, 3.5, 2.70000004768372, 2.5,
-3.19999980926514, 4.09999990463257, 3.09999990463257, 6.80000019073486,
-2.5, 2.70000004768372, 6.80000019073486, 6.5, 3.19999980926514,
-3.19999980926514, 6, 9.10000038146973, 3.19999980926514, 5.19999980926514,
-2.70000004768372, 3.19999980926514, 3.19999980926514, 3.5, 6.5,
-5.19999980926514, 3.09999990463257, 4.30000019073486, 6.5, 4.30000019073486,
-3.09999990463257, 3.70000004768372, 6.7000002861023, 3.60000014305115,
-3.19999980926514, 6.5, 2.5, 6.5, 6.7000002861023, 6, 4.30000019073486,
-3.70000004768372, 6.7000002861023, 5.19999980926514, 5.19999980926514,
-3.09999990463257, 3.60000014305115, 3.09999990463257, 6, 6.5,
-3.19999980926514, 2.70000004768372, 5.19999980926514, 6.5, 6.5,
-3.60000014305115, 2.40000009536743, 5.19999980926514, 6.7000002861023,
-5.19999980926514, 3.09999990463257, 2.5, 6.80000019073486, 5.19999980926514,
-4.09999990463257, 3.09999990463257, 2.5, 2.5, 3.09999990463257,
-6.7000002861023, 3.5, 5.19999980926514, 3.60000014305115, 6.7000002861023,
-5.19999980926514, 5.19999980926514, 2.70000004768372, 4.30000019073486,
-6.7000002861023, 3.60000014305115, 6.80000019073486, 2.70000004768372,
-4.09999990463257, 6.7000002861023, 3.19999980926514, 3.19999980926514,
-2.5, 6.7000002861023, 3.70000004768372, 3.09999990463257, 6.5,
-2.5, 6.80000019073486, 5.19999980926514, 2.40000009536743, 2.70000004768372,
-6.5, 3.19999980926514, 6.5, 6.5, 3.5, 2.40000009536743, 3.5,
-3.60000014305115, 4.30000019073486, 5.19999980926514, 2.40000009536743,
-3.09999990463257, 3.09999990463257, 6.5, 4.30000019073486, 3.19999980926514,
-4.09999990463257, 6.7000002861023, 2.40000009536743, 6.7000002861023,
-3.09999990463257, 2.5, 9.10000038146973, 2.40000009536743, 2.5,
-3.70000004768372, 3.09999990463257, 3.19999980926514, 3.09999990463257,
-2.70000004768372, 6.7000002861023, 3.70000004768372, 5.19999980926514,
-6.5, 6.7000002861023, 5.19999980926514, 3.09999990463257, 6.5,
-3.60000014305115, 2.70000004768372, 6.5, 2.70000004768372, 3.60000014305115,
-5.19999980926514, 6, 3.60000014305115, 6, 2.5, 6.7000002861023,
-5.19999980926514, 6.5, 3.60000014305115, 3.70000004768372, 6.7000002861023,
-4.09999990463257, 6.7000002861023, 3.09999990463257, 5.19999980926514,
-9.10000038146973, 2.70000004768372, 6.7000002861023, 3.60000014305115,
-4.09999990463257, 3.5, 3.5, 3.70000004768372, 6, 2.40000009536743,
-4.30000019073486, 6.5, 3.09999990463257, 3.60000014305115, 2.40000009536743,
-6.7000002861023, 5.19999980926514, 2.40000009536743, 3.60000014305115,
-2.5, 3.19999980926514, 3.60000014305115, 3.09999990463257, 2.40000009536743,
-3.09999990463257, 3.09999990463257, 6.7000002861023, 3.60000014305115,
-3.19999980926514, 3.19999980926514, 3.60000014305115, 3.09999990463257,
-6, 6.7000002861023, 4.30000019073486, 5.19999980926514, 6.80000019073486,
-3.19999980926514, 3.19999980926514, 4.30000019073486, 3.70000004768372,
-3.09999990463257, 5.19999980926514, 2.70000004768372, 6.7000002861023,
-6.7000002861023, 3.5, 2.40000009536743, 2.40000009536743, 3.70000004768372,
-3.60000014305115, 5.19999980926514, 3.09999990463257, 3.09999990463257,
-3.09999990463257, 3.19999980926514, 6.7000002861023, 2.5, 6,
-4.09999990463257, 2.40000009536743, 2.5, 2.70000004768372, 3.09999990463257,
-3.09999990463257, 3.09999990463257, 3.19999980926514, 2.5, 5.19999980926514,
-5.19999980926514, 4.30000019073486, 2.70000004768372, 6.5, 3.19999980926514,
-4.30000019073486, 5.19999980926514, 6.5, 9.10000038146973, 3.09999990463257,
-3.09999990463257, 3.5, 2.5, 6.7000002861023, 3.09999990463257,
-3.60000014305115, 6.5, 6.7000002861023, 3.09999990463257, 3.19999980926514,
-2.70000004768372, 2.70000004768372, 9.10000038146973, 5.19999980926514,
-6.80000019073486, 3.19999980926514, 6, 3.70000004768372, 5.19999980926514,
-3.60000014305115, 2.70000004768372, 2.70000004768372, 3.19999980926514,
-3.09999990463257, 3.09999990463257, 2.70000004768372, 6.5, 2.5,
-6.7000002861023, 3.70000004768372, 2.40000009536743, 3.09999990463257,
-3.60000014305115, 3.09999990463257, 6, 3.19999980926514, 3.60000014305115,
-6, 3.19999980926514, 9.10000038146973, 2.70000004768372, 2.5,
-2.70000004768372, 3.60000014305115, 3.19999980926514, 5.19999980926514,
-2.5, 2.70000004768372, 2.5, 3.60000014305115, 6.7000002861023,
-2.40000009536743, 6.5, 5.19999980926514, 2.5, 2.40000009536743,
-4.30000019073486, 6, 3.09999990463257, 3.09999990463257, 2.70000004768372,
-6.7000002861023, 2.5, 6.7000002861023, 4.09999990463257, 6, 5.19999980926514,
-6.5, 2.5, 6.80000019073486, 2.70000004768372, 2.5, 6.7000002861023,
-6.80000019073486, 9.10000038146973, 2.40000009536743, 6.5, 6,
-6.5, 3.19999980926514, 3.19999980926514, 2.5, 3.09999990463257,
-5.19999980926514, 2.40000009536743, 3.19999980926514, 3.09999990463257,
-3.09999990463257, 2.70000004768372, 4.09999990463257, 3.09999990463257,
-3.70000004768372, 6.5, 3.70000004768372, 2.40000009536743, 5.19999980926514,
-4.09999990463257, 3.60000014305115, 2.40000009536743, 6.7000002861023,
-6.5, 4.09999990463257, 5.19999980926514, 3.19999980926514, 3.19999980926514,
-6.5, 4.30000019073486, 6, 6.5, 6.5, 5.19999980926514, 2.5, 6.5,
-3.09999990463257, 3.09999990463257, 2.70000004768372, 5.19999980926514,
-3.60000014305115, 5.19999980926514, 0.100000001490116, 2.70000004768372,
-4.30000019073486, 4.30000019073486, 3.5, 2.70000004768372, 3.09999990463257,
-3.09999990463257, 6, 3.60000014305115, 6.7000002861023, 3.09999990463257,
-3.60000014305115, 5.19999980926514, 6.80000019073486, 2.5, 5.19999980926514,
-3.70000004768372, 2.40000009536743, 3.09999990463257, 5.19999980926514,
-4.09999990463257, 4.30000019073486, 3.19999980926514, 5.19999980926514,
-2.5, 6.80000019073486, 2.40000009536743, 6.5, 3.09999990463257,
-6.7000002861023, 2.40000009536743, 5.19999980926514, 0.100000001490116,
-6.80000019073486, 5.19999980926514, 4.30000019073486, 5.19999980926514,
-9.10000038146973, 6.7000002861023, 4.09999990463257, 6, 2.40000009536743,
-3.19999980926514, 6.7000002861023, 3.60000014305115, 5.19999980926514,
-3.19999980926514, 3.19999980926514, 2.70000004768372, 5.19999980926514,
-3.70000004768372, 6.7000002861023, 6.7000002861023, 6.5, 2.40000009536743,
-5.19999980926514, 3.09999990463257, 5.19999980926514, 9.10000038146973,
-6.5, 6.5, 3.70000004768372, 5.19999980926514, 6.5, 4.09999990463257,
-2.5, 2.70000004768372, 3.5, 3.19999980926514, 3.5, 9.10000038146973,
-3.70000004768372, 6, 5.19999980926514, 3.19999980926514, 3.19999980926514,
-3.19999980926514, 2.40000009536743, 6.5, 6.5, 9.10000038146973,
-2.70000004768372, 3.19999980926514, 2.5, 0.100000001490116, 3.09999990463257,
-6.5, 9.10000038146973, 3.09999990463257, 6.7000002861023, 6.5,
-4.30000019073486, 6.5, 5.19999980926514, 3.19999980926514, 6.5,
-3.60000014305115, 3.70000004768372, 3.09999990463257, 2.40000009536743,
-6.5, 6.7000002861023, 3.70000004768372, 5.19999980926514, 2.70000004768372,
-2.5, 5.19999980926514, 5.19999980926514, 5.19999980926514, 3.09999990463257,
-3.09999990463257, 3.19999980926514, 4.30000019073486, 3.09999990463257,
-2.70000004768372, 6, 3.19999980926514, 5.19999980926514, 3.60000014305115,
-9.10000038146973, 5.19999980926514, 3.09999990463257, 3.60000014305115,
-6.7000002861023, 6.5, 6.7000002861023, 6, 2.5, 2.70000004768372,
-6, 6.80000019073486, 6.80000019073486, 2.5, 3.19999980926514,
-4.09999990463257, 5.19999980926514, 5.19999980926514, 2.5, 3.09999990463257,
-5.19999980926514, 4.30000019073486, 2.70000004768372, 6.5, 5.19999980926514,
-2.40000009536743, 4.09999990463257, 2.70000004768372, 2.40000009536743,
-2.5, 9.10000038146973, 3.19999980926514, 6.5, 3.09999990463257,
-4.09999990463257, 2.70000004768372, 4.30000019073486, 3.19999980926514,
-6.7000002861023, 6.80000019073486, 9.10000038146973, 3.09999990463257,
-3.19999980926514, 4.09999990463257, 5.19999980926514, 2.5, 6,
-2.70000004768372, 2.5, 2.70000004768372, 3.09999990463257, 4.09999990463257,
-6.7000002861023, 9.10000038146973, 3.09999990463257, 5.19999980926514,
-4.30000019073486, 2.70000004768372, 5.19999980926514, 6.5, 5.19999980926514
-), sex = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
-1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L,
-0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L), los = c(67L, 53L, 51L, 30L,
-43L, 43L, 32L, 47L, 50L, 37L, 32L, 42L, 33L, 28L, 50L, 17L, 22L,
-30L, 30L, 25L, 40L, 46L, 38L, 32L, 13L, 9L, 8L, 34L, 7L, 7L,
-7L, 6L, 6L, 5L, 5L, 5L, 42L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L,
-3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 27L, 11L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-13L, 1L, 1L, 1L, 1L, 1L, 9L, 16L, 12L, 7L, 6L, 5L, 5L, 4L, 4L,
-4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 26L, 8L, 25L, 12L, 7L,
-7L, 7L, 6L, 5L, 5L, 5L, 5L, 14L, 13L, 4L, 4L, 4L, 4L, 4L, 4L,
-4L, 4L, 4L, 4L, 4L, 11L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 19L, 17L, 8L,
-8L, 8L, 7L, 6L, 6L, 6L, 5L, 5L, 5L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
-3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 10L, 10L,
-1L, 1L, 1L, 1L, 9L, 9L, 9L, 8L, 8L, 23L, 7L, 7L, 6L, 6L, 6L,
-9L, 9L, 14L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 13L, 19L, 4L, 4L,
-4L, 4L, 4L, 4L, 4L, 21L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-3L, 3L, 3L, 11L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 15L, 8L,
-8L, 12L, 12L, 7L, 7L, 21L, 17L, 6L, 6L, 6L, 6L, 6L, 5L, 5L, 30L,
-4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-3L, 3L, 3L, 3L, 8L, 11L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 10L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 10L, 9L, 9L, 8L, 7L, 6L,
-5L, 5L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-16L, 8L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 10L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 13L, 26L, 8L, 8L, 8L, 7L, 16L, 28L, 6L, 6L, 6L,
-6L, 9L, 9L, 19L, 25L, 25L, 5L, 14L, 29L, 4L, 4L, 4L, 4L, 4L,
-8L, 12L, 3L, 3L, 3L, 3L, 3L, 11L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 36L, 24L, 10L, 1L, 1L,
-1L, 1L, 1L, 10L, 10L, 5L, 5L, 13L, 4L, 4L, 4L, 12L, 3L, 3L, 3L,
-7L, 11L, 6L, 6L, 6L, 9L, 14L, 5L, 5L, 5L, 6L, 6L, 6L, 9L, 4L,
-11L, 15L, 8L, 8L, 3L, 3L, 3L, 3L, 3L, 3L, 8L, 8L, 7L, 7L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
-1L, 1L, 1L, 18L, 10L, 10L, 10L, 9L, 4L, 35L, 8L, 8L, 7L, 16L,
-3L, 3L, 3L, 7L, 2L, 2L, 2L, 6L, 6L, 6L, 6L, 6L, 6L, 5L, 5L, 5L,
-5L, 5L, 5L, 5L, 5L, 9L, 9L, 4L, 4L, 4L, 4L, 4L, 4L, 11L, 8L,
-3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 8L, 7L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 6L, 1L, 1L, 1L, 1L, 4L, 4L,
-4L, 4L, 8L, 8L, 8L, 7L, 16L, 3L, 3L, 23L, 12L, 7L, 2L, 6L, 9L,
-5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 13L, 4L, 4L, 4L, 4L, 4L, 4L,
-22L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 8L, 8L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 24L, 13L, 6L, 5L, 5L,
-10L, 10L, 1L, 1L, 1L, 1L, 10L, 5L, 5L, 9L, 4L, 4L, 8L, 7L, 7L,
-3L, 3L, 3L, 23L, 12L, 7L, 7L, 4L, 2L, 2L, 6L, 6L, 29L, 10L, 10L,
-1L, 5L, 5L, 5L, 6L, 13L, 4L, 4L, 8L, 3L, 3L, 3L, 3L, 3L, 3L,
-8L, 7L, 7L, 7L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 5L,
-5L, 9L, 10L, 10L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-10L, 5L, 9L, 4L, 8L, 8L, 8L, 7L, 3L, 40L, 7L, 4L, 4L, 4L, 4L,
-4L, 15L, 2L, 2L, 2L, 2L, 2L, 2L, 6L, 9L, 18L, 5L, 5L, 5L, 5L,
-6L, 9L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 8L, 3L, 3L,
-3L, 8L, 7L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 15L, 6L,
-5L, 1L, 1L, 1L, 1L, 1L, 1L, 31L, 10L, 10L, 5L, 5L, 4L, 12L, 12L,
-18L, 7L, 16L, 3L, 11L, 11L, 4L, 4L, 2L, 2L, 10L, 10L, 9L, 13L,
-36L, 9L, 9L, 6L, 6L, 9L, 8L, 30L, 4L, 4L, 4L, 22L, 22L, 3L, 3L,
-3L, 3L, 3L, 3L, 8L, 8L, 7L, 7L, 3L, 3L, 3L, 3L, 3L, 7L, 15L,
-6L, 6L, 6L, 6L, 6L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 23L, 6L, 16L,
-9L, 10L, 5L, 5L, 5L, 1L, 1L, 1L, 1L, 21L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 4L, 4L, 4L, 11L, 25L, 3L, 3L, 7L, 7L, 4L, 4L,
-4L, 4L, 8L, 13L, 13L, 24L, 11L, 19L, 2L, 2L, 6L, 6L, 20L, 20L,
-1L, 5L, 5L, 5L, 5L, 5L, 17L, 6L, 10L, 9L, 15L, 15L, 4L, 4L, 4L,
-4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 7L, 7L, 3L, 3L, 3L, 3L, 3L, 8L,
-8L, 12L, 6L, 2L, 2L, 2L, 2L, 2L, 16L, 5L, 5L, 5L, 5L, 5L, 9L,
-10L, 10L, 5L, 5L, 5L, 1L, 1L, 5L, 9L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 8L, 7L, 3L, 3L, 3L, 3L,
-7L, 2L, 4L, 4L, 8L, 2L, 2L, 6L, 1L, 1L, 9L, 9L, 5L, 5L, 14L,
-17L, 6L, 17L, 8L, 8L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-3L, 3L, 3L, 3L, 12L, 7L, 3L, 3L, 3L, 19L, 8L, 8L, 7L, 15L, 28L,
-11L, 6L, 6L, 6L, 2L, 17L, 6L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 1L,
-1L, 1L, 1L, 5L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L,
-4L, 4L, 4L, 6L, 4L, 4L, 8L, 7L, 7L, 3L, 3L, 3L, 3L, 3L, 15L,
-4L, 4L, 4L, 4L, 34L, 2L, 10L, 10L, 6L, 13L, 1L, 1L, 5L, 17L,
-6L, 8L, 8L, 8L, 4L, 4L, 14L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
-7L, 12L, 12L, 7L, 3L, 3L, 7L, 6L, 6L, 6L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 22L, 5L, 14L, 5L, 5L, 5L, 5L, 1L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 4L, 4L, 4L, 6L, 11L, 4L, 3L, 3L, 3L, 23L, 11L, 11L,
-7L, 26L, 4L, 4L, 4L, 2L, 2L, 10L, 1L, 1L, 1L, 10L, 10L, 1L, 9L,
-9L, 5L, 5L, 5L, 17L, 6L, 6L, 6L, 10L, 15L, 8L, 4L, 4L, 4L, 4L,
-14L, 14L, 3L, 3L, 3L, 12L, 7L, 3L, 3L, 22L, 19L, 8L, 7L, 6L,
-6L, 6L, 2L, 2L, 9L, 16L, 5L, 10L, 5L, 5L, 5L, 1L, 20L, 5L, 13L,
-2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 8L, 8L, 7L, 7L, 22L, 18L,
-18L, 3L, 3L, 3L, 7L, 2L, 15L, 4L, 4L, 4L, 4L, 4L, 17L, 17L, 17L,
-17L, 2L, 10L, 25L, 16L, 16L, 1L, 1L, 1L, 5L, 5L, 5L, 1L, 9L,
-9L, 9L, 25L, 15L, 6L, 6L, 6L, 10L, 15L, 4L, 4L, 14L, 14L, 14L,
-14L, 14L, 26L, 14L, 3L, 3L, 3L, 3L, 3L, 18L, 7L, 3L, 13L, 13L,
-13L, 7L, 6L, 6L, 2L, 2L, 2L, 2L, 2L, 9L, 12L, 12L, 12L, 12L,
-12L, 12L, 47L, 6L, 16L, 5L, 5L, 5L, 5L, 14L, 11L, 11L, 11L, 11L,
-11L, 14L, 13L, 13L, 13L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L,
-4L, 10L, 10L, 10L, 10L, 10L, 10L, 12L, 12L, 7L, 9L, 9L, 9L, 9L,
-9L, 8L, 3L, 2L, 2L, 15L, 4L, 4L, 17L, 8L, 8L, 8L, 8L, 8L, 8L,
-8L, 8L, 8L, 8L, 8L, 8L, 8L, 11L, 6L, 9L, 1L, 1L, 12L, 12L, 1L,
-1L, 1L, 1L, 5L, 5L, 5L, 7L, 7L, 7L, 7L, 7L, 10L, 10L, 9L, 9L,
-15L, 15L, 15L, 6L, 10L, 6L, 9L, 32L, 8L, 8L, 4L, 14L, 3L, 3L,
-3L, 3L, 7L, 7L, 7L, 7L, 7L, 7L, 3L, 13L, 13L, 13L, 13L, 19L,
-8L, 4L, 4L, 4L, 6L, 6L, 2L, 2L, 2L, 9L, 12L, 12L, 12L, 12L, 12L,
-16L, 5L, 14L, 5L, 14L, 20L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
-11L, 19L, 13L, 13L, 13L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L,
-6L, 10L, 10L, 10L, 10L, 10L, 4L, 4L, 7L, 7L, 7L, 11L, 3L, 3L,
-18L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 8L, 35L, 3L,
-7L, 2L, 4L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 34L, 2L, 10L,
-9L, 16L, 12L, 12L, 1L, 5L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
-7L, 10L, 9L, 5L, 15L, 15L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 15L, 8L,
-8L, 8L, 8L, 7L, 22L, 11L, 14L, 14L, 14L, 14L, 14L, 14L, 3L, 3L,
-3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 7L, 16L, 7L, 7L, 7L, 3L, 3L,
-22L, 13L, 13L, 11L, 4L, 12L, 12L, 12L, 6L, 5L, 64L, 5L, 5L, 5L,
-5L, 5L, 5L, 1L, 1L, 11L, 11L, 11L, 5L, 13L, 13L, 2L, 2L, 2L,
-2L, 4L, 19L, 11L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
-4L, 7L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 8L, 11L, 11L, 12L,
-26L, 2L, 4L, 17L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 10L, 18L, 12L,
-12L, 1L, 1L, 5L, 5L, 7L, 7L, 7L, 7L, 7L, 18L, 17L, 6L, 6L, 21L,
-2L, 32L, 8L, 8L, 8L, 8L, 8L, 7L, 4L, 14L, 14L, 14L, 14L, 14L,
-14L, 5L, 5L, 14L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 7L, 22L, 8L, 7L,
-7L, 11L, 11L, 6L, 6L, 6L, 6L, 2L, 9L, 9L, 12L, 12L, 12L, 12L,
-5L, 5L, 5L, 5L, 5L, 5L, 11L, 11L, 11L, 14L, 5L, 13L, 2L, 2L,
-2L, 2L, 4L, 4L, 6L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
-10L, 10L, 4L, 3L, 3L, 18L, 10L, 10L, 10L, 3L, 9L, 9L, 9L, 9L,
-9L, 9L, 9L, 9L, 9L, 8L, 8L, 8L, 8L, 3L, 3L, 11L, 15L, 8L, 8L,
-8L, 8L, 8L, 8L, 8L, 8L, 8L, 13L, 2L, 10L, 19L, 18L, 12L, 1L,
-5L, 5L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 10L, 21L, 9L, 9L, 24L,
-15L, 15L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 9L, 15L, 15L, 2L,
-2L, 7L, 7L, 7L, 4L, 22L, 14L, 14L, 14L, 5L, 14L, 3L, 3L, 3L,
-3L, 23L, 23L, 12L, 7L, 7L, 13L, 13L, 13L, 13L, 13L, 48L, 11L,
-30L, 6L, 6L, 12L, 12L, 12L, 6L, 5L, 5L, 25L, 14L, 6L, 11L, 11L,
-11L, 13L, 13L, 13L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-19L, 11L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 36L, 27L, 10L, 10L,
-10L, 3L, 29L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 8L, 11L, 11L, 26L,
-15L, 4L, 4L, 4L, 24L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 11L,
-19L, 5L, 2L, 10L, 6L, 25L, 25L, 20L, 16L, 16L, 12L, 1L, 1L, 1L,
-1L, 5L, 7L, 7L, 7L, 7L, 7L, 7L, 10L, 9L, 15L, 15L, 6L, 10L, 6L,
-6L, 6L, 6L, 6L, 9L, 9L, 7L, 14L, 14L, 31L, 3L, 3L, 3L, 3L, 3L,
-18L, 12L, 7L, 7L, 3L, 3L, 13L, 13L, 35L, 7L, 11L, 11L, 11L, 11L,
-11L, 6L, 6L, 20L, 2L, 12L, 12L, 12L, 12L, 5L, 5L, 5L, 25L, 5L,
-20L, 20L, 6L, 6L, 6L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 2L,
-2L, 2L, 4L, 4L, 4L, 6L, 11L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
-10L, 21L, 12L, 7L, 27L, 18L, 10L, 10L, 9L, 9L, 9L, 9L, 9L, 9L,
-9L, 9L, 9L, 9L, 9L, 9L, 19L, 8L, 8L, 11L, 4L, 4L, 17L, 17L, 8L,
-8L, 8L, 8L, 8L, 8L, 8L, 8L, 5L, 5L, 10L, 10L, 25L, 16L, 29L,
-12L, 12L, 1L, 1L, 1L, 1L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 10L, 15L,
-15L, 34L, 17L, 10L, 6L, 6L, 6L, 6L, 6L, 9L, 9L, 7L, 7L, 14L,
-14L, 14L, 14L, 3L, 3L, 7L, 22L, 4L, 13L, 11L, 11L, 11L, 15L,
-4L, 6L, 6L, 20L, 9L, 12L, 12L, 12L, 12L, 12L, 12L, 16L, 9L, 5L,
-5L, 5L, 20L, 11L, 11L, 13L, 13L, 2L, 2L, 2L, 2L, 2L, 4L, 4L,
-6L, 6L, 6L, 10L, 10L, 10L, 10L, 10L, 10L, 23L, 18L, 18L, 10L,
-10L, 10L, 10L, 10L, 14L, 3L, 3L, 3L, 9L, 9L, 9L, 9L, 9L, 9L,
-9L, 44L, 8L, 20L, 2L, 2L, 15L, 4L, 17L, 8L, 8L, 8L, 8L, 8L, 8L,
-8L, 8L, 8L, 8L, 8L, 8L, 13L, 30L, 5L, 10L, 12L, 12L, 1L, 1L,
-1L, 16L, 7L, 7L, 7L, 7L, 7L, 7L, 10L, 15L, 15L, 17L, 17L, 6L,
-10L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 9L, 9L, 9L, 2L, 8L, 7L, 14L,
-14L, 14L, 14L, 5L, 14L, 3L, 7L, 22L, 13L, 8L, 11L, 11L, 11L,
-11L, 4L, 4L, 6L, 9L, 9L, 12L, 12L, 12L, 16L, 5L, 68L, 14L, 8L,
-8L, 20L, 6L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 21L, 24L, 19L,
-13L, 13L, 13L, 13L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 19L, 19L, 11L,
-10L, 10L, 10L, 10L, 10L, 10L, 3L, 18L, 10L, 10L, 40L, 3L, 9L,
-9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 8L, 35L, 11L, 26L, 13L,
-4L, 4L, 4L, 17L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
-13L, 7L, 10L, 12L, 16L, 16L, 16L, 16L, 12L, 1L, 5L, 5L, 7L, 7L,
-7L, 7L, 7L, 7L, 7L, 7L, 9L, 11L, 15L, 15L, 15L, 15L, 15L, 17L,
-13L, 2L, 19L, 7L, 7L, 7L, 10L, 14L, 14L, 14L, 14L, 14L, 14L,
-14L, 3L, 3L, 3L, 7L, 7L, 13L, 13L, 13L, 13L, 11L, 30L, 4L, 20L,
-9L, 8L, 8L, 12L, 12L, 12L, 12L, 12L, 12L, 5L, 29L, 25L, 5L, 5L,
-8L, 8L, 8L, 8L, 6L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 2L,
-2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 19L, 6L, 22L, 11L, 10L, 10L,
-10L, 10L, 10L, 10L, 10L, 10L, 3L, 4L, 7L, 11L, 14L, 3L, 10L,
-10L, 10L, 10L, 3L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 15L, 4L, 17L,
-8L, 8L, 8L, 8L, 8L, 8L, 8L, 13L, 7L, 7L, 7L, 16L, 21L, 1L, 16L,
-12L, 12L, 1L, 1L, 7L, 7L, 21L, 10L, 20L, 15L, 6L, 13L, 2L, 2L,
-8L, 8L, 10L, 10L, 14L, 14L, 5L, 14L, 3L, 3L, 7L, 7L, 9L, 9L,
-13L, 11L, 11L, 4L, 4L, 17L, 6L, 8L, 8L, 12L, 12L, 12L, 5L, 8L,
-8L, 8L, 7L, 6L, 6L, 11L, 11L, 11L, 11L, 13L, 13L, 13L, 2L, 2L,
-2L, 17L, 17L, 19L, 6L, 22L, 10L, 10L, 3L, 12L, 14L, 18L, 10L,
-14L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 19L, 8L, 35L, 11L, 26L, 15L,
-15L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 7L, 7L, 16L, 16L,
-16L, 16L, 12L, 12L, 12L, 7L, 7L, 7L, 7L, 10L, 10L, 9L, 2L, 2L,
-11L, 15L, 15L, 15L, 6L, 6L, 9L, 9L, 2L, 2L, 2L, 2L, 8L, 8L, 8L,
-7L, 7L, 7L, 7L, 10L, 14L, 14L, 3L, 18L, 7L, 9L, 9L, 9L, 15L,
-4L, 11L, 11L, 11L, 11L, 65L, 6L, 9L, 9L, 9L, 12L, 12L, 12L, 12L,
-12L, 12L, 12L, 12L, 12L, 12L, 47L, 5L, 8L, 8L, 8L, 8L, 1L, 7L,
-17L, 11L, 11L, 11L, 11L, 11L, 11L, 5L, 13L, 2L, 2L, 2L, 6L, 6L,
-11L, 10L, 10L, 10L, 10L, 10L, 10L, 3L, 7L, 7L, 3L, 18L, 10L,
-10L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 83L, 8L, 2L, 17L, 8L,
-8L, 8L, 8L, 8L, 8L, 13L, 7L, 16L, 5L, 5L, 10L, 1L, 1L, 5L, 7L,
-9L, 2L, 2L, 24L, 11L, 15L, 15L, 6L, 9L, 9L, 9L, 2L, 8L, 7L, 7L,
-7L, 14L, 14L, 14L, 14L, 5L, 3L, 18L, 12L, 6L, 7L, 9L, 4L, 4L,
-13L, 13L, 13L, 13L, 11L, 11L, 11L, 4L, 4L, 4L, 4L, 8L, 12L, 12L,
-12L, 12L, 12L, 14L, 20L, 16L, 8L, 8L, 12L, 20L, 20L, 7L, 6L,
-11L, 11L, 22L, 15L, 13L, 13L, 4L, 4L, 22L, 10L, 10L, 10L, 10L,
-10L, 10L, 3L, 3L, 10L, 9L, 9L, 9L, 9L, 9L, 9L, 19L, 13L, 15L,
-4L, 8L, 8L, 8L, 8L, 7L, 7L, 5L, 5L, 5L, 5L, 10L, 12L, 16L, 16L,
-16L, 12L, 7L, 7L, 7L, 7L, 7L, 24L, 15L, 15L, 9L, 8L, 7L, 23L,
-23L, 10L, 10L, 14L, 14L, 14L, 14L, 3L, 3L, 18L, 10L, 10L, 7L,
-22L, 9L, 9L, 9L, 15L, 15L, 4L, 13L, 13L, 13L, 15L, 17L, 11L,
-4L, 6L, 8L, 8L, 12L, 12L, 12L, 5L, 9L, 5L, 8L, 8L, 8L, 7L, 7L,
-17L, 6L, 11L, 11L, 11L, 11L, 13L, 28L, 15L, 2L, 2L, 4L, 19L,
-19L, 11L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 14L, 22L, 14L, 18L,
-18L, 10L, 10L, 14L, 14L, 3L, 3L, 3L, 9L, 9L, 9L, 9L, 9L, 9L,
-9L, 11L, 13L, 13L, 15L, 4L, 17L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
-7L, 7L, 11L, 5L, 10L, 20L, 12L, 12L, 12L, 7L, 13L, 2L, 11L, 11L,
-15L, 15L, 6L, 2L, 19L, 18L, 7L, 7L, 27L, 10L, 14L, 3L, 3L, 6L,
-6L, 18L, 10L, 7L, 22L, 4L, 4L, 4L, 13L, 11L, 11L, 6L, 6L, 20L,
-20L, 20L, 8L, 8L, 16L, 5L, 5L, 24L, 8L, 8L, 8L, 8L, 6L, 6L, 6L,
-11L, 11L, 11L, 11L, 11L, 19L, 9L, 9L, 10L, 10L, 10L, 10L, 10L,
-10L, 14L, 14L, 10L, 10L, 10L, 5L, 14L, 9L, 9L, 9L, 8L, 13L, 12L,
-8L, 7L, 5L, 12L, 12L, 20L, 11L, 12L, 10L, 13L, 11L, 15L, 15L,
-15L, 15L, 15L, 10L, 6L, 9L, 9L, 2L, 8L, 14L, 9L, 9L, 9L, 9L,
-14L, 14L, 18L, 10L, 9L, 9L, 13L, 13L, 8L, 8L, 8L, 11L, 4L, 8L,
-12L, 16L, 8L, 8L, 12L, 7L, 7L, 15L, 17L, 6L, 11L, 15L, 13L, 23L,
-6L, 6L, 14L, 14L, 9L, 9L, 9L, 10L, 10L, 32L, 14L, 10L, 3L, 13L,
-39L, 22L, 13L, 13L, 2L, 15L, 12L, 8L, 8L, 16L, 25L, 20L, 20L,
-11L, 11L, 7L, 21L, 10L, 10L, 10L, 10L, 10L, 6L, 9L, 9L, 18L,
-7L, 7L, 18L, 9L, 9L, 14L, 6L, 18L, 10L, 9L, 9L, 9L, 4L, 4L, 17L,
-25L, 20L, 8L, 16L, 8L, 8L, 8L, 15L, 15L, 6L, 6L, 13L, 13L, 6L,
-22L, 14L, 14L, 14L, 14L, 40L, 40L, 27L, 22L, 10L, 10L, 9L, 9L,
-9L, 19L, 8L, 11L, 17L, 12L, 8L, 8L, 7L, 7L, 7L, 7L, 7L, 11L,
-16L, 10L, 12L, 11L, 11L, 12L, 12L, 12L, 9L, 13L, 13L, 11L, 15L,
-10L, 9L, 9L, 2L, 18L, 7L, 14L, 14L, 9L, 9L, 9L, 6L, 4L, 8L, 11L,
-11L, 15L, 6L, 25L, 8L, 12L, 8L, 8L, 20L, 15L, 15L, 17L, 6L, 11L,
-2L, 4L, 22L, 14L, 14L, 9L, 10L, 10L, 10L, 14L, 14L, 18L, 10L,
-10L, 13L, 9L, 9L, 19L, 8L, 8L, 8L, 12L, 8L, 8L, 7L, 5L, 5L, 12L,
-20L, 20L, 11L, 12L, 7L, 10L, 10L, 13L, 7L, 27L, 18L, 18L, 14L,
-36L, 9L, 9L, 9L, 9L, 14L, 10L, 7L, 9L, 9L, 15L, 15L, 13L, 8L,
-11L, 11L, 4L, 17L, 8L, 16L, 16L, 12L, 8L, 7L, 17L, 6L, 11L, 15L,
-23L, 23L, 19L, 6L, 14L, 14L, 14L, 9L, 10L, 10L, 3L, 10L, 9L,
-9L, 9L, 8L, 13L, 39L, 12L, 8L, 8L, 8L, 8L, 7L, 16L, 16L, 5L,
-20L, 16L, 11L, 11L, 16L, 7L, 8L, 13L, 9L, 9L, 9L, 19L, 18L, 18L,
-7L, 10L, 18L, 10L, 9L, 18L, 9L, 17L, 8L, 11L, 7L, 16L, 12L, 8L,
-12L, 15L, 15L, 17L, 6L, 11L, 11L, 11L, 24L, 23L, 11L, 14L, 14L,
-14L, 14L, 14L, 14L, 22L, 13L, 9L, 12L, 12L, 11L, 21L, 29L, 12L,
-20L, 11L, 11L, 20L, 13L, 13L, 10L, 10L, 10L, 10L, 2L, 27L, 26L,
-17L, 11L, 11L, 20L, 20L, 7L, 16L, 7L, 8L, 8L, 8L, 8L, 12L, 15L,
-15L, 15L, 17L, 6L, 6L, 9L, 32L, 4L, 14L, 5L, 14L, 13L, 22L, 11L,
-12L, 12L, 11L, 12L, 19L, 18L, 18L, 7L, 23L, 18L, 9L, 6L, 9L,
-15L, 8L, 4L, 25L, 8L, 12L, 12L, 7L, 15L, 15L, 15L, 15L, 6L, 14L,
-9L, 14L, 13L, 8L, 11L, 11L, 16L, 11L, 5L, 8L, 2L, 11L, 11L, 19L,
-19L, 10L, 10L, 9L, 6L, 10L, 9L, 8L, 8L, 26L, 8L, 16L, 17L, 6L,
-6L, 10L, 14L, 3L, 3L, 9L, 12L, 11L, 3L, 11L, 13L, 11L, 19L, 10L,
-9L, 18L, 10L, 10L, 10L, 8L, 25L, 9L, 12L, 12L, 7L, 16L, 15L,
-6L, 9L, 9L, 5L, 14L, 14L, 14L, 40L, 3L, 13L, 11L, 11L, 12L, 24L,
-5L, 11L, 11L, 19L, 2L, 18L, 18L, 10L, 10L, 4L, 17L, 8L, 8L, 25L,
-24L, 15L, 15L, 15L, 5L, 14L, 14L, 14L, 14L, 12L, 12L, 11L, 16L,
-20L, 20L, 20L, 8L, 8L, 13L, 13L, 11L, 10L, 19L, 10L, 4L, 17L,
-8L, 16L, 12L, 15L, 17L, 11L, 23L, 14L, 9L, 22L, 13L, 7L, 8L,
-20L, 11L, 11L, 11L, 11L, 8L, 10L, 10L, 9L, 10L, 18L, 10L, 9L,
-17L, 16L, 12L, 7L, 16L, 14L, 11L, 12L, 5L, 29L, 9L, 17L, 8L,
-16L, 16L, 12L, 15L, 17L, 6L, 9L, 9L, 10L, 11L, 10L, 9L, 9L, 16L,
-10L, 9L, 12L, 24L, 12L, 15L, 9L, 8L, 8L, 10L, 15L, 4L, 14L, 3L,
-12L, 11L, 8L, 10L, 17L, 17L, 12L, 17L, 20L, 13L, 11L, 10L, 26L,
-10L, 13L, 11L, 13L, 13L, 13L, 13L, 14L, 19L), admit = c(1L, 1L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L,
-1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
-1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L,
-0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L,
-0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L,
-0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
-1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L,
-1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L,
-0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L,
-1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L,
-0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
-0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L,
-0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L,
-0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L,
-1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L,
-0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L,
-0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L,
-1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L,
-1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L,
-0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L,
-1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L,
-0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L,
-0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L), procedure = c(1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L,
-1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L,
-0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), age75 = c(0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L,
-0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
-1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
-1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
-0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L,
-1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
-0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
-1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L,
-0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
-0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L,
-0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
-0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L,
-0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
-0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L,
-0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
-0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L,
-0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
-0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
-1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L,
-0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
-1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
-0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
-1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
-1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L)), .Names = c("hospital", "sex", "los", "admit",
-"procedure", "age75"), val.labels = c("", "vl_sex", "", "vl_admit",
-"vl_procedure", ""), var.labels = c("ENCRYPTED FACILITY CODE",
-"Gender: 1=Male", "LOS", "Severity:1=Urgent/Emerg", "1=CABG;0=PTCA",
-"Age>75"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8",
-"9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
-"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
-"31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41",
-"42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52",
-"53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63",
-"64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74",
-"75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85",
-"86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96",
-"97", "98", "99", "100", "101", "102", "103", "104", "105", "106",
-"107", "108", "109", "110", "111", "112", "113", "114", "115",
-"116", "117", "118", "119", "120", "121", "122", "123", "124",
-"125", "126", "127", "128", "129", "130", "131", "132", "133",
-"134", "135", "136", "137", "138", "139", "140", "141", "142",
-"143", "144", "145", "146", "147", "148", "149", "150", "151",
-"152", "153", "154", "155", "156", "157", "158", "159", "160",
-"161", "162", "163", "164", "165", "166", "167", "168", "169",
-"170", "171", "172", "173", "174", "175", "176", "177", "178",
-"179", "180", "181", "182", "183", "184", "185", "186", "187",
-"188", "189", "190", "191", "192", "193", "194", "195", "196",
-"197", "198", "199", "200", "201", "202", "203", "204", "205",
-"206", "207", "208", "209", "210", "211", "212", "213", "214",
-"215", "216", "217", "218", "219", "220", "221", "222", "223",
-"224", "225", "226", "227", "228", "229", "230", "231", "232",
-"233", "234", "235", "236", "237", "238", "239", "240", "241",
-"242", "243", "244", "245", "246", "247", "248", "249", "250",
-"251", "252", "253", "254", "255", "256", "257", "258", "259",
-"260", "261", "262", "263", "264", "265", "266", "267", "268",
-"269", "270", "271", "272", "273", "274", "275", "276", "277",
-"278", "279", "280", "281", "282", "283", "284", "285", "286",
-"287", "288", "289", "290", "291", "292", "293", "294", "295",
-"296", "297", "298", "299", "300", "301", "302", "303", "304",
-"305", "306", "307", "308", "309", "310", "311", "312", "313",
-"314", "315", "316", "317", "318", "319", "320", "321", "322",
-"323", "324", "325", "326", "327", "328", "329", "330", "331",
-"332", "333", "334", "335", "336", "337", "338", "339", "340",
-"341", "342", "343", "344", "345", "346", "347", "348", "349",
-"350", "351", "352", "353", "354", "355", "356", "357", "358",
-"359", "360", "361", "362", "363", "364", "365", "366", "367",
-"368", "369", "370", "371", "372", "373", "374", "375", "376",
-"377", "378", "379", "380", "381", "382", "383", "384", "385",
-"386", "387", "388", "389", "390", "391", "392", "393", "394",
-"395", "396", "397", "398", "399", "400", "401", "402", "403",
-"404", "405", "406", "407", "408", "409", "410", "411", "412",
-"413", "414", "415", "416", "417", "418", "419", "420", "421",
-"422", "423", "424", "425", "426", "427", "428", "429", "430",
-"431", "432", "433", "434", "435", "436", "437", "438", "439",
-"440", "441", "442", "443", "444", "445", "446", "447", "448",
-"449", "450", "451", "452", "453", "454", "455", "456", "457",
-"458", "459", "460", "461", "462", "463", "464", "465", "466",
-"467", "468", "469", "470", "471", "472", "473", "474", "475",
-"476", "477", "478", "479", "480", "481", "482", "483", "484",
-"485", "486", "487", "488", "489", "490", "491", "492", "493",
-"494", "495", "496", "497", "498", "499", "500", "501", "502",
-"503", "504", "505", "506", "507", "508", "509", "510", "511",
-"512", "513", "514", "515", "516", "517", "518", "519", "520",
-"521", "522", "523", "524", "525", "526", "527", "528", "529",
-"530", "531", "532", "533", "534", "535", "536", "537", "538",
-"539", "540", "541", "542", "543", "544", "545", "546", "547",
-"548", "549", "550", "551", "552", "553", "554", "555", "556",
-"557", "558", "559", "560", "561", "562", "563", "564", "565",
-"566", "567", "568", "569", "570", "571", "572", "573", "574",
-"575", "576", "577", "578", "579", "580", "581", "582", "583",
-"584", "585", "586", "587", "588", "589", "590", "591", "592",
-"593", "594", "595", "596", "597", "598", "599", "600", "601",
-"602", "603", "604", "605", "606", "607", "608", "609", "610",
-"611", "612", "613", "614", "615", "616", "617", "618", "619",
-"620", "621", "622", "623", "624", "625", "626", "627", "628",
-"629", "630", "631", "632", "633", "634", "635", "636", "637",
-"638", "639", "640", "641", "642", "643", "644", "645", "646",
-"647", "648", "649", "650", "651", "652", "653", "654", "655",
-"656", "657", "658", "659", "660", "661", "662", "663", "664",
-"665", "666", "667", "668", "669", "670", "671", "672", "673",
-"674", "675", "676", "677", "678", "679", "680", "681", "682",
-"683", "684", "685", "686", "687", "688", "689", "690", "691",
-"692", "693", "694", "695", "696", "697", "698", "699", "700",
-"701", "702", "703", "704", "705", "706", "707", "708", "709",
-"710", "711", "712", "713", "714", "715", "716", "717", "718",
-"719", "720", "721", "722", "723", "724", "725", "726", "727",
-"728", "729", "730", "731", "732", "733", "734", "735", "736",
-"737", "738", "739", "740", "741", "742", "743", "744", "745",
-"746", "747", "748", "749", "750", "751", "752", "753", "754",
-"755", "756", "757", "758", "759", "760", "761", "762", "763",
-"764", "765", "766", "767", "768", "769", "770", "771", "772",
-"773", "774", "775", "776", "777", "778", "779", "780", "781",
-"782", "783", "784", "785", "786", "787", "788", "789", "790",
-"791", "792", "793", "794", "795", "796", "797", "798", "799",
-"800", "801", "802", "803", "804", "805", "806", "807", "808",
-"809", "810", "811", "812", "813", "814", "815", "816", "817",
-"818", "819", "820", "821", "822", "823", "824", "825", "826",
-"827", "828", "829", "830", "831", "832", "833", "834", "835",
-"836", "837", "838", "839", "840", "841", "842", "843", "844",
-"845", "846", "847", "848", "849", "850", "851", "852", "853",
-"854", "855", "856", "857", "858", "859", "860", "861", "862",
-"863", "864", "865", "866", "867", "868", "869", "870", "871",
-"872", "873", "874", "875", "876", "877", "878", "879", "880",
-"881", "882", "883", "884", "885", "886", "887", "888", "889",
-"890", "891", "892", "893", "894", "895", "896", "897", "898",
-"899", "900", "901", "902", "903", "904", "905", "906", "907",
-"908", "909", "910", "911", "912", "913", "914", "915", "916",
-"917", "918", "919", "920", "921", "922", "923", "924", "925",
-"926", "927", "928", "929", "930", "931", "932", "933", "934",
-"935", "936", "937", "938", "939", "940", "941", "942", "943",
-"944", "945", "946", "947", "948", "949", "950", "951", "952",
-"953", "954", "955", "956", "957", "958", "959", "960", "961",
-"962", "963", "964", "965", "966", "967", "968", "969", "970",
-"971", "972", "973", "974", "975", "976", "977", "978", "979",
-"980", "981", "982", "983", "984", "985", "986", "987", "988",
-"989", "990", "991", "992", "993", "994", "995", "996", "997",
-"998", "999", "1000", "1001", "1002", "1003", "1004", "1005",
-"1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013",
-"1014", "1015", "1016", "1017", "1018", "1019", "1020", "1021",
-"1022", "1023", "1024", "1025", "1026", "1027", "1028", "1029",
-"1030", "1031", "1032", "1033", "1034", "1035", "1036", "1037",
-"1038", "1039", "1040", "1041", "1042", "1043", "1044", "1045",
-"1046", "1047", "1048", "1049", "1050", "1051", "1052", "1053",
-"1054", "1055", "1056", "1057", "1058", "1059", "1060", "1061",
-"1062", "1063", "1064", "1065", "1066", "1067", "1068", "1069",
-"1070", "1071", "1072", "1073", "1074", "1075", "1076", "1077",
-"1078", "1079", "1080", "1081", "1082", "1083", "1084", "1085",
-"1086", "1087", "1088", "1089", "1090", "1091", "1092", "1093",
-"1094", "1095", "1096", "1097", "1098", "1099", "1100", "1101",
-"1102", "1103", "1104", "1105", "1106", "1107", "1108", "1109",
-"1110", "1111", "1112", "1113", "1114", "1115", "1116", "1117",
-"1118", "1119", "1120", "1121", "1122", "1123", "1124", "1125",
-"1126", "1127", "1128", "1129", "1130", "1131", "1132", "1133",
-"1134", "1135", "1136", "1137", "1138", "1139", "1140", "1141",
-"1142", "1143", "1144", "1145", "1146", "1147", "1148", "1149",
-"1150", "1151", "1152", "1153", "1154", "1155", "1156", "1157",
-"1158", "1159", "1160", "1161", "1162", "1163", "1164", "1165",
-"1166", "1167", "1168", "1169", "1170", "1171", "1172", "1173",
-"1174", "1175", "1176", "1177", "1178", "1179", "1180", "1181",
-"1182", "1183", "1184", "1185", "1186", "1187", "1188", "1189",
-"1190", "1191", "1192", "1193", "1194", "1195", "1196", "1197",
-"1198", "1199", "1200", "1201", "1202", "1203", "1204", "1205",
-"1206", "1207", "1208", "1209", "1210", "1211", "1212", "1213",
-"1214", "1215", "1216", "1217", "1218", "1219", "1220", "1221",
-"1222", "1223", "1224", "1225", "1226", "1227", "1228", "1229",
-"1230", "1231", "1232", "1233", "1234", "1235", "1236", "1237",
-"1238", "1239", "1240", "1241", "1242", "1243", "1244", "1245",
-"1246", "1247", "1248", "1249", "1250", "1251", "1252", "1253",
-"1254", "1255", "1256", "1257", "1258", "1259", "1260", "1261",
-"1262", "1263", "1264", "1265", "1266", "1267", "1268", "1269",
-"1270", "1271", "1272", "1273", "1274", "1275", "1276", "1277",
-"1278", "1279", "1280", "1281", "1282", "1283", "1284", "1285",
-"1286", "1287", "1288", "1289", "1290", "1291", "1292", "1293",
-"1294", "1295", "1296", "1297", "1298", "1299", "1300", "1301",
-"1302", "1303", "1304", "1305", "1306", "1307", "1308", "1309",
-"1310", "1311", "1312", "1313", "1314", "1315", "1316", "1317",
-"1318", "1319", "1320", "1321", "1322", "1323", "1324", "1325",
-"1326", "1327", "1328", "1329", "1330", "1331", "1332", "1333",
-"1334", "1335", "1336", "1337", "1338", "1339", "1340", "1341",
-"1342", "1343", "1344", "1345", "1346", "1347", "1348", "1349",
-"1350", "1351", "1352", "1353", "1354", "1355", "1356", "1357",
-"1358", "1359", "1360", "1361", "1362", "1363", "1364", "1365",
-"1366", "1367", "1368", "1369", "1370", "1371", "1372", "1373",
-"1374", "1375", "1376", "1377", "1378", "1379", "1380", "1381",
-"1382", "1383", "1384", "1385", "1386", "1387", "1388", "1389",
-"1390", "1391", "1392", "1393", "1394", "1395", "1396", "1397",
-"1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405",
-"1406", "1407", "1408", "1409", "1410", "1411", "1412", "1413",
-"1414", "1415", "1416", "1417", "1418", "1419", "1420", "1421",
-"1422", "1423", "1424", "1425", "1426", "1427", "1428", "1429",
-"1430", "1431", "1432", "1433", "1434", "1435", "1436", "1437",
-"1438", "1439", "1440", "1441", "1442", "1443", "1444", "1445",
-"1446", "1447", "1448", "1449", "1450", "1451", "1452", "1453",
-"1454", "1455", "1456", "1457", "1458", "1459", "1460", "1461",
-"1462", "1463", "1464", "1465", "1466", "1467", "1468", "1469",
-"1470", "1471", "1472", "1473", "1474", "1475", "1476", "1477",
-"1478", "1479", "1480", "1481", "1482", "1483", "1484", "1485",
-"1486", "1487", "1488", "1489", "1490", "1491", "1492", "1493",
-"1494", "1495", "1496", "1497", "1498", "1499", "1500", "1501",
-"1502", "1503", "1504", "1505", "1506", "1507", "1508", "1509",
-"1510", "1511", "1512", "1513", "1514", "1515", "1516", "1517",
-"1518", "1519", "1520", "1521", "1522", "1523", "1524", "1525",
-"1526", "1527", "1528", "1529", "1530", "1531", "1532", "1533",
-"1534", "1535", "1536", "1537", "1538", "1539", "1540", "1541",
-"1542", "1543", "1544", "1545", "1546", "1547", "1548", "1549",
-"1550", "1551", "1552", "1553", "1554", "1555", "1556", "1557",
-"1558", "1559", "1560", "1561", "1562", "1563", "1564", "1565",
-"1566", "1567", "1568", "1569", "1570", "1571", "1572", "1573",
-"1574", "1575", "1576", "1577", "1578", "1579", "1580", "1581",
-"1582", "1583", "1584", "1585", "1586", "1587", "1588", "1589",
-"1590", "1591", "1592", "1593", "1594", "1595", "1596", "1597",
-"1598", "1599", "1600", "1601", "1602", "1603", "1604", "1605",
-"1606", "1607", "1608", "1609", "1610", "1611", "1612", "1613",
-"1614", "1615", "1616", "1617", "1618", "1619", "1620", "1621",
-"1622", "1623", "1624", "1625", "1626", "1627", "1628", "1629",
-"1630", "1631", "1632", "1633", "1634", "1635", "1636", "1637",
-"1638", "1639", "1640", "1641", "1642", "1643", "1644", "1645",
-"1646", "1647", "1648", "1649", "1650", "1651", "1652", "1653",
-"1654", "1655", "1656", "1657", "1658", "1659", "1660", "1661",
-"1662", "1663", "1664", "1665", "1666", "1667", "1668", "1669",
-"1670", "1671", "1672", "1673", "1674", "1675", "1676", "1677",
-"1678", "1679", "1680", "1681", "1682", "1683", "1684", "1685",
-"1686", "1687", "1688", "1689", "1690", "1691", "1692", "1693",
-"1694", "1695", "1696", "1697", "1698", "1699", "1700", "1701",
-"1702", "1703", "1704", "1705", "1706", "1707", "1708", "1709",
-"1710", "1711", "1712", "1713", "1714", "1715", "1716", "1717",
-"1718", "1719", "1720", "1721", "1722", "1723", "1724", "1725",
-"1726", "1727", "1728", "1729", "1730", "1731", "1732", "1733",
-"1734", "1735", "1736", "1737", "1738", "1739", "1740", "1741",
-"1742", "1743", "1744", "1745", "1746", "1747", "1748", "1749",
-"1750", "1751", "1752", "1753", "1754", "1755", "1756", "1757",
-"1758", "1759", "1760", "1761", "1762", "1763", "1764", "1765",
-"1766", "1767", "1768", "1769", "1770", "1771", "1772", "1773",
-"1774", "1775", "1776", "1777", "1778", "1779", "1780", "1781",
-"1782", "1783", "1784", "1785", "1786", "1787", "1788", "1789",
-"1790", "1791", "1792", "1793", "1794", "1795", "1796", "1797",
-"1798", "1799", "1800", "1801", "1802", "1803", "1804", "1805",
-"1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813",
-"1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821",
-"1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829",
-"1830", "1831", "1832", "1833", "1834", "1835", "1836", "1837",
-"1838", "1839", "1840", "1841", "1842", "1843", "1844", "1845",
-"1846", "1847", "1848", "1849", "1850", "1851", "1852", "1853",
-"1854", "1855", "1856", "1857", "1858", "1859", "1860", "1861",
-"1862", "1863", "1864", "1865", "1866", "1867", "1868", "1869",
-"1870", "1871", "1872", "1873", "1874", "1875", "1876", "1877",
-"1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885",
-"1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893",
-"1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901",
-"1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909",
-"1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917",
-"1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925",
-"1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933",
-"1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941",
-"1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949",
-"1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957",
-"1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965",
-"1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973",
-"1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981",
-"1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989",
-"1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997",
-"1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005",
-"2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013",
-"2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021",
-"2022", "2023", "2024", "2025", "2026", "2027", "2028", "2029",
-"2030", "2031", "2032", "2033", "2034", "2035", "2036", "2037",
-"2038", "2039", "2040", "2041", "2042", "2043", "2044", "2045",
-"2046", "2047", "2048", "2049", "2050", "2051", "2052", "2053",
-"2054", "2055", "2056", "2057", "2058", "2059", "2060", "2061",
-"2062", "2063", "2064", "2065", "2066", "2067", "2068", "2069",
-"2070", "2071", "2072", "2073", "2074", "2075", "2076", "2077",
-"2078", "2079", "2080", "2081", "2082", "2083", "2084", "2085",
-"2086", "2087", "2088", "2089", "2090", "2091", "2092", "2093",
-"2094", "2095", "2096", "2097", "2098", "2099", "2100", "2101",
-"2102", "2103", "2104", "2105", "2106", "2107", "2108", "2109",
-"2110", "2111", "2112", "2113", "2114", "2115", "2116", "2117",
-"2118", "2119", "2120", "2121", "2122", "2123", "2124", "2125",
-"2126", "2127", "2128", "2129", "2130", "2131", "2132", "2133",
-"2134", "2135", "2136", "2137", "2138", "2139", "2140", "2141",
-"2142", "2143", "2144", "2145", "2146", "2147", "2148", "2149",
-"2150", "2151", "2152", "2153", "2154", "2155", "2156", "2157",
-"2158", "2159", "2160", "2161", "2162", "2163", "2164", "2165",
-"2166", "2167", "2168", "2169", "2170", "2171", "2172", "2173",
-"2174", "2175", "2176", "2177", "2178", "2179", "2180", "2181",
-"2182", "2183", "2184", "2185", "2186", "2187", "2188", "2189",
-"2190", "2191", "2192", "2193", "2194", "2195", "2196", "2197",
-"2198", "2199", "2200", "2201", "2202", "2203", "2204", "2205",
-"2206", "2207", "2208", "2209", "2210", "2211", "2212", "2213",
-"2214", "2215", "2216", "2217", "2218", "2219", "2220", "2221",
-"2222", "2223", "2224", "2225", "2226", "2227", "2228", "2229",
-"2230", "2231", "2232", "2233", "2234", "2235", "2236", "2237",
-"2238", "2239", "2240", "2241", "2242", "2243", "2244", "2245",
-"2246", "2247", "2248", "2249", "2250", "2251", "2252", "2253",
-"2254", "2255", "2256", "2257", "2258", "2259", "2260", "2261",
-"2262", "2263", "2264", "2265", "2266", "2267", "2268", "2269",
-"2270", "2271", "2272", "2273", "2274", "2275", "2276", "2277",
-"2278", "2279", "2280", "2281", "2282", "2283", "2284", "2285",
-"2286", "2287", "2288", "2289", "2290", "2291", "2292", "2293",
-"2294", "2295", "2296", "2297", "2298", "2299", "2300", "2301",
-"2302", "2303", "2304", "2305", "2306", "2307", "2308", "2309",
-"2310", "2311", "2312", "2313", "2314", "2315", "2316", "2317",
-"2318", "2319", "2320", "2321", "2322", "2323", "2324", "2325",
-"2326", "2327", "2328", "2329", "2330", "2331", "2332", "2333",
-"2334", "2335", "2336", "2337", "2338", "2339", "2340", "2341",
-"2342", "2343", "2344", "2345", "2346", "2347", "2348", "2349",
-"2350", "2351", "2352", "2353", "2354", "2355", "2356", "2357",
-"2358", "2359", "2360", "2361", "2362", "2363", "2364", "2365",
-"2366", "2367", "2368", "2369", "2370", "2371", "2372", "2373",
-"2374", "2375", "2376", "2377", "2378", "2379", "2380", "2381",
-"2382", "2383", "2384", "2385", "2386", "2387", "2388", "2389",
-"2390", "2391", "2392", "2393", "2394", "2395", "2396", "2397",
-"2398", "2399", "2400", "2401", "2402", "2403", "2404", "2405",
-"2406", "2407", "2408", "2409", "2410", "2411", "2412", "2413",
-"2414", "2415", "2416", "2417", "2418", "2419", "2420", "2421",
-"2422", "2423", "2424", "2425", "2426", "2427", "2428", "2429",
-"2430", "2431", "2432", "2433", "2434", "2435", "2436", "2437",
-"2438", "2439", "2440", "2441", "2442", "2443", "2444", "2445",
-"2446", "2447", "2448", "2449", "2450", "2451", "2452", "2453",
-"2454", "2455", "2456", "2457", "2458", "2459", "2460", "2461",
-"2462", "2463", "2464", "2465", "2466", "2467", "2468", "2469",
-"2470", "2471", "2472", "2473", "2474", "2475", "2476", "2477",
-"2478", "2479", "2480", "2481", "2482", "2483", "2484", "2485",
-"2486", "2487", "2488", "2489", "2490", "2491", "2492", "2493",
-"2494", "2495", "2496", "2497", "2498", "2499", "2500", "2501",
-"2502", "2503", "2504", "2505", "2506", "2507", "2508", "2509",
-"2510", "2511", "2512", "2513", "2514", "2515", "2516", "2517",
-"2518", "2519", "2520", "2521", "2522", "2523", "2524", "2525",
-"2526", "2527", "2528", "2529", "2530", "2531", "2532", "2533",
-"2534", "2535", "2536", "2537", "2538", "2539", "2540", "2541",
-"2542", "2543", "2544", "2545", "2546", "2547", "2548", "2549",
-"2550", "2551", "2552", "2553", "2554", "2555", "2556", "2557",
-"2558", "2559", "2560", "2561", "2562", "2563", "2564", "2565",
-"2566", "2567", "2568", "2569", "2570", "2571", "2572", "2573",
-"2574", "2575", "2576", "2577", "2578", "2579", "2580", "2581",
-"2582", "2583", "2584", "2585", "2586", "2587", "2588", "2589",
-"2590", "2591", "2592", "2593", "2594", "2595", "2596", "2597",
-"2598", "2599", "2600", "2601", "2602", "2603", "2604", "2605",
-"2606", "2607", "2608", "2609", "2610", "2611", "2612", "2613",
-"2614", "2615", "2616", "2617", "2618", "2619", "2620", "2621",
-"2622", "2623", "2624", "2625", "2626", "2627", "2628", "2629",
-"2630", "2631", "2632", "2633", "2634", "2635", "2636", "2637",
-"2638", "2639", "2640", "2641", "2642", "2643", "2644", "2645",
-"2646", "2647", "2648", "2649", "2650", "2651", "2652", "2653",
-"2654", "2655", "2656", "2657", "2658", "2659", "2660", "2661",
-"2662", "2663", "2664", "2665", "2666", "2667", "2668", "2669",
-"2670", "2671", "2672", "2673", "2674", "2675", "2676", "2677",
-"2678", "2679", "2680", "2681", "2682", "2683", "2684", "2685",
-"2686", "2687", "2688", "2689", "2690", "2691", "2692", "2693",
-"2694", "2695", "2696", "2697", "2698", "2699", "2700", "2701",
-"2702", "2703", "2704", "2705", "2706", "2707", "2708", "2709",
-"2710", "2711", "2712", "2713", "2714", "2715", "2716", "2717",
-"2718", "2719", "2720", "2721", "2722", "2723", "2724", "2725",
-"2726", "2727", "2728", "2729", "2730", "2731", "2732", "2733",
-"2734", "2735", "2736", "2737", "2738", "2739", "2740", "2741",
-"2742", "2743", "2744", "2745", "2746", "2747", "2748", "2749",
-"2750", "2751", "2752", "2753", "2754", "2755", "2756", "2757",
-"2758", "2759", "2760", "2761", "2762", "2763", "2764", "2765",
-"2766", "2767", "2768", "2769", "2770", "2771", "2772", "2773",
-"2774", "2775", "2776", "2777", "2778", "2779", "2780", "2781",
-"2782", "2783", "2784", "2785", "2786", "2787", "2788", "2789",
-"2790", "2791", "2792", "2793", "2794", "2795", "2796", "2797",
-"2798", "2799", "2800", "2801", "2802", "2803", "2804", "2805",
-"2806", "2807", "2808", "2809", "2810", "2811", "2812", "2813",
-"2814", "2815", "2816", "2817", "2818", "2819", "2820", "2821",
-"2822", "2823", "2824", "2825", "2826", "2827", "2828", "2829",
-"2830", "2831", "2832", "2833", "2834", "2835", "2836", "2837",
-"2838", "2839", "2840", "2841", "2842", "2843", "2844", "2845",
-"2846", "2847", "2848", "2849", "2850", "2851", "2852", "2853",
-"2854", "2855", "2856", "2857", "2858", "2859", "2860", "2861",
-"2862", "2863", "2864", "2865", "2866", "2867", "2868", "2869",
-"2870", "2871", "2872", "2873", "2874", "2875", "2876", "2877",
-"2878", "2879", "2880", "2881", "2882", "2883", "2884", "2885",
-"2886", "2887", "2888", "2889", "2890", "2891", "2892", "2893",
-"2894", "2895", "2896", "2897", "2898", "2899", "2900", "2901",
-"2902", "2903", "2904", "2905", "2906", "2907", "2908", "2909",
-"2910", "2911", "2912", "2913", "2914", "2915", "2916", "2917",
-"2918", "2919", "2920", "2921", "2922", "2923", "2924", "2925",
-"2926", "2927", "2928", "2929", "2930", "2931", "2932", "2933",
-"2934", "2935", "2936", "2937", "2938", "2939", "2940", "2941",
-"2942", "2943", "2944", "2945", "2946", "2947", "2948", "2949",
-"2950", "2951", "2952", "2953", "2954", "2955", "2956", "2957",
-"2958", "2959", "2960", "2961", "2962", "2963", "2964", "2965",
-"2966", "2967", "2968", "2969", "2970", "2971", "2972", "2973",
-"2974", "2975", "2976", "2977", "2978", "2979", "2980", "2981",
-"2982", "2983", "2984", "2985", "2986", "2987", "2988", "2989",
-"2990", "2991", "2992", "2993", "2994", "2995", "2996", "2997",
-"2998", "2999", "3000", "3001", "3002", "3003", "3004", "3005",
-"3006", "3007", "3008", "3009", "3010", "3011", "3012", "3013",
-"3014", "3015", "3016", "3017", "3018", "3019", "3020", "3021",
-"3022", "3023", "3024", "3025", "3026", "3027", "3028", "3029",
-"3030", "3031", "3032", "3033", "3034", "3035", "3036", "3037",
-"3038", "3039", "3040", "3041", "3042", "3043", "3044", "3045",
-"3046", "3047", "3048", "3049", "3050", "3051", "3052", "3053",
-"3054", "3055", "3056", "3057", "3058", "3059", "3060", "3061",
-"3062", "3063", "3064", "3065", "3066", "3067", "3068", "3069",
-"3070", "3071", "3072", "3073", "3074", "3075", "3076", "3077",
-"3078", "3079", "3080", "3081", "3082", "3083", "3084", "3085",
-"3086", "3087", "3088", "3089", "3090", "3091", "3092", "3093",
-"3094", "3095", "3096", "3097", "3098", "3099", "3100", "3101",
-"3102", "3103", "3104", "3105", "3106", "3107", "3108", "3109",
-"3110", "3111", "3112", "3113", "3114", "3115", "3116", "3117",
-"3118", "3119", "3120", "3121", "3122", "3123", "3124", "3125",
-"3126", "3127", "3128", "3129", "3130", "3131", "3132", "3133",
-"3134", "3135", "3136", "3137", "3138", "3139", "3140", "3141",
-"3142", "3143", "3144", "3145", "3146", "3147", "3148", "3149",
-"3150", "3151", "3152", "3153", "3154", "3155", "3156", "3157",
-"3158", "3159", "3160", "3161", "3162", "3163", "3164", "3165",
-"3166", "3167", "3168", "3169", "3170", "3171", "3172", "3173",
-"3174", "3175", "3176", "3177", "3178", "3179", "3180", "3181",
-"3182", "3183", "3184", "3185", "3186", "3187", "3188", "3189",
-"3190", "3191", "3192", "3193", "3194", "3195", "3196", "3197",
-"3198", "3199", "3200", "3201", "3202", "3203", "3204", "3205",
-"3206", "3207", "3208", "3209", "3210", "3211", "3212", "3213",
-"3214", "3215", "3216", "3217", "3218", "3219", "3220", "3221",
-"3222", "3223", "3224", "3225", "3226", "3227", "3228", "3229",
-"3230", "3231", "3232", "3233", "3234", "3235", "3236", "3237",
-"3238", "3239", "3240", "3241", "3242", "3243", "3244", "3245",
-"3246", "3247", "3248", "3249", "3250", "3251", "3252", "3253",
-"3254", "3255", "3256", "3257", "3258", "3259", "3260", "3261",
-"3262", "3263", "3264", "3265", "3266", "3267", "3268", "3269",
-"3270", "3271", "3272", "3273", "3274", "3275", "3276", "3277",
-"3278", "3279", "3280", "3281", "3282", "3283", "3284", "3285",
-"3286", "3287", "3288", "3289", "3290", "3291", "3292", "3293",
-"3294", "3295", "3296", "3297", "3298", "3299", "3300", "3301",
-"3302", "3303", "3304", "3305", "3306", "3307", "3308", "3309",
-"3310", "3311", "3312", "3313", "3314", "3315", "3316", "3317",
-"3318", "3319", "3320", "3321", "3322", "3323", "3324", "3325",
-"3326", "3327", "3328", "3329", "3330", "3331", "3332", "3333",
-"3334", "3335", "3336", "3337", "3338", "3339", "3340", "3341",
-"3342", "3343", "3344", "3345", "3346", "3347", "3348", "3349",
-"3350", "3351", "3352", "3353", "3354", "3355", "3356", "3357",
-"3358", "3359", "3360", "3361", "3362", "3363", "3364", "3365",
-"3366", "3367", "3368", "3369", "3370", "3371", "3372", "3373",
-"3374", "3375", "3376", "3377", "3378", "3379", "3380", "3381",
-"3382", "3383", "3384", "3385", "3386", "3387", "3388", "3389",
-"3390", "3391", "3392", "3393", "3394", "3395", "3396", "3397",
-"3398", "3399", "3400", "3401", "3402", "3403", "3404", "3405",
-"3406", "3407", "3408", "3409", "3410", "3411", "3412", "3413",
-"3414", "3415", "3416", "3417", "3418", "3419", "3420", "3421",
-"3422", "3423", "3424", "3425", "3426", "3427", "3428", "3429",
-"3430", "3431", "3432", "3433", "3434", "3435", "3436", "3437",
-"3438", "3439", "3440", "3441", "3442", "3443", "3444", "3445",
-"3446", "3447", "3448", "3449", "3450", "3451", "3452", "3453",
-"3454", "3455", "3456", "3457", "3458", "3459", "3460", "3461",
-"3462", "3463", "3464", "3465", "3466", "3467", "3468", "3469",
-"3470", "3471", "3472", "3473", "3474", "3475", "3476", "3477",
-"3478", "3479", "3480", "3481", "3482", "3483", "3484", "3485",
-"3486", "3487", "3488", "3489", "3490", "3491", "3492", "3493",
-"3494", "3495", "3496", "3497", "3498", "3499", "3500", "3501",
-"3502", "3503", "3504", "3505", "3506", "3507", "3508", "3509",
-"3510", "3511", "3512", "3513", "3514", "3515", "3516", "3517",
-"3518", "3519", "3520", "3521", "3522", "3523", "3524", "3525",
-"3526", "3527", "3528", "3529", "3530", "3531", "3532", "3533",
-"3534", "3535", "3536", "3537", "3538", "3539", "3540", "3541",
-"3542", "3543", "3544", "3545", "3546", "3547", "3548", "3549",
-"3550", "3551", "3552", "3553", "3554", "3555", "3556", "3557",
-"3558", "3559", "3560", "3561", "3562", "3563", "3564", "3565",
-"3566", "3567", "3568", "3569", "3570", "3571", "3572", "3573",
-"3574", "3575", "3576", "3577", "3578", "3579", "3580", "3581",
-"3582", "3583", "3584", "3585", "3586", "3587", "3588", "3589"
-), class = "data.frame", label.table = list(NULL, structure(c(0,
-1), .Names = c("Female", "Male")), NULL, structure(c(0, 1), .Names = c("Elective",
-"Emer/Urg")), structure(c(0, 1), .Names = c("PTCA", "CABG")),
- NULL))
diff --git a/data/azprocedure.rda b/data/azprocedure.rda
new file mode 100644
index 0000000..a947f80
Binary files /dev/null and b/data/azprocedure.rda differ
diff --git a/data/backPain.R b/data/backPain.R
deleted file mode 100644
index de37d29..0000000
--- a/data/backPain.R
+++ /dev/null
@@ -1,5 +0,0 @@
-backPain <- read.table("backPain.txt")
-backPain$pain <- ordered(backPain$pain,
- levels = c("worse", "same", "slight.improvement",
- "moderate.improvement", "marked.improvement",
- "complete.relief"))
diff --git a/data/backPain.rda b/data/backPain.rda
new file mode 100644
index 0000000..3e1a07a
Binary files /dev/null and b/data/backPain.rda differ
diff --git a/data/backPain.txt b/data/backPain.txt
deleted file mode 100644
index fa23f57..0000000
--- a/data/backPain.txt
+++ /dev/null
@@ -1,102 +0,0 @@
- x1 x2 x3 pain
-1 1 1 1 same
-2 1 1 1 marked.improvement
-3 1 1 1 complete.relief
-4 1 2 1 same
-5 1 2 1 slight.improvement
-6 1 2 1 marked.improvement
-7 1 2 1 complete.relief
-8 1 1 2 moderate.improvement
-9 1 1 2 marked.improvement
-10 1 3 1 marked.improvement
-11 1 3 1 complete.relief
-12 1 2 2 same
-13 1 2 2 moderate.improvement
-14 1 2 2 complete.relief
-15 2 1 1 slight.improvement
-16 2 1 1 marked.improvement
-17 2 1 1 complete.relief
-18 1 3 2 slight.improvement
-19 1 3 2 moderate.improvement
-20 1 3 2 marked.improvement
-21 2 2 1 same
-22 2 2 1 slight.improvement
-23 2 2 1 moderate.improvement
-24 2 2 1 marked.improvement
-25 2 2 1 complete.relief
-26 2 1 2 same
-27 2 1 2 marked.improvement
-28 2 3 1 worse
-29 2 3 1 same
-30 2 3 1 slight.improvement
-31 2 3 1 moderate.improvement
-32 2 3 1 marked.improvement
-33 2 2 2 worse
-34 2 2 2 same
-35 2 2 2 slight.improvement
-36 2 2 2 moderate.improvement
-37 2 2 2 complete.relief
-38 2 3 2 worse
-39 2 3 2 slight.improvement
-40 2 3 2 moderate.improvement
-41 1 1 1 marked.improvement
-42 1 1 1 complete.relief
-43 1 1 1 complete.relief
-44 1 1 1 complete.relief
-45 1 2 1 same
-46 1 2 1 slight.improvement
-47 1 2 1 slight.improvement
-48 1 2 1 marked.improvement
-49 1 2 1 marked.improvement
-50 1 2 1 marked.improvement
-51 1 2 1 marked.improvement
-52 1 2 1 marked.improvement
-53 1 2 1 complete.relief
-54 1 2 1 complete.relief
-55 1 2 1 complete.relief
-56 1 1 2 marked.improvement
-57 1 1 2 marked.improvement
-58 1 3 1 marked.improvement
-59 1 3 1 complete.relief
-60 1 2 2 moderate.improvement
-61 2 1 1 slight.improvement
-62 2 1 1 slight.improvement
-63 2 1 1 complete.relief
-64 1 3 2 marked.improvement
-65 1 3 2 marked.improvement
-66 2 2 1 same
-67 2 2 1 same
-68 2 2 1 slight.improvement
-69 2 2 1 slight.improvement
-70 2 2 1 slight.improvement
-71 2 2 1 moderate.improvement
-72 2 2 1 moderate.improvement
-73 2 2 1 moderate.improvement
-74 2 2 1 moderate.improvement
-75 2 2 1 marked.improvement
-76 2 2 1 marked.improvement
-77 2 2 1 marked.improvement
-78 2 2 1 marked.improvement
-79 2 2 1 marked.improvement
-80 2 2 1 complete.relief
-81 2 1 2 marked.improvement
-82 2 1 2 marked.improvement
-83 2 3 1 worse
-84 2 3 1 same
-85 2 3 1 moderate.improvement
-86 2 3 1 moderate.improvement
-87 2 3 1 moderate.improvement
-88 2 3 1 moderate.improvement
-89 2 3 1 marked.improvement
-90 2 2 2 same
-91 2 2 2 same
-92 2 2 2 same
-93 2 2 2 slight.improvement
-94 2 2 2 slight.improvement
-95 2 2 2 slight.improvement
-96 2 2 2 moderate.improvement
-97 2 2 2 moderate.improvement
-98 2 3 2 worse
-99 2 3 2 slight.improvement
-100 2 3 2 moderate.improvement
-101 2 3 2 moderate.improvement
\ No newline at end of file
diff --git a/data/backPain.txt.gz b/data/backPain.txt.gz
new file mode 100644
index 0000000..1ce44fe
Binary files /dev/null and b/data/backPain.txt.gz differ
diff --git a/data/bminz.txt b/data/bminz.txt
deleted file mode 100644
index 02393e7..0000000
--- a/data/bminz.txt
+++ /dev/null
@@ -1,701 +0,0 @@
- age BMI
- 31.52966 22.77107
- 39.38045 27.70033
- 43.38940 28.18127
- 34.84894 25.08380
- 53.81990 26.46388
- 39.17002 36.19648
- 33.51872 24.66313
- 49.03421 28.72118
- 36.25354 25.48609
- 40.30528 26.71721
- 36.73073 21.28543
- 28.42404 24.92885
- 21.30212 27.96330
- 38.91421 29.62630
- 48.49673 26.33872
- 58.94552 24.57081
- 36.48628 27.89536
- 59.80134 30.14546
- 64.40486 25.12497
- 69.17766 29.50876
- 30.93609 28.29902
- 55.28165 34.34088
- 35.41093 29.03532
- 27.27993 24.20983
- 64.87958 30.88243
- 61.69701 24.83798
- 75.59529 24.47465
- 36.58378 26.68803
- 38.07413 33.86913
- 27.99299 20.92162
- 51.39876 31.86141
- 51.96557 28.92970
- 42.38411 16.62793
- 60.49754 25.86957
- 31.72362 24.72202
- 30.27677 25.96939
- 40.04436 18.04338
- 33.18791 27.45061
- 25.82706 25.45475
- 39.73441 22.80517
- 71.00441 25.52747
- 46.93339 26.08018
- 33.38008 25.28969
- 61.38006 30.69433
- 30.88379 39.06963
- 26.57036 21.73781
- 85.05665 20.97085
- 22.01522 27.17437
- 21.07371 22.70368
- 46.28684 23.09759
- 52.38596 16.52431
- 39.86237 30.39876
- 18.31478 22.30990
- 44.58452 27.62018
- 37.50505 21.84954
- 33.55295 30.01736
- 48.58470 27.00412
- 35.02938 33.94024
- 56.74282 26.12108
- 27.01597 35.78276
- 42.12292 21.45356
- 53.47645 29.93081
- 73.57362 28.80390
- 33.07897 29.89490
- 27.71434 23.48019
- 26.56032 19.46313
- 56.88176 31.75842
- 40.04743 29.23342
- 43.46757 27.66600
- 48.40347 45.84425
- 51.94451 34.52123
- 22.81941 25.12492
- 47.31553 29.41774
- 56.90261 32.57713
- 55.64545 21.59294
- 32.71280 29.03342
- 39.61485 31.07253
- 34.29674 31.27179
- 75.03272 23.26198
- 42.52394 26.06924
- 63.50737 26.19967
- 41.45791 26.15889
- 26.48068 23.28205
- 29.66578 23.76932
- 55.39052 21.38899
- 33.93638 21.50787
- 41.16556 29.31633
- 55.28719 26.41008
- 48.96903 21.81375
- 39.43987 25.20258
- 54.69976 31.80343
- 61.81926 23.78463
- 29.83802 31.30212
- 36.10928 27.78490
- 38.88342 26.29163
- 21.69252 24.09296
- 40.65945 24.49848
- 45.41919 24.61197
- 51.04320 23.25319
- 51.76804 31.14619
- 50.07597 26.15693
- 31.72125 23.02196
- 42.54576 24.56047
- 33.84730 24.49910
- 43.16923 30.89444
- 32.48236 30.59186
- 27.07331 30.24490
- 24.40670 23.41133
- 38.33903 27.60308
- 40.66055 23.13918
- 33.89193 18.73414
- 28.86946 17.23473
- 54.29757 29.46142
- 49.89804 24.83382
- 24.50766 29.16544
- 29.16440 34.56097
- 60.04799 28.16589
- 30.89256 19.40223
- 63.13626 21.74822
- 54.85329 25.26185
- 78.96306 20.95348
- 78.01710 21.24361
- 50.47371 30.81535
- 34.08666 24.19961
- 50.69744 56.39979
- 25.29732 28.08855
- 64.83965 25.95777
- 21.06325 25.73138
- 49.60311 29.66317
- 61.46347 35.88379
- 32.10376 25.98025
- 30.43664 23.82905
- 33.89039 22.33076
- 27.23587 24.80311
- 65.21659 34.55600
- 24.94063 26.89007
- 57.41561 22.96084
- 43.18235 23.51734
- 23.45612 26.43305
- 67.44293 27.23271
- 75.21263 29.53429
- 36.35890 23.16634
- 41.13786 24.64723
- 46.11416 24.32160
- 78.32855 22.34879
- 56.22332 22.20308
- 40.92859 27.41183
- 74.37957 24.87848
- 82.94280 26.32849
- 38.23325 28.22564
- 28.50112 21.52640
- 83.50588 22.53243
- 47.39850 21.92371
- 63.18745 19.29737
- 30.83350 21.58011
- 47.27177 25.67939
- 76.68825 23.46654
- 35.72061 23.60277
- 35.58604 29.63724
- 49.17131 29.98912
- 39.02782 25.72651
- 30.67334 32.80155
- 45.51781 30.89201
- 70.39287 32.74232
- 41.74017 20.21025
- 33.55806 23.12314
- 21.55016 26.18381
- 40.72792 19.64126
- 47.01347 28.57987
- 37.42738 20.35258
- 47.91820 27.95266
- 38.70494 26.32271
- 26.58318 38.73875
- 27.40259 22.45829
- 32.12200 27.23851
- 55.61718 32.19144
- 29.10814 28.72264
- 43.45972 28.04374
- 52.66468 29.56594
- 36.05022 29.32213
- 53.83558 25.49865
- 30.80845 27.30202
- 29.33553 26.27864
- 45.00041 24.30341
- 36.77749 32.27165
- 37.03259 22.24966
- 44.36336 32.04588
- 50.15041 30.48021
- 39.19250 24.14858
- 23.73404 34.87301
- 34.33628 22.13615
- 82.02401 22.55500
- 25.48160 27.38973
- 45.76363 26.61516
- 70.17821 30.39693
- 43.11517 37.33708
- 54.43810 33.54397
- 25.44707 22.96111
- 49.46259 26.52552
- 30.88428 23.43050
- 21.14543 31.28093
- 56.39559 25.97359
- 42.53512 30.54994
- 40.25480 24.17316
- 35.22250 28.13546
- 37.70700 19.94863
- 49.89107 23.43994
- 43.42424 23.60671
- 78.25495 21.56012
- 47.47255 32.80983
- 44.90691 25.88567
- 27.52709 22.13972
- 33.91070 20.40207
- 43.99000 40.05864
- 43.31449 32.97531
- 61.74588 22.26506
- 33.18188 25.19256
- 52.27435 25.14232
- 68.01345 28.86970
- 34.15872 28.30390
- 69.57542 34.58239
- 64.99171 25.72063
- 41.98288 22.84582
- 48.89752 26.64060
- 24.79011 25.06266
- 42.36029 19.08029
- 24.81843 34.94792
- 32.34701 25.34357
- 45.00538 31.18279
- 36.49979 25.49393
- 42.63332 21.16398
- 33.69105 25.26029
- 44.72925 32.50419
- 65.81059 33.69888
- 42.65160 37.67878
- 45.18119 34.08004
- 49.68979 28.13514
- 56.20241 23.94545
- 31.18923 28.24754
- 67.69225 29.79062
- 23.55535 22.29876
- 55.67679 24.64444
- 28.55048 25.49393
- 24.14786 27.70837
- 42.47740 27.26170
- 63.14416 25.29962
- 56.01077 22.61658
- 21.91515 31.32883
- 35.40591 23.29598
- 56.46014 25.85095
- 40.55150 27.36237
- 21.71111 22.54526
- 29.94185 28.40865
- 76.55133 19.81970
- 36.24921 27.05104
- 55.43160 26.53046
- 48.75538 26.98030
- 45.45938 23.49878
- 41.57688 25.98898
- 55.17125 22.93940
- 35.41448 23.14167
- 36.88115 20.82436
- 44.45453 36.05414
- 57.20137 23.08461
- 52.59177 29.45599
- 54.08459 25.04709
- 48.51428 28.72275
- 22.17651 31.58727
- 43.56249 29.60719
- 28.56742 23.47788
- 45.39733 30.82735
- 40.11140 22.49939
- 46.44631 28.96823
- 36.06642 29.92212
- 30.29033 25.71443
- 35.92196 29.62183
- 53.06952 25.07546
- 65.67793 26.47240
- 43.91989 32.63428
- 63.15732 35.89691
- 70.78002 18.89236
- 58.07750 24.11372
- 28.82403 20.88626
- 43.95267 30.60240
- 47.15775 24.78813
- 72.76805 20.53834
- 29.88184 23.29847
- 56.31945 23.18515
- 63.92690 25.37558
- 55.45586 24.44225
- 39.20491 25.10269
- 46.02750 25.37425
- 31.20204 24.44160
- 72.42475 21.27856
- 73.93593 23.67095
- 25.69724 27.88811
- 46.24666 22.03448
- 19.75632 21.43243
- 32.90972 31.65328
- 24.29984 22.55361
- 21.37466 25.48046
- 53.08102 27.19554
- 51.71619 25.99624
- 82.10258 25.30308
- 27.55140 24.97988
- 35.28401 25.80495
- 28.78350 27.10437
- 37.79290 25.85233
- 44.81091 25.55065
- 28.36307 23.45976
- 30.81308 26.38828
- 23.84566 30.51769
- 58.02867 25.40111
- 44.22382 27.63402
- 36.73311 22.78040
- 34.97739 30.09005
- 26.56001 23.18376
- 31.00518 29.06396
- 39.71215 30.28992
- 56.62149 30.28237
- 44.29298 27.86364
- 62.19078 32.15184
- 75.69354 35.97990
- 29.74094 26.00676
- 33.64277 23.23515
- 26.15642 20.54699
- 53.29250 25.79836
- 45.65686 31.53945
- 47.02932 36.10523
- 49.17053 22.61946
- 41.01243 28.52778
- 38.08636 22.67711
- 40.50317 21.48441
- 81.45242 24.94650
- 46.04637 27.76951
- 35.20837 24.80653
- 37.40834 26.30482
- 55.68801 28.13275
- 57.02114 29.16809
- 60.70621 27.45068
- 29.02393 26.97608
- 53.47975 27.72291
- 23.00122 25.23883
- 63.57340 24.03611
- 63.13391 36.37257
- 64.77770 26.08616
- 49.63202 19.60818
- 31.80328 19.49399
- 27.65714 28.24291
- 45.58329 30.81453
- 43.69298 36.42976
- 27.07073 31.60704
- 35.38172 31.52190
- 34.04135 32.69671
- 30.47870 19.75769
- 44.71175 26.30368
- 25.90396 22.77236
- 55.62400 32.48291
- 23.64825 19.91489
- 64.69763 23.75995
- 24.10224 27.65047
- 43.93715 19.09906
- 20.92866 21.14471
- 56.35803 27.45068
- 32.83191 19.92130
- 33.57491 18.97285
- 51.39979 26.50756
- 35.91443 23.68267
- 29.08776 27.67255
- 53.48770 21.77455
- 32.28868 23.31358
- 59.62776 41.14084
- 66.35298 20.53565
- 71.17516 22.59524
- 68.95668 31.76114
- 50.61098 29.39348
- 32.47020 23.20174
- 40.37709 29.04672
- 60.77362 27.25457
- 51.87677 26.17666
- 27.04370 29.13125
- 61.55968 28.71037
- 45.57977 22.95518
- 44.02950 26.16537
- 34.40152 22.05288
- 39.96531 27.67567
- 55.84456 29.38718
- 35.01607 26.01437
- 63.91591 26.82824
- 79.57355 26.85985
- 36.26843 30.29892
- 59.31089 26.01033
- 42.28652 22.00992
- 35.05846 27.89526
- 31.18635 29.99768
- 58.42965 26.19802
- 54.03744 26.45203
- 18.98587 20.37107
- 43.15795 21.47711
- 31.91582 22.40004
- 41.65393 23.79026
- 55.34468 31.67017
- 30.83594 24.21585
- 23.11364 31.00124
- 40.35013 29.51555
- 49.77633 34.24107
- 53.08469 22.44848
- 43.72293 28.27124
- 40.15939 30.68685
- 27.25035 23.85673
- 58.15061 25.51259
- 31.73202 22.37813
- 38.23582 26.95630
- 70.46463 27.12393
- 78.82369 27.95337
- 34.13841 22.02694
- 23.57778 22.65422
- 44.21422 28.39160
- 66.83015 21.58463
- 43.64449 30.13751
- 48.88550 26.13202
- 52.33360 28.30391
- 45.18157 41.89273
- 78.26361 27.24427
- 29.88389 26.63379
- 30.94319 23.77762
- 56.51968 33.27705
- 39.94894 22.21688
- 31.38151 20.92965
- 39.15090 23.80694
- 36.75032 26.18486
- 30.35745 25.90498
- 45.89886 25.79803
- 22.97356 26.67575
- 36.64776 30.95431
- 37.43784 36.03451
- 37.88910 20.43014
- 37.80332 25.32069
- 35.87383 36.55644
- 23.28766 23.83804
- 41.42498 28.88880
- 58.98015 24.26709
- 24.99242 24.45415
- 45.78202 32.32184
- 45.28900 33.67970
- 24.19064 23.73958
- 65.40365 23.17002
- 26.47503 31.19049
- 37.23060 23.69885
- 40.83703 31.78726
- 21.67654 22.91531
- 56.20328 30.89455
- 73.45188 32.94969
- 41.50183 29.52258
- 24.15896 27.02866
- 42.72720 22.64554
- 31.43625 22.84349
- 39.86141 24.17527
- 55.18267 25.03010
- 55.07938 23.84948
- 73.46461 19.68267
- 49.08313 35.69100
- 48.68449 26.75326
- 54.58864 25.86462
- 32.95040 36.44769
- 57.21915 28.30972
- 41.24059 23.85056
- 28.98524 23.28421
- 41.50114 33.73705
- 43.35912 25.30764
- 22.55027 29.36313
- 27.63637 24.18665
- 24.86806 26.15232
- 23.34930 22.47438
- 46.52759 25.73626
- 38.98288 29.70823
- 32.32178 26.39903
- 56.43930 29.58057
- 52.63055 28.59816
- 62.44314 29.22467
- 60.73191 25.47479
- 52.86880 38.37063
- 37.45048 21.23562
- 45.62444 29.66516
- 41.21803 26.75888
- 29.48350 20.45625
- 46.45759 26.57750
- 40.22980 23.46263
- 35.34829 22.35871
- 30.86723 22.61507
- 46.32276 23.27721
- 54.15260 25.16281
- 53.32966 19.11416
- 30.43213 33.47223
- 21.74999 23.10042
- 51.50626 22.92780
- 40.49315 22.36288
- 37.15326 27.89680
- 39.19288 26.19343
- 60.54843 25.33996
- 40.67981 24.81465
- 40.22503 23.39227
- 25.43711 25.12216
- 55.47331 31.34918
- 59.09021 26.29375
- 34.10491 27.36621
- 34.37518 28.92030
- 42.31397 30.55879
- 39.98724 31.80141
- 49.89564 26.79459
- 26.59876 19.45114
- 39.04950 25.85431
- 54.55610 25.57969
- 52.98590 26.10389
- 28.26060 25.42799
- 29.60006 26.94916
- 22.08088 27.80820
- 51.24027 26.79131
- 42.96648 35.57131
- 22.15670 18.28610
- 27.46471 45.34389
- 54.31407 33.08023
- 33.02283 27.22304
- 51.14024 24.84439
- 31.63079 33.92747
- 26.24003 58.46019
- 42.09502 26.09479
- 27.66505 22.52645
- 52.68118 27.07099
- 42.37960 24.85478
- 37.54313 24.87599
- 43.01623 30.52789
- 37.91853 26.33468
- 44.17362 28.55548
- 45.33204 30.91687
- 52.56293 28.79118
- 37.21896 23.54102
- 28.09818 23.80765
- 60.81037 28.01500
- 81.05304 19.05995
- 69.97036 20.01497
- 41.15605 34.93174
- 68.36251 23.10081
- 39.26193 22.11617
- 29.69093 24.50141
- 40.52842 25.50279
- 30.91302 27.96096
- 37.80699 29.54781
- 67.56905 31.13175
- 53.25386 33.45877
- 38.15878 31.60473
- 23.46046 28.95935
- 27.77209 23.25381
- 30.92026 24.63706
- 36.23157 20.23759
- 37.07129 21.28394
- 34.07756 26.81417
- 29.61593 28.31304
- 32.72098 27.89622
- 61.11371 25.24639
- 50.54263 20.37285
- 41.56782 28.46119
- 26.11217 24.27699
- 35.25266 24.89300
- 33.40608 25.25724
- 79.66995 15.21701
- 57.13734 24.56645
- 52.95081 31.49002
- 51.46670 30.03681
- 39.37912 29.47748
- 71.60168 29.50156
- 59.12662 28.23213
- 50.87476 24.65928
- 52.67663 31.46514
- 23.06647 25.85981
- 33.53777 20.45197
- 40.63812 33.96489
- 42.77290 22.80973
- 49.28024 25.32790
- 33.26269 28.23219
- 29.74569 30.54155
- 47.34192 27.70290
- 80.76579 25.70749
- 62.95430 24.10388
- 31.36708 23.52038
- 23.39756 22.41462
- 41.58252 25.48043
- 36.54170 33.87073
- 40.00033 16.96053
- 58.10562 25.77635
- 52.11137 26.98397
- 56.91456 27.24343
- 47.97594 28.69994
- 33.09406 27.44111
- 49.22106 26.35344
- 45.73891 25.21268
- 37.13081 21.33042
- 52.90884 24.07418
- 42.49667 26.30556
- 60.81374 32.04345
- 25.65456 21.18742
- 62.75386 31.47147
- 47.73567 33.96991
- 32.60075 34.94423
- 56.99292 27.52372
- 48.79374 29.38628
- 40.19805 25.35993
- 78.38822 29.46423
- 37.27869 25.09015
- 57.47466 30.70793
- 35.42958 28.55212
- 44.49937 25.45300
- 36.25600 28.19482
- 61.01008 35.87104
- 64.61303 33.28117
- 49.91383 25.10920
- 29.35288 24.17736
- 45.67369 25.12368
- 31.40035 21.31946
- 49.13794 26.45360
- 43.83834 27.40322
- 64.53794 24.01352
- 68.43014 32.70878
- 40.98285 20.55172
- 42.71057 24.38935
- 24.84875 26.15615
- 46.89653 24.86133
- 44.47789 24.82950
- 47.70465 28.62602
- 53.46058 29.85526
- 47.47699 23.94518
- 32.64402 27.20224
- 20.38963 22.70149
- 68.86426 19.81621
- 35.72066 24.47809
- 59.60039 31.69577
- 52.16699 26.02872
- 53.30722 23.44785
- 58.28852 30.03706
- 20.97854 29.74651
- 36.47624 33.19249
- 26.74878 27.57238
- 41.44547 26.32236
- 29.58364 25.77652
- 40.52393 22.71014
- 34.86628 28.60414
- 72.82124 24.59530
- 36.17020 31.35266
- 44.98027 23.51846
- 39.92309 28.36976
- 26.39613 20.89233
- 37.86704 23.31549
- 29.20308 23.49578
- 45.15887 35.57963
- 36.92703 21.83052
- 56.34293 20.55390
- 44.92657 24.09017
- 37.51007 27.97622
- 40.08890 26.53310
- 66.48486 26.84477
- 76.36312 19.12098
- 41.76863 28.49602
- 43.54191 22.47352
- 58.53230 23.65549
- 61.26342 34.03914
- 40.67457 29.59000
- 28.68782 24.00571
- 59.07816 26.37625
- 48.43925 27.06631
- 24.38647 18.88834
- 54.42330 25.25450
- 40.27098 25.82104
- 45.86077 35.17492
- 24.99284 20.21561
- 35.13303 28.55774
- 41.87684 26.36686
- 43.63938 30.21256
- 26.41563 26.25695
- 25.16920 26.09072
- 37.39686 33.83508
- 40.32570 23.81549
- 57.35052 23.73345
- 26.84973 24.46207
- 49.35000 28.47002
- 36.06802 25.09165
- 75.92164 26.05036
- 22.48510 23.24938
- 35.45687 23.38356
- 28.06145 30.99933
- 26.25515 24.44475
- 35.64301 25.39837
- 26.64653 21.23040
- 45.37849 35.30793
- 37.51152 22.75663
- 51.91544 26.70491
- 46.87006 24.36511
- 72.80836 31.83121
- 31.13543 22.93118
- 37.74808 28.81083
- 36.06805 27.00199
diff --git a/data/bminz.txt.gz b/data/bminz.txt.gz
new file mode 100644
index 0000000..8abe188
Binary files /dev/null and b/data/bminz.txt.gz differ
diff --git a/data/car.all.R b/data/car.all.R
deleted file mode 100644
index d1f580c..0000000
--- a/data/car.all.R
+++ /dev/null
@@ -1,362 +0,0 @@
-"car.all"<-
-structure(.Data = list(Length = c(177, 191, 193, 176, 175, 186, 189, 197, 197,
- 192, 198, 221, 206, 191, 191, 177, 187, 192, 212, 179, 183, 177, 198,
- 194, 203, 183, 185, 176, 159, 179, 192, 191, 163, 172, 181, 193, 170,
- 175, 169, 141, 211, 180, 177, 188, 177, 199, 150, 171, 163, 185, 169,
- 149, 178, 168, 184, 200, 197, 205, 203, 220, 164, 179, 194, 176, 155,
- 177, 172, 170, 175, 187, 162, 184, 161, 186, 175, 178, 170, 172, 188,
- 167, 172, 180, 178, 175, 181, 171, 199, 180, 172, 169, 184, 188, 189,
- 146, 178, 175, 178, 182, 174, 170, 190, 182, 167, 159, 163, 158, 158,
- 172, 180, 190, 188), Wheel.base = c(102, 109, 106, 100, 101, 109, 105,
- 111, 111, 108, 108, 122, 114, 108, 108, 111, 103, 101, 116, 101, 103,
- 96, 108, 110, 109, 103, 100, 112, 94, 97, 104, 119, 99, 97, 103, 106,
- 97, 119, 94, 90, 114, 101, 99, 106, 100, 113, 93, 96, 97, 107, 98, 91,
- 101, 94, 104, 113, 111, 109, 109, 117, 97, 101, 107, 110, 89, 99, 98,
- 96, 105, 110, 95, 102, 94, 102, 88, 97, 97, 103, 104, 96, 96, 100, 93,
- 105, 108, 97, 111, 103, 99, 95, 99, 105, 109, 90, 102, 97, 97, 102, 99,
- 96, 106, 102, 94, 97, 93, 97, 97, 97, 97, 104, 109), Width = c(67, 69,
- 71, 67, 65, 69, 69, 72, 72, 71, 73, 77, 73, 72, 72, 77, 68, 73, 75, 66,
- 68, 71, 71, 74, 69, 68, 69, 72, 66, 69, 69, 72, 67, 67, 67, 70, 66, 72,
- 66, 63, 78, 68, 68, 71, 68, 73, 63, 65, 67, 68, 67, 66, 67, 63, 69, 72,
- 72, 73, 71, 78, 66, 67, 68, 72, 66, 67, 66, 67, 67, 69, 65, 67, 63, 67,
- 67, 67, 71, 67, 69, 66, 65, 67, 67, 68, 68, 67, 72, 67, 66, 68, 67, 69,
- 68, 60, 67, 65, 67, 67, 69, 65, 67, 69, 64, 66, 63, 66, 66, 66, 73, 67,
- 69), Height = c(47.5, 50, 51.5, 50.5, 49.5, 51, 49.5, 50.5, 51, 50.5,
- 48.5, 52.5, 51, 49, 49, 68.5, 49, 46.5, 52.5, 50, 51, 43.5, 51, 60, 51,
- 51, 49, 60.5, 50, 47, 51, 61, 51, 51, 51, 51, 49.5, 66.5, 51.5, 52, 52,
- 49, 47, 50.5, 49.5, 49, 48.5, 49.5, 46.5, 49.5, 48, 45, 47, 50, 50.5,
- 50.5, 50.5, 50.5, 49, 53, 49.5, 49.5, 51, 61.5, 43.5, 48.5, 49, 45.5,
- 50.5, 52, 49, 50.5, 50, 49.5, 65.5, 46.5, 45, 58, 49.5, 46, 49, 49.5,
- 65.5, 51, 52, 47, 50.5, 48.5, 50, 46, 50.5, 52, 50, 50.5, 49, 49, 46,
- 50.5, 47, 49.5, 50.5, 46.5, 49.5, 47, 49.5, 50.5, 51, 51, 70.5, 52.5,
- 50.5), Front.Hd. = c(3.5, 2, 2.5, 4, 2, 3, 4, 6, 5, 5.5, 3.5, 5, 6, 3,
- 3, 5, 3.5, 3.5, 5, 4, 4, 2, 4.5, 4.5, 4, 4, 3.5, 4.5, 3, 3, 4, 4, 3, 4,
- 3.5, 3.5, 4.5, 5, 3.5, 4, 3.5, 3.5, 3, 4, 3.5, 3.5, 2.5, 3.5, 3, 4.5,
- 3.5, 1.5, 1.5, 2.5, 3.5, 2.5, 3, 4, 3, 4.5, 4, 3.5, 3, 5, 3.5, 2, 4,
- 1.5, 2, 3, 3.5, 4, 4, 1.5, 4, 3, 3, 4, 2, 4, 3, 3.5, 3.5, 4, 2.5, 3.5,
- 4, 3.5, 5, 3.5, 3.5, 2.5, 2, 2.5, 2, 2.5, 2, 3, 2, 4, 2, 2.5, 3, 2, 3,
- 3.5, 3, 3.5, 5, 3.5, 2.5), Rear.Hd = c(1.5, 2, 3, 1, 1, 2.5, 2.5, 4.5,
- 3.5, 3.5, 2, 3.5, 4, 2, 2, 4.5, 0.5, 0.5, 2.5, 3, 3, -2, 3.5, 4, 1.5,
- 2.5, 0.5, 4.5, 2, 0, 1.5, 4, 0.5, 2.5, 3, 2, 2, 3.5, 1, 3, 2, 0.5, 0, 2,
- 1.5, 0.5, 1.5, 1, 0, 2, 2.5, -2, 0, 1.5, 2.5, 1.5, 2, 3, 0.5, 3, 2.5, 2,
- 2.5, 5.5, -2, 2, 2.5, -2, 0.5, 1.5, 2, 2.5, 3, 1.5, 4.5, 0, -2, 4.5,
- 1.5, 0, 2, 2, 5, 1.5, 1, 0, 4, 1, 2.5, 0, 2, 2.5, 1.5, 0.5, 2, 2, 0, 2,
- 0, 2, 1.5, 0, 1.5, 0, 2, 2, 2, 2.5, 9, 2, 3), Frt.Leg.Room = c(41.5,
- 41.5, 41.5, 42, 42, 42, 42, 42, 41, 41, 41.5, 43, 42, 42, 42, 42, 42,
- 41.5, 41, 41, 41.5, 42, 42, 41, 42, 41, 41.5, 41.5, 40.5, 41, 41, 40.5,
- 41, 41.5, 41, 42, 41, 42, 41, 40.5, 41.5, 41, 41.5, 42, 41, 41.5, 41,
- 40.5, 41.5, 42, 41, 42.5, 42.5, 41, 41, 41.5, 43, 41, 42, 41, 41.5,
- 40.5, 41.5, 41, 40.5, 41.5, 40.5, 42, 44, 42.5, 40.5, 41, 40, 40, 40.5,
- 41, 42, 40.5, 41.5, 41, 40, 40.5, 41, 41, 42, 41.5, 42, 41.5, 41.5,
- 43.5, 41.5, 42, 42, 40.5, 41, 41, 42, 42, 42, 40.5, 41, 42.5, 40.5, 42,
- 42, 41.5, 41, 41, 39, 41.5, 42), Rear.Seating = c(26.5, 28.5, 31, 28,
- 25.5, 27, 28, 30.5, 28.5, 27.5, 26.5, 32, 30, 28, 29, 28, 27.5, 24, 28,
- 26.5, 26.5, -2, 30, 32.5, 31.5, 30.5, 26, 27, 24.5, 22.5, 31, 31, 26,
- 25, 30.5, 30, 27.5, 30, 26.5, 26, 29, 24, 23.5, 29, 27.5, 28, 27.5,
- 25.5, 24.5, 27, 27.5, -2, 23.5, 26, 31, 29.5, 29, 29.5, 28.5, 31.5, 27,
- 27, 29, 27.5, -2, 26, 26.5, -2, 26, 27, 27, 29.5, 26.5, 28, -1, 21.5,
- -2, 28.5, 29, 21, 24.5, 26.5, -1, 29, 29.5, 23, 29.5, 26.5, 25.5, 18,
- 27.5, 31, 29.5, 23.5, 27.5, 27.5, 22.5, 28.5, 23, 26, 27.5, 23, 25, 26,
- 26, 27, 27, 28, 37, 29.5, 29.5), Frt.Shld = c(53, 55.5, 56.5, 52.5, 52,
- 54.5, 56.5, 58.5, 59, 58, 58, 60.5, 59.5, 58, 57.5, 61.5, 55.5, 58, 61,
- 53.5, 54.5, 54, 58.5, 60.5, 56, 54, 56, 58.5, 54, 56, 56, 58, 51.5,
- 54.5, 54, 57.5, 53.5, 60, 51.5, 52, 61.5, 55.5, 54.5, 57.5, 53, 59,
- 50.5, 53, 51, 54.5, 53.5, 53, 52.5, 52, 57, 57.5, 57, 57.5, 56, 62, 52,
- 55, 55.5, 57.5, 50.5, 55, 54, 53, 53.5, 56, 52, 55, 52, 53.5, 56.5,
- 53.5, 56.5, 55.5, 56.5, 52, 52.5, 55, 57, 55.5, 55.5, 54, 59, 55, 53.5,
- 55.5, 53, 57, 55, 51, 54, 53.5, 53, 54.5, 51.5, 53, 55, 52.5, 53, 53.5,
- 51.5, 53, 53, 53, 61.5, 54, 56.5), RearShld = c(52, 55.5, 55, 52, 51.5,
- 55.5, 56, 58.5, 58.5, 56.5, 56.5, 60, 58.5, 57, 56.5, 50.5, 55, 55.5,
- 61, 53.5, 55, -2, 56.5, 62, 55.5, 53.5, 55, 41.5, 52.5, 54, 55.5, 60.5,
- 51, 53.5, 54.5, 56.5, 52.5, 62.5, 51.5, 51, 61.5, 54.5, 52, 57.5, 54,
- 59.5, 50, 52.5, 47.5, 54, 53, -2, 50.5, 51.5, 56.5, 57, 56, 57.5, 57.5,
- 62, 52, 55, 55.5, 43, -2, 52.5, 54, -2, 53, 56, 52, 55, 52.5, 53, 59,
- 50.5, -2, 56.5, 55.5, 49.5, 52.5, 54, 58.5, 55, 54.5, 52, 59, 54, 53,
- 51.5, 53, 57, 54, 50.5, 53.5, 53.5, 51, 53.5, 48, 52.5, 54.5, 50.5,
- 52.5, 51, 51, 54, 53, 53.5, 39.5, 53, 56.5), Luggage = c(16, 14, 17, 10,
- 12, 12, 16, 16, 16, 15, 14, 19, 16, 14, 14, -2, 14, 12, 20, 14, 14, -2,
- 15, -2, 17, 14, 14, -2, 12, 17, 16, -2, 15, 13, 14, 17, 10, -2, 18, 12,
- 22, 12, 12, 17, 13, 15, 10, 11, 11, 14, 12, -2, 11, 11, 14, 15, 14, 19,
- 14, 22, 13, 15, 15, -2, -2, 15, 13, -2, 12, 15, 15, 11, 11, 12, -2, 14,
- -2
- , -3, 14, 7, 12, 14, -2, 14, 11, 10, 15, 13, 18, 12, 14, 18, 12, 9, 14,
- 15, 10, 12, 13, 11, 12, 11, 13, 19, 10, 18, 18, 17, -2, 14, 17), Weight
- = c(2700, 3265, 2935, 2670, 2895, 3640, 2880, 3350, 3325, 3320, 3465,
- 4285, 3545, 3480, NA, 4025, 2655, 3110, 3855, 2485, NA, 3280, 3195,
- 3630, 3570, 2975, 2975, 3385, 2270, 2935, 3080, 3735, 2300, 2670, 2940,
- 3145, 2560, 3665, 2345, 1845, 3850, 2850, 2695, 3015, 2750, 3610, 1695,
- 2255, 2455, 2920, 2260, 2170, 2710, 2345, 2885, 4000, 3930, 3695, 3780,
- 4040, NA, 2780, 3480, 3735, 2210, 2690, 2440, 2790, 3020, 3315, 2285,
- 2745, 2185, 3110, 3415, 2775, 3350, 3185, 3200, 2390, 2275, 2920, 3690,
- 2575, 3000, 2840, 3360, 2770, 2350, 2900, 2775, 3065, 3295, 1900, 2935,
- 2295, 2485, 2920, 2885, 2390, 3480, 3470, 2075, 2680, 2190, 2270, 2215,
- 2330, 3460, 2985, 3140), Tires = structure(.Data = c(16, 20, 20, 8, 17,
- 28, 13, 23, 23, 22, 22, 29, 22, 22, NA, 23, 18, 25, 23, 14, NA, 30, 19,
- 22, 19, 18, 18, 19, 5, 20, 19, 22, 7, 12, 18, 20, 16, 26, 8, 1, 26, 19,
- 12, 22, 12, 22, 2, 8, 10, 12, 8, 10, 16, 5, 12, 25, 21, 22, 26, 26, NA,
- 12, 17, 22, 10, 12, 8, 20, 11, 17, 8, 12, 5, 17, 23, 16, 27, 18, 21, 12,
- 8, 17, 19, 11, 11, 12, 25, 18, 8, 17, 11, 17, 16, 6, 8, 8, 12, 12, 24,
- 4, 17, 27, 3, 15, 8, 10, 8, 8, 9, 12, 11), .Label = c("145", "145/80",
- "155", "155/65", "155/80", "165/65", "165/80", "175/70", "185",
- "185/60", "185/65", "185/70", "185/75", "185/80", "195/50", "195/60",
- "195/65", "195/70", "195/75", "205/60", "205/65", "205/70", "205/75",
- "215/50", "215/65", "215/70", "225/50", "225/60", "225/75", "275/40"),
- class = "factor"), Steering = structure(.Data = c(1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, NA, 1, 1, 1, 1, 16, NA, 1, 1, 1, 1, 1, 1, 1, 14, 1,
- 1, 1, 20, 1, 1, 1, 14, 1, 10, 4, 1, 1, 1, 1, 1, 1, 3, 17, 1, 1, 12, 6,
- 1, 15, 1, 1, 1, 1, 1, 1, NA, 1, 1, 1, 2, 1, 5, 9, 1, 1, 6, 1, 15, 1, 13,
- 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 18, 1, 1, 19, 1, 1, 1, 1, 11, 1, 1, 1, 1,
- 1, 20, 1, 1, 8, 1, 7, 1, 12, 12, 1, 1, 1), .Label = c("", "0.68 man.",
- "0.72 man.", "0.78 man.", "0.80 man.", "0.81 man.", "0.82 man.",
- "0.83 man.", "0.84 man.", "0.85 man.", "0.86 man.", "0.87 man.",
- "0.89 man.", "0.90 man.", "0.93 man.", "0.95 man.", "1.00 man.",
- "1.01 man.", "1.05 man.", "1.06 man."), class = "factor"), Turning = c(
- 37, 42, 39, 35, 35, 39, 41, 43, 42, 41, 41, 44, 43, 42, NA, 42, 38, 41,
- 42, 38, NA, 42, 42, 42, 43, 39, 39, 42, 32, 38, 42, 47, 40, 38, 41, 39,
- 36, 42, 37, 33, 45, 40, 38, 42, 39, 38, 34, 35, 37, 41, 34, 32, 34, 35,
- 41, 42, 40, 42, 43, 45, NA, 39, 39, 39, 33, 36, 36, 37, 34, 37, 36, 39,
- 37, 41, 36, 38, 38, 38, 42, 38, 37, 39, 38, 37, 39, 39, 43, 39, 35, 36,
- 37, 40, 42, 32, 37, 35, 36, 39, 39, 36, 36, 40, 35, 34, 34, 35, 35, 35,
- 37, 37, 37), Disp. = c(112, 163, 141, 121, 152, 209, 151, 231, 231, 189,
- 231, 307, 273, 273, NA, 262, 133, 191, 305, 133, NA, 350, 151, 191, 202,
- 153, 153, 153, 90, 135, 153, 202, 135, 153, 181, 180, 97, 182, 114, 81,
- 302, 140, 133, 153, 141, 232, 61, 97, 97, 132, 91, 97, 125, 90, 143,
- 274, 242, 232, 302, 302, NA, 133, 180, 181, 97, 133, 113, 80, 159, 181,
- 97, 122, 90, 181, 143, 146, 180, 146, 180, 97, 97, 146, 146, 116, 132,
- 107, 231, 138, 98, 165, 121, 121, 163, 73, 135, 109, 109, 122, 132, 97,
- 180, 180, 89, 109, 109, 109, 109, 109, 129, 141, 141), HP = c(130, 160,
- 130, 108, 168, 208, 110, 165, 165, 101, 165, 140, 180, 180, NA, 150, 95,
- 140, 170, 95, NA, 250, 110, 120, 150, 150, 150, 100, 81, 150, 100, 150,
- 93, 150, 141, 150, 113, 145, 90, 63, 150, 88, 110, 90, 98, 140, 55, 102,
- 95, 125, 92, 108, 140, 81, 110, 278, 250, 140, 225, 150, NA, 110, 158,
- 150, 116, 110, 103, 160, 158, 177, 82, 102, 81, 142, 107, 140, 180, 138,
- 160, 90, 90, 138, 106, 120, 120, 92, 165, 160, 74, 165, 128, 130, 160,
- 73, 130, 90, 97, 115, 130, 102, 190, 200, 78, 158, 81, 105, 100, 100,
- 90, 114, 114), Trans1 = structure(.Data = c(3, 3, 3, 3, 3, 3, 1, 1, 1,
- 1, 1, 1, 1, 1, NA, 3, 3, 3, 1, 3, NA, 4, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1,
- 3, 3, 1, 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1,
- 1, 1, 1, 1, NA, 3, 1, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 3, 1, 3, 3,
- 3, 3, 1, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3,
- 2, 3, 3, 3, 2, 3, 3), .Label = c("", "man.4", "man.5", "man.6"), class
- = "factor"), Gear.Ratio = structure(.Data = c(39, 26, 40, 38, 28, 19,
- 1, 1, 1, 1, 1, 1, 1, 1, NA, 3, 21, 8, 1, 6, NA, 2, 1, 1, 1, 1, 1, 17,
- 35, 5, 1, 1, 6, 5, 1, 1, 45, 7, 11, 9, 1, 14, 25, 1, 6, 1, 35, 31, 37,
- 18, 36, 40, 44, 35, 12, 1, 1, 1, 1, 1, NA, 25, 1, 30, 46, 25, 27, 23,
- 40, 1, 20, 30, 35, 1, 1, 34, 32, 1, 24, 43, 25, 16, 1, 33, 1, 40, 1, 8,
- 10, 22, 29, 35, 26, 28, 15, 30, 41, 14, 4, 29, 1, 42, 29, 25, 29, 39,
- 40, 16, 47, 13, 13), .Label = c("", "1.67", "2.07", "2.49", "2.51",
- "2.55", "2.58", "2.60", "2.61", "2.64", "2.66", "2.68", "2.71", "2.73",
- "2.74", "2.75", "2.76", "2.78", "2.80", "2.81", "2.83", "2.84", "2.86",
- "2.90", "2.94", "2.95", "3.00", "3.02", "3.03", "3.04", "3.05", "3.07",
- "3.08", "3.10", "3.12", "3.13", "3.18", "3.25", "3.26", "3.27", "3.29",
- "3.30", "3.38", "3.46", "3.47", "3.50", "4.11"), class = "factor"),
- Eng.Rev = structure(.Data = c(50, 26, 42, 46, 33, 14, 1, 1, 1, 1, 1, 1,
- 1, 1, NA, 3, 20, 5, 1, 7, NA, 2, 1, 1, 1, 1, 1, 12, 45, 6, 1, 1, 13, 7,
- 1, 1, 58, 4, 17, 29, 1, 10, 28, 1, 8, 1, 56, 43, 49, 22, 48, 54, 57, 45,
- 16, 1, 1, 1, 1, 1, NA, 28, 1, 27, 59, 28, 38, 24, 43, 1, 30, 32, 45, 1,
- 1, 35, 34, 1, 19, 55, 36, 23, 1, 39, 1, 44, 1, 11, 15, 21, 31, 32, 25,
- 51, 22, 41, 50, 19, 9, 40, 1, 47, 40, 37, 40, 53, 52, 27, 60, 18, 16),
- .Label = c("", "1335", "1630", "2075", "2085", "2130", "2160", "2195",
- "2215", "2225", "2245", "2250", "2280", "2285", "2295", "2305", "2320",
- "2330", "2350", "2375", "2380", "2390", "2395", "2430", "2470", "2505",
- "2510", "2530", "2545", "2565", "2575", "2615", "2625", "2645", "2670",
- "2680", "2685", "2735", "2760", "2765", "2770", "2775", "2780", "2810",
- "2825", "2835", "2840", "2855", "2930", "2935", "2945", "2980", "3000",
- "3010", "3015", "3025", "3115", "3125", "3225", "3370"), class =
- "factor"), Tank = c(13.199999999999999, 18, 21.100000000000001, 15.9,
- 16.399999999999999, 21.100000000000001, 15.699999999999999, 18, 18,
- 16.5, 18.800000000000001, 25, 18, 18.800000000000001, NA, 27, 15.6,
- 15.5, 25, 13.6, NA, 20, 17.100000000000001, 20, 16, 14, 14, 20,
- 13.199999999999999, 14, 16, 20, 13, 14, 16, 17, 13.199999999999999, 21,
- 13, 10, 18, 15.4, 15.1, 16, 15.4, 19, 10.6, 13.199999999999999, 12.4,
- 17, 11.9, 11.9, 15.9, 11.9, 15.9, 22.5, 22.5, 18.600000000000001,
- 22.100000000000001, 18, NA, 15.9, 18.5, 19.600000000000001, 11.9, 15.9,
- 14.5, 18.5, 14.5, 18.5, 11.9, 15.9, 11.9, 15.9, 14.199999999999999,
- 15.9, 18.699999999999999, 17.199999999999999, 18.5, 13.199999999999999,
- 13.199999999999999, 16.399999999999999, 17.699999999999999,
- 17.199999999999999, 18, 15.9, 18, 13.6, 13.199999999999999,
- 21.100000000000001, 18, 17.899999999999999, 17, 9.1999999999999993,
- 15.9, 15.9, 15.9, 15.9, 15.9, 13.199999999999999, 18.5, 18.5, 11.9,
- 14.5, 12.4, 14.5, 14.5, 14.5, 15.9, 15.800000000000001,
- 15.800000000000001), Model2 = structure(.Data = c(1, 1, 1, 1, 1, 1, 1,
- 14, 13, 1, 1, 1, 3, 4, NA, 7, 5, 19, 1, 1, NA, 1, 1, 20, 1, 2, 2, 18,
- 12, 1, 1, 21, 16, 17, 15, 6, 1, 1, 1, 1, 9, 1, 1, 1, 10, 8, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Label = c("",
- " Turbo 4 (3)", "Cadillac Fleetwood V8", "Cadillac Seville V8",
- "Chevrolet Corsica 4", "Dodge Monaco V6", "GMC Safari V6",
- "Mercury Cougar V6", "Mercury Grand Marquis V8", "Mercury Topaz 4",
- "Mitsubishi Eclipse", "Mitsubishi Mirage 4", "Oldsmobile 88 Royale V6",
- "Oldsmobile 98 Regency V6", "Plymouth Acclaim V6", "Plymouth Horizon 4",
- "Plymouth Sundance Turbo 4", "Plymouth Voyager 4",
- "Pontiac Firebird V6", "Silhouette V6/ Pontiac Trans Sport V6",
- "Voyager V6/Chrysler Town & Country V6"), class = "factor"), Dist.n =
- structure(.Data = c(19, 19, 17, 18, 6, 3, 19, 19, 20, 20, 20, 8, 19, 20,
- NA, 9, 20, 8, 9, 21, NA, 4, 19, 14, 18, 19, 19, 15, 18, 18, 18, 14, 19,
- 18, 18, 19, 18, 10, 16, 20, 10, 9, 19, 19, 17, 10, 14, 14, 19, 18, 17,
- 18, 17, 18, 17, 10, 7, 18, 9, 9, NA, 19, 7, 7, 6, 16, 19, 4, 9, 8, 17,
- 18, 17, 21, 11, 6, 7, 16, 19, 20, 17, 21, 12, 13, 8, 19, 19, 22, 16, 3,
- 16, 18, 18, 18, 14, 17, 17, 1, 1, 19, 5, 5, 17, 2, 16, 17, 16, 17, 9, 6,
- 7), .Label = c("(62)/38", "(64)/36", "50/[50]", "51/[49]", "52/[48]",
- "53/[47]", "54/[46]", "55/[45]", "56/[44]", "57/[43]", "58/[42]",
- "60/[40]", "62/[38]", "[58]/42", "[59]/41", "[60]/40", "[61]/39",
- "[62]/38", "[63]/37", "[64]/36", "[65]/35", "[66]/34"), class =
- "factor"), Tires2 = structure(.Data = c(3, 4, 4, 3, 3, 4, 3, 3, 3, 3, 4,
- 4, 4, 4, NA, 4, 3, 4, 4, 2, NA, 6, 3, 3, 3, 3, 3, 3, 2, 4, 3, 3, 2, 3,
- 3, 3, 3, 3, 3, 1, 4, 3, 3, 3, 3, 4, 1, 2, 3, 3, 2, 3, 3, 2, 3, 4, 4, 4,
- 4, 4, NA, 3, 4, 3, 3, 3, 2, 4, 4, 4, 2, 3, 2, 4, 3, 4, 5, 3, 4, 2, 2, 3,
- 3, 3, 4, 3, 4, 3, 2, 4, 4, 4, 4, 2, 3, 2, 2, 3, 4, 2, 4, 5, 2, 4, 2, 3,
- 2, 2, 3, 3, 4), .Label = c("R12", "R13", "R14", "R15", "R16", "R17"),
- class = "factor"), Pwr.Steer = structure(.Data = c(29, 34, 35, 14, 31,
- 21, 19, 26, 30, 31, 19, 33, 26, 20, NA, 18, 15, 10, 23, 13, NA, 9, 31,
- 19, 27, 11, 11, 25, 9, 4, 23, 32, 20, 3, 4, 20, 10, 35, 17, 6, 26, 21,
- 17, 14, 21, 8, 1, 22, 2, 26, 18, 1, 7, 10, 23, 12, 30, 11, 31, 28, NA,
- 15, 29, 36, 2, 14, 14, 5, 19, 15, 13, 23, 7, 20, 22, 9, 11, 24, 16, 11,
- 11, 17, 17, 17, 23, 10, 21, 15, 21, 17, 28, 22, 34, 1, 20, 25, 17, 19,
- 16, 22, 31, 15, 12, 14, 1, 18, 13, 13, 31, 18, 20), .Label = c("",
- "0.57 pwr.", "0.58 pwr.", "0.60 pwr.", "0.61 pwr.", "0.62 pwr.",
- "0.63 pwr.", "0.64 pwr.", "0.66 pwr.", "0.67 pwr.", "0.68 pwr.",
- "0.69 pwr.", "0.70 pwr.", "0.71 pwr.", "0.72 pwr.", "0.73 pwr.",
- "0.74 pwr.", "0.75 pwr.", "0.76 pwr.", "0.77 pwr.", "0.78 pwr.",
- "0.79 pwr.", "0.80 pwr.", "0.81 pwr.", "0.82 pwr.", "0.83 pwr.",
- "0.84 pwr.", "0.85 pwr.", "0.86 pwr.", "0.87 pwr.", "0.88 pwr.",
- "0.91 pwr.", "0.93 pwr.", "0.96 pwr.", "0.97 pwr.", "1.06 pwr."), class
- = "factor"), .empty. = structure(.Data = c(1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, NA, 1, 1, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1), .Label = "", class = "factor"), Disp2 = c(1.8,
- 2.7000000000000002, 2.2999999999999998, 2, 2.5, 3.5, 2.5,
- 3.7999999999999998, 3.7999999999999998, 3.1000000000000001,
- 3.7999999999999998, 5, 4.5, 4.5, NA, 4.2999999999999998,
- 2.2000000000000002, 3.1000000000000001, 5, 2.2000000000000002, NA,
- 5.7000000000000002, 2.5, 3.1000000000000001, 3.2999999999999998, 2.5,
- 2.5, 2.5, 1.5, 2.2000000000000002, 2.5, 3.2999999999999998,
- 2.2000000000000002, 2.5, 3, 3, 1.6000000000000001, 3,
- 1.8999999999999999, 1.3, 5, 2.2999999999999998, 2.2000000000000002, 2.5,
- 2.2999999999999998, 3.7999999999999998, 1, 1.6000000000000001,
- 1.6000000000000001, 2.2000000000000002, 1.5, 1.6000000000000001, 2, 1.5,
- 2.3999999999999999, 4.5, 4, 3.7999999999999998, 5, 5, NA,
- 2.2000000000000002, 3, 3, 1.6000000000000001, 2.2000000000000002, 1.8,
- 1.3, 2.6000000000000001, 3, 1.6000000000000001, 2, 1.5, 3,
- 2.3999999999999999, 2.5, 3, 2.3999999999999999, 3, 1.6000000000000001,
- 1.6000000000000001, 2.3999999999999999, 2.3999999999999999, 2,
- 2.2000000000000002, 1.8, 3.7999999999999998, 2.2999999999999998,
- 1.6000000000000001, 2.7000000000000002, 2, 2, 2.7000000000000002, 1.2,
- 2.2000000000000002, 1.8, 1.8, 2, 2.2000000000000002, 1.6000000000000001,
- 3, 3, 1.5, 1.8, 1.8, 1.8, 1.8, 1.8, 2.1000000000000001,
- 2.2999999999999998, 2.2999999999999998), HP.revs = c(6000, 5900, 5500,
- 5300, 5800, 5700, 5200, 4800, 4800, 4400, 4800, 3200, 4300, 4300, NA,
- 4000, 5200, 4400, 4400, 5200, NA, 4400, 5200, 4200, 5000, 4800, 4800,
- 4800, 5500, 4800, 4800, 4800, 4800, 4800, 5000, 5000, 6500, 4800, 4600,
- 5000, 3200, 4000, 4700, 4400, 4400, 3800, 5700, 5800, 5800, 5200, 6000,
- 6000, 6200, 5500, 4500, 6000, 5600, 3800, 4200, 3200, NA, 4700, 5500,
- 5000, 6500, 4700, 5500, 7000, 5800, 5700, 5000, 5000, 5500, 5000, 5000,
- 5600, 6400, 5600, 5200, 6000, 6000, 5600, 4800, 5200, 5000, 5000, 4800,
- 6200, 5600, 5900, 6000, 6000, 5900, 5600, 5400, 5200, 5200, 5200, 5400,
- 5800, 5600, 6000, 6000, 5600, 5500, 5400, 5400, 5400, 4800, 5400, 5400),
- Trans2 = structure(.Data = c(4, 4, 3, 3, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4,
- NA, 4, 3, 4, 4, 3, NA, 4, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 4, 4,
- 4, 3, 3, 4, 4, 4, 3, 3, 4, 3, 3, 3, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, NA,
- 4, 4, 4, 1, 4, 4, 4, 4, 4, 3, 4, 4, 2, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4,
- 4, 4, 3, 3, 3, 3, 4, 4, 5, 4, 3, 4, 4, 4, 3, 4, 4, 3, 1, 1, 1, 3, 3, 3,
- 4, 4), .Label = c("", "auto 4", "auto.3", "auto.4", "auto.CVT"), class
- = "factor"), Gear2 = structure(.Data = c(42, 36, 45, 45, 35, 31, 30, 5,
- 5, 10, 5, 4, 7, 7, NA, 9, 41, 9, 3, 30, NA, 2, 41, 41, 11, 36, 36, 43,
- 55, 36, 36, 11, 26, 36, 11, 20, 26, 13, 46, 44, 3, 27, 19, 46, 46, 8,
- 59, 54, 13, 33, 48, 1, 44, 26, 24, 14, 17, 10, 6, 6, NA, 19, 28, 23, 1,
- 19, 12, 28, 47, 32, 57, 24, 26, 16, 34, 29, 29, 22, 15, 55, 55, 15, 40,
- 39, 49, 47, 5, 41, 51, 52, 56, 38, 36, 35, 18, 55, 21, 24, 53, 54, 25,
- 37, 58, 1, 1, 1, 50, 50, 60, 18, 29), .Label = c("", "1.81", "1.83",
- "1.96", "1.99", "2.06", "2.08", "2.19", "2.26", "2.33", "2.36", "2.43",
- "2.45", "2.46", "2.53", "2.54", "2.55", "2.57", "2.59", "2.66", "2.69",
- "2.70", "2.71", "2.74", "2.76", "2.78", "2.80", "2.81", "2.83", "2.84",
- "2.85", "2.87", "2.89", "2.90", "2.99", "3.02", "3.03", "3.10", "3.12",
- "3.17", "3.18", "3.21", "3.22", "3.23", "3.25", "3.26", "3.27", "3.28",
- "3.38", "3.41", "3.43", "3.45", "3.52", "3.53", "3.60", "3.62", "3.63",
- "3.72", "3.87", "4.09"), class = "factor"), Eng.Rev2 = structure(.Data
- = c(63, 45, 55, 60, 49, 32, 34, 7, 7, 15, 6, 4, 9, 9, NA, 11, 52, 12,
- 2, 36, NA, 5, 48, 36, 15, 44, 44, 51, 74, 45, 39, 14, 40, 48, 17, 27,
- 41, 16, 61, 71, 3, 29, 24, 53, 58, 10, 79, 73, 26, 40, 67, 1, 64, 42,
- 33, 16, 20, 13, 8, 8, NA, 24, 33, 18, 1, 24, 23, 35, 56, 46, 76, 33, 42,
- 22, 30, 38, 38, 28, 19, 72, 75, 21, 47, 57, 62, 59, 8, 54, 66, 63, 68,
- 49, 43, 65, 25, 75, 36, 33, 70, 73, 31, 50, 78, 1, 1, 1, 69, 69, 77, 22,
- 37), .Label = c(" ", "1410", "1415", "1445", "1450", "1570", "1585",
- "1595", "1645", "1730", "1740", "1810", "1840", "1880", "1925", "1970",
- "1980", "2045", "2050", "2065", "2200", "2210", "2215", "2225", "2245",
- "2255", "2260", "2270", "2285", "2310", "2315", "2325", "2355", "2380",
- "2385", "2400", "2405", "2435", "2465", "2485", "2500", "2520", "2530",
- "2535", "2565", "2575", "2585", "2595", "2600", "2610", "2630", "2670",
- "2695", "2745", "2760", "2780", "2800", "2805", "2810", "2835", "2845",
- "2875", "2890", "2905", "2910", "2980", "2990", "3075", "3110", "3130",
- "3150", "3210", "3220", "3260", "3285", "3310", "3355", "3395", "3755"),
- class = "factor"), Price = c(11950, 24760, 26900, 18900, 24650, 33200,
- 13150, 20225, 16145, NA, 23040, 27400, 26960, 28855, NA, 13790, 10320,
- 10995, 14525, 8620, NA, 31979, 12140, 13995, 25495, 10945, 12495, 11995,
- 6851, 9745, 12995, 15395, 6995, 8845, NA, 15350, 8895, 12267, 7402,
- 6319, 17257, 9456, 11470, 12640, 9483, 14980, 6695, 10125, 10390, 12145,
- 6635, 9410, 13945, 5899, 9999, 38000, 35000, 29422, 29246, 27986, NA,
- 12459, 23300, 14944, 13800, 12279, 6599, 17880, 31600, 39950, 8672,
- 10989, 5899, 17879, 14929, 13249, 27900, 13949, 17899, 12249, 7399,
- 11650, 14799, 15930, 19945, 10855, NA, 10565, 7254, 41990, 16995, 25995,
- 23550, 5866, 11499, 9599, 13071, 11588, 12268, 8748, 21498, 22860, 6488,
- 17900, 7225, 9995, 8695, 9995, 14080, 18450, 21700), Country =
- structure(.Data = c(5, 5, 4, 4, 4, 4, 10, 10, 10, NA, 10, 10, 10, 10,
- NA, 10, 10, 10, 10, 10, NA, 10, 10, 10, 10, 10, 10, 10, 5, 10, 10, 10,
- 10, 10, NA, 10, 10, 10, 10, 7, 10, 10, 10, 10, 10, 10, 5, 6, 5, 6, 6, 5,
- 5, 7, 7, 5, 5, 10, 10, 10, NA, 6, 5, 5, 5, 6, 5, 5, 4, 4, 8, 5, 7, 5, 5,
- 5, 5, 5, 5, 5, 6, 5, 5, 3, 3, 10, NA, 10, 7, 4, 9, 9, 2, 5, 6, 5, 5, 6,
- 5, 6, 5, 5, 5, 4, 1, 8, 8, 4, 4, 9, 9), .Label = c("Brazil", "England",
- "France", "Germany", "Japan", "Japan/USA", "Korea", "Mexico", "Sweden",
- "USA"), class = "factor"), Reliability = structure(.Data = c(5, 5, NA,
- NA, 4, NA, 3, 3, 3, NA, 3, 1, 3, 3, NA, 1, 1, 1, 1, 1, NA, 1, NA, NA, 3,
- 4, 2, 3, NA, 1, 3, 3, 1, 3, NA, 2, 4, 3, 2, 4, 3, 1, 3, 1, 2, 1, NA, 5,
- NA, 5, 5, 5, 5, 2, NA, NA, NA, 2, 1, 3, NA, 4, 5, 5, NA, 5, 5, 5, 3, 1,
- 4, 5, 2, 4, NA, 3, NA, NA, 5, 3, 5, 5, NA, NA, NA, NA, NA, 2, 1, NA, 2,
- NA, NA, NA, 5, 5, NA, 5, NA, 5, 3, 4, 5, NA, NA, NA, 3, 3, NA, 3, 3),
- .Label = c("1", "2", "3", "4", "5"), class = "factor"), Mileage = c(NA,
- 20, NA, 27, NA, NA, 21, NA, 23, NA, NA, NA, NA, NA, NA, NA, 26, NA, 18,
- NA, NA, NA, NA, 18, NA, 25, 22, NA, NA, 27, NA, 18, NA, NA, NA, 22, 33,
- 18, 33, 37, 20, NA, 30, NA, 24, 23, NA, NA, NA, 26, 32, 33, 27, NA, 23,
- NA, NA, NA, NA, NA, NA, 24, 21, 19, NA, NA, 32, NA, NA, NA, 26, 25, NA,
- 21, 20, 24, NA, 20, 22, NA, 33, 21, 19, 24, NA, 26, NA, 23, 28, NA, NA,
- NA, NA, 34, 23, 25, 28, 27, NA, 29, 23, NA, 35, NA, NA, NA, NA, 26, NA,
- 23, NA), Type = structure(.Data = c(4, 3, 3, 1, 1, 3, 3, 2, 2, NA, 3, 2,
- 2, 3, NA, 6, 1, 5, 2, 1, NA, 5, 3, 6, 3, 1, 3, 6, 4, 5, 3, 6, 4, 1, NA,
- 3, 4, 6, 4, 4, 2, 5, 5, 3, 1, 3, 4, 4, 5, 1, 4, 5, 5, 4, 3, 3, 3, 3, 3,
- 2, NA, 1, 3, 6, 5, 5, 4, 5, 1, 3, 4, 1, 4, 1, 6, 5, 5, 6, 3, 5, 4, 1, 6,
- 1, 3, 5, NA, 1, 4, 5, 1, 3, 3, 4, 1, 4, 5, 1, 5, 4, 3, 5, 4, 5, 4, 5, 4,
- 4, 6, 1, 3), .Label = c("Compact", "Large", "Medium", "Small", "Sporty",
- "Van"), class = "factor")), row.names = c("Acura Integra",
- "Acura Legend", "Audi 100", "Audi 80", "BMW 325i", "BMW 535i",
- "Buick Century", "Buick Electra", "Buick Le Sabre", "Buick Regal",
- "Buick Riviera", "Cadillac Brougham", "Cadillac De Ville",
- "Cadillac Eldorado", "Cadillac Seville", "Chevrolet Astro",
- "Chevrolet Beretta", "Chevrolet Camaro", "Chevrolet Caprice",
- "Chevrolet Cavalier", "Chevrolet Corsica", "Chevrolet Corvette",
- "Chevrolet Lumina", "Chevrolet Lumina APV", "Chrysler Imperial",
- "Chrysler Le Baron", "Chrysler Le Baron Coupe", "Dodge Caravan",
- "Dodge Colt", "Dodge Daytona", "Dodge Dynasty", "Dodge Grand Caravan",
- "Dodge Omni", "Dodge Shadow", "Dodge Spirit", "Eagle Premier",
- "Eagle Summit", "Ford Aerostar", "Ford Escort", "Ford Festiva",
- "Ford LTD Crown Victoria", "Ford Mustang", "Ford Probe", "Ford Taurus",
- "Ford Tempo", "Ford Thunderbird", "GEO Metro", "GEO Prizm", "GEO Storm",
- "Honda Accord", "Honda Civic", "Honda Civic CRX", "Honda Prelude",
- "Hyundai Excel", "Hyundai Sonata", "Infiniti Q45", "Lexus LS400",
- "Lincoln Continental", "Lincoln Mark VII", "Lincoln Town Car",
- "Mazda 323", "Mazda 626", "Mazda 929", "Mazda MPV", "Mazda MX-5 Miata",
- "Mazda MX-6", "Mazda Protege", "Mazda RX7", "Mercedes-Benz 190",
- "Mercedes-Benz 300E", "Mercury Tracer", "Mitsubishi Galant",
- "Mitsubishi Precis", "Mitsubishi Sigma", "Mitsubishi Wagon",
- "Nissan 240SX", "Nissan 300ZX", "Nissan Axxess", "Nissan Maxima",
- "Nissan Pulsar NX", "Nissan Sentra", "Nissan Stanza", "Nissan Van",
- "Peugeot 405", "Peugeot 505", "Plymouth Laser", "Pontiac Bonneville",
- "Pontiac Grand Am", "Pontiac LeMans", "Porsche 944", "Saab 900",
- "Saab 9000", "Sterling 827", "Subaru Justy", "Subaru Legacy",
- "Subaru Loyale", "Subaru XT", "Toyota Camry", "Toyota Celica",
- "Toyota Corolla", "Toyota Cressida", "Toyota Supra", "Toyota Tercel",
- "Volkswagen Corrado", "Volkswagen Fox", "Volkswagen GTI",
- "Volkswagen Golf", "Volkswagen Jetta", "Volkswagen Vanagon",
- "Volvo 240", "Volvo 740"), class = "data.frame")
diff --git a/data/car.all.rda b/data/car.all.rda
new file mode 100644
index 0000000..486cad7
Binary files /dev/null and b/data/car.all.rda differ
diff --git a/data/chestnz.txt b/data/chestnz.txt
deleted file mode 100644
index c319cfd..0000000
--- a/data/chestnz.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-age nolnor nolr lnor lr
- 16 2 0 0 0
- 17 16 0 0 1
- 18 34 1 2 0
- 19 65 1 4 3
- 20 126 4 6 1
- 21 117 6 4 0
- 22 115 4 12 6
- 23 160 6 13 10
- 24 174 2 8 5
- 25 153 3 10 2
- 26 164 2 18 12
- 27 178 4 21 4
- 28 184 2 11 4
- 29 216 4 17 6
- 30 209 2 23 9
- 31 198 5 19 9
- 32 216 7 19 11
- 33 217 6 14 6
- 34 196 0 16 6
- 35 239 3 16 12
- 36 257 7 22 6
- 37 233 3 20 5
- 38 199 8 23 9
- 39 231 4 20 11
- 40 240 5 21 9
- 41 250 1 16 12
- 42 216 2 16 10
- 43 258 2 14 7
- 44 261 12 15 7
- 45 255 5 10 5
- 46 260 3 18 4
- 47 194 2 18 7
- 48 207 4 14 6
- 49 177 7 13 5
- 50 184 2 14 7
- 51 232 7 9 3
- 52 172 3 15 7
- 53 157 4 12 6
- 54 188 2 10 4
- 55 138 2 4 2
- 56 151 1 12 3
- 57 122 1 6 6
- 58 113 3 7 2
- 59 106 3 4 2
- 60 106 1 8 6
- 61 69 1 3 3
- 62 52 0 3 3
- 63 50 1 5 0
- 64 62 0 1 2
- 65 49 0 2 1
- 66 39 0 6 2
- 67 44 0 2 0
- 68 41 0 3 2
- 69 40 1 1 1
- 70 43 1 0 5
- 71 38 0 2 2
- 72 60 1 3 2
- 73 63 1 9 1
- 74 45 2 1 3
- 75 43 0 3 2
- 76 51 0 4 3
- 77 49 3 1 1
- 78 73 1 2 5
- 79 43 0 7 3
- 80 39 0 6 2
- 81 51 1 2 2
- 82 30 0 5 4
- 83 28 1 2 4
- 84 27 0 5 2
- 85 20 0 3 2
- 86 5 0 0 0
- 87 3 0 0 0
- 88 3 0 0 0
diff --git a/data/chestnz.txt.gz b/data/chestnz.txt.gz
new file mode 100644
index 0000000..4e16957
Binary files /dev/null and b/data/chestnz.txt.gz differ
diff --git a/data/coalminers.txt b/data/coalminers.txt
deleted file mode 100644
index ee09e88..0000000
--- a/data/coalminers.txt
+++ /dev/null
@@ -1,10 +0,0 @@
- BW BnW nBW nBnW age
- 9 7 95 1841 22
- 23 9 105 1654 27
- 54 19 177 1863 32
- 121 48 257 2357 37
- 169 54 273 1778 42
- 269 88 324 1712 47
- 404 117 245 1324 52
- 406 152 225 967 57
- 372 106 132 526 62
diff --git a/data/coalminers.txt.gz b/data/coalminers.txt.gz
new file mode 100644
index 0000000..667dcfe
Binary files /dev/null and b/data/coalminers.txt.gz differ
diff --git a/data/crashbc.R b/data/crashbc.R
deleted file mode 100644
index 4bb5d22..0000000
--- a/data/crashbc.R
+++ /dev/null
@@ -1,18 +0,0 @@
-crashbc <-
-structure(list(Monday = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 12L, 20L,
-5L, 9L, 3L, 5L, 8L, 6L, 11L, 17L, 10L, 4L, 6L, 1L, 0L, 1L, 1L
-), Tuesday = c(0L, 0L, 0L, 0L, 0L, 3L, 3L, 5L, 28L, 4L, 1L, 8L,
-4L, 9L, 2L, 13L, 16L, 23L, 8L, 3L, 2L, 0L, 1L, 0L), Wednesday = c(0L,
-0L, 0L, 0L, 0L, 2L, 5L, 17L, 23L, 6L, 6L, 1L, 5L, 6L, 3L, 13L,
-10L, 14L, 11L, 4L, 2L, 1L, 0L, 0L), Thursday = c(0L, 0L, 0L,
-0L, 1L, 1L, 4L, 17L, 26L, 3L, 2L, 5L, 9L, 4L, 5L, 16L, 12L, 25L,
-9L, 9L, 1L, 3L, 1L, 2L), Friday = c(0L, 0L, 0L, 0L, 0L, 1L, 5L,
-7L, 16L, 7L, 4L, 2L, 5L, 5L, 4L, 14L, 16L, 12L, 7L, 4L, 4L, 2L,
-0L, 1L), Saturday = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 10L, 6L,
-10L, 6L, 5L, 7L, 6L, 7L, 10L, 5L, 2L, 2L, 1L, 0L, 0L, 1L), Sunday = c(0L,
-0L, 2L, 1L, 0L, 0L, 0L, 1L, 5L, 8L, 7L, 14L, 3L, 3L, 7L, 5L,
-4L, 3L, 7L, 1L, 1L, 0L, 0L, 0L)), .Names = c("Monday", "Tuesday",
-"Wednesday", "Thursday", "Friday", "Saturday", "Sunday"), class = "data.frame", row.names = c("0",
-"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
-"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"
-))
diff --git a/data/crashbc.rda b/data/crashbc.rda
new file mode 100644
index 0000000..4fb11f7
Binary files /dev/null and b/data/crashbc.rda differ
diff --git a/data/crashf.R b/data/crashf.R
deleted file mode 100644
index 60d0342..0000000
--- a/data/crashf.R
+++ /dev/null
@@ -1,18 +0,0 @@
-crashf <-
-structure(list(Monday = c(1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 2L,
-1L, 1L, 2L, 2L, 5L, 2L, 0L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 0L),
- Tuesday = c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 2L, 2L, 0L, 4L, 2L,
- 2L, 1L, 1L, 3L, 5L, 2L, 1L, 1L, 2L, 4L, 0L, 1L), Wednesday = c(0L,
- 0L, 2L, 1L, 0L, 1L, 2L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 1L, 2L,
- 2L, 6L, 2L, 1L, 2L, 2L, 0L, 1L), Thursday = c(1L, 5L, 0L,
- 2L, 2L, 2L, 1L, 1L, 6L, 1L, 2L, 2L, 4L, 5L, 0L, 3L, 5L, 4L,
- 4L, 2L, 4L, 0L, 1L, 0L), Friday = c(2L, 6L, 2L, 2L, 0L, 0L,
- 0L, 0L, 1L, 4L, 0L, 4L, 4L, 1L, 4L, 2L, 6L, 1L, 4L, 6L, 2L,
- 1L, 3L, 1L), Saturday = c(1L, 5L, 2L, 3L, 2L, 0L, 0L, 0L,
- 0L, 0L, 4L, 1L, 3L, 4L, 3L, 3L, 3L, 6L, 4L, 3L, 4L, 1L, 6L,
- 5L), Sunday = c(4L, 1L, 2L, 4L, 2L, 0L, 3L, 0L, 1L, 0L, 2L,
- 2L, 2L, 1L, 2L, 4L, 5L, 5L, 1L, 3L, 3L, 1L, 2L, 0L)), .Names = c("Monday",
-"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-), class = "data.frame", row.names = c("0", "1", "2", "3", "4",
-"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
-"16", "17", "18", "19", "20", "21", "22", "23"))
diff --git a/data/crashf.rda b/data/crashf.rda
new file mode 100644
index 0000000..c2dabbb
Binary files /dev/null and b/data/crashf.rda differ
diff --git a/data/crashi.R b/data/crashi.R
deleted file mode 100644
index 51ac861..0000000
--- a/data/crashi.R
+++ /dev/null
@@ -1,21 +0,0 @@
-crashi <-
-structure(list(Monday = c(16L, 13L, 5L, 6L, 7L, 12L, 37L, 66L,
-117L, 67L, 67L, 80L, 75L, 77L, 84L, 112L, 115L, 127L, 63L, 47L,
-25L, 34L, 24L, 28L), Tuesday = c(10L, 11L, 8L, 4L, 6L, 14L, 37L,
-79L, 138L, 81L, 70L, 80L, 85L, 69L, 87L, 136L, 110L, 130L, 69L,
-63L, 46L, 42L, 26L, 23L), Wednesday = c(22L, 15L, 16L, 8L, 11L,
-14L, 32L, 92L, 132L, 68L, 62L, 50L, 86L, 84L, 98L, 134L, 138L,
-140L, 91L, 53L, 62L, 49L, 35L, 20L), Thursday = c(12L, 23L, 13L,
-12L, 16L, 18L, 45L, 75L, 138L, 75L, 76L, 80L, 87L, 90L, 85L,
-156L, 144L, 149L, 97L, 57L, 55L, 53L, 52L, 49L), Friday = c(29L,
-23L, 24L, 19L, 11L, 19L, 32L, 73L, 122L, 72L, 72L, 74L, 94L,
-90L, 104L, 158L, 146L, 155L, 142L, 67L, 68L, 85L, 67L, 61L),
- Saturday = c(55L, 42L, 37L, 31L, 35L, 27L, 21L, 40L, 59L,
- 59L, 84L, 114L, 101L, 105L, 103L, 120L, 106L, 104L, 83L,
- 69L, 70L, 62L, 54L, 69L), Sunday = c(55L, 64L, 64L, 45L,
- 35L, 35L, 36L, 33L, 36L, 45L, 57L, 86L, 93L, 80L, 96L, 103L,
- 90L, 97L, 64L, 52L, 44L, 33L, 18L, 29L)), .Names = c("Monday",
-"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-), class = "data.frame", row.names = c("0", "1", "2", "3", "4",
-"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
-"16", "17", "18", "19", "20", "21", "22", "23"))
diff --git a/data/crashi.rda b/data/crashi.rda
new file mode 100644
index 0000000..8232120
Binary files /dev/null and b/data/crashi.rda differ
diff --git a/data/crashmc.R b/data/crashmc.R
deleted file mode 100644
index ba1ffc1..0000000
--- a/data/crashmc.R
+++ /dev/null
@@ -1,19 +0,0 @@
-crashmc <-
-structure(list(Monday = c(1L, 0L, 0L, 2L, 0L, 1L, 6L, 8L, 12L,
-9L, 12L, 7L, 13L, 5L, 10L, 12L, 10L, 21L, 8L, 3L, 2L, 3L, 0L,
-1L), Tuesday = c(0L, 1L, 0L, 0L, 0L, 0L, 2L, 16L, 21L, 6L, 8L,
-9L, 10L, 4L, 10L, 15L, 13L, 18L, 10L, 6L, 5L, 4L, 0L, 1L), Wednesday = c(0L,
-0L, 1L, 0L, 0L, 1L, 5L, 10L, 16L, 8L, 6L, 5L, 6L, 12L, 10L, 13L,
-21L, 18L, 7L, 11L, 12L, 6L, 1L, 2L), Thursday = c(0L, 1L, 2L,
-0L, 0L, 0L, 4L, 7L, 13L, 6L, 8L, 9L, 7L, 9L, 12L, 18L, 26L, 26L,
-16L, 10L, 5L, 3L, 3L, 1L), Friday = c(5L, 1L, 1L, 0L, 0L, 2L,
-4L, 8L, 18L, 5L, 4L, 8L, 8L, 10L, 14L, 18L, 24L, 24L, 21L, 10L,
-8L, 7L, 5L, 7L), Saturday = c(1L, 3L, 3L, 0L, 0L, 1L, 1L, 1L,
-3L, 7L, 14L, 21L, 24L, 22L, 16L, 24L, 17L, 18L, 13L, 10L, 6L,
-5L, 5L, 7L), Sunday = c(1L, 1L, 1L, 1L, 0L, 2L, 0L, 0L, 3L, 8L,
-7L, 23L, 22L, 16L, 20L, 23L, 21L, 14L, 13L, 6L, 5L, 3L, 3L, 1L
-)), .Names = c("Monday", "Tuesday", "Wednesday", "Thursday",
-"Friday", "Saturday", "Sunday"), class = "data.frame", row.names = c("0",
-"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
-"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"
-))
diff --git a/data/crashmc.rda b/data/crashmc.rda
new file mode 100644
index 0000000..d3ba0d9
Binary files /dev/null and b/data/crashmc.rda differ
diff --git a/data/crashp.R b/data/crashp.R
deleted file mode 100644
index 4b26d34..0000000
--- a/data/crashp.R
+++ /dev/null
@@ -1,18 +0,0 @@
-crashp <-
-structure(list(Monday = c(0L, 2L, 0L, 0L, 2L, 1L, 2L, 3L, 8L,
-4L, 3L, 12L, 7L, 7L, 7L, 15L, 9L, 16L, 1L, 3L, 1L, 1L, 0L, 0L
-), Tuesday = c(0L, 0L, 0L, 0L, 0L, 0L, 2L, 9L, 11L, 10L, 7L,
-6L, 13L, 5L, 4L, 26L, 11L, 10L, 8L, 3L, 4L, 0L, 2L, 1L), Wednesday = c(1L,
-1L, 0L, 0L, 0L, 0L, 5L, 2L, 22L, 4L, 6L, 7L, 9L, 4L, 6L, 27L,
-16L, 11L, 8L, 6L, 6L, 2L, 1L, 1L), Thursday = c(0L, 0L, 1L, 2L,
-0L, 0L, 0L, 5L, 14L, 6L, 5L, 6L, 11L, 10L, 5L, 22L, 11L, 10L,
-7L, 3L, 7L, 2L, 7L, 6L), Friday = c(0L, 1L, 1L, 1L, 1L, 0L, 1L,
-5L, 14L, 6L, 6L, 5L, 7L, 5L, 6L, 19L, 15L, 16L, 19L, 2L, 7L,
-8L, 5L, 3L), Saturday = c(3L, 4L, 2L, 1L, 0L, 0L, 0L, 5L, 3L,
-3L, 9L, 6L, 10L, 5L, 8L, 14L, 11L, 5L, 11L, 5L, 6L, 7L, 5L, 6L
-), Sunday = c(8L, 7L, 3L, 3L, 1L, 1L, 3L, 1L, 1L, 2L, 4L, 3L,
-4L, 2L, 3L, 6L, 3L, 3L, 7L, 4L, 4L, 1L, 0L, 1L)), .Names = c("Monday",
-"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-), class = "data.frame", row.names = c("0", "1", "2", "3", "4",
-"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
-"16", "17", "18", "19", "20", "21", "22", "23"))
diff --git a/data/crashp.rda b/data/crashp.rda
new file mode 100644
index 0000000..0591fdc
Binary files /dev/null and b/data/crashp.rda differ
diff --git a/data/crashtr.R b/data/crashtr.R
deleted file mode 100644
index 7eb0505..0000000
--- a/data/crashtr.R
+++ /dev/null
@@ -1,18 +0,0 @@
-crashtr <-
-structure(list(Monday = c(0L, 1L, 0L, 0L, 3L, 3L, 6L, 8L, 10L,
-10L, 10L, 11L, 4L, 4L, 4L, 5L, 11L, 6L, 3L, 1L, 1L, 1L, 0L, 2L
-), Tuesday = c(1L, 1L, 3L, 0L, 0L, 1L, 3L, 12L, 11L, 9L, 8L,
-6L, 7L, 9L, 7L, 13L, 5L, 5L, 0L, 1L, 1L, 1L, 0L, 2L), Wednesday = c(1L,
-1L, 2L, 2L, 3L, 0L, 2L, 13L, 5L, 7L, 10L, 10L, 7L, 6L, 11L, 7L,
-10L, 9L, 4L, 2L, 1L, 3L, 1L, 0L), Thursday = c(1L, 0L, 1L, 1L,
-4L, 5L, 8L, 7L, 2L, 8L, 8L, 11L, 8L, 10L, 9L, 5L, 7L, 5L, 3L,
-0L, 4L, 3L, 2L, 2L), Friday = c(0L, 2L, 1L, 1L, 2L, 4L, 5L, 8L,
-7L, 10L, 7L, 10L, 7L, 3L, 9L, 11L, 17L, 7L, 10L, 3L, 1L, 2L,
-4L, 3L), Saturday = c(2L, 0L, 3L, 0L, 3L, 1L, 1L, 2L, 3L, 1L,
-6L, 4L, 2L, 7L, 2L, 3L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L), Sunday = c(1L,
-2L, 2L, 3L, 0L, 0L, 2L, 2L, 2L, 3L, 1L, 5L, 3L, 1L, 4L, 1L, 3L,
-4L, 0L, 1L, 2L, 0L, 0L, 0L)), .Names = c("Monday", "Tuesday",
-"Wednesday", "Thursday", "Friday", "Saturday", "Sunday"), class = "data.frame", row.names = c("0",
-"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
-"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"
-))
diff --git a/data/crashtr.rda b/data/crashtr.rda
new file mode 100644
index 0000000..ea6e873
Binary files /dev/null and b/data/crashtr.rda differ
diff --git a/data/enzyme.txt b/data/enzyme.txt
deleted file mode 100644
index aad5404..0000000
--- a/data/enzyme.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-conc velocity
-2 0.0615
-2 0.0527
-0.667 0.0334
-0.667 0.0258
-0.40 0.0138
-0.40 0.0258
-0.286 0.0129
-0.286 0.0183
-0.222 0.0083
-0.222 0.0169
-0.2 0.0129
-0.2 0.0087
diff --git a/data/enzyme.txt.gz b/data/enzyme.txt.gz
new file mode 100644
index 0000000..3879253
Binary files /dev/null and b/data/enzyme.txt.gz differ
diff --git a/data/fibre15.rda b/data/fibre15.rda
new file mode 100644
index 0000000..ba252fc
Binary files /dev/null and b/data/fibre15.rda differ
diff --git a/data/fibre1dot5.rda b/data/fibre1dot5.rda
new file mode 100644
index 0000000..3fe73a7
Binary files /dev/null and b/data/fibre1dot5.rda differ
diff --git a/data/gala.R b/data/gala.R
deleted file mode 100644
index 27cbaec..0000000
--- a/data/gala.R
+++ /dev/null
@@ -1,28 +0,0 @@
-gala <-
-structure(list(Species = c(58, 31, 3, 25, 2, 18, 24, 10, 8, 2,
-97, 93, 58, 5, 40, 347, 51, 2, 104, 108, 12, 70, 280, 237, 444,
-62, 285, 44, 16, 21), Endemics = c(23, 21, 3, 9, 1, 11, 0, 7,
-4, 2, 26, 35, 17, 4, 19, 89, 23, 2, 37, 33, 9, 30, 65, 81, 95,
-28, 73, 16, 8, 12), Area = c(25.09, 1.24, 0.21, 0.1, 0.05, 0.34,
-0.08, 2.33, 0.03, 0.18, 58.27, 634.49, 0.57, 0.78, 17.35, 4669.32,
-129.49, 0.01, 59.56, 17.95, 0.23, 4.89, 551.62, 572.33, 903.82,
-24.08, 170.92, 1.84, 1.24, 2.85), Elevation = c(346, 109, 114,
-46, 77, 119, 93, 168, 71, 112, 198, 1494, 49, 227, 76, 1707,
-343, 25, 777, 458, 94, 367, 716, 906, 864, 259, 640, 147, 186,
-253), Nearest = c(0.6, 0.6, 2.8, 1.9, 1.9, 8, 6, 34.1, 0.4, 2.6,
-1.1, 4.3, 1.1, 4.6, 47.4, 0.7, 29.1, 3.3, 29.1, 10.7, 0.5, 4.4,
-45.2, 0.2, 0.6, 16.5, 2.6, 0.6, 6.8, 34.1), Scruz = c(0.6, 26.3,
-58.7, 47.4, 1.9, 8, 12, 290.2, 0.4, 50.2, 88.3, 95.3, 93.1, 62.2,
-92.2, 28.1, 85.9, 45.9, 119.6, 10.7, 0.6, 24.4, 66.6, 19.8, 0,
-16.5, 49.2, 9.6, 50.9, 254.7), Adjacent = c(1.84, 572.33, 0.78,
-0.18, 903.82, 1.84, 0.34, 2.85, 17.95, 0.1, 0.57, 4669.32, 58.27,
-0.21, 129.49, 634.49, 59.56, 0.1, 129.49, 0.03, 25.09, 572.33,
-0.57, 4.89, 0.52, 0.52, 0.1, 25.09, 17.95, 2.33)), .Names = c("Species",
-"Endemics", "Area", "Elevation", "Nearest", "Scruz", "Adjacent"
-), class = "data.frame", row.names = c("Baltra", "Bartolome",
-"Caldwell", "Champion", "Coamano", "Daphne.Major", "Daphne.Minor",
-"Darwin", "Eden", "Enderby", "Espanola", "Fernandina", "Gardner1",
-"Gardner2", "Genovesa", "Isabela", "Marchena", "Onslow", "Pinta",
-"Pinzon", "Las.Plazas", "Rabida", "SanCristobal", "SanSalvador",
-"SantaCruz", "SantaFe", "SantaMaria", "Seymour", "Tortuga", "Wolf"
-))
diff --git a/data/gala.rda b/data/gala.rda
new file mode 100644
index 0000000..d1637ec
Binary files /dev/null and b/data/gala.rda differ
diff --git a/data/gew.txt b/data/gew.txt
deleted file mode 100644
index 299874c..0000000
--- a/data/gew.txt
+++ /dev/null
@@ -1,21 +0,0 @@
- y1 x1 x2 y2 x3 x4
- 40.05292 1170.6 97.8 2.52813 191.5 1.8
- 54.64859 2015.8 104.4 24.91888 516.0 0.8
- 40.31206 2803.3 118.0 29.34270 729.0 7.4
- 84.21099 2039.7 156.2 27.61823 560.4 18.1
-127.57240 2256.2 172.6 60.35945 519.9 23.5
-124.87970 2132.2 186.6 50.61588 628.5 26.5
- 96.55514 1834.1 220.9 30.70955 537.1 36.2
-131.16010 1588.0 287.8 60.69605 561.2 60.8
- 77.02764 1749.4 319.9 30.00972 617.2 84.4
- 46.96689 1687.2 321.3 42.50750 626.7 91.2
-100.65970 2007.7 319.6 58.61146 737.2 92.4
-115.74670 2208.3 346.0 46.96287 760.5 86.0
-114.58260 1656.7 456.4 57.87651 581.4 111.1
-119.87620 1604.4 543.4 43.22093 662.3 130.6
-105.56990 1431.8 618.3 22.87143 583.8 141.8
-148.42660 1610.5 647.4 52.94754 635.2 136.7
-194.36220 1819.4 671.3 71.23030 723.8 129.7
-158.20370 2079.7 726.1 61.72550 864.1 145.5
-163.09300 2371.6 800.3 85.13053 1193.5 174.8
-227.56340 2759.9 888.9 88.27518 1188.9 213.5
diff --git a/data/gew.txt.gz b/data/gew.txt.gz
new file mode 100644
index 0000000..3f51f76
Binary files /dev/null and b/data/gew.txt.gz differ
diff --git a/data/hspider.R b/data/hspider.R
deleted file mode 100644
index b3143fd..0000000
--- a/data/hspider.R
+++ /dev/null
@@ -1,47 +0,0 @@
-"hspider" <-
-structure(list(WaterCon = c(2.3321, 3.0493, 2.5572, 2.6741, 3.0155,
-3.381, 3.1781, 2.6247, 2.4849, 2.1972, 2.2192, 2.2925, 3.5175,
-3.0865, 3.2696, 3.0301, 3.3322, 3.1224, 2.9232, 3.1091, 2.9755,
-1.2528, 1.1939, 1.6487, 1.8245, 0.9933, 0.9555, 0.9555), BareSand = c(0,
-0, 0, 0, 0, 2.3979, 0, 0, 0, 3.9318, 0, 0, 1.7918, 0, 0, 0, 0,
-0, 0, 0, 0, 3.2581, 3.0445, 3.2581, 3.5835, 4.5109, 2.3979, 3.434
-), FallTwig = c(0, 1.7918, 0, 0, 0, 3.434, 0, 4.2627, 0, 0, 0,
-0, 1.7918, 0, 4.3944, 4.6052, 4.4543, 4.3944, 4.5109, 4.5951,
-4.5643, 0, 0, 0, 0, 0, 0, 0), CoveMoss = c(3.0445, 1.0986, 2.3979,
-2.3979, 0, 2.3979, 0.6931, 1.0986, 4.3307, 3.434, 4.1109, 3.8286,
-0.6931, 1.7918, 0.6931, 0.6931, 0.6931, 0, 1.6094, 0.6931, 0.6931,
-4.3307, 4.0254, 4.0254, 1.0986, 1.7918, 3.8286, 3.7136), CoveHerb = c(4.4543,
-4.5643, 4.6052, 4.6151, 4.6151, 3.434, 4.6151, 3.434, 3.2581,
-3.0445, 3.7136, 4.0254, 4.5109, 4.5643, 3.0445, 0.6931, 3.0445,
-3.0445, 1.6094, 0.6931, 1.7918, 0.6931, 3.2581, 3.0445, 4.1109,
-1.7918, 3.434, 3.434), ReflLux = c(3.912, 1.6094, 3.6889, 2.9957,
-2.3026, 0.6931, 2.3026, 0.6931, 3.4012, 3.6889, 3.6889, 3.6889,
-3.4012, 1.0986, 0.6931, 0, 1.0986, 1.0986, 0, 0, 0, 3.912, 4.0943,
-4.0073, 2.3026, 4.382, 3.6889, 3.6889), Alopacce = c(25, 0, 15,
-2, 1, 0, 2, 0, 1, 3, 15, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 7, 17,
-11, 9, 3, 29, 15), Alopcune = c(10, 2, 20, 6, 20, 6, 7, 11, 1,
-0, 1, 13, 43, 2, 0, 3, 0, 1, 1, 2, 1, 0, 0, 0, 1, 0, 0, 0), Alopfabr = c(0,
-0, 2, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,
-15, 20, 9, 6, 11, 14), Arctlute = c(0, 0, 2, 1, 2, 6, 12, 0,
-0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
- Arctperi = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 7, 5, 0, 18, 4, 1), Auloalbi = c(4,
- 30, 9, 24, 9, 6, 16, 7, 0, 0, 1, 0, 18, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0), Pardlugu = c(0, 1, 1, 1, 1, 0,
- 1, 55, 0, 0, 0, 0, 1, 3, 6, 6, 2, 5, 12, 13, 16, 0, 2, 0,
- 1, 0, 0, 0), Pardmont = c(60, 1, 29, 7, 2, 11, 30, 2, 26,
- 22, 95, 96, 24, 14, 0, 0, 0, 0, 0, 0, 1, 2, 6, 3, 11, 0,
- 1, 6), Pardnigr = c(12, 15, 18, 29, 135, 27, 89, 2, 1, 0,
- 0, 1, 53, 15, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0),
- Pardpull = c(45, 37, 45, 94, 76, 24, 105, 1, 1, 0, 1, 8,
- 72, 72, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), Trocterr = c(57,
- 65, 66, 86, 91, 63, 118, 30, 2, 1, 4, 13, 97, 94, 25, 28,
- 23, 25, 22, 22, 18, 1, 1, 0, 16, 1, 0, 2), Zoraspin = c(4,
- 9, 1, 25, 17, 34, 16, 3, 0, 0, 0, 0, 22, 32, 3, 4, 2, 0,
- 3, 2, 2, 0, 0, 0, 6, 0, 0, 0)), .Names = c("WaterCon", "BareSand",
-"FallTwig", "CoveMoss", "CoveHerb", "ReflLux", "Alopacce", "Alopcune",
-"Alopfabr", "Arctlute", "Arctperi", "Auloalbi", "Pardlugu", "Pardmont",
-"Pardnigr", "Pardpull", "Trocterr", "Zoraspin"), row.names = c("1",
-"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
-"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
-"25", "26", "27", "28"), class = "data.frame")
diff --git a/data/hspider.rda b/data/hspider.rda
new file mode 100644
index 0000000..9bb6717
Binary files /dev/null and b/data/hspider.rda differ
diff --git a/data/hued.rda b/data/hued.rda
new file mode 100644
index 0000000..27342b9
Binary files /dev/null and b/data/hued.rda differ
diff --git a/data/huie.rda b/data/huie.rda
new file mode 100644
index 0000000..32ae9c3
Binary files /dev/null and b/data/huie.rda differ
diff --git a/data/hunua.txt b/data/hunua.txt
deleted file mode 100644
index 4b2d076..0000000
--- a/data/hunua.txt
+++ /dev/null
@@ -1,393 +0,0 @@
-agaaus beitaw corlae cyadea cyamed daccup dacdac eladen hedarb hohpop kniexc kuneri lepsco metrob neslan rhosap vitluc altitude
-0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 90
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 80
-0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 50
-0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 40
-0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 40
-0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 50
-0 1 0 0 0 0 1 0 0 0 1 1 0 1 0 0 1 70
-1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 100
-1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 120
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 60
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 70
-1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 90
-0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 30
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 110
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 40
-1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 50
-1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 60
-0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 40
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 80
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 50
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50
-0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 100
-0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 60
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 20
-0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 140
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 80
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 60
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 50
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 40
-0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 60
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 90
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 140
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 140
-0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 180
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 200
-0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 160
-0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 80
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 200
-0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 90
-0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 60
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 40
-0 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 60
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 75
-0 1 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 78
-0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 60
-1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 60
-0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 60
-0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 100
-0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 1 0 80
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 60
-0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 170
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 140
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 100
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 80
-0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 80
-0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 80
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 70
-0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 90
-0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 70
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 50
-1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 100
-1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1 95
-0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 100
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 90
-0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 90
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 80
-0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 70
-1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 35
-0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 25
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 60
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 35
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 60
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 3
-0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 20
-1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 60
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 220
-0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 200
-1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 160
-0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 140
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 160
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 180
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 40
-1 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 200
-0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 70
-0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 80
-0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 60
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 100
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 150
-1 0 0 1 0 0 0 1 0 0 1 1 0 1 0 0 0 180
-1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 160
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 260
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 115
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 270
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 240
-0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 90
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 100
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 100
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 340
-1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 300
-0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 290
-0 1 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 380
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 240
-1 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 40
-1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 50
-0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 60
-0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 105
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 200
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 140
-0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 60
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 80
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 40
-0 1 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 220
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 80
-1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 120
-0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 200
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 40
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 60
-0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 70
-0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 220
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 160
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 180
-0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 180
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 120
-0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 1 120
-0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 130
-0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 190
-1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 100
-0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 0 1 90
-1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 80
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 220
-0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 1 220
-1 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 190
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 140
-0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 100
-1 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 180
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 100
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 80
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 85
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 80
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 160
-0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 150
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 130
-0 1 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 30
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 160
-0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 160
-0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170
-0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 180
-0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 185
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 180
-0 1 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 140
-0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 130
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 100
-0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 1 1 60
-0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 80
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 110
-0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 200
-0 1 0 1 1 1 0 0 1 0 1 0 0 0 0 1 0 220
-0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 240
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 240
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 240
-0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 80
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 240
-0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 260
-0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 260
-0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 200
-0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 80
-0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 220
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 280
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 200
-0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1 200
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 80
-0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 240
-0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 280
-0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 300
-0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 240
-0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 200
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 160
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 210
-0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 240
-0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 220
-0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 100
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 1 1 0 1 0 0 0 1 1 0 0 0 0 1 60
-0 1 0 0 0 1 1 0 0 0 1 1 0 1 0 0 1 75
-0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 1 0 50
-0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 60
-1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 70
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 90
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 95
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 65
-0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 80
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 100
-0 1 1 1 0 0 0 0 1 0 1 0 0 0 0 1 1 100
-0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 200
-0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 200
-0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 260
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 220
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 180
-0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 180
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 180
-0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 120
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 120
-0 1 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 190
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 180
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 180
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 160
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 200
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 160
-0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 120
-0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 110
-0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 200
-0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 240
-0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 290
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 210
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 200
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 290
-0 1 0 1 1 1 1 0 0 0 1 0 0 0 0 1 0 120
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 300
-0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 240
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 300
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 320
-1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 270
-1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 210
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 120
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 40
-1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 80
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 260
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 200
-0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 130
-1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 150
-0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 170
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 150
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 150
-0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 250
-0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 120
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 180
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 10
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 160
-0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 280
-0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 1 0 210
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 260
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 170
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 80
-0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 60
-0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 100
-1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 160
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 90
-1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 150
-1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 130
-0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 200
-0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 100
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100
-1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 60
-0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 20
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 300
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 300
-1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 450
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 390
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 400
-0 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 400
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 300
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 160
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 230
-0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 200
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 280
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 300
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 400
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 500
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 400
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 500
-0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 600
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 620
-0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 600
-0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600
-0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 20
-0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 100
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 300
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 500
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 660
-0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 360
-0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 360
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 100
-1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 230
-0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 300
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 220
-0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 280
-0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 230
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 220
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 135
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 280
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 140
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 150
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 100
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 600
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 600
-0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 480
-0 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 300
-0 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 200
-0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 245
-0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 245
-0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 260
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 280
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 260
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 320
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 300
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 180
-0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 220
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 170
-0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 200
-0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 180
-0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 150
-0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 160
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 210
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300
-0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 320
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 70
-0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 190
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 370
-0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 420
-0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 400
-0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 340
-0 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 380
-0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 440
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 500
-0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 500
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 180
-0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 300
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 400
-0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 200
-0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 110
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 180
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 300
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 300
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 320
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 130
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 110
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 90
-0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 120
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 300
-0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 180
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 190
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 240
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 20
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
-0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 20
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 8
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 15
-0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 20
-0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 20
-0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 8
-0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 20
-0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 10
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 20
-0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 35
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 8
-0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 20
-0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 20
-0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 45
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 5
-0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 10
-0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 40
diff --git a/data/hunua.txt.gz b/data/hunua.txt.gz
new file mode 100644
index 0000000..84c7377
Binary files /dev/null and b/data/hunua.txt.gz differ
diff --git a/data/huse.rda b/data/huse.rda
new file mode 100644
index 0000000..f0e461c
Binary files /dev/null and b/data/huse.rda differ
diff --git a/data/leukemia.R b/data/leukemia.R
deleted file mode 100644
index 091b145..0000000
--- a/data/leukemia.R
+++ /dev/null
@@ -1,10 +0,0 @@
-`leukemia` <-
-structure(list(time = c(9, 13, 13, 18, 23, 28, 31, 34, 45, 48,
-161, 5, 5, 8, 8, 12, 16, 23, 27, 30, 33, 43, 45), status = c(1,
-1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
-1), x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), .Label = c("Maintained",
-"Nonmaintained"), class = "factor")), .Names = c("time", "status",
-"x"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9",
-"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
-"21", "22", "23"), class = "data.frame")
diff --git a/data/leukemia.rda b/data/leukemia.rda
new file mode 100644
index 0000000..cc0b3b3
Binary files /dev/null and b/data/leukemia.rda differ
diff --git a/data/lirat.txt b/data/lirat.txt
deleted file mode 100644
index d27b396..0000000
--- a/data/lirat.txt
+++ /dev/null
@@ -1,59 +0,0 @@
- N R hb grp
-10 1 4.1 1
-11 4 3.2 1
-12 9 4.7 1
- 4 4 3.5 1
-10 10 3.2 1
-11 9 5.9 1
- 9 9 4.7 1
-11 11 4.7 1
-10 10 3.5 1
-10 7 4.8 1
-12 12 4.3 1
-10 9 4.1 1
- 8 8 3.2 1
-11 9 6.3 1
- 6 4 4.3 1
- 9 7 3.1 1
-14 14 3.6 1
-12 7 4.1 1
-11 9 4.8 1
-13 8 4.7 1
-14 5 4.8 1
-10 10 6.7 1
-12 10 5.2 1
-13 8 4.3 1
-10 10 3.9 1
-14 3 6.3 1
-13 13 4.4 1
- 4 3 5.2 1
- 8 8 3.9 1
-13 5 7.7 1
-12 12 5.0 1
-10 1 8.6 2
- 3 1 11.1 2
-13 1 7.2 2
-12 0 8.8 2
-14 4 9.3 2
- 9 2 9.3 2
-13 2 8.5 2
-16 1 9.4 2
-11 0 6.9 2
- 4 0 8.9 2
- 1 0 11.1 2
-12 0 9.0 2
- 8 0 11.2 3
-11 1 11.5 3
-14 0 12.6 3
-14 1 9.5 3
-11 0 9.8 3
- 3 0 16.6 4
-13 0 14.5 4
- 9 2 15.4 4
-17 2 14.5 4
-15 0 14.6 4
- 2 0 16.5 4
-14 1 14.8 4
- 8 0 13.6 4
- 6 0 14.5 4
-17 0 12.4 4
diff --git a/data/lirat.txt.gz b/data/lirat.txt.gz
new file mode 100644
index 0000000..06db27b
Binary files /dev/null and b/data/lirat.txt.gz differ
diff --git a/data/mmt.R b/data/mmt.R
deleted file mode 100644
index 73ebb91..0000000
--- a/data/mmt.R
+++ /dev/null
@@ -1,328 +0,0 @@
-mmt <-
-c(38.1, 32.4, 34.5, 20.7, 21.5, 23.1, 29.7, 36.6, 36.1, 20.6,
-20.4, 30.1, 38.7, 41.4, 37, 36, 37, 38, 23, 26.7, 27.5, 21.7,
-22.9, 26.2, 36.5, 41.8, 21.5, 19.2, 25, 28.9, 23.2, 31.5, 36.2,
-38.2, 26.4, 20.9, 21.5, 30.2, 33.4, 32.6, 22.2, 21.7, 30, 35.7,
-32.8, 39.3, 25.5, 23, 19.9, 21.3, 20.8, 21.7, 23.8, 29, 23.7,
-21.3, 28.5, 33.6, 34.6, 34.2, 27, 24.2, 19.9, 19.7, 21.5, 30.6,
-30, 19, 19.6, 20.6, 23.6, 17.9, 17.3, 21.4, 24.1, 20.9, 30.1,
-32.6, 21.3, 19.5, 19.9, 21, 25.4, 17.5, 20.4, 26.8, 25.8, 20.9,
-19.4, 25.8, 26.3, 29.6, 30.3, 23.6, 28.4, 20.7, 24.1, 27.3, 23.2,
-18.3, 24.6, 27.4, 20.4, 18.1, 25.2, 19.8, 21, 23.7, 19.6, 18.1,
-20.8, 26, 18.4, 22, 14.4, 19.9, 22.6, 13.7, 15.9, 21.2, 23.7,
-24, 17.2, 23.2, 25.2, 17.2, 16, 15.6, 13.4, 16, 16.8, 14.6, 19.4,
-21, 19.5, 18.5, 13.3, 13.7, 14.3, 14.1, 11.4, 13.6, 16.6, 17.6,
-14.6, 17.2, 14.4, 16.4, 17.3, 17.6, 17.2, 17.7, 14.2, 16.6, 15.7,
-13.7, 14.7, 13.1, 12.9, 15.4, 11.9, 15.2, 15.3, 16.5, 16.1, 11.7,
-11.2, 11.5, 10.8, 16.1, 14.8, 13.6, 13.8, 9.7, 10.7, 11, 15.3,
-15.3, 17, 16, 16.3, 15.7, 14.5, 10.8, 10.5, 13.4, 12.2, 13.2,
-13, 12.4, 13.1, 9.8, 10.5, 13.4, 11, 13.1, 15, 16.7, 16.1, 18.2,
-15.7, 17.7, 15.9, 15.1, 15.2, 14.7, 13.3, 14.5, 11.1, 13.1, 13.7,
-14.6, 12.9, 12.8, 15.2, 14.5, 17.2, 14.5, 14.4, 11, 13.1, 13.6,
-14.6, 12.7, 13.6, 12.7, 15.5, 17.4, 15.2, 14.2, 17.7, 19.2, 12.5,
-14.2, 15.3, 15.7, 17, 19, 13.1, 13.2, 13.2, 15.7, 14.1, 15.6,
-15.5, 15.9, 15.1, 16, 19.4, 21.5, 23.7, 18.7, 23.8, 18, 16.2,
-18.5, 20.6, 18.3, 22.5, 26.9, 19.4, 15.9, 20.5, 21.2, 19.5, 14.7,
-17.6, 15.8, 17.7, 14.3, 16.8, 18.6, 21.9, 21.4, 20.8, 14, 17,
-23, 26.4, 19.6, 22.7, 26.9, 14.7, 15.2, 19.8, 26.9, 20.2, 14.3,
-14.8, 18.5, 21.7, 21.4, 21.8, 18.2, 15.8, 15.3, 18.5, 19.2, 28.5,
-32.2, 21.8, 22.1, 20.7, 17, 24.7, 26.2, 29, 21.6, 17.1, 16.9,
-19.1, 24.7, 25.4, 19.8, 18.2, 16.3, 17, 17.7, 15.5, 14.7, 15.8,
-19.9, 20.4, 23.3, 20.2, 28.8, 31.2, 17.4, 18.5, 26.8, 34.3, 30.1,
-20.5, 20.5, 19.8, 27, 21, 33, 22.6, 28.3, 21.1, 19, 17.3, 27,
-30.2, 24.8, 17.9, 17.9, 20.7, 30.9, 36.2, 21, 20.2, 21.3, 24.2,
-21, 20.7, 17.8, 19.6, 22.6, 20.5, 24.1, 22.2, 27, 33.6, 26.6,
-20.6, 24.5, 19.8, 22.6, 29.2, 20.3, 23, 24.4, 38, 40.5, 24.2,
-20.2, 21.8, 27, 35.2, 25.2, 32.7, 35.9, 38.9, 26.5, 21.8, 37.9,
-43.3, 19, 19.7, 21.4, 32, 33.3, 22.2, 21.3, 20.8, 22.3, 22.5,
-21.4, 23, 35.1, 40.3, 39, 21.1, 25.4, 23.6, 28.1, 37, 39.3, 39.4,
-25.8, 27.7, 23, 24, 26.1, 21.8, 24.2, 22.3, 19.7, 20.8, 17.9,
-20.1, 20.9, 21.2, 20.4, 29, 34.7, 34, 30.9, 29.6, 26.1, 18.5,
-21.2, 22.4, 21.4, 30.5, 32, 32.7, 27.4, 18.9, 19.4, 22.2, 30.2,
-31.8, 31.4, 18.5, 22.2, 27.5, 25.8, 25.2, 19.1, 19.6, 21.4, 20.7,
-28.3, 23, 16.5, 18.8, 20, 20.6, 19.8, 20.3, 26.6, 21.5, 22.3,
-26.5, 27.1, 30, 28.2, 17.3, 16.8, 17.5, 19.2, 20.3, 20.6, 23.7,
-24.3, 26.4, 16, 14.5, 14.2, 16.5, 15.7, 16, 16.7, 19.8, 22.5,
-22.9, 18.8, 15.7, 14.7, 15.3, 15.3, 18, 15.1, 15.1, 13.6, 15.3,
-18, 18.6, 22, 22.1, 17.8, 15.2, 11.3, 13.5, 16.1, 16, 16.5, 16.7,
-19.6, 19.5, 18, 18.4, 12.9, 14.9, 12.4, 11.9, 11.7, 12.9, 12.9,
-12.4, 12.5, 15.7, 15.9, 14.3, 16.9, 14, 13.6, 13.7, 16, 13.1,
-13.8, 13.4, 11.3, 10.6, 13.9, 12.7, 12.5, 11.3, 11.6, 14, 13.7,
-15.2, 14, 11.4, 14.2, 15.2, 12.6, 10.2, 13.9, 13.7, 13.6, 13.2,
-15.4, 12.9, 11.9, 13.3, 13.3, 10.5, 10, 11, 8.3, 10.7, 11.2,
-11.7, 14.2, 14.5, 16, 16.7, 14.4, 17, 14.6, 11.6, 12.8, 14, 17.1,
-15.4, 15.5, 15.1, 16.9, 14.2, 15.9, 18.2, 19.5, 19.5, 19.8, 15.6,
-14.1, 17, 14.3, 13.1, 13.7, 18.2, 19.8, 22.3, 17.8, 15, 22.6,
-23.7, 15.8, 15, 23.5, 25.7, 26.5, 15.1, 13.9, 20.5, 21.4, 14.9,
-15, 18.9, 11.7, 15.5, 17.7, 11, 14.9, 13.1, 13.7, 15.4, 15.6,
-23.9, 23.7, 24.3, 15.9, 13.5, 15.3, 19.3, 20.5, 22.5, 23.2, 16.3,
-14.8, 13.7, 18.4, 12.3, 13.3, 16.2, 25.6, 24.1, 13.8, 15.9, 21.2,
-21.7, 15.6, 13.5, 15, 21.2, 25.4, 19, 15, 16.4, 15.6, 13.7, 22,
-17.4, 15.1, 14.6, 16.9, 15.9, 21.3, 29.7, 33, 22.7, 21.6, 30.3,
-19, 14.6, 15.9, 20.4, 29.3, 33.7, 35.2, 38.1, 24.5, 26.3, 25,
-17.9, 18.1, 23.3, 31.2, 32.8, 28, 19.7, 22.1, 16.3, 20.1, 21.7,
-19.6, 30.8, 36.8, 38.1, 17.6, 21.2, 17.2, 20.7, 26.1, 34.5, 18.6,
-20.1, 22.4, 19.1, 19.2, 28, 17.9, 18.1, 16, 18.5, 20.6, 33, 35.2,
-24, 26, 28, 23, 19, 19.1, 18, 19.4, 32.5, 32.6, 18.1, 19.7, 28,
-28, 23.8, 31.4, 22, 35.8, 23, 18.9, 25.4, 28, 19.2, 21.5, 28.8,
-37.3, 24.6, 21.3, 17.9, 17.5, 18.7, 18.1, 19.7, 22.1, 19.6, 18,
-19.9, 28.5, 23, 37, 19, 19.4, 35, 27.7, 23.9, 25.6, 27.7, 24.3,
-38.6, 41.2, 22, 22.5, 22.3, 25.5, 36.6, 35.7, 43.2, 28, 25.5,
-21.6, 21.8, 23.3, 34.3, 31.2, 43, 20.2, 20.3, 22.2, 24, 34.4,
-32.9, 21.6, 26.5, 33.2, 38.6, 24.4, 28.3, 35.2, 28.7, 35.6, 37.2,
-25.5, 31.5, 30.2, 29, 21.4, 28.5, 32.1, 23.5, 20, 21, 20, 21.8,
-24.3, 30.9, 21.6, 22.2, 20.2, 20.5, 17.6, 18.6, 17.7, 18, 18.6,
-18.6, 25.9, 19.8, 18.7, 17.9, 17.3, 18.1, 14.6, 14.1, 15.7, 16,
-21.6, 21.4, 23.8, 21.7, 16.6, 16.7, 18.1, 14.5, 14.7, 16.4, 16.5,
-22.7, 23.8, 24.6, 23.6, 19.8, 19.8, 18, 17.6, 19, 17.5, 17, 19.9,
-18.5, 18.7, 17.8, 17, 17.6, 18.7, 17, 18.8, 17.5, 19.5, 16.6,
-19.1, 21.2, 20.2, 17.9, 14.3, 16, 17.7, 18.6, 19.1, 13.7, 17.5,
-16.1, 15.2, 17.3, 14.9, 18.4, 17.2, 12.2, 13.9, 14, 15.3, 15,
-15.1, 16.6, 16.5, 16.1, 13.5, 13, 13.6, 11.8, 14.5, 14, 14.1,
-13.5, 12.1, 11.9, 11.9, 14.2, 14, 17.9, 19.1, 15.1, 13.8, 13.7,
-10, 10.3, 10.4, 12, 8.5, 14.4, 13.1, 14, 11.8, 13.9, 12.9, 11,
-11.8, 10.7, 11.2, 10.3, 12.2, 12.4, 14.7, 15.1, 15, 14, 15.2,
-14.2, 8.7, 11, 14.2, 15.2, 12.2, 13, 14.7, 17.2, 13.7, 14.8,
-13.8, 13.7, 13.1, 12.7, 12.3, 12.4, 13, 13.5, 13.5, 14.7, 13.4,
-15.9, 16, 15.3, 15.5, 18.2, 18.6, 18.5, 19.2, 14.2, 12.8, 13.1,
-15.4, 17.3, 14.5, 19.5, 20.2, 16.3, 13, 13.3, 13.3, 19, 16.8,
-19.2, 18.5, 19, 17.4, 15.3, 15.8, 18.7, 17.8, 16.5, 15.3, 13.2,
-12, 14, 9.5, 13, 17.6, 19.6, 17.2, 17.3, 17, 16.3, 17.3, 20.3,
-16.9, 13.5, 13.3, 20.7, 19.8, 20.8, 19.8, 19.5, 23.4, 14.2, 14.2,
-16.6, 17, 15.6, 14.8, 17.2, 20.2, 16.7, 18.2, 18.1, 22.5, 23.4,
-15.3, 13.7, 15.6, 18.9, 15.1, 16.6, 17.7, 23, 16.8, 21.3, 17.9,
-23.6, 25.3, 14.5, 16.9, 16.3, 17.7, 18, 21.7, 22.3, 15.5, 16.7,
-24.3, 23.5, 27.7, 18, 15.6, 19, 19.5, 20.1, 31.3, 15.6, 12.8,
-13.8, 15.8, 16.4, 17.6, 28.2, 25.5, 22.7, 28, 17, 22.6, 24.5,
-25.6, 27.5, 18.5, 18.2, 18.8, 17.8, 18.9, 24, 20.9, 16.8, 18.5,
-20.6, 24.9, 28.1, 25.7, 19.2, 32.7, 21.3, 20.4, 20.5, 22.8, 35.3,
-38.7, 21.4, 23.3, 22, 31.7, 23.4, 19.1, 19.5, 30, 32.4, 33.6,
-30, 27.7, 28.1, 23.7, 20.6, 32.3, 31.2, 21.5, 23, 21.9, 23, 21.6,
-27.2, 29.2, 32, 22.5, 23.9, 19.7, 19.5, 22, 22.1, 19.7, 19.4,
-30.5, 28.5, 20.2, 19, 20.2, 22.6, 28.4, 18.6, 20.3, 19, 26.2,
-30, 24.2, 23.4, 34.7, 20.4, 20.7, 20, 19.5, 31.6, 33.7, 23.5,
-24.6, 33.9, 22.4, 24.3, 29.5, 31.7, 32.9, 20.5, 28.5, 27.3, 19.5,
-21.4, 33.2, 35, 18.1, 17.2, 18.1, 19.5, 21.5, 29.2, 33.8, 20.8,
-17.5, 21, 27.4, 21.2, 27.1, 22.8, 18.7, 19, 19.7, 28.7, 25.5,
-18.4, 18.5, 23.6, 26.9, 28, 24.7, 21.5, 17.5, 16.1, 18.7, 24.5,
-27.6, 17.4, 18.2, 19.7, 18.5, 17.7, 20.7, 21.2, 17.2, 21.5, 22,
-23.2, 25.4, 24.6, 24.8, 25, 25, 18.2, 21.5, 16.2, 17.3, 15.5,
-16.4, 19.6, 18.5, 16.5, 16, 17.7, 19.2, 16.8, 16.5, 22.5, 22.7,
-23.5, 19, 15.5, 13.5, 14, 14.7, 15.6, 17, 18, 19.6, 17.1, 16.7,
-16.9, 18.2, 19.4, 22, 21.7, 22, 22.2, 20, 16.5, 15.6, 15, 16.6,
-18.7, 18.7, 18.1, 15.6, 20.1, 20.3, 15.2, 17.1, 16.3, 18.3, 18.3,
-19, 20, 15.7, 14.9, 13.1, 13.6, 13.8, 15, 16.9, 18.3, 16.4, 14,
-12.5, 12.8, 12.2, 14.2, 14.2, 15.5, 15.1, 14.4, 12.9, 10.8, 11.7,
-13.3, 12.4, 13.4, 10.6, 7, 12.6, 13.2, 12.1, 10.3, 15.7, 11.7,
-15.1, 15.8, 15, 11.6, 11.4, 10, 14.7, 13.6, 13.2, 11, 13, 12,
-10.6, 13.3, 14.5, 13.5, 15.9, 12.8, 11.7, 13, 14, 16, 17, 16.3,
-17.6, 19.5, 14, 17.5, 19.2, 18.5, 15.1, 15.4, 13.3, 13.1, 12.8,
-12, 13.3, 12.9, 15.4, 13.4, 15.1, 14.7, 14.9, 16.8, 15.8, 17,
-14.1, 16.5, 12.4, 12.7, 14.6, 17.6, 19.6, 17.3, 17.9, 17.8, 13,
-13.2, 17.1, 19.6, 16.3, 16.9, 22.2, 12, 14.2, 16.8, 16.9, 22,
-16.4, 14.2, 11.8, 15.2, 12.6, 13.2, 14.4, 15, 16.5, 13.3, 14.5,
-16.7, 13.8, 12.4, 13.7, 19.9, 24, 18.7, 18.9, 20.2, 19.9, 24,
-27.3, 24.2, 18, 21.3, 26.6, 18.5, 18.2, 21, 12, 12.2, 14.1, 16.5,
-15.5, 15, 20.8, 27.3, 28.4, 18.9, 18.2, 25.5, 15.9, 15.5, 21.4,
-23.2, 26.8, 23.9, 19.1, 15.2, 14.9, 21.3, 25.4, 28.7, 32.3, 25.7,
-19, 19.4, 15, 16.5, 16.3, 28.9, 27.4, 32.9, 27, 23.7, 22.8, 16.5,
-14, 18, 28.2, 32.8, 28, 22.2, 21.8, 18.7, 25.5, 27.6, 16.5, 15.9,
-16.8, 17.9, 23.1, 22.8, 24.2, 27.7, 21.3, 23.5, 17.9, 24.2, 20,
-23.7, 27, 24.6, 25, 20, 22.7, 22.6, 29.2, 27.8, 26.5, 18.9, 23.2,
-24.2, 28.1, 30.3, 25.6, 20.7, 19.6, 21.7, 28, 21.3, 21.4, 21.4,
-22.6, 21.7, 21.8, 19.8, 30.4, 36, 42.2, 21.1, 20, 18.4, 19.1,
-19.3, 18.8, 22.8, 20, 21.9, 20.1, 23.2, 34.5, 22.1, 21.6, 30,
-34, 22.2, 19.6, 25.4, 37.1, 30.2, 29.1, 21.1, 19.1, 22.2, 24.4,
-20.3, 28, 32.2, 23.4, 21.4, 33.5, 18.6, 19.2, 21.1, 29.5, 25.7,
-32.4, 28.5, 20.6, 25.2, 20.8, 17.5, 20.1, 22.4, 24, 21, 26.8,
-17.7, 19.2, 19.1, 26.4, 29.7, 30.2, 33, 33.3, 33, 36.1, 34, 34.7,
-20.4, 19.4, 21.3, 26.8, 28.5, 25.6, 28.6, 32.5, 18.7, 23.2, 23.7,
-27.2, 23.5, 19, 22.6, 30.1, 23.3, 19.7, 22.3, 21.6, 23.5, 22.6,
-24, 22.9, 22.4, 28.8, 30, 32.4, 33.8, 26.8, 18.6, 17, 15.3, 15.3,
-16.8, 16, 16.6, 17.2, 21.5, 19.7, 19.8, 21.2, 23.7, 23.9, 25.6,
-24.7, 20.2, 23.5, 22.2, 24.5, 25.5, 18.8, 18, 14.9, 18.3, 19.2,
-18.9, 19.2, 21.5, 18, 13.1, 14.9, 15.2, 13.5, 15.2, 14.2, 14.6,
-16, 15.1, 15.6, 17.5, 18.8, 20.4, 20.3, 19.1, 14.9, 14.6, 13.7,
-13, 13.4, 12.7, 14.2, 13.7, 12.7, 14.1, 12.8, 17.1, 14, 14.5,
-15.7, 14.1, 13.7, 13.3, 13.4, 11.9, 13.6, 13.3, 12.2, 10.8, 13,
-14.1, 14.4, 13.3, 15.7, 15.6, 19.3, 16.3, 19.4, 17.7, 16.9, 14.4,
-14.3, 13, 12.3, 12.8, 12.7, 10.8, 14.6, 13.3, 12.7, 12.9, 15.7,
-11.4, 12, 12.2, 11.8, 13.1, 15.5, 11.3, 12, 12.8, 11.6, 12.4,
-12.6, 17.4, 13.4, 11.3, 12.1, 12.7, 12.5, 13.2, 17.1, 15.9, 15,
-13.2, 12.6, 11.8, 12, 14, 13.7, 16.1, 19.8, 15.7, 13.2, 13.6,
-13.5, 11.7, 11.4, 15.4, 17.4, 15.3, 16.7, 16.5, 15.3, 18.8, 15.3,
-15.6, 18.7, 17.4, 12.6, 12.9, 13.5, 13.6, 13.7, 15.1, 14.3, 21.3,
-21.5, 23.2, 15.3, 19.1, 15.3, 14.8, 15.6, 14.6, 14.7, 13.7, 13.6,
-13.5, 14.6, 15.6, 20.7, 25.1, 19.7, 12.5, 14.1, 13.3, 14.7, 20.5,
-21.8, 16.2, 25.8, 26.6, 19.4, 21.1, 20.2, 20.9, 18.1, 26.3, 19.2,
-16.1, 17.9, 21.1, 25.7, 23.7, 19.7, 16.8, 14.3, 14.2, 20.5, 22.2,
-15.4, 17.2, 18, 20.5, 23.8, 24.1, 25.8, 19.4, 18.3, 22.3, 17.4,
-20.2, 27.5, 23.9, 22.8, 22.7, 21.5, 21.9, 30.3, 17.7, 26.8, 28.3,
-24.2, 18.2, 21.8, 17.8, 16.1, 18.7, 17.1, 15.7, 20.8, 26.2, 26.2,
-21.3, 20.5, 20.7, 19.9, 19.1, 21.7, 25.6, 23.4, 26.6, 23.5, 25,
-25.8, 28.1, 27.8, 23.2, 21, 21.1, 18.3, 19.6, 22.2, 30.6, 23.1,
-18.4, 22.4, 30.9, 25.2, 21.4, 20.4, 18.7, 22, 26.6, 20.4, 18.5,
-22.5, 32.7, 27.8, 19, 21, 18.5, 22.2, 23.3, 19.8, 24.7, 32.4,
-20, 18.2, 20.4, 25.5, 24.4, 21.5, 32.4, 27.2, 19.1, 19.7, 21.3,
-20.3, 21, 22.6, 21.5, 24.2, 25, 20.6, 19.6, 20, 29.5, 35.5, 21.1,
-23.7, 33.7, 21.8, 21.2, 23.7, 26.4, 21.8, 31.1, 38.3, 22.7, 21.5,
-20.8, 30, 34.5, 36.5, 28.9, 27.2, 25.5, 22.3, 21.8, 22.4, 19.7,
-19.4, 18.5, 24, 25.8, 25.5, 26.6, 34.5, 21.1, 20.4, 24.9, 21.9,
-25.5, 38, 36.4, 19, 18.4, 17.7, 21.3, 25.7, 30.5, 32.6, 23, 20.5,
-21.8, 26.4, 25.8, 36.7, 27.2, 27.7, 20.4, 18.8, 22.6, 32.7, 22.8,
-24.4, 32.6, 29.1, 18.3, 19.6, 28.6, 26.8, 30.7, 16.8, 16.1, 18.2,
-19.3, 19.8, 26.8, 17.5, 18.2, 24.9, 27.3, 24.8, 18, 16.8, 14.6,
-18.7, 18.8, 19.5, 21.1, 20, 18.5, 17, 16.2, 16.7, 14.9, 15.5,
-15.3, 15.7, 17.3, 17.1, 16.2, 15.4, 15, 19, 19.7, 19.7, 15.1,
-16.4, 21.7, 19.5, 17.2, 16.4, 18, 19.5, 16.2, 16, 14.4, 15.4,
-18.2, 13.8, 16.1, 13.7, 16.8, 15.9, 16.7, 14.6, 15.2, 14, 14.1,
-16, 16.7, 15.2, 13.3, 14, 15.9, 14.5, 14.2, 13, 13.7, 14.7, 14.6,
-13.9, 14.2, 16.8, 14.7, 12.1, 10.2, 10.8, 11.9, 11.8, 12, 12.7,
-13.6, 13, 13.1, 11.1, 12.8, 13.3, 11.7, 14.3, 15.4, 14.2, 13,
-13.1, 12.4, 11.2, 9.2, 12.4, 12.7, 13.7, 12.7, 15, 16.4, 14,
-13.2, 13.6, 15.4, 13.8, 15, 14.5, 14.8, 14, 8.2, 10, 11.2, 13.3,
-13.7, 15, 12.5, 15.3, 16.4, 17.6, 15, 14.8, 13.8, 14.8, 16.6,
-17.3, 12.2, 12.1, 13.9, 16.8, 16.8, 14.5, 15.1, 13.8, 13, 14.5,
-18, 20.2, 21, 16.5, 12.2, 15, 15.7, 17.7, 18.9, 14.9, 11.4, 15.4,
-15.2, 17.6, 17.2, 21.6, 18.7, 13.9, 13.3, 14.6, 16.5, 17.7, 13.6,
-15.2, 15.5, 16.5, 18.8, 13.6, 14, 13.8, 16, 19.3, 16.9, 14.3,
-16.7, 21.3, 19.4, 18.7, 14.7, 16.2, 15.5, 23.4, 22, 16.7, 14.4,
-16.4, 19.6, 18.3, 14.4, 14.8, 17.1, 15.2, 19.5, 21.1, 21.7, 14.6,
-18.2, 17.8, 23.5, 20.8, 15.7, 16.1, 21, 15, 16, 16, 14.8, 14.6,
-16.1, 21.6, 23.8, 27, 20.7, 19.7, 20, 28.8, 30, 33.1, 18.9, 16.3,
-19, 18.3, 21.2, 16.5, 16.7, 19.5, 29.1, 19.7, 22.6, 20.7, 14,
-15.5, 14.8, 19.2, 27.4, 18.5, 18.5, 31.5, 16.7, 15.7, 16.7, 22,
-25.7, 29.2, 27.7, 29.4, 19.9, 27.8, 31.2, 22.8, 17.6, 19.4, 27.5,
-18.4, 17.3, 17.5, 17.3, 21.9, 21.1, 17.9, 19.6, 23.6, 18.2, 20,
-17.5, 18.9, 18.7, 28.9, 21.6, 20.7, 21.8, 21.9, 35, 26, 20, 33.6,
-20.1, 23.5, 23.6, 24.5, 27, 17, 18.9, 21.8, 27.5, 22.8, 26.5,
-22.7, 22.5, 37.8, 22, 27.6, 21.2, 22.6, 18.7, 17.5, 17.7, 30.3,
-25.6, 32.7, 22.9, 21, 22.5, 25.7, 37.8, 21.3, 38.7, 21.5, 18.8,
-21.7, 30.6, 40, 20.8, 23.7, 22, 20.5, 23.3, 34.2, 36.7, 21.3,
-28.7, 27.6, 28.8, 37, 21.7, 22.7, 18.5, 25.4, 28.7, 18.4, 24.3,
-33, 16.5, 18, 22.1, 24.3, 24.7, 30.1, 22.7, 22.9, 16.4, 16.2,
-19, 27, 21.7, 16.7, 17.7, 21.6, 33.8, 31.8, 32, 17.6, 20.2, 17.3,
-17, 15.6, 17.1, 21.9, 20.1, 29.7, 20.7, 16.5, 15.8, 17.4, 19.4,
-21.1, 19.9, 28.6, 29.7, 29.7, 19.9, 17.4, 18.6, 23, 25.1, 26.6,
-19, 21.2, 16.5, 17.5, 18.2, 24, 22.8, 15.1, 16.1, 15.8, 17, 19.7,
-24.9, 26.9, 27.9, 18.5, 17, 16.4, 20.8, 16.7, 15.8, 18.5, 16.5,
-16.6, 17.4, 21.7, 22.7, 23.3, 22.5, 21.9, 17.9, 20.1, 16, 16.6,
-15.6, 15.2, 14.3, 15, 14.5, 16.9, 18.3, 18, 13.5, 13.7, 10.9,
-13.6, 15.2, 14.1, 13.2, 13.8, 14.6, 16.2, 14.5, 14.3, 15.6, 15.9,
-19.3, 16, 20.3, 15.8, 16.2, 12.8, 15, 13.4, 13.2, 13.8, 15.7,
-16.2, 14.9, 18.3, 15.3, 15.2, 14.2, 12, 13.7, 13.8, 12.3, 12.8,
-13.1, 14.5, 14, 13.3, 15.7, 16, 16.2, 18, 16.3, 15.8, 13.3, 13.7,
-11.5, 13.7, 12.3, 12.6, 12.7, 14.8, 14.9, 12, 12.8, 12.4, 13,
-13.1, 12.9, 13.8, 15.2, 13.1, 11.1, 10.8, 13.1, 15, 15.7, 16.4,
-14.1, 15.5, 14.8, 13.9, 15.4, 14.8, 10.9, 12.9, 12.8, 18.6, 14.6,
-18, 18.5, 11.8, 13.3, 14.5, 14, 13.3, 15, 18.4, 13.6, 15.3, 16.1,
-19, 15.5, 16.2, 14.9, 17.9, 10.1, 12.1, 13.1, 12.9, 15.4, 15.6,
-14, 14.2, 17.4, 14, 13.6, 15.7, 14, 15, 16.4, 15.1, 17.1, 18.9,
-23.8, 25.9, 15, 17, 19, 26.5, 26.9, 23.7, 30.7, 29.6, 25.9, 20.2,
-14.8, 13.9, 15.7, 22.8, 18.7, 17, 19, 14.1, 17.6, 19, 15.8, 12.9,
-14.5, 15.9, 21.9, 24.1, 19.4, 15.4, 17.6, 20.5, 19.4, 18, 16.8,
-15.8, 16, 22.1, 26.8, 26.3, 17.5, 19, 30.3, 32.7, 35, 36.1, 18.1,
-18.1, 16.8, 18.6, 20.5, 27.8, 18.8, 16.8, 17.2, 19.6, 18.8, 18.5,
-19.8, 30.5, 28.3, 32.6, 30.1, 19.8, 19.9, 23.8, 24.3, 17.4, 18.2,
-18.4, 16.9, 24, 32.8, 18.9, 15.5, 16, 16.6, 20.8, 19.6, 18.5,
-17.6, 20.8, 21.5, 25, 21.2, 22.6, 25.6, 25.1, 32.5, 27.8, 21.5,
-20.7, 19.9, 18.4, 22.3, 24.6, 25.6, 19, 18.7, 29.2, 31.8, 18.4,
-19.2, 30.8, 32.2, 22, 21.4, 20, 20.6, 22.2, 30, 40.4, 26.3, 39,
-30.6, 39.2, 37.8, 28.8, 30.8, 38.7, 25.2, 20.6, 21, 25.6, 36.2,
-24.9, 26.2, 20, 19.7, 20.3, 25.1, 29.1, 37.5, 39.2, 33.7, 19.5,
-19.9, 21, 20.3, 22.6, 32.9, 21.3, 19.5, 19.2, 22, 27.2, 32.2,
-25.4, 25, 25.2, 26.7, 25.3, 29.9, 27.6, 20.6, 21, 21.6, 24, 23.8,
-21.9, 29.4, 37.4, 21.5, 21.1, 21, 36.3, 28.7, 19.4, 20.3, 20.8,
-30.5, 30.3, 23.4, 25.7, 15.7, 19.3, 18.8, 17, 17.6, 18.5, 21,
-26.9, 30.6, 32.7, 29.2, 25.8, 28.2, 24.7, 30.6, 30.6, 29, 26.5,
-25.5, 24.9, 20.9, 23.4, 18.1, 20.7, 20.3, 21.1, 19.5, 20.4, 17.3,
-18.5, 21, 23.5, 25.7, 23.1, 24.8, 22.4, 17.4, 18.3, 26, 25.5,
-21.8, 21.2, 25.2, 21.7, 22.6, 24.3, 17, 20.7, 22.7, 25.4, 24.9,
-25, 20.5, 20.2, 19.4, 21.4, 25.5, 19.4, 18.8, 17, 15.5, 16.2,
-16.7, 20.1, 21.4, 16.4, 17.3, 17, 18.2, 17.5, 14.9, 18, 16.7,
-17.1, 16.8, 17.7, 18.4, 18.5, 15.5, 15.4, 17.5, 16.8, 18.9, 19.4,
-20.3, 19.3, 17, 16.4, 13.3, 13.6, 14.1, 14.8, 14.1, 17, 16, 16.5,
-14.9, 14.4, 13.5, 11.3, 15, 13, 14.9, 14.6, 14.1, 15.5, 14.4,
-12, 17.5, 13.3, 14.3, 14, 13.5, 13.3, 12.3, 12.6, 14.1, 16.6,
-17.3, 17.1, 16.1, 15, 15.4, 14.6, 14.6, 16.8, 16.5, 15.6, 14.8,
-15.2, 15.2, 15, 14.1, 15.5, 12.6, 12.9, 15.1, 13, 15.6, 13.4,
-14.4, 14.5, 15.4, 16.7, 16.1, 16.6, 16.5, 13.8, 13.4, 11.9, 10.7,
-13.2, 13.1, 12.8, 16.2, 18, 18.9, 18.3, 19.8, 19.3, 16.2, 17.6,
-17.5, 13.2, 13.2, 13.4, 14.2, 16.1, 14.2, 14.3, 14.5, 17.1, 18.2,
-22.2, 22.4, 15.6, 16.6, 14.5, 17.7, 21, 14.3, 20, 20.2, 19.2,
-19.8, 14.8, 14.2, 17.2, 17.2, 22.1, 15.4, 16.1, 14.8, 15.1, 20.2,
-22.3, 24.6, 18.4, 18.2, 23.4, 23.8, 20.1, 20.5, 19.5, 18.8, 19.8,
-26.2, 21.2, 21.2, 17.3, 20.5, 19.2, 18, 17.7, 23.7, 16.9, 23.2,
-22.3, 18.7, 24, 16.4, 18.8, 19, 26.7, 19.3, 19.5, 21.2, 17, 24.4,
-29, 19.2, 24.6, 23.4, 22.6, 21.1, 29.1, 36.1, 23.1, 16.5, 16.2,
-21.3, 25.4, 26.4, 21.1, 21.1, 19.7, 31.2, 34.5, 22.9, 13.5, 16.2,
-15.3, 19.2, 29.4, 27.7, 19.6, 16.8, 19.9, 20.4, 18.3, 16.7, 16.9,
-18.9, 17.6, 18.6, 21.4, 28.7, 28, 22.8, 17.2, 18.7, 19.9, 23,
-30.8, 31.7, 20.8, 20.8, 25.2, 31.3, 32.1, 34.3, 33.7, 28.6, 19.2,
-20.9, 21.1, 26.1, 26.4, 36.8, 26.3, 17.9, 21.3, 19.5, 20.1, 21.7,
-19.5, 24.8, 30.2, 31.6, 19, 21.3, 20.6, 22.8, 33.2, 24.7, 21.3,
-17.9, 18.7, 25.3, 31, 33.2, 31, 18.2, 19.1, 22.2, 20.3, 19.8,
-18.3, 27.5, 29.8, 31, 32.9, 35.5, 36, 36.6, 21.7, 19.8, 26.7,
-22.9, 19.8, 24.9, 24.8, 28.8, 32.7, 33.7, 24.7, 21.6, 26.2, 33.4,
-22.9, 31.2, 23.1, 24.4, 30.7, 38.8, 21.5, 20.7, 20.3, 21.3, 30,
-37.1, 21.1, 22, 34.4, 33.8, 37.8, 38.4, 32.8, 34.4, 26.4, 27.3,
-28, 30.7, 30.7, 23.4, 26.1, 26.1, 21.8, 18.9, 18.5, 17.5, 21.5,
-25.1, 21.9, 24.2, 24.2, 27.4, 21.3, 18, 18.7, 20, 20.9, 19.3,
-19.3, 22.2, 17.7, 21.9, 25.2, 25.1, 28.5, 27.6, 19.6, 18.5, 19.2,
-20.4, 22.8, 23, 20.3, 18, 18, 20.2, 18.1, 19.2, 17.8, 19.8, 20.3,
-18.3, 18.3, 20.2, 22, 24.3, 24.7, 25.4, 19.9, 23, 21.8, 19.3,
-18.5, 20.6, 17.2, 17.5, 19.1, 18, 18.9, 23.4, 19.3, 19.2, 21.2,
-21.5, 17.2, 16.8, 16, 18.9, 20.6, 15.9, 16.7, 18.4, 16.2, 16.2,
-15.8, 16.2, 18.3, 18.5, 19.4, 17, 14.6, 11, 12.4, 14, 10.8, 13.1,
-15, 13, 17.5, 16, 10.2, 13.7, 15.4, 13.6, 12.9, 14.2, 15, 15.2,
-18.2, 12.3, 13.8, 13.9, 14.6, 14.9, 12.6, 11.2, 12.9, 14.1, 12.8,
-15.8, 16, 16, 16.6, 16.6, 16, 12.7, 12.3, 11.8, 14.1, 12.6, 12.9,
-11.5, 12.9, 11.8, 11.9, 14.2, 12, 11.7, 11.8, 13, 11.4, 11, 12.3,
-13.1, 11.4, 16, 15.3, 13.2, 15.9, 16, 19.6, 15.2, 10.6, 14.8,
-15.8, 14.1, 14.4, 10.7, 13.2, 13, 13.2, 16, 13.2, 11.8, 11.6,
-13.4, 15.2, 15.5, 13.5, 14, 18.5, 14.9, 13.9, 15.9, 11.3, 12.2,
-13.8, 13.8, 11.3, 13, 13.6, 13.2, 16, 17.2, 14.7, 15.5, 15.2,
-16, 16.6, 17.8, 19.8, 20.6, 19, 19.5, 12.6, 14.3, 14.9, 13.7,
-14.2, 18.4, 15.4, 18.7, 16.9, 16.5, 20, 17.2, 15.8, 20, 14.3,
-14.2, 14.7, 22.4, 25.3, 21.5, 15, 13.8, 15.6, 22.8, 18, 16.6,
-20, 17.5, 18.1, 17.1, 18.4, 18.8, 21.8, 19.7, 26.1, 18.7, 20.8,
-29.7, 21, 17.3, 16.8, 19.4, 16.8, 21.1, 20.4, 26.1, 15, 17, 24,
-22.5, 16.3, 17.9, 17.7, 18.4, 25.6, 28.3, 15.1, 16.8, 19.6, 15.8,
-16.9, 17.8, 18.2, 19.2, 19, 18.4, 22, 16.4, 16.7, 17.4, 20.6,
-30.4, 30.3, 35.5, 18.8, 24.7, 27.3, 29.4, 32.5, 33.9, 25, 33.6,
-25.7, 19, 18.4, 22.1, 25.2, 23.9, 28.7, 31.1, 29.1, 25.6, 23.2,
-19, 17.1, 18, 20, 32.9, 32.1, 25.2, 18.5, 18.9, 20.8, 23.7, 28,
-35.2, 23.2, 18, 19.8, 31.9, 21.5, 33, 21.6, 31.2, 36.6, 19.6,
-23.1, 21.9, 21.1, 27.6, 27.3, 30.1, 33.5, 24.2, 21.4, 20.4, 20.3,
-18.5, 29.5, 25.4, 25.2, 21.6, 21.8, 25.4, 36.6, 36.6, 28.7, 27.2,
-25.5, 23.6, 25.6, 35.9, 19.1, 15, 20.7, 21.9, 18.2, 21.9, 25.3,
-29.6, 29.9, 24.4, 20.2, 23.5, 26, 25.9, 27.4, 31.5, 35.8, 23.9,
-27.8, 26, 31.1, 35.2, 27.8, 21.3, 21.5, 23, 24.4, 27.4, 23.8,
-25.2, 28.5, 25.3, 25.6, 24.1, 19.3, 22.7, 31.2, 25.8, 21.5, 20.3,
-18.9, 25.2, 26.8, 19.2, 21.5, 30.8, 18.6, 19.8, 21.3, 21.3, 29.9,
-32, 32.4, 32.5, 32.6, 31.5, 21, 20.6, 19.7, 19.7, 20.1, 17.8,
-22.1, 28.8, 26.8, 27.1, 19.4, 19.1, 22.5, 26, 22.2, 28.4, 25.2,
-20.9, 17.6, 17.2, 17.2, 18.7, 18.6, 21.8, 16.7, 17.9, 20.8, 21.2,
-17.5, 16.6, 17.5, 18.1, 18.5, 19.8, 23, 21.2, 21.2, 23.1, 20.2,
-18.1, 16.2, 18.7, 21.2, 19.3, 21.8, 19.9, 13.6, 14.7, 18, 19.3,
-17.7, 14.6, 14.5, 14.4, 15.4, 14.5, 16.2, 14.2, 13.2, 15.2, 17.4,
-13.7, 16.8, 17.7, 16.2, 13.2, 16.3, 16.3, 14.6, 13.9, 16, 18.4,
-19, 17.4, 16.2, 16.3, 16.8, 14.6, 14.2, 13.3, 14, 11.7, 12.9,
-12.7, 14.6, 15.1, 16.1, 16.2, 13, 12.4, 12.6, 9.7, 11.8, 15.8,
-13.6, 8.9, 12.2, 13.2, 15.2, 12.6, 12.9, 15.9, 15.4, 15, 14.2,
-15.7, 14.4, 14.7, 14.5, 15.5, 19.2, 18.2, 13.9, 15, 15.8, 15.7,
-15.6, 17.7, 18.8, 15.2, 14.5, 13.5, 13.4, 12.4, 15.5, 13.2, 14,
-14.1, 15.1, 17.2, 15.1, 14.5, 13.6, 13.1, 13.1, 13.3, 14.8, 15,
-16.4, 15.3, 13.8, 13.5, 12.7, 13.1, 15.8, 16, 14.4, 11.9, 13.2,
-12, 11.6, 12.1, 17.3, 17, 14.7, 17.8, 13.7, 16.6, 14.5, 13.6,
-15.8, 16.4, 16.8, 14.6, 15.7, 19.7, 20.7, 18.6, 13.7, 11.9, 14,
-14.6, 13.4, 16.6, 21, 23.2, 23.9, 17.8, 16.2, 22.1, 24.3, 19,
-16.5, 17.1, 17.3, 16.8, 21.7, 20.1, 15, 14.8, 19.8, 24, 14, 15.3,
-14.8, 16.8, 20.8, 12.9, 14.3, 18.9, 22.6, 24.7, 19.6, 20.2, 23.9,
-15.1, 17.1, 15.3, 16, 16.8, 19.8, 27.2, 29.1, 31.4, 33.2, 33.7,
-19.6, 31.8, 22.4, 21.4, 22, 21.6, 30.7, 30.2, 32.6, 26.6, 22,
-16.3, 17.2, 25.5, 32.1, 18.4, 21, 16.8, 15.6, 18.5, 21.5, 28.1,
-31.4, 20.9, 18.7, 19.9, 21.9, 19.1, 28.5, 26.2, 20.1, 19.9, 22.2,
-31.4, 24.1, 35.2, 36.9, 33.2, 35.7, 21.1, 21.6, 18.6, 18.8, 18.7,
-21.6, 22.4, 20.9, 23.3, 34.4, 20.7, 24.2, 22.2, 23.5, 30.3, 19.8,
-23.3, 29.3, 20.9, 37.6, 23.2, 25.1, 24.4, 24.6)
diff --git a/data/mmt.rda b/data/mmt.rda
new file mode 100644
index 0000000..9ec1dcb
Binary files /dev/null and b/data/mmt.rda differ
diff --git a/data/nzc.txt b/data/nzc.txt
deleted file mode 100644
index e8b94c2..0000000
--- a/data/nzc.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-year male female nz
-1867 1213 6 217416
-1871 2637 4 254948
-1878 4814 2 344985
-1881 4995 9 458007
-1886 4527 15 620451
-1891 4426 18 668652
-1896 3773 86 743214
-1901 2885 78 815862
-1906 2515 55 936309
-1911 2542 88 1058313
-1916 2017 130 1149225
-1921 2993 273 1271667
-1926 2927 447 1408140
-1936 2432 511 1573812
-1945 3414 1526 1702329
-1951 3633 2090 1939473
-1956 4026 2705 2174061
-1961 4913 3611 2414985
-1966 5700 4583 2676918
-1971 7025 4583 2862630
-1976 8081 6779 3129384
-1981 8649 8004 3143307
-1986 9903 9600 3263283
-1991 18750 18939 3373926
-1996 39624 42696 3618303
-2001 50460 55020 3737277
diff --git a/data/nzc.txt.gz b/data/nzc.txt.gz
new file mode 100644
index 0000000..dac5491
Binary files /dev/null and b/data/nzc.txt.gz differ
diff --git a/data/nzmarital.R b/data/nzmarital.R
deleted file mode 100644
index c821469..0000000
--- a/data/nzmarital.R
+++ /dev/null
@@ -1,1809 +0,0 @@
-nzmarital <-
-structure(list(age = c(29, 55, 44, 53, 45, 30, 31, 24, 47, 51,
-35, 35, 39, 33, 30, 47, 29, 43, 31, 56, 32, 46, 33, 44, 33, 45,
-47, 35, 34, 50, 50, 38, 44, 34, 27, 50, 48, 51, 28, 43, 32, 51,
-49, 53, 33, 52, 41, 24, 51, 46, 26, 35, 28, 34, 36, 60, 54, 33,
-40, 52, 41, 64, 27, 44, 47, 46, 35, 39, 48, 46, 40, 40, 37, 31,
-49, 31, 33, 50, 48, 43, 40, 40, 33, 45, 50, 44, 40, 61, 45, 39,
-44, 22, 41, 27, 36, 25, 30, 35, 22, 50, 25, 37, 46, 38, 39, 46,
-23, 54, 29, 43, 58, 53, 29, 57, 31, 29, 36, 46, 51, 56, 59, 41,
-44, 50, 40, 34, 26, 58, 36, 31, 52, 32, 40, 48, 53, 49, 54, 56,
-28, 24, 27, 43, 30, 44, 54, 54, 42, 55, 34, 43, 48, 34, 39, 44,
-52, 37, 33, 21, 34, 56, 29, 47, 31, 28, 42, 48, 44, 53, 37, 42,
-54, 45, 46, 34, 29, 40, 54, 53, 48, 52, 25, 43, 48, 51, 53, 32,
-30, 41, 57, 29, 53, 57, 29, 54, 46, 26, 34, 44, 35, 52, 44, 29,
-50, 57, 25, 54, 35, 31, 48, 25, 50, 31, 37, 48, 39, 41, 52, 59,
-39, 26, 41, 35, 31, 26, 32, 35, 35, 36, 26, 35, 37, 41, 54, 49,
-33, 31, 34, 24, 42, 24, 57, 48, 29, 37, 58, 41, 43, 27, 47, 33,
-56, 25, 49, 41, 42, 32, 31, 45, 41, 30, 41, 42, 59, 46, 51, 26,
-42, 25, 25, 37, 42, 45, 49, 29, 24, 46, 50, 53, 31, 24, 38, 54,
-58, 28, 57, 54, 50, 52, 41, 48, 46, 42, 19, 45, 29, 32, 51, 52,
-40, 28, 40, 51, 43, 34, 58, 52, 56, 57, 56, 46, 31, 44, 35, 26,
-53, 48, 43, 60, 31, 33, 49, 55, 34, 51, 34, 32, 31, 36, 41, 40,
-39, 70, 48, 76, 45, 22, 36, 50, 35, 43, 37, 34, 41, 38, 24, 35,
-41, 51, 29, 44, 56, 34, 40, 31, 37, 37, 31, 60, 37, 58, 60, 36,
-27, 29, 48, 37, 43, 39, 46, 34, 50, 43, 41, 46, 49, 53, 30, 31,
-38, 33, 52, 30, 46, 35, 40, 54, 48, 44, 50, 37, 48, 48, 53, 41,
-46, 34, 35, 33, 51, 28, 53, 44, 30, 37, 48, 30, 38, 22, 20, 26,
-30, 36, 33, 31, 39, 35, 30, 51, 27, 28, 38, 47, 48, 56, 48, 60,
-41, 41, 31, 45, 34, 36, 36, 27, 34, 53, 45, 49, 57, 51, 45, 42,
-40, 27, 27, 47, 41, 29, 38, 50, 34, 45, 42, 48, 46, 42, 45, 47,
-42, 53, 31, 20, 30, 44, 28, 24, 36, 54, 58, 44, 40, 22, 46, 27,
-36, 51, 49, 55, 42, 39, 42, 57, 45, 49, 42, 50, 35, 44, 40, 36,
-54, 22, 46, 53, 19, 39, 48, 22, 23, 39, 23, 51, 50, 46, 42, 44,
-25, 33, 21, 20, 51, 31, 59, 21, 43, 19, 49, 37, 41, 27, 19, 58,
-45, 42, 46, 45, 52, 23, 52, 44, 32, 41, 59, 37, 45, 47, 60, 29,
-39, 49, 52, 47, 48, 52, 29, 28, 45, 51, 38, 44, 46, 25, 31, 37,
-56, 39, 59, 59, 43, 59, 34, 36, 36, 30, 55, 46, 36, 43, 56, 43,
-51, 36, 44, 46, 44, 50, 48, 45, 39, 54, 25, 50, 52, 32, 48, 42,
-55, 59, 55, 49, 32, 23, 64, 60, 52, 39, 46, 55, 47, 38, 28, 57,
-36, 42, 34, 49, 32, 39, 41, 51, 25, 36, 38, 43, 53, 21, 48, 32,
-54, 46, 55, 36, 48, 40, 37, 41, 36, 58, 24, 42, 30, 30, 45, 36,
-45, 49, 42, 28, 47, 46, 43, 33, 51, 34, 40, 27, 23, 41, 50, 23,
-31, 38, 60, 39, 23, 48, 54, 29, 27, 53, 26, 31, 41, 56, 44, 57,
-61, 42, 55, 23, 48, 25, 47, 23, 34, 28, 55, 47, 35, 34, 29, 51,
-49, 24, 50, 41, 47, 40, 58, 30, 53, 30, 57, 33, 47, 20, 35, 62,
-53, 35, 19, 24, 18, 22, 24, 46, 43, 21, 27, 35, 42, 36, 31, 20,
-20, 45, 27, 35, 20, 21, 44, 84, 29, 45, 36, 20, 21, 20, 44, 21,
-34, 29, 28, 43, 38, 32, 20, 18, 28, 24, 43, 24, 55, 42, 35, 69,
-33, 28, 40, 43, 44, 44, 33, 45, 28, 20, 20, 29, 32, 60, 45, 41,
-32, 48, 36, 45, 59, 61, 52, 45, 35, 52, 42, 32, 25, 34, 31, 58,
-64, 30, 41, 62, 49, 35, 31, 42, 37, 32, 46, 41, 37, 29, 43, 38,
-40, 44, 24, 41, 50, 34, 22, 41, 31, 46, 44, 26, 40, 46, 28, 47,
-41, 40, 30, 43, 26, 43, 41, 30, 51, 23, 35, 39, 46, 27, 24, 38,
-58, 33, 35, 55, 50, 45, 34, 42, 26, 24, 28, 32, 38, 48, 32, 44,
-31, 36, 40, 33, 30, 59, 33, 67, 40, 41, 58, 39, 35, 51, 47, 51,
-33, 32, 43, 44, 30, 63, 51, 28, 26, 25, 54, 30, 28, 29, 44, 47,
-57, 45, 29, 32, 45, 44, 20, 29, 19, 43, 56, 24, 31, 26, 51, 32,
-37, 34, 41, 51, 36, 31, 25, 58, 25, 56, 41, 38, 26, 48, 26, 32,
-28, 37, 25, 44, 20, 47, 59, 46, 49, 28, 51, 31, 26, 51, 45, 41,
-51, 43, 33, 46, 29, 33, 46, 53, 50, 23, 36, 42, 51, 36, 26, 29,
-40, 52, 17, 53, 23, 40, 33, 48, 37, 57, 44, 30, 47, 36, 42, 58,
-24, 25, 58, 46, 44, 26, 29, 42, 25, 28, 29, 38, 38, 24, 67, 40,
-33, 23, 42, 33, 48, 33, 26, 44, 55, 23, 28, 51, 23, 20, 25, 30,
-44, 50, 30, 26, 54, 43, 56, 32, 36, 43, 21, 57, 27, 53, 48, 27,
-24, 50, 60, 57, 54, 29, 34, 25, 55, 51, 32, 43, 32, 29, 31, 53,
-21, 52, 41, 23, 39, 30, 28, 33, 26, 40, 51, 46, 23, 50, 39, 48,
-46, 37, 57, 56, 57, 53, 56, 49, 53, 32, 36, 57, 52, 36, 32, 44,
-52, 39, 28, 38, 45, 46, 47, 44, 40, 43, 49, 47, 44, 28, 25, 43,
-29, 37, 27, 44, 39, 31, 34, 20, 34, 22, 31, 32, 30, 56, 30, 20,
-39, 23, 39, 48, 38, 30, 41, 28, 49, 27, 40, 35, 28, 40, 31, 19,
-25, 51, 57, 35, 48, 46, 40, 41, 52, 59, 36, 45, 49, 50, 35, 26,
-47, 23, 42, 26, 26, 37, 58, 39, 47, 23, 36, 28, 52, 40, 39, 42,
-30, 42, 30, 56, 46, 22, 36, 20, 41, 35, 33, 33, 33, 41, 23, 55,
-51, 52, 33, 52, 35, 26, 44, 54, 31, 44, 43, 18, 54, 42, 55, 29,
-33, 52, 30, 31, 43, 41, 26, 54, 29, 43, 39, 40, 59, 27, 57, 53,
-39, 47, 24, 46, 17, 23, 25, 24, 56, 52, 38, 20, 37, 30, 31, 46,
-25, 43, 19, 46, 44, 45, 41, 36, 31, 23, 37, 49, 42, 30, 36, 37,
-28, 20, 43, 60, 56, 26, 64, 61, 53, 44, 40, 40, 52, 49, 36, 35,
-40, 50, 45, 56, 21, 47, 54, 53, 24, 41, 34, 26, 30, 36, 30, 56,
-44, 48, 54, 22, 53, 39, 28, 43, 53, 53, 43, 42, 27, 33, 25, 54,
-47, 37, 44, 47, 40, 44, 33, 26, 24, 30, 56, 43, 62, 45, 24, 34,
-31, 22, 46, 53, 52, 43, 45, 40, 47, 44, 48, 53, 43, 42, 43, 48,
-41, 53, 52, 27, 56, 46, 43, 54, 44, 49, 38, 54, 35, 46, 46, 54,
-46, 32, 36, 28, 51, 54, 41, 57, 35, 47, 34, 56, 36, 47, 58, 44,
-55, 40, 25, 55, 53, 55, 32, 34, 28, 21, 42, 42, 37, 41, 47, 30,
-20, 48, 31, 48, 29, 50, 56, 43, 32, 37, 27, 21, 26, 38, 56, 40,
-43, 60, 28, 27, 41, 39, 56, 46, 27, 46, 44, 25, 53, 38, 76, 56,
-60, 56, 35, 73, 74, 52, 84, 39, 44, 50, 55, 82, 51, 43, 73, 54,
-82, 49, 70, 48, 52, 65, 72, 71, 49, 76, 45, 75, 38, 39, 69, 60,
-68, 82, 53, 40, 48, 63, 44, 78, 73, 71, 42, 65, 53, 68, 77, 68,
-72, 74, 49, 82, 60, 54, 69, 55, 78, 61, 76, 54, 73, 56, 52, 51,
-58, 54, 71, 64, 55, 43, 84, 80, 68, 57, 49, 75, 38, 41, 56, 40,
-61, 58, 61, 46, 47, 60, 64, 73, 50, 72, 53, 43, 58, 52, 64, 75,
-57, 52, 67, 83, 48, 76, 51, 56, 60, 71, 63, 81, 51, 64, 65, 64,
-74, 61, 59, 44, 38, 80, 50, 66, 58, 78, 35, 60, 66, 36, 36, 65,
-53, 56, 82, 77, 48, 50, 36, 42, 75, 75, 35, 71, 44, 43, 35, 39,
-36, 65, 46, 37, 46, 46, 46, 56, 51, 73, 59, 50, 49, 68, 53, 48,
-77, 78, 41, 44, 61, 80, 66, 51, 73, 80, 67, 44, 73, 60, 37, 53,
-70, 65, 37, 53, 79, 81, 82, 71, 43, 42, 69, 76, 58, 68, 42, 38,
-37, 41, 61, 42, 44, 63, 65, 60, 63, 81, 55, 70, 56, 73, 60, 81,
-66, 54, 69, 40, 84, 68, 70, 49, 52, 74, 40, 58, 46, 39, 64, 52,
-58, 56, 75, 78, 74, 79, 64, 45, 51, 40, 53, 40, 44, 58, 78, 41,
-42, 63, 79, 63, 40, 46, 54, 39, 60, 78, 59, 67, 55, 44, 42, 49,
-39, 56, 74, 41, 74, 67, 52, 59, 58, 76, 66, 82, 59, 58, 44, 50,
-77, 55, 68, 73, 68, 46, 45, 45, 62, 75, 40, 85, 78, 61, 80, 46,
-65, 37, 48, 64, 77, 45, 68, 58, 61, 42, 58, 75, 68, 77, 60, 62,
-52, 48, 73, 84, 62, 54, 70, 49, 72, 58, 65, 83, 44, 57, 48, 64,
-58, 70, 44, 59, 42, 44, 76, 38, 62, 37, 58, 40, 49, 54, 38, 85,
-62, 81, 56, 51, 66, 51, 42, 67, 61, 74, 65, 46, 71, 52, 69, 71,
-69, 42, 43, 59, 36, 40, 45, 52, 69, 57, 44, 66, 38, 44, 69, 36,
-61, 42, 67, 61, 66, 73, 83, 85, 67, 76, 52, 67, 69, 78, 77, 81,
-69, 43, 40, 40, 43, 38, 67, 71, 58, 43, 59, 45, 75, 39, 80, 72,
-50, 83, 40, 67, 46, 78, 48, 78, 42, 49, 57, 67, 55, 70, 70, 57,
-78, 61, 53, 60, 48, 37, 70, 42, 70, 38, 71, 47, 73, 83, 81, 40,
-42, 66, 49, 64, 70, 70, 55, 64, 74, 61, 68, 49, 64, 79, 61, 65,
-39, 54, 66, 60, 67, 53, 61, 47, 80, 43, 60, 49, 65, 79, 42, 81,
-46, 41, 69, 46, 56, 58, 35, 42, 41, 68, 44, 50, 36, 61, 62, 51,
-83, 43, 75, 49, 81, 44, 62, 45, 75, 78, 68, 78, 62, 60, 58, 75,
-37, 44, 51, 71, 58, 48, 66, 48, 63, 63, 46, 56, 63, 83, 78, 43,
-81, 57, 45, 70, 68, 65, 43, 78, 71, 55, 83, 67, 78, 68, 50, 63,
-85, 49, 72, 82, 47, 79, 44, 51, 84, 70, 77, 61, 48, 54, 49, 73,
-38, 61, 61, 65, 57, 77, 76, 70, 74, 66, 66, 56, 78, 36, 36, 49,
-50, 62, 80, 85, 54, 54, 76, 51, 68, 52, 56, 48, 78, 80, 64, 75,
-43, 69, 61, 81, 42, 72, 79, 79, 45, 61, 38, 71, 49, 45, 65, 80,
-41, 44, 64, 70, 69, 65, 72, 78, 65, 79, 35, 78, 63, 58, 48, 85,
-36, 55, 53, 67, 73, 77, 39, 51, 71, 44, 58, 61, 65, 65, 66, 36,
-73, 78, 70, 56, 66, 77, 76, 80, 44, 36, 62, 61, 46, 60, 54, 55,
-61, 53, 66, 68, 67, 74, 64, 72, 57, 75, 74, 79, 61, 51, 60, 66,
-61, 44, 52, 73, 60, 36, 70, 49, 78, 61, 64, 74, 41, 62, 70, 78,
-74, 59, 80, 81, 42, 74, 53, 62, 51, 62, 78, 62, 53, 70, 81, 45,
-78, 66, 44, 54, 54, 68, 73, 65, 80, 40, 80, 79, 55, 85, 70, 53,
-50, 69, 67, 76, 59, 62, 64, 70, 59, 67, 40, 55, 57, 67, 83, 73,
-72, 65, 60, 79, 52, 65, 56, 60, 46, 60, 36, 59, 60, 40, 59, 60,
-61, 37, 67, 64, 84, 82, 67, 58, 45, 45, 40, 44, 69, 52, 44, 43,
-67, 46, 38, 61, 37, 76, 79, 77, 64, 67, 56, 60, 75, 39, 48, 56,
-73, 72, 48, 43, 63, 53, 69, 44, 63, 79, 83, 78, 47, 63, 74, 53,
-73, 68, 55, 45, 72, 47, 79, 56, 71, 78, 55, 41, 85, 77, 51, 64,
-52, 49, 62, 70, 81, 50, 62, 70, 73, 65, 52, 57, 56, 63, 42, 55,
-41, 59, 66, 45, 84, 80, 75, 80, 70, 82, 36, 74, 78, 75, 47, 37,
-42, 75, 63, 61, 39, 71, 51, 66, 79, 40, 82, 38, 51, 65, 37, 72,
-72, 72, 80, 62, 81, 47, 72, 72, 76, 51, 58, 40, 58, 59, 60, 59,
-51, 76, 68, 45, 51, 80, 49, 57, 84, 84, 77, 63, 55, 45, 81, 77,
-78, 80, 39, 50, 36, 79, 58, 46, 77, 78, 65, 73, 81, 77, 59, 78,
-40, 78, 77, 76, 73, 74, 77, 56, 43, 76, 78, 64, 51, 82, 64, 77,
-83, 72, 84, 79, 80, 60, 74, 80, 51, 76, 50, 82, 61, 75, 51, 48,
-78, 60, 44, 43, 82, 57, 85, 58, 42, 77, 77, 71, 44, 58, 53, 59,
-59, 48, 43, 45, 74, 60, 56, 59, 63, 37, 64, 49, 49, 78, 54, 55,
-40, 72, 76, 46, 72, 54, 45, 65, 46, 78, 64, 43, 57, 79, 50, 74,
-45, 58, 64, 65, 58, 81, 78, 52, 64, 84, 54, 57, 66, 72, 52, 51,
-57, 46, 58, 78, 40, 52, 60, 79, 83, 78, 64, 46, 36, 57, 73, 81,
-53, 39, 77, 76, 39, 48, 65, 60, 76, 48, 67, 48, 65, 81, 84, 84,
-81, 82, 41, 54, 65, 63, 44, 64, 62, 39, 70, 73, 78, 53, 57, 65,
-48, 49, 60, 55, 58, 56, 69, 58, 54, 63, 65, 47, 67, 52, 81, 79,
-54, 54, 48, 53, 42, 44, 68, 44, 37, 54, 60, 39, 37, 42, 42, 46,
-52, 81, 82, 79, 61, 57, 37, 46, 66, 83, 41, 43, 74, 39, 76, 73,
-77, 75, 68, 78, 39, 73, 85, 73, 74, 73, 39, 74, 79, 81, 83, 75,
-74, 83, 83, 86, 75, 75, 85, 72, 72, 74, 72, 76, 77, 80, 75, 76,
-49, 73, 73, 40, 71, 55, 74, 77, 72, 76, 78, 53, 39, 84, 53, 73,
-37, 50, 53, 74, 44, 54, 73, 51, 74, 72, 78, 75, 36, 75, 49, 54,
-82, 86, 83, 41, 42, 38, 54, 75, 72, 52, 40, 38, 73, 57, 49, 47,
-30, 31, 49, 18, 46, 31, 52, 30, 54, 61, 28, 47, 48, 32, 47, 57,
-43, 53, 60, 39, 34, 60, 61, 51, 28, 30, 58, 49, 42, 26, 35, 18,
-61, 40, 27, 55, 56, 41, 51, 43, 61, 55, 46, 44, 29, 36, 33, 24,
-35, 43, 47, 41, 45, 23, 50, 56, 41, 50, 46, 33, 54, 32, 41, 21,
-50, 51, 59, 60, 45, 46, 50, 53, 52, 60, 55, 38, 49, 44, 59, 55,
-48, 51, 41, 52, 33, 46, 37, 29, 42, 43, 27, 43, 31, 32, 35, 41,
-25, 35, 27, 49, 32, 29, 20, 28, 39, 39, 40, 54, 33, 56, 23, 51,
-24, 55, 49, 42, 45, 57, 56, 47, 29, 19, 48, 45, 51, 32, 54, 47,
-56, 41, 39, 45, 36, 42, 51, 44, 48, 41, 34, 41, 47, 36, 56, 59,
-46, 52, 47, 46, 55, 23, 57, 45, 53, 23, 38, 20, 43, 35, 23, 55,
-41, 44, 40, 35, 47, 54, 35, 49, 48, 40, 35, 57, 43, 47, 52, 28,
-36, 25, 35, 21, 45, 56, 43, 45, 22, 56, 18, 20, 61, 21, 35, 47,
-27, 23, 21, 28, 41, 27, 21, 42, 24, 47, 40, 50, 24, 28, 28, 51,
-59, 57, 51, 31, 35, 54, 53, 33, 38, 72, 49, 60, 25, 36, 23, 29,
-28, 31, 52, 35, 51, 46, 46, 51, 36, 52, 34, 51, 33, 40, 29, 37,
-30, 58, 55, 27, 40, 24, 42, 59, 28, 22, 21, 37, 56, 35, 30, 26,
-27, 31, 54, 20, 35, 34, 51, 35, 37, 50, 51, 60, 36, 23, 46, 60,
-31, 28, 32, 23, 27, 56, 54, 46, 46, 31, 21, 46, 36, 51, 58, 34,
-59, 35, 27, 28, 54, 54, 48, 47, 23, 49, 57, 50, 24, 23, 51, 58,
-26, 49, 19, 51, 29, 23, 50, 59, 49, 60, 26, 25, 36, 47, 24, 36,
-47, 31, 53, 34, 36, 46, 40, 26, 24, 49, 19, 40, 33, 52, 48, 30,
-46, 54, 18, 55, 53, 47, 23, 53, 55, 56, 47, 41, 30, 45, 42, 41,
-46, 35, 51, 53, 18, 49, 52, 45, 26, 42, 43, 25, 18, 45, 55, 43,
-26, 47, 48, 31, 46, 49, 54, 36, 53, 51, 48, 59, 59, 23, 41, 22,
-25, 50, 69, 30, 23, 25, 26, 28, 24, 31, 23, 51, 29, 23, 44, 46,
-50, 25, 43, 33, 48, 39, 38, 37, 51, 35, 40, 49, 44, 41, 42, 31,
-54, 41, 45, 43, 40, 43, 34, 44, 44, 42, 58, 43, 53, 28, 47, 39,
-52, 30, 36, 41, 29, 37, 23, 35, 19, 29, 20, 37, 34, 37, 32, 54,
-33, 47, 46, 35, 27, 46, 21, 29, 37, 34, 37, 22, 46, 21, 26, 30,
-28, 27, 34, 51, 19, 40, 23, 26, 37, 53, 25, 55, 32, 28, 21, 43,
-23, 19, 37, 64, 25, 32, 17, 40, 22, 33, 30, 21, 36, 21, 30, 51,
-21, 27, 31, 28, 30, 37, 55, 45, 54, 57, 60, 50, 41, 54, 27, 48,
-40, 27, 56, 37, 38, 25, 26, 22, 18, 48, 56, 45, 54, 56, 37, 30,
-47, 26, 40, 51, 32, 39, 55, 48, 58, 41, 28, 24, 32, 48, 40, 44,
-40, 52, 51, 34, 34, 49, 57, 33, 53, 36, 29, 27, 28, 51, 23, 40,
-53, 45, 54, 52, 57, 49, 55, 36, 57, 44, 47, 45, 58, 39, 63, 47,
-27, 46, 45, 53, 32, 52, 55, 40, 34, 53, 50, 31, 46, 41, 52, 32,
-43, 52, 58, 19, 36, 57, 47, 54, 31, 39, 42, 32, 28, 39, 48, 27,
-52, 50, 58, 48, 32, 36, 37, 20, 37, 20, 24, 61, 33, 54, 30, 23,
-44, 59, 34, 43, 28, 37, 51, 27, 34, 39, 38, 37, 48, 37, 33, 39,
-46, 47, 34, 46, 26, 30, 30, 47, 62, 39, 50, 51, 35, 42, 42, 49,
-45, 29, 44, 43, 39, 44, 51, 42, 47, 55, 50, 25, 22, 27, 31, 39,
-47, 34, 54, 45, 33, 24, 41, 36, 28, 46, 21, 19, 47, 37, 39, 35,
-53, 41, 54, 51, 46, 57, 27, 58, 35, 43, 34, 37, 27, 33, 49, 27,
-48, 34, 17, 20, 48, 36, 40, 38, 46, 54, 18, 29, 26, 28, 17, 43,
-26, 21, 28, 21, 28, 47, 33, 18, 20, 17, 29, 27, 52, 58, 44, 35,
-24, 42, 39, 63, 30, 23, 30, 42, 35, 49, 33, 36, 45, 58, 38, 38,
-33, 24, 20, 55, 43, 26, 51, 49, 57, 47, 54, 54, 45, 39, 45, 25,
-34, 60, 32, 23, 29, 31, 34, 44, 49, 38, 40, 24, 51, 40, 30, 32,
-50, 44, 43, 24, 22, 33, 37, 43, 39, 55, 37, 35, 44, 36, 31, 44,
-34, 86, 43, 44, 29, 41, 36, 44, 46, 35, 58, 50, 25, 20, 50, 21,
-35, 47, 35, 31, 37, 37, 55, 39, 36, 27, 53, 28, 47, 34, 44, 42,
-19, 34, 45, 41, 39, 41, 38, 40, 41, 55, 58, 40, 36, 52, 42, 57,
-45, 33, 26, 35, 35, 32, 38, 41, 59, 21, 40, 49, 27, 40, 20, 46,
-34, 57, 23, 30, 32, 29, 27, 32, 54, 36, 30, 37, 33, 35, 35, 32,
-38, 27, 34, 34, 35, 30, 29, 20, 19, 39, 24, 51, 24, 45, 47, 45,
-42, 47, 44, 35, 48, 54, 51, 25, 37, 33, 33, 51, 66, 39, 24, 31,
-32, 58, 60, 46, 29, 47, 36, 34, 22, 25, 42, 29, 33, 24, 32, 23,
-22, 23, 36, 36, 35, 21, 20, 20, 29, 38, 26, 36, 30, 20, 59, 40,
-49, 42, 60, 41, 51, 62, 24, 30, 25, 35, 32, 29, 30, 32, 33, 29,
-38, 40, 31, 53, 29, 56, 24, 21, 33, 24, 41, 41, 32, 29, 49, 61,
-47, 60, 61, 57, 49, 54, 50, 34, 51, 51, 46, 46, 50, 50, 32, 58,
-48, 51, 45, 46, 37, 44, 38, 50, 51, 44, 47, 51, 43, 38, 31, 54,
-48, 27, 51, 56, 50, 40, 26, 28, 43, 53, 39, 52, 33, 46, 43, 42,
-29, 30, 25, 51, 55, 58, 33, 28, 56, 54, 43, 26, 44, 53, 42, 49,
-32, 43, 48, 52, 50, 29, 44, 43, 32, 52, 25, 53, 50, 36, 32, 35,
-57, 57, 38, 49, 53, 27, 50, 59, 63, 34, 41, 49, 60, 26, 54, 49,
-53, 57, 43, 57, 41, 58, 47, 42, 54, 57, 42, 26, 36, 23, 39, 46,
-54, 58, 40, 34, 43, 27, 50, 33, 20, 45, 49, 39, 46, 31, 53, 52,
-54, 40, 39, 39, 31, 49, 53, 58, 42, 20, 58, 46, 26, 27, 46, 29,
-34, 51, 23, 53, 35, 41, 51, 31, 40, 30, 23, 43, 37, 48, 31, 30,
-40, 35, 43, 61, 54, 41, 28, 32, 55, 28, 26, 30, 43, 38, 45, 21,
-60, 53, 31, 59, 23, 36, 40, 37, 44, 30, 21, 40, 37, 46, 36, 54,
-50, 52, 54, 45, 46, 39, 53, 42, 38, 38, 37, 49, 43, 44, 25, 43,
-51, 44, 49, 47, 46, 42, 43, 45, 32, 42, 20, 29, 20, 34, 34, 29,
-34, 45, 33, 31, 29, 49, 35, 38, 45, 44, 51, 33, 51, 36, 51, 29,
-47, 46, 40, 24, 51, 37, 30, 53, 38, 57, 19, 57, 42, 28, 55, 35,
-54, 39, 32, 31, 30, 49, 56, 34, 27, 26, 34, 47, 45, 47, 47, 46,
-39, 36, 52, 45, 49, 26, 44, 18, 31, 38, 27, 35, 28, 26, 43, 36,
-48, 27, 57, 33, 28, 39, 29, 44, 22, 54, 44, 54, 28, 46, 40, 27,
-44, 48, 22, 30, 39, 27, 43, 44, 36, 32, 28, 46, 37, 40, 42, 40,
-53, 36, 40, 36, 36, 43, 42, 33, 36, 58, 47, 35, 58, 40, 50, 31,
-40, 18, 44, 57, 41, 38, 43, 33, 50, 44, 42, 24, 24, 39, 31, 53,
-49, 51, 43, 47, 45, 29, 52, 59, 41, 29, 53, 19, 50, 22, 42, 59,
-51, 18, 20, 21, 23, 57, 37, 42, 36, 47, 20, 42, 53, 19, 46, 28,
-30, 30, 40, 37, 36, 23, 45, 52, 21, 60, 34, 30, 53, 32, 29, 56,
-43, 38, 38, 46, 58, 34, 53, 31, 30, 31, 39, 39, 30, 53, 34, 31,
-29, 33, 28, 28, 46, 43, 42, 26, 37, 36, 33, 40, 29, 32, 45, 28,
-54, 41, 48, 44, 45, 29, 31, 39, 43, 43, 29, 30, 21, 28, 20, 34,
-51, 40, 32, 27, 25, 27, 59, 55, 43, 33, 32, 33, 62, 45, 40, 48,
-28, 50, 36, 59, 36, 26, 23, 25, 53, 28, 33, 31, 31, 25, 24, 27,
-42, 40, 27, 49, 61, 50, 49, 63, 23, 28, 51, 32, 48, 45, 46, 28,
-54, 21, 57, 54, 43, 51, 55, 64, 34, 58, 41, 25, 52, 52, 50, 62,
-49, 54, 34, 55, 34, 29, 53, 56, 29, 28, 48, 32, 30, 51, 56, 43,
-55, 30, 52, 25, 52, 58, 45, 56, 59, 49, 40, 50, 30, 48, 46, 45,
-49, 26, 27, 54, 50, 53, 50, 32, 28, 39, 19, 22, 39, 52, 42, 24,
-53, 29, 58, 54, 35, 58, 34, 41, 26, 46, 27, 38, 56, 32, 44, 41,
-32, 23, 43, 54, 21, 60, 34, 47, 43, 39, 52, 21, 45, 41, 56, 28,
-58, 49, 30, 51, 24, 30, 47, 61, 29, 26, 38, 54, 25, 37, 41, 58,
-53, 54, 37, 36, 47, 39, 51, 44, 35, 19, 56, 44, 40, 32, 30, 21,
-30, 32, 43, 56, 46, 32, 52, 28, 43, 50, 27, 58, 55, 35, 43, 54,
-32, 37, 46, 23, 48, 60, 29, 43, 24, 24, 39, 40, 52, 47, 53, 51,
-35, 52, 26, 52, 33, 47, 24, 34, 47, 36, 40, 37, 45, 33, 31, 31,
-55, 50, 61, 44, 33, 51, 41, 34, 61, 50, 55, 52, 61, 39, 63, 51,
-57, 28, 45, 54, 45, 20, 52, 39, 37, 51, 35, 34, 57, 37, 58, 32,
-55, 50, 42, 24, 35, 58, 49, 22, 30, 40, 22, 20, 56, 36, 45, 20,
-47, 30, 36, 56, 42, 45, 54, 57, 52, 31, 44, 31, 32, 59, 36, 58,
-33, 31, 43, 42, 56, 35, 52, 48, 37, 35, 39, 39, 44, 23, 48, 26,
-45, 48, 31, 30, 32, 46, 36, 44, 41, 35, 44, 21, 39, 48, 28, 34,
-31, 29, 49, 31, 21, 40, 38, 39, 27, 25, 39, 51, 31, 38, 33, 31,
-41, 37, 39, 29, 55, 26, 34, 23, 45, 39, 34, 35, 24, 31, 30, 29,
-45, 33, 37, 45, 37, 51, 30, 32, 46, 28, 38, 43, 38, 52, 29, 28,
-46, 43, 39, 41, 35, 35, 48, 48, 39, 42, 38, 37, 26, 57, 40, 32,
-35, 47, 24, 49, 39, 40, 47, 33, 33, 40, 32, 32, 32, 38, 29, 28,
-30, 44, 32, 43, 47, 37, 33, 49, 30, 39, 44, 31, 51, 57, 22, 27,
-36, 26, 34, 34, 29, 45, 33, 49, 37, 30, 33, 32, 43, 45, 29, 43,
-27, 35, 43, 40, 48, 35, 33, 44, 51, 25, 41, 59, 43, 51, 42, 38,
-47, 41, 44, 42, 40, 45, 27, 34, 48, 43, 29, 47, 30, 38, 28, 51,
-51, 26, 38, 37, 49, 30, 38, 40, 39, 45, 41, 31, 36, 32, 38, 33,
-32, 33, 34, 36, 35, 43, 39, 45, 38, 54, 39, 32, 36, 28, 40, 44,
-40, 32, 43, 34, 31, 34, 51, 34, 38, 43, 52, 41, 49, 35, 39, 51,
-47, 36, 35, 29, 49, 36, 36, 37, 32, 31, 50, 18, 44, 37, 39, 50,
-59, 24, 36, 27, 48, 31, 51, 30, 33, 32, 46, 48, 24, 53, 38, 43,
-35, 47, 31, 45, 41, 41, 31, 45, 38, 48, 18, 40, 23, 57, 48, 30,
-32, 32, 49, 33, 33, 34, 31, 35, 38, 46, 41, 29, 51, 45, 40, 36,
-24, 39, 40, 44, 52, 35, 55, 47, 36, 49, 43, 42, 19, 33, 26, 50,
-56, 40, 38, 30, 32, 34, 50, 44, 37, 54, 46, 36, 51, 41, 47, 47,
-36, 42, 45, 47, 41, 59, 46, 46, 56, 40, 43, 51, 31, 35, 60, 45,
-30, 24, 44, 34, 48, 58, 25, 59, 45, 41, 54, 58, 33, 31, 33, 46,
-35, 47, 48, 56, 34, 35, 24, 41, 24, 40, 24, 21, 49, 49, 45, 47,
-38, 41, 19, 21, 27, 23, 47, 23, 43, 27, 35, 22, 24, 27, 41, 38,
-38, 35, 44, 36, 23, 45, 38, 38, 35, 45, 33, 29, 30, 32, 54, 41,
-43, 48, 43, 35, 29, 43, 24, 34, 46, 46, 28, 35, 30, 42, 53, 41,
-50, 46, 47, 30, 54, 32, 33, 32, 55, 25, 53, 36, 46, 32, 45, 44,
-46, 44, 55, 41, 59, 39, 40, 23, 41, 35, 34, 46, 58, 52, 59, 55,
-53, 48, 43, 34, 55, 19, 42, 43, 56, 29, 35, 44, 29, 23, 23, 57,
-31, 38, 28, 25, 44, 26, 59, 33, 29, 34, 53, 50, 55, 44, 28, 25,
-32, 33, 27, 30, 46, 38, 40, 40, 46, 48, 24, 51, 38, 32, 54, 34,
-17, 37, 32, 45, 55, 31, 29, 26, 31, 55, 57, 40, 33, 46, 38, 30,
-62, 23, 30, 30, 59, 63, 35, 37, 25, 39, 42, 39, 47, 46, 26, 60,
-36, 29, 34, 42, 46, 39, 24, 31, 44, 27, 41, 51, 51, 22, 58, 41,
-39, 37, 33, 66, 35, 37, 48, 60, 40, 39, 31, 49, 60, 22, 21, 37,
-44, 39, 48, 38, 65, 36, 56, 36, 31, 36, 33, 35, 43, 40, 32, 21,
-26, 38, 31, 32, 46, 41, 34, 44, 44, 35, 31, 44, 40, 29, 33, 55,
-39, 20, 40, 29, 27, 35, 35, 33, 38, 42, 45, 44, 30, 51, 35, 21,
-22, 34, 55, 34, 18, 23, 41, 36, 35, 20, 53, 57, 35, 55, 22, 35,
-39, 37, 39, 32, 46, 29, 37, 34, 40, 54, 31, 23, 34, 36, 28, 34,
-33, 30, 35, 27, 20, 19, 48, 56, 45, 35, 56, 19, 20, 37, 22, 36,
-42, 19, 35, 35, 51, 45, 55, 45, 32, 48, 39, 54, 29, 16, 17, 44,
-60, 28, 18, 36, 24, 24, 25, 56, 41, 21, 22, 31, 42, 42, 35, 45,
-50, 52, 48, 54, 58, 52, 53, 48, 56, 40, 59, 29, 54, 30, 51, 28,
-41, 44, 50, 40, 47, 38, 34, 42, 44, 23, 27, 40, 29, 39, 28, 54,
-48, 52, 23, 52, 33, 46, 45, 48, 45, 41, 47, 36, 37, 45, 47, 47,
-37, 43, 33, 28, 32, 29, 48, 44, 31, 45, 39, 32, 45, 59, 31, 59,
-42, 37, 42, 47, 38, 21, 41, 40, 28, 20, 38, 28, 37, 36, 37, 37,
-45, 39, 25, 47, 55, 40, 36, 34, 36, 34, 54, 20, 20, 54, 44, 29,
-26, 20, 37, 24, 56, 45, 57, 53, 56, 30, 55, 23, 45, 37, 51, 54,
-55, 44, 26, 57, 40, 64, 17, 21, 29, 26, 32, 49, 36, 57, 34, 34,
-38, 51, 32, 49, 40, 61, 46, 50, 45, 19, 51, 27, 46, 59, 33, 46,
-30, 44, 35, 31, 41, 37, 25, 54, 43, 36, 45, 42, 33, 50, 45, 50,
-52, 53, 33, 26, 39, 45, 39, 29, 40, 41, 49, 26, 34, 41, 48, 42,
-41, 43, 30, 31, 43, 42, 45, 44, 22, 36, 50, 26, 40, 35, 40, 31,
-33, 36, 39, 28, 25, 40, 31, 44, 26, 54, 36, 22, 33, 22, 35, 42,
-43, 53, 46, 45, 40, 33, 42, 44, 58, 46, 52, 63, 32, 55, 21, 41,
-21, 20, 39, 37, 44, 29, 31, 40, 33, 33, 50, 52, 37, 43, 51, 23,
-24, 23, 23, 28, 42, 42, 52, 56, 56, 44, 24, 53, 25, 49, 44, 41,
-23, 39, 43, 49, 41, 48, 29, 55, 39, 27, 36, 21, 44, 28, 47, 44,
-42, 35, 41, 32, 31, 20, 47, 30, 37, 56, 50, 43, 58, 32, 56, 28,
-26, 25, 50, 42, 21, 45, 21, 20, 53, 43, 38, 56, 40, 25, 50, 34,
-52, 45, 29, 51, 29, 34, 43, 35, 44, 42, 42, 23, 45, 53, 49, 30,
-25, 22, 57, 28, 33, 32, 49, 30, 26, 22, 37, 51, 56, 58, 48, 23,
-38, 26, 36, 48, 58, 48, 39, 48, 35, 55, 52, 37, 42, 47, 33, 25,
-50, 35, 33, 50, 48, 44, 37, 60, 21, 20, 23, 22, 30, 33, 35, 50,
-31, 35, 33, 25, 22, 38, 20, 52, 44, 29, 42, 45, 20, 29, 51, 39,
-37, 46, 33, 43, 27, 39, 46, 46, 49, 20, 46, 41, 20, 23, 23, 32,
-30, 23, 50, 34, 31, 20, 34, 24, 33, 54, 23, 33, 48, 31, 58, 37,
-23, 38, 57, 50, 58, 53, 26, 32, 48, 41, 59, 29, 33, 32, 45, 24,
-33, 20, 23, 54, 56, 30, 21, 22, 53, 24, 29, 23, 48, 51, 27, 26,
-28, 48, 58, 57, 29, 48, 44, 54, 22, 34, 48, 30, 55, 34, 22, 55,
-42, 58, 24, 33, 22, 33, 56, 55, 59, 45, 21, 52, 22, 35, 35, 52,
-47, 48, 51, 33, 38, 53, 49, 28, 46, 54, 26, 38, 36, 35, 28, 40,
-44, 30, 33, 44, 41, 22, 34, 33, 51, 21, 41, 30, 57, 32, 21, 47,
-24, 63, 21, 47, 29, 50, 48, 40, 54, 54, 56, 51, 36, 37, 21, 48,
-44, 47, 55, 44, 30, 28, 23, 25, 50, 55, 36, 48, 37, 34, 38, 36,
-43, 30, 36, 50, 50, 26, 25, 30, 26, 33, 36, 43, 33, 47, 37, 54,
-32, 19, 33, 45, 19, 45, 44, 30, 60, 42, 35, 31, 35, 34, 40, 61,
-32, 49, 44, 42, 41, 47, 41, 54, 29, 33, 27, 36, 32, 46, 41, 52,
-51, 40, 49, 24, 34, 55, 43, 47, 57, 62, 38, 63, 25, 41, 31, 48,
-42, 51, 30, 37, 58, 36, 35, 24, 46, 45, 46, 58, 17, 31, 29, 60,
-44, 25, 42, 54, 18, 56, 34, 34, 39, 48, 33, 40, 34, 45, 31, 52,
-34, 59, 43, 45, 34, 42, 41, 59, 36, 38, 36, 50, 51, 55, 29, 24,
-41, 59, 28, 51, 33, 31, 52, 45, 44, 42, 46, 38, 37, 40, 52, 40,
-33, 32, 49, 34, 32, 35, 56, 23, 41, 23, 39, 65, 24, 36, 33, 28,
-45, 66, 51, 44, 35, 47, 27, 44, 36, 31, 59, 50, 47, 37, 28, 50,
-40, 43, 45, 20, 40, 56, 33, 29, 59, 32, 45, 38, 43, 46, 40, 29,
-39, 42, 42, 32, 35, 46, 35, 50, 22, 30, 30, 36, 42, 34, 29, 52,
-28, 41, 38, 40, 51, 43, 36, 19, 29, 54, 37, 33, 43, 59, 35, 43,
-28, 38, 58, 46, 55, 26, 59, 33, 34, 38, 28, 53, 26, 26, 33, 28,
-24, 32, 27, 52, 22, 38, 35, 39, 39, 33, 34, 21, 53, 34, 44, 33,
-28, 56, 57, 52, 46, 46, 20, 53, 41, 35, 46, 55, 35, 50, 56, 47,
-23, 52, 24, 53, 28, 19, 49, 27, 37, 37, 41, 32, 47, 44, 36, 52,
-38, 44, 47, 33, 58, 29, 48, 37, 50, 53, 55, 32, 26, 60, 58, 23,
-32, 30, 45, 46, 59, 45, 54, 36, 29, 44, 20, 36, 32, 60, 42, 59,
-35, 24, 21, 22, 32, 37, 23, 52, 45, 21, 34, 44, 48, 26, 30, 47,
-24, 33, 25, 38, 42, 41, 33, 30, 45, 36, 42, 36, 45, 34, 52, 53,
-25, 44, 53, 45, 31, 23, 52, 35, 45, 31, 42, 26, 43, 47, 31, 48,
-41, 42, 24, 48, 40, 36, 45, 52, 29, 52, 52, 34, 45, 47, 26, 26,
-48, 32, 26, 48, 37, 27, 38, 59, 20, 55, 50, 52, 32, 45, 42, 62,
-33, 24, 22, 35, 32, 22, 27, 40, 60, 53, 35, 40, 39, 28, 49, 23,
-53, 20, 35, 50, 32, 40, 31, 26, 56, 36, 25, 47, 45, 30, 37, 55,
-86, 36, 48, 37, 57, 44, 49, 22, 54, 50, 48, 25, 26, 23, 40, 35,
-53, 51, 42, 50, 54, 48, 54, 37, 45, 55, 46, 36, 44, 52, 43, 34,
-43, 38, 36, 25, 27, 19, 37, 42, 36, 51, 39, 37, 46, 35, 43, 46,
-37, 39, 36, 21, 26, 50, 36, 20, 34, 43, 20, 47, 24, 38, 58, 43,
-39, 29, 45, 26, 26, 46, 28, 34, 35, 27, 37, 28, 28, 29, 30, 30,
-27, 23, 35, 46, 45, 88, 47, 42, 37, 24, 32, 28, 40, 27, 50, 34,
-36, 30, 41, 50, 22, 19, 21, 36, 31, 57, 42, 32, 28, 88, 25, 34,
-57, 54, 49, 56, 37, 40, 27, 23, 57, 46, 35, 38, 29, 59, 49, 26,
-26, 29, 27, 35, 32, 38, 32, 41, 26, 30, 36, 40, 28, 24, 47, 41,
-40, 34, 23, 35, 60, 40, 34, 47, 30, 42, 28), ethnicity = structure(c(1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
-1L, 1L, 1L, 1L), .Label = c("European", "Maori", "Other", "Polynesian"
-), class = "factor"), mstatus = structure(c(3L, 2L, 2L, 1L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L,
-2L, 2L, 2L, 1L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 4L, 2L, 1L, 2L, 3L, 1L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L,
-3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L,
-2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 3L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L,
-3L, 2L, 3L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 4L, 2L, 3L, 3L, 2L, 1L,
-3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 3L, 2L,
-2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 3L, 2L,
-1L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 3L, 3L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L,
-3L, 3L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 1L,
-3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-3L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 4L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 4L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L,
-3L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L,
-1L, 3L, 4L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L,
-2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 3L,
-2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 4L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 4L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
-2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-2L, 1L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 3L,
-2L, 3L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 3L, 4L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 4L, 2L, 1L, 3L,
-2L, 2L, 1L, 2L, 2L, 2L, 4L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 4L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 4L, 2L, 4L, 2L, 1L, 1L, 2L,
-2L, 2L, 1L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 4L, 2L,
-2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
-3L, 3L, 2L, 2L, 2L, 2L, 2L, 4L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-4L, 4L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
-2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 4L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 1L, 2L, 2L, 1L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 4L, 4L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 4L, 2L, 4L, 4L, 2L, 2L, 1L, 2L, 2L, 2L, 4L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 1L, 4L, 2L, 2L, 4L, 2L, 2L, 3L, 1L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L,
-4L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 4L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L,
-4L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 3L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 4L, 1L, 1L, 2L, 2L,
-1L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 4L,
-2L, 2L, 2L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 2L, 2L, 2L, 2L,
-4L, 1L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 1L, 2L, 4L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 1L, 2L, 2L, 4L, 2L,
-4L, 2L, 2L, 2L, 4L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 4L, 2L, 4L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 4L, 2L, 2L, 4L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 4L, 2L, 2L, 4L, 1L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 4L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 4L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 1L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 2L, 2L, 1L, 2L, 2L, 2L,
-2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-4L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 4L, 4L, 2L, 2L, 2L,
-2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 4L, 2L, 2L, 2L, 2L, 2L, 4L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 4L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L,
-3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 1L, 4L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L,
-3L, 2L, 3L, 2L, 1L, 2L, 3L, 3L, 2L, 1L, 3L, 3L, 2L, 2L, 4L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 2L, 3L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 3L, 3L, 2L, 1L, 3L, 2L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L,
-3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L,
-2L, 2L, 2L, 2L, 3L, 1L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 1L, 3L, 1L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L, 2L,
-3L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
-2L, 2L, 3L, 2L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L,
-1L, 3L, 2L, 4L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-3L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 1L, 3L, 3L, 2L, 2L, 3L,
-2L, 1L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L,
-3L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 3L, 3L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L,
-2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 3L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 2L, 3L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 1L, 3L, 3L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-4L, 2L, 3L, 1L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 4L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L,
-2L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 1L, 3L, 3L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 3L, 2L, 2L, 4L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 2L, 3L, 3L, 3L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 1L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 1L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 1L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L,
-3L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 3L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L,
-3L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 3L,
-3L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L,
-2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 4L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 3L, 2L,
-3L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 4L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L,
-2L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 3L,
-2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 3L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 2L, 2L, 3L,
-3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L,
-1L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-1L, 2L, 1L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-1L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-4L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 3L, 3L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 3L, 1L, 3L, 4L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 2L,
-3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 1L,
-2L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 3L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-4L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 3L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 2L,
-3L, 2L, 1L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 2L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 1L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-3L, 3L, 2L, 2L, 2L, 3L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 3L, 2L,
-3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
-2L, 1L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L,
-3L, 2L, 3L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 3L, 2L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 2L,
-3L, 3L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-3L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L,
-3L, 1L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 2L, 3L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 1L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 4L, 3L, 3L, 1L, 2L, 2L, 2L, 3L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 3L,
-1L, 2L, 3L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L,
-2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 3L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-3L, 3L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 1L, 2L, 2L,
-2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 2L, 1L, 3L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 2L, 1L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L,
-3L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 1L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
-2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 2L, 2L, 3L,
-2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 1L,
-2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L,
-3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 2L, 2L, 2L,
-1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 2L, 2L,
-2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
-2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L
-), .Label = c("Divorced/Separated", "Married/Partnered", "Single",
-"Widowed"), class = "factor")), .Names = c("age", "ethnicity",
-"mstatus"), row.names = c(1L, 2L, 3L, 4L, 5L, 7L, 10L, 11L, 12L,
-13L, 16L, 20L, 22L, 24L, 26L, 31L, 32L, 33L, 37L, 40L, 44L, 46L,
-47L, 48L, 49L, 50L, 52L, 53L, 54L, 57L, 58L, 59L, 66L, 68L, 77L,
-78L, 80L, 81L, 85L, 86L, 87L, 88L, 90L, 94L, 96L, 97L, 98L, 100L,
-103L, 104L, 105L, 107L, 108L, 109L, 110L, 111L, 115L, 117L, 120L,
-122L, 124L, 125L, 126L, 127L, 130L, 131L, 133L, 134L, 135L, 138L,
-140L, 148L, 149L, 150L, 153L, 155L, 157L, 158L, 159L, 160L, 162L,
-163L, 164L, 168L, 169L, 170L, 171L, 177L, 178L, 179L, 186L, 188L,
-190L, 195L, 199L, 202L, 203L, 205L, 206L, 207L, 208L, 212L, 214L,
-216L, 217L, 219L, 220L, 221L, 222L, 223L, 225L, 230L, 233L, 234L,
-235L, 236L, 237L, 238L, 240L, 242L, 243L, 244L, 246L, 248L, 250L,
-253L, 257L, 259L, 260L, 262L, 263L, 264L, 265L, 266L, 268L, 269L,
-270L, 277L, 279L, 281L, 284L, 286L, 288L, 289L, 291L, 292L, 294L,
-295L, 296L, 303L, 305L, 307L, 309L, 310L, 311L, 312L, 313L, 314L,
-315L, 316L, 319L, 320L, 321L, 322L, 325L, 326L, 327L, 328L, 330L,
-331L, 333L, 334L, 336L, 337L, 338L, 340L, 341L, 346L, 347L, 349L,
-351L, 352L, 357L, 358L, 360L, 362L, 363L, 368L, 370L, 371L, 373L,
-374L, 377L, 382L, 383L, 384L, 387L, 388L, 391L, 395L, 399L, 402L,
-405L, 406L, 407L, 408L, 411L, 413L, 417L, 419L, 420L, 421L, 422L,
-424L, 425L, 427L, 436L, 444L, 447L, 448L, 456L, 458L, 459L, 460L,
-462L, 467L, 469L, 472L, 477L, 480L, 481L, 487L, 489L, 491L, 494L,
-495L, 499L, 501L, 503L, 505L, 509L, 510L, 512L, 515L, 518L, 520L,
-522L, 523L, 524L, 525L, 528L, 531L, 535L, 536L, 539L, 540L, 542L,
-543L, 544L, 545L, 552L, 553L, 554L, 556L, 557L, 558L, 559L, 560L,
-562L, 563L, 567L, 574L, 575L, 576L, 577L, 578L, 579L, 580L, 584L,
-585L, 586L, 588L, 589L, 591L, 592L, 594L, 595L, 596L, 598L, 600L,
-602L, 603L, 613L, 618L, 626L, 627L, 628L, 629L, 633L, 635L, 636L,
-637L, 638L, 639L, 640L, 641L, 643L, 646L, 647L, 648L, 651L, 652L,
-653L, 654L, 655L, 656L, 657L, 659L, 661L, 662L, 666L, 669L, 670L,
-671L, 672L, 674L, 675L, 677L, 679L, 681L, 682L, 685L, 687L, 690L,
-692L, 693L, 708L, 709L, 710L, 711L, 712L, 716L, 719L, 721L, 724L,
-733L, 739L, 742L, 745L, 746L, 748L, 749L, 750L, 751L, 752L, 753L,
-754L, 756L, 757L, 761L, 762L, 763L, 764L, 769L, 770L, 773L, 774L,
-775L, 776L, 778L, 781L, 783L, 785L, 788L, 789L, 790L, 792L, 793L,
-795L, 796L, 797L, 798L, 801L, 802L, 803L, 807L, 810L, 811L, 813L,
-814L, 815L, 818L, 820L, 823L, 825L, 826L, 828L, 829L, 831L, 832L,
-834L, 839L, 841L, 844L, 847L, 849L, 851L, 853L, 855L, 857L, 862L,
-863L, 865L, 872L, 873L, 880L, 884L, 885L, 886L, 890L, 894L, 895L,
-896L, 897L, 898L, 900L, 901L, 902L, 904L, 905L, 906L, 907L, 910L,
-912L, 916L, 918L, 919L, 920L, 924L, 933L, 934L, 935L, 936L, 937L,
-938L, 940L, 941L, 943L, 944L, 945L, 953L, 955L, 956L, 957L, 958L,
-960L, 961L, 962L, 967L, 972L, 973L, 976L, 977L, 978L, 980L, 981L,
-982L, 989L, 990L, 995L, 996L, 997L, 998L, 1003L, 1004L, 1006L,
-1007L, 1008L, 1009L, 1010L, 1011L, 1017L, 1020L, 1022L, 1024L,
-1027L, 1029L, 1030L, 1031L, 1033L, 1034L, 1036L, 1037L, 1038L,
-1040L, 1041L, 1042L, 1043L, 1044L, 1045L, 1046L, 1048L, 1049L,
-1052L, 1055L, 1056L, 1058L, 1059L, 1060L, 1061L, 1062L, 1063L,
-1064L, 1065L, 1066L, 1067L, 1068L, 1069L, 1070L, 1072L, 1073L,
-1075L, 1076L, 1077L, 1079L, 1080L, 1081L, 1083L, 1084L, 1086L,
-1087L, 1088L, 1091L, 1092L, 1093L, 1097L, 1100L, 1101L, 1104L,
-1107L, 1109L, 1112L, 1116L, 1119L, 1123L, 1124L, 1126L, 1127L,
-1128L, 1129L, 1131L, 1132L, 1133L, 1134L, 1135L, 1137L, 1138L,
-1139L, 1140L, 1141L, 1143L, 1144L, 1145L, 1147L, 1148L, 1149L,
-1151L, 1154L, 1156L, 1166L, 1170L, 1173L, 1174L, 1179L, 1182L,
-1184L, 1186L, 1191L, 1193L, 1196L, 1198L, 1199L, 1201L, 1202L,
-1203L, 1209L, 1210L, 1223L, 1224L, 1225L, 1230L, 1231L, 1232L,
-1237L, 1238L, 1239L, 1241L, 1245L, 1251L, 1253L, 1256L, 1257L,
-1259L, 1260L, 1261L, 1262L, 1266L, 1267L, 1272L, 1273L, 1275L,
-1276L, 1279L, 1281L, 1283L, 1284L, 1285L, 1286L, 1289L, 1291L,
-1292L, 1295L, 1297L, 1298L, 1299L, 1301L, 1302L, 1303L, 1308L,
-1314L, 1315L, 1317L, 1318L, 1319L, 1321L, 1323L, 1325L, 1326L,
-1327L, 1328L, 1330L, 1333L, 1340L, 1341L, 1342L, 1345L, 1346L,
-1347L, 1348L, 1350L, 1352L, 1355L, 1356L, 1358L, 1360L, 1367L,
-1369L, 1377L, 1382L, 1383L, 1384L, 1386L, 1387L, 1388L, 1389L,
-1391L, 1393L, 1394L, 1395L, 1397L, 1398L, 1401L, 1405L, 1406L,
-1409L, 1412L, 1413L, 1415L, 1418L, 1420L, 1422L, 1424L, 1429L,
-1432L, 1433L, 1436L, 1437L, 1443L, 1444L, 1450L, 1451L, 1452L,
-1456L, 1457L, 1463L, 1464L, 1465L, 1466L, 1467L, 1468L, 1469L,
-1470L, 1471L, 1472L, 1473L, 1474L, 1475L, 1476L, 1478L, 1479L,
-1480L, 1481L, 1482L, 1485L, 1488L, 1489L, 1490L, 1494L, 1495L,
-1497L, 1498L, 1499L, 1500L, 1501L, 1502L, 1504L, 1506L, 1507L,
-1509L, 1510L, 1511L, 1512L, 1513L, 1514L, 1515L, 1516L, 1518L,
-1519L, 1520L, 1522L, 1523L, 1524L, 1525L, 1526L, 1529L, 1530L,
-1534L, 1535L, 1536L, 1538L, 1539L, 1540L, 1541L, 1542L, 1543L,
-1544L, 1545L, 1547L, 1549L, 1550L, 1552L, 1558L, 1559L, 1562L,
-1566L, 1567L, 1569L, 1575L, 1576L, 1581L, 1582L, 1584L, 1587L,
-1589L, 1591L, 1593L, 1594L, 1595L, 1596L, 1597L, 1599L, 1600L,
-1601L, 1603L, 1604L, 1606L, 1607L, 1609L, 1610L, 1613L, 1614L,
-1615L, 1617L, 1618L, 1619L, 1620L, 1621L, 1622L, 1623L, 1624L,
-1626L, 1627L, 1628L, 1629L, 1630L, 1631L, 1632L, 1633L, 1634L,
-1638L, 1639L, 1640L, 1641L, 1642L, 1643L, 1644L, 1645L, 1646L,
-1647L, 1650L, 1651L, 1652L, 1653L, 1655L, 1656L, 1657L, 1658L,
-1659L, 1660L, 1661L, 1662L, 1663L, 1666L, 1667L, 1668L, 1669L,
-1670L, 1671L, 1672L, 1673L, 1674L, 1675L, 1676L, 1677L, 1678L,
-1679L, 1681L, 1682L, 1683L, 1685L, 1687L, 1688L, 1689L, 1690L,
-1691L, 1692L, 1694L, 1696L, 1697L, 1699L, 1701L, 1702L, 1704L,
-1708L, 1709L, 1711L, 1713L, 1715L, 1716L, 1718L, 1721L, 1722L,
-1723L, 1724L, 1725L, 1727L, 1728L, 1730L, 1731L, 1736L, 1737L,
-1738L, 1741L, 1742L, 1745L, 1748L, 1749L, 1751L, 1752L, 1753L,
-1755L, 1756L, 1758L, 1759L, 1761L, 1764L, 1765L, 1766L, 1767L,
-1769L, 1770L, 1771L, 1773L, 1774L, 1775L, 1776L, 1777L, 1778L,
-1779L, 1780L, 1781L, 1782L, 1783L, 1784L, 1785L, 1786L, 1787L,
-1788L, 1790L, 1791L, 1792L, 1793L, 1794L, 1796L, 1797L, 1798L,
-1800L, 1801L, 1802L, 1803L, 1804L, 1805L, 1806L, 1807L, 1808L,
-1810L, 1811L, 1813L, 1814L, 1815L, 1816L, 1818L, 1819L, 1820L,
-1822L, 1828L, 1829L, 1832L, 1834L, 1835L, 1836L, 1837L, 1839L,
-1840L, 1841L, 1843L, 1845L, 1849L, 1852L, 1855L, 1856L, 1857L,
-1858L, 1859L, 1860L, 1861L, 1862L, 1863L, 1865L, 1867L, 1870L,
-1871L, 1874L, 1880L, 1881L, 1882L, 1883L, 1884L, 1885L, 1886L,
-1888L, 1889L, 1891L, 1892L, 1893L, 1894L, 1897L, 1903L, 1904L,
-1907L, 1908L, 1909L, 1911L, 1912L, 1913L, 1915L, 1917L, 1921L,
-1925L, 1926L, 1929L, 1930L, 1931L, 1932L, 1935L, 1936L, 1937L,
-1939L, 1942L, 1943L, 1944L, 1945L, 1947L, 1950L, 1954L, 1956L,
-1959L, 1962L, 1963L, 1964L, 1966L, 1973L, 1976L, 1977L, 1978L,
-1979L, 1980L, 1981L, 1982L, 1983L, 1984L, 1985L, 1986L, 1988L,
-1990L, 1991L, 1992L, 1993L, 1995L, 1996L, 1997L, 1999L, 2000L,
-2002L, 2003L, 2004L, 2005L, 2008L, 2009L, 2011L, 2013L, 2014L,
-2016L, 2017L, 2019L, 2020L, 2021L, 2022L, 2023L, 2024L, 2026L,
-2028L, 2030L, 2031L, 2033L, 2035L, 2036L, 2037L, 2039L, 2040L,
-2041L, 2042L, 2043L, 2046L, 2049L, 2053L, 2056L, 2059L, 2060L,
-2061L, 2063L, 2065L, 2066L, 2067L, 2069L, 2070L, 2075L, 2077L,
-2081L, 2083L, 2087L, 2088L, 2089L, 2091L, 2092L, 2096L, 2097L,
-2099L, 2105L, 2107L, 2110L, 2117L, 2118L, 2119L, 2122L, 2123L,
-2125L, 2126L, 2128L, 2130L, 2131L, 2132L, 2133L, 2136L, 2137L,
-2138L, 2139L, 2142L, 2143L, 2144L, 2145L, 2146L, 2148L, 2149L,
-2150L, 2151L, 2152L, 2153L, 2156L, 2157L, 2158L, 2160L, 2161L,
-2162L, 2165L, 2166L, 2167L, 2168L, 2171L, 2172L, 2173L, 2174L,
-2176L, 2177L, 2178L, 2181L, 2184L, 2185L, 2188L, 2189L, 2190L,
-2192L, 2193L, 2195L, 2196L, 2200L, 2201L, 2204L, 2206L, 2210L,
-2212L, 2222L, 2223L, 2228L, 2230L, 2232L, 2234L, 2235L, 2236L,
-2237L, 2240L, 2242L, 2255L, 2257L, 2258L, 2259L, 2261L, 2262L,
-2269L, 2270L, 2274L, 2280L, 2283L, 2284L, 2290L, 2299L, 2301L,
-2303L, 2304L, 2305L, 2311L, 2313L, 2314L, 2316L, 2318L, 2319L,
-2322L, 2325L, 2327L, 2329L, 2330L, 2332L, 2336L, 2337L, 2339L,
-2341L, 2343L, 2349L, 2350L, 2351L, 2352L, 2353L, 2354L, 2356L,
-2358L, 2372L, 2377L, 2378L, 2379L, 2385L, 2388L, 2390L, 2391L,
-2395L, 2404L, 2406L, 2407L, 2409L, 2410L, 2411L, 2412L, 2413L,
-2416L, 2417L, 2420L, 2421L, 2422L, 2424L, 2425L, 2428L, 2429L,
-2431L, 2433L, 2434L, 2435L, 2436L, 2438L, 2439L, 2440L, 2443L,
-2445L, 2446L, 2447L, 2448L, 2449L, 2450L, 2451L, 2452L, 2453L,
-2454L, 2455L, 2461L, 2462L, 2463L, 2465L, 2466L, 2468L, 2469L,
-2470L, 2471L, 2472L, 2474L, 2475L, 2476L, 2477L, 2478L, 2479L,
-2480L, 2484L, 2486L, 2488L, 2491L, 2492L, 2493L, 2496L, 2497L,
-2498L, 2501L, 2502L, 2503L, 2504L, 2506L, 2507L, 2511L, 2514L,
-2518L, 2519L, 2520L, 2521L, 2523L, 2525L, 2527L, 2529L, 2532L,
-2533L, 2534L, 2536L, 2537L, 2538L, 2540L, 2541L, 2542L, 2543L,
-2544L, 2548L, 2549L, 2551L, 2552L, 2553L, 2554L, 2556L, 2557L,
-2558L, 2559L, 2561L, 2563L, 2566L, 2567L, 2568L, 2569L, 2572L,
-2574L, 2575L, 2577L, 2578L, 2579L, 2582L, 2584L, 2585L, 2586L,
-2589L, 2590L, 2591L, 2593L, 2594L, 2595L, 2598L, 2600L, 2601L,
-2602L, 2603L, 2604L, 2605L, 2607L, 2608L, 2609L, 2610L, 2612L,
-2614L, 2615L, 2616L, 2619L, 2620L, 2625L, 2628L, 2629L, 2632L,
-2633L, 2635L, 2636L, 2639L, 2640L, 2641L, 2645L, 2646L, 2651L,
-2655L, 2657L, 2659L, 2661L, 2664L, 2665L, 2666L, 2668L, 2669L,
-2670L, 2671L, 2677L, 2679L, 2680L, 2681L, 2682L, 2683L, 2684L,
-2686L, 2689L, 2691L, 2692L, 2695L, 2696L, 2697L, 2706L, 2712L,
-2716L, 2717L, 2719L, 2720L, 2721L, 2723L, 2724L, 2734L, 2735L,
-2736L, 2737L, 2741L, 2742L, 2743L, 2744L, 2748L, 2749L, 2750L,
-2753L, 2754L, 2755L, 2758L, 2759L, 2760L, 2761L, 2764L, 2768L,
-2770L, 2771L, 2772L, 2774L, 2777L, 2780L, 2782L, 2788L, 2790L,
-2791L, 2796L, 2797L, 2798L, 2800L, 2802L, 2803L, 2804L, 2805L,
-2810L, 2811L, 2816L, 2818L, 2819L, 2820L, 2821L, 2824L, 2825L,
-2828L, 2830L, 2832L, 2835L, 2836L, 2837L, 2842L, 2845L, 2847L,
-2848L, 2849L, 2850L, 2855L, 2856L, 2860L, 2863L, 2866L, 2876L,
-2877L, 2889L, 2891L, 2894L, 2895L, 2896L, 2898L, 2902L, 2904L,
-2905L, 2914L, 2916L, 2921L, 2922L, 2924L, 2928L, 2933L, 2934L,
-2936L, 2937L, 2939L, 2941L, 2942L, 2944L, 2945L, 2946L, 2948L,
-2950L, 2952L, 2955L, 2957L, 2961L, 2962L, 2963L, 2968L, 2969L,
-2971L, 2972L, 2975L, 2976L, 2977L, 2978L, 2979L, 2982L, 2983L,
-2985L, 2988L, 2990L, 2991L, 2992L, 2996L, 2999L, 3000L, 3001L,
-3002L, 3005L, 3008L, 3009L, 3011L, 3014L, 3015L, 3016L, 3017L,
-3022L, 3024L, 3027L, 3028L, 3030L, 3031L, 3034L, 3035L, 3038L,
-3040L, 3043L, 3046L, 3047L, 3051L, 3052L, 3058L, 3062L, 3066L,
-3072L, 3073L, 3074L, 3078L, 3082L, 3083L, 3084L, 3085L, 3088L,
-3089L, 3090L, 3092L, 3093L, 3094L, 3096L, 3097L, 3100L, 3102L,
-3104L, 3105L, 3107L, 3110L, 3111L, 3112L, 3113L, 3116L, 3121L,
-3124L, 3128L, 3131L, 3132L, 3133L, 3135L, 3136L, 3139L, 3141L,
-3145L, 3146L, 3148L, 3149L, 3151L, 3152L, 3153L, 3155L, 3157L,
-3160L, 3161L, 3162L, 3170L, 3172L, 3173L, 3174L, 3175L, 3176L,
-3177L, 3180L, 3183L, 3184L, 3185L, 3186L, 3188L, 3190L, 3198L,
-3204L, 3206L, 3209L, 3211L, 3212L, 3216L, 3218L, 3219L, 3228L,
-3230L, 3232L, 3234L, 3235L, 3236L, 3237L, 3239L, 3240L, 3244L,
-3245L, 3246L, 3247L, 3249L, 3251L, 3254L, 3257L, 3258L, 3260L,
-3261L, 3270L, 3271L, 3272L, 3274L, 3275L, 3276L, 3280L, 3284L,
-3290L, 3292L, 3294L, 3295L, 3303L, 3304L, 3309L, 3315L, 3317L,
-3318L, 3319L, 3322L, 3325L, 3326L, 3327L, 3328L, 3329L, 3331L,
-3332L, 3335L, 3337L, 3338L, 3339L, 3341L, 3342L, 3349L, 3353L,
-3355L, 3360L, 3364L, 3365L, 3366L, 3367L, 3369L, 3370L, 3376L,
-3379L, 3381L, 3382L, 3384L, 3386L, 3387L, 3393L, 3395L, 3398L,
-3399L, 3400L, 3404L, 3408L, 3410L, 3411L, 3413L, 3414L, 3417L,
-3421L, 3422L, 3423L, 3424L, 3426L, 3428L, 3430L, 3433L, 3435L,
-3437L, 3439L, 3443L, 3444L, 3446L, 3447L, 3448L, 3449L, 3450L,
-3451L, 3453L, 3454L, 3458L, 3460L, 3462L, 3463L, 3464L, 3467L,
-3468L, 3470L, 3473L, 3479L, 3481L, 3483L, 3488L, 3490L, 3491L,
-3492L, 3493L, 3494L, 3498L, 3499L, 3501L, 3504L, 3505L, 3506L,
-3508L, 3510L, 3511L, 3512L, 3513L, 3515L, 3520L, 3524L, 3525L,
-3528L, 3529L, 3530L, 3531L, 3532L, 3533L, 3536L, 3543L, 3544L,
-3545L, 3546L, 3548L, 3549L, 3551L, 3555L, 3556L, 3557L, 3558L,
-3560L, 3561L, 3562L, 3564L, 3571L, 3577L, 3579L, 3582L, 3584L,
-3585L, 3586L, 3587L, 3588L, 3589L, 3590L, 3591L, 3592L, 3593L,
-3595L, 3597L, 3605L, 3606L, 3608L, 3613L, 3614L, 3615L, 3619L,
-3620L, 3621L, 3622L, 3623L, 3625L, 3628L, 3629L, 3630L, 3634L,
-3638L, 3641L, 3643L, 3644L, 3645L, 3646L, 3647L, 3649L, 3650L,
-3651L, 3654L, 3656L, 3658L, 3659L, 3661L, 3662L, 3665L, 3666L,
-3669L, 3670L, 3671L, 3672L, 3673L, 3674L, 3677L, 3678L, 3680L,
-3681L, 3687L, 3689L, 3692L, 3695L, 3696L, 3697L, 3700L, 3702L,
-3706L, 3712L, 3713L, 3716L, 3718L, 3720L, 3722L, 3723L, 3724L,
-3727L, 3728L, 3729L, 3731L, 3732L, 3733L, 3736L, 3737L, 3738L,
-3739L, 3741L, 3742L, 3744L, 3745L, 3747L, 3749L, 3752L, 3753L,
-3755L, 3756L, 3760L, 3762L, 3763L, 3764L, 3766L, 3767L, 3768L,
-3771L, 3775L, 3776L, 3778L, 3780L, 3781L, 3782L, 3783L, 3785L,
-3788L, 3789L, 3791L, 3792L, 3794L, 3795L, 3796L, 3797L, 3800L,
-3801L, 3806L, 3807L, 3808L, 3809L, 3813L, 3817L, 3818L, 3822L,
-3824L, 3827L, 3829L, 3830L, 3831L, 3833L, 3834L, 3836L, 3837L,
-3839L, 3843L, 3848L, 3849L, 3854L, 3855L, 3857L, 3862L, 3864L,
-3867L, 3868L, 3869L, 3872L, 3874L, 3876L, 3877L, 3878L, 3879L,
-3880L, 3883L, 3884L, 3885L, 3888L, 3892L, 3893L, 3895L, 3898L,
-3901L, 3912L, 3913L, 3916L, 3918L, 3921L, 3922L, 3924L, 3925L,
-3930L, 3931L, 3936L, 3938L, 3943L, 3944L, 3945L, 3947L, 3951L,
-3952L, 3954L, 3959L, 3965L, 3966L, 3968L, 3971L, 3974L, 3977L,
-3980L, 3982L, 3983L, 3985L, 3986L, 3987L, 3988L, 3990L, 3991L,
-3995L, 3996L, 3999L, 4000L, 4003L, 4006L, 4008L, 4009L, 4011L,
-4014L, 4018L, 4019L, 4021L, 4022L, 4023L, 4024L, 4026L, 4027L,
-4028L, 4029L, 4030L, 4033L, 4034L, 4035L, 4042L, 4044L, 4049L,
-4050L, 4055L, 4057L, 4058L, 4059L, 4066L, 4069L, 4074L, 4075L,
-4076L, 4077L, 4079L, 4081L, 4082L, 4083L, 4088L, 4091L, 4093L,
-4094L, 4096L, 4098L, 4099L, 4100L, 4102L, 4104L, 4105L, 4106L,
-4109L, 4114L, 4120L, 4122L, 4123L, 4125L, 4131L, 4132L, 4137L,
-4141L, 4145L, 4146L, 4147L, 4150L, 4151L, 4152L, 4153L, 4154L,
-4157L, 4160L, 4161L, 4163L, 4164L, 4166L, 4172L, 4173L, 4174L,
-4175L, 4176L, 4178L, 4179L, 4180L, 4181L, 4184L, 4185L, 4186L,
-4188L, 4189L, 4190L, 4193L, 4194L, 4195L, 4197L, 4198L, 4200L,
-4203L, 4204L, 4205L, 4207L, 4209L, 4210L, 4211L, 4213L, 4214L,
-4217L, 4222L, 4224L, 4225L, 4229L, 4233L, 4237L, 4238L, 4240L,
-4242L, 4243L, 4246L, 4247L, 4249L, 4255L, 4256L, 4257L, 4260L,
-4261L, 4262L, 4265L, 4270L, 4272L, 4273L, 4276L, 4277L, 4282L,
-4283L, 4287L, 4290L, 4291L, 4292L, 4293L, 4294L, 4296L, 4298L,
-4301L, 4303L, 4310L, 4311L, 4313L, 4315L, 4317L, 4318L, 4322L,
-4326L, 4328L, 4329L, 4330L, 4332L, 4333L, 4336L, 4337L, 4349L,
-4350L, 4352L, 4354L, 4358L, 4362L, 4365L, 4371L, 4373L, 4374L,
-4376L, 4377L, 4378L, 4382L, 4387L, 4390L, 4391L, 4393L, 4396L,
-4399L, 4400L, 4401L, 4402L, 4403L, 4404L, 4405L, 4407L, 4410L,
-4411L, 4412L, 4413L, 4415L, 4417L, 4420L, 4421L, 4422L, 4423L,
-4425L, 4428L, 4429L, 4430L, 4432L, 4433L, 4435L, 4440L, 4444L,
-4445L, 4446L, 4447L, 4449L, 4450L, 4451L, 4452L, 4453L, 4455L,
-4460L, 4465L, 4470L, 4471L, 4475L, 4476L, 4481L, 4483L, 4484L,
-4486L, 4489L, 4495L, 4496L, 4497L, 4501L, 4502L, 4505L, 4506L,
-4507L, 4512L, 4514L, 4515L, 4517L, 4518L, 4521L, 4525L, 4526L,
-4527L, 4528L, 4529L, 4530L, 4532L, 4533L, 4536L, 4537L, 4541L,
-4542L, 4543L, 4546L, 4548L, 4550L, 4551L, 4554L, 4557L, 4560L,
-4567L, 4570L, 4573L, 4574L, 4575L, 4576L, 4581L, 4583L, 4587L,
-4588L, 4590L, 4593L, 4594L, 4595L, 4598L, 4599L, 4600L, 4603L,
-4606L, 4607L, 4612L, 4619L, 4620L, 4622L, 4623L, 4625L, 4626L,
-4630L, 4633L, 4638L, 4642L, 4644L, 4646L, 4649L, 4652L, 4656L,
-4659L, 4661L, 4663L, 4665L, 4667L, 4669L, 4670L, 4671L, 4673L,
-4674L, 4678L, 4680L, 4682L, 4687L, 4692L, 4693L, 4694L, 4696L,
-4697L, 4701L, 4702L, 4705L, 4706L, 4709L, 4710L, 4711L, 4713L,
-4714L, 4716L, 4719L, 4720L, 4721L, 4724L, 4727L, 4729L, 4734L,
-4736L, 4741L, 4743L, 4746L, 4753L, 4755L, 4756L, 4760L, 4763L,
-4764L, 4770L, 4772L, 4777L, 4779L, 4780L, 4781L, 4784L, 4787L,
-4788L, 4789L, 4791L, 4792L, 4793L, 4796L, 4797L, 4798L, 4799L,
-4800L, 4802L, 4806L, 4808L, 4809L, 4814L, 4815L, 4816L, 4817L,
-4818L, 4821L, 4824L, 4827L, 4831L, 4832L, 4833L, 4836L, 4838L,
-4839L, 4840L, 4843L, 4844L, 4846L, 4848L, 4852L, 4854L, 4855L,
-4858L, 4859L, 4862L, 4864L, 4867L, 4868L, 4871L, 4872L, 4878L,
-4880L, 4882L, 4884L, 4885L, 4886L, 4887L, 4889L, 4891L, 4892L,
-4893L, 4894L, 4895L, 4896L, 4899L, 4901L, 4902L, 4904L, 4906L,
-4907L, 4908L, 4913L, 4914L, 4915L, 4916L, 4917L, 4919L, 4920L,
-4931L, 4932L, 4934L, 4937L, 4941L, 4942L, 4944L, 4947L, 4949L,
-4952L, 4957L, 4964L, 4968L, 4970L, 4971L, 4972L, 4981L, 4982L,
-4983L, 4984L, 4987L, 4988L, 4992L, 4995L, 5000L, 5002L, 5003L,
-5009L, 5013L, 5019L, 5020L, 5021L, 5022L, 5023L, 5024L, 5025L,
-5026L, 5028L, 5029L, 5033L, 5036L, 5037L, 5038L, 5039L, 5040L,
-5041L, 5043L, 5044L, 5045L, 5046L, 5047L, 5048L, 5050L, 5051L,
-5052L, 5053L, 5054L, 5056L, 5057L, 5058L, 5059L, 5060L, 5061L,
-5062L, 5063L, 5064L, 5065L, 5066L, 5068L, 5069L, 5070L, 5071L,
-5073L, 5075L, 5076L, 5078L, 5080L, 5082L, 5083L, 5084L, 5085L,
-5086L, 5087L, 5090L, 5092L, 5094L, 5096L, 5098L, 5100L, 5102L,
-5103L, 5104L, 5107L, 5111L, 5112L, 5113L, 5114L, 5115L, 5116L,
-5118L, 5119L, 5120L, 5121L, 5122L, 5124L, 5125L, 5126L, 5129L,
-5131L, 5135L, 5136L, 5137L, 5138L, 5139L, 5140L, 5141L, 5142L,
-5143L, 5144L, 5145L, 5147L, 5148L, 5149L, 5150L, 5151L, 5153L,
-5154L, 5155L, 5156L, 5157L, 5158L, 5161L, 5162L, 5163L, 5165L,
-5166L, 5167L, 5169L, 5170L, 5172L, 5173L, 5175L, 5176L, 5177L,
-5178L, 5179L, 5180L, 5181L, 5182L, 5183L, 5184L, 5185L, 5186L,
-5187L, 5188L, 5189L, 5190L, 5191L, 5192L, 5193L, 5195L, 5196L,
-5197L, 5198L, 5199L, 5201L, 5202L, 5203L, 5205L, 5206L, 5207L,
-5208L, 5209L, 5210L, 5214L, 5215L, 5217L, 5218L, 5219L, 5221L,
-5222L, 5223L, 5224L, 5228L, 5229L, 5230L, 5231L, 5232L, 5234L,
-5235L, 5236L, 5239L, 5240L, 5241L, 5242L, 5243L, 5245L, 5246L,
-5248L, 5249L, 5250L, 5251L, 5252L, 5253L, 5254L, 5256L, 5257L,
-5258L, 5259L, 5260L, 5263L, 5264L, 5265L, 5268L, 5271L, 5272L,
-5273L, 5274L, 5275L, 5276L, 5277L, 5278L, 5281L, 5283L, 5284L,
-5286L, 5290L, 5292L, 5294L, 5295L, 5296L, 5298L, 5301L, 5302L,
-5303L, 5304L, 5305L, 5306L, 5307L, 5308L, 5309L, 5310L, 5311L,
-5312L, 5313L, 5315L, 5318L, 5319L, 5320L, 5322L, 5326L, 5327L,
-5329L, 5330L, 5332L, 5335L, 5336L, 5337L, 5338L, 5339L, 5340L,
-5341L, 5342L, 5345L, 5346L, 5347L, 5348L, 5349L, 5350L, 5351L,
-5352L, 5353L, 5355L, 5356L, 5358L, 5360L, 5363L, 5364L, 5365L,
-5366L, 5368L, 5369L, 5370L, 5371L, 5372L, 5373L, 5376L, 5378L,
-5380L, 5381L, 5382L, 5383L, 5384L, 5385L, 5386L, 5388L, 5389L,
-5393L, 5395L, 5396L, 5397L, 5398L, 5400L, 5401L, 5402L, 5403L,
-5405L, 5406L, 5407L, 5408L, 5409L, 5411L, 5415L, 5416L, 5417L,
-5418L, 5419L, 5421L, 5422L, 5423L, 5424L, 5425L, 5426L, 5428L,
-5429L, 5430L, 5431L, 5432L, 5436L, 5437L, 5438L, 5441L, 5443L,
-5444L, 5446L, 5447L, 5453L, 5454L, 5455L, 5457L, 5459L, 5460L,
-5462L, 5463L, 5465L, 5466L, 5469L, 5470L, 5471L, 5472L, 5474L,
-5476L, 5477L, 5478L, 5480L, 5481L, 5482L, 5485L, 5486L, 5487L,
-5489L, 5490L, 5492L, 5495L, 5498L, 5501L, 5502L, 5504L, 5505L,
-5506L, 5510L, 5511L, 5512L, 5517L, 5519L, 5520L, 5521L, 5522L,
-5524L, 5530L, 5531L, 5532L, 5536L, 5538L, 5543L, 5545L, 5547L,
-5548L, 5549L, 5550L, 5551L, 5555L, 5558L, 5559L, 5561L, 5562L,
-5563L, 5567L, 5569L, 5571L, 5573L, 5576L, 5577L, 5578L, 5579L,
-5583L, 5587L, 5588L, 5589L, 5590L, 5591L, 5593L, 5596L, 5597L,
-5598L, 5599L, 5600L, 5601L, 5602L, 5605L, 5606L, 5608L, 5609L,
-5610L, 5611L, 5612L, 5613L, 5614L, 5615L, 5616L, 5617L, 5621L,
-5622L, 5623L, 5624L, 5625L, 5626L, 5627L, 5628L, 5630L, 5632L,
-5633L, 5634L, 5635L, 5636L, 5637L, 5638L, 5639L, 5640L, 5641L,
-5643L, 5644L, 5645L, 5646L, 5647L, 5648L, 5649L, 5650L, 5651L,
-5652L, 5654L, 5655L, 5656L, 5657L, 5659L, 5660L, 5663L, 5665L,
-5666L, 5667L, 5668L, 5669L, 5670L, 5671L, 5672L, 5673L, 5674L,
-5675L, 5677L, 5678L, 5679L, 5680L, 5681L, 5684L, 5685L, 5686L,
-5687L, 5689L, 5690L, 5691L, 5692L, 5694L, 5696L, 5697L, 5703L,
-5704L, 5705L, 5706L, 5708L, 5709L, 5711L, 5712L, 5713L, 5715L,
-5716L, 5718L, 5719L, 5726L, 5727L, 5728L, 5729L, 5730L, 5733L,
-5735L, 5739L, 5740L, 5744L, 5746L, 5748L, 5750L, 5753L, 5754L,
-5757L, 5760L, 5761L, 5762L, 5768L, 5769L, 5770L, 5771L, 5772L,
-5773L, 5774L, 5775L, 5776L, 5777L, 5778L, 5779L, 5780L, 5782L,
-5784L, 5785L, 5787L, 5788L, 5789L, 5790L, 5792L, 5793L, 5795L,
-5796L, 5799L, 5800L, 5801L, 5802L, 5804L, 5805L, 5807L, 5808L,
-5809L, 5810L, 5811L, 5814L, 5815L, 5819L, 5820L, 5821L, 5823L,
-5824L, 5825L, 5826L, 5829L, 5830L, 5832L, 5833L, 5834L, 5836L,
-5837L, 5838L, 5842L, 5844L, 5845L, 5846L, 5847L, 5848L, 5849L,
-5850L, 5852L, 5853L, 5854L, 5855L, 5857L, 5858L, 5859L, 5860L,
-5861L, 5862L, 5865L, 5867L, 5868L, 5869L, 5870L, 5872L, 5873L,
-5874L, 5875L, 5876L, 5877L, 5878L, 5879L, 5880L, 5881L, 5882L,
-5883L, 5885L, 5886L, 5887L, 5888L, 5889L, 5891L, 5892L, 5893L,
-5894L, 5895L, 5896L, 5897L, 5898L, 5899L, 5900L, 5903L, 5905L,
-5906L, 5907L, 5908L, 5909L, 5910L, 5912L, 5915L, 5916L, 5917L,
-5919L, 5920L, 5923L, 5924L, 5925L, 5926L, 5927L, 5928L, 5929L,
-5931L, 5933L, 5934L, 5936L, 5939L, 5941L, 5944L, 5945L, 5946L,
-5948L, 5949L, 5950L, 5951L, 5953L, 5954L, 5955L, 5958L, 5960L,
-5961L, 5962L, 5963L, 5964L, 5968L, 5969L, 5971L, 5972L, 5973L,
-5974L, 5975L, 5976L, 5977L, 5978L, 5979L, 5980L, 5983L, 5985L,
-5986L, 5987L, 5988L, 5990L, 5992L, 5994L, 5996L, 5998L, 5999L,
-6000L, 6001L, 6002L, 6004L, 6005L, 6006L, 6007L, 6008L, 6010L,
-6011L, 6012L, 6013L, 6015L, 6016L, 6017L, 6019L, 6022L, 6023L,
-6024L, 6026L, 6027L, 6029L, 6030L, 6031L, 6032L, 6034L, 6035L,
-6036L, 6037L, 6038L, 6039L, 6041L, 6043L, 6045L, 6047L, 6050L,
-6051L, 6053L, 6055L, 6056L, 6057L, 6058L, 6060L, 6062L, 6064L,
-6065L, 6066L, 6067L, 6069L, 6071L, 6072L, 6073L, 6074L, 6075L,
-6078L, 6080L, 6083L, 6084L, 6086L, 6087L, 6089L, 6090L, 6091L,
-6095L, 6102L, 6106L, 6107L, 6108L, 6109L, 6110L, 6111L, 6112L,
-6115L, 6121L, 6122L, 6123L, 6124L, 6127L, 6129L, 6131L, 6133L,
-6138L, 6143L, 6144L, 6145L, 6146L, 6147L, 6148L, 6149L, 6150L,
-6152L, 6153L, 6154L, 6155L, 6156L, 6157L, 6159L, 6161L, 6163L,
-6164L, 6165L, 6166L, 6168L, 6172L, 6177L, 6178L, 6180L, 6183L,
-6185L, 6187L, 6190L, 6191L, 6193L, 6205L, 6206L, 6207L, 6208L,
-6214L, 6216L, 6217L, 6221L, 6223L, 6225L, 6229L, 6232L, 6234L,
-6235L, 6238L, 6240L, 6242L, 6243L, 6244L, 6245L, 6246L, 6247L,
-6248L, 6249L, 6250L, 6251L, 6253L, 6256L, 6258L, 6259L, 6268L,
-6276L, 6277L, 6278L, 6280L, 6282L, 6284L, 6285L, 6287L, 6290L,
-6292L, 6293L, 6294L, 6295L, 6300L, 6302L, 6303L, 6304L, 6305L,
-6306L, 6307L, 6308L, 6311L, 6312L, 6313L, 6314L, 6315L, 6319L,
-6320L, 6322L, 6323L, 6324L, 6325L, 6326L, 6329L, 6330L, 6331L,
-6332L, 6333L, 6334L, 6335L, 6336L, 6337L, 6338L, 6339L, 6340L,
-6343L, 6345L, 6346L, 6347L, 6348L, 6350L, 6352L, 6353L, 6354L,
-6356L, 6357L, 6358L, 6363L, 6364L, 6367L, 6368L, 6369L, 6371L,
-6372L, 6373L, 6375L, 6376L, 6377L, 6378L, 6379L, 6380L, 6381L,
-6384L, 6385L, 6386L, 6387L, 6389L, 6392L, 6393L, 6396L, 6397L,
-6398L, 6399L, 6401L, 6402L, 6404L, 6405L, 6407L, 6408L, 6411L,
-6412L, 6413L, 6415L, 6416L, 6417L, 6418L, 6419L, 6421L, 6424L,
-6426L, 6431L, 6432L, 6434L, 6436L, 6437L, 6438L, 6441L, 6442L,
-6443L, 6444L, 6445L, 6446L, 6447L, 6451L, 6453L, 6454L, 6455L,
-6456L, 6457L, 6458L, 6461L, 6465L, 6466L, 6467L, 6468L, 6469L,
-6470L, 6471L, 6472L, 6473L, 6476L, 6477L, 6478L, 6479L, 6480L,
-6482L, 6486L, 6487L, 6488L, 6489L, 6492L, 6495L, 6498L, 6499L,
-6500L, 6501L, 6503L, 6504L, 6505L, 6506L, 6508L, 6509L, 6510L,
-6514L, 6519L, 6521L, 6522L, 6523L, 6524L, 6525L, 6526L, 6527L,
-6528L, 6529L, 6530L, 6531L, 6532L, 6534L, 6535L, 6536L, 6537L,
-6539L, 6540L, 6541L, 6547L, 6548L, 6550L, 6551L, 6552L, 6554L,
-6555L, 6556L, 6557L, 6558L, 6559L, 6560L, 6561L, 6563L, 6564L,
-6565L, 6566L, 6567L, 6568L, 6569L, 6573L, 6577L, 6578L, 6579L,
-6580L, 6582L, 6584L, 6585L, 6588L, 6590L, 6591L, 6592L, 6593L,
-6597L, 6598L, 6611L, 6613L, 6619L, 6624L, 6634L, 6642L, 6644L,
-6645L, 6653L, 6655L, 6657L, 6669L, 6670L, 6671L, 6673L, 6674L,
-6678L, 6680L, 6687L, 6696L, 6701L, 6703L, 6704L, 6706L, 6707L,
-6709L, 6710L, 6711L, 6713L, 6714L, 6715L, 6716L, 6720L, 6721L,
-6722L, 6724L, 6726L, 6728L, 6729L, 6730L, 6731L, 6732L, 6733L,
-6734L, 6735L, 6737L, 6738L, 6740L, 6742L, 6743L, 6746L, 6747L,
-6748L, 6749L, 6750L, 6751L, 6752L, 6753L, 6755L, 6756L, 6757L,
-6759L, 6760L, 6761L, 6763L, 6766L, 6768L, 6769L, 6771L, 6772L,
-6775L, 6776L, 6778L, 6779L, 6781L, 6782L, 6783L, 6785L, 6786L,
-6787L, 6788L, 6791L, 6792L, 6794L, 6795L, 6799L, 6800L, 6801L,
-6803L, 6804L, 6805L, 6806L, 6807L, 6809L, 6811L, 6812L, 6813L,
-6815L, 6816L, 6818L, 6825L, 6826L, 6830L, 6832L, 6833L, 6834L,
-6835L, 6836L, 6838L, 6839L, 6840L, 6841L, 6842L, 6844L, 6846L,
-6849L, 6850L, 6851L, 6852L, 6853L, 6855L, 6856L, 6857L, 6860L,
-6861L, 6863L, 6867L, 6873L, 6876L, 6878L, 6879L, 6880L, 6882L,
-6885L, 6888L, 6897L, 6898L, 6902L, 6903L, 6904L, 6905L, 6906L,
-6909L, 6911L, 6912L, 6913L, 6916L, 6920L, 6922L, 6924L, 6925L,
-6927L, 6930L, 6933L, 6934L, 6935L, 6936L, 6937L, 6947L, 6950L,
-6951L, 6952L, 6953L, 6955L, 6956L, 6958L, 6960L, 6962L, 6965L,
-6968L, 6969L, 6970L, 6972L, 6973L, 6975L, 6976L, 6977L, 6979L,
-6981L, 6982L, 6984L, 6985L, 6988L, 6991L, 6992L, 6993L, 6994L,
-6995L, 7000L, 7001L, 7002L, 7003L, 7004L, 7005L, 7008L, 7009L,
-7013L, 7014L, 7015L, 7016L, 7017L, 7018L, 7019L, 7020L, 7021L,
-7022L, 7025L, 7026L, 7028L, 7029L, 7031L, 7033L, 7034L, 7035L,
-7036L, 7038L, 7039L, 7040L, 7041L, 7042L, 7043L, 7044L, 7045L,
-7048L, 7049L, 7051L, 7052L, 7053L, 7054L, 7055L, 7056L, 7057L,
-7059L, 7061L, 7062L, 7064L, 7066L, 7067L, 7069L, 7070L, 7071L,
-7072L, 7073L, 7074L, 7075L, 7076L, 7077L, 7079L, 7080L, 7081L,
-7082L, 7083L, 7085L, 7086L, 7087L, 7090L, 7091L, 7092L, 7093L,
-7094L, 7095L, 7097L, 7101L, 7102L, 7103L, 7104L, 7109L, 7110L,
-7111L, 7113L, 7116L, 7117L, 7119L, 7120L, 7121L, 7123L, 7124L,
-7125L, 7128L, 7129L, 7134L, 7136L, 7137L, 7139L, 7140L, 7141L,
-7142L, 7143L, 7144L, 7145L, 7147L, 7149L, 7151L, 7154L, 7155L,
-7156L, 7157L, 7158L, 7159L, 7163L, 7169L, 7171L, 7172L, 7175L,
-7180L, 7182L, 7183L, 7187L, 7188L, 7189L, 7192L, 7197L, 7198L,
-7199L, 7203L, 7204L, 7206L, 7209L, 7210L, 7211L, 7212L, 7213L,
-7214L, 7218L, 7220L, 7224L, 7225L, 7226L, 7229L, 7230L, 7231L,
-7232L, 7233L, 7234L, 7237L, 7238L, 7239L, 7240L, 7241L, 7244L,
-7245L, 7246L, 7247L, 7249L, 7250L, 7252L, 7256L, 7258L, 7259L,
-7260L, 7261L, 7262L, 7263L, 7264L, 7265L, 7266L, 7270L, 7271L,
-7272L, 7273L, 7274L, 7275L, 7276L, 7277L, 7278L, 7280L, 7282L,
-7283L, 7285L, 7286L, 7287L, 7288L, 7289L, 7290L, 7291L, 7298L,
-7299L, 7300L, 7301L, 7302L, 7303L, 7304L, 7306L, 7307L, 7308L,
-7309L, 7310L, 7311L, 7312L, 7313L, 7314L, 7315L, 7317L, 7318L,
-7320L, 7321L, 7322L, 7328L, 7330L, 7331L, 7332L, 7333L, 7334L,
-7335L, 7338L, 7339L, 7341L, 7350L, 7351L, 7353L, 7355L, 7358L,
-7359L, 7360L, 7366L, 7367L, 7368L, 7370L, 7371L, 7372L, 7373L,
-7374L, 7375L, 7376L, 7377L, 7379L, 7380L, 7381L, 7382L, 7384L,
-7386L, 7387L, 7389L, 7390L, 7395L, 7396L, 7397L, 7398L, 7399L,
-7400L, 7401L, 7402L, 7403L, 7404L, 7405L, 7406L, 7407L, 7408L,
-7409L, 7410L, 7411L, 7412L, 7413L, 7414L, 7417L, 7418L, 7422L,
-7423L, 7424L, 7426L, 7428L, 7429L, 7430L, 7431L, 7434L, 7436L,
-7437L, 7438L, 7439L, 7440L, 7441L, 7442L, 7443L, 7451L, 7452L,
-7453L, 7455L, 7456L, 7461L, 7462L, 7463L, 7464L, 7465L, 7466L,
-7467L, 7468L, 7471L, 7472L, 7474L, 7477L, 7479L, 7482L, 7483L,
-7484L, 7487L, 7492L, 7493L, 7494L, 7496L, 7500L, 7501L, 7509L,
-7511L, 7516L, 7518L, 7525L, 7530L, 7534L, 7536L, 7538L, 7541L,
-7542L, 7543L, 7546L, 7547L, 7578L, 7581L, 7582L, 7583L, 7584L,
-7585L, 7587L, 7589L, 7590L, 7591L, 7592L, 7593L, 7595L, 7596L,
-7597L, 7598L, 7599L, 7601L, 7602L, 7603L, 7604L, 7605L, 7607L,
-7611L, 7612L, 7613L, 7614L, 7615L, 7619L, 7620L, 7621L, 7623L,
-7624L, 7626L, 7627L, 7628L, 7632L, 7633L, 7634L, 7635L, 7636L,
-7637L, 7639L, 7640L, 7641L, 7642L, 7643L, 7644L, 7647L, 7648L,
-7649L, 7650L, 7651L, 7652L, 7653L, 7655L, 7656L, 7657L, 7661L,
-7662L, 7664L, 7666L, 7667L, 7668L, 7669L, 7670L, 7671L, 7672L,
-7673L, 7674L, 7676L, 7677L, 7678L, 7679L, 7680L, 7682L, 7683L,
-7684L, 7685L, 7686L, 7688L, 7689L, 7690L, 7693L, 7694L, 7695L,
-7696L, 7697L, 7699L, 7701L, 7702L, 7706L, 7708L, 7709L, 7710L,
-7711L, 7712L, 7713L, 7714L, 7716L, 7717L, 7718L, 7719L, 7720L,
-7724L, 7725L, 7727L, 7728L, 7730L, 7732L, 7735L, 7736L, 7737L,
-7738L, 7739L, 7740L, 7741L, 7742L, 7743L, 7745L, 7747L, 7748L,
-7751L, 7752L, 7753L, 7754L, 7755L, 7758L, 7759L, 7762L, 7764L,
-7765L, 7768L, 7769L, 7772L, 7775L, 7776L, 7777L, 7779L, 7784L,
-7785L, 7786L, 7788L, 7789L, 7790L, 7791L, 7792L, 7793L, 7797L,
-7798L, 7799L, 7801L, 7802L, 7803L, 7804L, 7805L, 7807L, 7808L,
-7809L, 7810L, 7811L, 7812L, 7813L, 7814L, 7815L, 7816L, 7818L,
-7819L, 7820L, 7824L, 7825L, 7826L, 7827L, 7829L, 7831L, 7832L,
-7833L, 7837L, 7838L, 7839L, 7841L, 7842L, 7843L, 7844L, 7847L,
-7848L, 7849L, 7850L, 7852L, 7853L, 7854L, 7855L, 7856L, 7858L,
-7859L, 7860L, 7861L, 7862L, 7863L, 7865L, 7866L, 7867L, 7868L,
-7870L, 7871L, 7872L, 7873L, 7874L, 7876L, 7879L, 7882L, 7883L,
-7885L, 7886L, 7887L, 7888L, 7889L, 7890L, 7892L, 7893L, 7894L,
-7895L, 7897L, 7898L, 7899L, 7900L, 7901L, 7902L, 7903L, 7904L,
-7906L, 7907L, 7908L, 7909L, 7910L, 7911L, 7912L, 7913L, 7914L,
-7915L, 7916L, 7917L, 7918L, 7919L, 7921L, 7922L, 7923L, 7925L,
-7927L, 7928L, 7930L, 7931L, 7934L, 7935L, 7938L, 7943L, 7945L,
-7946L, 7947L, 7948L, 7949L, 7954L, 7955L, 7956L, 7957L, 7958L,
-7959L, 7960L, 7961L, 7963L, 7964L, 7965L, 7966L, 7967L, 7968L,
-7969L, 7972L, 7973L, 7975L, 7976L, 7977L, 7979L, 7984L, 7987L,
-8004L, 8007L, 8011L, 8012L, 8013L, 8014L, 8015L, 8017L, 8018L,
-8019L, 8026L, 8027L, 8029L, 8030L, 8032L, 8033L, 8034L, 8035L,
-8036L, 8038L, 8039L, 8040L, 8042L, 8043L, 8044L, 8046L, 8048L,
-8049L, 8050L, 8051L, 8055L, 8065L, 8067L, 8068L, 8070L, 8073L,
-8074L, 8076L, 8078L, 8079L, 8080L, 8081L, 8082L, 8083L, 8084L,
-8086L, 8088L, 8089L, 8090L, 8093L, 8095L, 8096L, 8098L, 8099L,
-8102L, 8104L, 8105L, 8106L, 8107L, 8108L, 8109L, 8110L, 8112L,
-8114L, 8116L, 8117L, 8118L, 8119L, 8121L, 8124L, 8126L, 8127L,
-8128L, 8129L, 8130L, 8131L, 8132L, 8137L, 8138L, 8140L, 8141L,
-8142L, 8143L, 8144L, 8145L, 8148L, 8151L, 8152L, 8153L, 8154L,
-8155L, 8156L, 8157L, 8158L, 8159L, 8164L, 8166L, 8168L, 8169L,
-8170L, 8171L, 8174L, 8176L, 8177L, 8179L, 8180L, 8182L, 8183L,
-8185L, 8187L, 8188L, 8189L, 8190L, 8191L, 8192L, 8193L, 8194L,
-8195L, 8196L, 8197L, 8198L, 8199L, 8200L, 8201L, 8203L, 8204L,
-8206L, 8208L, 8209L, 8210L, 8211L, 8212L, 8213L, 8214L, 8215L,
-8217L, 8218L, 8219L, 8220L, 8221L, 8222L, 8225L, 8226L, 8227L,
-8228L, 8229L, 8231L, 8232L, 8233L, 8234L, 8236L, 8237L, 8239L,
-8240L, 8241L, 8242L, 8243L, 8244L, 8248L, 8250L, 8254L, 8255L,
-8256L, 8257L, 8258L, 8259L, 8260L, 8262L, 8266L, 8269L, 8270L,
-8272L, 8273L, 8274L, 8275L, 8276L, 8277L, 8279L, 8280L, 8281L,
-8282L, 8283L, 8284L, 8285L, 8286L, 8287L, 8288L, 8289L, 8290L,
-8291L, 8292L, 8293L, 8294L, 8295L, 8296L, 8297L, 8298L, 8299L,
-8301L, 8302L, 8303L, 8304L, 8305L, 8306L, 8307L, 8308L, 8309L,
-8310L, 8312L, 8313L, 8314L, 8315L, 8316L, 8317L, 8318L, 8319L,
-8320L, 8321L, 8325L, 8327L, 8329L, 8330L, 8332L, 8333L, 8334L,
-8335L, 8336L, 8338L, 8339L, 8340L, 8341L, 8342L, 8343L, 8344L,
-8345L, 8346L, 8347L, 8348L, 8349L, 8350L, 8353L, 8354L, 8355L,
-8356L, 8357L, 8361L, 8362L, 8363L, 8364L, 8366L, 8367L, 8368L,
-8369L, 8371L, 8373L, 8374L, 8375L, 8377L, 8378L, 8379L, 8380L,
-8381L, 8383L, 8385L, 8386L, 8387L, 8390L, 8391L, 8392L, 8393L,
-8394L, 8395L, 8398L, 8399L, 8400L, 8401L, 8402L, 8403L, 8404L,
-8406L, 8407L, 8408L, 8409L, 8410L, 8411L, 8412L, 8413L, 8414L,
-8415L, 8416L, 8417L, 8420L, 8421L, 8422L, 8426L, 8427L, 8429L,
-8430L, 8431L, 8432L, 8433L, 8435L, 8437L, 8439L, 8440L, 8442L,
-8444L, 8445L, 8447L, 8449L, 8450L, 8451L, 8453L, 8454L, 8455L,
-8457L, 8458L, 8459L, 8460L, 8461L, 8463L, 8465L, 8466L, 8468L,
-8470L, 8471L, 8473L, 8474L, 8475L, 8479L, 8480L, 8482L, 8484L,
-8488L, 8490L, 8492L, 8493L, 8494L, 8495L, 8498L, 8499L, 8500L,
-8503L, 8504L, 8505L, 8506L, 8507L, 8508L, 8510L, 8511L, 8513L,
-8514L, 8515L, 8516L, 8517L, 8519L, 8521L, 8522L, 8523L, 8524L,
-8525L, 8527L, 8528L, 8529L, 8530L, 8531L, 8532L, 8533L, 8534L,
-8535L, 8536L, 8537L, 8538L, 8539L, 8540L, 8541L, 8542L, 8543L,
-8544L, 8545L, 8546L, 8549L, 8550L, 8551L, 8552L, 8555L, 8556L,
-8557L, 8558L, 8559L, 8560L, 8563L, 8564L, 8565L, 8566L, 8568L,
-8569L, 8571L, 8572L, 8573L, 8574L, 8576L, 8579L, 8580L, 8581L,
-8582L, 8583L, 8585L, 8586L, 8587L, 8588L, 8590L, 8591L, 8593L,
-8594L, 8595L, 8596L, 8599L, 8600L, 8601L, 8603L, 8610L, 8611L,
-8612L, 8613L, 8614L, 8615L, 8616L, 8617L, 8618L, 8619L, 8620L,
-8621L, 8622L, 8623L, 8625L, 8627L, 8629L, 8630L, 8631L, 8636L,
-8637L, 8640L, 8642L, 8643L, 8644L, 8645L, 8646L, 8647L, 8648L,
-8649L, 8652L, 8655L, 8656L, 8657L, 8658L, 8659L, 8661L, 8662L,
-8663L, 8664L, 8666L, 8668L, 8669L, 8671L, 8672L, 8673L, 8674L,
-8675L, 8676L, 8677L, 8678L, 8682L, 8683L, 8684L, 8685L, 8686L,
-8687L, 8688L, 8690L, 8691L, 8693L, 8694L, 8695L, 8696L, 8699L,
-8702L, 8703L, 8704L, 8705L, 8706L, 8707L, 8708L, 8709L, 8710L,
-8712L, 8713L, 8714L, 8715L, 8716L, 8719L, 8721L, 8723L, 8724L,
-8725L, 8726L, 8728L, 8730L, 8731L, 8732L, 8733L, 8734L, 8737L,
-8738L, 8739L, 8741L, 8746L, 8747L, 8751L, 8752L, 8753L, 8754L,
-8755L, 8759L, 8761L, 8763L, 8766L, 8768L, 8769L, 8770L, 8778L,
-8779L, 8780L, 8781L, 8783L, 8784L, 8790L, 8792L, 8793L, 8794L,
-8795L, 8797L, 8802L, 8803L, 8805L, 8806L, 8812L, 8813L, 8814L,
-8815L, 8816L, 8817L, 8819L, 8821L, 8826L, 8827L, 8833L, 8834L,
-8835L, 8837L, 8838L, 8840L, 8841L, 8842L, 8845L, 8846L, 8847L,
-8848L, 8850L, 8851L, 8852L, 8854L, 8856L, 8859L, 8860L, 8862L,
-8863L, 8864L, 8866L, 8868L, 8870L, 8871L, 8872L, 8873L, 8874L,
-8876L, 8877L, 8879L, 8881L, 8882L, 8883L, 8884L, 8885L, 8886L,
-8887L, 8888L, 8889L, 8890L, 8891L, 8892L, 8893L, 8895L, 8896L,
-8899L, 8901L, 8905L, 8907L, 8908L, 8910L, 8911L, 8912L, 8914L,
-8915L, 8916L, 8918L, 8921L, 8922L, 8924L, 8925L, 8926L, 8927L,
-8928L, 8929L, 8931L, 8932L, 8934L, 8937L, 8938L, 8939L, 8940L,
-8941L, 8942L, 8943L, 8944L, 8945L, 8946L, 8947L, 8948L, 8949L,
-8950L, 8951L, 8952L, 8953L, 8954L, 8956L, 8957L, 8958L, 8959L,
-8960L, 8961L, 8962L, 8963L, 8964L, 8965L, 8966L, 8967L, 8968L,
-8969L, 8971L, 8972L, 8974L, 8975L, 8976L, 8977L, 8980L, 8981L,
-8982L, 8983L, 8984L, 8985L, 8988L, 8989L, 8990L, 8991L, 8993L,
-9000L, 9001L, 9003L, 9004L, 9006L, 9007L, 9008L, 9009L, 9010L,
-9011L, 9012L, 9013L, 9015L, 9016L, 9017L, 9018L, 9021L, 9023L,
-9025L, 9027L, 9030L, 9031L, 9032L, 9033L, 9034L, 9035L, 9036L,
-9037L, 9038L, 9039L, 9040L, 9041L, 9042L, 9043L, 9047L, 9051L,
-9052L, 9053L, 9055L, 9056L, 9059L, 9063L, 9064L, 9067L, 9069L,
-9070L, 9071L, 9072L, 9073L, 9074L, 9075L, 9076L, 9078L, 9079L,
-9080L, 9081L, 9083L, 9085L, 9086L, 9089L, 9090L, 9091L, 9094L,
-9097L, 9098L, 9099L, 9103L, 9104L, 9105L, 9106L, 9107L, 9108L,
-9109L, 9110L, 9111L, 9113L, 9117L, 9119L, 9122L, 9123L, 9125L,
-9126L, 9128L, 9129L, 9130L, 9133L, 9134L, 9135L, 9136L, 9138L,
-9139L, 9140L, 9142L, 9143L, 9144L, 9145L, 9148L, 9149L, 9150L,
-9151L, 9154L, 9155L, 9156L, 9157L, 9158L, 9159L, 9160L, 9161L,
-9162L, 9163L, 9164L, 9166L, 9167L, 9170L, 9171L, 9172L, 9173L,
-9174L, 9175L, 9176L, 9177L, 9178L, 9179L, 9180L, 9182L, 9184L,
-9185L, 9186L, 9187L, 9189L, 9190L, 9191L, 9192L, 9193L, 9197L,
-9200L, 9202L, 9203L, 9204L, 9205L, 9206L, 9207L, 9208L, 9209L,
-9210L, 9211L, 9212L, 9213L, 9214L, 9216L, 9220L, 9221L, 9223L,
-9225L, 9228L, 9229L, 9231L, 9232L, 9236L, 9237L, 9238L, 9239L,
-9240L, 9243L, 9246L, 9248L, 9249L, 9250L, 9251L, 9252L, 9253L,
-9254L, 9255L, 9256L, 9257L, 9258L, 9259L, 9260L, 9261L, 9262L,
-9263L, 9264L, 9265L, 9267L, 9268L, 9270L, 9271L, 9272L, 9273L,
-9274L, 9275L, 9276L, 9278L, 9280L, 9281L, 9282L, 9283L, 9284L,
-9286L, 9289L, 9290L, 9293L, 9295L, 9296L, 9297L, 9299L, 9300L,
-9302L, 9304L, 9305L, 9307L, 9308L, 9309L, 9310L, 9311L, 9312L,
-9313L, 9314L, 9315L, 9319L, 9321L, 9322L, 9323L, 9324L, 9325L,
-9329L, 9332L, 9335L, 9336L, 9339L, 9340L, 9344L, 9345L, 9346L,
-9347L, 9348L, 9350L, 9351L, 9352L, 9353L, 9354L, 9357L, 9359L,
-9361L, 9366L, 9367L, 9369L, 9370L, 9371L, 9372L, 9373L, 9375L,
-9376L, 9377L, 9378L, 9379L, 9380L, 9381L, 9382L, 9383L, 9384L,
-9385L, 9388L, 9390L, 9392L, 9393L, 9394L, 9395L, 9397L, 9398L,
-9399L, 9400L, 9401L, 9402L, 9403L, 9404L, 9405L, 9407L, 9409L,
-9410L, 9415L, 9416L, 9417L, 9421L, 9422L, 9423L, 9424L, 9425L,
-9426L, 9427L, 9428L, 9429L, 9433L, 9434L, 9435L, 9437L, 9438L,
-9439L, 9440L, 9441L, 9442L, 9443L, 9444L, 9445L, 9446L, 9447L,
-9448L, 9449L, 9450L, 9451L, 9452L, 9453L, 9454L, 9455L, 9456L,
-9457L, 9459L, 9460L, 9461L, 9463L, 9464L, 9465L, 9466L, 9467L,
-9468L, 9469L, 9471L, 9472L, 9473L, 9474L, 9475L, 9477L, 9478L,
-9479L, 9480L, 9483L, 9484L, 9485L, 9486L, 9487L, 9488L, 9490L,
-9491L, 9492L, 9493L, 9496L, 9500L, 9502L, 9504L, 9505L, 9506L,
-9507L, 9508L, 9509L, 9510L, 9511L, 9512L, 9513L, 9514L, 9515L,
-9516L, 9517L, 9518L, 9519L, 9520L, 9521L, 9522L, 9523L, 9524L,
-9525L, 9526L, 9528L, 9529L, 9531L, 9532L, 9533L, 9534L, 9535L,
-9537L, 9538L, 9546L, 9547L, 9548L, 9551L, 9553L, 9555L, 9557L,
-9559L, 9560L, 9561L, 9562L, 9566L, 9567L, 9568L, 9569L, 9570L,
-9572L, 9573L, 9574L, 9575L, 9576L, 9577L, 9578L, 9579L, 9580L,
-9581L, 9583L, 9584L, 9585L, 9586L, 9587L, 9588L, 9589L, 9590L,
-9591L, 9592L, 9593L, 9594L, 9595L, 9596L, 9597L, 9598L, 9599L,
-9600L, 9601L, 9602L, 9603L, 9604L, 9606L, 9607L, 9608L, 9609L,
-9610L, 9611L, 9612L, 9613L, 9614L, 9616L, 9617L, 9619L, 9620L,
-9621L, 9622L, 9623L, 9624L, 9625L, 9626L, 9627L, 9628L, 9629L,
-9631L, 9632L, 9633L, 9634L, 9635L, 9636L, 9638L, 9639L, 9640L,
-9641L, 9642L, 9643L, 9644L, 9645L, 9646L, 9647L, 9648L, 9650L,
-9652L, 9653L, 9654L, 9655L, 9656L, 9657L, 9658L, 9659L, 9664L,
-9666L, 9667L, 9668L, 9669L, 9670L, 9671L, 9673L, 9674L, 9675L,
-9676L, 9677L, 9678L, 9679L, 9680L, 9681L, 9682L, 9683L, 9684L,
-9685L, 9688L, 9690L, 9691L, 9692L, 9693L, 9694L, 9695L, 9697L,
-9699L, 9700L, 9702L, 9703L, 9705L, 9706L, 9707L, 9708L, 9709L,
-9710L, 9711L, 9712L, 9713L, 9715L, 9716L, 9717L, 9718L, 9719L,
-9720L, 9721L, 9722L, 9723L, 9724L, 9725L, 9726L, 9727L, 9728L,
-9729L, 9731L, 9733L, 9735L, 9737L, 9738L, 9739L, 9740L, 9741L,
-9742L, 9743L, 9744L, 9745L, 9746L, 9747L, 9748L, 9749L, 9750L,
-9751L, 9756L, 9757L, 9758L, 9759L, 9760L, 9761L, 9762L, 9763L,
-9764L, 9765L, 9766L, 9768L, 9769L, 9771L, 9772L, 9776L, 9777L,
-9778L, 9779L, 9781L, 9782L, 9783L, 9786L, 9787L, 9790L, 9791L,
-9792L, 9795L, 9796L, 9798L, 9799L, 9800L, 9801L, 9804L, 9805L,
-9806L, 9808L, 9810L, 9813L, 9814L, 9817L, 9818L, 9819L, 9820L,
-9821L, 9822L, 9824L, 9825L, 9827L, 9829L, 9832L, 9833L, 9835L,
-9836L, 9839L, 9840L, 9842L, 9843L, 9844L, 9845L, 9846L, 9847L,
-9848L, 9849L, 9850L, 9851L, 9852L, 9853L, 9854L, 9857L, 9858L,
-9859L, 9860L, 9862L, 9863L, 9864L, 9866L, 9867L, 9868L, 9869L,
-9871L, 9872L, 9877L, 9878L, 9879L, 9880L, 9883L, 9884L, 9886L,
-9889L, 9890L, 9893L, 9894L, 9895L, 9896L, 9897L, 9898L, 9901L,
-9902L, 9903L, 9904L, 9906L, 9907L, 9909L, 9910L, 9911L, 9912L,
-9913L, 9914L, 9915L, 9916L, 9917L, 9920L, 9921L, 9925L, 9926L,
-9927L, 9928L, 9930L, 9931L, 9933L, 9936L, 9937L, 9938L, 9939L,
-9942L, 9943L, 9944L, 9945L, 9949L, 9951L, 9952L, 9953L, 9954L,
-9958L, 9960L, 9961L, 9962L, 9963L, 9965L, 9966L, 9967L, 9969L,
-9970L, 9971L, 9972L, 9973L, 9977L, 9980L, 9981L, 9982L, 9983L,
-9984L, 9985L, 9986L, 9987L, 9988L, 9989L, 9991L, 9992L, 9993L,
-9995L, 9996L, 9997L, 9999L, 10000L, 10002L, 10004L, 10005L, 10006L,
-10007L, 10008L, 10009L, 10011L, 10012L, 10013L, 10014L, 10015L,
-10016L, 10017L, 10018L, 10022L, 10023L, 10024L, 10025L, 10026L,
-10027L, 10028L, 10033L, 10034L, 10037L, 10038L, 10039L, 10041L,
-10043L, 10044L, 10045L, 10046L, 10047L, 10049L, 10050L, 10051L,
-10052L, 10053L, 10054L, 10057L, 10058L, 10059L, 10060L, 10061L,
-10062L, 10063L, 10064L, 10065L, 10066L, 10067L, 10068L, 10071L,
-10072L, 10073L, 10077L, 10078L, 10079L, 10080L, 10081L, 10083L,
-10084L, 10085L, 10086L, 10087L, 10088L, 10089L, 10090L, 10091L,
-10092L, 10093L, 10094L, 10096L, 10097L, 10098L, 10099L, 10100L,
-10101L, 10102L, 10103L, 10104L, 10105L, 10106L, 10109L, 10110L,
-10111L, 10112L, 10113L, 10114L, 10115L, 10116L, 10117L, 10118L,
-10119L, 10120L, 10122L, 10123L, 10126L, 10128L, 10129L, 10130L,
-10131L, 10132L, 10133L, 10134L, 10136L, 10137L, 10138L, 10141L,
-10142L, 10143L, 10144L, 10145L, 10146L, 10147L, 10148L, 10151L,
-10152L, 10155L, 10156L, 10158L, 10160L, 10162L, 10164L, 10166L,
-10170L, 10171L, 10172L, 10173L, 10174L, 10175L, 10176L, 10177L,
-10179L, 10180L, 10181L, 10182L, 10183L, 10184L, 10185L, 10187L,
-10188L, 10189L, 10190L, 10191L, 10192L, 10193L, 10196L, 10197L,
-10198L, 10200L, 10201L, 10202L, 10203L, 10204L, 10205L, 10206L,
-10207L, 10208L, 10209L, 10210L, 10211L, 10212L, 10213L, 10214L,
-10215L, 10216L, 10217L, 10218L, 10219L, 10220L, 10221L, 10223L,
-10224L, 10225L, 10226L, 10227L, 10228L, 10230L, 10231L, 10232L,
-10233L, 10234L, 10235L, 10240L, 10241L, 10243L, 10244L, 10245L,
-10247L, 10248L, 10250L, 10251L, 10257L, 10258L, 10259L, 10260L,
-10261L, 10262L, 10263L, 10265L, 10266L, 10267L, 10268L, 10269L,
-10270L, 10271L, 10272L, 10274L, 10276L, 10277L, 10278L, 10279L,
-10280L, 10281L, 10282L, 10284L, 10285L, 10286L, 10287L, 10288L,
-10289L, 10291L, 10292L, 10294L, 10295L, 10296L, 10297L, 10298L,
-10299L, 10300L, 10301L, 10302L, 10303L, 10304L, 10305L, 10307L,
-10308L, 10309L, 10310L, 10311L, 10312L, 10313L, 10315L, 10316L,
-10317L, 10318L, 10320L, 10321L, 10322L, 10323L, 10324L, 10325L,
-10326L, 10328L, 10330L, 10331L, 10332L, 10333L, 10334L, 10335L,
-10336L, 10337L, 10338L, 10339L, 10340L, 10341L, 10342L, 10343L,
-10344L, 10346L, 10347L, 10348L, 10349L, 10350L, 10351L, 10352L,
-10353L, 10354L, 10355L, 10356L, 10358L, 10359L, 10361L, 10362L,
-10363L, 10364L, 10365L, 10366L, 10367L, 10368L, 10369L, 10370L,
-10371L, 10372L, 10373L, 10374L, 10375L, 10376L, 10380L, 10382L,
-10383L, 10386L, 10387L, 10388L, 10389L, 10390L, 10391L, 10392L,
-10393L, 10394L, 10395L, 10397L, 10398L, 10399L, 10400L, 10401L,
-10403L, 10404L, 10406L, 10407L, 10409L, 10411L, 10412L, 10413L,
-10414L, 10415L, 10416L, 10419L, 10420L, 10423L, 10425L, 10426L,
-10430L, 10432L, 10433L, 10434L, 10435L, 10436L, 10437L, 10438L,
-10439L, 10442L, 10443L, 10444L, 10445L, 10446L, 10448L, 10449L,
-10450L, 10451L, 10452L, 10453L, 10456L, 10457L, 10459L, 10460L,
-10462L, 10463L, 10464L, 10465L, 10468L, 10469L, 10470L, 10471L,
-10472L, 10474L, 10476L, 10477L, 10478L, 10479L, 10480L, 10481L,
-10482L, 10483L, 10484L, 10487L, 10488L, 10490L, 10491L, 10492L,
-10493L, 10494L, 10495L, 10497L, 10498L, 10500L, 10501L, 10502L,
-10503L, 10504L, 10506L, 10508L, 10509L, 10511L, 10513L, 10514L,
-10515L, 10517L, 10518L, 10519L, 10521L, 10523L, 10525L, 10527L,
-10528L, 10529L), class = "data.frame")
diff --git a/data/nzmarital.rda b/data/nzmarital.rda
new file mode 100644
index 0000000..12bd5ea
Binary files /dev/null and b/data/nzmarital.rda differ
diff --git a/data/olympic.txt b/data/olympic.txt
deleted file mode 100644
index e8db440..0000000
--- a/data/olympic.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-rank country gold silver bronze totalmedal
-1 China 51 21 28 100
-2 UnitedStates 36 38 36 110
-3 Russia 23 21 28 72
-4 GreatBritain 19 13 15 47
-5 Germany 16 10 15 41
-6 Australia 14 15 17 46
-7 SouthKorea 13 10 8 31
-8 Japan 9 6 10 25
-9 Italy 8 10 10 28
-10 France 7 16 17 40
-11 Ukraine 7 5 15 27
-12 Netherlands 7 5 4 16
-13 Jamaica 6 3 2 11
-14 Spain 5 10 3 18
-15 Kenya 5 5 4 14
-16 Belarus 4 5 10 19
-17 Romania 4 1 3 8
-18 Ethiopia 4 1 2 7
-19 Canada 3 9 6 18
-20 Poland 3 6 1 10
-21 Hungary 3 5 2 10
-21 Norway 3 5 2 10
-23 Brazil 3 4 8 15
-24 CzechRepublic 3 3 0 6
-25 Slovakia 3 2 1 6
-26 NewZealand 3 1 5 9
-27 Georgia 3 0 3 6
-28 Cuba 2 11 11 24
-29 Kazakhstan 2 4 7 13
-30 Denmark 2 2 3 7
-31 Mongolia 2 2 0 4
-31 Thailand 2 2 0 4
-33 NorthKorea 2 1 3 6
-34 Argentina 2 0 4 6
-34 Switzerland 2 0 4 6
-36 Mexico 2 0 1 3
-37 Turkey 1 4 3 8
-38 Zimbabwe 1 3 0 4
-39 Azerbaijan 1 2 4 7
-40 Uzbekistan 1 2 3 6
-41 Slovenia 1 2 2 5
-42 Bulgaria 1 1 3 5
-42 Indonesia 1 1 3 5
-44 Finland 1 1 2 4
-45 Latvia 1 1 1 3
-46 Belgium 1 1 0 2
-46 DominicanRepublic 1 1 0 2
-46 Estonia 1 1 0 2
-46 Portugal 1 1 0 2
-50 India 1 0 2 3
-51 Iran 1 0 1 2
-52 Bahrain 1 0 0 1
-52 Cameroon 1 0 0 1
-52 Panama 1 0 0 1
-52 Tunisia 1 0 0 1
-56 Sweden 0 4 1 5
-57 Croatia 0 2 3 5
-57 Lithuania 0 2 3 5
-59 Greece 0 2 2 4
-60 TrinidadandTobago 0 2 0 2
-61 Nigeria 0 1 3 4
-62 Austria 0 1 2 3
-62 Ireland 0 1 2 3
-62 Serbia 0 1 2 3
-65 Algeria 0 1 1 2
-65 Bahamas 0 1 1 2
-65 Columbia 0 1 1 2
-65 Kyrgyzstan 0 1 1 2
-65 Morocco 0 1 1 2
-65 Tajikistan 0 1 1 2
-71 Chile 0 1 0 1
-71 Ecuador 0 1 0 1
-71 Iceland 0 1 0 1
-71 Malaysia 0 1 0 1
-71 Singapore 0 1 0 1
-71 SouthAfrica 0 1 0 1
-71 Sudan 0 1 0 1
-71 Vietnam 0 1 0 1
-79 Armenia 0 0 6 6
-80 Taiwan 0 0 4 4
-81 Afghanistan 0 0 1 1
-81 Egypt 0 0 1 1
-81 Israel 0 0 1 1
-81 Mauritius 0 0 1 1
-81 Moldova 0 0 1 1
-81 Togo 0 0 1 1
-81 Venezuela 0 0 1 1
diff --git a/data/olympic.txt.gz b/data/olympic.txt.gz
new file mode 100644
index 0000000..42dc271
Binary files /dev/null and b/data/olympic.txt.gz differ
diff --git a/data/oxtemp.txt b/data/oxtemp.txt
deleted file mode 100644
index bc4572e..0000000
--- a/data/oxtemp.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-maxtemp year
-89 1901
-84 1902
-84 1903
-85 1904
-81 1905
-92 1906
-79 1907
-84 1908
-85 1909
-79 1910
-95 1911
-87 1912
-83 1913
-87 1914
-82 1915
-83 1916
-89 1917
-84 1918
-86 1919
-79 1920
-89 1921
-86 1922
-93 1923
-86 1924
-85 1925
-85 1926
-80 1927
-87 1928
-87 1929
-89 1930
-75 1931
-95 1932
-89 1933
-86 1934
-86 1935
-83 1936
-87 1937
-84 1938
-84 1939
-85 1940
-89 1941
-88 1942
-92 1943
-87 1944
-84 1945
-84 1946
-90 1947
-90 1948
-89 1949
-86 1950
-82 1951
-89 1952
-90 1953
-83 1954
-87 1955
-82 1956
-86 1957
-80 1958
-91 1959
-82 1960
-87 1961
-77 1962
-81 1963
-87 1964
-81 1965
-80 1966
-83 1967
-89 1968
-88 1969
-88 1970
-84 1971
-77 1972
-85 1973
-77 1974
-91 1975
-94 1976
-80 1977
-80 1978
-85 1979
-83 1980
diff --git a/data/oxtemp.txt.gz b/data/oxtemp.txt.gz
new file mode 100644
index 0000000..a3d1142
Binary files /dev/null and b/data/oxtemp.txt.gz differ
diff --git a/data/pneumo.R b/data/pneumo.R
deleted file mode 100644
index c61a1f0..0000000
--- a/data/pneumo.R
+++ /dev/null
@@ -1,6 +0,0 @@
-"pneumo" <-
-structure(list(exposure.time = c(5.8, 15, 21.5, 27.5, 33.5, 39.5,
-46, 51.5), normal = c(98, 51, 34, 35, 32, 23, 12, 4), mild = c(0,
-2, 6, 5, 10, 7, 6, 2), severe = c(0, 1, 3, 8, 9, 8, 10, 5)), .Names = c("exposure.time",
-"normal", "mild", "severe"), class = "data.frame", row.names = c("1",
-"2", "3", "4", "5", "6", "7", "8"))
diff --git a/data/pneumo.rda b/data/pneumo.rda
new file mode 100644
index 0000000..c28e52e
Binary files /dev/null and b/data/pneumo.rda differ
diff --git a/data/rainfall.R b/data/rainfall.R
deleted file mode 100644
index 7d3cf26..0000000
--- a/data/rainfall.R
+++ /dev/null
@@ -1,1000 +0,0 @@
-"rainfall" <- c(0, 23, 13, 69, 46, 0, 10, 15, 18, 18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 28, 30,
- 0, 81, 15, 41, 0, 0, 0, 0, 0, 48, 318, 0, 15, 254, 51, 150,
- 168, 163, 0, 0, 117, 23, 20, 109, 81, 23, 15, 0, 0, 0, 30, 18,
- 25, 30, 66, 20, 84, 74, 119, 325, 107, 25, 183, 51, 135, 109,
- 81, 8, 127, 3, 157, 185, 23, 18, 58, 20, 71, 23, 0, 107, 69,
- 48, 0, 38, 38, 58, 84, 76, 30, 36, 36, 48, 147, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 142, 56,
- 25, 18, 64, 8, 20, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
- 0, 0, 0, 0, 23, 51, 0, 13, 46, 0, 0, 0, 0, 3, 8, 64, 170, 5,
- 51, 0, 0, 5, 0, 0, 0, 0, 0, 0, 155, 13, 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 38, 0, 178, 0, 130, 81, 0, 0, 0, 0, 0, 51, 0, 23, 13, 5, 3,
- 279, 0, 0, 0, 46, 20, 30, 79, 10, 0, 46, 0, 203, 147, 10, 76,
- 36, 0, 33, 71, 41, 25, 0, 0, 0, 0, 241, 43, 0, 0, 0, 0, 41, 0,
- 5, 0, 36, 175, 10, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 74, 0,
- 117, 76, 10, 66, 114, 10, 36, 66, 13, 76, 18, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 13, 8,
- 0, 0, 0, 0, 0, 81, 150, 20, 3, 119, 13, 51, 102, 18, 33, 147,
- 130, 0, 0, 94, 0, 25, 0, 0, 0, 0, 20, 33, 114, 132, 79, 0, 0,
- 0, 46, 0, 0, 0, 0, 25, 30, 89, 64, 64, 229, 157, 0, 168, 38,
- 221, 51, 119, 69, 0, 0, 0, 119, 23, 43, 46, 183, 0, 318, 81,
- 15, 58, 30, 0, 0, 0, 114, 213, 117, 203, 13, 445, 140, 150, 69,
- 13, 10, 18, 229, 81, 51, 10, 84, 38, 43, 8, 48, 28, 15, 8, 5,
- 10, 157, 86, 25, 58, 0, 0, 0, 0, 0, 0, 66, 18, 76, 137, 117,
- 206, 287, 64, 203, 135, 51, 168, 0, 102, 305, 0, 0, 432, 43,
- 66, 10, 0, 30, 36, 13, 0, 0, 91, 20, 18, 0, 25, 38, 0, 3, 0, 5,
- 0, 0, 20, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 23, 0, 51, 112, 23, 0, 51, 20, 13, 0, 0, 0,
- 0, 0, 0, 0, 5, 61, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 152, 211, 0, 74, 76, 0, 0, 112, 0, 64, 0,
- 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 41, 53, 41, 0, 36, 43, 127, 76, 66, 229,
- 36, 0, 0, 28, 0, 0, 152, 155, 13, 0, 3, 10, 0, 0, 51, 56, 259,
- 0, 0, 41, 0, 25, 76, 122, 28, 71, 51, 36, 0, 0, 5, 48, 198,
- 142, 3, 0, 51, 13, 0, 18, 0, 69, 51, 218, 102, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3, 0, 8, 216, 20, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 13, 20, 18, 0, 0, 0, 0, 0, 0, 0, 25, 30, 0, 18,
- 0, 69, 33, 28, 58, 0, 0, 0, 0, 0, 38, 0, 0, 28, 0, 48, 0, 15,
- 0, 5, 0, 0, 0, 43, 13, 8, 193, 84, 0, 0, 165, 84, 0, 127, 76,
- 15, 0, 0, 0, 0, 0, 8, 13, 188, 41, 218, 94, 64, 0, 36, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 145, 79, 102, 135, 76, 262,
- 33, 76, 224, 203, 30, 41, 13, 41, 356, 36, 25, 0, 0, 0, 0, 64,
- 114, 229, 168, 142, 185, 0, 0, 43, 191, 102, 71, 89, 5, 74, 5,
- 13, 41, 0, 0, 0, 0, 25, 0, 18, 5, 51, 0, 8, 64, 36, 25, 0, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 381, 53, 13, 56, 76, 64, 69,
- 201, 0, 10, 94, 130, 91, 38, 51, 86, 25, 76, 0, 0, 5, 127, 25,
- 18, 8, 15, 36, 76, 20, 30, 23, 53, 15, 36, 8, 18, 0, 0, 0, 0,
- 0, 0, 0, 0, 30, 0, 66, 28, 5, 0, 13, 69, 36, 277, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 28, 23, 0, 0, 41, 38, 25, 64, 8,
- 0, 0, 0, 5, 66, 0, 0, 0, 0, 0, 0, 8, 15, 58, 28, 3, 43, 51, 46,
- 8, 3, 3, 38, 0, 28, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 104, 38, 46, 25, 0, 64, 0, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 38, 38, 0, 0, 61, 0, 0, 127, 5, 64, 0, 51,
- 43, 0, 157, 23, 0, 3, 0, 0, 41, 3, 0, 0, 10, 0, 0, 0, 0, 0, 0,
- 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 114, 43, 51, 152, 3, 0, 0, 0, 0, 0, 89, 38, 213, 66, 0, 3, 320,
- 0, 23, 0, 64, 5, 30, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 102,
- 69, 5, 0, 0, 0, 0, 0, 0, 43, 91, 61, 84, 0, 41, 51, 178, 20,
- 25, 76, 8, 0, 76, 0, 0, 51, 18, 25, 3, 25, 66, 23, 0, 0, 0,
- 229, 56, 127, 38, 191, 173, 127, 66, 97, 38, 38, 76, 127, 318,
- 130, 229, 274, 43, 41, 5, 0, 0, 0, 0, 0, 0, 191, 5, 127, 41,
- 56, 3, 76, 5, 86, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51,
- 165, 69, 0, 0, 8, 0, 0, 0, 0, 0, 0, 147, 56, 102, 51, 64, 0, 0,
- 0, 165, 127, 0, 23, 5, 5, 25, 0, 64, 0, 155, 5, 0, 64, 0, 117,
- 58, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 130, 66, 0,
- 0, 25, 3, 13, 0, 0, 23, 0, 0, 0, 114, 107, 76, 0, 23, 5, 112,
- 64, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 66, 51, 66, 0, 130, 0, 0, 41, 25, 89, 64, 3, 5, 30, 0, 0,
- 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 127, 0, 183,
- 0, 38, 0, 0, 102, 53, 25, 0, 0, 69, 76, 0, 41, 0, 0, 0, 0, 3,
- 0, 0, 25, 0, 3, 38, 36, 0, 0, 0, 38, 0, 25, 64, 330, 64, 0, 0,
- 0, 0, 0, 0, 3, 0, 51, 8, 0, 0, 0, 0, 0, 0, 51, 74, 76, 0, 0, 0,
- 0, 0, 8, 3, 0, 0, 0, 0, 8, 0, 43, 0, 0, 0, 5, 91, 3, 109, 0,
- 76, 155, 43, 165, 127, 10, 3, 48, 0, 0, 8, 0, 165, 264, 8, 97,
- 107, 391, 173, 0, 64, 0, 25, 0, 0, 0, 0, 91, 0, 25, 0, 0, 0, 0,
- 94, 28, 0, 0, 114, 165, 5, 25, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0,
- 0, 0, 89, 114, 48, 5, 76, 137, 127, 10, 102, 135, 102, 76, 114,
- 66, 64, 3, 0, 0, 3, 51, 64, 109, 64, 8, 28, 3, 224, 5, 51, 3,
- 3, 163, 0, 43, 66, 38, 74, 91, 15, 76, 0, 0, 3, 0, 0, 0, 0, 0,
- 38, 69, 0, 23, 25, 3, 23, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 25, 94,
- 0, 0, 0, 0, 23, 3, 66, 152, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0,
- 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 38, 64, 0, 8, 89, 305,
- 130, 102, 318, 66, 71, 81, 0, 38, 10, 0, 5, 0, 0, 0, 0, 0, 64,
- 152, 89, 3, 0, 71, 69, 8, 0, 0, 25, 25, 3, 0, 0, 0, 0, 0, 15,
- 38, 0, 0, 0, 48, 0, 66, 81, 64, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 48, 25, 0, 0, 0, 0, 0, 0, 0, 30, 76, 38,
- 127, 124, 41, 3, 25, 0, 25, 89, 5, 0, 0, 38, 18, 0, 0, 0, 0,
- 165, 25, 0, 5, 48, 0, 0, 0, 0, 0, 76, 0, 0, 0, 64, 0, 0, 3, 0,
- 48, 0, 0, 0, 0, 0, 0, 56, 66, 0, 0, 0, 3, 0, 0, 0, 0, 76, 0, 0,
- 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 89, 0, 0, 0, 0,
- 25, 28, 0, 0, 201, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 89, 76, 38, 51, 25, 5, 127, 43, 25, 38, 74,
- 38, 36, 254, 38, 0, 51, 94, 0, 0, 0, 0, 0, 117, 0, 0, 51, 61,
- 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 99,
- 132, 0, 48, 0, 0, 38, 0, 0, 0, 0, 43, 218, 0, 102, 56, 117, 0,
- 130, 38, 86, 76, 41, 114, 36, 74, 51, 76, 137, 89, 33, 51, 0,
- 20, 76, 0, 203, 8, 0, 0, 43, 0, 66, 53, 64, 127, 10, 43, 8, 0,
- 25, 28, 127, 0, 0, 64, 0, 0, 5, 48, 0, 0, 23, 0, 0, 10, 0, 25,
- 23, 323, 23, 74, 229, 3, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 51, 89, 51, 0, 84, 76, 30, 0, 0, 71, 5, 203, 51,
- 76, 157, 127, 102, 51, 51, 64, 127, 33, 74, 91, 89, 0, 89, 84,
- 0, 53, 74, 5, 25, 38, 0, 0, 0, 25, 0, 203, 79, 25, 102, 48,
- 203, 102, 25, 58, 23, 3, 76, 69, 119, 48, 38, 0, 38, 119, 178,
- 66, 0, 0, 0, 63, 43, 63, 0, 0, 0, 0, 0, 0, 0, 69, 71, 84, 0, 0,
- 0, 0, 0, 0, 0, 38, 0, 198, 119, 38, 79, 0, 229, 0, 0, 0, 8, 0,
- 0, 0, 61, 3, 76, 132, 165, 63, 74, 53, 10, 130, 190, 20, 28, 0,
- 0, 0, 0, 165, 66, 3, 0, 0, 0, 0, 0, 25, 97, 13, 25, 97, 28, 51,
- 0, 0, 0, 0, 0, 43, 23, 114, 25, 51, 23, 112, 152, 15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 89, 38, 46, 25, 41, 33, 15, 18, 5, 0, 0,
- 0, 0, 13, 28, 86, 0, 0, 142, 0, 8, 0, 0, 0, 13, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 5, 0, 0, 0, 5, 25, 0, 0,
- 0, 13, 0, 0, 28, 43, 3, 0, 0, 69, 8, 3, 0, 0, 0, 30, 23, 0, 0,
- 69, 0, 0, 0, 0, 0, 0, 36, 0, 20, 20, 0, 0, 0, 46, 109, 0, 51,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 13, 30, 155, 36, 3, 0, 63, 0, 198, 36, 203,
- 0, 69, 104, 0, 43, 13, 41, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5, 97, 46, 25, 81, 0, 13, 0, 41, 0, 0, 0, 0, 81, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 46, 51, 33, 33, 0, 0, 0, 0, 0, 0, 0,
- 114, 63, 13, 0, 0, 18, 25, 0, 0, 0, 0, 5, 0, 0, 0, 0, 122, 147,
- 0, 102, 0, 0, 0, 0, 132, 119, 99, 36, 0, 89, 0, 18, 51, 97, 23,
- 0, 76, 0, 165, 254, 25, 36, 38, 25, 76, 41, 0, 25, 213, 140, 0,
- 79, 84, 198, 0, 8, 0, 46, 18, 25, 38, 163, 104, 36, 163, 30,
- 130, 30, 213, 43, 269, 41, 33, 18, 41, 89, 66, 20, 13, 46, 23,
- 127, 56, 3, 20, 15, 38, 56, 0, 18, 13, 20, 36, 23, 25, 102, 30,
- 28, 38, 58, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 91, 48, 0, 0, 0, 25, 0, 38, 41, 13, 5, 0,
- 13, 0, 53, 0, 191, 330, 97, 89, 94, 41, 43, 38, 10, 18, 3, 0,
- 0, 0, 23, 28, 20, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 0, 51, 13, 64, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 38, 56, 127, 122, 79, 3, 8, 3, 0, 89, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10, 18, 86, 28, 25, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 23, 0, 0, 3,
- 0, 0, 13, 56, 15, 18, 38, 0, 211, 0, 0, 13, 114, 10, 13, 41,
- 203, 0, 13, 0, 0, 69, 71, 102, 38, 0, 0, 0, 0, 74, 0, 0, 0, 61,
- 0, 0, 5, 0, 28, 8, 15, 0, 28, 109, 0, 0, 0, 0, 0, 0, 0, 30, 18,
- 109, 25, 25, 13, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 18, 25, 41, 0, 0, 0, 0, 0, 0, 64, 0, 0, 20, 0, 0, 0, 0, 130,
- 5, 8, 13, 38, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 56, 15, 43,
- 5, 46, 0, 0, 0, 0, 0, 284, 76, 43, 74, 0, 0, 0, 0, 48, 0, 0, 0,
- 0, 33, 0, 0, 13, 178, 20, 0, 0, 0, 0, 0, 13, 15, 0, 23, 0, 0,
- 0, 112, 0, 0, 13, 13, 38, 25, 74, 79, 5, 76, 61, 130, 33, 46,
- 25, 66, 0, 0, 23, 46, 64, 28, 46, 33, 0, 58, 0, 0, 0, 168, 33,
- 218, 0, 0, 246, 28, 147, 8, 0, 0, 0, 13, 0, 122, 15, 137, 71,
- 145, 79, 117, 124, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 89,
- 33, 28, 61, 76, 41, 97, 0, 76, 51, 191, 208, 135, 48, 79, 66,
- 76, 71, 165, 20, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 112, 56, 0, 23, 28, 25, 20, 114, 0, 81, 94, 15, 38, 10, 28, 0,
- 0, 0, 0, 130, 213, 86, 132, 91, 0, 0, 0, 0, 0, 0, 46, 38, 41,
- 25, 13, 94, 38, 0, 0, 48, 147, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 142, 0, 28, 0, 0, 0, 18, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10, 20, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 0, 79, 79, 0, 0, 74, 23, 13, 196, 15, 76, 20, 216, 38, 130,
- 124, 10, 0, 0, 18, 25, 38, 25, 0, 28, 0, 8, 15, 33, 0, 0, 0, 0,
- 89, 0, 0, 25, 0, 36, 0, 13, 46, 23, 38, 64, 112, 119, 3, 165,
- 13, 112, 0, 0, 0, 48, 0, 0, 0, 0, 13, 66, 0, 25, 0, 18, 38, 18,
- 0, 117, 58, 86, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 305, 33, 23, 0,
- 15, 0, 0, 13, 0, 0, 0, 0, 0, 160, 152, 0, 0, 0, 61, 58, 0, 0,
- 163, 58, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 104, 25, 165, 23, 36, 0, 28, 165, 221, 102, 28,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 86, 0, 0, 0, 0, 0, 43, 20, 0, 0, 0, 0, 0, 0, 46, 53, 89, 43,
- 325, 13, 300, 13, 25, 51, 89, 25, 94, 97, 239, 61, 15, 41, 51,
- 8, 13, 229, 114, 28, 25, 71, 64, 3, 0, 8, 13, 13, 0, 5, 0, 0,
- 20, 28, 0, 0, 8, 0, 10, 13, 18, 53, 69, 36, 25, 43, 0, 0, 0,
- 485, 353, 18, 406, 157, 38, 61, 107, 64, 81, 208, 130, 51, 0,
- 33, 79, 196, 160, 71, 165, 28, 51, 51, 114, 89, 10, 0, 15, 33,
- 23, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0,
- 51, 132, 30, 0, 0, 0, 23, 0, 0, 56, 20, 0, 0, 20, 0, 183, 15,
- 0, 127, 119, 107, 0, 15, 25, 0, 0, 0, 38, 0, 0, 102, 51, 0, 74,
- 0, 0, 0, 28, 0, 0, 36, 0, 0, 0, 25, 76, 61, 132, 51, 69, 0, 66,
- 0, 0, 0, 41, 0, 0, 28, 0, 51, 0, 10, 0, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 20, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 64, 0,
- 0, 15, 0, 51, 0, 0, 0, 3, 0, 5, 25, 18, 0, 0, 18, 0, 191, 0, 0,
- 0, 61, 0, 0, 0, 0, 0, 10, 8, 13, 3, 0, 0, 8, 53, 0, 30, 8, 0,
- 0, 178, 8, 18, 0, 81, 10, 264, 20, 36, 41, 0, 94, 3, 0, 0, 10,
- 0, 0, 0, 0, 0, 15, 127, 38, 8, 272, 23, 58, 66, 3, 109, 99, 3,
- 185, 10, 38, 0, 8, 0, 64, 81, 38, 0, 5, 8, 173, 25, 5, 76, 292,
- 124, 64, 25, 0, 0, 25, 76, 25, 76, 127, 76, 33, 43, 89, 305,
- 58, 3, 58, 64, 0, 0, 0, 41, 38, 114, 66, 3, 76, 56, 0, 0, 0,
- 241, 25, 127, 64, 89, 25, 38, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 267, 132, 114, 0, 0, 64, 114, 25, 0, 23, 25, 41, 0, 0, 0, 5,
- 13, 23, 0, 18, 23, 25, 66, 114, 127, 208, 51, 0, 43, 51, 0, 0,
- 76, 71, 13, 0, 15, 28, 157, 94, 33, 114, 157, 61, 25, 3, 41,
- 76, 132, 51, 25, 127, 130, 3, 132, 0, 0, 0, 0, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 91, 0, 0, 114, 89, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 38, 0, 0, 3, 5, 25, 0, 0, 69, 51, 43, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 25, 241, 114, 36, 0, 30, 0, 8, 66, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 114, 64, 0, 343, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 119, 53, 89, 244, 0, 89, 0, 0, 30, 0, 8, 38, 5,
- 0, 38, 30, 193, 89, 48, 3, 0, 0, 0, 0, 46, 8, 25, 102, 25, 102,
- 102, 0, 0, 0, 0, 51, 25, 48, 0, 0, 0, 51, 8, 0, 38, 0, 51, 76,
- 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 76, 56, 51, 135, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0,
- 0, 292, 3, 0, 0, 0, 56, 0, 173, 132, 15, 0, 0, 64, 0, 114, 41,
- 0, 41, 0, 0, 0, 0, 0, 127, 0, 46, 51, 117, 71, 163, 30, 25,
- 132, 127, 51, 0, 25, 0, 0, 64, 81, 38, 46, 0, 0, 0, 0, 0, 25,
- 76, 51, 66, 51, 25, 51, 229, 0, 23, 3, 25, 0, 66, 127, 8, 81,
- 66, 160, 91, 5, 0, 0, 89, 33, 10, 5, 15, 0, 66, 79, 328, 23, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 69, 38, 81, 51, 0, 0, 0, 48, 84, 135,
- 76, 226, 196, 175, 274, 0, 0, 0, 0, 0, 0, 0, 38, 5, 74, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 114, 102, 25, 137, 279, 89,
- 89, 5, 8, 140, 25, 0, 0, 0, 0, 0, 0, 0, 97, 114, 132, 0, 3, 5,
- 0, 0, 0, 140, 102, 89, 140, 216, 94, 33, 241, 76, 46, 251, 89,
- 20, 30, 18, 0, 0, 66, 0, 0, 0, 0, 8, 69, 15, 10, 0, 0, 0, 0, 0,
- 64, 5, 76, 229, 38, 61, 86, 5, 0, 64, 0, 0, 13, 0, 114, 25,
- 140, 23, 10, 61, 305, 170, 10, 51, 53, 76, 5, 18, 5, 8, 102,
- 185, 76, 104, 191, 89, 0, 8, 0, 0, 0, 0, 0, 0, 5, 0, 13, 36, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 25, 51, 0, 0, 0, 0, 0, 0,
- 38, 8, 0, 203, 119, 36, 0, 5, 64, 30, 0, 175, 28, 119, 15, 0,
- 0, 84, 0, 0, 0, 46, 23, 0, 8, 13, 5, 33, 25, 30, 0, 0, 69, 99,
- 117, 203, 25, 13, 28, 0, 0, 0, 0, 0, 0, 56, 36, 25, 0, 0, 0,
- 114, 25, 76, 41, 191, 46, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 64, 0, 0, 53, 0, 0, 94, 23, 5, 0, 0, 0, 0, 0, 0, 30, 109,
- 0, 0, 152, 122, 33, 0, 61, 241, 122, 51, 3, 152, 25, 8, 0, 0,
- 0, 69, 5, 25, 170, 0, 198, 76, 191, 0, 0, 0, 0, 0, 0, 0, 25,
- 127, 38, 0, 0, 0, 0, 89, 0, 0, 0, 0, 51, 0, 0, 0, 91, 3, 0, 23,
- 25, 0, 0, 0, 0, 0, 51, 0, 5, 46, 457, 94, 43, 254, 15, 0, 97,
- 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
- 0, 8, 89, 180, 56, 318, 71, 25, 140, 127, 25, 25, 102, 130, 5,
- 335, 127, 5, 89, 53, 206, 94, 36, 41, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 99, 76, 69, 25, 0, 0, 0, 119, 58, 25, 0, 0, 0, 0, 0,
- 0, 99, 130, 20, 5, 0, 5, 0, 64, 25, 0, 0, 0, 173, 25, 43, 74,
- 38, 23, 51, 79, 64, 160, 188, 140, 23, 335, 150, 8, 66, 18, 66,
- 0, 18, 0, 0, 0, 0, 5, 10, 127, 0, 117, 81, 0, 76, 64, 107, 102,
- 53, 18, 81, 25, 43, 64, 51, 198, 51, 0, 114, 119, 137, 0, 0, 0,
- 0, 0, 0, 0, 38, 76, 25, 64, 152, 25, 28, 23, 0, 0, 3, 8, 0, 0,
- 0, 0, 0, 0, 53, 86, 38, 3, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 94,
- 0, 0, 0, 0, 0, 0, 132, 102, 48, 71, 117, 18, 0, 0, 30, 0, 0, 0,
- 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 56, 0, 58, 23, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 10, 15, 43, 69, 81, 0, 191,
- 25, 0, 0, 0, 0, 71, 0, 165, 64, 183, 25, 94, 0, 0, 5, 89, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 127, 41, 0, 28,
- 0, 5, 0, 0, 0, 0, 0, 0, 13, 28, 180, 0, 3, 0, 0, 114, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 58, 114, 0, 5, 0, 5, 0, 0,
- 0, 64, 0, 23, 89, 0, 25, 10, 0, 0, 0, 0, 0, 0, 30, 0, 53, 0, 0,
- 0, 5, 0, 43, 0, 0, 33, 0, 5, 0, 43, 0, 0, 0, 56, 0, 0, 0, 0, 0,
- 0, 58, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 5, 3, 0, 76,
- 25, 117, 23, 41, 0, 0, 0, 0, 0, 0, 0, 183, 89, 0, 64, 71, 0, 0,
- 0, 318, 0, 0, 163, 0, 79, 51, 348, 353, 229, 0, 86, 89, 10, 89,
- 102, 132, 64, 81, 38, 249, 64, 0, 0, 53, 25, 28, 119, 46, 5, 3,
- 81, 33, 30, 38, 5, 3, 0, 0, 0, 0, 0, 0, 38, 0, 0, 8, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 64, 30, 23, 41, 33, 76,
- 0, 56, 20, 53, 191, 130, 102, 58, 74, 0, 0, 94, 36, 51, 0, 208,
- 13, 157, 13, 378, 43, 64, 84, 86, 0, 0, 0, 30, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 114, 28, 99, 89, 114, 41, 79, 259, 51,
- 140, 43, 8, 76, 66, 33, 56, 76, 25, 18, 41, 0, 0, 0, 0, 0, 3,
- 5, 3, 0, 10, 13, 173, 127, 122, 102, 38, 28, 79, 46, 30, 203,
- 0, 69, 10, 38, 114, 152, 33, 102, 10, 0, 0, 0, 0, 0, 13, 0, 0,
- 0, 0, 0, 0, 20, 3, 8, 15, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 13, 0, 8, 0, 0, 18, 13, 104, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
- 30, 25, 33, 0, 0, 0, 0, 0, 0, 30, 0, 25, 0, 0, 0, 0, 0, 0, 0,
- 0, 254, 28, 89, 0, 5, 25, 28, 64, 33, 56, 28, 0, 38, 33, 33,
- 51, 0, 127, 284, 41, 69, 0, 0, 0, 0, 25, 0, 0, 767, 61, 0, 0,
- 0, 3, 43, 8, 10, 5, 51, 58, 102, 259, 10, 48, 25, 0, 0, 0, 0,
- 0, 0, 30, 89, 66, 38, 5, 25, 33, 69, 5, 81, 3, 173, 10, 53, 99,
- 51, 0, 5, 28, 3, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 208, 3, 48,
- 112, 127, 23, 20, 51, 117, 155, 38, 43, 51, 0, 0, 152, 157,
- 127, 61, 66, 69, 8, 79, 86, 25, 51, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 69, 38, 3, 165, 160, 0, 46, 30, 15, 114,
- 5, 76, 71, 5, 64, 0, 5, 46, 64, 89, 53, 0, 41, 46, 51, 0, 0,
- 30, 5, 0, 157, 114, 99, 79, 64, 23, 66, 0, 0, 0, 23, 51, 0, 0,
- 0, 0, 0, 0, 130, 203, 0, 36, 0, 0, 0, 0, 30, 66, 0, 0, 0, 0, 0,
- 132, 323, 114, 81, 147, 254, 0, 0, 0, 0, 0, 0, 269, 30, 0, 30,
- 20, 28, 0, 8, 15, 56, 0, 168, 0, 56, 64, 0, 0, 69, 0, 81, 272,
- 0, 145, 81, 8, 86, 18, 340, 13, 61, 64, 36, 86, 23, 86, 30, 23,
- 18, 36, 10, 79, 3, 279, 10, 36, 15, 43, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 33, 112, 0, 28, 38, 13, 5, 36, 8, 0, 0, 0, 0, 0, 0, 0,
- 13, 69, 10, 61, 259, 208, 155, 86, 66, 3, 61, 36, 20, 79, 99,
- 61, 13, 0, 41, 64, 18, 23, 0, 5, 81, 61, 46, 28, 30, 10, 18,
- 18, 3, 0, 13, 0, 0, 0, 0, 0, 0, 0, 13, 18, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 10, 13, 38, 0, 13,
- 191, 0, 0, 5, 3, 0, 0, 5, 46, 0, 0, 0, 89, 0, 43, 25, 91, 5,
- 18, 0, 0, 0, 76, 5, 0, 0, 53, 25, 0, 25, 5, 0, 0, 15, 43, 8,
- 30, 3, 0, 0, 0, 43, 0, 0, 8, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 8, 25, 114, 51, 36, 165, 114, 0, 0, 0, 0,
- 0, 0, 38, 0, 0, 33, 135, 38, 36, 41, 0, 0, 0, 0, 30, 122, 43,
- 5, 0, 38, 3, 117, 46, 43, 8, 0, 0, 0, 0, 0, 0, 41, 0, 102, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 127,
- 173, 0, 0, 0, 0, 0, 175, 0, 0, 71, 76, 91, 104, 64, 20, 0, 81,
- 38, 79, 0, 86, 196, 28, 10, 188, 48, 38, 18, 213, 61, 3, 36,
- 38, 18, 25, 10, 0, 0, 15, 15, 0, 0, 0, 89, 38, 28, 3, 150, 91,
- 124, 38, 48, 94, 102, 109, 86, 130, 69, 71, 51, 30, 18, 33, 3,
- 13, 3, 0, 8, 5, 30, 10, 13, 58, 338, 3, 0, 0, 0, 76, 130, 5,
- 18, 36, 0, 3, 8, 20, 43, 99, 20, 282, 46, 66, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 36, 3, 0, 0, 0, 5, 18, 0, 13, 13, 0, 0, 0, 119,
- 0, 0, 0, 0, 0, 180, 0, 61, 0, 366, 20, 0, 0, 33, 28, 0, 33, 43,
- 15, 0, 0, 0, 0, 8, 13, 0, 0, 0, 33, 0, 0, 5, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 84,
- 0, 0, 20, 18, 0, 0, 0, 0, 0, 0, 13, 0, 0, 51, 13, 0, 0, 0, 0,
- 0, 3, 3, 0, 43, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 76, 5, 8,
- 0, 5, 0, 15, 180, 287, 8, 28, 10, 0, 13, 71, 0, 25, 226, 0, 0,
- 0, 0, 0, 0, 0, 3, 58, 0, 0, 0, 36, 0, 58, 0, 0, 23, 8, 0, 0,
- 109, 5, 0, 41, 0, 0, 0, 180, 71, 117, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 58, 74, 0, 0, 38, 5, 112, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 20, 3, 0, 0, 0, 0, 305, 13, 18,
- 99, 3, 0, 457, 117, 91, 109, 0, 43, 0, 0, 20, 0, 5, 0, 38, 61,
- 51, 23, 0, 25, 25, 0, 3, 46, 0, 0, 0, 0, 0, 0, 36, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 5, 13, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 46, 86, 137, 71, 5, 132, 866, 25, 213, 30, 0, 0,
- 46, 3, 0, 0, 0, 0, 18, 122, 0, 127, 0, 18, 38, 211, 20, 0, 36,
- 79, 56, 0, 0, 0, 23, 0, 0, 244, 23, 140, 0, 89, 25, 295, 48, 5,
- 0, 127, 18, 0, 356, 478, 81, 124, 201, 91, 475, 74, 20, 282,
- 175, 191, 23, 135, 109, 48, 343, 81, 229, 201, 132, 109, 114,
- 10, 23, 25, 64, 0, 0, 0, 0, 46, 267, 5, 91, 175, 277, 36, 53,
- 33, 231, 86, 109, 10, 43, 3, 46, 211, 53, 8, 109, 3, 91, 163,
- 94, 76, 20, 188, 8, 0, 0, 0, 0, 0, 0, 239, 10, 112, 13, 114, 0,
- 23, 46, 20, 300, 64, 0, 119, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 33, 0, 0, 0, 0, 0, 18, 0, 94,
- 0, 0, 165, 58, 46, 10, 23, 79, 13, 0, 23, 25, 5, 5, 10, 48, 69,
- 0, 0, 5, 20, 28, 10, 137, 3, 206, 18, 104, 53, 0, 0, 0, 61,
- 160, 8, 28, 10, 86, 5, 18, 0, 5, 0, 33, 10, 0, 10, 10, 8, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 5, 13, 53, 51, 0, 132, 71, 5,
- 0, 0, 41, 48, 15, 0, 0, 23, 0, 0, 51, 30, 0, 10, 15, 25, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 13, 18, 0, 0, 23, 0, 0, 0, 0, 20, 20,
- 28, 0, 74, 10, 5, 0, 18, 0, 0, 18, 3, 112, 33, 0, 18, 3, 18, 3,
- 0, 0, 0, 0, 28, 23, 132, 13, 30, 20, 48, 109, 3, 0, 0, 0, 30,
- 18, 66, 18, 69, 0, 3, 157, 20, 168, 28, 178, 117, 3, 3, 0, 18,
- 3, 13, 36, 0, 18, 0, 41, 28, 18, 485, 10, 137, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 15, 3, 46, 0, 84, 10, 155, 0, 15, 145, 3,
- 33, 46, 254, 267, 175, 155, 15, 23, 25, 25, 41, 3, 0, 15, 0, 0,
- 0, 0, 48, 86, 69, 58, 94, 25, 5, 3, 18, 0, 10, 119, 241, 18,
- 25, 53, 84, 46, 56, 216, 13, 216, 18, 25, 38, 25, 10, 5, 122,
- 94, 122, 0, 33, 122, 8, 114, 13, 10, 0, 0, 0, 0, 3, 61, 0, 0,
- 76, 183, 185, 175, 30, 241, 41, 48, 86, 0, 122, 0, 0, 0, 25, 0,
- 0, 0, 10, 38, 71, 104, 51, 226, 51, 38, 38, 208, 41, 20, 76,
- 15, 0, 0, 0, 13, 13, 25, 18, 36, 130, 76, 107, 15, 0, 33, 91,
- 10, 0, 0, 0, 0, 0, 18, 107, 13, 0, 23, 5, 13, 5, 13, 25, 8,
- 107, 175, 74, 53, 25, 3, 41, 18, 13, 20, 234, 8, 8, 0, 0, 160,
- 15, 23, 36, 61, 25, 109, 58, 43, 38, 30, 56, 10, 0, 36, 41, 28,
- 18, 10, 25, 30, 41, 36, 56, 0, 0, 160, 5, 10, 0, 0, 0, 0, 0, 0,
- 0, 10, 0, 0, 0, 0, 0, 51, 86, 5, 10, 0, 0, 0, 0, 0, 58, 5, 0,
- 0, 61, 122, 0, 5, 86, 18, 0, 46, 0, 0, 0, 0, 0, 0, 3, 25, 10,
- 25, 13, 0, 8, 0, 246, 160, 46, 53, 5, 8, 0, 0, 0, 0, 0, 0, 3,
- 36, 69, 0, 0, 58, 0, 13, 30, 46, 23, 25, 0, 0, 0, 0, 46, 94,
- 135, 3, 0, 0, 173, 0, 38, 71, 175, 0, 0, 0, 0, 112, 46, 53,
- 107, 18, 33, 58, 0, 0, 53, 0, 269, 0, 48, 33, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 36, 0, 46, 74, 0, 46, 102, 0, 15, 51, 56, 206,
- 51, 183, 23, 5, 86, 51, 13, 3, 0, 5, 0, 284, 25, 71, 28, 3, 3,
- 18, 5, 0, 0, 0, 307, 94, 3, 56, 150, 15, 28, 5, 8, 15, 140,
- 236, 38, 0, 239, 51, 94, 0, 0, 0, 30, 0, 0, 0, 8, 71, 0, 0,
- 163, 119, 434, 25, 56, 3, 0, 0, 0, 5, 10, 30, 0, 28, 0, 23, 18,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 3, 5, 0, 5, 0, 155, 0,
- 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
- 53, 13, 3, 0, 0, 74, 594, 0, 3, 15, 150, 8, 109, 112, 124, 0,
- 5, 231, 0, 0, 3, 102, 99, 25, 13, 10, 191, 0, 36, 290, 48, 5,
- 43, 0, 0, 84, 43, 8, 76, 107, 36, 15, 5, 13, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 10, 0, 0, 86, 8, 10, 130, 38, 3, 10,
- 25, 114, 157, 99, 0, 351, 170, 15, 239, 30, 64, 13, 114, 10, 5,
- 10, 3, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
- 0, 0, 41, 0, 10, 10, 5, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 38, 3, 0, 0, 43, 58, 114, 28, 188, 97, 58, 30, 43, 0, 0, 0, 43,
- 3, 5, 107, 94, 38, 3, 94, 15, 13, 36, 3, 10, 15, 8, 10, 23, 0,
- 0, 18, 33, 99, 15, 76, 74, 0, 8, 0, 0, 3, 20, 0, 71, 28, 8, 94,
- 157, 20, 64, 18, 0, 8, 180, 86, 183, 3, 10, 0, 0, 5, 3, 43, 38,
- 51, 10, 5, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 533, 30, 0, 15, 25, 30,
- 64, 10, 3, 0, 0, 0, 0, 48, 5, 0, 38, 0, 0, 15, 5, 5, 23, 51,
- 175, 79, 18, 8, 38, 5, 147, 0, 36, 5, 0, 15, 0, 0, 0, 0, 0, 0,
- 0, 0, 30, 10, 0, 0, 0, 0, 0, 46, 259, 0, 0, 0, 0, 0, 0, 0, 119,
- 10, 0, 10, 132, 135, 0, 38, 114, 188, 28, 0, 18, 0, 18, 3, 0,
- 0, 0, 0, 216, 20, 0, 0, 112, 0, 28, 56, 0, 0, 0, 107, 193, 3,
- 5, 38, 0, 0, 3, 335, 76, 3, 203, 25, 84, 234, 41, 43, 13, 13,
- 3, 97, 175, 213, 107, 145, 36, 109, 51, 99, 10, 145, 33, 3, 5,
- 5, 3, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 8, 97,
- 20, 114, 137, 5, 38, 53, 10, 0, 66, 191, 3, 102, 10, 0, 0, 0,
- 0, 0, 0, 0, 13, 0, 81, 18, 8, 0, 5, 0, 0, 20, 145, 33, 79, 0,
- 3, 0, 48, 18, 231, 0, 188, 97, 198, 15, 51, 10, 0, 13, 25, 0,
- 3, 28, 0, 18, 79, 109, 8, 53, 23, 51, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 23, 76, 191, 5, 23, 5, 5, 140, 46, 3, 10, 43, 0, 0, 0,
- 0, 0, 5, 33, 0, 5, 23, 20, 0, 244, 30, 56, 76, 84, 206, 94, 79,
- 38, 0, 191, 13, 8, 0, 0, 0, 0, 0, 0, 0, 91, 236, 64, 61, 124,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 25, 36, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 61, 76, 28, 74, 0,
- 58, 41, 86, 5, 43, 23, 38, 173, 114, 30, 18, 38, 0, 0, 3, 43,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 8, 8, 13, 0, 0, 0, 0, 13, 58,
- 140, 10, 0, 0, 0, 0, 0, 0, 0, 0, 58, 33, 0, 0, 13, 30, 36, 91,
- 89, 36, 15, 56, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 41,
- 30, 81, 20, 33, 58, 117, 112, 305, 8, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 20, 25, 0, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 150, 0,
- 25, 25, 5, 0, 3, 0, 0, 25, 56, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 41, 0, 89,
- 185, 0, 117, 53, 13, 5, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 15, 5,
- 0, 89, 302, 13, 0, 46, 0, 43, 0, 0, 3, 18, 0, 38, 0, 290, 20,
- 0, 69, 99, 104, 8, 20, 28, 30, 25, 0, 0, 0, 0, 0, 0, 30, 48, 0,
- 0, 41, 51, 25, 0, 0, 3, 119, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 218, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 231, 13, 18, 13, 0, 38, 30, 13, 38, 0, 38,
- 18, 0, 0, 213, 104, 25, 142, 163, 97, 10, 89, 13, 0, 0, 0, 20,
- 0, 0, 117, 5, 0, 0, 0, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 20, 0,
- 28, 28, 71, 0, 0, 79, 130, 15, 0, 0, 191, 41, 79, 28, 84, 30,
- 0, 38, 18, 0, 13, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 51, 0,
- 0, 0, 36, 41, 8, 165, 3, 0, 0, 5, 165, 0, 61, 0, 0, 69, 20, 94,
- 10, 0, 13, 0, 0, 0, 0, 0, 130, 150, 203, 0, 28, 0, 0, 0, 0, 0,
- 0, 38, 18, 3, 0, 18, 3, 18, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 18, 13, 46, 0, 0, 0, 0, 0, 3, 0, 33, 0, 0, 3, 13, 0, 58,
- 0, 94, 28, 206, 102, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 107, 0, 0, 0, 0, 0, 5, 0, 33, 0, 0, 0, 15, 0, 3, 0, 5, 15,
- 5, 66, 218, 3, 76, 20, 409, 10, 13, 15, 0, 10, 66, 122, 0, 0,
- 0, 0, 0, 0, 8, 0, 18, 18, 20, 0, 0, 0, 10, 155, 23, 122, 5, 0,
- 234, 0, 0, 10, 15, 3, 15, 0, 0, 0, 0, 0, 0, 18, 122, 28, 0, 48,
- 48, 0, 122, 61, 0, 3, 46, 10, 109, 10, 36, 0, 0, 53, 112, 64,
- 36, 43, 0, 5, 0, 0, 0, 10, 18, 38, 15, 43, 5, 5, 0, 74, 0, 20,
- 38, 180, 10, 28, 33, 18, 61, 58, 122, 20, 0, 0, 25, 48, 13, 79,
- 41, 36, 0, 0, 0, 0, 61, 0, 0, 0, 0, 175, 10, 8, 0, 0, 0, 15,
- 38, 5, 3, 13, 229, 10, 191, 81, 201, 130, 241, 427, 25, 66, 84,
- 51, 48, 71, 79, 84, 79, 170, 74, 36, 10, 84, 43, 38, 157, 84,
- 43, 300, 15, 66, 15, 61, 3, 8, 0, 0, 0, 0, 0, 0, 0, 66, 48, 25,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 64, 0, 0, 0, 0, 28, 0, 30,
- 23, 3, 112, 64, 0, 0, 0, 0, 0, 0, 43, 38, 30, 15, 23, 0, 30,
- 13, 104, 185, 10, 38, 130, 155, 145, 53, 56, 157, 30, 20, 0, 8,
- 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 3, 41, 30, 5, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 8, 28, 18, 114, 119, 76, 145, 53, 3, 0,
- 71, 30, 157, 48, 28, 132, 28, 86, 8, 124, 13, 53, 0, 0, 0, 0,
- 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 198,
- 36, 145, 10, 0, 0, 0, 8, 13, 0, 0, 0, 86, 0, 0, 53, 5, 30, 46,
- 119, 157, 13, 0, 8, 23, 69, 81, 0, 71, 74, 10, 84, 3, 5, 3, 0,
- 0, 0, 114, 112, 13, 0, 0, 0, 20, 10, 0, 3, 0, 0, 0, 0, 5, 0, 8,
- 0, 0, 0, 0, 0, 5, 0, 0, 36, 10, 61, 0, 0, 0, 0, 0, 18, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 10, 10,
- 0, 0, 0, 0, 89, 61, 0, 76, 33, 15, 0, 163, 15, 122, 64, 145,
- 10, 28, 0, 0, 0, 0, 0, 48, 10, 5, 160, 33, 104, 23, 79, 25, 0,
- 48, 25, 69, 20, 0, 46, 30, 76, 81, 41, 28, 94, 86, 216, 833,
- 18, 79, 38, 178, 13, 10, 3, 5, 3, 3, 20, 0, 23, 66, 8, 8, 30,
- 53, 33, 0, 28, 23, 30, 5, 8, 137, 5, 33, 74, 46, 25, 10, 8, 81,
- 206, 5, 157, 46, 107, 549, 56, 203, 3, 5, 43, 36, 0, 0, 0, 0,
- 0, 25, 23, 18, 36, 201, 102, 38, 53, 89, 38, 56, 36, 18, 0, 0,
- 0, 0, 0, 107, 33, 0, 0, 30, 0, 0, 0, 0, 43, 99, 38, 155, 76,
- 13, 152, 198, 89, 10, 3, 25, 15, 99, 43, 66, 84, 94, 15, 79, 5,
- 0, 5, 0, 3, 86, 20, 124, 53, 10, 79, 10, 58, 64, 137, 91, 183,
- 20, 124, 46, 25, 3, 0, 13, 64, 0, 0, 0, 216, 137, 3, 0, 0, 3,
- 10, 38, 239, 51, 13, 81, 0, 33, 23, 8, 0, 28, 51, 13, 36, 5, 0,
- 36, 38, 25, 10, 46, 170, 56, 0, 0, 0, 0, 0, 0, 0, 0, 20, 43, 3,
- 81, 3, 13, 28, 71, 20, 15, 246, 3, 0, 173, 79, 0, 132, 0, 0, 0,
- 0, 0, 0, 0, 0, 25, 0, 0, 8, 5, 3, 0, 36, 18, 119, 0, 53, 15,
- 53, 0, 13, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 5, 0,
- 23, 43, 18, 0, 0, 0, 0, 0, 15, 30, 0, 0, 0, 0, 0, 28, 33, 15,
- 99, 5, 18, 0, 8, 10, 0, 5, 0, 99, 8, 0, 13, 0, 0, 0, 0, 13, 15,
- 0, 0, 0, 28, 15, 0, 0, 0, 592, 41, 269, 104, 10, 3, 178, 122,
- 15, 213, 211, 48, 38, 86, 20, 229, 25, 28, 241, 119, 23, 13, 3,
- 104, 25, 5, 23, 13, 41, 5, 0, 56, 81, 10, 3, 13, 0, 25, 8, 0,
- 0, 0, 0, 38, 3, 5, 0, 3, 0, 5, 0, 51, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 155, 89, 107, 23, 124, 10, 0, 61, 3, 43, 28, 10,
- 46, 10, 0, 0, 0, 0, 135, 3, 0, 0, 18, 18, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 46, 0, 0, 18, 3, 8, 0, 8, 5,
- 46, 107, 74, 20, 71, 5, 41, 10, 0, 109, 41, 30, 46, 5, 287,
- 168, 203, 84, 38, 229, 51, 43, 5, 94, 38, 20, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 18, 0, 30, 8, 5, 0, 51, 114, 38, 8, 8, 48, 0, 0, 18,
- 20, 318, 208, 267, 58, 231, 15, 8, 5, 3, 8, 5, 13, 0, 0, 0, 76,
- 43, 3, 168, 89, 23, 0, 46, 117, 25, 0, 0, 25, 48, 69, 295, 0,
- 0, 274, 155, 284, 18, 56, 300, 373, 3, 130, 160, 3, 3, 25, 5,
- 5, 112, 38, 10, 282, 191, 157, 3, 66, 122, 43, 30, 10, 0, 79,
- 74, 33, 81, 28, 33, 94, 10, 3, 211, 10, 84, 157, 325, 86, 99,
- 109, 13, 0, 0, 0, 0, 56, 8, 0, 38, 201, 107, 36, 61, 20, 91,
- 127, 137, 185, 56, 122, 0, 25, 13, 18, 183, 0, 0, 0, 0, 0, 0,
- 56, 71, 28, 3, 10, 94, 76, 5, 66, 170, 48, 51, 25, 0, 170, 15,
- 0, 0, 48, 53, 18, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 48, 0,
- 18, 0, 119, 13, 0, 76, 152, 0, 0, 0, 0, 0, 0, 33, 76, 130, 163,
- 64, 5, 3, 13, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 74, 51, 5, 20,
- 28, 84, 25, 3, 0, 3, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3,
- 23, 5, 0, 48, 0, 168, 15, 0, 25, 10, 0, 193, 76, 0, 5, 0, 23,
- 0, 0, 15, 0, 33, 36, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 58, 10, 0, 28, 218, 5, 0, 64, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 30, 0, 127, 0, 0, 170,
- 76, 20, 137, 86, 71, 36, 61, 0, 48, 3, 0, 23, 0, 0, 0, 0, 0,
- 10, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 66, 165, 86, 147, 56, 0, 137, 25, 137, 5, 64, 3, 0, 0, 0, 0,
- 0, 13, 0, 0, 0, 0, 3, 0, 0, 0, 5, 23, 79, 33, 0, 43, 239, 0, 0,
- 0, 0, 0, 0, 86, 157, 203, 5, 0, 183, 28, 0, 30, 0, 0, 114, 28,
- 208, 53, 64, 48, 0, 0, 0, 30, 157, 18, 13, 5, 8, 13, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 15, 130, 236, 127, 119, 41, 81, 23,
- 239, 137, 86, 0, 112, 0, 18, 0, 15, 3, 0, 51, 135, 201, 58, 51,
- 20, 163, 66, 8, 0, 0, 0, 0, 0, 25, 46, 0, 0, 8, 0, 0, 0, 8, 28,
- 0, 0, 0, 0, 0, 0, 13, 193, 74, 38, 53, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 25, 0, 64, 0, 15, 20, 0, 5,
- 18, 8, 13, 0, 33, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 109, 168, 117, 61, 10, 58, 18, 0, 0, 0, 0, 0, 0, 41,
- 206, 58, 15, 91, 3, 89, 229, 0, 18, 3, 30, 94, 0, 0, 5, 0, 8,
- 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 53, 15, 0, 0, 0, 64, 58, 30, 3,
- 5, 3, 23, 127, 38, 340, 104, 81, 0, 81, 36, 0, 0, 119, 0, 0,
- 15, 10, 10, 0, 0, 0, 0, 5, 41, 13, 198, 10, 3, 10, 0, 142, 0,
- 673, 46, 30, 0, 20, 8, 20, 38, 0, 8, 3, 0, 15, 20, 0, 38, 0,
- 18, 48, 312, 8, 13, 0, 0, 241, 104, 0, 0, 0, 0, 0, 0, 0, 23,
- 25, 51, 3, 0, 0, 0, 0, 0, 20, 0, 0, 43, 135, 38, 13, 61, 18, 5,
- 8, 0, 0, 0, 25, 48, 41, 196, 94, 254, 99, 114, 48, 36, 142, 13,
- 3, 5, 147, 28, 0, 48, 0, 48, 25, 0, 0, 0, 18, 0, 0, 48, 43, 30,
- 36, 43, 0, 86, 18, 0, 53, 10, 3, 5, 8, 0, 3, 0, 218, 302, 10,
- 0, 69, 13, 5, 147, 259, 86, 124, 94, 132, 66, 361, 15, 122, 41,
- 64, 61, 43, 18, 10, 66, 18, 15, 53, 23, 368, 165, 178, 38, 226,
- 0, 185, 10, 8, 0, 0, 5, 0, 0, 0, 0, 0, 64, 0, 18, 28, 18, 86,
- 66, 28, 109, 25, 0, 140, 0, 38, 25, 84, 36, 33, 3, 295, 170,
- 38, 246, 20, 71, 152, 140, 198, 3, 155, 91, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 89, 160, 8, 0, 3, 15, 0, 5, 3, 10, 18, 36, 0,
- 0, 244, 127, 8, 10, 48, 43, 157, 38, 41, 0, 58, 160, 10, 18, 0,
- 20, 36, 10, 48, 0, 0, 0, 0, 8, 0, 25, 0, 0, 20, 58, 36, 58, 3,
- 0, 0, 0, 0, 0, 0, 48, 46, 178, 384, 20, 74, 0, 0, 0, 0, 0, 58,
- 86, 43, 10, 36, 0, 0, 0, 0, 10, 8, 94, 38, 33, 10, 0, 3, 28,
- 61, 3, 0, 0, 150, 74, 5, 0, 25, 0, 0, 0, 0, 0, 38, 15, 5, 3, 0,
- 0, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
- 0, 0, 23, 0, 0, 30, 36, 218, 0, 61, 5, 0, 36, 41, 71, 0, 81,
- 97, 0, 43, 20, 28, 5, 3, 5, 0, 122, 117, 277, 20, 41, 0, 0, 0,
- 0, 188, 279, 211, 79, 99, 102, 76, 30, 76, 84, 64, 33, 18, 5,
- 15, 30, 97, 25, 28, 15, 150, 5, 25, 5, 15, 23, 10, 69, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 109, 25, 28, 0, 0, 36, 74, 5, 0, 0, 0,
- 94, 0, 81, 269, 5, 0, 0, 0, 0, 0, 41, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 216, 20, 0,
- 231, 0, 25, 25, 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 53, 38,
- 25, 0, 0, 53, 30, 109, 94, 64, 36, 97, 310, 33, 124, 142, 41,
- 0, 3, 10, 48, 89, 109, 102, 66, 292, 8, 0, 0, 165, 254, 0, 150,
- 163, 48, 124, 23, 61, 33, 13, 198, 97, 53, 5, 152, 56, 36, 130,
- 10, 0, 0, 8, 0, 0, 0, 15, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 145, 20, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 203,
- 0, 0, 0, 0, 0, 25, 165, 127, 152, 36, 25, 8, 3, 0, 30, 142,
- 109, 30, 191, 8, 0, 0, 0, 0, 0, 0, 41, 23, 333, 119, 137, 30,
- 0, 0, 0, 30, 0, 0, 246, 69, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 69, 102, 8, 0, 180, 150, 127, 89, 8, 0, 46, 71, 8, 0, 0,
- 0, 10, 64, 8, 20, 20, 25, 20, 53, 0, 5, 13, 0, 0, 0, 0, 20, 0,
- 0, 58, 15, 0, 117, 43, 51, 0, 23, 8, 5, 3, 15, 15, 20, 259, 48,
- 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 0, 10, 5, 79, 102, 84, 81, 0, 10, 0, 0, 0, 0, 46, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 3, 91, 28, 0,
- 0, 36, 0, 0, 15, 0, 36, 51, 61, 20, 13, 173, 102, 124, 470,
- 185, 10, 8, 38, 86, 15, 107, 5, 3, 0, 64, 0, 33, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 25, 23, 3, 15, 0, 0, 0, 0, 30,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
- 36, 5, 30, 0, 180, 5, 66, 61, 66, 15, 86, 76, 10, 0, 119, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 28, 69, 30, 89, 18, 107, 30, 56, 0, 0,
- 38, 109, 33, 0, 0, 0, 25, 74, 0, 3, 18, 0, 0, 0, 0, 0, 0, 127,
- 292, 142, 320, 330, 107, 127, 91, 0, 114, 249, 81, 267, 53,
- 216, 28, 137, 28, 20, 13, 89, 38, 147, 0, 13, 13, 0, 0, 0, 0,
- 0, 0, 0, 0, 56, 23, 109, 97, 23, 132, 119, 71, 0, 117, 297, 15,
- 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 48, 109, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 51, 18, 114, 79, 58,
- 91, 3, 38, 107, 97, 43, 97, 46, 18, 43, 3, 18, 142, 0, 0, 94,
- 89, 91, 43, 46, 0, 8, 76, 165, 84, 46, 107, 5, 18, 0, 56, 0,
- 130, 0, 0, 0, 163, 127, 86, 157, 28, 30, 8, 38, 150, 38, 8, 3,
- 30, 23, 0, 0, 71, 0, 0, 0, 38, 0, 0, 13, 0, 18, 13, 74, 104,
- 10, 79, 0, 0, 254, 15, 0, 10, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 23, 0, 0, 76, 15, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 81, 152, 13,
- 38, 147, 109, 64, 109, 5, 0, 0, 0, 0, 84, 183, 292, 5, 8, 43,
- 0, 20, 30, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 43, 41, 41, 58,
- 91, 18, 0, 0, 0, 0, 0, 0, 0, 0, 41, 76, 81, 20, 0, 0, 0, 0, 0,
- 0, 102, 36, 127, 109, 20, 33, 0, 10, 41, 208, 226, 0, 18, 0, 0,
- 64, 381, 36, 5, 0, 89, 15, 18, 0, 0, 56, 13, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0,
- 30, 0, 0, 0, 0, 0, 30, 0, 0, 102, 58, 94, 0, 0, 0, 38, 0, 41,
- 64, 104, 56, 33, 0, 0, 0, 0, 15, 0, 25, 38, 0, 56, 0, 0, 0, 0,
- 0, 0, 46, 15, 10, 8, 91, 5, 8, 0, 0, 23, 99, 25, 0, 76, 43, 41,
- 142, 8, 58, 0, 3, 114, 30, 0, 0, 71, 0, 0, 0, 0, 191, 0, 25,
- 15, 28, 43, 38, 107, 102, 64, 38, 0, 8, 0, 13, 10, 33, 0, 3, 0,
- 10, 206, 0, 0, 0, 0, 0, 0, 122, 56, 0, 0, 20, 30, 10, 0, 0,
- 272, 0, 0, 58, 66, 91, 51, 107, 0, 0, 33, 264, 56, 15, 10, 152,
- 66, 10, 79, 66, 28, 18, 25, 23, 0, 20, 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 5, 0, 0,
- 0, 0, 53, 81, 15, 0, 18, 66, 64, 262, 71, 51, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 97, 28, 25, 3, 107, 191, 30, 119, 64, 180, 43,
- 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 30, 86, 0, 0, 213, 38, 305,
- 196, 0, 43, 0, 23, 239, 135, 112, 124, 137, 51, 97, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 41, 51, 10, 41, 3, 51, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 135, 259, 13, 5, 48, 20, 74,
- 5, 10, 46, 5, 3, 18, 0, 0, 0, 0, 5, 5, 18, 0, 15, 0, 99, 0, 0,
- 0, 0, 0, 8, 81, 84, 0, 0, 10, 66, 84, 25, 58, 33, 0, 0, 20, 91,
- 0, 0, 58, 0, 0, 119, 15, 0, 58, 58, 0, 0, 0, 64, 165, 94, 43,
- 58, 61, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 5, 0, 0, 97, 81,
- 74, 53, 28, 33, 97, 0, 0, 124, 234, 0, 0, 0, 5, 58, 0, 0, 28,
- 28, 38, 18, 8, 10, 36, 0, 0, 0, 28, 10, 8, 38, 13, 20, 178, 18,
- 185, 38, 0, 0, 61, 0, 86, 0, 36, 0, 33, 102, 46, 20, 0, 0, 0,
- 5, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30,
- 58, 10, 147, 0, 5, 0, 36, 18, 91, 724, 41, 160, 41, 114, 249,
- 150, 71, 0, 157, 76, 272, 0, 0, 0, 18, 0, 0, 53, 25, 64, 46,
- 41, 25, 0, 71, 0, 25, 0, 0, 64, 114, 343, 124, 86, 58, 15, 99,
- 20, 5, 132, 109, 23, 20, 8, 91, 114, 5, 20, 246, 193, 371, 267,
- 185, 61, 58, 0, 58, 46, 0, 330, 66, 30, 8, 10, 3, 18, 23, 0, 5,
- 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 10, 91, 36, 20, 18, 0, 18,
- 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 20, 23, 130, 102, 13, 0, 0, 23, 66, 0, 23, 0, 0, 0, 41,
- 0, 196, 211, 284, 229, 10, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 36,
- 74, 119, 0, 20, 0, 0, 0, 0, 173, 409, 28, 0, 43, 8, 36, 76, 48,
- 0, 30, 10, 0, 38, 28, 112, 13, 41, 5, 25, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 25, 89, 28, 0, 0, 36, 81, 86, 20, 8, 38,
- 216, 0, 20, 25, 201, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 56,
- 8, 5, 124, 175, 0, 5, 33, 13, 20, 0, 13, 84, 3, 0, 0, 0, 0, 25,
- 236, 112, 94, 30, 36, 51, 23, 28, 23, 74, 3, 51, 140, 3, 0, 89,
- 5, 13, 23, 0, 3, 28, 0, 64, 208, 262, 0, 97, 71, 112, 51, 10,
- 48, 0, 0, 10, 102, 15, 41, 0, 15, 5, 23, 3, 0, 8, 64, 48, 0, 0,
- 0, 0, 0, 15, 5, 0, 51, 267, 53, 124, 211, 20, 8, 208, 94, 8, 0,
- 0, 0, 0, 0, 23, 183, 53, 38, 20, 0, 36, 3, 23, 10, 0, 20, 38,
- 51, 183, 15, 0, 8, 25, 0, 0, 0, 66, 15, 64, 58, 15, 10, 33, 58,
- 122, 23, 79, 48, 0, 0, 0, 23, 13, 208, 15, 0, 0, 0, 0, 0, 0, 0,
- 89, 282, 56, 43, 183, 18, 5, 5, 18, 20, 0, 0, 10, 0, 5, 5, 5,
- 13, 0, 0, 0, 8, 33, 84, 64, 33, 48, 46, 0, 0, 0, 69, 46, 43,
- 13, 20, 218, 53, 132, 91, 15, 3, 0, 0, 0, 10, 30, 33, 3, 10, 0,
- 8, 51, 0, 76, 0, 0, 5, 15, 23, 81, 3, 0, 0, 5, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 25, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 15, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 30, 46, 23, 102,
- 64, 3, 0, 0, 94, 3, 20, 20, 3, 79, 71, 48, 0, 0, 0, 137, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 51, 33, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 48, 13, 3, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 36,
- 41, 8, 0, 0, 36, 3, 0, 0, 48, 3, 0, 10, 46, 20, 0, 38, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 279, 48, 48, 208, 175, 201, 79, 147, 0, 13,
- 3, 0, 74, 38, 33, 13, 0, 0, 51, 5, 61, 5, 0, 5, 0, 10, 91, 0,
- 0, 0, 38, 135, 56, 46, 33, 0, 0, 0, 0, 0, 0, 0, 46, 10, 0, 0,
- 0, 5, 0, 0, 0, 0, 48, 10, 188, 23, 5, 25, 262, 10, 15, 0, 0,
- 66, 74, 30, 20, 41, 193, 33, 66, 221, 20, 0, 48, 15, 0, 0, 0,
- 0, 0, 109, 43, 0, 0, 0, 3, 0, 0, 23, 132, 5, 25, 0, 0, 8, 25,
- 130, 8, 51, 79, 43, 0, 0, 0, 0, 0, 157, 244, 20, 155, 5, 84,
- 145, 152, 102, 267, 178, 20, 28, 58, 0, 0, 48, 74, 99, 0, 0, 0,
- 0, 0, 23, 5, 137, 61, 124, 74, 0, 23, 25, 46, 71, 30, 0, 399,
- 170, 203, 173, 99, 124, 211, 28, 46, 36, 114, 198, 23, 20, 3,
- 48, 86, 58, 46, 142, 130, 91, 30, 51, 104, 53, 10, 0, 48, 43,
- 470, 30, 18, 3, 10, 28, 0, 0, 0, 0, 0, 10, 0, 0, 15, 8, 3, 23,
- 114, 25, 0, 10, 46, 208, 0, 0, 23, 0, 0, 0, 0, 30, 15, 94, 132,
- 0, 0, 0, 15, 0, 0, 152, 0, 0, 127, 18, 74, 124, 0, 127, 91, 10,
- 38, 28, 97, 163, 114, 66, 41, 0, 0, 0, 23, 5, 0, 8, 0, 0, 0,
- 13, 0, 5, 8, 0, 10, 30, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 18, 147, 0, 0, 5, 0, 56, 0, 0, 36, 36, 30, 0, 53, 91,
- 0, 0, 0, 0, 0, 0, 0, 0, 18, 25, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 28, 56, 0, 10, 8, 124, 236, 147, 89, 0, 13, 20,
- 0, 74, 0, 23, 8, 15, 0, 0, 0, 5, 112, 46, 5, 41, 13, 0, 8, 38,
- 0, 168, 76, 74, 5, 10, 114, 216, 20, 292, 61, 13, 10, 84, 84,
- 23, 13, 0, 20, 0, 0, 0, 0, 58, 46, 0, 86, 5, 0, 0, 5, 89, 28,
- 15, 56, 0, 0, 160, 10, 0, 0, 0, 0, 0, 0, 43, 15, 13, 102, 287,
- 3, 0, 23, 183, 5, 10, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 36, 0, 0, 0, 0, 0, 0, 64, 3, 10, 15, 0, 18, 99, 279,
- 51, 5, 20, 8, 0, 64, 0, 25, 0, 69, 135, 10, 5, 0, 0, 0, 0, 3,
- 0, 46, 3, 0, 43, 48, 18, 0, 0, 43, 53, 18, 91, 33, 25, 0, 5,
- 25, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 363, 290, 124, 292, 124, 175, 142, 147, 0, 0, 0, 0, 0,
- 0, 33, 8, 0, 0, 13, 0, 0, 0, 5, 0, 0, 48, 0, 0, 0, 0, 51, 5, 8,
- 36, 0, 0, 13, 0, 0, 0, 0, 0, 81, 46, 109, 180, 0, 20, 135, 0,
- 8, 0, 5, 0, 13, 61, 81, 74, 165, 295, 13, 5, 56, 99, 130, 51,
- 46, 46, 150, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 224, 145,
- 183, 25, 0, 0, 0, 0, 0, 0, 20, 0, 0, 213, 15, 33, 198, 10, 15,
- 124, 94, 20, 145, 69, 132, 102, 23, 94, 18, 15, 53, 0, 18, 15,
- 18, 0, 0, 0, 0, 0, 15, 10, 0, 0, 13, 66, 33, 99, 23, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 41, 18, 0, 89,
- 229, 36, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 15, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 5, 20, 0, 0, 0, 0, 0, 0, 0, 76, 132,
- 81, 30, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 23, 53,
- 0, 102, 124, 81, 46, 25, 0, 0, 0, 46, 119, 43, 10, 23, 124,
- 201, 43, 20, 0, 91, 8, 0, 0, 0, 109, 71, 43, 0, 0, 46, 46, 18,
- 36, 76, 97, 0, 0, 0, 0, 23, 107, 0, 191, 0, 0, 0, 0, 15, 13,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 114, 140, 69, 18, 13, 0, 91,
- 66, 0, 13, 0, 46, 41, 127, 0, 5, 8, 5, 3, 3, 0, 46, 5, 20, 25,
- 305, 305, 28, 61, 38, 30, 0, 0, 51, 0, 0, 0, 23, 18, 0, 33, 0,
- 48, 114, 142, 15, 150, 84, 46, 56, 559, 56, 76, 79, 318, 46,
- 13, 18, 8, 99, 5, 20, 0, 3, 15, 185, 127, 165, 5, 69, 0, 5, 3,
- 13, 0, 0, 163, 13, 71, 142, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 38, 290, 74, 18, 0, 0, 0, 160, 30, 0, 0, 0, 0, 0,
- 51, 3, 0, 5, 10, 0, 0, 0, 0, 0, 10, 20, 43, 79, 25, 13, 38, 53,
- 513, 64, 0, 51, 853, 61, 51, 269, 419, 104, 64, 64, 109, 124,
- 51, 0, 127, 140, 193, 48, 30, 244, 25, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 229, 30, 38, 41, 107, 10, 0, 13, 114, 30, 53, 66, 145,
- 0, 297, 79, 15, 218, 20, 168, 46, 191, 137, 0, 0, 66, 8, 13, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 229, 0, 0, 0, 0, 46, 0, 8, 0, 0,
- 15, 8, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
- 0, 0, 0, 0, 0, 0, 0, 76, 89, 142, 61, 305, 48, 23, 76, 104, 91,
- 107, 0, 130, 97, 170, 99, 5, 216, 69, 224, 56, 38, 152, 20, 5,
- 43, 53, 36, 193, 13, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0,
- 117, 71, 91, 107, 13, 0, 0, 0, 5, 46, 8, 15, 46, 43, 48, 74,
- 15, 0, 0, 30, 0, 0, 61, 0, 20, 28, 46, 208, 0, 0, 0, 0, 5, 0,
- 81, 30, 0, 0, 0, 0, 119, 8, 0, 46, 91, 41, 213, 0, 0, 0, 0, 0,
- 0, 0, 188, 23, 0, 0, 0, 23, 64, 0, 0, 0, 0, 0, 5, 117, 145, 0,
- 0, 81, 0, 0, 0, 69, 0, 18, 76, 102, 64, 43, 3, 8, 0, 0, 23, 0,
- 0, 0, 15, 330, 99, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 56, 13, 53,
- 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 23, 23, 0, 0, 102,
- 89, 0, 15, 114, 0, 20, 46, 25, 48, 0, 71, 61, 0, 0, 0, 0, 8,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 30, 46, 0, 0, 0, 25, 10, 0, 0, 0,
- 0, 0, 0, 213, 218, 0, 0, 0, 0, 0, 0, 0, 56, 10, 61, 140, 25,
- 36, 76, 0, 0, 0, 71, 15, 5, 81, 25, 56, 0, 15, 56, 20, 5, 8,
- 20, 36, 23, 38, 89, 0, 0, 0, 0, 0, 20, 0, 20, 81, 86, 66, 114,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 122, 127, 147,
- 46, 15, 25, 13, 109, 10, 61, 51, 216, 0, 140, 74, 53, 23, 206,
- 127, 178, 107, 84, 58, 25, 130, 109, 48, 3, 15, 0, 5, 8, 213,
- 183, 36, 211, 150, 18, 10, 127, 99, 109, 3, 86, 20, 15, 8, 18,
- 0, 33, 30, 18, 18, 0, 0, 0, 0, 15, 20, 0, 0, 0, 0, 0, 0, 20, 0,
- 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 10, 18, 41, 8, 15,
- 3, 0, 0, 0, 0, 0, 0, 0, 51, 66, 86, 262, 46, 152, 155, 43, 8,
- 41, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 51, 15, 112, 51, 0,
- 0, 0, 0, 0, 58, 36, 30, 23, 30, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 94, 0, 0, 0, 25, 239, 89,
- 109, 10, 8, 38, 25, 196, 0, 0, 23, 0, 0, 0, 0, 0, 15, 48, 43,
- 140, 41, 56, 46, 25, 0, 0, 0, 132, 30, 46, 0, 0, 0, 0, 46, 64,
- 0, 0, 0, 0, 0, 0, 23, 51, 3, 0, 0, 53, 201, 10, 18, 91, 0, 0,
- 61, 13, 18, 0, 0, 0, 0, 0, 0, 0, 56, 0, 51, 38, 241, 71, 74,
- 18, 23, 76, 8, 13, 25, 0, 23, 38, 5, 30, 0, 231, 0, 0, 23, 0,
- 0, 0, 0, 0, 0, 36, 15, 292, 0, 89, 15, 0, 18, 15, 0, 20, 30,
- 107, 33, 15, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
- 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 185, 0, 152, 25, 46, 97, 196,
- 99, 41, 33, 18, 20, 8, 41, 145, 53, 36, 0, 0, 0, 28, 69, 15,
- 94, 48, 13, 107, 0, 0, 0, 0, 0, 0, 0, 66, 213, 38, 0, 0, 30, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 559, 48, 10, 33, 53, 152,
- 193, 201, 229, 254, 140, 58, 81, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 53, 64, 43, 160, 69, 84, 0, 74, 5, 25, 0, 15, 10, 13, 38,
- 10, 5, 20, 66, 84, 0, 13, 5, 3, 10, 0, 3, 18, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10, 155, 188, 5, 0, 0, 43, 18, 10, 0, 0,
- 0, 36, 0, 0, 30, 23, 5, 13, 0, 0, 3, 0, 10, 0, 0, 152, 69, 117,
- 0, 0, 0, 0, 0, 13, 23, 66, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 97, 178, 23, 53, 79, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 107, 0, 0, 61, 0, 0, 13, 99, 0, 0, 0, 0, 0,
- 13, 15, 3, 0, 0, 0, 0, 0, 0, 0, 5, 102, 58, 13, 20, 86, 0, 0,
- 25, 109, 8, 0, 5, 196, 0, 71, 71, 15, 66, 61, 51, 3, 3, 0, 8,
- 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 25, 0, 0, 0, 0, 0, 5, 0, 112, 23, 142,
- 442, 5, 0, 0, 0, 0, 0, 0, 0, 10, 10, 13, 0, 41, 0, 140, 48, 18,
- 0, 51, 13, 152, 20, 20, 38, 61, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0,
- 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 191, 10, 13, 0, 74, 0, 0, 0,
- 0, 0, 0, 58, 267, 170, 0, 25, 46, 51, 191, 81, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 74, 25, 23, 76, 64, 0, 0, 56,
- 25, 89, 343, 318, 86, 119, 25, 155, 320, 127, 91, 38, 0, 0, 38,
- 0, 0, 0, 0, 0, 64, 114, 61, 119, 135, 13, 28, 25, 132, 114,
- 102, 71, 224, 318, 18, 25, 61, 99, 79, 18, 15, 5, 23, 38, 5,
- 43, 46, 30, 13, 0, 0, 13, 18, 102, 64, 38, 0, 0, 0, 41, 91, 25,
- 20, 0, 38, 25, 30, 0, 18, 0, 13, 0, 18, 0, 0, 0, 0, 0, 0, 13,
- 5, 0, 51, 25, 0, 3, 0, 0, 10, 5, 8, 38, 114, 51, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 48, 38, 140, 188, 193, 48, 84, 178, 36,
- 46, 140, 97, 124, 97, 124, 38, 56, 3, 0, 0, 0, 224, 28, 0, 0,
- 69, 102, 5, 0, 0, 36, 0, 36, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 89, 142, 122, 36, 145, 112, 36, 13, 18, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 48, 38, 13, 0, 0, 0, 51, 15, 48, 38, 18, 0, 0, 23,
- 46, 160, 51, 0, 5, 0, 25, 15, 30, 41, 33, 0, 64, 25, 20, 69,
- 13, 0, 0, 10, 0, 51, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 8,
- 20, 10, 56, 163, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 89, 64, 0, 0, 20, 292, 30, 25, 135, 48, 20, 56, 5,
- 3, 10, 0, 0, 0, 0, 0, 0, 8, 38, 13, 0, 0, 0, 114, 48, 0, 168,
- 5, 236, 97, 13, 3, 5, 33, 46, 193, 18, 13, 66, 8, 0, 0, 0, 13,
- 58, 112, 102, 0, 0, 0, 0, 0, 356, 5, 0, 5, 152, 0, 10, 140, 61,
- 76, 33, 61, 452, 20, 8, 79, 56, 102, 5, 51, 81, 124, 25, 0,
- 104, 66, 5, 23, 0, 107, 3, 259, 18, 13, 109, 18, 71, 89, 46,
- 239, 30, 10, 86, 84, 36, 41, 3, 91, 117, 3, 114, 20, 25, 274,
- 56, 23, 0, 0, 0, 5, 3, 5, 23, 5, 0, 0, 104, 23, 20, 5, 10, 5,
- 0, 0, 0, 23, 10, 0, 0, 33, 104, 0, 10, 79, 0, 25, 114, 0, 0, 0,
- 0, 0, 38, 36, 124, 183, 170, 130, 23, 43, 41, 76, 155, 231,
- 305, 89, 64, 0, 0, 0, 229, 102, 5, 0, 213, 20, 30, 13, 8, 15,
- 46, 20, 0, 124, 203, 48, 41, 188, 71, 25, 91, 56, 10, 8, 23, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 196, 135, 48, 0, 79, 109, 224, 94, 150,
- 23, 25, 246, 46, 71, 43, 145, 0, 48, 0, 0, 13, 5, 10, 48, 5,
- 10, 23, 48, 0, 0, 0, 8, 8, 10, 53, 394, 163, 43, 15, 61, 5, 28,
- 10, 0, 0, 0, 0, 302, 117, 64, 97, 84, 56, 61, 8, 25, 36, 51,
- 30, 0, 0, 0, 0, 0, 0, 0, 445, 8, 13, 3, 25, 51, 175, 170, 38,
- 3, 109, 119, 13, 56, 0, 58, 0, 25, 3, 76, 38, 0, 38, 74, 0, 76,
- 28, 0, 89, 15, 69, 114, 18, 191, 10, 10, 5, 152, 0, 0, 0, 13,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 20, 18, 33, 124, 117, 0, 74,
- 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 25, 0, 13, 23, 107, 56, 318,
- 152, 0, 0, 175, 102, 8, 13, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 338,
- 30, 36, 33, 38, 25, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 20,
- 46, 15, 76, 0, 0, 0, 0, 8, 0, 5, 0, 23, 180, 175, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 267, 140, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 107,
- 193, 5, 150, 112, 8, 0, 3, 51, 249, 20, 10, 0, 0, 15, 36, 157,
- 15, 18, 36, 0, 56, 38, 145, 71, 43, 71, 48, 46, 0, 33, 0, 94,
- 13, 10, 0, 0, 5, 0, 43, 10, 53, 53, 224, 5, 38, 0, 0, 0, 0, 0,
- 79, 38, 269, 46, 51, 150, 3, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 13, 0, 0, 0, 8, 0, 0, 5, 48, 51, 3, 0, 0, 0, 0, 152, 58,
- 119, 48, 53, 79, 107, 269, 516, 130, 69, 64, 5, 76, 20, 0, 0,
- 0, 145, 61, 140, 297, 89, 74, 130, 36, 69, 51, 157, 15, 0, 23,
- 0, 18, 20, 5, 13, 36, 0, 41, 36, 0, 170, 20, 0, 0, 0, 0, 0, 0,
- 0, 8, 56, 64, 0, 0, 0, 114, 124, 74, 221, 84, 269, 58, 0, 36,
- 185, 48, 13, 43, 0, 18, 0, 119, 140, 198, 18, 0, 51, 10, 56,
- 112, 20, 0, 0, 0, 0, 0, 0, 46, 109, 81, 15, 58, 84, 102, 76,
- 13, 25, 41, 0, 0, 38, 28, 5, 10, 28, 23, 41, 76, 25, 0, 18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 127, 33, 211, 46,
- 130, 0, 0, 0, 0, 0, 0, 198, 0, 51, 0, 30, 10, 61, 10, 61, 91,
- 0, 0, 0, 5, 8, 0, 0, 0, 0, 0, 97, 150, 74, 46, 13, 112, 41, 0,
- 28, 86, 69, 5, 58, 0, 0, 28, 91, 48, 28, 0, 0, 0, 0, 8, 0, 15,
- 76, 13, 74, 76, 10, 183, 58, 69, 18, 114, 254, 79, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 51, 58, 102, 81, 0,
- 0, 0, 20, 18, 170, 0, 0, 0, 51, 13, 0, 0, 0, 48, 5, 0, 10, 41,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 3, 5, 38, 8, 353, 0, 0, 0, 0,
- 0, 0, 8, 0, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
- 0, 36, 0, 107, 3, 51, 160, 292, 28, 8, 218, 5, 0, 147, 594, 99,
- 33, 51, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 18, 3, 20, 23,
- 0, 38, 0, 198, 79, 8, 3, 5, 0, 0, 0, 0, 18, 28, 3, 135, 23, 0,
- 0, 58, 48, 33, 107, 157, 64, 91, 69, 0, 0, 0, 0, 0, 0, 0, 20,
- 0, 5, 114, 152, 0, 0, 5, 0, 30, 8, 0, 152, 107, 28, 69, 20, 79,
- 287, 48, 58, 147, 130, 20, 30, 10, 74, 8, 3, 51, 36, 13, 5, 0,
- 0, 0, 46, 48, 0, 0, 33, 51, 46, 203, 0, 0, 0, 36, 104, 89, 41,
- 58, 0, 0, 0, 0, 0, 0, 13, 5, 10, 61, 23, 61, 71, 18, 30, 69,
- 41, 20, 157, 10, 221, 23, 13, 38, 53, 43, 33, 28, 38, 5, 61,
- 41, 0, 0, 0, 0, 61, 3, 0, 0, 20, 5, 8, 0, 3, 0, 15, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 13, 3, 3, 132, 3, 0, 0, 0, 0, 5, 3, 0, 86,
- 249, 38, 5, 3, 89, 0, 0, 8, 30, 36, 23, 18, 18, 8, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 61, 36, 36, 122, 28, 3, 13, 119, 33, 102, 74,
- 18, 0, 0, 8, 0, 107, 28, 3, 0, 13, 28, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 102, 53, 254, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
- 137, 335, 28, 53, 23, 353, 15, 152, 33, 89, 5, 0, 0, 3, 0, 0,
- 0, 71, 3, 15, 25, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 0, 43, 114, 36,
- 5, 56, 69, 102, 305, 10, 0, 0, 0, 23, 20, 10, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 84, 0, 0, 213, 13, 30, 10, 13, 114, 8, 18, 46, 10, 58,
- 33, 3, 0, 86, 36, 13, 46, 8, 249, 0, 0, 0, 0, 20, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 28, 23, 36, 0, 119, 48, 142, 25, 132, 5, 0,
- 0, 0, 13, 127, 0, 0, 124, 23, 0, 20, 0, 0, 0, 0, 0, 0, 0, 20,
- 0, 198, 33, 297, 5, 0, 259, 46, 201, 66, 10, 25, 0, 0, 56, 0,
- 36, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 28, 0, 0,
- 0, 0, 23, 30, 94, 368, 18, 478, 18, 0, 99, 46, 211, 168, 127,
- 64, 15, 13, 8, 33, 140, 30, 0, 13, 10, 13, 8, 0, 0, 0, 0, 0, 0,
- 0, 0, 114, 10, 69, 112, 259, 0, 5, 5, 0, 0, 122, 41, 0, 0, 0,
- 5, 0, 0, 5, 0, 5, 18, 0, 0, 0, 0, 0, 0, 0, 10, 0, 23, 79, 18,
- 3, 0, 0, 15, 0, 0, 18, 0, 0, 0, 25, 51, 33, 3, 0, 5, 56, 160,
- 33, 5, 13, 0, 0, 0, 38, 23, 43, 0, 0, 119, 8, 0, 0, 0, 10, 0,
- 0, 0, 0, 0, 0, 208, 0, 155, 119, 51, 30, 140, 117, 3, 0, 0,
- 150, 84, 15, 25, 0, 41, 13, 0, 109, 91, 36, 94, 58, 152, 74, 5,
- 10, 231, 0, 0, 10, 0, 0, 0, 0, 81, 0, 0, 0, 201, 25, 8, 226,
- 51, 5, 0, 5, 10, 0, 0, 107, 51, 79, 38, 36, 61, 0, 43, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 218, 130, 46, 43, 66, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 74, 282, 79, 20, 3, 201, 114, 43, 3, 0, 0, 0, 0,
- 25, 13, 292, 102, 259, 84, 160, 89, 0, 0, 51, 25, 5, 23, 0, 25,
- 10, 8, 0, 15, 20, 8, 43, 23, 0, 13, 46, 3, 69, 20, 119, 3, 41,
- 25, 23, 0, 0, 0, 71, 0, 15, 137, 79, 3, 0, 13, 0, 0, 25, 28,
- 429, 41, 43, 30, 10, 0, 18, 28, 8, 0, 3, 185, 33, 25, 89, 20,
- 23, 33, 168, 0, 69, 0, 0, 152, 25, 13, 25, 48, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 23, 0, 18, 89, 43, 76, 48, 28, 114, 74, 23,
- 51, 36, 66, 13, 10, 0, 28, 20, 5, 0, 277, 130, 58, 71, 13, 10,
- 3, 23, 13, 0, 119, 112, 15, 0, 36, 18, 23, 8, 3, 8, 3, 5, 76,
- 107, 28, 43, 38, 28, 30, 0, 185, 38, 10, 124, 5, 140, 23, 109,
- 48, 18, 0, 0, 74, 46, 10, 0, 135, 30, 104, 66, 25, 48, 0, 0, 0,
- 0, 0, 10, 0, 165, 376, 234, 180, 249, 554, 267, 43, 193, 23,
- 20, 48, 0, 0, 94, 119, 279, 102, 43, 56, 226, 109, 25, 18, 5,
- 46, 0, 0, 23, 0, 0, 38, 0, 8, 30, 10, 15, 0, 0, 0, 0, 0, 0,
- 163, 99, 10, 0, 0, 0, 0, 147, 13, 0, 211, 84, 150, 0, 0, 0, 86,
- 53, 28, 20, 0, 0, 38, 15, 0, 221, 25, 135, 69, 71, 168, 56,
- 124, 0, 211, 23, 13, 20, 0, 0, 13, 30, 69, 5, 33, 0, 48, 0, 79,
- 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 43, 3, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 0, 0, 99, 79, 5, 206, 33, 0, 0, 0, 0, 0,
- 8, 0, 0, 30, 23, 0, 0, 74, 25, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 48, 0, 64, 79, 43, 0, 89, 41, 43, 10, 94, 23, 3,
- 38, 69, 18, 0, 71, 66, 79, 25, 48, 226, 25, 0, 0, 0, 0, 0, 0,
- 0, 58, 64, 0, 0, 0, 0, 15, 10, 112, 23, 0, 137, 28, 5, 0, 0, 0,
- 226, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 28, 13, 0, 5, 0, 64, 0, 15,
- 0, 0, 33, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 53, 208, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 10,
- 0, 0, 0, 0, 0, 8, 0, 28, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 0, 0, 84, 0, 0, 0, 0, 28, 79, 0, 0, 145, 28, 25, 18, 0,
- 0, 0, 30, 208, 28, 0, 3, 0, 0, 0, 0, 23, 0, 0, 15, 10, 33, 175,
- 36, 109, 5, 0, 0, 0, 0, 0, 0, 8, 0, 23, 353, 36, 33, 0, 0, 0,
- 0, 0, 0, 15, 0, 5, 0, 0, 0, 424, 330, 119, 25, 91, 41, 216, 41,
- 290, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
- 0, 0, 13, 0, 0, 8, 10, 10, 5, 51, 0, 58, 109, 269, 124, 56, 20,
- 13, 0, 330, 25, 0, 48, 76, 25, 71, 41, 3, 64, 76, 208, 18, 8,
- 5, 0, 0, 3, 0, 5, 33, 152, 112, 15, 43, 401, 41, 25, 8, 28, 0,
- 36, 97, 66, 188, 23, 15, 107, 15, 8, 56, 10, 114, 13, 0, 0, 0,
- 25, 3, 0, 0, 0, 0, 0, 0, 15, 3, 0, 0, 0, 20, 38, 8, 25, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 13, 25, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 51, 3, 0, 0, 69, 135, 51, 28, 43, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 25, 0, 0, 0, 3, 0, 0, 0, 97, 0, 43, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 20, 97, 89, 0, 0, 0, 43, 8, 91, 8, 0, 0, 0, 0, 20, 51,
- 25, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 5, 0, 30, 0, 0,
- 0, 10, 5, 5, 188, 48, 8, 117, 66, 0, 0, 0, 0, 3, 0, 0, 71, 71,
- 0, 5, 8, 8, 0, 0, 0, 0, 64, 0, 0, 8, 3, 140, 76, 41, 25, 43, 3,
- 5, 0, 0, 0, 0, 0, 0, 8, 0, 3, 5, 249, 348, 25, 0, 0, 0, 5, 0,
- 0, 0, 5, 381, 99, 15, 109, 163, 0, 0, 8, 43, 33, 0, 0, 0, 28,
- 3, 99, 8, 0, 8, 30, 130, 48, 3, 0, 10, 0, 71, 56, 137, 229, 8,
- 25, 20, 20, 0, 140, 155, 66, 64, 241, 91, 0, 282, 13, 0, 41, 3,
- 0, 0, 0, 0, 56, 0, 0, 18, 119, 178, 15, 3, 0, 0, 394, 20, 3,
- 18, 221, 3, 15, 64, 23, 15, 8, 33, 0, 0, 0, 0, 0, 0, 0, 66, 79,
- 3, 48, 0, 0, 0, 5, 38, 58, 13, 10, 41, 15, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 150, 10, 74, 28, 0, 20, 0, 0, 0, 0, 0, 51, 10, 0, 0, 0,
- 8, 43, 23, 147, 69, 18, 38, 8, 15, 36, 15, 0, 3, 10, 5, 48, 41,
- 10, 66, 43, 165, 277, 58, 5, 0, 0, 0, 0, 0, 119, 0, 211, 36,
- 340, 20, 216, 33, 0, 51, 10, 15, 28, 104, 0, 18, 3, 13, 0, 10,
- 20, 0, 0, 0, 0, 0, 0, 0, 46, 53, 5, 94, 43, 79, 53, 3, 102,
- 114, 91, 356, 18, 5, 178, 226, 150, 234, 343, 135, 30, 157, 58,
- 74, 94, 97, 20, 58, 23, 30, 0, 38, 10, 36, 74, 71, 61, 10, 0,
- 0, 0, 0, 0, 23, 142, 89, 33, 221, 335, 15, 0, 0, 0, 0, 0, 69,
- 18, 20, 185, 3, 3, 0, 10, 20, 102, 64, 20, 3, 0, 0, 15, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 5, 8, 3, 0, 5, 13, 8, 10, 0, 0,
- 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 53, 0, 89, 114,
- 56, 10, 20, 185, 10, 170, 15, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 0, 0, 15, 51, 170, 203, 0, 0, 0, 0, 0, 0, 0, 0,
- 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 74, 0, 0, 0, 51,
- 107, 5, 23, 5, 150, 30, 145, 13, 25, 13, 147, 112, 13, 147, 15,
- 25, 30, 0, 28, 5, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 310,
- 107, 152, 91, 157, 56, 18, 0, 5, 0, 0, 3, 0, 15, 20, 23, 58, 5,
- 48, 30, 0, 0, 38, 15, 0, 25, 0, 46, 5, 107, 0, 0, 173, 241, 99,
- 84, 188, 91, 10, 3, 0, 0, 0, 5, 152, 18, 41, 84, 69, 0, 0, 41,
- 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 231,
- 38, 23, 18, 38, 0, 13, 28, 23, 119, 10, 119, 107, 5, 114, 107,
- 152, 175, 61, 76, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 13, 0, 0,
- 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 61, 41, 94,
- 366, 109, 25, 69, 0, 0, 0, 48, 10, 20, 51, 41, 25, 38, 41, 0,
- 3, 18, 0, 0, 13, 5, 0, 0, 0, 221, 107, 79, 36, 104, 58, 168,
- 58, 10, 0, 3, 10, 13, 8, 18, 20, 18, 15, 25, 91, 30, 168, 13,
- 221, 61, 3, 0, 0, 0, 0, 0, 28, 74, 43, 25, 41, 363, 163, 69, 0,
- 94, 0, 0, 8, 13, 0, 8, 3, 18, 145, 160, 152, 3, 0, 0, 76, 8, 0,
- 0, 0, 18, 5, 36, 0, 8, 0, 43, 20, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 13, 18, 0, 160, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,
- 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 23, 132, 20, 0, 0, 0,
- 0, 0, 0, 0, 0, 28, 41, 13, 28, 10, 5, 53, 0, 56, 0, 188, 10, 8,
- 0, 5, 8, 5, 282, 257, 56, 0, 0, 0, 56, 8, 23, 20, 127, 64, 30,
- 5, 10, 188, 5, 0, 74, 18, 0, 0, 0, 0, 0, 0, 0, 25, 79, 15, 84,
- 165, 48, 89, 74, 0, 0, 0, 25, 0, 0, 0, 28, 3, 0, 36, 0, 0, 0,
- 0, 112, 213, 8, 0, 28, 8, 0, 0, 13, 58, 76, 0, 28, 36, 10, 76,
- 127, 43, 0, 8, 28, 23, 71, 109, 79, 38, 124, 145, 43, 3, 114,
- 91, 8, 86, 10, 0, 8, 0, 43, 178, 25, 5, 64, 104, 384, 3, 3, 0,
- 0, 0, 5, 8, 0, 381, 0, 0, 0, 51, 114, 0, 8, 0, 0, 5, 0, 191, 5,
- 0, 18, 41, 124, 84, 89, 36, 213, 3, 0, 0, 58, 229, 180, 112,
- 107, 218, 470, 79, 56, 99, 86, 5, 13, 3, 66, 18, 97, 5, 3, 5,
- 0, 23, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, 81, 0,
- 206, 79, 3, 61, 97, 0, 0, 104, 64, 48, 0, 0, 0, 0, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 170,
- 53, 0, 0, 0, 188, 64, 0, 257, 208, 13, 0, 0, 0, 0, 0, 79, 81,
- 117, 142, 117, 0, 170, 41, 76, 310, 132, 0, 0, 0, 0, 0, 0, 66,
- 0, 0, 0, 0, 236, 221, 91, 226, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
- 0, 0, 0, 0, 3, 0, 8, 15, 218, 157, 211, 109, 122, 20, 0, 0,
- 109, 43, 18, 30, 99, 0, 0, 0, 0, 0, 0, 30, 0, 137, 15, 38, 38,
- 23, 152, 163, 15, 5, 3, 0, 0, 0, 0, 13, 23, 135, 58, 43, 102,
- 58, 25, 33, 28, 234, 0, 0, 0, 56, 0, 0, 0, 94, 305, 36, 56, 5,
- 0, 0, 46, 0, 56, 0, 0, 0, 0, 0, 46, 5, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 13, 58, 5, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 23, 15, 76,
- 20, 25, 18, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 33,
- 102, 8, 33, 28, 5, 20, 0, 0, 0, 0, 0, 0, 0, 0, 64, 38, 13, 0,
- 0, 13, 71, 33, 0, 0, 0, 0, 0, 0, 0, 28, 71, 58, 188, 23, 0, 0,
- 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 66, 46, 127, 3, 0, 0, 0, 0, 0,
- 89, 10, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 102, 0, 191, 15, 56, 86, 23, 0, 0, 0, 84,
- 312, 51, 8, 84, 3, 23, 0, 30, 38, 185, 79, 107, 13, 38, 23, 23,
- 130, 5, 3, 10, 0, 0, 36, 79, 109, 28, 183, 229, 356, 38, 13, 0,
- 198, 188, 36, 0, 36, 109, 257, 488, 10, 5, 152, 203, 56, 38,
- 51, 38, 41, 178, 246, 112, 25, 15, 0, 0, 0, 145, 76, 165, 30,
- 91, 76, 191, 33, 23, 160, 23, 112, 109, 287, 236, 124, 33, 13,
- 127, 18, 109, 33, 13, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 15, 51,
- 15, 41, 119, 43, 236, 419, 36, 5, 13, 13, 33, 3, 0, 119, 41,
- 292, 137, 38, 0, 0, 0, 0, 0, 0, 30, 0, 0, 51, 13, 0, 0, 51, 23,
- 13, 15, 15, 0, 193, 38, 317, 18, 0, 15, 63, 56, 0, 0, 0, 0, 0,
- 10, 8, 3, 41, 269, 38, 15, 8, 0, 5, 48, 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 46, 13, 8, 0, 312, 178, 130, 41, 15, 28, 0, 33, 0, 13, 0,
- 142, 0, 13, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 0, 0, 0, 86, 104, 140, 160, 43, 0, 36, 0, 0,
- 0, 10, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 5,
- 185, 102, 10, 5, 5, 56, 112, 5, 8, 13, 0, 0, 0, 0, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 10, 23, 30, 5, 102, 152, 3,
- 0, 46, 15, 0, 180, 74, 185, 58, 0, 33, 66, 23, 5, 8, 3, 208,
- 20, 5, 107, 48, 8, 0, 18, 0, 0, 15, 23, 33, 112, 30, 13, 33,
- 102, 25, 0, 20, 0, 5, 3, 0, 51, 53, 142, 66, 76, 13, 152, 43,
- 48, 13, 25, 5, 102, 84, 0, 0, 102, 0, 0, 0, 0, 13, 0, 3, 127,
- 0, 152, 51, 5, 38, 5, 38, 229, 0, 0, 0, 0, 190, 38, 297, 264,
- 178, 185, 79, 63, 79, 23, 25, 190, 48, 18, 63, 5, 0, 0, 0, 0,
- 5, 127, 5, 28, 33, 13, 114, 23, 8, 513, 43, 0, 0, 8, 178, 112,
- 43, 89, 43, 91, 0, 0, 109, 165, 58, 20, 107, 81, 51, 20, 183,
- 58, 20, 71, 20, 56, 28, 38, 58, 122, 63, 5, 20, 89, 203, 130,
- 84, 335, 81, 107, 15, 0, 0, 0, 0, 61, 8, 0, 0, 0, 5, 3, 13,
- 127, 13, 15, 18, 8, 25, 190, 66, 160, 69, 81, 58, 25, 211, 102,
- 38, 0, 160, 33, 38, 51, 38, 15, 0, 5, 28, 0, 0, 0, 28, 89, 74,
- 15, 3, 13, 0, 25, 0, 284, 51, 287, 229, 43, 20, 43, 89, 58, 38,
- 81, 69, 25, 33, 0, 20, 10, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 3,
- 251, 33, 102, 152, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 10, 0, 5, 53, 0, 51, 51,
- 20, 51, 165, 191, 13, 0, 0, 0, 76, 89, 51, 41, 0, 0, 0, 0, 10,
- 257, 185, 48, 46, 5, 102, 89, 23, 23, 0, 10, 13, 58, 23, 86,
- 89, 0, 43, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 86, 56, 79, 43,
- 102, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 13, 8, 0, 0, 0, 0,
- 206, 0, 0, 0, 0, 0, 0, 13, 0, 0, 107, 241, 5, 142, 20, 0, 0,
- 10, 0, 0, 0, 5, 15, 0, 23, 0, 64, 0, 0, 0, 8, 0, 0, 0, 76, 13,
- 0, 175, 15, 46, 376, 0, 15, 10, 13, 5, 18, 15, 13, 13, 5, 18,
- 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 18, 33, 0, 0, 51,
- 76, 3, 152, 160, 28, 51, 25, 0, 0, 0, 0, 5, 8, 0, 0, 0, 38,
- 107, 18, 191, 28, 43, 38, 157, 33, 127, 394, 25, 102, 183, 38,
- 3, 0, 0, 0, 13, 28, 140, 58, 5, 8, 48, 157, 163, 38, 160, 36,
- 3, 25, 8, 0, 13, 71, 20, 13, 0, 81, 18, 107, 15, 5, 51, 18, 13,
- 0, 0, 0, 0, 0, 0, 0, 0, 13, 5, 0, 8, 10, 0, 0, 18, 56, 84, 53,
- 51, 38, 5, 13, 86, 38, 64, 114, 76, 94, 104, 30, 5, 3, 0, 0,
- 13, 5, 0, 0, 0, 0, 0, 3, 8, 0, 38, 127, 0, 0, 0, 0, 0, 0, 3,
- 13, 10, 38, 216, 183, 117, 58, 38, 46, 394, 58, 13, 137, 8,
- 267, 86, 41, 38, 61, 13, 66, 15, 0, 0, 5, 25, 5, 64, 10, 53,
- 10, 64, 38, 0, 13, 0, 10, 69, 3, 8, 3, 5, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 25, 51, 0, 0, 0, 8, 0, 0, 0, 46, 43, 30, 28, 10, 3, 0, 0,
- 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 142, 23, 5, 15, 15,
- 127, 20, 97, 0, 0, 91, 10, 18, 38, 18, 5, 0, 0, 18, 8, 3, 43,
- 23, 137, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 71, 102,
- 25, 25, 127, 43, 0, 0, 3, 13, 30, 3, 15, 198, 5, 183, 8, 0, 0,
- 0, 8, 0, 25, 10, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0,
- 0, 0, 13, 0, 18, 13, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 51, 25, 91, 0, 38, 79, 0, 0, 0, 124, 5, 33,
- 3, 33, 5, 0, 5, 0, 0, 0, 0, 20, 0, 33, 38, 173, 0, 25, 165, 3,
- 0, 18, 25, 41, 15, 0, 74, 15, 94, 0, 0, 28, 38, 13, 0, 152, 0,
- 8, 84, 25, 0, 0, 0, 0, 0, 5, 15, 102, 38, 20, 0, 0, 8, 64, 119,
- 8, 0, 13, 25, 51, 0, 0, 0, 0, 0, 0, 0, 0, 33, 43, 64, 51, 457,
- 102, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 71, 76, 0, 66, 3, 102, 64, 191, 102, 79, 0, 208, 0,
- 5, 10, 3, 10, 23, 0, 0, 0, 61, 8, 249, 107, 18, 0, 137, 3, 51,
- 25, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 51, 51, 130,
- 13, 38, 20, 33, 0, 20, 30, 76, 13, 0, 0, 0, 0, 0, 23, 13, 0,
- 18, 38, 51)
diff --git a/data/rainfall.rda b/data/rainfall.rda
new file mode 100644
index 0000000..f727243
Binary files /dev/null and b/data/rainfall.rda differ
diff --git a/data/ruge.R b/data/ruge.R
deleted file mode 100644
index 363021d..0000000
--- a/data/ruge.R
+++ /dev/null
@@ -1,5 +0,0 @@
-"ruge" <-
-structure(list(counts = c(57,203,383,525,532,408,273,139,45,27,10,4,0,1,1),
-number = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14)), .Names = c("counts",
-"number"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9",
-"10", "11", "12", "13", "14", "15"), class = "data.frame")
diff --git a/data/ruge.rda b/data/ruge.rda
new file mode 100644
index 0000000..e31cabc
Binary files /dev/null and b/data/ruge.rda differ
diff --git a/data/toxop.R b/data/toxop.R
deleted file mode 100644
index b56fc32..0000000
--- a/data/toxop.R
+++ /dev/null
@@ -1,11 +0,0 @@
-`toxop` <-
-structure(list(rainfall = c(1735, 1936, 2000, 1973, 1750, 1800,
-1750, 2077, 1920, 1800, 2050, 1830, 1650, 2200, 2000, 1770, 1920,
-1770, 2240, 1620, 1756, 1650, 2250, 1796, 1890, 1871, 2063, 2100,
-1918, 1834, 1780, 1900, 1976, 2292), ssize = c(4, 10, 5, 10,
-2, 5, 8, 19, 6, 10, 24, 1, 30, 22, 1, 11, 1, 54, 9, 18, 12, 1,
-11, 77, 51, 16, 82, 13, 43, 75, 13, 10, 6, 37), cityNo = 1:34,
- positive = c(2, 3, 1, 3, 2, 3, 2, 7, 3, 8, 7, 0, 15, 4, 0,
- 6, 0, 33, 4, 5, 2, 0, 8, 41, 24, 7, 46, 9, 23, 53, 8, 3,
- 1, 23)), .Names = c("rainfall", "ssize", "cityNo", "positive"
-), row.names = c(NA, -34), class = "data.frame")
diff --git a/data/toxop.rda b/data/toxop.rda
new file mode 100644
index 0000000..3f6a9a8
Binary files /dev/null and b/data/toxop.rda differ
diff --git a/data/ugss.rda b/data/ugss.rda
new file mode 100644
index 0000000..17defc8
Binary files /dev/null and b/data/ugss.rda differ
diff --git a/data/usagrain.txt b/data/usagrain.txt
deleted file mode 100644
index 5f7e1a8..0000000
--- a/data/usagrain.txt
+++ /dev/null
@@ -1,143 +0,0 @@
- wheat.flour corn wheat rye
- 5.58 1.12 1.62 1.075
- 5.46 1.15 1.58 1.064
- 5.50 1.18 1.56 1.158
- 5.53 1.09 1.39 1.073
- 5.63 1.15 1.28 1.125
- 5.65 1.13 1.28 1.070
- 5.70 1.18 1.36 1.298
- 5.68 1.15 1.46 1.168
- 5.75 1.11 1.45 1.205
- 5.66 1.11 1.47 1.298
- 5.70 1.14 1.51 1.320
- 5.75 1.12 1.53 1.295
- 5.75 1.09 1.52 1.298
- 5.78 1.11 1.52 1.293
- 5.72 1.11 1.54 1.253
- 5.80 1.12 1.59 1.228
- 5.95 1.16 1.65 1.230
- 6.09 1.15 1.63 1.278
- 6.25 1.12 1.62 1.125
- 6.37 1.14 1.57 1.145
- 6.45 1.13 1.59 1.120
- 6.44 1.12 1.55 1.148
- 6.46 1.10 1.59 1.164
- 6.39 1.17 1.58 1.210
- 6.03 1.21 1.60 1.258
- 6.05 1.21 1.63 1.228
- 6.02 1.20 1.64 1.195
- 6.15 1.21 1.68 1.233
- 6.09 1.23 1.63 1.196
- 6.05 1.30 1.38 1.220
- 5.70 1.34 1.30 1.205
- 5.28 1.34 1.30 1.185
- 5.76 1.36 1.47 1.355
- 5.98 1.22 1.64 1.433
- 6.41 1.18 1.69 1.420
- 6.83 1.23 1.69 1.423
- 6.45 1.26 1.78 1.463
- 6.90 1.23 1.75 1.376
- 6.64 1.24 1.48 1.303
- 6.68 1.26 1.66 1.280
- 6.70 1.29 1.54 1.263
- 6.53 1.26 1.43 1.265
- 7.09 1.23 1.46 1.245
- 6.70 1.25 1.44 1.210
- 6.73 1.30 1.52 1.280
- 6.84 1.25 1.50 1.236
- 6.90 1.19 1.56 1.233
- 6.90 1.28 1.59 1.185
- 6.68 1.29 1.57 1.184
- 6.70 1.31 1.58 1.160
- 6.70 1.34 1.56 1.190
- 6.70 1.35 1.56 1.170
- 6.70 1.37 1.46 1.173
- 6.90 1.36 1.45 1.100
- 7.07 1.33 1.43 1.001
- 7.10 1.29 1.53 1.088
- 7.10 1.31 1.54 1.111
- 7.20 1.27 1.53 1.105
- 7.28 1.17 1.66 1.125
- 7.21 1.24 1.74 1.180
- 7.22 1.32 1.71 1.243
- 7.22 1.32 1.75 1.225
- 7.22 1.26 1.67 1.155
- 7.19 1.30 1.65 1.268
- 7.20 1.32 1.67 1.153
- 7.63 1.31 1.77 1.130
- 8.07 1.42 1.90 1.280
- 8.09 1.45 1.89 1.248
- 7.92 1.46 1.92 1.243
- 7.72 1.40 1.69 1.158
- 7.73 1.35 1.75 1.160
- 7.62 1.44 1.83 1.218
- 7.35 1.44 1.80 1.203
- 7.48 1.39 1.68 1.163
- 7.55 1.42 1.83 1.208
- 7.27 1.38 1.80 1.188
- 7.43 1.39 1.67 1.180
- 7.34 1.38 1.57 1.160
- 7.40 1.33 1.48 1.191
- 7.29 1.21 1.42 1.099
- 7.27 1.20 1.45 1.173
- 7.24 1.20 1.49 1.140
- 7.18 1.08 1.44 1.118
- 7.21 1.18 1.50 1.148
- 7.18 1.15 1.52 1.154
- 7.04 1.17 1.56 1.190
- 6.94 1.14 1.51 1.179
- 6.76 1.16 1.46 1.145
- 6.78 1.21 1.47 1.130
- 6.77 1.16 1.26 1.073
- 6.73 1.15 1.29 1.125
- 6.72 1.08 1.19 1.046
- 6.85 1.08 1.18 1.119
- 6.89 1.10 1.28 1.145
- 6.90 1.17 1.36 1.169
- 6.85 1.15 1.34 1.168
- 6.85 1.19 1.43 1.205
- 6.83 1.17 1.40 1.201
- 6.76 1.17 1.35 1.215
- 6.75 1.22 1.36 1.215
- 6.75 1.31 1.40 1.240
- 6.75 1.32 1.33 1.205
- 6.92 1.30 1.30 1.185
- 6.86 1.29 1.28 1.035
- 6.78 1.27 1.33 1.055
- 6.89 1.27 1.33 1.105
- 6.95 1.16 1.42 1.115
- 7.14 1.18 1.48 1.135
- 7.14 1.26 1.50 1.135
- 7.17 1.26 1.52 1.135
- 7.19 1.25 1.54 1.145
- 7.19 1.29 1.54 1.165
- 7.19 1.32 1.55 1.165
- 7.20 1.36 1.40 1.215
- 7.16 1.39 1.43 1.085
- 7.21 1.37 1.45 1.065
- 7.20 1.45 1.68 1.085
- 7.35 1.44 1.67 1.085
- 7.43 1.42 1.74 1.145
- 7.50 1.33 1.63 1.165
- 7.45 1.39 1.72 1.155
- 7.45 1.40 1.74 1.165
- 7.45 1.36 1.68 1.135
- 7.51 1.33 1.66 1.145
- 7.58 1.31 1.66 1.185
- 7.55 1.38 1.63 1.165
- 7.52 1.30 1.44 1.035
- 7.48 1.29 1.31 0.875
- 7.48 1.17 1.33 0.945
- 7.48 1.12 1.39 0.965
- 7.48 1.09 1.49 0.895
- 7.48 1.26 1.60 0.980
- 7.28 1.23 1.58 1.030
- 7.15 1.21 1.52 1.050
- 7.15 1.23 1.58 1.030
- 7.15 1.25 1.68 1.040
- 7.07 1.28 1.67 1.060
- 7.07 1.28 1.36 0.990
- 7.07 1.30 1.47 0.980
- 7.66 1.29 1.60 0.960
- 8.39 1.39 1.86 0.990
- 8.57 1.31 1.92 1.01
diff --git a/data/uscrime.rda b/data/uscrime.rda
new file mode 100644
index 0000000..e680068
Binary files /dev/null and b/data/uscrime.rda differ
diff --git a/data/usgrain.txt.gz b/data/usgrain.txt.gz
new file mode 100644
index 0000000..d12d350
Binary files /dev/null and b/data/usgrain.txt.gz differ
diff --git a/data/venice.R b/data/venice.R
deleted file mode 100644
index 63a2e25..0000000
--- a/data/venice.R
+++ /dev/null
@@ -1,50 +0,0 @@
-"venice" <-
-structure(list(year = c(1931, 1932, 1933, 1934, 1935, 1936, 1937,
-1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948,
-1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959,
-1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970,
-1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981
-), r1 = c(103, 78, 121, 116, 115, 147, 119, 114, 89, 102, 99,
-91, 97, 106, 105, 136, 126, 132, 104, 117, 151, 116, 107, 112,
-97, 95, 119, 124, 118, 145, 122, 114, 118, 107, 110, 194, 138,
-144, 138, 123, 122, 120, 114, 96, 125, 124, 120, 132, 166, 134,
-138), r2 = c(99, 78, 113, 113, 107, 106, 107, 97, 86, 101, 98,
-91, 88, 95, 102, 104, 108, 126, 102, 96, 117, 104, 102, 100,
-96, 91, 107, 114, 117, 126, 108, 110, 116, 104, 108, 127, 118,
-132, 120, 122, 116, 118, 111, 95, 110, 122, 102, 114, 140, 114,
-136), r3 = c(98, 74, 106, 91, 105, 93, 107, 85, 82, 98, 96, 87,
-82, 94, 98, 103, 101, 119, 102, 91, 114, 103, 98, 95, 96, 90,
-100, 113, 108, 123, 104, 108, 114, 104, 106, 126, 118, 123, 116,
-119, 116, 113, 99, 95, 109, 114, 100, 110, 131, 111, 130), r4 = c(96,
-73, 105, 91, 101, 90, 106, 83, 81, 97, 95, 83, 79, 90, 88, 101,
-99, 107, 101, 89, 109, 98, 98, 94, 95, 85, 98, 110, 107, 116,
-100, 107, 112, 103, 102, 104, 107, 114, 114, 110, 109, 111, 98,
-93, 103, 109, 98, 107, 130, 109, 128), r5 = c(94, 73, 102, 91,
-93, 87, 105, 82, 80, 96, 94, 83, 78, 89, 86, 100, 98, 101, 93,
-88, 106, 91, 92, 94, 94, 85, 98, 108, 105, 114, 100, 106, 110,
-102, 101, 103, 100, 112, 108, 105, 104, 96, 97, 92, 102, 108,
-96, 105, 122, 107, 119), r6 = c(89, 72, 89, 89, 91, 87, 102,
-81, 80, 94, 94, 81, 78, 84, 84, 91, 98, 98, 92, 86, 104, 91,
-89, 90, 92, 84, 97, 104, 102, 110, 95, 104, 109, 98, 101, 102,
-96, 110, 106, 99, 101, 92, 97, 90, 101, 108, 96, 102, 118, 106,
-110), r7 = c(86, 71, 89, 88, NA, 87, 98, 79, 78, 94, 89, 78,
-76, 84, 84, 88, 96, 92, 90, 86, 100, 90, 89, 86, 90, 82, 93,
-104, 96, 108, 94, 99, 104, 92, 100, 102, 95, 108, 104, 99, 100,
-91, 96, 90, 101, 104, 95, 100, 116, 104, 107), r8 = c(85, 70,
-88, 88, NA, 84, 95, 76, 78, 91, 88, 75, 76, 83, 80, 84, 96, 86,
-88, 86, 99, 90, 89, 82, 90, 82, 92, 102, 96, 108, 93, 99, 103,
-90, 98, 99, 93, 107, 103, 97, 100, 91, 92, 89, 97, 104, 94, 100,
-115, 103, 104), r9 = c(84, 70, 86, 86, NA, 82, 94, 74, 77, 90,
-87, 75, 74, 82, 80, 83, 94, 85, 88, 86, 99, 87, 84, 81, 90, 82,
-91, 100, 94, 107, 92, 98, 103, 90, 98, 98, 92, 107, 103, 96,
-99, 90, 90, 88, 90, 102, 91, 100, 115, 102, 104), r10 = c(79,
-69, 85, 81, NA, 81, 94, 69, 77, 89, 86, 73, 71, 80, 80, 82, 93,
-83, 86, 85, 99, 86, 84, 81, 88, 80, 90, 99, 94, 106, 91, 95,
-102, 90, 98, 97, 92, 106, 103, 96, 98, 89, 90, 88, 89, 100, 90,
-99, 112, 99, 104)), .Names = c("year", "r1", "r2", "r3", "r4",
-"r5", "r6", "r7", "r8", "r9", "r10"), class = "data.frame", row.names = c("1",
-"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
-"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
-"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
-"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
-"47", "48", "49", "50", "51"))
diff --git a/data/venice.rda b/data/venice.rda
new file mode 100644
index 0000000..b67b7fc
Binary files /dev/null and b/data/venice.rda differ
diff --git a/data/venice90.rda b/data/venice90.rda
new file mode 100644
index 0000000..ddb10ef
Binary files /dev/null and b/data/venice90.rda differ
diff --git a/data/waitakere.txt b/data/waitakere.txt
deleted file mode 100644
index a15d254..0000000
--- a/data/waitakere.txt
+++ /dev/null
@@ -1,580 +0,0 @@
-agaaus beitaw corlae cyadea cyamed daccup dacdac eladen hedarb hohpop kniexc kuneri lepsco metrob neslan rhosap vitluc altitude
-0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 1 1 260
-0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 200
-1 0 0 1 0 1 0 1 1 1 1 0 0 1 0 0 0 320
-0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 320
-0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 260
-0 0 0 1 1 0 0 0 0 1 1 0 0 1 0 1 1 200
-0 1 1 1 1 0 0 0 1 0 1 0 0 0 1 1 1 160
-0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 80
-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 0 1 1 1 0 0 0 0 1 0 1 1 0 0 1 0 60
-0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 1 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 320
-0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 220
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 0 40
-0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 20
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 200
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 200
-0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 430
-0 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0 0 410
-0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 400
-0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 410
-0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 459
-1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 420
-0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 0 410
-0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 400
-0 1 0 1 0 0 0 1 0 1 1 1 0 0 0 0 0 428
-0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 400
-1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0 290
-0 0 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 300
-0 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 310
-0 0 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 280
-0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 260
-0 0 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 290
-0 1 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 340
-1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0 310
-1 1 0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 280
-0 1 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 300
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 310
-0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 390
-0 1 0 1 1 1 0 0 0 0 1 0 0 1 0 1 0 370
-1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 360
-0 1 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 310
-0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 1 0 270
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 160
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 170
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 300
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 360
-0 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 360
-1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 280
-0 0 0 0 0 1 0 0 1 0 1 1 0 0 1 1 0 280
-0 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 180
-1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 150
-1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 1 140
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 140
-0 1 1 1 1 0 0 0 1 1 1 0 0 1 0 1 1 160
-0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 260
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 240
-0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 300
-1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 300
-0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 1 0 280
-0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 1 0 260
-1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 220
-1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 270
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 210
-1 1 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 240
-0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 0 1 200
-0 1 0 0 1 0 0 1 0 1 1 0 1 0 0 1 0 100
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 120
-0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 220
-0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 240
-0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 260
-1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 180
-0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 70
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 150
-1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 90
-0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 160
-1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 1 0 200
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 230
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 200
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 140
-0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 190
-0 1 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 270
-1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 1 1 150
-1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 200
-0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 100
-0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 100
-0 1 0 1 1 0 1 0 0 0 1 1 0 0 1 1 1 130
-1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 200
-0 0 0 1 0 1 0 1 1 1 0 0 0 0 0 1 1 250
-0 1 1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 120
-0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 180
-0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 1 1 80
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 370
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 240
-1 1 1 1 0 0 0 0 0 0 1 1 0 1 0 1 1 180
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 120
-1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 125
-1 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 80
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 90
-0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 90
-0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 90
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 120
-0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 1 1 20
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 90
-0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 100
-1 1 0 1 0 1 0 0 1 0 1 1 0 0 0 1 0 120
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 180
-1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 150
-0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 160
-1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 150
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 180
-1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 0 260
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 225
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 290
-1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 0 80
-1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 180
-0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 60
-0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 30
-0 1 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 290
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 290
-0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 1 1 140
-1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 60
-1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 60
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 70
-1 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 1 90
-0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 40
-0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 50
-1 0 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 85
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 140
-0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 140
-1 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 1 220
-1 0 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 140
-0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 0 250
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 160
-1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 310
-0 1 1 1 1 0 0 0 1 0 1 0 0 1 0 1 1 180
-1 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 0 300
-0 0 0 1 1 1 0 1 1 1 1 0 1 0 0 1 0 300
-0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 260
-1 0 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 150
-0 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 260
-0 1 1 0 1 0 0 1 1 1 1 0 0 1 0 1 1 200
-0 1 1 1 1 1 0 1 1 0 1 0 0 0 1 1 1 280
-0 1 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 250
-0 1 1 1 1 0 0 0 1 0 1 0 0 1 1 1 1 250
-1 1 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0 230
-0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1 0 320
-1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 200
-0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 200
-0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 0 250
-0 0 1 1 1 0 0 1 0 1 1 0 0 0 1 1 1 240
-1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 200
-0 0 0 1 1 1 0 1 1 0 1 0 0 0 1 1 0 300
-0 1 1 1 1 0 1 0 1 1 1 0 0 1 0 1 1 140
-0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 90
-0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 1 1 60
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 60
-0 0 0 1 1 1 1 0 0 0 1 0 0 0 0 1 1 260
-0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 180
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 260
-0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 260
-1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 140
-1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1 1 20
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 100
-0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 100
-0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 80
-0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 0 80
-0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 80
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 120
-0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 200
-0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 0 250
-1 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 110
-0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 60
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 115
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 190
-1 0 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 120
-1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 0 0 140
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 190
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 130
-0 1 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 190
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 40
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-0 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 200
-0 0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 0 160
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 240
-0 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 200
-1 0 0 1 1 1 0 0 1 0 1 1 0 0 0 1 1 200
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 220
-0 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 260
-0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 160
-0 1 0 1 1 1 0 1 0 1 1 1 1 0 1 0 0 290
-0 1 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 140
-0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 300
-0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 320
-0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 270
-0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 260
-0 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 240
-0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 0 0 310
-0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 300
-0 0 0 0 0 1 1 1 0 0 0 0 1 0 1 0 0 300
-0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0 340
-0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 320
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 330
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 300
-0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 370
-0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 320
-0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 390
-0 1 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 340
-0 1 0 0 0 1 1 1 0 0 1 0 0 1 1 0 0 305
-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 220
-1 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 400
-0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 230
-0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 300
-0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 340
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 50
-0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 10
-0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 250
-0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 218
-0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 0 245
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 200
-0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 160
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 200
-0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 250
-0 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 0 290
-1 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 0 280
-0 1 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 80
-0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 270
-0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 260
-0 0 0 1 1 0 1 1 1 0 1 0 0 0 1 1 1 110
-0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 1 0 200
-0 1 1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 120
-0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 1 160
-0 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 320
-0 0 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0 300
-0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 0 370
-0 1 0 1 1 1 0 0 1 0 1 0 0 0 1 1 0 340
-0 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 0 280
-0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 200
-0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 190
-0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 200
-0 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 180
-0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 100
-1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 120
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 140
-0 1 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 110
-0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 1 1 200
-1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 220
-0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 110
-0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 100
-0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 0
-1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 100
-0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 180
-0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 180
-0 1 0 1 1 1 0 0 0 0 1 0 0 1 0 1 0 320
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 360
-0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 150
-0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 140
-0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 325
-0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 240
-0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 150
-0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 1 1 160
-0 1 0 1 1 1 1 0 1 0 1 0 0 0 1 1 0 140
-1 0 0 0 1 0 0 0 0 0 1 1 1 0 1 0 0 70
-0 0 0 1 1 1 1 0 1 0 1 0 0 1 0 1 0 160
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 110
-0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 1 0 90
-0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 200
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 70
-0 1 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 110
-1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 280
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 200
-0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 220
-0 1 0 1 1 0 0 1 1 0 1 1 0 0 1 0 0 360
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 380
-0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 260
-0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 390
-1 0 0 1 0 1 0 0 0 0 1 1 0 0 1 0 0 280
-1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 160
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 320
-0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 220
-1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 300
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 345
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260
-0 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 180
-1 0 1 0 1 1 0 0 1 1 1 0 0 1 1 1 0 200
-0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 390
-0 1 0 1 1 1 1 0 1 1 1 0 0 1 0 1 0 180
-0 0 0 1 0 1 0 1 0 0 1 0 0 1 1 1 0 90
-0 0 0 1 1 1 0 1 1 0 1 0 0 1 1 1 0 270
-0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 1 0 200
-0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 0 340
-0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 370
-0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 0 260
-1 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 0 240
-0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 240
-0 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 0 210
-0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 0 300
-0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 360
-0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 0 340
-0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 1 0 200
-1 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 200
-0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 300
-0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 270
-0 0 0 1 1 1 0 0 1 0 1 0 0 0 0 1 0 280
-0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 200
-0 1 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 170
-0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0 160
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 190
-0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 190
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 140
-1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 140
-0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 150
-0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 170
-1 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 360
-0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 320
-0 0 0 0 0 1 1 0 1 0 1 1 0 0 0 0 0 325
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 320
-0 1 0 1 0 1 0 1 0 0 1 0 0 1 1 0 0 320
-0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 340
-0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 280
-0 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 260
-1 0 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 200
-0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 200
-0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 140
-0 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 0 240
-0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 1 0 170
-0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 0 190
-0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 200
-0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 150
-0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 340
-0 1 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 220
-0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 180
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 240
-0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 160
-0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 0 230
-0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 240
-0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 1 0 220
-0 0 0 1 0 1 0 1 1 1 1 0 0 0 0 1 0 210
-1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 1 1 220
-0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 210
-0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 210
-0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 170
-1 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 0 280
-0 1 1 0 1 0 0 0 1 1 1 0 0 0 0 1 1 200
-0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 300
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 310
-0 1 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 120
-0 1 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 290
-0 0 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 120
-1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 120
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 100
-0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 140
-0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 100
-1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 140
-0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 1 0 200
-1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 200
-0 1 0 1 1 1 1 0 0 0 1 0 0 1 0 1 0 80
-0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 120
-0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 200
-0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 120
-1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 200
-0 1 0 1 1 0 1 0 1 0 1 0 0 0 0 1 0 100
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 220
-0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 200
-0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 220
-0 1 0 1 1 0 0 0 0 1 1 0 0 0 1 1 0 210
-0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 35
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 50
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140
-0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 1 0 150
-0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 210
-0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1 0 160
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 180
-0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 240
-0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1 0 220
-1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 270
-0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 240
-0 0 0 1 1 1 1 1 0 1 1 1 0 0 0 0 0 240
-0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 0 250
-0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 280
-0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 300
-0 1 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 220
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 90
-0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 100
-1 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 140
-0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 100
-0 1 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 140
-0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 110
-0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 140
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 10
-0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 60
-1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 30
-0 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 140
-0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 5
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 50
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 25
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50
-0 1 1 1 1 0 0 0 0 0 1 1 0 1 1 1 1 100
-0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 100
-0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 1 1 70
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 200
-0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 180
-0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 120
-0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 120
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 100
-0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 1 120
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 130
-0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 30
-1 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 70
-0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 0 5
-0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 25
-0 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 0 20
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 10
-0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 45
-0 0 1 0 0 0 0 0 0 1 1 1 0 1 1 1 1 180
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 200
-1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 200
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 60
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 140
-0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 170
-0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 200
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 150
-0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 180
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40
-0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 1 1 40
-0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 30
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 90
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 200
-0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 140
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 200
-0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 60
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 20
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 100
-0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 0 200
-0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 180
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 50
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45
-0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 100
-0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 80
-0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0 70
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 60
-1 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 1 130
-0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 100
-0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 85
-0 1 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1 30
-1 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 40
-0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 1 80
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 100
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 110
-1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 200
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 270
-1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 0 240
-1 0 0 1 1 1 1 0 1 1 1 1 0 0 1 1 0 210
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 200
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 140
-1 0 0 1 1 1 0 0 1 0 1 1 0 1 0 1 1 220
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 240
-0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 240
-1 0 0 1 1 1 0 0 1 1 1 1 0 0 1 1 1 200
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 220
-0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 1 1 160
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50
-0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 1 1 80
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 90
-1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 90
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 90
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 60
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 40
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 25
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 130
-0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 180
-0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 25
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 50
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 120
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 130
-0 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 1 100
-1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 1 120
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 100
-0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 1 60
-1 0 1 1 1 0 0 1 0 1 1 0 0 0 1 1 0 60
-0 1 1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 70
-0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 10
-0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 50
-0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 100
-0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 150
-1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1 0 150
-0 1 0 1 1 0 0 0 1 1 1 0 0 0 1 1 1 120
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 100
-0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 110
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 140
-0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 120
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 70
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 60
-0 1 1 0 0 0 1 0 1 0 1 1 0 0 0 1 1 70
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 5
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50
-0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 70
-0 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 1 90
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 80
-1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 10
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 140
-1 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 90
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 70
-1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 1 1 90
-1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 130
-0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 120
-0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 100
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 40
-1 0 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 160
-0 1 1 1 1 0 0 0 1 0 1 0 0 0 0 1 0 120
-1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 140
-0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 180
-0 0 0 1 1 1 1 0 1 0 1 0 0 0 1 1 0 130
-1 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 100
-1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 120
-1 0 0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 80
-0 0 1 1 1 0 1 0 1 0 1 0 0 0 0 1 1 140
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 150
-1 0 0 1 0 0 0 0 0 0 1 0 1 0 1 1 0 130
-1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 60
-1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 60
-0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 80
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 20
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60
-0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 280
-0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 80
-0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 60
-0 0 0 1 1 0 1 0 1 1 0 1 0 0 0 1 1 45
-1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 40
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 60
-1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 40
-0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 40
-0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1 1 60
-0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 20
-1 1 0 1 1 0 1 0 0 0 1 1 0 0 0 1 1 40
-1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0 40
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 50
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 15
-0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1 1 20
-1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 50
-0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 60
-0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 30
-0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 50
-0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 50
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20
-1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 80
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 15
-0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50
-0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 70
-0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 40
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15
-0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 30
-1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 1 10
-0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 10
diff --git a/data/waitakere.txt.gz b/data/waitakere.txt.gz
new file mode 100644
index 0000000..775e45a
Binary files /dev/null and b/data/waitakere.txt.gz differ
diff --git a/data/wffc.R b/data/wffc.R
deleted file mode 100644
index 36d92c2..0000000
--- a/data/wffc.R
+++ /dev/null
@@ -1,2924 +0,0 @@
-"wffc" <-
-structure(list(length = c(180, 182, 185, 189, 193, 195, 195,
-197, 198, 209, 210, 215, 215, 218, 218, 219, 228, 228, 241, 303,
-182, 182, 195, 206, 212, 214, 217, 224, 224, 229, 231, 234, 252,
-255, 292, 294, 294, 335, 355, 393, 200, 205, 210, 238, 182, 182,
-186, 201, 205, 208, 209, 216, 218, 221, 222, 223, 224, 225, 226,
-228, 228, 229, 230, 233, 257, 260, 271, 274, 274, 316, 316, 320,
-324, 325, 337, 350, 181, 188, 190, 194, 198, 200, 212, 212, 229,
-231, 238, 240, 252, 180, 203, 205, 240, 260, 180, 180, 181, 181,
-182, 190, 191, 191, 192, 194, 195, 196, 197, 200, 203, 212, 213,
-215, 225, 248, 250, 251, 305, 181, 183, 183, 185, 193, 195, 195,
-205, 206, 210, 210, 221, 226, 231, 248, 251, 251, 257, 267, 277,
-280, 283, 285, 300, 320, 333, 340, 376, 223, 225, 230, 237, 249,
-253, 264, 275, 310, 181, 181, 182, 184, 184, 185, 185, 186, 186,
-188, 195, 195, 212, 214, 215, 235, 281, 312, 190, 201, 204, 210,
-210, 222, 245, 251, 283, 180, 180, 180, 180, 180, 185, 190, 195,
-195, 195, 200, 205, 210, 210, 215, 215, 220, 220, 220, 230, 230,
-255, 280, 280, 180, 180, 181, 182, 183, 185, 189, 195, 199, 203,
-205, 210, 211, 214, 215, 215, 220, 221, 223, 226, 229, 238, 220,
-306, 309, 348, 180, 180, 210, 210, 220, 304, 353, 180, 183, 183,
-185, 185, 187, 187, 201, 202, 230, 296, 194, 208, 213, 213, 219,
-221, 222, 225, 228, 230, 232, 258, 273, 292, 305, 306, 180, 185,
-187, 187, 189, 191, 192, 201, 203, 206, 219, 232, 252, 258, 271,
-316, 180, 188, 190, 192, 195, 210, 223, 226, 226, 231, 247, 284,
-319, 194, 197, 215, 217, 223, 264, 275, 333, 334, 182, 186, 197,
-205, 207, 207, 210, 261, 271, 180, 183, 192, 194, 205, 206, 215,
-218, 225, 225, 230, 247, 338, 180, 180, 180, 180, 185, 190, 190,
-190, 195, 205, 210, 215, 215, 220, 220, 220, 220, 220, 225, 254,
-260, 280, 290, 295, 295, 300, 300, 330, 187, 190, 192, 194, 218,
-225, 269, 270, 271, 314, 183, 183, 185, 190, 190, 195, 204, 205,
-205, 205, 205, 213, 215, 215, 220, 235, 237, 301, 325, 185, 204,
-207, 212, 221, 181, 190, 191, 192, 192, 204, 215, 220, 227, 240,
-240, 245, 246, 285, 302, 302, 310, 330, 390, 190, 268, 181, 181,
-182, 183, 185, 201, 219, 221, 222, 236, 244, 295, 315, 329, 420,
-180, 181, 182, 185, 200, 200, 210, 215, 217, 220, 220, 225, 235,
-245, 260, 270, 375, 375, 380, 445, 180, 181, 185, 190, 195, 201,
-208, 208, 212, 215, 215, 220, 229, 231, 255, 300, 325, 189, 191,
-211, 222, 226, 313, 322, 181, 182, 183, 185, 185, 185, 190, 193,
-196, 198, 200, 200, 200, 205, 205, 210, 210, 211, 215, 220, 229,
-182, 182, 190, 190, 190, 192, 217, 218, 220, 224, 242, 264, 270,
-290, 440, 181, 185, 196, 214, 210, 222, 240, 255, 300, 310, 415,
-180, 184, 194, 195, 204, 215, 231, 263, 378, 185, 190, 205, 213,
-215, 248, 255, 195, 195, 226, 250, 183, 188, 190, 196, 214, 280,
-340, 352, 180, 183, 190, 194, 202, 205, 212, 213, 218, 220, 197,
-198, 180, 180, 180, 190, 200, 210, 210, 250, 260, 182, 182, 186,
-186, 186, 190, 192, 195, 196, 202, 205, 207, 211, 214, 215, 218,
-220, 223, 234, 235, 235, 235, 236, 237, 241, 241, 243, 246, 247,
-248, 251, 252, 253, 262, 277, 180, 185, 185, 185, 190, 190, 200,
-205, 214, 215, 215, 235, 240, 260, 264, 266, 270, 287, 186, 186,
-186, 186, 188, 188, 189, 189, 192, 193, 193, 194, 198, 200, 200,
-207, 210, 213, 222, 224, 241, 246, 256, 260, 265, 266, 272, 276,
-382, 195, 222, 252, 280, 181, 182, 183, 185, 185, 188, 190, 193,
-194, 201, 204, 210, 229, 232, 234, 238, 254, 299, 301, 181, 191,
-194, 196, 212, 229, 242, 245, 250, 255, 261, 261, 266, 293, 297,
-303, 180, 181, 181, 182, 184, 185, 191, 191, 193, 201, 205, 207,
-210, 213, 215, 221, 221, 225, 236, 261, 276, 290, 356, 180, 182,
-190, 191, 192, 203, 207, 213, 214, 215, 220, 223, 233, 240, 241,
-247, 255, 260, 263, 264, 265, 285, 333, 181, 181, 208, 221, 238,
-264, 268, 275, 275, 301, 353, 180, 185, 185, 195, 195, 195, 195,
-199, 200, 200, 200, 201, 205, 210, 210, 223, 223, 235, 240, 252,
-262, 265, 285, 290, 295, 330, 410, 181, 181, 183, 184, 185, 185,
-185, 207, 221, 223, 231, 234, 234, 266, 273, 277, 282, 392, 180,
-187, 190, 195, 195, 195, 197, 200, 213, 215, 220, 222, 249, 257,
-258, 268, 270, 282, 310, 181, 181, 182, 184, 185, 193, 194, 195,
-198, 200, 204, 206, 208, 211, 219, 231, 234, 239, 239, 240, 246,
-257, 258, 260, 265, 270, 280, 302, 327, 345, 455, 195, 239, 251,
-262, 298, 307, 181, 192, 198, 198, 200, 201, 201, 203, 205, 207,
-222, 225, 228, 228, 239, 242, 254, 255, 256, 256, 282, 283, 290,
-185, 195, 202, 202, 245, 255, 265, 290, 295, 335, 393, 182, 200,
-220, 227, 245, 250, 295, 185, 195, 200, 201, 201, 210, 229, 259,
-267, 270, 273, 275, 283, 180, 180, 202, 217, 225, 251, 277, 201,
-217, 257, 258, 276, 279, 321, 324, 329, 352, 180, 181, 183, 196,
-198, 212, 228, 235, 235, 186, 190, 252, 180, 180, 181, 186, 188,
-188, 188, 190, 190, 192, 195, 196, 200, 205, 207, 216, 218, 218,
-225, 227, 230, 244, 246, 251, 255, 262, 291, 315, 180, 185, 185,
-190, 195, 195, 195, 195, 195, 200, 200, 220, 231, 240, 244, 247,
-257, 264, 337, 181, 181, 183, 184, 190, 194, 195, 195, 207, 212,
-215, 231, 233, 237, 238, 245, 251, 251, 252, 262, 272, 280, 285,
-292, 294, 295, 191, 201, 221, 233, 235, 242, 246, 248, 282, 284,
-424, 494, 185, 195, 227, 235, 248, 257, 320, 185, 200, 203, 215,
-235, 248, 250, 180, 180, 185, 185, 192, 194, 201, 210, 213, 221,
-292, 180, 180, 182, 189, 180, 182, 186, 194, 195, 195, 198, 200,
-201, 205, 217, 225, 181, 191, 206, 210, 249, 324, 190, 192, 348,
-180, 180, 182, 192, 195, 195, 195, 202, 212, 220, 240, 246, 247,
-250, 265, 265, 265, 270, 270, 272, 273, 313, 180, 189, 191, 192,
-196, 208, 211, 227, 228, 229, 230, 230, 233, 241, 245, 252, 254,
-256, 258, 262, 267, 276, 295, 362, 229, 246, 196, 212, 225, 228,
-230, 235, 251, 260, 261, 270, 289, 310, 345, 180, 184, 185, 188,
-195, 200, 210, 211, 235, 242, 245, 245, 246, 250, 264, 268, 180,
-182, 183, 202, 215, 190, 200, 210, 330, 325, 356, 185, 245, 256,
-262, 291, 342, 181, 182, 188, 191, 191, 193, 235, 248, 250, 251,
-265, 275, 328, 180, 187, 187, 195, 195, 200, 205, 235, 250, 275,
-286, 379, 192, 185, 188, 195, 221, 226, 236, 181, 183, 186, 187,
-192, 194, 197, 203, 204, 205, 207, 209, 210, 257, 274, 300, 181,
-182, 185, 202, 211, 195, 180, 180, 184, 187, 187, 189, 192, 193,
-194, 196, 196, 197, 197, 198, 200, 204, 205, 207, 207, 208, 213,
-220, 223, 225, 228, 230, 233, 234, 236, 237, 238, 242, 258, 265,
-291, 292, 293, 180, 200, 205, 205, 210, 210, 210, 214, 220, 220,
-225, 250, 270, 290, 300, 180, 181, 181, 185, 189, 190, 191, 192,
-201, 210, 212, 218, 224, 226, 231, 262, 185, 185, 190, 196, 200,
-205, 205, 210, 218, 226, 226, 230, 230, 230, 230, 240, 240, 240,
-243, 245, 248, 250, 250, 250, 250, 255, 255, 260, 265, 270, 300,
-300, 320, 320, 180, 180, 183, 185, 196, 198, 198, 201, 201, 203,
-205, 206, 208, 208, 210, 214, 215, 215, 216, 221, 222, 234, 238,
-238, 253, 253, 259, 261, 276, 180, 180, 180, 180, 181, 185, 185,
-190, 198, 200, 210, 210, 212, 215, 218, 220, 220, 222, 228, 230,
-230, 232, 239, 239, 240, 290, 290, 295, 185, 190, 195, 195, 212,
-216, 218, 218, 222, 233, 235, 240, 242, 245, 246, 250, 251, 255,
-255, 257, 280, 295, 328, 359, 180, 195, 210, 220, 220, 223, 230,
-230, 240, 242, 249, 258, 263, 267, 287, 337, 181, 190, 195, 195,
-198, 210, 212, 214, 220, 222, 223, 224, 244, 250, 275, 283, 284,
-319, 438, 180, 180, 182, 185, 189, 192, 192, 194, 198, 202, 208,
-210, 215, 215, 225, 228, 232, 238, 243, 256, 262, 273, 180, 180,
-180, 180, 180, 185, 185, 185, 186, 190, 190, 192, 193, 194, 195,
-198, 201, 208, 210, 210, 215, 216, 216, 235, 235, 240, 245, 245,
-290, 180, 181, 182, 183, 196, 200, 208, 210, 210, 237, 243, 264,
-180, 180, 187, 188, 202, 207, 210, 222, 225, 244, 185, 192, 193,
-201, 205, 225, 245, 255, 255, 258, 180, 180, 180, 180, 180, 182,
-183, 183, 186, 189, 197, 200, 200, 205, 210, 216, 219, 220, 222,
-225, 226, 226, 236, 257, 258, 258, 280, 290, 190, 246, 185, 197,
-198, 208, 228, 243, 243, 297, 298, 300, 315, 340, 345, 345, 183,
-189, 305, 396, 180, 180, 182, 182, 185, 186, 188, 188, 192, 192,
-193, 197, 201, 213, 221, 222, 224, 224, 225, 226, 231, 232, 237,
-247, 262, 265, 315, 180, 180, 180, 180, 180, 181, 190, 190, 192,
-192, 195, 200, 200, 210, 210, 210, 210, 212, 215, 220, 220, 230,
-230, 231, 240, 320, 180, 183, 183, 188, 193, 200, 200, 204, 204,
-206, 208, 209, 211, 213, 215, 218, 223, 224, 225, 227, 260, 180,
-180, 180, 182, 187, 190, 192, 195, 197, 200, 205, 206, 209, 211,
-211, 214, 225, 230, 230, 232, 233, 233, 233, 237, 247, 247, 252,
-290, 180, 196, 211, 221, 222, 226, 365, 190, 192, 195, 200, 200,
-204, 210, 212, 219, 220, 222, 225, 227, 227, 227, 228, 229, 232,
-235, 239, 240, 244, 245, 252, 254, 257, 258, 270, 281, 281, 290,
-190, 212, 240, 243, 252, 282, 358, 185, 194, 200, 210, 221, 223,
-228, 230, 232, 250, 255, 257, 258, 262, 299, 314, 180, 193, 198,
-198, 199, 205, 208, 224, 232, 232, 234, 237, 241, 245, 282, 292,
-295, 356, 370, 180, 186, 191, 196, 196, 213, 216, 225, 240, 183,
-188, 192, 213, 223, 252, 185, 190, 195, 198, 200, 203, 205, 212,
-225, 264, 182, 183, 189, 192, 195, 197, 219, 224, 226, 242, 244,
-244, 249, 270, 272, 274, 285, 308, 208, 222, 235, 281, 180, 180,
-180, 180, 181, 183, 202, 210, 220, 224, 229, 229, 239, 248, 265,
-286, 292, 245, 265, 180, 180, 193, 204, 207, 230, 260, 262, 274,
-401, 180, 190, 201, 210, 218, 220, 221, 225, 225, 233, 243, 244,
-253, 254, 345, 194, 195, 196, 214, 215, 226, 241, 248, 256, 304,
-218, 195, 180, 180, 180, 183, 184, 185, 185, 188, 193, 199, 218,
-221, 246, 260, 262, 290, 290, 305, 331, 332, 345, 180, 185, 191,
-196, 200, 222, 224, 242, 242, 261, 515, 180, 181, 232, 232, 251,
-252, 265, 185, 194, 202, 210, 235, 241, 243, 244, 250, 283, 285,
-287, 395, 191, 213, 214, 214, 214, 258, 262, 287, 301, 425, 214,
-218, 190, 195, 198, 210, 214, 216, 223, 224, 230, 236, 240, 284,
-298, 300, 180, 188, 192, 195, 198, 202, 204, 218, 218, 227, 230,
-235, 245, 254, 256, 263, 266, 275, 285, 301, 302, 392, 180, 180,
-180, 190, 199, 204, 205, 210, 212, 214, 214, 217, 218, 220, 224,
-225, 230, 230, 230, 239, 240, 241, 248, 250, 252, 265, 275, 279,
-290, 293, 310, 315, 180, 208, 210, 245, 180, 195, 199, 210, 210,
-215, 217, 220, 250, 265, 275, 275, 180, 185, 210, 215, 261, 207,
-210, 226, 227, 236, 237, 245, 246, 263, 269, 294, 308, 329, 182,
-184, 189, 190, 192, 194, 195, 215, 216, 220, 220, 225, 231, 232,
-238, 246, 248, 259, 277, 279, 307, 323, 180, 183, 191, 196, 197,
-198, 202, 202, 204, 206, 211, 226, 243, 256, 258, 260, 265, 265,
-281, 282, 294, 295, 180, 270, 274, 280, 330, 330, 350, 180, 180,
-180, 180, 181, 190, 190, 195, 200, 202, 203, 203, 206, 207, 208,
-216, 218, 219, 220, 220, 230, 234, 235, 236, 258, 262, 263, 272,
-274, 280, 280, 281, 294, 308, 323, 329, 333, 180, 182, 184, 190,
-215, 215, 215, 227, 231, 235, 240, 242, 250, 260, 280, 288, 345,
-180, 180, 182, 184, 195, 195, 198, 207, 212, 220, 220, 230, 246,
-247, 248, 248, 250, 255, 255, 262, 273, 281, 284, 290, 290, 300,
-327, 345, 181, 205, 206, 210, 219, 230, 260, 265, 290, 300, 300,
-180, 205, 207, 227, 227, 240, 250, 279, 310, 180, 197, 198, 235,
-240, 260, 285, 182, 182, 187, 192, 195, 200, 215, 216, 220, 228,
-248, 254, 263, 270, 300, 301, 303, 303, 320, 394, 181, 182, 190,
-194, 195, 220, 238, 240, 265, 280, 332, 180, 185, 185, 190, 194,
-201, 215, 218, 231, 286, 180, 185, 190, 190, 195, 200, 220, 230,
-240, 265, 280, 300, 302, 340, 181, 181, 187, 188, 197, 197, 198,
-203, 205, 212, 222, 222, 230, 236, 237, 238, 263, 266, 183, 249,
-252, 264, 302, 180, 180, 181, 182, 183, 192, 192, 199, 201, 202,
-202, 203, 211, 212, 213, 214, 215, 221, 222, 224, 227, 230, 234,
-259, 264, 277, 280, 281, 294, 315, 195, 230, 230, 240, 255, 265,
-298, 180, 180, 187, 189, 189, 206, 228, 242, 245, 255, 281, 282,
-285, 297, 304, 180, 180, 185, 190, 200, 240, 320, 186, 200, 210,
-260, 302, 180, 195, 247, 251, 254, 263, 278, 296, 310, 318, 426,
-180, 180, 182, 193, 201, 204, 247, 301, 317, 182, 270, 273, 285,
-182, 200, 208, 212, 213, 216, 229, 231, 243, 260, 345, 183, 207,
-215, 337, 180, 212, 180, 220, 265, 290, 199, 185, 263, 180, 180,
-182, 183, 185, 185, 190, 190, 211, 214, 232, 232, 234, 247, 249,
-251, 263, 309, 186, 196, 201, 241, 256, 290, 294, 331, 185, 180,
-182, 203, 203, 208, 211, 223, 223, 226, 233, 234, 244, 254, 190,
-190, 210, 210, 226, 232, 430, 182, 185, 274, 180, 180, 195, 220,
-230, 250, 265, 300, 300, 320, 325, 350, 245, 254, 300, 303, 342,
-560, 182, 185, 192, 195, 199, 205, 217, 223, 224, 227, 230, 240,
-245, 246, 258, 265, 273, 285, 295, 305, 312, 330, 336, 343, 193,
-198, 200, 225, 228, 238, 244, 284, 290, 297, 302, 182, 186, 189,
-194, 233, 250, 251, 294, 307, 335, 180, 182, 202, 217, 470, 180,
-187, 198, 239, 240, 274, 331, 335, 340, 359, 360, 365, 365, 367,
-182, 216, 332, 215, 268, 365, 435, 181, 189, 208, 212, 334, 191,
-201, 209, 211, 250, 394, 425, 457, 488, 498, 188, 189, 190, 200,
-215, 220, 228, 314, 325, 335, 355, 378, 420, 488, 185, 185, 195,
-204, 208, 210, 220, 220, 225, 225, 230, 245, 342, 355, 390, 432,
-478, 481, 510, 181, 184, 195, 225, 225, 226, 235, 242, 244, 338,
-342, 388, 540, 193, 206, 214, 215, 296, 310, 460, 181, 216, 331,
-333, 445, 500, 580, 185, 186, 212, 222, 232, 246, 272, 340, 343,
-348, 372, 385, 395, 402, 435, 445, 477, 518, 181, 182, 185, 185,
-192, 195, 196, 198, 202, 213, 220, 225, 227, 230, 232, 232, 291,
-294, 314, 325, 330, 338, 340, 360, 490, 181, 181, 181, 182, 184,
-194, 197, 207, 215, 220, 226, 230, 230, 309, 314, 338, 395, 477,
-180, 182, 182, 182, 185, 185, 190, 193, 196, 197, 198, 199, 206,
-207, 221, 222, 222, 223, 225, 225, 226, 232, 246, 252, 312, 181,
-181, 185, 185, 187, 201, 205, 210, 215, 216, 225, 181, 182, 182,
-193, 193, 198, 201, 201, 205, 206, 208, 212, 218, 230, 275, 325,
-335, 336, 339, 368, 432, 436, 503, 535, 195, 196, 198, 208, 210,
-210, 212, 217, 365, 364, 376, 463, 586, 600, 613, 195, 225, 460,
-460, 480, 555, 560, 180, 181, 184, 191, 195, 196, 197, 208, 447,
-451, 489, 181, 181, 181, 182, 182, 193, 194, 202, 202, 203, 205,
-210, 220, 228, 228, 243, 245, 248, 450, 181, 181, 186, 186, 188,
-196, 196, 197, 198, 200, 202, 205, 211, 211, 212, 215, 221, 225,
-226, 227, 230, 235, 243, 281, 336, 498, 195, 200, 214, 203, 207,
-218, 223, 236, 190, 198, 200, 200, 205, 208, 210, 210, 215, 216,
-225, 225, 227, 230, 237, 240, 248, 310, 315, 315, 370, 370, 390,
-405, 420, 420, 478, 499, 212, 254, 222, 300, 522, 185, 192, 193,
-215, 230, 332, 393, 560, 582, 582, 181, 181, 182, 189, 193, 195,
-196, 214, 215, 362, 181, 187, 201, 210, 211, 230, 231, 239, 240,
-246, 258, 339, 370, 388, 419, 471, 556, 570, 183, 190, 190, 190,
-196, 210, 210, 210, 211, 268, 328, 331, 495, 181, 181, 185, 198,
-198, 205, 210, 215, 215, 225, 227, 228, 230, 230, 235, 245, 310,
-513, 186, 193, 194, 196, 196, 203, 205, 210, 210, 212, 214, 215,
-221, 224, 227, 228, 248, 254, 310, 335, 347, 380, 396, 520, 202,
-210, 212, 217, 228, 240, 247, 259, 285, 293, 312, 315, 325, 352,
-363, 371, 382, 427, 453, 510, 192, 217, 219, 243, 369, 374, 360,
-382, 202, 250, 335, 360, 370, 401, 402, 450, 580, 180, 180, 181,
-182, 182, 182, 182, 183, 184, 184, 187, 188, 188, 190, 192, 196,
-196, 198, 200, 200, 202, 203, 205, 210, 215, 220, 220, 230, 245,
-360, 480, 185, 195, 240, 240, 245, 335, 423, 432, 443, 482, 494,
-506, 510, 190, 198, 200, 215, 228, 230, 232, 390, 181, 182, 185,
-185, 186, 187, 188, 190, 190, 190, 191, 192, 195, 196, 205, 217,
-218, 222, 222, 225, 227, 228, 229, 235, 239, 250, 395, 409, 410,
-190, 193, 217, 225, 378, 410, 181, 185, 185, 189, 192, 194, 195,
-201, 210, 210, 212, 219, 220, 222, 230, 340, 180, 186, 193, 199,
-225, 260, 181, 182, 183, 183, 186, 188, 189, 196, 197, 198, 207,
-214, 216, 260, 350, 370, 370, 404, 437, 503, 195, 195, 195, 195,
-200, 200, 210, 210, 215, 230, 230, 235, 245, 323, 325, 330, 335,
-345, 395, 495, 500, 560, 182, 200, 220, 223, 186, 187, 193, 193,
-203, 206, 208, 210, 214, 216, 226, 255, 195, 181, 185, 186, 186,
-188, 192, 193, 193, 194, 197, 202, 212, 214, 214, 216, 218, 219,
-220, 222, 223, 225, 227, 229, 309, 313, 334, 343, 419, 181, 181,
-193, 194, 198, 190, 200, 200, 220, 240, 250, 320, 330, 380, 470,
-500, 181, 189, 190, 199, 200, 202, 215, 216, 219, 239, 325, 332,
-333, 356, 369, 376, 379, 440, 452, 525, 200, 202, 204, 204, 205,
-219, 220, 304, 316, 320, 324, 333, 340, 340, 342, 342, 344, 365,
-453, 466, 506, 181, 182, 185, 196, 197, 198, 199, 212, 242, 327,
-335, 342, 402, 403, 431, 185, 195, 195, 195, 195, 200, 200, 205,
-215, 220, 225, 225, 235, 290, 308, 330, 355, 400, 420, 430, 450,
-180, 182, 191, 191, 193, 194, 195, 195, 195, 210, 212, 213, 225,
-227, 230, 298, 311, 314, 332, 335, 350, 375, 396, 413, 417, 460,
-475, 510, 180, 185, 186, 186, 190, 195, 203, 207, 210, 210, 218,
-219, 225, 226, 326, 344, 345, 410, 420, 465, 190, 210, 220, 272,
-272, 272, 272, 272, 350, 430, 435, 465, 486, 195, 345, 402, 414,
-445, 182, 208, 213, 214, 221, 226, 415, 180, 182, 182, 183, 185,
-190, 195, 205, 215, 220, 225, 225, 235, 250, 290, 310, 331, 335,
-375, 485, 189, 200, 210, 216, 222, 226, 321, 490, 180, 183, 186,
-200, 202, 206, 214, 222, 255, 316, 385, 474, 181, 181, 183, 183,
-184, 185, 186, 187, 188, 189, 191, 192, 195, 199, 209, 210, 210,
-210, 213, 215, 419, 185, 185, 190, 195, 198, 200, 204, 205, 205,
-208, 208, 215, 222, 314, 445, 180, 181, 185, 185, 186, 186, 190,
-194, 194, 196, 201, 207, 218, 220, 222, 233, 235, 305, 325, 325,
-360, 390, 180, 187, 191, 208, 214, 218, 223, 227, 243, 268, 302,
-337, 365, 377, 380, 386, 415, 420, 420, 422, 475, 480, 518, 540,
-185, 190, 200, 207, 208, 212, 215, 222, 225, 230, 235, 344, 360,
-370, 380, 390, 392, 485, 188, 189, 195, 196, 215, 217, 223, 227,
-352, 424, 180, 181, 182, 185, 186, 186, 191, 192, 193, 194, 195,
-200, 200, 200, 208, 210, 210, 218, 220, 222, 233, 245, 181, 202,
-325, 380, 181, 181, 186, 189, 189, 189, 191, 194, 195, 195, 197,
-197, 199, 204, 206, 206, 208, 209, 209, 210, 210, 214, 215, 216,
-235, 347, 389, 420, 437, 491, 181, 182, 183, 184, 185, 186, 186,
-191, 192, 193, 194, 198, 200, 202, 203, 205, 208, 212, 228, 235,
-294, 180, 215, 293, 190, 214, 245, 305, 309, 343, 358, 363, 433,
-437, 181, 181, 183, 185, 185, 190, 195, 197, 202, 203, 215, 215,
-232, 315, 185, 465, 475, 190, 190, 190, 195, 205, 210, 210, 210,
-215, 225, 245, 245, 250, 350, 390, 501, 182, 183, 188, 188, 189,
-192, 193, 195, 200, 202, 202, 205, 207, 207, 217, 217, 221, 222,
-223, 235, 318, 332, 335, 340, 370, 413, 446, 450, 475, 515, 185,
-192, 193, 195, 195, 195, 195, 205, 205, 210, 210, 210, 210, 212,
-213, 214, 218, 218, 228, 259, 458, 180, 195, 205, 205, 230, 305,
-320, 325, 330, 390, 425, 490, 186, 189, 194, 202, 205, 224, 228,
-180, 181, 181, 182, 185, 185, 195, 197, 203, 221, 223, 305, 181,
-181, 185, 186, 188, 192, 192, 193, 195, 202, 205, 208, 212, 223,
-244, 324, 335, 335, 356, 375, 381, 388, 413, 424, 180, 181, 184,
-188, 190, 210, 215, 226, 323, 180, 183, 200, 204, 209, 215, 311,
-326, 391, 428, 180, 180, 180, 183, 185, 185, 189, 192, 193, 195,
-197, 200, 201, 202, 202, 203, 205, 208, 210, 214, 218, 220, 221,
-225, 229, 251, 350, 440, 198, 215, 227, 246, 307, 334, 427, 430,
-432, 445, 465, 492, 181, 181, 182, 184, 185, 186, 190, 190, 192,
-193, 198, 199, 200, 201, 209, 218, 221, 224, 224, 227, 232, 236,
-321, 338, 339, 345, 351, 353, 430, 180, 181, 184, 185, 190, 194,
-195, 211, 213, 222, 230, 230, 372, 460, 475, 180, 181, 185, 200,
-205, 215, 370, 234, 532, 624, 528, 312, 202, 195, 253, 615, 235,
-210, 572, 215, 194, 203, 203, 200, 198, 495, 520, 205, 220, 220,
-486, 190, 225, 219, 391, 376, 425, 220, 580, 510, 225, 210, 193,
-395, 580, 420, 560, 425, 440, 284, 429, 530, 688, 197, 224, 225,
-510, 487, 379, 568, 462, 572, 206, 186, 216, 208, 200, 396, 194,
-503, 237, 231, 201, 183, 388, 438, 417, 413, 450, 592, 185, 228,
-478, 205, 205, 437, 480, 184, 225, 203, 485, 574, 496, 424, 544,
-335, 405, 514, 207, 408, 230, 186, 216, 202, 467, 193, 187, 435,
-508, 187, 590, 198, 222, 571, 285, 568, 228, 285, 435, 499, 399,
-508, 390, 209, 225, 450, 541, 362, 415, 238, 610, 214, 500, 388,
-215, 356, 432, 518, 412, 689, 212, 205, 202, 485, 610, 195, 220,
-627, 549, 525, 273, 190, 197, 242, 193, 215, 484, 436, 442, 431,
-211, 267, 365, 250, 186, 211, 430, 365, 186, 208, 189, 208, 389,
-211, 241, 196, 504, 421, 242, 320, 402, 501, 211, 195, 652, 550,
-198, 202, 215, 198, 568, 210, 585, 225, 570, 230, 575, 200, 191,
-615, 223, 418, 210, 521, 380, 560, 224, 620, 232, 236, 180, 230,
-220, 238, 194, 183, 222, 181, 182, 552, 191, 208, 430, 225, 226,
-206, 212, 197, 212, 205, 195, 400, 375, 235, 186, 535, 391, 385,
-375, 213, 212, 410, 211, 404, 227, 213, 194, 221, 400, 575, 180,
-200, 205, 585, 391, 486, 250, 222, 213, 365, 206, 221, 206, 207,
-180, 458, 216, 457, 211, 226, 211, 197, 443, 188, 215, 211, 185,
-203, 590, 229, 439, 423, 291, 565, 470, 312, 455, 441, 441, 254,
-406, 340, 498, 498, 475, 574, 435, 205, 425, 425, 486, 443, 482,
-505, 495, 470, 545, 385, 444, 477, 265, 391, 457, 429, 430, 450,
-480, 450, 441, 270, 545, 505, 450, 481, 524, 480, 293, 439, 252,
-471, 467, 476, 511, 473, 535, 462, 604, 426, 443, 421, 470, 515,
-501, 476, 487, 493, 580, 490, 410, 383, 510, 470, 510, 455, 234,
-492, 490, 572, 400, 490, 435, 490, 466, 195, 184, 431, 235, 415,
-444, 405, 430, 500, 465, 548, 461, 475, 427, 400, 510, 328, 231,
-461, 430, 505, 263, 411, 450, 490, 455, 242, 395, 530, 444, 550,
-440, 565, 490, 565, 490, 525, 475, 517, 510, 480, 470, 510, 470,
-474, 399, 292, 533, 406, 455, 512, 287, 530, 411, 450, 395, 477,
-493, 396, 414, 518, 520, 590, 594, 439, 407, 417, 361, 528, 498,
-390, 470, 432, 505, 475, 445, 510, 410, 375, 435, 190, 480, 475,
-204, 414, 442, 441, 276, 347, 450, 340, 260, 431, 467, 457, 414,
-412, 535, 563, 454, 393, 447, 189, 461, 428, 425, 439, 314, 420,
-290, 455, 400, 405, 372, 430, 538, 530, 274), water = structure(c(1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5), .Label = c("Waihou", "Waimakariri", "Whanganui", "Otamangakau",
-"Rotoaira"), class = "factor"), session = c(1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6), sector = c(4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3), beatboat = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 2, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 9, 9, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
-6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
-16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18,
-18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
-12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-18, 18, 18, 18, 18, 19, 19, 19, 19, 10, 10, 11, 11, 11, 11, 11,
-11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 16, 16, 16, 16,
-16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 18, 18, 18, 18, 18, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
-9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
-5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19,
-19, 19, 19, 19, 19, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
-15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 19, 19, 19, 19, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,
-13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 19, 19, 19, 19, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 15, 15,
-16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12,
-12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
-14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 1, 1, 1,
-1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 1, 2, 2, 2, 2,
-2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1,
-1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5,
-5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7,
-7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
-14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18,
-19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18,
-18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19,
-19, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15,
-15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-19, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 1, 1, 3, 3, 5, 5, 6,
-6, 7, 8, 8, 8, 8, 9, 10, 11, 11, 12, 12, 12, 12, 12, 13, 13,
-13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16,
-17, 17, 19, 19, 19, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 7, 9, 9, 10,
-10, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15,
-15, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 1,
-2, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 9,
-9, 9, 11, 11, 11, 11, 11, 12, 13, 13, 15, 15, 16, 16, 16, 16,
-16, 17, 18, 18, 18, 18, 18, 18, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3,
-4, 4, 4, 4, 5, 5, 5, 5, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11,
-11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 17,
-17, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 7, 7, 7, 7, 8, 9, 10, 10,
-11, 11, 11, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
-14, 15, 15, 15, 16, 16, 17, 17, 17, 17, 18, 19, 19, 19, 19, 1,
-1, 2, 3, 3, 5, 5, 8, 8, 8, 9, 10, 11, 11, 12, 12, 12, 13, 13,
-14, 14, 14, 15, 15, 15, 15, 15, 16, 17, 17, 1, 1, 1, 2, 3, 3,
-4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 10, 10,
-10, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 15, 15, 17, 17,
-17, 17, 17, 17, 18, 18, 19, 19, 19, 19, 1, 2, 2, 2, 3, 3, 3,
-3, 4, 4, 5, 5, 5, 8, 8, 9, 9, 9, 10, 11, 11, 11, 12, 12, 13,
-13, 14, 14, 15, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-17, 18, 18, 18, 19, 19, 1, 1, 1, 3, 3, 3, 4, 4, 5, 6, 7, 7, 9,
-9, 9, 9, 9, 9, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 17, 17,
-17, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 2, 2, 4, 5, 5, 7,
-7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 13, 14, 14, 14, 14, 15, 15, 15,
-15, 17, 18, 18, 19, 19, 19), comid = c(42, 42, 42, 42, 42, 42,
-42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 74, 74, 74, 74, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 79,
-79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 90, 90, 90, 90,
-90, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 24, 24, 24, 24, 55, 55, 55, 55, 55, 55, 55, 55,
-55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-55, 55, 55, 55, 88, 88, 88, 88, 88, 88, 88, 88, 88, 61, 61, 61,
-61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 30,
-30, 30, 30, 30, 30, 30, 30, 30, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-35, 35, 35, 35, 35, 35, 92, 92, 92, 92, 73, 73, 73, 73, 73, 73,
-73, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 31, 31, 31, 31,
-31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 50, 50, 50, 50,
-50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 69, 69, 69, 69,
-69, 69, 69, 69, 69, 69, 69, 69, 69, 54, 54, 54, 54, 54, 54, 54,
-54, 54, 51, 51, 51, 51, 51, 51, 51, 51, 51, 82, 82, 82, 82, 82,
-82, 82, 82, 82, 82, 82, 82, 82, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40,
-40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-40, 89, 89, 89, 89, 89, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 95, 94, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
-33, 33, 33, 33, 33, 33, 33, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-20, 20, 20, 20, 20, 20, 20, 20, 65, 65, 65, 65, 65, 65, 65, 56,
-56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
-56, 56, 56, 56, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
-52, 52, 52, 77, 77, 91, 91, 17, 17, 17, 17, 17, 17, 17, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 4, 4, 4, 4, 4, 4, 4, 85, 85, 85,
-85, 8, 8, 8, 8, 8, 8, 8, 8, 22, 22, 22, 22, 22, 22, 22, 22, 22,
-22, 62, 62, 39, 39, 39, 39, 39, 39, 39, 39, 39, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 63,
-63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
-63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 98, 98,
-98, 98, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
-53, 53, 53, 53, 53, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 46, 46, 46, 46,
-46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
-46, 46, 46, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 45, 45,
-45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 47, 47, 47, 47,
-47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 38, 38, 38, 38, 38,
-38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 81, 81, 81, 81, 81, 81, 32, 32, 32, 32,
-32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-32, 32, 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 68, 68,
-68, 68, 68, 68, 68, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
-58, 58, 60, 60, 60, 60, 60, 60, 60, 21, 21, 21, 21, 21, 21, 21,
-21, 21, 21, 64, 64, 64, 64, 64, 64, 64, 64, 64, 96, 96, 96, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
-36, 36, 36, 36, 36, 36, 36, 36, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 59, 59, 59, 59, 59, 59, 59, 84,
-84, 84, 84, 84, 84, 84, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 67, 67, 67, 67, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 66, 66, 66, 66, 66, 66, 78, 78, 78, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 43, 43, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-44, 44, 48, 48, 48, 48, 48, 86, 86, 86, 86, 76, 76, 83, 83, 83,
-83, 83, 83, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 97, 71, 71, 71,
-71, 71, 71, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
-37, 37, 37, 87, 87, 87, 87, 87, 49, 50, 50, 50, 50, 50, 50, 50,
-50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
-50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 92, 92,
-92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 68, 68, 68,
-68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 21, 21, 21,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 31,
-31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 23, 23, 23, 23, 23, 23, 23, 23,
-23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
-30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
-58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
-58, 58, 58, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
-53, 53, 53, 53, 53, 53, 53, 53, 53, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 90,
-90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 42, 42, 42, 42, 42,
-42, 42, 42, 42, 42, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 63,
-63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
-63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 98, 98, 70, 70, 70,
-70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 74, 74, 74, 74, 51,
-51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
-59, 59, 59, 59, 59, 59, 59, 59, 59, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 89, 89, 89, 89, 89, 89, 89, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 69, 69, 69, 69, 69,
-69, 69, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
-84, 84, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
-54, 54, 54, 54, 54, 71, 71, 71, 71, 71, 71, 71, 71, 71, 17, 17,
-17, 17, 17, 17, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 22, 22,
-22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
-91, 91, 91, 91, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 75, 75, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 39,
-39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 56, 56,
-56, 56, 56, 56, 56, 56, 56, 56, 99, 65, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 52,
-52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 95, 95, 95, 95, 95, 95,
-95, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 77, 77, 60, 60, 60, 60, 60, 60,
-60, 60, 60, 60, 60, 60, 60, 60, 32, 32, 32, 32, 32, 32, 32, 32,
-32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 38, 38,
-38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
-38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 35, 35,
-35, 35, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 73, 73,
-73, 73, 73, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
-41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-41, 41, 41, 41, 41, 41, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 47, 47, 47, 47, 47, 47, 47, 45, 45,
-45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-45, 45, 45, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 55, 55, 55, 55, 55,
-55, 55, 55, 55, 46, 46, 46, 46, 46, 46, 46, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-19, 19, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-96, 96, 96, 96, 96, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 67, 67, 67, 67,
-67, 67, 67, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64,
-64, 64, 64, 64, 64, 64, 82, 82, 82, 82, 82, 36, 36, 36, 36, 36,
-36, 36, 36, 36, 36, 36, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57,
-57, 57, 57, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 85, 85,
-85, 85, 76, 76, 37, 37, 37, 37, 62, 97, 97, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 8, 8, 8,
-8, 8, 8, 8, 8, 49, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 94, 94, 94, 94, 94, 94, 94, 66, 66, 66, 33, 33, 33, 33,
-33, 33, 33, 33, 33, 33, 33, 33, 86, 86, 86, 86, 86, 86, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43,
-43, 43, 43, 48, 48, 48, 48, 48, 44, 44, 44, 44, 44, 44, 44, 75,
-75, 75, 75, 75, 75, 75, 97, 97, 97, 85, 85, 85, 85, 83, 83, 83,
-83, 83, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 8, 8, 8, 8, 8,
-8, 8, 8, 8, 8, 8, 8, 8, 8, 22, 22, 22, 22, 22, 22, 22, 22, 22,
-22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 39, 39, 39, 39, 39, 39,
-39, 39, 39, 39, 39, 39, 39, 76, 76, 76, 76, 76, 76, 76, 96, 59,
-59, 59, 59, 59, 59, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 11, 11, 11, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 67, 67, 67,
-67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
-67, 67, 67, 67, 67, 67, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
-82, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 64, 64, 64, 64, 64, 64, 64, 64, 64, 33, 33, 33,
-33, 33, 33, 20, 20, 20, 20, 20, 20, 20, 52, 52, 52, 52, 52, 52,
-52, 52, 52, 52, 52, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
-65, 65, 65, 65, 65, 65, 65, 65, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 66, 66, 66, 77, 77, 77, 77, 77, 44, 44, 44, 44, 44, 44,
-44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-44, 44, 44, 44, 44, 44, 79, 79, 63, 63, 63, 19, 19, 19, 19, 19,
-19, 19, 19, 19, 19, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 55,
-55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-55, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 53, 53,
-53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 42, 42, 42, 42, 42, 42, 42, 42,
-42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 61, 61, 61, 61,
-61, 61, 81, 81, 29, 29, 29, 29, 29, 29, 29, 29, 29, 38, 38, 38,
-38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
-38, 38, 38, 38, 38, 38, 41, 41, 41, 41, 41, 41, 23, 23, 23, 23,
-23, 23, 23, 23, 23, 23, 23, 23, 23, 30, 30, 30, 30, 30, 30, 30,
-30, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 92, 92,
-92, 92, 92, 92, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-71, 71, 71, 71, 62, 62, 62, 62, 62, 62, 17, 17, 17, 17, 17, 17,
-17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 91, 91, 91, 91, 49, 49, 49, 49, 49, 49, 49, 49,
-49, 49, 49, 49, 87, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 34, 34, 34, 34, 34,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 18, 18, 18, 18, 18,
-18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 40,
-40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-40, 40, 40, 40, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
-54, 54, 54, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-51, 51, 51, 51, 51, 51, 51, 51, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 57, 57,
-57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-57, 57, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 89,
-89, 89, 89, 89, 69, 69, 69, 69, 69, 69, 69, 36, 36, 36, 36, 36,
-36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 94,
-94, 94, 94, 94, 94, 94, 94, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
-56, 56, 56, 56, 56, 56, 56, 56, 43, 43, 43, 43, 43, 43, 43, 43,
-43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 48, 48, 48, 48,
-48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 86, 86, 86,
-86, 86, 86, 86, 86, 86, 86, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, 95, 95,
-95, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 98, 98, 98, 70, 70, 70, 70, 70, 70, 70, 70, 70,
-70, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 74,
-74, 74, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-45, 45, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 73, 73, 73, 73, 73, 73,
-73, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 9, 9, 9,
-9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-58, 58, 58, 58, 58, 58, 58, 58, 58, 50, 50, 50, 50, 50, 50, 50,
-50, 50, 50, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
-31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 60,
-60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 21, 21, 21, 21, 21,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-21, 21, 21, 21, 21, 21, 21, 21, 32, 32, 32, 32, 32, 32, 32, 32,
-32, 32, 32, 32, 32, 32, 32, 68, 68, 68, 68, 68, 68, 68, 66, 66,
-16, 16, 78, 78, 77, 77, 33, 48, 48, 48, 48, 56, 65, 86, 86, 20,
-20, 20, 20, 20, 1, 1, 1, 1, 1, 15, 15, 15, 15, 5, 5, 5, 5, 5,
-5, 14, 14, 14, 52, 52, 43, 43, 43, 58, 58, 58, 58, 30, 30, 30,
-30, 30, 30, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 31, 60,
-60, 60, 60, 60, 38, 38, 81, 81, 32, 32, 68, 68, 21, 21, 29, 29,
-47, 47, 47, 47, 61, 61, 61, 9, 9, 9, 9, 9, 9, 9, 9, 41, 41, 41,
-41, 41, 73, 73, 73, 73, 23, 23, 75, 22, 62, 62, 62, 62, 62, 62,
-39, 39, 8, 8, 8, 8, 8, 8, 93, 76, 87, 87, 4, 4, 4, 4, 80, 80,
-80, 80, 80, 85, 17, 17, 12, 12, 37, 37, 37, 37, 37, 34, 49, 49,
-49, 49, 49, 49, 3, 3, 3, 26, 26, 74, 74, 74, 74, 74, 42, 42,
-42, 42, 13, 13, 13, 13, 88, 25, 25, 25, 25, 63, 63, 63, 63, 79,
-79, 19, 19, 19, 27, 24, 24, 24, 24, 46, 46, 46, 72, 72, 72, 70,
-70, 55, 55, 54, 84, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 10, 10, 10, 6, 6, 6, 6,
-6, 6, 82, 69, 57, 57, 59, 59, 59, 96, 2, 2, 2, 2, 2, 2, 2, 18,
-18, 18, 18, 18, 18, 67, 67, 67, 64, 64, 11, 11, 11, 11, 51, 89,
-89, 89, 89, 43, 43, 48, 5, 5, 20, 20, 66, 66, 66, 1, 14, 15,
-15, 78, 78, 78, 44, 44, 77, 77, 77, 16, 16, 16, 16, 16, 33, 65,
-65, 34, 34, 34, 39, 12, 12, 85, 93, 93, 80, 80, 80, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 91, 37, 49, 49, 49, 62, 62, 76, 76, 22,
-17, 17, 17, 17, 17, 17, 87, 87, 28, 28, 28, 28, 28, 28, 75, 75,
-8, 8, 8, 8, 50, 61, 61, 61, 30, 30, 30, 30, 32, 32, 81, 81, 81,
-9, 9, 73, 73, 73, 60, 68, 68, 68, 47, 47, 29, 29, 92, 92, 35,
-21, 21, 21, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 41, 41, 41,
-31, 31, 10, 10, 10, 40, 40, 40, 57, 57, 6, 96, 69, 69, 64, 64,
-64, 64, 64, 64, 36, 51, 7, 7, 67, 59, 18, 18, 82, 11, 11, 11,
-11, 11, 11, 11, 54, 54, 54, 2, 2, 2, 2, 24, 24, 53, 46, 46, 19,
-19, 13, 13, 13, 13, 27, 27, 27, 27, 90, 79, 3, 3, 3, 3, 26, 26,
-26, 26, 42, 74, 74, 72, 72, 72), iname = c("BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "MichaelHeckler", "MichaelHeckler",
-"MichaelHeckler", "MichaelHeckler", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"BoskoBarisic", "BoskoBarisic", "BoskoBarisic", "BoskoBarisic",
-"BoskoBarisic", "BoskoBarisic", "BoskoBarisic", "BoskoBarisic",
-"BoskoBarisic", "BoskoBarisic", "BoskoBarisic", "BoskoBarisic",
-"BoskoBarisic", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "AndreSteenkamp", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "HansBock", "HansBock", "HansBock", "HansBock",
-"HansBock", "HansBock", "HansBock", "HansBock", "HansBock", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "StefanFlorea", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "JamieHarries", "JamieHarries",
-"JamieHarries", "JamieHarries", "JamieHarries", "JamieHarries",
-"JamieHarries", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "TimRolston", "TimRolston",
-"TimRolston", "TimRolston", "TimRolston", "TimRolston", "TimRolston",
-"TimRolston", "TimRolston", "TimRolston", "TimRolston", "TimRolston",
-"TimRolston", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "KimTribe", "KimTribe", "KimTribe",
-"KimTribe", "KimTribe", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "SabahudinPehadzicBIHI",
-"MarinkoPuskaric", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JohnTrench",
-"JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench",
-"JohnTrench", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "RobertVanRensburg", "RobertVanRensburg", "MisakoIshimura",
-"MisakoIshimura", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"JohnBell", "JohnBell", "JohnBell", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "AntonioRodrigues",
-"AntonioRodrigues", "AntonioRodrigues", "AntonioRodrigues", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "TorbjornEriksson", "TorbjornEriksson",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"YoshikoIzumiya", "YoshikoIzumiya", "YoshikoIzumiya", "YoshikoIzumiya",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland",
-"MarkYelland", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ReneKoops",
-"ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops",
-"ReneKoops", "VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "JouniNeste", "JouniNeste",
-"JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste",
-"JouniNeste", "JouniNeste", "StephenVarga", "StephenVarga", "StephenVarga",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "ScottTucker", "ScottTucker", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "TakashiKawahara", "TakashiKawahara",
-"TakashiKawahara", "TakashiKawahara", "TakashiKawahara", "TakashiKawahara",
-"DavidEricDavies", "DavidEricDavies", "DavidEricDavies", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"HowardCroston", "HowardCroston", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "HelderRodrigues",
-"HelderRodrigues", "HelderRodrigues", "HelderRodrigues", "RickyLehman",
-"RickyLehman", "PeterDindic", "PeterDindic", "PeterDindic", "PeterDindic",
-"PeterDindic", "PeterDindic", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja",
-"JohnBeaven", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnFoxton", "JohnFoxton", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "JanKwisthout",
-"JanKwisthout", "JanKwisthout", "JanKwisthout", "JanKwisthout",
-"GaryGlenYoung", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "StefanFlorea", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "StefanFlorea", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "StefanFlorea", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "ReneKoops", "ReneKoops", "ReneKoops",
-"ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops",
-"ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops",
-"ReneKoops", "ReneKoops", "ReneKoops", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BoskoBarisic", "BoskoBarisic",
-"BoskoBarisic", "BoskoBarisic", "BoskoBarisic", "BoskoBarisic",
-"BoskoBarisic", "BoskoBarisic", "BoskoBarisic", "BoskoBarisic",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "YoshikoIzumiya",
-"YoshikoIzumiya", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "MichaelHeckler",
-"MichaelHeckler", "MichaelHeckler", "MichaelHeckler", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"KimTribe", "KimTribe", "KimTribe", "KimTribe", "KimTribe", "KimTribe",
-"KimTribe", "AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "TimRolston",
-"TimRolston", "TimRolston", "TimRolston", "TimRolston", "TimRolston",
-"TimRolston", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"PeterDindic", "PeterDindic", "PeterDindic", "PeterDindic", "PeterDindic",
-"PeterDindic", "PeterDindic", "PeterDindic", "PeterDindic", "PeterDindic",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "MisakoIshimura",
-"MisakoIshimura", "MisakoIshimura", "MisakoIshimura", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "BrianJeremiah", "BrianJeremiah", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"DionDavies", "JohnTrench", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "SabahudinPehadzicBIHI",
-"SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI",
-"SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "RobertVanRensburg", "RobertVanRensburg", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "JamieHarries",
-"JamieHarries", "JamieHarries", "JamieHarries", "JamieHarries",
-"MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland",
-"MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland", "MarkYelland",
-"MarkYelland", "MarkYelland", "MarkYelland", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "HansBock", "HansBock",
-"HansBock", "HansBock", "HansBock", "HansBock", "HansBock", "HansBock",
-"HansBock", "HansBock", "HansBock", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "StephenVarga", "StephenVarga", "StephenVarga",
-"StephenVarga", "StephenVarga", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"ToddOishi", "ToddOishi", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JouniNeste", "JouniNeste", "JouniNeste",
-"JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "AntonioRodrigues",
-"AntonioRodrigues", "AntonioRodrigues", "AntonioRodrigues", "RickyLehman",
-"RickyLehman", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "TorbjornEriksson",
-"JohnBeaven", "JohnBeaven", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"GaryGlenYoung", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "MarinkoPuskaric",
-"MarinkoPuskaric", "MarinkoPuskaric", "MarinkoPuskaric", "MarinkoPuskaric",
-"MarinkoPuskaric", "MarinkoPuskaric", "TakashiKawahara", "TakashiKawahara",
-"TakashiKawahara", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "HelderRodrigues", "HelderRodrigues", "HelderRodrigues",
-"HelderRodrigues", "HelderRodrigues", "HelderRodrigues", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "HowardCroston",
-"HowardCroston", "HowardCroston", "HowardCroston", "HowardCroston",
-"HowardCroston", "HowardCroston", "HowardCroston", "HowardCroston",
-"HowardCroston", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley",
-"JoeRiley", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"BrianJeremiah", "BrianJeremiah", "BrianJeremiah", "BrianJeremiah",
-"BrianJeremiah", "BrianJeremiah", "BrianJeremiah", "JohnBeaven",
-"JohnBeaven", "JohnBeaven", "AntonioRodrigues", "AntonioRodrigues",
-"AntonioRodrigues", "AntonioRodrigues", "PeterDindic", "PeterDindic",
-"PeterDindic", "PeterDindic", "PeterDindic", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan", "PavelMachan",
-"PavelMachan", "PavelMachan", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek",
-"StanislawGuzdek", "StanislawGuzdek", "StanislawGuzdek", "RickyLehman",
-"RickyLehman", "RickyLehman", "RickyLehman", "RickyLehman", "RickyLehman",
-"RickyLehman", "StephenVarga", "ScottTucker", "ScottTucker",
-"ScottTucker", "ScottTucker", "ScottTucker", "ScottTucker", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi", "ToddOishi",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat",
-"SimonGrootemaat", "SimonGrootemaat", "SimonGrootemaat", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "JouniNeste",
-"JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste",
-"JouniNeste", "JouniNeste", "JouniNeste", "MichalBenatinsky",
-"MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky", "MichalBenatinsky",
-"MichalBenatinsky", "JoshStephens", "JoshStephens", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen",
-"JarkkoSuominen", "JarkkoSuominen", "JarkkoSuominen", "JohnTrench",
-"JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench",
-"JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench",
-"JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench", "JohnTrench",
-"JohnTrench", "JohnTrench", "JohnTrench", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "AaronWest",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "TakashiKawahara",
-"TakashiKawahara", "TakashiKawahara", "RobertVanRensburg", "RobertVanRensburg",
-"RobertVanRensburg", "RobertVanRensburg", "RobertVanRensburg",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"EricLelouvrier", "EricLelouvrier", "EricLelouvrier", "EricLelouvrier",
-"BoskoBarisic", "BoskoBarisic", "JohnBuckley", "JohnBuckley",
-"JohnBuckley", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "LloydStruther",
-"LloydStruther", "LloydStruther", "LloydStruther", "AndreSteenkamp",
-"AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp", "AndreSteenkamp",
-"AndreSteenkamp", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "CraigColtman",
-"CraigColtman", "CraigColtman", "CraigColtman", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon", "AndrewDixon",
-"AndrewDixon", "AndrewDixon", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais", "PauloMorais",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "ArturTrzaskos",
-"ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"ArturTrzaskos", "MarkYelland", "MarkYelland", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco", "GianlucaMazzocco",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel", "GeorgeDaniel",
-"GeorgeDaniel", "JoseDias", "JoseDias", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "VernBarby", "VernBarby",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "StefanFlorea", "StefanFlorea",
-"StefanFlorea", "StefanFlorea", "StefanFlorea", "StefanFlorea",
-"JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton", "JohnFoxton",
-"JohnFoxton", "TorbjornEriksson", "TorbjornEriksson", "TorbjornEriksson",
-"TorbjornEriksson", "TorbjornEriksson", "TorbjornEriksson", "JohnBell",
-"JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"JohnBell", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "JanBartko", "JanBartko",
-"JanBartko", "JanBartko", "JanBartko", "MisakoIshimura", "MisakoIshimura",
-"MisakoIshimura", "MisakoIshimura", "GaryGlenYoung", "GaryGlenYoung",
-"GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung",
-"GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung",
-"GaryGlenYoung", "GaryGlenYoung", "JanKwisthout", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "AnthonyNaranja", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "AnthonyNaranja", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek", "PeterBienek",
-"PeterBienek", "PeterBienek", "PeterBienek", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte", "NunoDuarte",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "BretBishop",
-"BretBishop", "BretBishop", "BretBishop", "BretBishop", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani", "AlessandroSgrani",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic", "MiroslavKaticic",
-"MiroslavKaticic", "KimTribe", "KimTribe", "KimTribe", "KimTribe",
-"KimTribe", "TimRolston", "TimRolston", "TimRolston", "TimRolston",
-"TimRolston", "TimRolston", "TimRolston", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "MarinkoPuskaric",
-"MarinkoPuskaric", "MarinkoPuskaric", "MarinkoPuskaric", "MarinkoPuskaric",
-"MarinkoPuskaric", "MarinkoPuskaric", "MarinkoPuskaric", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "LucaPapandrea",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"PeterElberse", "PeterElberse", "PeterElberse", "PeterElberse",
-"HowardCroston", "HowardCroston", "HowardCroston", "HowardCroston",
-"HowardCroston", "HowardCroston", "HowardCroston", "HowardCroston",
-"HowardCroston", "HowardCroston", "HowardCroston", "HowardCroston",
-"HowardCroston", "HowardCroston", "HowardCroston", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucjanBurda", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley",
-"JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley",
-"JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley",
-"HelderRodrigues", "HelderRodrigues", "HelderRodrigues", "HelderRodrigues",
-"HelderRodrigues", "HelderRodrigues", "HelderRodrigues", "HelderRodrigues",
-"HelderRodrigues", "HelderRodrigues", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI", "SabahudinPehadzicBIHI",
-"SabahudinPehadzicBIHI", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"LanceEgan", "LanceEgan", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "YoshikoIzumiya", "YoshikoIzumiya",
-"YoshikoIzumiya", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "StanislawMankou",
-"StanislawMankou", "StanislawMankou", "StanislawMankou", "HansBock",
-"HansBock", "HansBock", "HansBock", "HansBock", "HansBock", "HansBock",
-"HansBock", "HansBock", "HansBock", "HansBock", "HansBock", "HansBock",
-"HansBock", "MichaelHeckler", "MichaelHeckler", "MichaelHeckler",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri", "YannCaleri",
-"YannCaleri", "TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"OlliToivonen", "JamieHarries", "JamieHarries", "JamieHarries",
-"JamieHarries", "JamieHarries", "JamieHarries", "JamieHarries",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "MikeTinnion", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic", "IvicaMagdic",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "TerenceCourtoreille",
-"TerenceCourtoreille", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar", "CraigFarrar",
-"CraigFarrar", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"MiroslavAntal", "MiroslavAntal", "MiroslavAntal", "MiroslavAntal",
-"ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops", "ReneKoops",
-"ReneKoops", "ReneKoops", "TakashiKawahara", "TakashiKawahara",
-"DonaldThom", "DonaldThom", "DavidEricDavies", "DavidEricDavies",
-"RobertVanRensburg", "RobertVanRensburg", "MichalBenatinsky",
-"JoeRiley", "JoeRiley", "JoeRiley", "JoeRiley", "PeterElberse",
-"JohnTrench", "HelderRodrigues", "HelderRodrigues", "JoshStephens",
-"JoshStephens", "JoshStephens", "JoshStephens", "JoshStephens",
-"MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz", "MartinDroz",
-"AaronWest", "AaronWest", "AaronWest", "AaronWest", "LucjanBurda",
-"LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda", "LucjanBurda",
-"LucaPapandrea", "LucaPapandrea", "LucaPapandrea", "JarkkoSuominen",
-"JarkkoSuominen", "HowardCroston", "HowardCroston", "HowardCroston",
-"VilleAnttiJaakkola", "VilleAnttiJaakkola", "VilleAnttiJaakkola",
-"VilleAnttiJaakkola", "VernBarby", "VernBarby", "VernBarby",
-"VernBarby", "VernBarby", "VernBarby", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh",
-"WilliamKavenagh", "WilliamKavenagh", "WilliamKavenagh", "TerenceCourtoreille",
-"TerenceCourtoreille", "TerenceCourtoreille", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "SeiichiKomatsuzawa", "SeiichiKomatsuzawa",
-"SeiichiKomatsuzawa", "GeorgeDaniel", "GeorgeDaniel", "MarkYelland",
-"MarkYelland", "MiroslavAntal", "MiroslavAntal", "ReneKoops",
-"ReneKoops", "CraigFarrar", "CraigFarrar", "GianlucaMazzocco",
-"GianlucaMazzocco", "MikeTinnion", "MikeTinnion", "MikeTinnion",
-"MikeTinnion", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam", "TomasAdam",
-"TomasAdam", "TomasAdam", "TomasAdam", "JoseDias", "JoseDias",
-"JoseDias", "JoseDias", "JoseDias", "JamieHarries", "JamieHarries",
-"JamieHarries", "JamieHarries", "ChristopheIdre", "ChristopheIdre",
-"BrianJeremiah", "PavelMachan", "TorbjornEriksson", "TorbjornEriksson",
-"TorbjornEriksson", "TorbjornEriksson", "TorbjornEriksson", "TorbjornEriksson",
-"StanislawGuzdek", "StanislawGuzdek", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"JannePirkkalainen", "AidenHodgins", "RickyLehman", "JanKwisthout",
-"JanKwisthout", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"RandyTaylor", "RandyTaylor", "RandyTaylor", "RandyTaylor", "RandyTaylor",
-"AntonioRodrigues", "JohnBell", "JohnBell", "JanBartko", "JanBartko",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "ValerioSantiAmantini",
-"ValerioSantiAmantini", "ValerioSantiAmantini", "AnthonyNaranja",
-"GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung",
-"GaryGlenYoung", "GaryGlenYoung", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "JohnNishi", "JohnNishi", "MichaelHeckler",
-"MichaelHeckler", "MichaelHeckler", "MichaelHeckler", "MichaelHeckler",
-"BorisDzurek", "BorisDzurek", "BorisDzurek", "BorisDzurek", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "SandroSoldarini", "HansBock",
-"OlliToivonen", "OlliToivonen", "OlliToivonen", "OlliToivonen",
-"JohnBuckley", "JohnBuckley", "JohnBuckley", "JohnBuckley", "BoskoBarisic",
-"BoskoBarisic", "LloydStruther", "LloydStruther", "LloydStruther",
-"MarekWalczyk", "LanceEgan", "LanceEgan", "LanceEgan", "LanceEgan",
-"AndrewDixon", "AndrewDixon", "AndrewDixon", "ThibaultGuilpain",
-"ThibaultGuilpain", "ThibaultGuilpain", "StanislawMankou", "StanislawMankou",
-"CraigColtman", "CraigColtman", "NunoDuarte", "MiroslavKaticic",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "SimonRobinson", "SimonRobinson", "SimonRobinson",
-"SimonRobinson", "DamienWalsh", "DamienWalsh", "DamienWalsh",
-"DamienWalsh", "DamienWalsh", "DamienWalsh", "DamienWalsh", "PiotrKonieczny",
-"PiotrKonieczny", "PiotrKonieczny", "DesArmstrong", "DesArmstrong",
-"DesArmstrong", "DesArmstrong", "DesArmstrong", "DesArmstrong",
-"SimonGrootemaat", "TimRolston", "AlessandroSgrani", "AlessandroSgrani",
-"ScottTucker", "ScottTucker", "ScottTucker", "StephenVarga",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"JulienDaguillanes", "KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"KiyoshiNakagawa", "KiyoshiNakagawa", "KiyoshiNakagawa", "ToddOishi",
-"ToddOishi", "ToddOishi", "JouniNeste", "JouniNeste", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "BretBishop",
-"KimTribe", "KimTribe", "KimTribe", "KimTribe", "HowardCroston",
-"HowardCroston", "JoeRiley", "LucjanBurda", "LucjanBurda", "JoshStephens",
-"JoshStephens", "TakashiKawahara", "TakashiKawahara", "TakashiKawahara",
-"MartinDroz", "LucaPapandrea", "AaronWest", "AaronWest", "DavidEricDavies",
-"DavidEricDavies", "DavidEricDavies", "EricLelouvrier", "EricLelouvrier",
-"RobertVanRensburg", "RobertVanRensburg", "RobertVanRensburg",
-"DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom", "DonaldThom",
-"MichalBenatinsky", "JohnTrench", "JohnTrench", "AnthonyNaranja",
-"AnthonyNaranja", "AnthonyNaranja", "StanislawGuzdek", "JanBartko",
-"JanBartko", "AntonioRodrigues", "AidenHodgins", "AidenHodgins",
-"RandyTaylor", "RandyTaylor", "RandyTaylor", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey", "JohnHorsey",
-"JohnHorsey", "JohnHorsey", "JohnHorsey", "MisakoIshimura", "ValerioSantiAmantini",
-"GaryGlenYoung", "GaryGlenYoung", "GaryGlenYoung", "TorbjornEriksson",
-"TorbjornEriksson", "RickyLehman", "RickyLehman", "PavelMachan",
-"JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell", "JohnBell",
-"JanKwisthout", "JanKwisthout", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BertrandJacquemin", "BertrandJacquemin",
-"BertrandJacquemin", "BrianJeremiah", "BrianJeremiah", "JannePirkkalainen",
-"JannePirkkalainen", "JannePirkkalainen", "JannePirkkalainen",
-"IvicaMagdic", "ArturTrzaskos", "ArturTrzaskos", "ArturTrzaskos",
-"VernBarby", "VernBarby", "VernBarby", "VernBarby", "MiroslavAntal",
-"MiroslavAntal", "MarkYelland", "MarkYelland", "MarkYelland",
-"TomasAdam", "TomasAdam", "JamieHarries", "JamieHarries", "JamieHarries",
-"SeiichiKomatsuzawa", "ReneKoops", "ReneKoops", "ReneKoops",
-"MikeTinnion", "MikeTinnion", "GianlucaMazzocco", "GianlucaMazzocco",
-"StefanFlorea", "StefanFlorea", "WilliamKavenagh", "CraigFarrar",
-"CraigFarrar", "CraigFarrar", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"ChristopheIdre", "ChristopheIdre", "ChristopheIdre", "ChristopheIdre",
-"JoseDias", "JoseDias", "JoseDias", "TerenceCourtoreille", "TerenceCourtoreille",
-"PiotrKonieczny", "PiotrKonieczny", "PiotrKonieczny", "PeterBienek",
-"PeterBienek", "PeterBienek", "AlessandroSgrani", "AlessandroSgrani",
-"DesArmstrong", "StephenVarga", "TimRolston", "TimRolston", "JouniNeste",
-"JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste", "JouniNeste",
-"DamienWalsh", "BretBishop", "SimonRobinson", "SimonRobinson",
-"ToddOishi", "ScottTucker", "KiyoshiNakagawa", "KiyoshiNakagawa",
-"SimonGrootemaat", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"AntoninPesek", "AntoninPesek", "AntoninPesek", "AntoninPesek",
-"NunoDuarte", "NunoDuarte", "NunoDuarte", "JulienDaguillanes",
-"JulienDaguillanes", "JulienDaguillanes", "JulienDaguillanes",
-"LanceEgan", "LanceEgan", "PauloMorais", "AndrewDixon", "AndrewDixon",
-"LloydStruther", "LloydStruther", "SandroSoldarini", "SandroSoldarini",
-"SandroSoldarini", "SandroSoldarini", "MarekWalczyk", "MarekWalczyk",
-"MarekWalczyk", "MarekWalczyk", "AndreSteenkamp", "BoskoBarisic",
-"TomasStarychfojtu", "TomasStarychfojtu", "TomasStarychfojtu",
-"TomasStarychfojtu", "JohnNishi", "JohnNishi", "JohnNishi", "JohnNishi",
-"BorisDzurek", "MichaelHeckler", "MichaelHeckler", "ThibaultGuilpain",
-"ThibaultGuilpain", "ThibaultGuilpain"), country = c("SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "WAL", "WAL", "WAL", "WAL", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "RSA", "RSA", "RSA",
-"RSA", "RSA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"ROM", "ROM", "ROM", "ROM", "WAL", "WAL", "WAL", "WAL", "WAL",
-"WAL", "WAL", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "RSA", "RSA", "RSA", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "WAL", "WAL", "WAL", "WAL", "WAL", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "NDI",
-"CRO", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "RSA", "RSA", "JPN",
-"JPN", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "POR", "POR", "POR",
-"POR", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "SWE", "SWE", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "JPN", "JPN", "JPN", "JPN", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "BUL",
-"BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL",
-"BUL", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "RSA", "RSA", "RSA",
-"RSA", "RSA", "RSA", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "MAL", "MAL", "MAL", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "WAL", "WAL", "WAL", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "ENG", "ENG", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "AUS", "AUS", "AUS", "AUS", "AUS", "POR", "POR", "POR",
-"POR", "AUS", "AUS", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "CAN", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "NED", "NED", "NED", "NED", "NED", "RSA",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "ROM", "ROM", "ROM", "ROM", "ROM", "ROM", "ROM", "ROM",
-"ROM", "ROM", "ROM", "ROM", "ROM", "ROM", "ROM", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "RSA",
-"RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "RSA", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "JPN", "JPN", "BUL", "BUL",
-"BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL", "BUL",
-"BUL", "BUL", "BUL", "WAL", "WAL", "WAL", "WAL", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "WAL", "WAL", "WAL", "WAL", "WAL", "WAL", "WAL", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "JPN", "JPN",
-"JPN", "JPN", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "WAL", "WAL", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "WAL", "IRE", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"NDI", "NDI", "NDI", "NDI", "NDI", "NDI", "NDI", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "RSA", "RSA", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "IRE", "IRE", "IRE", "IRE", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "WAL",
-"WAL", "WAL", "WAL", "WAL", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "MAL", "MAL",
-"MAL", "MAL", "MAL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "NED",
-"NED", "NED", "NED", "NED", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "ITA", "ITA", "ITA",
-"ITA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "POR", "POR", "POR", "POR", "AUS", "AUS",
-"ITA", "ITA", "ITA", "ITA", "SWE", "CAN", "CAN", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "RSA", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"JPN", "JPN", "JPN", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "POR", "POR", "POR",
-"POR", "POR", "POR", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "AUS", "AUS", "AUS", "AUS", "AUS", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "WAL", "WAL", "WAL",
-"WAL", "WAL", "WAL", "WAL", "CAN", "CAN", "CAN", "POR", "POR",
-"POR", "POR", "CRO", "CRO", "CRO", "CRO", "CRO", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "MAL", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "JPN", "JPN", "JPN",
-"RSA", "RSA", "RSA", "RSA", "RSA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "CRO", "CRO", "IRE",
-"IRE", "IRE", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "RSA", "RSA", "RSA", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "POL", "POL",
-"POL", "POL", "POL", "POL", "RSA", "RSA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "POR", "POR", "POR", "POR", "POR",
-"POR", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "ROM", "ROM", "ROM",
-"ROM", "ROM", "ROM", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "SWE", "SWE", "SWE", "SWE", "SWE", "SWE", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "JPN", "JPN", "JPN", "JPN", "RSA",
-"RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA",
-"RSA", "RSA", "NED", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "USA", "USA", "USA", "USA", "USA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CRO", "CRO", "CRO", "CRO", "WAL", "WAL", "WAL", "WAL",
-"WAL", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "RSA", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "AUS", "POR", "POR", "POR", "POR", "POR",
-"POR", "POR", "POR", "POR", "POR", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"NDI", "NDI", "NDI", "NDI", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",
-"USA", "USA", "USA", "USA", "USA", "USA", "USA", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL", "POL",
-"POL", "JPN", "JPN", "JPN", "BUL", "BUL", "BUL", "BUL", "BUL",
-"BUL", "BUL", "BUL", "BUL", "BUL", "NED", "NED", "NED", "NED",
-"NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED", "NED",
-"NED", "WAL", "WAL", "WAL", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA",
-"ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "ITA", "FIN",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "WAL", "WAL", "WAL", "WAL", "WAL", "WAL", "WAL",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN",
-"CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO", "CRO",
-"CRO", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN", "CAN",
-"CAN", "CAN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "JPN", "JPN", "JPN", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK", "SVK",
-"SVK", "SVK", "SVK", "SVK", "NED", "NED", "NED", "NED", "NED",
-"NED", "NED", "JPN", "JPN", "CAN", "CAN", "WAL", "WAL", "RSA",
-"RSA", "SVK", "AUS", "AUS", "AUS", "AUS", "NED", "IRE", "POR",
-"POR", "USA", "USA", "USA", "USA", "USA", "CZE", "CZE", "CZE",
-"CZE", "CZE", "NZL", "NZL", "NZL", "NZL", "POL", "POL", "POL",
-"POL", "POL", "POL", "ITA", "ITA", "ITA", "FIN", "FIN", "ENG",
-"ENG", "ENG", "FIN", "FIN", "FIN", "FIN", "AUS", "AUS", "AUS",
-"AUS", "AUS", "AUS", "IRE", "IRE", "IRE", "IRE", "IRE", "IRE",
-"IRE", "IRE", "IRE", "CAN", "CAN", "CAN", "JPN", "JPN", "JPN",
-"JPN", "JPN", "USA", "USA", "RSA", "RSA", "SVK", "SVK", "NED",
-"NED", "NZL", "NZL", "ITA", "ITA", "ENG", "ENG", "ENG", "ENG",
-"POL", "POL", "POL", "CZE", "CZE", "CZE", "CZE", "CZE", "CZE",
-"CZE", "CZE", "POR", "POR", "POR", "POR", "POR", "WAL", "WAL",
-"WAL", "WAL", "FRA", "FRA", "WAL", "CZE", "SWE", "SWE", "SWE",
-"SWE", "SWE", "SWE", "POL", "POL", "FIN", "FIN", "FIN", "FIN",
-"FIN", "FIN", "IRE", "AUS", "NED", "NED", "ENG", "ENG", "ENG",
-"ENG", "CAN", "CAN", "CAN", "CAN", "CAN", "POR", "NZL", "NZL",
-"SVK", "SVK", "ITA", "ITA", "ITA", "ITA", "ITA", "USA", "RSA",
-"RSA", "RSA", "RSA", "RSA", "RSA", "CZE", "CZE", "CZE", "CAN",
-"CAN", "WAL", "WAL", "WAL", "WAL", "WAL", "SVK", "SVK", "SVK",
-"SVK", "ITA", "ITA", "ITA", "ITA", "NED", "FIN", "FIN", "FIN",
-"FIN", "IRE", "IRE", "IRE", "IRE", "CRO", "CRO", "NZL", "NZL",
-"NZL", "POL", "USA", "USA", "USA", "USA", "ENG", "ENG", "ENG",
-"FRA", "FRA", "FRA", "BUL", "BUL", "AUS", "AUS", "POR", "CRO",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "IRE",
-"IRE", "IRE", "IRE", "IRE", "IRE", "IRE", "POL", "POL", "POL",
-"NZL", "NZL", "NZL", "NZL", "NZL", "NZL", "NED", "RSA", "ITA",
-"ITA", "AUS", "AUS", "AUS", "MAL", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "JPN", "JPN", "JPN", "JPN", "JPN", "JPN",
-"CAN", "CAN", "CAN", "FIN", "FIN", "CZE", "CZE", "CZE", "CZE",
-"USA", "WAL", "WAL", "WAL", "WAL", "ENG", "ENG", "AUS", "POL",
-"POL", "USA", "USA", "JPN", "JPN", "JPN", "CZE", "ITA", "NZL",
-"NZL", "WAL", "WAL", "WAL", "FRA", "FRA", "RSA", "RSA", "RSA",
-"CAN", "CAN", "CAN", "CAN", "CAN", "SVK", "IRE", "IRE", "USA",
-"USA", "USA", "POL", "SVK", "SVK", "POR", "IRE", "IRE", "CAN",
-"CAN", "CAN", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG", "ENG",
-"ENG", "ENG", "ENG", "JPN", "ITA", "RSA", "RSA", "RSA", "SWE",
-"SWE", "AUS", "AUS", "CZE", "NZL", "NZL", "NZL", "NZL", "NZL",
-"NZL", "NED", "NED", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"WAL", "WAL", "FIN", "FIN", "FIN", "FIN", "CRO", "POL", "POL",
-"POL", "AUS", "AUS", "AUS", "AUS", "SVK", "SVK", "RSA", "RSA",
-"RSA", "CZE", "CZE", "WAL", "WAL", "WAL", "JPN", "NED", "NED",
-"NED", "ENG", "ENG", "ITA", "ITA", "ROM", "ROM", "IRE", "NZL",
-"NZL", "NZL", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA", "FRA",
-"FRA", "FRA", "FRA", "POR", "POR", "POR", "CAN", "CAN", "POL",
-"POL", "POL", "SVK", "SVK", "SVK", "ITA", "ITA", "NZL", "MAL",
-"RSA", "RSA", "FIN", "FIN", "FIN", "FIN", "FIN", "FIN", "IRE",
-"USA", "ENG", "ENG", "CAN", "AUS", "JPN", "JPN", "NED", "CZE",
-"CZE", "CZE", "CZE", "CZE", "CZE", "CZE", "POR", "POR", "POR",
-"FRA", "FRA", "FRA", "FRA", "USA", "USA", "POR", "ENG", "ENG",
-"NZL", "NZL", "ITA", "ITA", "ITA", "ITA", "POL", "POL", "POL",
-"POL", "RSA", "CRO", "CZE", "CZE", "CZE", "CZE", "CAN", "CAN",
-"CAN", "CAN", "SVK", "WAL", "WAL", "FRA", "FRA", "FRA")), .Names = c("length",
-"water", "session", "sector", "beatboat", "comid", "iname", "country"
-), row.names = c(NA, 4267), class = "data.frame")
diff --git a/data/wffc.indiv.R b/data/wffc.indiv.R
deleted file mode 100644
index 840345b..0000000
--- a/data/wffc.indiv.R
+++ /dev/null
@@ -1,94 +0,0 @@
-"wffc.indiv" <-
-structure(list(totalPlacings = c(20, 20, 22, 22, 22, 24, 24,
-24, 25, 27, 27, 27, 30, 30, 30, 30, 30, 31, 32, 32, 34, 34, 35,
-35, 36, 38, 38, 38, 39, 41, 42, 42, 42, 42, 43, 43, 43, 44, 44,
-45, 47, 49, 49, 50, 53, 53, 53, 53, 53, 54, 54, 54, 55, 55, 56,
-56, 57, 58, 58, 59, 59, 59, 60, 60, 60, 60, 61, 62, 63, 65, 65,
-65, 66, 66, 66, 66, 66, 67, 68, 68, 69, 69, 69, 70, 70, 72, 73,
-74, 74, 75, 76, 79, 79, 83, 88, 88, 88, 93, 94), points = c(51360,
-48540, 58980, 39480, 35240, 52800, 52140, 28540, 53180, 47180,
-47060, 35500, 40460, 36380, 34400, 32460, 29660, 41000, 40660,
-29440, 48020, 30720, 45020, 39840, 44680, 38680, 37900, 28560,
-39040, 29040, 43840, 38260, 28500, 19200, 36320, 35720, 22260,
-43040, 24900, 33520, 29800, 34020, 20220, 33200, 46480, 28300,
-27340, 21140, 15800, 36240, 34440, 24140, 33460, 29620, 36200,
-27700, 24180, 26580, 23880, 26880, 24780, 11660, 29240, 21160,
-17680, 10920, 22640, 21280, 18340, 25680, 16320, 6240, 16080,
-11980, 9980, 9660, 8920, 6340, 16440, 6900, 18340, 17080, 11880,
-23440, 9080, 13880, 6600, 20420, 13640, 14800, 6600, 16620, 2880,
-9740, 7080, 6540, 3420, 5120, 540), noofcaptures = c(78, 73, 98,
-59, 56, 87, 90, 40, 87, 80, 71, 56, 65, 59, 55, 54, 41, 66, 64,
-44, 78, 49, 60, 69, 73, 61, 66, 44, 65, 43, 78, 64, 40, 32, 65,
-58, 36, 78, 40, 52, 47, 55, 32, 53, 80, 48, 43, 33, 23, 64, 59,
-39, 60, 47, 57, 53, 38, 45, 38, 39, 42, 17, 53, 33, 30, 17, 40,
-35, 30, 38, 31, 6, 26, 18, 12, 14, 14, 8, 28, 8, 26, 31, 21,
-37, 14, 22, 10, 35, 21, 28, 11, 27, 3, 16, 12, 11, 6, 9, 1),
- longest = c(540, 585, 515, 689, 580, 535, 552, 610, 475,
- 533, 518, 560, 535, 580, 498, 624, 627, 525, 585, 560, 550,
- 515, 568, 615, 652, 520, 563, 510, 580, 572, 474, 500, 615,
- 484, 503, 535, 498, 592, 541, 512, 590, 510, 530, 499, 501,
- 495, 574, 572, 604, 466, 450, 515, 513, 480, 570, 419, 530,
- 688, 580, 492, 514, 508, 522, 594, 477, 532, 528, 505, 493,
- 620, 340, 560, 571, 475, 572, 470, 486, 574, 568, 610, 548,
- 432, 342, 486, 480, 560, 432, 501, 590, 362, 511, 455, 450,
- 490, 380, 395, 332, 293, 218), individual = c(0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0),
- country = c("CZE", "FRA", "CZE", "ENG", "POL", "NZL", "ENG",
- "FIN", "CZE", "POL", "CZE", "SVK", "ITA", "ITA", "NZL", "CAN",
- "NZL", "JPN", "NZL", "USA", "NZL", "CZE", "FRA", "USA", "FIN",
- "CAN", "POL", "FRA", "ITA", "AUS", "CAN", "SVK", "SVK", "USA",
- "IRE", "IRE", "ITA", "USA", "POL", "SVK", "POR", "SVK", "ENG",
- "FRA", "FRA", "ENG", "ENG", "AUS", "RSA", "CRO", "USA", "FIN",
- "POR", "POR", "AUS", "NED", "ITA", "FIN", "AUS", "JPN", "POL",
- "SWE", "IRE", "FIN", "IRE", "JPN", "CAN", "NED", "RSA", "BUL",
- "IRE", "FRA", "WAL", "WAL", "WAL", "AUS", "RSA", "WAL", "CRO",
- "CAN", "RSA", "NED", "CRO", "CRO", "POR", "POR", "NED", "NED",
- "WAL", "RSA", "JPN", "ROM", "IRE", "CRO", "NDI", "MAL", "CAN",
- "JPN", "WAL"), iname = c("MartinDroz", "JulienDaguillanes",
- "TomasStarychfojtu", "JohnHorsey", "LucjanBurda", "DesArmstrong",
- "SimonRobinson", "JannePirkkalainen", "TomasAdam", "PiotrKonieczny",
- "AntoninPesek", "JanBartko", "SandroSoldarini", "LucaPapandrea",
- "AaronWest", "DonaldThom", "JohnBell", "KiyoshiNakagawa",
- "LloydStruther", "JoshStephens", "CraigFarrar", "PavelMachan",
- "ChristopheIdre", "LanceEgan", "OlliToivonen", "JohnNishi",
- "MarekWalczyk", "BertrandJacquemin", "GianlucaMazzocco",
- "VernBarby", "TerenceCourtoreille", "MiroslavAntal", "MichalBenatinsky",
- "AnthonyNaranja", "WilliamKavenagh", "DamienWalsh", "ValerioSantiAmantini",
- "GeorgeDaniel", "StanislawGuzdek", "PeterBienek", "JoseDias",
- "BorisDzurek", "HowardCroston", "EricLelouvrier", "YannCaleri",
- "AndrewDixon", "MikeTinnion", "JoeRiley", "GaryGlenYoung",
- "IvicaMagdic", "BretBishop", "JarkkoSuominen", "PauloMorais",
- "NunoDuarte", "CraigColtman", "PeterElberse", "AlessandroSgrani",
- "VilleAnttiJaakkola", "ScottTucker", "SeiichiKomatsuzawa",
- "ArturTrzaskos", "TorbjornEriksson", "JohnBuckley", "JouniNeste",
- "JohnTrench", "TakashiKawahara", "ToddOishi", "ReneKoops",
- "TimRolston", "StanislawMankou", "JohnFoxton", "ThibaultGuilpain",
- "JamieHarries", "MichaelHeckler", "BrianJeremiah", "RickyLehman",
- "RobertVanRensburg", "DavidEricDavies", "BoskoBarisic", "RandyTaylor",
- "MarkYelland", "SimonGrootemaat", "PeterDindic", "MiroslavKaticic",
- "AntonioRodrigues", "HelderRodrigues", "JanKwisthout", "HansBock",
- "KimTribe", "AndreSteenkamp", "MisakoIshimura", "StefanFlorea",
- "AidenHodgins", "MarinkoPuskaric", "SabahudinPehadzicBIHI",
- "StephenVarga", "JohnBeaven", "YoshikoIzumiya", "DionDavies"
- ), comid = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99)), .Names = c("totalPlacings",
-"points", "noofcaptures", "longest", "individual", "country", "iname",
-"comid"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8",
-"9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
-"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
-"31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41",
-"42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52",
-"53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63",
-"64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74",
-"75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85",
-"86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96",
-"97", "98", "99"), class = "data.frame")
diff --git a/data/wffc.indiv.rda b/data/wffc.indiv.rda
new file mode 100644
index 0000000..5f03639
Binary files /dev/null and b/data/wffc.indiv.rda differ
diff --git a/data/wffc.nc.R b/data/wffc.nc.R
deleted file mode 100644
index 881df11..0000000
--- a/data/wffc.nc.R
+++ /dev/null
@@ -1,351 +0,0 @@
-"wffc.nc" <-
-structure(list(sector = c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3), session = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6), beatboat = c(1,
-2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
-19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
-14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
-12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
-11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7,
-8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5,
-6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3,
-4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1,
-2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
-19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
-14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
-12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
-11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-10, 11, 12, 13, 14, 15, 16, 17, 18, 19), numbers = c(20, 20,
-4, 32, 13, 5, 23, 28, 9, 35, 18, 29, 4, 19, 16, 23, 23, 11, 27,
-18, 9, 24, 22, 4, 7, 11, 16, 16, 18, 19, 31, 6, 23, 11, 7, 13,
-7, 10, 13, 9, 9, 13, 28, 10, 19, 5, 19, 9, 3, 28, 19, 26, 12,
-7, 7, 11, 4, 1, 1, 15, 20, 17, 7, 21, 15, 2, 12, 6, 3, 22, 24,
-2, 13, 16, 5, 4, 2, 7, 9, 7, 4, 8, 10, 2, 9, 2, 6, 13, 12, 0,
-1, 6, 16, 5, 1, 37, 15, 16, 34, 29, 28, 24, 16, 19, 14, 22, 32,
-4, 12, 5, 13, 22, 22, 7, 22, 29, 12, 10, 10, 28, 2, 14, 4, 37,
-17, 28, 11, 9, 7, 20, 11, 10, 14, 27, 26, 21, 28, 7, 31, 7, 16,
-19, 18, 5, 30, 7, 15, 7, 5, 11, 9, 4, 9, 6, 10, 18, 4, 17, 2,
-10, 15, 11, 4, 2, 4, 1, 2, 18, 8, 1, 0, 10, 1, 1, 21, 11, 7,
-13, 10, 2, 13, 7, 3, 12, 6, 24, 11, 10, 5, 7, 7, 3, 4, 5, 10,
-14, 19, 13, 7, 16, 6, 20, 22, 4, 12, 1, 28, 5, 11, 1, 6, 18,
-25, 18, 25, 11, 24, 9, 20, 21, 15, 21, 28, 20, 13, 5, 7, 20,
-6, 7, 0, 11, 19, 26, 3, 5, 28, 8, 12, 21, 15, 22, 24, 18, 10,
-22, 4, 2, 3, 10, 10, 18, 13, 18, 24, 20, 30, 21, 3, 10, 14, 3,
-16, 30, 21, 12, 6, 2, 9, 25, 6, 13, 8, 29, 6, 7, 12, 24, 9, 10,
-28, 12, 29, 15, 7, 2, 0, 2, 0, 2, 2, 1, 4, 1, 1, 2, 5, 5, 4,
-6, 3, 2, 0, 3, 4, 6, 9, 3, 5, 2, 2, 0, 2, 2, 2, 2, 4, 3, 8, 5,
-4, 2, 0, 1, 1, 6, 2, 6, 1, 1, 2, 4, 0, 5, 1, 2, 0, 2, 5, 1, 6,
-0, 3, 2, 5, 4, 4, 0, 1, 4, 4, 2, 3, 1, 4, 3, 3, 2, 2, 0, 0, 1,
-1, 17, 7, 3, 0, 6, 1, 1, 2, 3, 1, 7, 6, 3, 2, 4, 1, 4, 2, 1,
-2, 0, 2, 0, 0, 3, 1, 1, 2, 3, 2, 3, 5, 1, 2, 0, 0, 3, 1, 2, 1,
-2, 3, 10, 1, 1, 3, 2, 2, 1, 6, 2, 0, 6, 2, 4, 1, 3, 4, 2, 3,
-0, 0, 2, 3, 1, 3, 2, 2, 2, 1, 3, 10, 3, 2, 3, 0, 3, 2, 1, 1,
-2, 0, 6, 1, 1, 2, 1, 1, 2, 1, 7, 3, 4, 0, 2, 0, 1, 2, 0, 2, 4,
-4, 1, 0, 0, 1, 4, 4, 0, 1, 2, 3), comid = c(42, 26, 74, 3, 79,
-90, 24, 55, 88, 19, 63, 25, 98, 53, 13, 27, 46, 70, 45, 61, 30,
-29, 35, 92, 73, 41, 31, 50, 47, 38, 9, 81, 32, 23, 68, 58, 60,
-21, 69, 54, 51, 82, 10, 57, 40, 89, 2, 64, 96, 7, 36, 6, 18,
-59, 84, 11, 67, 95, 94, 5, 33, 20, 65, 56, 52, 77, 16, 66, 78,
-14, 1, 43, 15, 44, 48, 86, 91, 17, 28, 4, 85, 8, 22, 62, 39,
-76, 83, 12, 34, 75, 97, 71, 37, 87, 49, 50, 92, 68, 21, 31, 29,
-23, 30, 58, 60, 32, 38, 35, 61, 73, 81, 41, 9, 47, 53, 3, 90,
-42, 79, 63, 98, 70, 74, 45, 27, 25, 88, 55, 46, 13, 26, 24, 19,
-51, 18, 59, 10, 89, 11, 69, 84, 54, 7, 96, 6, 67, 2, 64, 82,
-36, 40, 57, 71, 17, 83, 22, 91, 12, 75, 4, 39, 34, 85, 76, 37,
-62, 97, 28, 8, 49, 87, 56, 99, 65, 14, 52, 95, 20, 15, 77, 16,
-94, 66, 33, 86, 1, 5, 43, 48, 44, 75, 97, 85, 83, 37, 8, 22,
-39, 76, 71, 62, 17, 12, 91, 49, 87, 4, 34, 28, 96, 59, 11, 7,
-10, 67, 82, 6, 64, 18, 40, 54, 51, 2, 57, 84, 89, 69, 36, 33,
-20, 78, 52, 65, 15, 66, 77, 44, 94, 14, 56, 43, 5, 1, 48, 86,
-16, 95, 79, 63, 19, 90, 55, 46, 53, 26, 42, 24, 27, 98, 70, 88,
-74, 45, 3, 13, 25, 61, 81, 29, 38, 41, 23, 30, 35, 92, 73, 47,
-9, 58, 50, 31, 60, 21, 32, 68, 66, 94, 16, 95, 78, 77, 33, 48,
-56, 65, 86, 20, 1, 15, 5, 14, 52, 44, 43, 58, 30, 35, 31, 60,
-38, 81, 92, 32, 68, 21, 29, 47, 61, 9, 41, 73, 23, 50, 75, 22,
-62, 39, 8, 93, 76, 87, 4, 91, 80, 85, 17, 28, 12, 37, 34, 49,
-83, 3, 26, 74, 42, 13, 98, 88, 25, 63, 79, 19, 27, 24, 46, 72,
-70, 55, 90, 53, 54, 84, 7, 36, 10, 40, 6, 82, 69, 57, 59, 96,
-2, 18, 67, 64, 11, 51, 89, 43, 48, 5, 86, 20, 52, 94, 66, 1,
-14, 15, 78, 44, 77, 16, 33, 65, 95, 56, 34, 39, 12, 85, 93, 80,
-4, 91, 37, 49, 62, 76, 22, 17, 87, 83, 28, 75, 8, 50, 61, 30,
-32, 81, 38, 58, 9, 73, 60, 68, 47, 29, 92, 35, 21, 23, 41, 31,
-10, 89, 40, 57, 6, 96, 69, 84, 64, 36, 51, 7, 67, 59, 18, 82,
-11, 54, 2, 63, 24, 70, 53, 46, 25, 19, 13, 27, 90, 98, 55, 79,
-3, 26, 88, 42, 74, 72), iname = c("BorisDzurek", "JohnNishi",
-"MichaelHeckler", "TomasStarychfojtu", "BoskoBarisic", "AndreSteenkamp",
-"LanceEgan", "CraigColtman", "HansBock", "LloydStruther", "JohnBuckley",
-"OlliToivonen", "YoshikoIzumiya", "PauloMorais", "SandroSoldarini",
-"MarekWalczyk", "AndrewDixon", "StanislawMankou", "YannCaleri",
-"ArturTrzaskos", "VernBarby", "GianlucaMazzocco", "WilliamKavenagh",
-"StefanFlorea", "JamieHarries", "JoseDias", "TerenceCourtoreille",
-"IvicaMagdic", "MikeTinnion", "GeorgeDaniel", "TomasAdam", "MarkYelland",
-"MiroslavAntal", "ChristopheIdre", "ReneKoops", "VilleAnttiJaakkola",
-"SeiichiKomatsuzawa", "CraigFarrar", "TimRolston", "NunoDuarte",
-"BretBishop", "SimonGrootemaat", "PiotrKonieczny", "AlessandroSgrani",
-"PeterBienek", "KimTribe", "JulienDaguillanes", "JouniNeste",
-"StephenVarga", "SimonRobinson", "DamienWalsh", "DesArmstrong",
-"KiyoshiNakagawa", "ScottTucker", "MiroslavKaticic", "AntoninPesek",
-"ToddOishi", "SabahudinPehadzicBIHI", "MarinkoPuskaric", "LucjanBurda",
-"MichalBenatinsky", "JoshStephens", "JohnTrench", "PeterElberse",
-"JarkkoSuominen", "RobertVanRensburg", "DonaldThom", "TakashiKawahara",
-"DavidEricDavies", "LucaPapandrea", "MartinDroz", "HowardCroston",
-"AaronWest", "EricLelouvrier", "JoeRiley", "HelderRodrigues",
-"MisakoIshimura", "JohnBell", "BertrandJacquemin", "JohnHorsey",
-"AntonioRodrigues", "JannePirkkalainen", "PavelMachan", "TorbjornEriksson",
-"StanislawGuzdek", "RickyLehman", "PeterDindic", "JanBartko",
-"AnthonyNaranja", "BrianJeremiah", "JohnBeaven", "JohnFoxton",
-"ValerioSantiAmantini", "JanKwisthout", "GaryGlenYoung", "IvicaMagdic",
-"StefanFlorea", "ReneKoops", "CraigFarrar", "TerenceCourtoreille",
-"GianlucaMazzocco", "ChristopheIdre", "VernBarby", "VilleAnttiJaakkola",
-"SeiichiKomatsuzawa", "MiroslavAntal", "GeorgeDaniel", "WilliamKavenagh",
-"ArturTrzaskos", "JamieHarries", "MarkYelland", "JoseDias", "TomasAdam",
-"MikeTinnion", "PauloMorais", "TomasStarychfojtu", "AndreSteenkamp",
-"BorisDzurek", "BoskoBarisic", "JohnBuckley", "YoshikoIzumiya",
-"StanislawMankou", "MichaelHeckler", "YannCaleri", "MarekWalczyk",
-"OlliToivonen", "HansBock", "CraigColtman", "AndrewDixon", "SandroSoldarini",
-"JohnNishi", "LanceEgan", "LloydStruther", "BretBishop", "KiyoshiNakagawa",
-"ScottTucker", "PiotrKonieczny", "KimTribe", "AntoninPesek",
-"TimRolston", "MiroslavKaticic", "NunoDuarte", "SimonRobinson",
-"StephenVarga", "DesArmstrong", "ToddOishi", "JulienDaguillanes",
-"JouniNeste", "SimonGrootemaat", "DamienWalsh", "PeterBienek",
-"AlessandroSgrani", "JohnFoxton", "JohnBell", "PeterDindic",
-"PavelMachan", "MisakoIshimura", "JanBartko", "BrianJeremiah",
-"JohnHorsey", "StanislawGuzdek", "AnthonyNaranja", "AntonioRodrigues",
-"RickyLehman", "ValerioSantiAmantini", "TorbjornEriksson", "JohnBeaven",
-"BertrandJacquemin", "JannePirkkalainen", "GaryGlenYoung", "JanKwisthout",
-"PeterElberse", "DionDavies", "JohnTrench", "LucaPapandrea",
-"JarkkoSuominen", "SabahudinPehadzicBIHI", "JoshStephens", "AaronWest",
-"RobertVanRensburg", "DonaldThom", "MarinkoPuskaric", "TakashiKawahara",
-"MichalBenatinsky", "HelderRodrigues", "MartinDroz", "LucjanBurda",
-"HowardCroston", "JoeRiley", "EricLelouvrier", "BrianJeremiah",
-"JohnBeaven", "AntonioRodrigues", "PeterDindic", "ValerioSantiAmantini",
-"JannePirkkalainen", "PavelMachan", "StanislawGuzdek", "RickyLehman",
-"JohnFoxton", "TorbjornEriksson", "JohnBell", "JanBartko", "MisakoIshimura",
-"GaryGlenYoung", "JanKwisthout", "JohnHorsey", "AnthonyNaranja",
-"BertrandJacquemin", "StephenVarga", "ScottTucker", "AntoninPesek",
-"SimonRobinson", "PiotrKonieczny", "ToddOishi", "SimonGrootemaat",
-"DesArmstrong", "JouniNeste", "KiyoshiNakagawa", "PeterBienek",
-"NunoDuarte", "BretBishop", "JulienDaguillanes", "AlessandroSgrani",
-"MiroslavKaticic", "KimTribe", "TimRolston", "DamienWalsh", "MichalBenatinsky",
-"JoshStephens", "DavidEricDavies", "JarkkoSuominen", "JohnTrench",
-"AaronWest", "TakashiKawahara", "RobertVanRensburg", "EricLelouvrier",
-"MarinkoPuskaric", "LucaPapandrea", "PeterElberse", "HowardCroston",
-"LucjanBurda", "MartinDroz", "JoeRiley", "HelderRodrigues", "DonaldThom",
-"SabahudinPehadzicBIHI", "BoskoBarisic", "JohnBuckley", "LloydStruther",
-"AndreSteenkamp", "CraigColtman", "AndrewDixon", "PauloMorais",
-"JohnNishi", "BorisDzurek", "LanceEgan", "MarekWalczyk", "YoshikoIzumiya",
-"StanislawMankou", "HansBock", "MichaelHeckler", "YannCaleri",
-"TomasStarychfojtu", "SandroSoldarini", "OlliToivonen", "ArturTrzaskos",
-"MarkYelland", "GianlucaMazzocco", "GeorgeDaniel", "JoseDias",
-"ChristopheIdre", "VernBarby", "WilliamKavenagh", "StefanFlorea",
-"JamieHarries", "MikeTinnion", "TomasAdam", "VilleAnttiJaakkola",
-"IvicaMagdic", "TerenceCourtoreille", "SeiichiKomatsuzawa", "CraigFarrar",
-"MiroslavAntal", "ReneKoops", "TakashiKawahara", "MarinkoPuskaric",
-"DonaldThom", "SabahudinPehadzicBIHI", "DavidEricDavies", "RobertVanRensburg",
-"MichalBenatinsky", "JoeRiley", "PeterElberse", "JohnTrench",
-"HelderRodrigues", "JoshStephens", "MartinDroz", "AaronWest",
-"LucjanBurda", "LucaPapandrea", "JarkkoSuominen", "EricLelouvrier",
-"HowardCroston", "VilleAnttiJaakkola", "VernBarby", "WilliamKavenagh",
-"TerenceCourtoreille", "SeiichiKomatsuzawa", "GeorgeDaniel",
-"MarkYelland", "StefanFlorea", "MiroslavAntal", "ReneKoops",
-"CraigFarrar", "GianlucaMazzocco", "MikeTinnion", "ArturTrzaskos",
-"TomasAdam", "JoseDias", "JamieHarries", "ChristopheIdre", "IvicaMagdic",
-"BrianJeremiah", "PavelMachan", "TorbjornEriksson", "StanislawGuzdek",
-"JannePirkkalainen", "AidenHodgins", "RickyLehman", "JanKwisthout",
-"JohnHorsey", "MisakoIshimura", "RandyTaylor", "AntonioRodrigues",
-"JohnBell", "BertrandJacquemin", "JanBartko", "ValerioSantiAmantini",
-"AnthonyNaranja", "GaryGlenYoung", "PeterDindic", "TomasStarychfojtu",
-"JohnNishi", "MichaelHeckler", "BorisDzurek", "SandroSoldarini",
-"YoshikoIzumiya", "HansBock", "OlliToivonen", "JohnBuckley",
-"BoskoBarisic", "LloydStruther", "MarekWalczyk", "LanceEgan",
-"AndrewDixon", "ThibaultGuilpain", "StanislawMankou", "CraigColtman",
-"AndreSteenkamp", "PauloMorais", "NunoDuarte", "MiroslavKaticic",
-"SimonRobinson", "DamienWalsh", "PiotrKonieczny", "PeterBienek",
-"DesArmstrong", "SimonGrootemaat", "TimRolston", "AlessandroSgrani",
-"ScottTucker", "StephenVarga", "JulienDaguillanes", "KiyoshiNakagawa",
-"ToddOishi", "JouniNeste", "AntoninPesek", "BretBishop", "KimTribe",
-"HowardCroston", "JoeRiley", "LucjanBurda", "HelderRodrigues",
-"JoshStephens", "JarkkoSuominen", "MarinkoPuskaric", "TakashiKawahara",
-"MartinDroz", "LucaPapandrea", "AaronWest", "DavidEricDavies",
-"EricLelouvrier", "RobertVanRensburg", "DonaldThom", "MichalBenatinsky",
-"JohnTrench", "SabahudinPehadzicBIHI", "PeterElberse", "AnthonyNaranja",
-"StanislawGuzdek", "JanBartko", "AntonioRodrigues", "AidenHodgins",
-"RandyTaylor", "JohnHorsey", "MisakoIshimura", "ValerioSantiAmantini",
-"GaryGlenYoung", "TorbjornEriksson", "RickyLehman", "PavelMachan",
-"JohnBell", "JanKwisthout", "PeterDindic", "BertrandJacquemin",
-"BrianJeremiah", "JannePirkkalainen", "IvicaMagdic", "ArturTrzaskos",
-"VernBarby", "MiroslavAntal", "MarkYelland", "GeorgeDaniel",
-"VilleAnttiJaakkola", "TomasAdam", "JamieHarries", "SeiichiKomatsuzawa",
-"ReneKoops", "MikeTinnion", "GianlucaMazzocco", "StefanFlorea",
-"WilliamKavenagh", "CraigFarrar", "ChristopheIdre", "JoseDias",
-"TerenceCourtoreille", "PiotrKonieczny", "KimTribe", "PeterBienek",
-"AlessandroSgrani", "DesArmstrong", "StephenVarga", "TimRolston",
-"MiroslavKaticic", "JouniNeste", "DamienWalsh", "BretBishop",
-"SimonRobinson", "ToddOishi", "ScottTucker", "KiyoshiNakagawa",
-"SimonGrootemaat", "AntoninPesek", "NunoDuarte", "JulienDaguillanes",
-"JohnBuckley", "LanceEgan", "StanislawMankou", "PauloMorais",
-"AndrewDixon", "OlliToivonen", "LloydStruther", "SandroSoldarini",
-"MarekWalczyk", "AndreSteenkamp", "YoshikoIzumiya", "CraigColtman",
-"BoskoBarisic", "TomasStarychfojtu", "JohnNishi", "HansBock",
-"BorisDzurek", "MichaelHeckler", "ThibaultGuilpain"), country = c("SVK",
-"CAN", "WAL", "CZE", "CRO", "RSA", "USA", "AUS", "NED", "NZL",
-"IRE", "FIN", "JPN", "POR", "ITA", "POL", "ENG", "BUL", "FRA",
-"POL", "AUS", "ITA", "IRE", "ROM", "WAL", "POR", "CAN", "CRO",
-"ENG", "USA", "CZE", "RSA", "SVK", "FRA", "NED", "FIN", "JPN",
-"NZL", "RSA", "POR", "USA", "NED", "POL", "ITA", "SVK", "WAL",
-"FRA", "FIN", "MAL", "ENG", "IRE", "NZL", "JPN", "AUS", "CRO",
-"CZE", "CAN", "NDI", "CRO", "POL", "SVK", "USA", "IRE", "NED",
-"FIN", "RSA", "CAN", "JPN", "WAL", "ITA", "CZE", "ENG", "NZL",
-"FRA", "AUS", "POR", "JPN", "NZL", "FRA", "ENG", "POR", "FIN",
-"CZE", "SWE", "POL", "AUS", "CRO", "SVK", "USA", "WAL", "CAN",
-"IRE", "ITA", "NED", "RSA", "CRO", "ROM", "NED", "NZL", "CAN",
-"ITA", "FRA", "AUS", "FIN", "JPN", "SVK", "USA", "IRE", "POL",
-"WAL", "RSA", "POR", "CZE", "ENG", "POR", "CZE", "RSA", "SVK",
-"CRO", "IRE", "JPN", "BUL", "WAL", "FRA", "POL", "FIN", "NED",
-"AUS", "ENG", "ITA", "CAN", "USA", "NZL", "USA", "JPN", "AUS",
-"POL", "WAL", "CZE", "RSA", "CRO", "POR", "ENG", "MAL", "NZL",
-"CAN", "FRA", "FIN", "NED", "IRE", "SVK", "ITA", "IRE", "NZL",
-"CRO", "CZE", "JPN", "SVK", "WAL", "ENG", "POL", "USA", "POR",
-"AUS", "ITA", "SWE", "CAN", "FRA", "FIN", "RSA", "NED", "NED",
-"WAL", "IRE", "ITA", "FIN", "NDI", "USA", "NZL", "RSA", "CAN",
-"CRO", "JPN", "SVK", "POR", "CZE", "POL", "ENG", "AUS", "FRA",
-"WAL", "CAN", "POR", "CRO", "ITA", "FIN", "CZE", "POL", "AUS",
-"IRE", "SWE", "NZL", "SVK", "JPN", "RSA", "NED", "ENG", "USA",
-"FRA", "MAL", "AUS", "CZE", "ENG", "POL", "CAN", "NED", "NZL",
-"FIN", "JPN", "SVK", "POR", "USA", "FRA", "ITA", "CRO", "WAL",
-"RSA", "IRE", "SVK", "USA", "WAL", "FIN", "IRE", "NZL", "JPN",
-"RSA", "FRA", "CRO", "ITA", "NED", "ENG", "POL", "CZE", "AUS",
-"POR", "CAN", "NDI", "CRO", "IRE", "NZL", "RSA", "AUS", "ENG",
-"POR", "CAN", "SVK", "USA", "POL", "JPN", "BUL", "NED", "WAL",
-"FRA", "CZE", "ITA", "FIN", "POL", "RSA", "ITA", "USA", "POR",
-"FRA", "AUS", "IRE", "ROM", "WAL", "ENG", "CZE", "FIN", "CRO",
-"CAN", "JPN", "NZL", "SVK", "NED", "JPN", "CRO", "CAN", "NDI",
-"WAL", "RSA", "SVK", "AUS", "NED", "IRE", "POR", "USA", "CZE",
-"NZL", "POL", "ITA", "FIN", "FRA", "ENG", "FIN", "AUS", "IRE",
-"CAN", "JPN", "USA", "RSA", "ROM", "SVK", "NED", "NZL", "ITA",
-"ENG", "POL", "CZE", "POR", "WAL", "FRA", "CRO", "WAL", "CZE",
-"SWE", "POL", "FIN", "IRE", "AUS", "NED", "ENG", "JPN", "CAN",
-"POR", "NZL", "FRA", "SVK", "ITA", "USA", "RSA", "CRO", "CZE",
-"CAN", "WAL", "SVK", "ITA", "JPN", "NED", "FIN", "IRE", "CRO",
-"NZL", "POL", "USA", "ENG", "FRA", "BUL", "AUS", "RSA", "POR",
-"POR", "CRO", "ENG", "IRE", "POL", "SVK", "NZL", "NED", "RSA",
-"ITA", "AUS", "MAL", "FRA", "JPN", "CAN", "FIN", "CZE", "USA",
-"WAL", "ENG", "AUS", "POL", "POR", "USA", "FIN", "CRO", "JPN",
-"CZE", "ITA", "NZL", "WAL", "FRA", "RSA", "CAN", "SVK", "IRE",
-"NDI", "NED", "USA", "POL", "SVK", "POR", "IRE", "CAN", "ENG",
-"JPN", "ITA", "RSA", "SWE", "AUS", "CZE", "NZL", "NED", "CRO",
-"FRA", "WAL", "FIN", "CRO", "POL", "AUS", "SVK", "RSA", "USA",
-"FIN", "CZE", "WAL", "JPN", "NED", "ENG", "ITA", "ROM", "IRE",
-"NZL", "FRA", "POR", "CAN", "POL", "WAL", "SVK", "ITA", "NZL",
-"MAL", "RSA", "CRO", "FIN", "IRE", "USA", "ENG", "CAN", "AUS",
-"JPN", "NED", "CZE", "POR", "FRA", "IRE", "USA", "BUL", "POR",
-"ENG", "FIN", "NZL", "ITA", "POL", "RSA", "JPN", "AUS", "CRO",
-"CZE", "CAN", "NED", "SVK", "WAL", "FRA")), .Names = c("sector",
-"session", "beatboat", "numbers", "comid", "iname", "country"), row.names = c("1",
-"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
-"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
-"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
-"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
-"47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
-"58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68",
-"69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
-"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
-"91", "92", "93", "94", "95", "96", "97", "98", "99", "100",
-"101", "102", "103", "104", "105", "106", "107", "108", "109",
-"110", "111", "112", "113", "114", "115", "116", "117", "118",
-"119", "120", "121", "122", "123", "124", "125", "126", "127",
-"128", "129", "130", "131", "132", "133", "134", "135", "136",
-"137", "138", "139", "140", "141", "142", "143", "144", "145",
-"146", "147", "148", "149", "150", "151", "152", "153", "154",
-"155", "156", "157", "158", "159", "160", "161", "162", "163",
-"164", "165", "166", "167", "168", "169", "170", "171", "172",
-"173", "174", "175", "176", "177", "178", "179", "180", "181",
-"182", "183", "184", "185", "186", "187", "188", "189", "190",
-"191", "192", "193", "194", "195", "196", "197", "198", "199",
-"200", "201", "202", "203", "204", "205", "206", "207", "208",
-"209", "210", "211", "212", "213", "214", "215", "216", "217",
-"218", "219", "220", "221", "222", "223", "224", "225", "226",
-"227", "228", "229", "230", "231", "232", "233", "234", "235",
-"236", "237", "238", "239", "240", "241", "242", "243", "244",
-"245", "246", "247", "248", "249", "250", "251", "252", "253",
-"254", "255", "256", "257", "258", "259", "260", "261", "262",
-"263", "264", "265", "266", "267", "268", "269", "270", "271",
-"272", "273", "274", "275", "276", "277", "278", "279", "280",
-"281", "282", "283", "284", "285", "286", "287", "288", "289",
-"290", "291", "292", "293", "294", "295", "296", "297", "298",
-"299", "300", "301", "302", "303", "304", "305", "306", "307",
-"308", "309", "310", "311", "312", "313", "314", "315", "316",
-"317", "318", "319", "320", "321", "322", "323", "324", "325",
-"326", "327", "328", "329", "330", "331", "332", "333", "334",
-"335", "336", "337", "338", "339", "340", "341", "342", "343",
-"344", "345", "346", "347", "348", "349", "350", "351", "352",
-"353", "354", "355", "356", "357", "358", "359", "360", "361",
-"362", "363", "364", "365", "366", "367", "368", "369", "370",
-"371", "372", "373", "374", "375", "376", "377", "378", "379",
-"380", "381", "382", "383", "384", "385", "386", "387", "388",
-"389", "390", "391", "392", "393", "394", "395", "396", "397",
-"398", "399", "400", "401", "402", "403", "404", "405", "406",
-"407", "408", "409", "410", "411", "412", "413", "414", "415",
-"416", "417", "418", "419", "420", "421", "422", "423", "424",
-"425", "426", "427", "428", "429", "430", "431", "432", "433",
-"434", "435", "436", "437", "438", "439", "440", "441", "442",
-"443", "444", "445", "446", "447", "448", "449", "450", "451",
-"452", "453", "454", "455", "456", "457", "458", "459", "460",
-"461", "462", "463", "464", "465", "466", "467", "468", "469",
-"470", "471", "472", "473", "474", "475"), class = "data.frame")
diff --git a/data/wffc.nc.rda b/data/wffc.nc.rda
new file mode 100644
index 0000000..8d16499
Binary files /dev/null and b/data/wffc.nc.rda differ
diff --git a/data/wffc.rda b/data/wffc.rda
new file mode 100644
index 0000000..7d9906a
Binary files /dev/null and b/data/wffc.rda differ
diff --git a/data/wffc.teams.R b/data/wffc.teams.R
deleted file mode 100644
index 3aa4aa7..0000000
--- a/data/wffc.teams.R
+++ /dev/null
@@ -1,14 +0,0 @@
-"wffc.teams" <-
-structure(list(country = c("CZE", "NZL", "FRA", "POL", "ITA",
-"ENG", "SVK", "USA", "CAN", "FIN", "IRE", "AUS", "POR", "JPN",
-"RSA", "NED", "WAL", "CRO"), totalPlacings = c(125, 148, 164,
-186, 196, 197, 202, 203, 227, 229, 249, 269, 293, 307, 315, 321,
-328, 333), points = c(241300, 205540, 208040, 170000, 162320,
-167480, 169800, 165960, 147940, 145100, 138160, 119920, 115380,
-90520, 76200, 93080, 58560, 97740), noofcaptures = c(383, 325, 316,
-284, 263, 272, 267, 282, 247, 230, 240, 185, 189, 142, 121, 164,
-86, 166), longestfish = c(540, 627, 585, 580, 580, 689, 615,
-615, 624, 688, 535, 580, 590, 532, 604, 505, 590, 568)), .Names = c("country",
-"totalPlacings", "points", "noofcaptures", "longestfish"), row.names = c("1",
-"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
-"14", "15", "16", "17", "18"), class = "data.frame")
diff --git a/data/wffc.teams.rda b/data/wffc.teams.rda
new file mode 100644
index 0000000..d810566
Binary files /dev/null and b/data/wffc.teams.rda differ
diff --git a/inst/doc/categoricalVGAM.pdf b/inst/doc/categoricalVGAM.pdf
index 9de2443..8bb3f9a 100644
Binary files a/inst/doc/categoricalVGAM.pdf and b/inst/doc/categoricalVGAM.pdf differ
diff --git a/man/CommonVGAMffArguments.Rd b/man/CommonVGAMffArguments.Rd
index e8a8fd6..f1ad488 100644
--- a/man/CommonVGAMffArguments.Rd
+++ b/man/CommonVGAMffArguments.Rd
@@ -15,8 +15,8 @@
\usage{
TypicalVGAMfamilyFunction(lsigma = "loge", esigma = list(), isigma = NULL,
parallel = TRUE, shrinkage.init = 0.95,
- nointercept = NULL, method.init = 1,
- prob.x = c(0.15, 0.85),
+ nointercept = NULL, imethod = 1,
+ prob.x = c(0.15, 0.85), mv = FALSE,
oim = FALSE, nsimEIM = 100, zero = NULL)
}
\arguments{
@@ -81,15 +81,15 @@ TypicalVGAMfamilyFunction(lsigma = "loge", esigma = list(), isigma = NULL,
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} or ... which
specifies the initialization method for some parameters or a specific
parameter.
If failure to converge occurs try the next higher value, and
continue until success.
- For example, \code{method.init = 1} might be the method of moments,
- and \code{method.init = 2} might be another method.
- If no value of \code{method.init} works then it will be necessary
+ For example, \code{imethod = 1} might be the method of moments,
+ and \code{imethod = 2} might be another method.
+ If no value of \code{imethod} works then it will be necessary
to use arguments such as \code{isigma}.
For many \pkg{VGAM} family functions it is advisable to try
this argument with all possible values to safeguard against
@@ -178,7 +178,7 @@ TypicalVGAMfamilyFunction(lsigma = "loge", esigma = list(), isigma = NULL,
For many types of models this method seems to work well and is often
reasonably robust to outliers in the response.
Often this argument is only used if
- the argument \code{method.init} is assigned a certain value.
+ the argument \code{imethod} is assigned a certain value.
}
\item{nointercept}{
@@ -189,6 +189,24 @@ TypicalVGAMfamilyFunction(lsigma = "loge", esigma = list(), isigma = NULL,
}
+ \item{mv}{
+ Logical.
+ Some \pkg{VGAM} family functions allow a multivariate or vector response.
+ If so, then usually the response is a matrix with columns
+ corresponding to the individual response variables.
+ They are all fitted simultaneously.
+ Arguments such as \code{parallel} may then be useful to allow
+ for relationships between the regressions of each response variable.
+ If \code{mv = TRUE} then sometimes the response is interpreted
+ differently, e.g., \code{\link{posbinomial}} chooses the first
+ column of a matrix response as success and combines the other
+ columns as failure, but when \code{mv = TRUE} then each column
+ of the response matrix is the number of successes and the
+ \code{weights} argument is of the same dimension as the
+ response and contains the number of trials.
+
+ }
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
diff --git a/man/Inv.gaussian.Rd b/man/Inv.gaussian.Rd
index b5c554f..cc11c56 100644
--- a/man/Inv.gaussian.Rd
+++ b/man/Inv.gaussian.Rd
@@ -37,6 +37,7 @@ rinv.gaussian(n, mu, lambda)
% \code{qinv.gaussian} gives the quantile function, and
\code{rinv.gaussian} generates random deviates.
+
}
\references{
Johnson, N. L. and Kotz, S. and Balakrishnan, N. (1994)
@@ -64,9 +65,11 @@ New York: Wiley.
}
\note{
Currently \code{qinv.gaussian} is unavailable.
+
}
\seealso{
- \code{\link{inv.gaussianff}}.
+ \code{\link{inv.gaussianff}},
+ \code{\link{wald}}.
}
diff --git a/man/Rcam.Rd b/man/Rcam.Rd
index d324ff5..8df357d 100644
--- a/man/Rcam.Rd
+++ b/man/Rcam.Rd
@@ -2,13 +2,14 @@
\alias{Rcam}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
- Mark the baseline of row and column on a matrix data
+ Mark the Baseline of Row and Column on a Matrix data
}
\description{
- This function will grab the baseline of row and column for
- the rank-zero model of row-column association models or main
- effects models.
+ Rearrange the rows and columns of the input so
+ that the first row and first column are baseline.
+ This function is for rank-zero row-column association models
+ (RCAMs; i.e., general main effects models).
}
\usage{
@@ -18,44 +19,51 @@
%- maybe also 'usage' for other objects documented here.
\arguments{
\item{mat}{
- Matrix of \eqn{r} by \eqn{c}.
- The matrix is better labeled with row and column names.
+ Matrix, of dimension \eqn{r} by \eqn{c}.
+ It is best that it is labelled with row and column names.
}
-\item{rbaseline}{
- Numeric (row number of the matrix y) or can be
- character of row names of the matrix \code{y} that user
- wants it as row baseline or reference.
- Similarly \code{cbaseline} for the column
-
-}
-\item{cbaseline}{
- Numeric of column number of the matrix \code{mat}, or can be
- Character of column names of the matrix \code{mat} that user
- wants it as column baseline or reference.
+\item{rbaseline, cbaseline}{
+ Numeric (row number of the matrix \code{mat}) or
+ character (matching a row name of \code{mat}) that the user
+ wants as the row baseline or reference level.
+ Similarly \code{cbaseline} for the column.
}
}
\details{
- In some regression analysis, it is necessary to put the baseline
- (or reference) of the factor, and as well in rank-zero of
- row-column association model. It should be done by marking
- a baseline on a level of row and column. This is a data
- preprocessing function for \code{\link{rcam}}.
+ This is a data preprocessing function for \code{\link{rcam}}.
+ For rank-zero row-column association models this function
+ establishes the baseline (or reference) levels of the matrix
+ response with respect to the row and columns---these become
+ the new first row and column.
}
\value{
- Matrix of the same dimension as the input, rearranged the first
- row or column.
+ Matrix of the same dimension as the input,
+ with \code{rbaseline} and \code{cbaseline} specifying the
+ first rows and columns.
+ The default is no change in \code{mat}.
}
\author{
-Alfian F. Hadi.
+Alfian F. Hadi and T. W. Yee.
}
\note{
-This is a data preprocessing function for \code{\link{rcam}}.
+ This function is similar to \code{\link{moffset}}; see
+ \code{\link{moffset}} for information about the differences.
+ If numeric, the arguments
+ \code{rbaseline}
+ and
+ \code{cbaseline}
+ differ from arguments
+ \code{roffset}
+ and
+ \code{coffset}
+ in \code{\link{moffset}}
+ by 1 (when elements of the matrix agree).
}
@@ -67,6 +75,8 @@ This is a data preprocessing function for \code{\link{rcam}}.
}
\examples{
-(alcoff.e <- moffset(alcoff, roffset = "6"))
-Rcam(alcoff.e, rbaseline = "11", cbaseline = "Monday")
+(alcoff.e <- moffset(alcoff, roffset = "6", postfix = "*"))
+(aa = Rcam(alcoff, rbaseline = "11", cbaseline = "Sunday"))
+(bb = moffset(alcoff, "11", "Sunday", postfix = "*"))
+aa - bb # Notice the difference!
}
diff --git a/man/VGAM-package.Rd b/man/VGAM-package.Rd
index 18c6a06..72a0afd 100644
--- a/man/VGAM-package.Rd
+++ b/man/VGAM-package.Rd
@@ -87,33 +87,40 @@ Reduced-rank vector generalized linear models.
\emph{Statistical Modelling},
\bold{3}, 15--41.
+
Yee, T. W. and Stephenson, A. G. (2007)
Vector generalized linear and additive extreme value models.
\emph{Extremes}, \bold{10}, 1--19.
+
Yee, T. W. and Wild, C. J. (1996)
Vector generalized additive models.
\emph{Journal of the Royal Statistical Society, Series B, Methodological},
\bold{58}, 481--493.
+
Yee, T. W. (2004)
A new technique for maximum-likelihood
canonical Gaussian ordination.
\emph{Ecological Monographs},
\bold{74}, 685--701.
+
Yee, T. W. (2006)
Constrained additive ordination.
\emph{Ecology}, \bold{87}, 203--213.
+
Yee, T. W. (2008)
The \code{VGAM} Package.
\emph{R News}, \bold{8}, 28--39.
+
Documentation accompanying the \pkg{VGAM} package at
\url{http://www.stat.auckland.ac.nz/~yee/VGAM}
contains further information and examples.
+
}
\keyword{ package }
@@ -134,6 +141,7 @@ fit at y # Sample proportions
weights(fit, type = "prior") # Number of observations
coef(fit, matrix = TRUE) # p.179, in McCullagh and Nelder (1989)
constraints(fit) # Constraint matrices
+summary(fit)
# Example 2; zero-inflated Poisson model
diff --git a/man/alaplace3.Rd b/man/alaplace3.Rd
index 18bdfd6..7abe2b9 100644
--- a/man/alaplace3.Rd
+++ b/man/alaplace3.Rd
@@ -14,7 +14,7 @@
alaplace1(tau = NULL, llocation = "identity", elocation = list(),
ilocation = NULL, kappa = sqrt(tau/(1 - tau)), Scale.arg = 1,
shrinkage.init = 0.95, parallelLocation = FALSE, digt = 4,
- dfmu.init = 3, intparloc = FALSE, method.init = 1)
+ dfmu.init = 3, intparloc = FALSE, imethod = 1)
alaplace2(tau = NULL, llocation = "identity", lscale = "loge",
elocation = list(), escale = list(),
@@ -22,12 +22,12 @@ alaplace2(tau = NULL, llocation = "identity", lscale = "loge",
shrinkage.init = 0.95,
parallelLocation = FALSE, digt = 4, sameScale = TRUE,
dfmu.init = 3, intparloc = FALSE,
- method.init = 1, zero = -2)
+ imethod = 1, zero = -2)
alaplace3(llocation = "identity", lscale = "loge", lkappa = "loge",
elocation = list(), escale = list(), ekappa = list(),
ilocation = NULL, iscale = NULL, ikappa = 1,
- method.init = 1, zero = 2:3)
+ imethod = 1, zero = 2:3)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -80,7 +80,7 @@ alaplace3(llocation = "identity", lscale = "loge", lkappa = "loge",
}
- \item{method.init}{
+ \item{imethod}{
Initialization method.
Either the value 1, 2, 3 or 4.
@@ -89,7 +89,7 @@ alaplace3(llocation = "identity", lscale = "loge", lkappa = "loge",
Degrees of freedom for the cubic smoothing spline fit applied to
get an initial estimate of the location parameter.
See \code{\link{vsmooth.spline}}.
- Used only when \code{method.init = 3}.
+ Used only when \code{imethod = 3}.
}
\item{shrinkage.init}{
@@ -97,7 +97,7 @@ alaplace3(llocation = "identity", lscale = "loge", lkappa = "loge",
The value must be between 0 and 1 inclusive, and
a value of 0 means the individual response values are used,
and a value of 1 means the median or mean is used.
- This argument is used only when \code{method.init = 4}.
+ This argument is used only when \code{imethod = 4}.
See \code{\link{CommonVGAMffArguments}} for more information.
}
diff --git a/man/amh.Rd b/man/amh.Rd
index b4f5cb5..10cc584 100644
--- a/man/amh.Rd
+++ b/man/amh.Rd
@@ -10,7 +10,7 @@
}
\usage{
amh(lalpha = "rhobit", ealpha = list(), ialpha = NULL,
- method.init = 1, nsimEIM = 250)
+ imethod = 1, nsimEIM = 250)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -30,10 +30,10 @@ amh(lalpha = "rhobit", ealpha = list(), ialpha = NULL,
Numeric. Optional initial value for \eqn{\alpha}{alpha}.
By default, an initial value is chosen internally.
If a convergence failure occurs try assigning a different value.
- Assigning a value will override the argument \code{method.init}.
+ Assigning a value will override the argument \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ialpha}.
diff --git a/man/amlexponential.Rd b/man/amlexponential.Rd
index 5db82c6..894f644 100644
--- a/man/amlexponential.Rd
+++ b/man/amlexponential.Rd
@@ -8,7 +8,7 @@
}
\usage{
-amlexponential(w.aml = 1, parallel = FALSE, method.init = 1, digw = 4,
+amlexponential(w.aml = 1, parallel = FALSE, imethod = 1, digw = 4,
link = "loge", earg = list())
}
%- maybe also 'usage' for other objects documented here.
@@ -31,7 +31,7 @@ amlexponential(w.aml = 1, parallel = FALSE, method.init = 1, digw = 4,
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3. Initialization method.
Choose another value if convergence fails.
diff --git a/man/amlnormal.Rd b/man/amlnormal.Rd
index ccf65c8..ad9577d 100644
--- a/man/amlnormal.Rd
+++ b/man/amlnormal.Rd
@@ -12,7 +12,7 @@
}
\usage{
amlnormal(w.aml = 1, parallel = FALSE, lexpectile = "identity",
- eexpectile = list(), iexpectile = NULL, method.init = 1, digw = 4)
+ eexpectile = list(), iexpectile = NULL, imethod = 1, digw = 4)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -38,7 +38,7 @@ amlnormal(w.aml = 1, parallel = FALSE, lexpectile = "identity",
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3. Initialization method.
Choose another value if convergence fails.
diff --git a/man/amlpoisson.Rd b/man/amlpoisson.Rd
index 1718a81..285fc5b 100644
--- a/man/amlpoisson.Rd
+++ b/man/amlpoisson.Rd
@@ -8,7 +8,7 @@
}
\usage{
-amlpoisson(w.aml = 1, parallel = FALSE, method.init = 1, digw = 4,
+amlpoisson(w.aml = 1, parallel = FALSE, imethod = 1, digw = 4,
link = "loge", earg = list())
}
%- maybe also 'usage' for other objects documented here.
@@ -31,7 +31,7 @@ amlpoisson(w.aml = 1, parallel = FALSE, method.init = 1, digw = 4,
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3. Initialization method.
Choose another value if convergence fails.
diff --git a/man/benfUC.Rd b/man/benfUC.Rd
index afd56bf..ead2657 100644
--- a/man/benfUC.Rd
+++ b/man/benfUC.Rd
@@ -56,7 +56,7 @@ obeys the law
P(D=d) = log10(1 + 1/d)}
for \eqn{d=1,\ldots,9}.
This means
-the probability the first\ significant\ digit is 1 is
+the probability the first significant digit is 1 is
approximately \eqn{0.301}, etc.
diff --git a/man/benini.Rd b/man/benini.Rd
index cb6b2f3..b789935 100644
--- a/man/benini.Rd
+++ b/man/benini.Rd
@@ -9,7 +9,7 @@
}
\usage{
benini(y0 = stop("argument 'y0' must be specified"),
- lshape = "loge", earg = list(), ishape = NULL, method.init = 1)
+ lshape = "loge", earg = list(), ishape = NULL, imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -34,7 +34,7 @@ benini(y0 = stop("argument 'y0' must be specified"),
The default is to compute the value internally.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ishape}.
diff --git a/man/beniniUC.Rd b/man/beniniUC.Rd
index 8d4659a..b8e3a14 100644
--- a/man/beniniUC.Rd
+++ b/man/beniniUC.Rd
@@ -11,7 +11,7 @@
\code{shape}.
}
\usage{
-dbenini(x, shape, y0, log=FALSE)
+dbenini(x, shape, y0, log = FALSE)
pbenini(q, shape, y0)
qbenini(p, shape, y0)
rbenini(n, shape, y0)
@@ -25,7 +25,7 @@ rbenini(n, shape, y0)
\item{y0}{the scale parameter \eqn{y_0}{y0}.}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -61,17 +61,18 @@ Hoboken, NJ: Wiley-Interscience.
\examples{
\dontrun{
y0 = 1; shape = exp(1)
-xx = seq(0.0, 4, len=101)
-plot(xx, dbenini(xx, y0=y0,shape=shape), type="l", col="blue", las=1,
- main="Blue is density, red is cumulative distribution function",
- sub="Purple lines are the 10,20,...,90 percentiles", ylim=0:1,
- ylab="", xlab="x")
-abline(h=0, col="blue", lty=2)
-lines(xx, pbenini(xx, y0=y0,shape=shape), col="red")
-probs = seq(0.1, 0.9, by=0.1)
-Q = qbenini(probs, y0=y0,shape=shape)
-lines(Q, dbenini(Q, y0=y0,shape=shape), col="purple", lty=3, type="h")
-pbenini(Q, y0=y0,shape=shape) - probs # Should be all zero
+xx = seq(0.0, 4, len = 101)
+plot(xx, dbenini(xx, y0 = y0,shape = shape), type = "l", col = "blue",
+ main = "Blue is density, orange is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles", ylim = 0:1,
+ las = 1, ylab = "", xlab = "x")
+abline(h = 0, col = "blue", lty = 2)
+lines(xx, pbenini(xx, y0 = y0, shape = shape), col = "orange")
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qbenini(probs, y0 = y0, shape = shape)
+lines(Q, dbenini(Q, y0 = y0, shape = shape),
+ col = "purple", lty = 3, type = "h")
+pbenini(Q, y0 = y0, shape = shape) - probs # Should be all zero
}
}
\keyword{distribution}
diff --git a/man/beta.ab.Rd b/man/beta.ab.Rd
index 994b7d4..ac3b590 100644
--- a/man/beta.ab.Rd
+++ b/man/beta.ab.Rd
@@ -8,10 +8,10 @@
}
\usage{
-beta.ab(lshape1="loge", lshape2="loge",
- eshape1=list(), eshape2=list(),
+beta.ab(lshape1 = "loge", lshape2 = "loge",
+ eshape1 = list(), eshape2 = list(),
i1 = NULL, i2 = NULL, trim = 0.05,
- A = 0, B = 1, parallel=FALSE, zero=NULL)
+ A = 0, B = 1, parallel = FALSE, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -64,6 +64,7 @@ beta.ab(lshape1="loge", lshape2="loge",
(shape1 + shape2)}{E(Y) = A + (B-A) * shape1 /
(shape1 + shape2)}, and these are the fitted values of the object.
+
For the standard beta distribution the variance of \eqn{Y} is
\eqn{shape1 \times shape2 / [(1+shape1+shape2) \times (shape1+shape2)^2]}{
shape1 * shape2 / ((1+shape1+shape2) * (shape1+shape2)^2)}.
@@ -73,12 +74,15 @@ beta.ab(lshape1="loge", lshape2="loge",
\eqn{\mu=shape1 / (shape1 + shape2)}{mu=shape1 / (shape1 + shape2)}
is the mean of \eqn{Y}.
+
Another parameterization of the beta distribution involving the mean
and a precision parameter is implemented in \code{\link{betaff}}.
+
If \eqn{A} and \eqn{B} are unknown, then the \pkg{VGAM} family function
\code{beta4()} can be used to estimate these too.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
@@ -86,6 +90,7 @@ beta.ab(lshape1="loge", lshape2="loge",
\code{\link{rrvglm}}
and \code{\link{vgam}}.
+
}
\references{
Johnson, N. L. and Kotz, S. and Balakrishnan, N. (1995)
@@ -93,14 +98,17 @@ beta.ab(lshape1="loge", lshape2="loge",
\emph{Continuous Univariate Distributions},
2nd edition, Volume 2, New York: Wiley.
+
Gupta, A. K. and Nadarajah, S. (2004)
\emph{Handbook of Beta Distribution and Its Applications},
New York: Marcel Dekker.
+
%Evans, M., Hastings, N. and Peacock, B. (2000)
%\emph{Statistical Distributions},
%New York: Wiley-Interscience, Third edition.
+
Documentation accompanying the \pkg{VGAM} package at
\url{http://www.stat.auckland.ac.nz/~yee}
contains further information and examples.
diff --git a/man/betabin.ab.Rd b/man/betabin.ab.Rd
index 096d30d..5e2fcf1 100644
--- a/man/betabin.ab.Rd
+++ b/man/betabin.ab.Rd
@@ -10,7 +10,7 @@
}
\usage{
betabin.ab(lshape12 = "loge", earg = list(), i1 = 1, i2 = NULL,
- method.init=1, shrinkage.init=0.95, nsimEIM=NULL, zero=NULL)
+ imethod = 1, shrinkage.init = 0.95, nsimEIM = NULL, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -38,12 +38,12 @@ betabin.ab(lshape12 = "loge", earg = list(), i1 = 1, i2 = NULL,
as an intercept only. If assigned, the single value should be either
\code{1} or \code{2}. The default is to model both shape parameters
as functions of the covariates. If a failure to converge occurs,
- try \code{zero=2}.
+ try \code{zero = 2}.
}
- \item{shrinkage.init, nsimEIM, method.init}{
+ \item{shrinkage.init, nsimEIM, imethod}{
See \code{\link{CommonVGAMffArguments}} for more information.
- The argument \code{shrinkage.init} is used only if \code{method.init=2}.
+ The argument \code{shrinkage.init} is used only if \code{imethod = 2}.
Using the argument \code{nsimEIM} may offer large advantages for large
values of \eqn{N} and/or large data sets.
@@ -110,7 +110,7 @@ betabin.ab(lshape12 = "loge", earg = list(), i1 = 1, i2 = NULL,
Suppose \code{fit} is a fitted beta-binomial model. Then
\code{fit at y} contains the sample proportions \eqn{y},
\code{fitted(fit)} returns estimates of \eqn{E(Y)}, and
- \code{weights(fit, type="prior")} returns the number
+ \code{weights(fit, type = "prior")} returns the number
of trials \eqn{N}.
@@ -165,7 +165,7 @@ betabin.ab(lshape12 = "loge", earg = list(), i1 = 1, i2 = NULL,
due to the expected information matrices not being positive-definite
or ill-conditioned over some regions of the parameter space.
If problems occur try setting \code{i1} to be some other
- positive value, using \code{i2} and/or setting \code{zero=2}.
+ positive value, using \code{i2} and/or setting \code{zero = 2}.
This family function may be renamed in the future.
@@ -184,51 +184,52 @@ betabin.ab(lshape12 = "loge", earg = list(), i1 = 1, i2 = NULL,
}
\examples{
# Example 1
-N = 10; s1=exp(1); s2=exp(2)
-y = rbetabin.ab(n=100, size=N, shape1=s1, shape2=s2)
-fit = vglm(cbind(y,N-y) ~ 1, betabin.ab, trace=TRUE)
-coef(fit, matrix=TRUE)
+N = 10; s1 = exp(1); s2 = exp(2)
+y = rbetabin.ab(n = 100, size = N, shape1 = s1, shape2 = s2)
+fit = vglm(cbind(y, N-y) ~ 1, betabin.ab, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
head(fit at misc$rho) # The correlation parameter
-head(cbind(fit at y, weights(fit, type="prior")))
+head(cbind(fit at y, weights(fit, type = "prior")))
# Example 2
-fit = vglm(cbind(R,N-R) ~ 1, betabin.ab, data=lirat, tra=TRUE, subset=N>1)
-coef(fit, matrix=TRUE)
+fit = vglm(cbind(R, N-R) ~ 1, betabin.ab, data = lirat,
+ trace = TRUE, subset = N > 1)
+coef(fit, matrix = TRUE)
Coef(fit)
fit at misc$rho # The correlation parameter
t(fitted(fit))
t(fit at y)
-t(weights(fit, type="prior"))
+t(weights(fit, type = "prior"))
# A "loge" link for the 2 shape parameters is a logistic regression:
all.equal(c(fitted(fit)),
- c(logit(predict(fit)[,1] - predict(fit)[,2], inverse=TRUE)))
+ c(logit(predict(fit)[, 1] - predict(fit)[, 2], inverse = TRUE)))
# Example 3, which is more complicated
lirat = transform(lirat, fgrp = factor(grp))
summary(lirat) # Only 5 litters in group 3
-fit2 = vglm(cbind(R,N-R) ~ fgrp + hb, betabin.ab(zero = 2),
- data = lirat, trace = TRUE, subset = N>1)
-coef(fit2, matrix=TRUE)
+fit2 = vglm(cbind(R, N-R) ~ fgrp + hb, betabin.ab(zero = 2),
+ data = lirat, trace = TRUE, subset = N > 1)
+coef(fit2, matrix = TRUE)
Coef(fit2)
-coef(fit2, matrix=TRUE)[,1] - coef(fit2, matrix=TRUE)[,2] # logit(p)
+coef(fit2, matrix = TRUE)[, 1] - coef(fit2, matrix = TRUE)[, 2] # logit(p)
\dontrun{ with(lirat, plot(hb[N>1], fit2 at misc$rho,
- xlab = "Hemoglobin", ylab="Estimated rho",
+ xlab = "Hemoglobin", ylab = "Estimated rho",
pch = as.character(grp[N>1]), col = grp[N>1]))
}
\dontrun{ # cf. Figure 3 of Moore and Tsiatis (1991)
-with(lirat, plot(hb, R/N, pch=as.character(grp), col=grp, las=1,
- xlab="Hemoglobin level", ylab="Proportion Dead",
- main="Fitted values (lines)"))
+with(lirat, plot(hb, R/N, pch = as.character(grp), col = grp, las = 1,
+ xlab = "Hemoglobin level", ylab = "Proportion Dead",
+ main = "Fitted values (lines)"))
smalldf = with(lirat, lirat[N>1,])
for(gp in 1:4) {
- xx = with(smalldf, hb[grp==gp])
- yy = with(smalldf, fitted(fit2)[grp==gp])
+ xx = with(smalldf, hb[grp == gp])
+ yy = with(smalldf, fitted(fit2)[grp == gp])
ooo = order(xx)
- lines(xx[ooo], yy[ooo], col=gp) } }
+ lines(xx[ooo], yy[ooo], col = gp) } }
}
\keyword{models}
\keyword{regression}
diff --git a/man/betabinUC.Rd b/man/betabinUC.Rd
index 52f8e26..ece7921 100644
--- a/man/betabinUC.Rd
+++ b/man/betabinUC.Rd
@@ -15,11 +15,11 @@
}
\usage{
-dbetabin(x, size, prob, rho, log=FALSE)
-pbetabin(q, size, prob, rho, log.p=FALSE)
+dbetabin(x, size, prob, rho, log = FALSE)
+pbetabin(q, size, prob, rho, log.p = FALSE)
rbetabin(n, size, prob, rho)
-dbetabin.ab(x, size, shape1, shape2, log=FALSE)
-pbetabin.ab(q, size, shape1, shape2, log.p=FALSE)
+dbetabin.ab(x, size, shape1, shape2, log = FALSE)
+pbetabin.ab(q, size, shape1, shape2, log.p = FALSE)
rbetabin.ab(n, size, shape1, shape2)
}
\arguments{
@@ -63,7 +63,7 @@ rbetabin.ab(n, size, shape1, shape2)
probability of success is not a constant but it is generated from a
beta distribution with parameters \code{shape1} and \code{shape2}.
Note that the mean of this beta distribution is
- \code{mu=shape1/(shape1+shape2)}, which therefore is the
+ \code{mu = shape1/(shape1+shape2)}, which therefore is the
mean or the probability of success.
See \code{\link{betabinomial}} and \code{\link{betabin.ab}},
@@ -90,26 +90,26 @@ rbetabin.ab(n, size, shape1, shape2)
}
\examples{
\dontrun{
-N = 9; xx = 0:N; s1=2; s2=3
-dy = dbetabin.ab(xx, size=N, shape1=s1, shape2=s2)
-barplot(rbind(dy, dbinom(xx, size=N, prob=s1/(s1+s2))),
- beside = TRUE, col = c("blue","green"), las=1,
- main=paste("Beta-binomial (size=",N,", shape1=",s1,
+N = 9; xx = 0:N; s1 = 2; s2 = 3
+dy = dbetabin.ab(xx, size = N, shape1 = s1, shape2 = s2)
+barplot(rbind(dy, dbinom(xx, size = N, prob = s1/(s1+s2))),
+ beside = TRUE, col = c("blue","green"), las = 1,
+ main = paste("Beta-binomial (size=",N,", shape1=",s1,
", shape2=",s2,") (blue) vs\n",
- " Binomial(size=", N, ", prob=", s1/(s1+s2), ") (green)", sep=""),
- names.arg = as.character(xx), cex.main=0.8)
+ " Binomial(size=", N, ", prob=", s1/(s1+s2), ") (green)", sep = ""),
+ names.arg = as.character(xx), cex.main = 0.8)
sum(dy*xx) # Check expected values are equal
-sum(dbinom(xx, size=N, prob=s1/(s1+s2))*xx)
-cumsum(dy) - pbetabin.ab(xx, N, shape1=s1, shape2=s2)
+sum(dbinom(xx, size = N, prob = s1/(s1+s2))*xx)
+cumsum(dy) - pbetabin.ab(xx, N, shape1 = s1, shape2 = s2)
-y = rbetabin.ab(n=10000, size=N, shape1=s1, shape2=s2)
+y = rbetabin.ab(n = 10000, size = N, shape1 = s1, shape2 = s2)
ty = table(y)
barplot(rbind(dy, ty/sum(ty)),
- beside = TRUE, col = c("blue","red"), las=1,
- main=paste("Beta-binomial (size=",N,", shape1=",s1,
+ beside = TRUE, col = c("blue","red"), las = 1,
+ main = paste("Beta-binomial (size=",N,", shape1=",s1,
", shape2=",s2,") (blue) vs\n",
" Random generated beta-binomial(size=", N, ", prob=", s1/(s1+s2),
- ") (red)", sep=""), cex.main=0.8,
+ ") (red)", sep = ""), cex.main = 0.8,
names.arg = as.character(xx))
}
}
diff --git a/man/betabinomial.Rd b/man/betabinomial.Rd
index 37a88d2..ece5ee7 100644
--- a/man/betabinomial.Rd
+++ b/man/betabinomial.Rd
@@ -8,8 +8,9 @@
}
\usage{
-betabinomial(lmu="logit", lrho="logit", emu=list(), erho=list(), irho=NULL,
- method.init=1, shrinkage.init=0.95, nsimEIM=NULL, zero=2)
+betabinomial(lmu = "logit", lrho = "logit", emu = list(), erho = list(),
+ irho = NULL, imethod = 1, shrinkage.init = 0.95,
+ nsimEIM = NULL, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -29,11 +30,11 @@ betabinomial(lmu="logit", lrho="logit", emu=list(), erho=list(), irho=NULL,
Optional initial value for the correlation parameter.
If given, it must be in \eqn{(0,1)}, and is recyled to the necessary
length. Assign this argument a value if a convergence failure occurs.
- Having \code{irho=NULL} means an initial value is obtained internally,
+ Having \code{irho = NULL} means an initial value is obtained internally,
though this can give unsatisfactory results.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \ldots,
which specifies the initialization method for \eqn{\mu}{mu}.
If failure to converge occurs try the another value
@@ -46,13 +47,13 @@ betabinomial(lmu="logit", lrho="logit", emu=list(), erho=list(), irho=NULL,
If assigned, the single value should be either \code{1} or \code{2}.
The default is to have a single correlation parameter.
To model both parameters as functions of the covariates assign
- \code{zero=NULL}.
+ \code{zero = NULL}.
See \code{\link{CommonVGAMffArguments}} for more information.
}
\item{shrinkage.init, nsimEIM}{
See \code{\link{CommonVGAMffArguments}} for more information.
- The argument \code{shrinkage.init} is used only if \code{method.init=2}.
+ The argument \code{shrinkage.init} is used only if \code{imethod = 2}.
Using the argument \code{nsimEIM} may offer large advantages for large
values of \eqn{N} and/or large data sets.
@@ -156,21 +157,21 @@ betabinomial(lmu="logit", lrho="logit", emu=list(), erho=list(), irho=NULL,
is currently not implemented in the \pkg{VGAM} package as it has
range-restrictions for the correlation parameter that are currently
too difficult to handle in this package.
- However, try \code{lrho="rhobit"}.
+ However, try \code{lrho = "rhobit"}.
}
\section{Warning }{
If the estimated rho parameter is close to zero then it pays to try
- \code{lrho="rhobit"}. One day this may become the default link function.
+ \code{lrho = "rhobit"}. One day this may become the default link function.
This family function is prone to numerical difficulties
due to the expected information matrices not being positive-definite
or ill-conditioned over some regions of the parameter space.
If problems occur try setting \code{irho} to some numerical value,
- \code{nsimEIM=100}, say,
+ \code{nsimEIM = 100}, say,
or else use \code{etastart} argument of
\code{\link{vglm}}, etc.
@@ -189,11 +190,11 @@ betabinomial(lmu="logit", lrho="logit", emu=list(), erho=list(), irho=NULL,
# Example 1
bbdat = data.frame(N = 10, mu = 0.5, rho = 0.8)
bbdat = transform(bbdat,
- y = rbetabin(n=100, size=N, prob=mu, rho=rho))
-fit = vglm(cbind(y,N-y) ~ 1, betabinomial, bbdat, trace=TRUE)
-coef(fit, matrix=TRUE)
+ y = rbetabin(n=100, size = N, prob = mu, rho = rho))
+fit = vglm(cbind(y, N-y) ~ 1, betabinomial, bbdat, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
-head(cbind(fit at y, weights(fit, type="prior")))
+head(cbind(fit at y, weights(fit, type = "prior")))
# Example 2
@@ -211,20 +212,20 @@ lirat = transform(lirat, fgrp = factor(grp))
summary(lirat) # Only 5 litters in group 3
fit2 = vglm(cbind(R, N-R) ~ fgrp + hb, betabinomial(zero = 2),
data = lirat, trace = TRUE, subset = N > 1)
-coef(fit2, matrix=TRUE)
+coef(fit2, matrix = TRUE)
\dontrun{ with(lirat, plot(hb[N>1], fit2 at misc$rho,
- xlab="Hemoglobin", ylab="Estimated rho",
- pch=as.character(grp[N>1]), col=grp[N>1])) }
+ xlab = "Hemoglobin", ylab = "Estimated rho",
+ pch = as.character(grp[N>1]), col = grp[N>1])) }
\dontrun{ # cf. Figure 3 of Moore and Tsiatis (1991)
-with(lirat, plot(hb, R/N, pch=as.character(grp), col=grp, las=1,
- xlab="Hemoglobin level", ylab="Proportion Dead",
- main="Fitted values (lines)"))
+with(lirat, plot(hb, R/N, pch = as.character(grp), col = grp, las = 1,
+ xlab = "Hemoglobin level", ylab = "Proportion Dead",
+ main = "Fitted values (lines)"))
smalldf = with(lirat, lirat[N>1,])
for(gp in 1:4) {
- xx = with(smalldf, hb[grp==gp])
- yy = with(smalldf, fitted(fit2)[grp==gp])
+ xx = with(smalldf, hb[grp == gp])
+ yy = with(smalldf, fitted(fit2)[grp == gp])
ooo = order(xx)
- lines(xx[ooo], yy[ooo], col=gp) } }
+ lines(xx[ooo], yy[ooo], col = gp) } }
}
\keyword{models}
\keyword{regression}
diff --git a/man/betaff.Rd b/man/betaff.Rd
index ae58016..a5ffa49 100644
--- a/man/betaff.Rd
+++ b/man/betaff.Rd
@@ -7,10 +7,10 @@
}
\usage{
-betaff(A=0, B=1,
- lmu=if(A==0 & B==1) "logit" else "elogit", lphi="loge",
- emu=if(lmu=="elogit") list(min=A,max=B) else list(),
- ephi=list(), imu=NULL, iphi=NULL, method.init=1, zero=NULL)
+betaff(A = 0, B = 1,
+ lmu = if (A == 0 & B == 1) "logit" else "elogit", lphi = "loge",
+ emu = if (lmu == "elogit") list(min = A, max = B) else list(),
+ ephi = list(), imu = NULL, iphi = NULL, imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -37,7 +37,7 @@ betaff(A=0, B=1,
\code{initialize} slot.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
@@ -116,21 +116,21 @@ betaff(A=0, B=1,
}
\examples{
-betadat = data.frame(y = rbeta(nn <- 1000, shape1=exp(0), shape2=exp(1)))
-fit = vglm(y ~ 1, betaff, betadat, trace=TRUE)
-coef(fit, matrix=TRUE)
+bdata = data.frame(y = rbeta(nn <- 1000, shape1 = exp(0), shape2 = exp(1)))
+fit = vglm(y ~ 1, betaff, bdata, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit) # Useful for intercept-only models
# General A and B, and with a covariate
-betadat = transform(betadat, x = runif(nn))
-betadat = transform(betadat, mu = logit(0.5-x, inverse=TRUE),
- prec = exp(3+x)) # prec == phi
-betadat = transform(betadat, shape2 = prec * (1-mu),
- shape1 = mu * prec)
-betadat = transform(betadat, y = rbeta(nn, shape1=shape1, shape2=shape2))
-betadat = transform(betadat, Y = 5 + 8 * y) # From 5 to 13, not 0 to 1
-fit = vglm(Y ~ x, betaff(A=5, B=13), betadat, trace=TRUE)
-coef(fit, mat=TRUE)
+bdata = transform(bdata, x2 = runif(nn))
+bdata = transform(bdata, mu = logit(0.5 - x2, inverse = TRUE),
+ prec = exp(3 + x2)) # prec == phi
+bdata = transform(bdata, shape2 = prec * (1-mu),
+ shape1 = mu * prec)
+bdata = transform(bdata, y = rbeta(nn, shape1 = shape1, shape2 = shape2))
+bdata = transform(bdata, Y = 5 + 8 * y) # From 5 to 13, not 0 to 1
+fit = vglm(Y ~ x2, betaff(A = 5, B = 13), bdata, trace = TRUE)
+coef(fit, matrix = TRUE)
}
\keyword{models}
\keyword{regression}
diff --git a/man/bilogis4UC.Rd b/man/bilogis4UC.Rd
index cbdcb5e..8a3c2d2 100644
--- a/man/bilogis4UC.Rd
+++ b/man/bilogis4UC.Rd
@@ -10,9 +10,9 @@
}
\usage{
-dbilogis4(x1, x2, loc1=0, scale1=1, loc2=0, scale2=1, log=FALSE)
-pbilogis4(q1, q2, loc1=0, scale1=1, loc2=0, scale2=1)
-rbilogis4(n, loc1=0, scale1=1, loc2=0, scale2=1)
+dbilogis4(x1, x2, loc1 = 0, scale1 = 1, loc2 = 0, scale2 = 1, log = FALSE)
+pbilogis4(q1, q2, loc1 = 0, scale1 = 1, loc2 = 0, scale2 = 1)
+rbilogis4(n, loc1 = 0, scale1 = 1, loc2 = 0, scale2 = 1)
}
\arguments{
\item{x1, x2, q1, q2}{vector of quantiles.}
@@ -22,7 +22,7 @@ rbilogis4(n, loc1=0, scale1=1, loc2=0, scale2=1)
\item{scale1, scale2}{the scale parameters \eqn{s_1}{s1} and \eqn{s_2}{s2}.}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -39,6 +39,7 @@ Bivariate logistic distributions.
\emph{Journal of the American Statistical Association},
\bold{56}, 335--349.
+
}
\author{ T. W. Yee }
\details{
@@ -46,30 +47,30 @@ Bivariate logistic distributions.
estimating the four parameters by maximum likelihood estimation, for
the formula of the cumulative distribution function and other details.
+
}
%\note{
%}
\seealso{
\code{\link{bilogistic4}}.
+
}
\examples{
-\dontrun{
-par(mfrow=c(1,3))
+\dontrun{ par(mfrow = c(1, 3))
n = 2000
-ymat = rbilogis4(n, loc1=5, loc2=7, scale2=exp(1))
-myxlim = c(-2,15)
-myylim = c(-10,30)
-plot(ymat, xlim=myxlim, ylim=myylim)
+ymat = rbilogis4(n, loc1 = 5, loc2 = 7, scale2 = exp(1))
+myxlim = c(-2, 15)
+myylim = c(-10, 30)
+plot(ymat, xlim = myxlim, ylim = myylim)
N = 100
-x1 = seq(myxlim[1], myxlim[2], len=N)
-x2 = seq(myylim[1], myylim[2], len=N)
+x1 = seq(myxlim[1], myxlim[2], len = N)
+x2 = seq(myylim[1], myylim[2], len = N)
ox = expand.grid(x1, x2)
-z = dbilogis4(ox[,1], ox[,2], loc1=5, loc2=7, scale2=exp(1))
-contour(x1, x2, matrix(z, N, N), main="density")
-z = pbilogis4(ox[,1], ox[,2], loc1=5, loc2=7, scale2=exp(1))
-contour(x1, x2, matrix(z, N, N), main="cdf")
-}
+z = dbilogis4(ox[,1], ox[,2], loc1 = 5, loc2 = 7, scale2 = exp(1))
+contour(x1, x2, matrix(z, N, N), main = "density")
+z = pbilogis4(ox[,1], ox[,2], loc1 = 5, loc2 = 7, scale2 = exp(1))
+contour(x1, x2, matrix(z, N, N), main = "cdf") }
}
\keyword{distribution}
diff --git a/man/bilogistic4.Rd b/man/bilogistic4.Rd
index 0b0f767..bf87117 100644
--- a/man/bilogistic4.Rd
+++ b/man/bilogistic4.Rd
@@ -8,9 +8,9 @@
}
\usage{
-bilogistic4(llocation="identity", lscale="loge",
- iloc1=NULL, iscale1=NULL, iloc2=NULL, iscale2=NULL,
- method.init=1, zero=NULL)
+bilogistic4(llocation = "identity", lscale = "loge",
+ iloc1 = NULL, iscale1 = NULL, iloc2 = NULL, iscale2 = NULL,
+ imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -28,13 +28,13 @@ bilogistic4(llocation="identity", lscale="loge",
}
\item{iloc1, iloc2}{ Initial values for the location parameters.
By default, initial values are chosen internally using
- \code{method.init}. Assigning values here will override
- the argument \code{method.init}. }
+ \code{imethod}. Assigning values here will override
+ the argument \code{imethod}. }
\item{iscale1, iscale2}{ Initial values for the scale parameters.
By default, initial values are chosen internally using
- \code{method.init}. Assigning values here will override
- the argument \code{method.init}. }
- \item{method.init}{ An integer with value \code{1} or \code{2} which
+ \code{imethod}. Assigning values here will override
+ the argument \code{imethod}. }
+ \item{imethod}{ An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value. }
\item{zero}{ An integer-valued vector specifying which
@@ -113,14 +113,14 @@ Hoboken, N.J.: Wiley-Interscience.
\code{\link{rbilogis4}}.
}
\examples{
-ymat = rbilogis4(n <- 1000, loc1=5, loc2=7, scale2=exp(1))
+ymat = rbilogis4(n <- 1000, loc1 = 5, loc2 = 7, scale2 = exp(1))
\dontrun{plot(ymat)}
-fit = vglm(ymat ~ 1, fam=bilogistic4, trace=TRUE)
-coef(fit, matrix=TRUE)
+fit = vglm(ymat ~ 1, fam = bilogistic4, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
head(fitted(fit))
vcov(fit)
-head(weights(fit, type="w"))
+head(weights(fit, type = "w"))
summary(fit)
}
\keyword{models}
diff --git a/man/binom2.or.Rd b/man/binom2.or.Rd
index 78157ff..96ce79b 100644
--- a/man/binom2.or.Rd
+++ b/man/binom2.or.Rd
@@ -142,7 +142,7 @@ binom2.or(lmu = "logit", lmu1 = lmu, lmu2 = lmu, loratio = "loge",
Yee, T. W. and Dirnbock, T. (2009)
Models for analysing species' presence/absence data
at two time points.
- Journal of Theoretical Biology, \bold{259}. In press.
+ Journal of Theoretical Biology, \bold{259}(4), 684--694.
Documentation accompanying the \pkg{VGAM} package at
@@ -207,16 +207,14 @@ summary(fit)
coef(fit, matrix=TRUE)
c(weights(fit, type="prior")) * fitted(fit) # Table 6.8
-\dontrun{
-with(coalminers, matplot(Age, fitted(fit), type="l", las=1,
+\dontrun{ with(coalminers, matplot(Age, fitted(fit), type="l", las=1,
xlab="(age - 42) / 5", lwd=2))
with(coalminers, matpoints(Age, fit at y, col=1:4))
legend(x=-4, y=0.5, lty=1:4, col=1:4, lwd=2,
legend=c("1 = (Breathlessness=0, Wheeze=0)",
"2 = (Breathlessness=0, Wheeze=1)",
"3 = (Breathlessness=1, Wheeze=0)",
- "4 = (Breathlessness=1, Wheeze=1)"))
-}
+ "4 = (Breathlessness=1, Wheeze=1)")) }
}
\keyword{models}
\keyword{regression}
diff --git a/man/binom2.rho.Rd b/man/binom2.rho.Rd
index 7273249..1a47112 100644
--- a/man/binom2.rho.Rd
+++ b/man/binom2.rho.Rd
@@ -10,7 +10,7 @@
}
\usage{
binom2.rho(lrho = "rhobit", erho=list(), imu1 = NULL, imu2 = NULL,
- irho = NULL, method.init = 1,
+ irho = NULL, imethod = 1,
zero = 3, exchangeable = FALSE, nsimEIM = NULL)
binom2.Rho(rho = 0, imu1 = NULL, imu2 = NULL,
exchangeable = FALSE, nsimEIM = NULL)
@@ -51,7 +51,7 @@ binom2.Rho(rho = 0, imu1 = NULL, imu2 = NULL,
be equal.
}
- \item{method.init, nsimEIM}{
+ \item{imethod, nsimEIM}{
See \code{\link{CommonVGAMffArguments}} for more information.
A value of at least 100 is recommended;
the larger the value the better.
@@ -147,7 +147,7 @@ Freedman, D. A. (2010)
Converge problems can occur.
If so, assign \code{irho} a range of
values and monitor convergence (e.g., set \code{trace = TRUE}).
- Else try \code{method.init}.
+ Else try \code{imethod}.
Practical experience shows that local solutions can occur,
and that \code{irho} needs to be quite close to the (global)
solution.
diff --git a/man/binomialff.Rd b/man/binomialff.Rd
index 8526951..0768160 100644
--- a/man/binomialff.Rd
+++ b/man/binomialff.Rd
@@ -162,6 +162,7 @@ binomialff(link = "logit", earg = list(), dispersion = 1, mv = FALSE,
\code{\link{cqo}},
\code{\link{cao}},
\code{\link{betabinomial}},
+ \code{\link{posbinomial}},
\code{\link{zibinomial}},
\code{\link{dexpbinomial}},
\code{\link{mbinomial}},
diff --git a/man/binormal.Rd b/man/binormal.Rd
new file mode 100644
index 0000000..42aee8d
--- /dev/null
+++ b/man/binormal.Rd
@@ -0,0 +1,105 @@
+\name{binormal}
+\alias{binormal}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{ Bivariate normal distribution }
+\description{
+ Maximum likelihood estimation of the five parameters of a bivariate
+ normal distribution.
+
+}
+\usage{
+binormal(lmean1 = "identity", emean1 = list(),
+ lmean2 = "identity", emean2 = list(),
+ lsd1 = "loge", esd1 = list(),
+ lsd2 = "loge", esd2 = list(),
+ lrho = "rhobit", erho = list(),
+ imean1 = NULL, imean2 = NULL,
+ isd1 = NULL, isd2 = NULL,
+ irho = NULL, imethod = 1,
+ equalmean = FALSE, equalsd = FALSE,
+ zero = 3:5)
+
+
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{lmean1, lmean2, lsd1, lsd2, lrho}{
+ Link functions applied to the means, standard deviations and
+ \code{rho} parameters.
+ See \code{\link{Links}} for more choices.
+ Being positive quantities, a log link is the default for the
+ standard deviations.
+
+ }
+ \item{emean1, emean2, esd1, esd2, erho}{
+ List. Extra argument for the links.
+ See \code{earg} in \code{\link{Links}} for general information.
+
+ }
+ \item{imean1, imean2, isd1, isd2, irho, imethod, zero}{
+ See \code{\link{CommonVGAMffArguments}} for more information.
+
+ }
+ \item{equalmean, equalsd}{
+ Logical or formula.
+ Constrains the means or the standard deviations to be equal.
+ Only one of these arguments may be assigned a value.
+
+ }
+
+}
+\details{
+ For the bivariate normal distribution,
+ this fits a linear model (LM) to the means, and
+ by default,
+ the other parameters are intercept-only.
+ The response should be a two-column matrix.
+ The correlation parameter is \code{rho},
+ which lies between \eqn{-1} and \eqn{1}
+ (thus the \code{\link{rhobit}} link is a reasonable choice).
+ The fitted means are returned as the fitted values, which is in
+ the form of a two-column matrix.
+ Fisher scoring is implemented.
+
+}
+\value{
+ An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
+ The object is used by modelling functions such as \code{\link{vglm}},
+ and \code{\link{vgam}}.
+
+
+}
+%\references{
+%
+%}
+
+\author{ T. W. Yee }
+\note{
+ If both equal means and equal standard deviations are desired
+ then use something like
+ \code{constraints = list("(Intercept)" = matrix(c(1,1,0,0,0, 0,0,1,1,0 ,0,0,0,0,1), 5, 3))}
+ and maybe
+ \code{zero = NULL}
+ etc.
+
+
+}
+
+\seealso{
+ \code{\link{normal1}},
+ \code{\link{gaussianff}}.
+
+}
+\examples{
+nn <- 1000
+mydat = data.frame(x2 = runif(nn), x3 = runif(nn))
+mydat = transform(mydat, y1 = rnorm(nn, 1 + 2*x2),
+ y2 = rnorm(nn, 3 + 4*x2))
+fit1 = vglm(cbind(y1, y2) ~ x2,
+ binormal(equalsd = TRUE), data = mydat, trace = TRUE)
+coef(fit1, matrix = TRUE)
+constraints(fit1)
+summary(fit1)
+}
+\keyword{models}
+\keyword{regression}
diff --git a/man/bisa.Rd b/man/bisa.Rd
index 7d4aaa5..55e24c5 100644
--- a/man/bisa.Rd
+++ b/man/bisa.Rd
@@ -10,7 +10,7 @@
\usage{
bisa(lshape = "loge", lscale = "loge",
eshape = list(), escale = list(),
- ishape = NULL, iscale = 1, method.init = 1, zero = NULL)
+ ishape = NULL, iscale = 1, imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -29,10 +29,10 @@ bisa(lshape = "loge", lscale = "loge",
\item{iscale, ishape}{
Initial values for \eqn{a} and \eqn{b}.
A \code{NULL} means an initial value is chosen internally using
- \code{method.init}.
+ \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for
diff --git a/man/bivgamma.mckay.Rd b/man/bivgamma.mckay.Rd
index 5226254..27e423a 100644
--- a/man/bivgamma.mckay.Rd
+++ b/man/bivgamma.mckay.Rd
@@ -10,7 +10,7 @@
\usage{
bivgamma.mckay(lscale = "loge", lshape1 = "loge", lshape2 = "loge",
iscale = NULL, ishape1 = NULL, ishape2 = NULL,
- method.init=1, zero = 1)
+ imethod=1, zero = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -25,7 +25,7 @@ bivgamma.mckay(lscale = "loge", lshape1 = "loge", lshape2 = "loge",
The default is to compute them internally.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}}.
}
diff --git a/man/borel.tanner.Rd b/man/borel.tanner.Rd
index a29faaa..0de9076 100644
--- a/man/borel.tanner.Rd
+++ b/man/borel.tanner.Rd
@@ -8,7 +8,7 @@
}
\usage{
-borel.tanner(Qsize=1, link="logit", earg=list(), method.init=1)
+borel.tanner(Qsize=1, link="logit", earg=list(), imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -22,7 +22,7 @@ borel.tanner(Qsize=1, link="logit", earg=list(), method.init=1)
See \code{\link{Links}} for more choices and for general information.
}
- \item{method.init}{
+ \item{imethod}{
See \code{\link{CommonVGAMffArguments}}.
Valid values are 1, 2, 3 or 4.
diff --git a/man/calibrate.qrrvglm.control.Rd b/man/calibrate.qrrvglm.control.Rd
index f93103e..b99e281 100644
--- a/man/calibrate.qrrvglm.control.Rd
+++ b/man/calibrate.qrrvglm.control.Rd
@@ -54,12 +54,14 @@ calibrate.qrrvglm.control(object, trace = FALSE, Method.optim = "BFGS",
and \code{gridSize}. These arguments should be used inside their
call to \code{\link{calibrate.qrrvglm}}, not this function
directly.
+
}
\value{
A list which with the following components.
\item{trace }{Numeric (even though the input can be logical). }
\item{gridSize }{Positive integer. }
\item{varlvI }{Logical.}
+
}
\references{
Yee, T. W. (2005)
@@ -77,10 +79,10 @@ On constrained and unconstrained quadratic ordination.
\seealso{
\code{\link{calibrate.qrrvglm}},
\code{\link{Coef.qrrvglm}}.
+
}
\examples{
-\dontrun{
-hspider[,1:6] = scale(hspider[,1:6]) # Needed when ITol = TRUE
+\dontrun{ hspider[,1:6] = scale(hspider[,1:6]) # Needed when ITol = TRUE
set.seed(123)
p1 = cqo(cbind(Alopacce, Alopcune, Pardlugu, Pardnigr,
Pardpull, Trocterr, Zoraspin) ~
@@ -90,15 +92,15 @@ p1 = cqo(cbind(Alopacce, Alopcune, Pardlugu, Pardnigr,
sort(p1 at misc$deviance.Bestof) # A history of all the iterations
siteNos = 1:2 # Calibrate these sites
-cp1 = calibrate(p1, new=data.frame(p1 at y[siteNos,]), trace=TRUE)
+cp1 = calibrate(p1, new = data.frame(p1 at y[siteNos,]), trace = TRUE)
}
\dontrun{
# Graphically compare the actual site scores with their calibrated values
-persp(p1, main="Site scores: solid=actual, dashed=calibrated",
- label=TRUE, col="blue", las=1)
-abline(v=lv(p1)[siteNos], lty=1, col=1:length(siteNos)) # actual site scores
-abline(v=cp1, lty=2, col=1:length(siteNos)) # calibrated values
+persp(p1, main = "Site scores: solid=actual, dashed=calibrated",
+ label = TRUE, col = "blue", las = 1)
+abline(v = lv(p1)[siteNos], lty = 1, col = 1:length(siteNos)) # actual site scores
+abline(v = cp1, lty = 2, col = 1:length(siteNos)) # calibrated values
}
}
\keyword{models}
diff --git a/man/cao.control.Rd b/man/cao.control.Rd
index f548026..35389c7 100644
--- a/man/cao.control.Rd
+++ b/man/cao.control.Rd
@@ -10,12 +10,12 @@
}
\usage{
-cao.control(Rank=1, all.knots = FALSE, criterion="deviance", Cinit=NULL,
+cao.control(Rank = 1, all.knots = FALSE, criterion = "deviance", Cinit=NULL,
Crow1positive=TRUE, epsilon = 1.0e-05, Etamat.colmax = 10,
GradientFunction=FALSE, iKvector = 0.1, iShape = 0.1,
Norrr = ~ 1, SmallNo = 5.0e-13, Use.Init.Poisson.QO=TRUE,
Bestof = if (length(Cinit)) 1 else 10, maxitl = 10,
- method.init = 1, bf.epsilon = 1.0e-7, bf.maxit = 10,
+ imethod = 1, bf.epsilon = 1.0e-7, bf.maxit = 10,
Maxit.optim = 250, optim.maxit = 20, SD.sitescores = 1.0,
SD.Cinit = 0.02, trace = TRUE, df1.nl = 2.5, df2.nl = 2.5,
spar1 = 0, spar2 = 0, ...)
@@ -149,7 +149,7 @@ cao.control(Rank=1, all.knots = FALSE, criterion="deviance", Cinit=NULL,
Newton-Raphson/Fisher-scoring/local-scoring iterations allowed.
}
- \item{method.init}{
+ \item{imethod}{
See \code{\link{qrrvglm.control}}.
}
@@ -293,14 +293,14 @@ sort(ap1 at misc$deviance.Bestof) # A history of all the iterations
Coef(ap1)
par(mfrow=c(2,3)) # All or most of the curves are unimodal; some are
-plot(ap1, lcol="blue") # quite symmetric. Hence a CQO model should be ok
+plot(ap1, lcol = "blue") # quite symmetric. Hence a CQO model should be ok
par(mfrow=c(1,1), las=1)
index = 1:ncol(ap1 at y) # lvplot is jagged because only 28 sites
-lvplot(ap1, lcol=index, pcol=index, y=TRUE)
+lvplot(ap1, lcol = index, pcol = index, y=TRUE)
trplot(ap1, label=TRUE, col=index)
-abline(a=0, b=1, lty=2)
+abline(a = 0, b = 1, lty = 2)
persp(ap1, label=TRUE, col=1:4)
}
diff --git a/man/cauchy.Rd b/man/cauchy.Rd
index dbe95c0..6b3b20c 100644
--- a/man/cauchy.Rd
+++ b/man/cauchy.Rd
@@ -12,9 +12,9 @@
cauchy(llocation="identity", lscale="loge", elocation=list(),
escale=list(), ilocation=NULL, iscale=NULL,
iprobs = seq(0.2, 0.8, by=0.2),
- method.init=1, nsimEIM=NULL, zero=2)
+ imethod=1, nsimEIM=NULL, zero=2)
cauchy1(scale.arg=1, llocation="identity",
- elocation=list(), ilocation=NULL, method.init=1)
+ elocation=list(), ilocation=NULL, imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -34,7 +34,7 @@ cauchy1(scale.arg=1, llocation="identity",
By default, an initial value is chosen internally for each.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3.
Initial method, three algorithms are implemented.
The user should try all possible values to help avoid converging
@@ -89,7 +89,7 @@ cauchy1(scale.arg=1, llocation="identity",
\section{Warning }{
It is well-known that the Cauchy distribution may have local
maxima in its likelihood function;
- make full use of \code{method.init}, \code{ilocation}, \code{iscale}
+ make full use of \code{imethod}, \code{ilocation}, \code{iscale}
etc.
}
@@ -129,7 +129,7 @@ Observed versus expected Fisher information.
value for \eqn{a}{a} on a grid.
It also pays to select a wide range
of initial values via the \code{ilocation} and/or \code{iscale}
- and/or \code{method.init} arguments.
+ and/or \code{imethod} arguments.
}
diff --git a/man/cnormal1.Rd b/man/cennormal1.Rd
similarity index 61%
rename from man/cnormal1.Rd
rename to man/cennormal1.Rd
index 1cff80e..e592b28 100644
--- a/man/cnormal1.Rd
+++ b/man/cennormal1.Rd
@@ -1,25 +1,27 @@
-\name{cnormal1}
-\alias{cnormal1}
+\name{cennormal1}
+\alias{cennormal1}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Censored Normal Distribution }
\description{
Maximum likelihood estimation for the normal distribution with
left and right censoring.
+
}
\usage{
-cnormal1(lmu = "identity", lsd = "loge", method.init = 1, zero = 2)
+cennormal1(lmu = "identity", lsd = "loge",
+ emu = list(), esd = list(), imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{lmu, lsd}{
- Parameter link functions applied to the mean and
- standard deviation parameters.
+ \item{lmu, lsd, emu, esd}{
+ Parameter link functions and its extra arguments,
+ applied to the mean and standard deviation parameters.
See \code{\link{Links}} for more choices.
The standard deviation is a positive quantity, therefore a log link
is the default.
}
- \item{method.init}{
+ \item{imethod}{
Initialization method. Either 1 or 2, this specifies
two methods for obtaining initial values for the parameters.
@@ -46,11 +48,13 @@ cnormal1(lmu = "identity", lsd = "loge", method.init = 1, zero = 2)
The fitted object has these two components stored in the \code{extra}
slot.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
%\references{
@@ -58,36 +62,38 @@ cnormal1(lmu = "identity", lsd = "loge", method.init = 1, zero = 2)
\author{ T. W. Yee }
\note{
- This function was adapted from \code{\link{tobit}}.
- The Tobit model is a special case of this \pkg{VGAM}
- family function because the observations have a common
- lower censoring point and upper censoring point.
- If there are no censored observation then \code{\link{normal1}}
+ This function is an alternative to \code{\link{tobit}}
+ but cannot handle a matrix response
+ and uses different working weights.
+ If there are no censored observations then \code{\link{normal1}}
is recommended instead.
+
}
\seealso{
\code{\link{tobit}},
\code{\link{normal1}},
- \code{\link{dcnormal1}}.
+ \code{\link{dcennormal1}}.
}
\examples{
-cdata = data.frame(x = runif(nn <- 1000)) # ystar are true values
-cdata = transform(cdata, ystar = rnorm(nn, m = 100 + 15 * x, sd = exp(3)))
-\dontrun{hist(ystar)}
-L = runif(nn, 80, 90) # Lower censoring points
-U = runif(nn, 130, 140) # Upper censoring points
+cdata = data.frame(x2 = runif(nn <- 1000)) # ystar are true values
+cdata = transform(cdata, ystar = rnorm(nn, m = 100 + 15 * x2, sd = exp(3)))
+\dontrun{with(cdata, hist(ystar))}
+cdata = transform(cdata, L = runif(nn, 80, 90), # Lower censoring points
+ U = runif(nn, 130, 140)) # Upper censoring points
cdata = transform(cdata, y = pmax(L, ystar)) # Left censored
cdata = transform(cdata, y = pmin(U, y)) # Right censored
-\dontrun{hist(y)}
-extra = list(leftcensored = with(cdata, ystar < L),
+\dontrun{with(cdata, hist(y))}
+Extra = list(leftcensored = with(cdata, ystar < L),
rightcensored = with(cdata, ystar > U))
-fit = vglm(y ~ x, cnormal1(zero = 2), cdata, trace = TRUE, extra = extra)
-coef(fit, matrix = TRUE)
-Coef(fit)
-names(fit at extra)
+fit1 = vglm(y ~ x2, cennormal1, cdata, crit = "c", extra = Extra, trace = TRUE)
+fit2 = vglm(y ~ x2, tobit(Lower = with(cdata, L), Upper = with(cdata, U)),
+ cdata, crit = "c", trace = TRUE)
+coef(fit1, matrix = TRUE)
+max(abs(coef(fit1, matrix = TRUE) - coef(fit2, matrix = TRUE))) # Should be 0
+names(fit1 at extra)
}
\keyword{models}
\keyword{regression}
diff --git a/man/cenpoisson.Rd b/man/cenpoisson.Rd
index 09194e1..d00227b 100644
--- a/man/cenpoisson.Rd
+++ b/man/cenpoisson.Rd
@@ -13,16 +13,11 @@ cenpoisson(link = "loge", earg = list(), imu = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{link}{
- Link function applied to the mean.
+ \item{link, earg}{
+ Link function and its extra argument applied to the mean.
See \code{\link{Links}} for more choices.
}
- \item{earg}{
- Extra argument optionally used by the link function.
- See \code{\link{Links}} for more information.
-
- }
\item{imu}{
Optional initial value.
See \code{\link{CommonVGAMffArguments}} for more information.
@@ -31,7 +26,7 @@ cenpoisson(link = "loge", earg = list(), imu = NULL)
}
\details{
Often a table of Poisson counts has an entry \emph{J+} meaning
- \eqn{\ge J}.
+ \eqn{\ge J}{>= J}.
This family function is similar to \code{\link{poissonff}} but handles
such censored data. The input requires \code{\link{SurvS4}}.
Only a univariate response is allowed.
@@ -56,7 +51,8 @@ cenpoisson(link = "loge", earg = list(), imu = NULL)
The function \code{\link{poissonff}} should be used
when there are no censored observations.
Also, \code{NA}s are not permitted with \code{\link{SurvS4}},
- nor is \code{type="counting"}.
+ nor is \code{type = "counting"}.
+
}
\section{Warning }{
@@ -84,60 +80,61 @@ cenpoisson(link = "loge", earg = list(), imu = NULL)
\examples{
# Example 1: right censored data
set.seed(123); U = 20
-y = rpois(n <- 100, exp(3))
-cy = pmin(U, y)
-rcensored = (y >= U)
-table(cy)
-table(rcensored)
-status = ifelse(rcensored, 0, 1)
-table(ii <- print(SurvS4(cy, status))) # Check; U+ means >= U
-fit = vglm(SurvS4(cy, status) ~ 1, cenpoisson, trace=TRUE)
-coef(fit, mat=TRUE)
+cdata = data.frame(y = rpois(n <- 100, exp(3)))
+cdata = transform(cdata, cy = pmin(U, y),
+ rcensored = (y >= U))
+cdata = transform(cdata, status = ifelse(rcensored, 0, 1))
+with(cdata, table(cy))
+with(cdata, table(rcensored))
+with(cdata, table(ii <- print(SurvS4(cy, status)))) # Check; U+ means >= U
+fit = vglm(SurvS4(cy, status) ~ 1, cenpoisson, cdata, trace = TRUE)
+coef(fit, matrix = TRUE)
table(print(fit at y)) # Another check; U+ means >= U
# Example 2: left censored data
L = 15
-cy = pmax(L, y)
-lcensored = (y < L) # Note y < L, not cy == L or y <= L
-table(cy)
-table(lcensored)
-status = ifelse(lcensored, 0, 1)
-table(ii <- print(SurvS4(cy, status, type="left"))) # Check
-fit = vglm(SurvS4(cy, status, type="left") ~ 1, cenpoisson, trace=TRUE)
-coef(fit, mat=TRUE)
+cdata = transform(cdata, cY = pmax(L, y),
+ lcensored = y < L) # Note y < L, not cY == L or y <= L
+cdata = transform(cdata, status = ifelse(lcensored, 0, 1))
+with(cdata, table(cY))
+with(cdata, table(lcensored))
+with(cdata, table(ii <- print(SurvS4(cY, status, type = "left")))) # Check
+fit = vglm(SurvS4(cY, status, type = "left") ~ 1, cenpoisson, cdata, trace = TRUE)
+coef(fit, matrix = TRUE)
# Example 3: interval censored data
-Lvec = rep(L, len=n); Uvec = rep(U, len=n)
-icensored = Lvec <= y & y < Uvec # Neither lcensored or rcensored
-table(icensored)
-status = rep(3, n) # 3 means interval censored
-status = ifelse(rcensored, 0, status) # 0 means right censored
-status = ifelse(lcensored, 2, status) # 2 means left censored
+cdata = transform(cdata, Lvec = rep(L, len = n),
+ Uvec = rep(U, len = n))
+cdata = transform(cdata, icensored = Lvec <= y & y < Uvec) # Neither lcensored or rcensored
+with(cdata, table(icensored))
+cdata = transform(cdata, status = rep(3, n)) # 3 means interval censored
+cdata = transform(cdata, status = ifelse(rcensored, 0, status)) # 0 means right censored
+cdata = transform(cdata, status = ifelse(lcensored, 2, status)) # 2 means left censored
# Have to adjust Lvec and Uvec because of the (start, end] format:
-Lvec[icensored] = Lvec[icensored] - 1
-Uvec[icensored] = Uvec[icensored] - 1
-Lvec[lcensored] = Lvec[lcensored] # Remains unchanged
-Lvec[rcensored] = Uvec[rcensored] # Remains unchanged
-table(ii <- print(SurvS4(Lvec, Uvec, status, type="interval"))) # Check
-
-fit = vglm(SurvS4(Lvec, Uvec, status, type="interval") ~ 1,
- cenpoisson, trace=TRUE)
-coef(fit, mat=TRUE)
+cdata$Lvec[with(cdata, icensored)] = cdata$Lvec[with(cdata, icensored)] - 1
+cdata$Uvec[with(cdata, icensored)] = cdata$Uvec[with(cdata, icensored)] - 1
+cdata$Lvec[with(cdata, lcensored)] = cdata$Lvec[with(cdata, lcensored)] # Remains unchanged
+cdata$Lvec[with(cdata, rcensored)] = cdata$Uvec[with(cdata, rcensored)] # Remains unchanged
+with(cdata, table(ii <- print(SurvS4(Lvec, Uvec, status, type = "interval")))) # Check
+
+fit = vglm(SurvS4(Lvec, Uvec, status, type = "interval") ~ 1,
+ cenpoisson, cdata, trace = TRUE)
+coef(fit, matrix = TRUE)
table(print(fit at y)) # Another check
# Example 4: Add in some uncensored observations
-index = (1:n)[icensored]
+index = (1:n)[with(cdata, icensored)]
index = head(index, 4)
-status[index] = 1 # actual or uncensored value
-Lvec[index] = y[index]
-table(ii <- print(SurvS4(Lvec, Uvec, status, type="interval"))) # Check
+cdata$status[index] = 1 # actual or uncensored value
+cdata$Lvec[index] = cdata$y[index]
+with(cdata, table(ii <- print(SurvS4(Lvec, Uvec, status, type = "interval")))) # Check
-fit = vglm(SurvS4(Lvec, Uvec, status, type="interval") ~ 1,
- cenpoisson, trace=TRUE, crit="c")
-coef(fit, mat=TRUE)
+fit = vglm(SurvS4(Lvec, Uvec, status, type = "interval") ~ 1,
+ cenpoisson, cdata, trace = TRUE, crit = "c")
+coef(fit, matrix = TRUE)
table(print(fit at y)) # Another check
}
\keyword{models}
diff --git a/man/chisq.Rd b/man/chisq.Rd
index 7604823..25fd010 100644
--- a/man/chisq.Rd
+++ b/man/chisq.Rd
@@ -5,20 +5,15 @@
\description{
Maximum likelihood estimation of the degrees of freedom for
a chi-squared distribution.
+
}
\usage{
-chisq(link = "loge", earg=list())
+chisq(link = "loge", earg = list())
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{link}{
- Parameter link function.
- See \code{\link{Links}} for more choices.
-
- }
- \item{earg}{
- List. Extra argument for the link.
- See \code{earg} in \code{\link{Links}} for general information.
+ \item{link, earg}{
+ See \code{\link{CommonVGAMffArguments}} for information.
}
}
@@ -34,30 +29,33 @@ chisq(link = "loge", earg=list())
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
Evans, M., Hastings, N. and Peacock, B. (2000)
\emph{Statistical Distributions},
New York: Wiley-Interscience, Third edition.
+
+
}
\author{ T. W. Yee }
\note{
- Multiple responses are permitted.
+ Matrix responses are permitted.
There may be convergence problems if the degrees of freedom
- is very large.
+ is very large or close to zero.
}
\seealso{
\code{\link[stats]{Chisquare}}.
\code{\link{normal1}}.
+
}
\examples{
cdata <- data.frame(x2 = runif(nn <- 1000))
-cdata <- transform(cdata,
- y1 = rchisq(nn, df = exp(1 - 1 * x2)),
- y2 = rchisq(nn, df = exp(2 - 2 * x2)))
+cdata <- transform(cdata, y1 = rchisq(nn, df = exp(1 - 1 * x2)),
+ y2 = rchisq(nn, df = exp(2 - 2 * x2)))
fit <- vglm(cbind(y1, y2) ~ x2, chisq, cdata, trace = TRUE)
coef(fit, matrix = TRUE)
}
diff --git a/man/crashes.Rd b/man/crashes.Rd
index de47532..043cb98 100644
--- a/man/crashes.Rd
+++ b/man/crashes.Rd
@@ -13,7 +13,7 @@
A variety of reported crash data cross-classified by time (hour
of the day) and day of the week, accumulated over 2009. These
include fatalities and injuries (by car), trucks, motor cycles,
- bicycles and pedestrians. There is some alcohol-related
+ bicycles and pedestrians. There are some alcohol-related
data too.
}
@@ -53,8 +53,8 @@ data(alclevels)
Each cell is the aggregate number of crashes reported at each
hour-day combination, over the 2009 calendar year.
The \code{rownames} of each data frame is the
- start time (hourly from midnight onwards) on a 24 hour clock.
- For example, 21 means 9.00pm to 9.59pm.
+ start time (hourly from midnight onwards) on a 24 hour clock,
+ e.g., 21 means 9.00pm to 9.59pm.
For crashes,
@@ -105,14 +105,13 @@ axis(3:4, labels = FALSE, tick = FALSE)
abline(v = sort(1 + c((0:7) * 24, (0:6) * 24 + 12)), lty = "dashed",
col = c("purple", "orange")) }
-
-# Goodmans RC model
-fitgrc1 <- grc(alcoff)
-
+# Goodmans RC models
+fitgrc1 <- grc(alcoff) # Rank-1 model
fitgrc2 <- grc(alcoff, Rank = 2, Corner = FALSE, Uncor = TRUE)
print(Coef(fitgrc2), dig = 2)
-\dontrun{ biplot(fitgrc2, scaleA = 2.3, Ccol = "blue", Acol = "red",
- Clabels = as.character(1:23)) }
+\dontrun{ biplot(fitgrc2, scaleA = 2.3, Ccol = "blue", Acol = "orange",
+ Clabels = as.character(1:23), xlim = c(-1.3, 2.3),
+ ylim = c(-1.2, 1)) }
}
\keyword{datasets}
diff --git a/man/dcennormal1.Rd b/man/dcennormal1.Rd
new file mode 100644
index 0000000..ff23141
--- /dev/null
+++ b/man/dcennormal1.Rd
@@ -0,0 +1,101 @@
+\name{dcennormal1}
+\alias{dcennormal1}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{ Univariate Normal Distribution with Double Censoring }
+\description{
+ Maximum likelihood estimation of the two parameters of a
+ univariate normal distribution when there is double censoring.
+
+}
+\usage{
+dcennormal1(r1 = 0, r2 = 0, lmu = "identity", lsd = "loge",
+ emu = list(), esd = list(),
+ imu = NULL, isd = NULL, zero = 2)
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{r1, r2}{
+ Integers. Number of smallest and largest values censored, respectively.
+
+ }
+ \item{lmu, lsd, emu, esd}{
+ Parameter link functions and its extra arguments applied to the
+ mean and standard deviation.
+ See \code{\link{Links}} for more choices.
+
+ }
+ \item{imu, isd, zero}{
+ See \code{\link{CommonVGAMffArguments}} for more information.
+
+ }
+}
+\details{
+ This family function uses the Fisher information matrix given in
+ Harter and Moore (1966). The matrix is not diagonal if either
+ \code{r1} or \code{r2} are positive.
+
+
+ By default, the mean is the first linear/additive predictor and
+ the log of the standard deviation is the second linear/additive
+ predictor.
+
+
+} \value{
+ An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
+ The object is used by modelling functions such as \code{\link{vglm}},
+ and \code{\link{vgam}}.
+
+}
+\references{
+ Harter, H. L. and Moore, A. H. (1966)
+ Iterative maximum-likelihood estimation of the parameters of
+ normal populations from singly and doubly censored samples.
+ \emph{Biometrika}, \bold{53}, 205--213.
+
+
+}
+\author{ T. W. Yee }
+\note{
+ This family function only handles a vector or one-column matrix
+ response. The \code{weights} argument, if used, are interpreted
+ as frequencies, therefore it must be a vector with positive
+ integer values.
+
+
+ With no censoring at all (the default), it is better (and
+ equivalent) to use \code{\link{normal1}}.
+
+
+}
+
+\seealso{
+ \code{\link{normal1}},
+ \code{\link{cennormal1}},
+ \code{\link{tobit}}.
+
+
+}
+\examples{\dontrun{# Repeat the simulations described in Harter and Moore (1966)
+SIMS = 100 # Number of simulations (change this to 1000)
+mu.save = sd.save = rep(NA, len = SIMS)
+r1 = 0; r2 = 4; nn = 20
+for(sim in 1:SIMS) {
+ y = sort(rnorm(nn))
+ y = y[(1+r1):(nn-r2)] # Delete r1 smallest and r2 largest
+ fit = vglm(y ~ 1, dcennormal1(r1 = r1, r2 = r2))
+ mu.save[sim] = predict(fit)[1,1]
+ sd.save[sim] = exp(predict(fit)[1,2]) # Assumes a log link and ~ 1
+}
+c(mean(mu.save), mean(sd.save)) # Should be c(0,1)
+c(sd(mu.save), sd(sd.save))
+}
+
+# Data from Sarhan and Greenberg (1962); MLEs are mu = 9.2606, sd = 1.3754
+strontium90 = data.frame(y = c(8.2, 8.4, 9.1, 9.8, 9.9))
+fit = vglm(y ~ 1, dcennormal1(r1 = 2, r2 = 3, isd = 6), strontium90, trace = TRUE)
+coef(fit, matrix = TRUE)
+Coef(fit)
+}
+\keyword{models}
+\keyword{regression}
+
diff --git a/man/dcnormal1.Rd b/man/dcnormal1.Rd
deleted file mode 100644
index 0078669..0000000
--- a/man/dcnormal1.Rd
+++ /dev/null
@@ -1,104 +0,0 @@
-\name{dcnormal1}
-\alias{dcnormal1}
-%- Also NEED an '\alias' for EACH other topic documented here.
-\title{ Univariate Normal Distribution with Double Censoring }
-\description{
- Maximum likelihood estimation of the two parameters of a univariate
- normal distribution when there is double censoring.
-
-}
-\usage{
-dcnormal1(r1 = 0, r2 = 0, link.sd = "loge",
- earg=list(), isd = NULL, zero = NULL)
-}
-%- maybe also 'usage' for other objects documented here.
-\arguments{
- \item{r1, r2}{
- Integers. Number of smallest and largest values censored, respectively.
-
- }
- \item{link.sd}{
- Parameter link function applied to the standard deviation.
- See \code{\link{Links}} for more choices.
- Being a positive quantity, a log link is the default.
-
- }
- \item{earg}{
- List. Extra argument for the link.
- See \code{earg} in \code{\link{Links}} for general information.
-
- }
- \item{isd}{
- Numeric. Initial value for the standard deviation.
- The default value \code{NULL} means an initial value is
- obtained internally from the data.
-
- }
- \item{zero}{
- An integer with value 1 or 2. If so, the mean or standard deviation
- respectively are modelled as an intercept only. Usually, setting
- \code{zero=2} will be used, if used at all. The default value
- \code{NULL} means both linear/additive predictors are modelled as
- functions of the explanatory variables.
-
- }
-}
-\details{
- This family function uses the Fisher information matrix given in Harter
- and Moore (1966). The matrix is not diagonal if either \code{r1}
- or \code{r2} are positive.
-
- By default, the mean is the first linear/additive predictor and the
- log of the standard deviation is the second linear/additive predictor.
-
-} \value{
- An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
- The object is used by modelling functions such as \code{\link{vglm}},
- and \code{\link{vgam}}.
-
-}
-\references{
- Harter, H. L. and Moore, A. H. (1966) Iterative maximum-likelihood
- estimation of the parameters of normal populations from singly and
- doubly censored samples. \emph{Biometrika}, \bold{53}, 205--213.
-}
-\author{ T. W. Yee }
-\note{
- This family function only handles a vector or one-column matrix
- response. The \code{weights} argument, if used, are interpreted as
- frequencies, therefore it must be a vector with positive integer values.
-
- With no censoring at all (the default), it is better (and equivalent)
- to use \code{\link{normal1}}.
-
-}
-
-\seealso{
-\code{\link{normal1}},
-\code{\link{tobit}}.
-}
-\examples{\dontrun{# Repeat the simulations described in Harter and Moore (1966)
-SIMS = 100 # Number of simulations (change this to 1000)
-mu.save = sd.save = rep(NA, len=SIMS)
-r1 = 0; r2 = 4; n = 20
-for(sim in 1:SIMS) {
- y = sort(rnorm(n))
- y = y[(1+r1):(n-r2)] # Delete r1 smallest and r2 largest
- fit = vglm(y ~ 1, dcnormal1(r1=r1, r2=r2))
- mu.save[sim] = predict(fit)[1,1]
- sd.save[sim] = exp(predict(fit)[1,2]) # Assumes a log link and ~ 1
-}
-# Now look at the results
-c(mean(mu.save), mean(sd.save)) # Should be c(0,1)
-c(sd(mu.save), sd(sd.save))
-}
-
-# Data from Sarhan and Greenberg (1962); MLEs are mu=9.2606, sd=1.3754
-strontium90 = data.frame(y = c(8.2, 8.4, 9.1, 9.8, 9.9))
-fit = vglm(y ~ 1, dcnormal1(r1=2, r2=3, isd=6), strontium90, trace=TRUE)
-coef(fit, matrix=TRUE)
-Coef(fit)
-}
-\keyword{models}
-\keyword{regression}
-
diff --git a/man/erlang.Rd b/man/erlang.Rd
index 2b4a859..18d0456 100644
--- a/man/erlang.Rd
+++ b/man/erlang.Rd
@@ -7,7 +7,7 @@
by maximum likelihood estimation.
}
\usage{
-erlang(shape.arg, link = "loge", earg=list(), method.init = 1)
+erlang(shape.arg, link = "loge", earg=list(), imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -26,7 +26,7 @@ erlang(shape.arg, link = "loge", earg=list(), method.init = 1)
See \code{earg} in \code{\link{Links}} for general information.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value.
diff --git a/man/expgeometric.Rd b/man/expgeometric.Rd
index b2c2da0..efbbd34 100644
--- a/man/expgeometric.Rd
+++ b/man/expgeometric.Rd
@@ -1,7 +1,7 @@
\name{expgeometric}
\alias{expgeometric}
%- Also NEED an '\alias' for EACH other topic documented here.
-\title{Exponential geometric Distribution Family Function}
+\title{Exponential Geometric Distribution Family Function}
\description{
Estimates the two parameters of the exponential geometric distribution
by maximum likelihood estimation.
@@ -11,7 +11,7 @@
expgeometric(lscale = "loge", lshape = "logit",
escale = list(), eshape = list(),
iscale = NULL, ishape = NULL,
- zero = 1, nsimEIM = 400)
+ tol12 = 1e-05, zero = 1, nsimEIM = 400)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -30,22 +30,29 @@ expgeometric(lscale = "loge", lshape = "logit",
Optional initial values for the scale and shape parameters.
}
+ \item{tol12}{
+ Numeric.
+ Tolerance for testing whether a parameter has value 1 or 2.
+
+ }
\item{zero, nsimEIM}{
See \code{\link{CommonVGAMffArguments}}.
}
-
}
\details{
The exponential geometric distribution has density function
\deqn{f(y; c = scale, s = shape) =
- c (1 - s) e^{-c y} (1 - s e^{-c y})^{-2}}{%
- c*(1-s)*e^(-c*y)*(1-s*e^(-c*y))^(-2)}
+ (1/c) (1 - s) e^{-y/c} (1 - s e^{-y/c})^{-2}}{%
+ (1/c) * (1 - s) * e^(-y/c) * (1 - s * e^(-y/c))^(-2)}
where \eqn{y > 0}, \eqn{c > 0} and \eqn{s \in (0, 1)}{0 < s < 1}.
- The mean is \eqn{((s-1)/(sc)) \log(1-s)}{((s-1)/(sc)) * log(1-s)}
+ The mean, \eqn{(c (s - 1)/ s) \log(1 - s)}{(c *
+ (s - 1)/ s) * log(1 - s)}
is returned as the fitted values.
- Note the median is \eqn{(1/c) \log(2-s)}{(1/c) * log(2-s)}.
+ Note the median is \eqn{c \log(2 - s)}{c * log(2 - s)}.
+ Simulated Fisher scoring is implemented.
+
}
\value{
@@ -61,24 +68,24 @@ expgeometric(lscale = "loge", lshape = "logit",
\bold{39}, 35--42.
}
-\author{ J. G. Lauder and T. W .Yee }
+\author{ J. G. Lauder and T. W. Yee }
\note{
- Soon the scale term will be redefinined as the reciprocal of
- the scale parameter used by Adamidis and Loukas (1998).
- That is, division by the scale parameter will be used later.
+ We define \code{scale} as the reciprocal of the scale parameter
+ used by Adamidis and Loukas (1998).
}
\seealso{
- \code{dexpgeom},
+ \code{\link{dexpgeom}},
\code{\link{exponential}},
\code{\link{geometric}}.
+
}
\examples{
scale = exp(2); shape = logit(-1, inverse = TRUE);
-edata = data.frame(y = rexpgeom(n = 2000, scale=scale, shape=shape))
+edata = data.frame(y = rexpgeom(n = 2000, scale = scale, shape = shape))
fit = vglm(y ~ 1, expgeometric, edata, trace = TRUE)
c(with(edata, mean(y)), head(fitted(fit), 1))
coef(fit, matrix = TRUE)
diff --git a/man/expgeometricUC.Rd b/man/expgeometricUC.Rd
new file mode 100644
index 0000000..cc91cc2
--- /dev/null
+++ b/man/expgeometricUC.Rd
@@ -0,0 +1,79 @@
+\name{expgeom}
+\alias{expgeom}
+\alias{dexpgeom}
+\alias{pexpgeom}
+\alias{qexpgeom}
+\alias{rexpgeom}
+\title{The Exponential Geometric Distribution}
+\description{
+ Density, distribution function, quantile function and random
+ generation for the exponential geometric distribution.
+
+}
+\usage{
+dexpgeom(x, scale = 1, shape, log = FALSE)
+pexpgeom(q, scale = 1, shape)
+qexpgeom(p, scale = 1, shape)
+rexpgeom(n, scale = 1, shape)
+}
+\arguments{
+ \item{x, q}{vector of quantiles.}
+ \item{p}{vector of probabilities.}
+ \item{n}{number of observations.
+ If \code{length(n) > 1} then the length is taken to be the number required. }
+ \item{scale, shape}{
+ positive scale and shape parameters. }
+ \item{log}{
+ Logical.
+ If \code{log = TRUE} then the logarithm of the density is returned.
+
+ }
+
+}
+\value{
+ \code{dexpgeom} gives the density,
+ \code{pexpgeom} gives the distribution function,
+ \code{qexpgeom} gives the quantile function, and
+ \code{rexpgeom} generates random deviates.
+
+}
+\author{ J. G. Lauder and T. W. Yee }
+\details{
+ See \code{\link{expgeometric}}, the \pkg{VGAM} family function
+ for estimating the parameters,
+ for the formula of the probability density function and other details.
+
+}
+\note{
+ We define \code{scale} as the reciprocal of the scale parameter
+ used by Adamidis and Loukas (1998).
+
+}
+\seealso{
+ \code{\link{expgeometric}},
+ \code{\link{exponential}},
+ \code{\link{geometric}}.
+
+
+}
+\examples{
+\dontrun{
+shape = 0.5; scale = 1; nn = 501
+x = seq(-0.10, 3.0, len = nn)
+plot(x, dexpgeom(x, scale, shape), type = "l", las = 1, ylim = c(0, 2),
+ ylab = paste("[dp]expgeom(shape = ", shape, ", scale = ", scale, ")"),
+ col = "blue", cex.main = 0.8,
+ main = "Blue is density, red is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+lines(x, pexpgeom(x, scale, shape), col = "red")
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qexpgeom(probs, scale, shape)
+lines(Q, dexpgeom(Q, scale, shape), col = "purple", lty = 3, type = "h")
+lines(Q, pexpgeom(Q, scale, shape), col = "purple", lty = 3, type = "h")
+abline(h = probs, col = "purple", lty = 3)
+max(abs(pexpgeom(Q, scale, shape) - probs)) # Should be 0
+}
+}
+\keyword{distribution}
+
+
diff --git a/man/explogarithmic.Rd b/man/explogarithmic.Rd
new file mode 100644
index 0000000..be89376
--- /dev/null
+++ b/man/explogarithmic.Rd
@@ -0,0 +1,91 @@
+\name{explogarithmic}
+\alias{explogarithmic}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{Exponential Logarithmic Distribution Family Function}
+\description{
+ Estimates the two parameters of the exponential logarithmic distribution
+ by maximum likelihood estimation.
+
+}
+\usage{
+explogarithmic(lscale = "loge", lshape = "logit", escale = list(),
+ eshape = list(), iscale = NULL, ishape = NULL,
+ tol12 = 1e-05, zero = 1, nsimEIM = 400)
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{lscale, lshape, escale, eshape}{
+ See \code{\link{CommonVGAMffArguments}} for information.
+
+
+ }
+ \item{tol12}{
+ Numeric.
+ Tolerance for testing whether a parameter has value 1 or 2.
+
+
+ }
+ \item{iscale, ishape, zero, nsimEIM}{
+ See \code{\link{CommonVGAMffArguments}}.
+
+
+ }
+
+}
+\details{
+ The exponential logarithmic distribution has density function
+ \deqn{f(y; c, s) =
+ (1/(-\log p )) (((1/c) (1 - s) e^{-y/c}) / (1 - (1 - s) e^{-y/c}))}{%
+ (1/(-log(p))) * (((1/c) * (1 - s) * e^(-y/c)) / (1 - (1 - s) * e^(-y/c)))}
+ where \eqn{y > 0}, scale parameter \eqn{c > 0}, and
+ shape parameter \eqn{s \in (0, 1)}{0 < s < 1}.
+ The mean, \eqn{(-polylog(2, 1 - p) c) / \log(s)}{((-polylog(2, 1 - p) *
+ c) / log(s)} is \emph{not} returned as the fitted values.
+ Note the median is \eqn{c \log(1 + \sqrt{s})}{c * log(1 + sqrt(s))}
+ and it is \emph{currently} returned as the fitted values.
+ Simulated Fisher scoring is implemented.
+
+
+}
+\value{
+ An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
+ The object is used by modelling functions such as \code{\link{vglm}}
+ and \code{\link{vgam}}.
+
+}
+\references{
+ Tahmasabi, R., Sadegh, R. (2008).
+ A two-parameter lifetime distribution with decreasing failure rate.
+ \emph{Computational Statistics and Data Analysis},
+ \bold{52}, 3889--3901.
+
+}
+\author{ J. G. Lauder and T. W .Yee }
+\note{
+ We define \code{scale} as the reciprocal of the rate parameter
+ used by Tahmasabi and Sadegh (2008).
+
+
+ Yet to do: find a \code{polylog()} function.
+
+
+}
+
+\seealso{
+ \code{\link{dexplog}},
+ \code{\link{exponential}},
+
+
+}
+\examples{
+scale = exp(2); shape = logit(-1, inverse = TRUE);
+edata = data.frame(y = rexplog(n = 2000, scale = scale, shape = shape))
+fit = vglm(y ~ 1, explogarithmic, edata, trace = TRUE)
+c(with(edata, median(y)), head(fitted(fit), 1))
+coef(fit, matrix = TRUE)
+Coef(fit)
+summary(fit)
+}
+\keyword{models}
+\keyword{regression}
+
diff --git a/man/explogarithmicUC.Rd b/man/explogarithmicUC.Rd
new file mode 100644
index 0000000..266c13c
--- /dev/null
+++ b/man/explogarithmicUC.Rd
@@ -0,0 +1,79 @@
+\name{explog}
+\alias{explog}
+\alias{dexplog}
+\alias{pexplog}
+\alias{qexplog}
+\alias{rexplog}
+\title{The Exponential Logarithmic Distribution}
+\description{
+ Density, distribution function, quantile function and random
+ generation for the exponential logarithmic distribution.
+
+}
+\usage{
+dexplog(x, scale = 1, shape, log = FALSE)
+pexplog(q, scale = 1, shape)
+qexplog(p, scale = 1, shape)
+rexplog(n, scale = 1, shape)
+}
+\arguments{
+ \item{x, q}{vector of quantiles.}
+ \item{p}{vector of probabilities.}
+ \item{n}{number of observations.
+ If \code{length(n) > 1} then the length is taken to be the number
+ required. }
+ \item{scale, shape}{
+ positive scale and shape parameters. }
+ \item{log}{
+ Logical.
+ If \code{log = TRUE} then the logarithm of the density is returned.
+
+ }
+
+}
+\value{
+ \code{dexplog} gives the density,
+ \code{pexplog} gives the distribution function,
+ \code{qexplog} gives the quantile function, and
+ \code{rexplog} generates random deviates.
+
+}
+\author{ J. G. Lauder and T. W. Yee }
+\details{
+ See \code{\link{explogarithmic}}, the \pkg{VGAM} family function
+ for estimating the parameters,
+ for the formula of the probability density function and other details.
+
+}
+\note{
+ We define \code{scale} as the reciprocal of the scale parameter
+ used by Tahmasabi and Rezaei (2008).
+
+}
+\seealso{
+ \code{\link{explogarithmic}},
+ \code{\link{exponential}}.
+
+
+}
+\examples{
+\dontrun{
+shape = 0.5; scale = 2; nn = 501
+x = seq(-0.50, 6.0, len = nn)
+plot(x, dexplog(x, scale, shape), type = "l", las = 1, ylim = c(0, 1.1),
+ ylab = paste("[dp]explog(shape = ", shape, ", scale = ", scale, ")"),
+ col = "blue", cex.main = 0.8,
+ main = "Blue is density, orange is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+lines(x, pexplog(x, scale, shape), col = "orange")
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qexplog(probs, scale, shape = shape)
+lines(Q, dexplog(Q, scale, shape = shape), col = "purple", lty = 3, type = "h")
+lines(Q, pexplog(Q, scale, shape = shape), col = "purple", lty = 3, type = "h")
+abline(h = probs, col = "purple", lty = 3)
+max(abs(pexplog(Q, scale, shape = shape) - probs)) # Should be 0
+}
+}
+\keyword{distribution}
+
+
diff --git a/man/exponential.Rd b/man/exponential.Rd
index c738c89..70d9ebb 100644
--- a/man/exponential.Rd
+++ b/man/exponential.Rd
@@ -77,6 +77,7 @@ New York: Wiley-Interscience, Third edition.
\code{\link{amlexponential}},
\code{\link{laplace}},
\code{\link{expgeometric}},
+ \code{\link{explogarithmic}},
\code{\link{poissonff}},
\code{\link{mix2exp}},
\code{\link{freund61}}.
diff --git a/man/exppoisson.Rd b/man/exppoisson.Rd
new file mode 100644
index 0000000..178f1aa
--- /dev/null
+++ b/man/exppoisson.Rd
@@ -0,0 +1,98 @@
+\name{exppoisson}
+\alias{exppoisson}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{Exponential Poisson Distribution Family Function}
+\description{
+ Estimates the two parameters of the exponential Poisson distribution
+ by maximum likelihood estimation.
+
+}
+\usage{
+exppoisson(llambda = "loge", lbetave = "loge", elambda = list(),
+ ebetave = list(), ilambda = 1.1, ibetave = 2,
+ zero = NULL)
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{llambda, lbetave}{
+ Link function for the two positive parameters.
+ See \code{\link{Links}} for more choices.
+
+ }
+ \item{elambda, ebetave}{
+ List. Extra argument for each of the links.
+ See \code{earg} in \code{\link{Links}} for general information.
+
+ }
+ \item{ilambda, ibetave}{
+ Numeric.
+ Initial values for the \code{lambda} and \code{betave} parameters.
+ Currently this function is not intelligent enough to
+ obtain better initial values.
+
+ }
+ \item{zero}{
+ See \code{\link{CommonVGAMffArguments}}.
+
+ }
+}
+\details{
+ The exponential Poisson distribution has density function
+ \deqn{f(y; \lambda = shape, \beta = scale) =
+ \frac{\lambda \beta}{1 - e^{-\lambda}} \,
+ e^{-\lambda - \beta y + \lambda \exp{(-\beta y)}}}{%
+ f(y; a = shape, b = scale) =
+ (a*b/(1 - e^(-a))) * e^{-a - b*y + a * e^(-b*y)}}
+ where \eqn{y > 0} and the
+ parameters shape, \eqn{\lambda}{a},
+ and scale, \eqn{\beta}{b}, are positive.
+ The distribution implies a population facing discrete
+ hazard rates which are multiples of a base hazard.
+ This \pkg{VGAM} family function requires the \pkg{hypergeo} package
+ (to use their \code{\link[hypergeo]{genhypergeo}} function).
+
+
+}
+\section{Warning }{
+ This \pkg{VGAM} family function does not work properly!
+
+}
+\value{
+ An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
+ The object is used by modelling functions such as \code{\link{vglm}}
+ and \code{\link{vgam}}.
+
+}
+\references{
+ Kus, C., (2007).
+ A new lifetime distribution.
+ \emph{Computational Statistics and Data Analysis},
+ \bold{51}, 4497--4509.
+
+
+}
+\author{ J. G. Lauder, jamesglauder at gmail.com }
+
+
+\seealso{
+ \code{\link{dexppois}},
+ \code{\link{exponential}},
+ \code{\link{poisson}}.
+
+
+}
+\examples{
+\dontrun{
+lambda = exp(1); betave = exp(2)
+rdata = data.frame(y = rexppois(n = 1000, lambda, betave))
+library(hypergeo)
+fit = vglm(y ~ 1, exppoisson, rdata, trace = TRUE)
+c(with(rdata, mean(y)), head(fitted(fit), 1))
+coef(fit, matrix = TRUE)
+Coef(fit)
+summary(fit)
+}
+}
+\keyword{models}
+\keyword{regression}
+
diff --git a/man/exppoissonUC.Rd b/man/exppoissonUC.Rd
new file mode 100644
index 0000000..ccda42f
--- /dev/null
+++ b/man/exppoissonUC.Rd
@@ -0,0 +1,73 @@
+\name{exppois}
+\alias{exppois}
+\alias{dexppois}
+\alias{pexppois}
+\alias{qexppois}
+\alias{rexppois}
+\title{The Exponential Poisson Distribution}
+\description{
+ Density, distribution function, quantile function and random
+ generation for the exponential poisson distribution.
+
+}
+\usage{
+dexppois(x, lambda, betave = 1, log = FALSE)
+pexppois(q, lambda, betave = 1)
+qexppois(p, lambda, betave = 1)
+rexppois(n, lambda, betave = 1)
+}
+\arguments{
+ \item{x, q}{vector of quantiles.}
+ \item{p}{vector of probabilities.}
+ \item{n}{number of observations.
+ If \code{length(n) > 1} then the length is taken to be the number required. }
+ \item{lambda, betave}{ both positive parameters. }
+ \item{log}{
+ Logical.
+ If \code{log = TRUE} then the logarithm of the density is returned.
+
+ }
+
+}
+\value{
+ \code{dexppois} gives the density,
+ \code{pexppois} gives the distribution function,
+ \code{qexppois} gives the quantile function, and
+ \code{rexppois} generates random deviates.
+
+}
+\author{ J. G. Lauder, jamesglauder at gmail.com }
+\details{
+ See \code{\link{exppoisson}}, the \pkg{VGAM} family function
+ for estimating the parameters,
+ for the formula of the probability density function and other details.
+
+}
+%\note{
+%}
+\seealso{
+ \code{\link{exppoisson}}.
+
+
+}
+\examples{
+\dontrun{
+lambda = 2; betave = 2; nn = 201
+x = seq(-0.05, 1.05, len = nn)
+plot(x, dexppois(x, lambda, betave), type = "l", las = 1, ylim = c(0, 5),
+ ylab = paste("[dp]exppoisson(lambda = ", lambda, ", betave = ", betave, ")"),
+ col = "blue", cex.main = 0.8,
+ main = "Blue is density, orange is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+lines(x, pexppois(x, lambda, betave), col = "orange")
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qexppois(probs, lambda, betave)
+lines(Q, dexppois(Q, lambda, betave), col = "purple", lty = 3, type = "h")
+lines(Q, pexppois(Q, lambda, betave), col = "purple", lty = 3, type = "h")
+abline(h = probs, col = "purple", lty = 3)
+max(abs(pexppois(Q, lambda, betave) - probs)) # Should be 0
+}
+}
+\keyword{distribution}
+
+
diff --git a/man/felix.Rd b/man/felix.Rd
index 3bc4f03..8f7051e 100644
--- a/man/felix.Rd
+++ b/man/felix.Rd
@@ -9,7 +9,7 @@
}
\usage{
felix(link = "elogit", earg = if (link == "elogit") list(min
- = 0, max = 0.5) else list(), method.init=1)
+ = 0, max = 0.5) else list(), imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -18,7 +18,7 @@ felix(link = "elogit", earg = if (link == "elogit") list(min
See \code{\link{Links}} for more choices and for general information.
}
- \item{method.init}{
+ \item{imethod}{
See \code{\link{CommonVGAMffArguments}}.
Valid values are 1, 2, 3 or 4.
diff --git a/man/fff.Rd b/man/fff.Rd
index 6276f7c..e1f092a 100644
--- a/man/fff.Rd
+++ b/man/fff.Rd
@@ -7,7 +7,7 @@
}
\usage{
fff(link="loge", earg=list(), idf1=NULL, idf2=NULL, nsimEIM=100,
- method.init=1, zero=NULL)
+ imethod=1, zero=NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -32,7 +32,7 @@ fff(link="loge", earg=list(), idf1=NULL, idf2=NULL, nsimEIM=100,
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{method.init}{
+ \item{imethod}{
Initialization method. Either the value 1 or 2.
If both fail try setting values for \code{idf1} and \code{idf2}.
diff --git a/man/fgm.Rd b/man/fgm.Rd
index 7d8254d..97d3bc9 100644
--- a/man/fgm.Rd
+++ b/man/fgm.Rd
@@ -9,7 +9,7 @@
}
\usage{
-fgm(lapar="rhobit", earg=list(), iapar=NULL, method.init=1, nsimEIM=200)
+fgm(lapar="rhobit", earg=list(), iapar=NULL, imethod=1, nsimEIM=200)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -28,10 +28,10 @@ fgm(lapar="rhobit", earg=list(), iapar=NULL, method.init=1, nsimEIM=200)
Numeric. Optional initial value for \eqn{\alpha}{alpha}.
By default, an initial value is chosen internally.
If a convergence failure occurs try assigning a different value.
- Assigning a value will override the argument \code{method.init}.
+ Assigning a value will override the argument \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ia}.
diff --git a/man/fnormal1.Rd b/man/fnormal1.Rd
index fa86f07..006cb95 100644
--- a/man/fnormal1.Rd
+++ b/man/fnormal1.Rd
@@ -7,7 +7,7 @@
}
\usage{
fnormal1(lmean="identity", lsd="loge", emean=list(), esd=list(), imean=NULL,
- isd=NULL, a1=1, a2=1, nsimEIM=500, method.init=1, zero=NULL)
+ isd=NULL, a1=1, a2=1, nsimEIM=500, imethod=1, zero=NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -34,7 +34,7 @@ fnormal1(lmean="identity", lsd="loge", emean=list(), esd=list(), imean=NULL,
Each must be of length 1.
}
- \item{nsimEIM, method.init, zero}{
+ \item{nsimEIM, imethod, zero}{
See \code{\link{CommonVGAMffArguments}}.
}
diff --git a/man/frechet.Rd b/man/frechet.Rd
index ded3741..10061b2 100644
--- a/man/frechet.Rd
+++ b/man/frechet.Rd
@@ -1,21 +1,24 @@
\name{frechet}
% \alias{frechet}
\alias{frechet2}
-\alias{frechet3}
+%\alias{frechet3}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Frechet Distribution Family Function }
\description{
- Maximum likelihood estimation of the 2-parameter and 3-parameter
+ Maximum likelihood estimation of the 2-parameter
Frechet distribution.
+% and 3-parameter
+
}
\usage{
-frechet2(location=0, lscale="loge", lshape="loglog", escale = list(),
- eshape = list(), iscale=NULL, ishape=3, zero=NULL)
-frechet3(anchor=NULL, ldifference="loge", lscale="loge", lshape="loglog",
- edifference=list(), escale = list(), eshape = list(),
- ilocation=NULL, iscale=NULL, ishape=3, zero=NULL,
- effpos = .Machine$double.eps^0.75)
+frechet2(location = 0, lscale = "loge", lshape = "logoff",
+ escale = list(), eshape = list(offset = -2), iscale = NULL,
+ ishape = NULL, nsimEIM = 250, zero = NULL)
+%frechet3(anchor = NULL, ldifference = "loge", lscale = "loge",
+% lshape = "loglog", edifference = list(), escale = list(),
+% eshape = list(), ilocation = NULL, iscale = NULL, ishape = NULL,
+% zero = NULL, effpos = .Machine$double.eps^0.75)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -24,86 +27,79 @@ frechet3(anchor=NULL, ldifference="loge", lscale="loge", lshape="loglog",
It is called \eqn{a} below.
}
- \item{lscale, lshape}{
- Link functions for the parameters.
+ \item{lscale, lshape, escale, eshape}{
+ Link functions and extra arguments for the parameters.
See \code{\link{Links}} for more choices.
}
- \item{iscale, ishape}{
- Initial value for the scale and shape parameters respectively.
- Both parameters must be positive.
- A \code{NULL} means it is chosen internally.
-
- }
- \item{edifference, escale, eshape}{
- Extra argument for the respective links.
- See \code{earg} in \code{\link{Links}} for general information.
-
- }
- \item{zero}{
- An integer-valued vector specifying which
- linear/additive predictors are modelled as intercepts only. The value
- must be from the set \{1,2\}, corresponding respectively to \eqn{scale}
- and \eqn{shape}. By default all linear/additive predictors are modelled
- as a linear combination of the explanatory variables.
-
- }
- \item{anchor}{
- An ``anchor'' point for estimating the location parameter. This must
- be a value no greater than \code{min(y)} where \code{y} is the response.
- The location parameter is \eqn{A - D} where
- \eqn{A} is the anchor,
- \eqn{D} is the ``difference'' (default is to make this positive).
- The default value of \code{anchor} means \code{min(y)} is chosen.
-
- }
- \item{ldifference}{
- Parameter link function for the difference \eqn{D} between the anchor
- point and the location parameter estimate.
- The default keeps this difference positive so that numerical
- problems are less likely to occur.
-
- }
- \item{ilocation}{
- Optional initial value for the location parameter.
- A good choice can speed up the convergence rate markedly.
- A \code{NULL} means it is chosen internally.
-
- }
- \item{effpos}{
- A small number, usually positive, to pass into the quasi-Newton
- updating function. A value greater than \code{effpos} is considered
- effectively positive.
+ \item{iscale, ishape, zero, nsimEIM}{
+ See \code{\link{CommonVGAMffArguments}} for information.
}
+% \item{edifference}{ %
+% Extra argument for the respective links.
+% See \code{earg} in \code{\link{Links}} for general information.
+
+% }
+
+
+% \item{anchor}{
+% An ``anchor'' point for estimating the location parameter. This must
+% be a value no greater than \code{min(y)} where \code{y} is the response.
+% The location parameter is \eqn{A - D} where
+% \eqn{A} is the anchor,
+% \eqn{D} is the ``difference'' (default is to make this positive).
+% The default value of \code{anchor} means \code{min(y)} is chosen.
+%
+% }
+% \item{ldifference}{
+% Parameter link function for the difference \eqn{D} between the anchor
+% point and the location parameter estimate.
+% The default keeps this difference positive so that numerical
+% problems are less likely to occur.
+
+% }
+% \item{ilocation}{
+% Optional initial value for the location parameter.
+% A good choice can speed up the convergence rate markedly.
+% A \code{NULL} means it is chosen internally.
+
+% }
}
\details{
- The Frechet distribution has a density function that can be written
+ The (3-parameter) Frechet distribution has a density function
+ that can be written
\deqn{f(y) = \frac{sb}{(y-a)^2} [b/(y-a)]^{s-1} \, \exp[-(b/(y-a))^s] }{%
f(y) = ((s*b) / (y-a)^2) * exp[-(b/(y-a))^s] * [b/(y-a)]^(s-1)}
- for \eqn{y>a} and scale parameter \eqn{b>0}.
+ for \eqn{y > a} and scale parameter \eqn{b > 0}.
The positive shape parameter is \eqn{s}.
The cumulative distribution function is
\deqn{F(y) = \exp[-(b/(y-a))^s]. }{%
F(y) = exp[-(b/(y-a))^s].}
The mean of \eqn{Y} is \eqn{a + b \Gamma(1-1/s)}{a + b*gamma(1-1/s)}
- for \eqn{s>1} (these are returned as the fitted values).
- Note that the \code{\link{loglog}} link ensures \eqn{s>1}.
+ for \eqn{s > 1} (these are returned as the fitted values).
The variance of \eqn{Y} is
- \eqn{b^2 [ \Gamma(1-2/s) - \Gamma^2(1-1/s)]}{b^2 * [gamma(1-2/s) - gamma(1-1/s)^2]}
- for \eqn{s>2}.
+ \eqn{b^2 [ \Gamma(1-2/s) - \Gamma^2(1-1/s)]}{b^2 * [gamma(1 - 2/s) - gamma(1 - 1/s)^2]}
+ for \eqn{s > 2}.
+
+
+ Family \code{frechet2} has \eqn{a} known, and
+ \eqn{\log(b)}{log(b)} and
+ \eqn{\log(s - 2)}{log(s - 2)} are the default linear/additive predictors.
+ The working weights are estimated by simulated Fisher scoring.
+
+
+% Note that the \code{\link{loglog}} link ensures \eqn{s > 1}.
+% whereas \code{frechet3} estimates it.
+% Estimating \eqn{a} well requires a lot of data and
+% a good choice of \code{ilocation} will help speed up convergence.
+% For \code{frechet3} the default linear/additive predictors are
+% \eqn{\log(D)}{log(D)},
+% It would be great if the first linear/additive predictor was a direct
+% function of the location parameter, but this can run the risk that
+% the estimate is out of range (i.e., greater than \code{min(y)}).
- \code{frechet2} has \eqn{a} known whereas \code{frechet3}
- estimates it. Estimating \eqn{a} well requires a lot of data and
- a good choice of \code{ilocation} will help speed up convergence.
- For \code{frechet3} the default linear/additive predictors are
- \eqn{\log(D)}{log(D)},
- \eqn{\log(b)}{log(b)},
- \eqn{\log\log(s)}{log(log(s))}, respectively.
- It would be great if the first linear/additive predictor was a direct
- function of the location parameter, but this can run the risk that
- the estimate is out of range (i.e., greater than \code{min(y)}).
}
\value{
@@ -114,50 +110,56 @@ frechet3(anchor=NULL, ldifference="loge", lscale="loge", lshape="loglog",
}
\references{
Castillo, E., Hadi, A. S., Balakrishnan, N. Sarabia, J. S. (2005)
-\emph{Extreme Value and Related Models with Applications in Engineering and Science},
+\emph{Extreme Value and Related Models with Applications
+ in Engineering and Science},
Hoboken, N.J.: Wiley-Interscience.
}
\author{ T. W. Yee }
\section{Warning}{
- Convergence for \code{frechet3} can be very slow, especially if the
- initial value for the location parameter is poor. Setting something
- like \code{maxit=200, trace=TRUE} is a good idea.
+% Convergence for \code{frechet3} can be very slow, especially if the
+% initial value for the location parameter is poor. Setting something
+% like \code{maxit = 200, trace = TRUE} is a good idea.
+
+
+ Family function \code{frechet2} may fail for low values of
+ the shape parameter, e.g., near 2 or lower.
}
-\note{
- These family functions use the BFGS quasi-Newton update formula for the
- working weight matrices. Consequently the estimated variance-covariance
- matrix may be inaccurate or simply wrong! The standard errors must be
- therefore treated with caution; these are computed in functions such
- as \code{vcov()} and \code{summary()}.
+%\note{
+% Family function \code{frechet3} uses
+% the BFGS quasi-Newton update formula for the
+% working weight matrices. Consequently the estimated variance-covariance
+% matrix may be inaccurate or simply wrong! The standard errors must be
+% therefore treated with caution; these are computed in functions such
+% as \code{vcov()} and \code{summary()}.
- If \code{fit} is a \code{frechet3} fit then \code{fit at extra$location}
- is the final estimate of the location parameter, and
- \code{fit at extra$LHSanchor} is the anchor point.
+% If \code{fit} is a \code{frechet3} fit then \code{fit at extra$location}
+% is the final estimate of the location parameter, and
+% \code{fit at extra$LHSanchor} is the anchor point.
+
+
+%}
-}
\seealso{
- \code{\link{rfrechet}}.
+ \code{\link{rfrechet}},
+ \code{\link{gev}}.
}
\examples{
-y = rfrechet(n <- 1000, shape=exp(exp(0)))
-\dontrun{hist(y)}
-fit2 = vglm(y ~ 1, frechet2, trace=TRUE, maxit=155)
-fit3 = vglm(y ~ 1, frechet3(ilocation=0), trace=TRUE, maxit=155)
-coef(fit3, matrix=TRUE)
-Coef(fit3)
-head(fitted(fit3))
-mean(y)
-head(weights(fit3, type="w"))
-vcov(fit3) # caution needed!
-head(fit3 at extra$location) # Estimate of the location parameter
-fit3 at extra$LHSanchor # Anchor point
-min(y)
+set.seed(123)
+fdata = data.frame(y1 = rfrechet(nn <- 1000, shape = 2 + exp(1)))
+\dontrun{ with(fdata, hist(y1)) }
+fit2 = vglm(y1 ~ 1, frechet2, fdata, trace = TRUE)
+coef(fit2, matrix = TRUE)
+Coef(fit2)
+head(fitted(fit2))
+with(fdata, mean(y1))
+head(weights(fit2, type = "working"))
+vcov(fit2)
}
\keyword{models}
\keyword{regression}
diff --git a/man/frechetUC.Rd b/man/frechetUC.Rd
index 4be25c2..5b55561 100644
--- a/man/frechetUC.Rd
+++ b/man/frechetUC.Rd
@@ -8,23 +8,26 @@
\description{
Density, distribution function, quantile function and random
generation for the three parameter Frechet distribution.
+
}
\usage{
-dfrechet(x, location=0, scale=1, shape, log=FALSE)
-pfrechet(q, location=0, scale=1, shape)
-qfrechet(p, location=0, scale=1, shape)
-rfrechet(n, location=0, scale=1, shape)
+dfrechet(x, location = 0, scale = 1, shape, log = FALSE)
+pfrechet(q, location = 0, scale = 1, shape)
+qfrechet(p, location = 0, scale = 1, shape)
+rfrechet(n, location = 0, scale = 1, shape)
}
\arguments{
\item{x, q}{vector of quantiles.}
\item{p}{vector of probabilities.}
\item{n}{number of observations.
- Must be a positive integer of length 1.}
+ Passed into \code{\link[stats:Uniform]{runif}}.
+
+ }
\item{location, scale, shape}{the location parameter \eqn{a},
scale parameter \eqn{b}, and shape parameter \eqn{s}.}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -34,38 +37,40 @@ rfrechet(n, location=0, scale=1, shape)
\code{pfrechet} gives the distribution function,
\code{qfrechet} gives the quantile function, and
\code{rfrechet} generates random deviates.
+
}
\references{
Castillo, E., Hadi, A. S., Balakrishnan, N. Sarabia, J. S. (2005)
-\emph{Extreme Value and Related Models with Applications in Engineering and Science},
+\emph{Extreme Value and Related Models with Applications in
+ Engineering and Science},
Hoboken, N.J.: Wiley-Interscience.
}
\author{ T. W. Yee }
\details{
- See \code{\link{frechet2}} and \code{\link{frechet3}}, the \pkg{VGAM}
- family functions for estimating the 2 (without location parameter) and
- 3 parameters by maximum likelihood estimation, for the formula of the
- probability density function and range restrictions on the parameters.
+ See \code{\link{frechet2}}, the \pkg{VGAM}
+ family function for estimating the 2 parameters (without location
+ parameter) by maximum likelihood estimation, for the formula
+ of the probability density function and range restrictions on
+ the parameters.
}
%\note{
%}
\seealso{
- \code{\link{frechet2}},
- \code{\link{frechet3}}.
+ \code{\link{frechet2}}.
+% \code{\link{frechet3}}.
+
}
\examples{
-\dontrun{
-shape = 5
-x = seq(-0.1, 3.5, len=100)
-plot(x, dfrechet(x, shape=shape), type="l", ylab="", las=1,
- main="Frechet density divided into 10 equal areas; red=cdf")
-abline(h=0, col="blue", lty=2)
-qq = qfrechet(seq(0.1,0.9,by=0.1), shape=shape)
-lines(qq, dfrechet(qq, shape=shape), col="purple", lty=3, type="h")
-lines(x, pfrechet(q=x, shape=shape), col="red")
-}
+\dontrun{ shape = 5
+x = seq(-0.1, 3.5, len = 401)
+plot(x, dfrechet(x, shape = shape), type = "l", ylab = "", las = 1,
+ main = "Frechet density divided into 10 equal areas; orange = cdf")
+abline(h = 0, col = "blue", lty = 2)
+qq = qfrechet(seq(0.1, 0.9,by = 0.1), shape = shape)
+lines(qq, dfrechet(qq, shape = shape), col = "purple", lty = 3, type = "h")
+lines(x, pfrechet(q = x, shape = shape), col = "orange") }
}
\keyword{distribution}
diff --git a/man/freund61.Rd b/man/freund61.Rd
index b2b862b..9fcf883 100644
--- a/man/freund61.Rd
+++ b/man/freund61.Rd
@@ -9,8 +9,9 @@
}
\usage{
-freund61(la="loge", lap="loge", lb="loge", lbp="loge", ia=NULL, iap=NULL,
- ib=NULL, ibp=NULL, independent=FALSE, zero=NULL)
+freund61(la = "loge", lap = "loge", lb = "loge", lbp = "loge",
+ ia = NULL, iap = NULL, ib = NULL, ibp = NULL,
+ independent = FALSE, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -21,11 +22,13 @@ freund61(la="loge", lap="loge", lb="loge", lbp="loge", ia=NULL, iap=NULL,
(the ``\code{p}'' stands for ``prime'').
See \code{\link{Links}} for more choices.
+
}
\item{ia,iap,ib,ibp}{
Initial value for the four parameters respectively.
The default is to estimate them all internally.
+
}
\item{independent}{
Logical. If \code{TRUE} then the parameters are constrained to satisfy
@@ -33,6 +36,7 @@ freund61(la="loge", lap="loge", lb="loge", lbp="loge", ia=NULL, iap=NULL,
which implies that \eqn{y_1}{y1} and \eqn{y_2}{y2} are independent
and each have an ordinary exponential distribution.
+
}
\item{zero}{
An integer-valued vector specifying which
@@ -40,6 +44,7 @@ freund61(la="loge", lap="loge", lb="loge", lbp="loge", ia=NULL, iap=NULL,
The values must be from the set \{1,2,3,4\}.
The default is none of them.
+
}
}
\details{
@@ -124,12 +129,14 @@ A bivariate extension of the exponential distribution.
\emph{Journal of the American Statistical Association},
\bold{56}, 971--977.
+
}
\author{ T. W. Yee }
\note{
To estimate all four parameters, it is necessary to have some
data where \eqn{y_1<y_2}{y1<y2} and \eqn{y_2<y_1}{y2<y1}.
+
The response must be a two-column matrix, with columns
\eqn{y_1}{y1} and \eqn{y_2}{y2}.
Currently, the fitted value is a matrix with two columns; the
@@ -161,23 +168,25 @@ A bivariate extension of the exponential distribution.
\seealso{
\code{\link{exponential}}.
+
+
}
\examples{
-y1 = rexp(n <- 200, rate=4)
-y2 = rexp(n, rate=8)
+y1 = rexp(n <- 200, rate = 4)
+y2 = rexp(n, rate = 8)
ymat = cbind(y1,y2)
-fit = vglm(ymat ~ 1, fam=freund61, trace=TRUE)
-coef(fit, matrix=TRUE)
+fit = vglm(ymat ~ 1, fam = freund61, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
vcov(fit)
head(fitted(fit))
summary(fit)
# y1 and y2 are independent, so fit an independence model
-fit2 = vglm(ymat ~ 1, fam=freund61(indep=TRUE), trace=TRUE)
-coef(fit2, matrix=TRUE)
+fit2 = vglm(ymat ~ 1, fam = freund61(indep = TRUE), trace = TRUE)
+coef(fit2, matrix = TRUE)
constraints(fit2)
-pchisq(2*(logLik(fit)-logLik(fit2)), df=2, lower.tail=FALSE) # p-value
+pchisq(2*(logLik(fit)-logLik(fit2)), df = 2, lower.tail = FALSE) # p-value
}
\keyword{models}
\keyword{regression}
diff --git a/man/gamma2.Rd b/man/gamma2.Rd
index cf06696..877af3f 100644
--- a/man/gamma2.Rd
+++ b/man/gamma2.Rd
@@ -9,7 +9,7 @@
}
\usage{
gamma2(lmu = "loge", lshape = "loge", emu = list(), eshape = list(),
- method.init = 1, deviance.arg = FALSE, ishape = NULL, zero = -2)
+ imethod = 1, deviance.arg = FALSE, ishape = NULL, zero = -2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -32,7 +32,7 @@ gamma2(lmu = "loge", lshape = "loge", emu = list(), eshape = list(),
\code{iShape} argument of \code{\link{qrrvglm.control}} instead.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method for the \eqn{\mu}{mu} parameter.
If failure to converge occurs
diff --git a/man/gaussianff.Rd b/man/gaussianff.Rd
index 63a57e3..3ad204b 100644
--- a/man/gaussianff.Rd
+++ b/man/gaussianff.Rd
@@ -113,6 +113,7 @@ gaussianff(dispersion = 0, parallel = FALSE, zero = NULL)
\code{\link{normal1}},
\code{\link{huber}},
\code{\link{lqnorm}},
+ \code{\link{binormal}},
\code{vlm},
\code{\link{vglm}},
\code{\link{vgam}},
diff --git a/man/gengammaUC.Rd b/man/gengammaUC.Rd
index 6e93fdd..3a3cc93 100644
--- a/man/gengammaUC.Rd
+++ b/man/gengammaUC.Rd
@@ -42,6 +42,7 @@ Stacy, E. W. and Mihram, G. A. (1965)
Parameter estimation for a generalized gamma distribution.
\emph{Technometrics}, \bold{7}, 349--358.
+
}
\author{ T. W. Yee }
\details{
@@ -52,12 +53,14 @@ Parameter estimation for a generalized gamma distribution.
Apart from \code{n}, all the above arguments may be vectors and
are recyled to the appropriate length if necessary.
+
}
% \note{
% }
\seealso{
\code{\link{gengamma}}.
+
}
\examples{
\dontrun{ x = seq(0, 14, by = 0.01); d = 1.5; Scale = 2; k = 6
diff --git a/man/genpoisson.Rd b/man/genpoisson.Rd
index f61cb3c..c367e2c 100644
--- a/man/genpoisson.Rd
+++ b/man/genpoisson.Rd
@@ -10,7 +10,7 @@ genpoisson(llambda = "elogit", ltheta = "loge",
elambda = if (llambda == "elogit") list(min = -1, max = 1)
else list(),
etheta = list(), ilambda = NULL, itheta = NULL,
- use.approx = TRUE, method.init = 1, zero = 1)
+ use.approx = TRUE, imethod = 1, zero = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -38,7 +38,7 @@ genpoisson(llambda = "elogit", ltheta = "loge",
information matrix is used, otherwise Newton-Raphson is used.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method for the parameters.
If failure to converge occurs try another value
@@ -117,9 +117,9 @@ New York: Marcel Dekker.
}
\examples{
-gdata = data.frame(x = runif(nn <- 200))
-gdata = transform(gdata, y = rpois(nn, exp(2-x))) # Ordinary Poisson data
-fit = vglm(y ~ x, genpoisson(zero = 1), gdata, trace = TRUE)
+gdata = data.frame(x2 = runif(nn <- 200))
+gdata = transform(gdata, y = rpois(nn, exp(2-x2))) # Ordinary Poisson data
+fit = vglm(y ~ x2, genpoisson(zero = 1), gdata, trace = TRUE)
coef(fit, matrix = TRUE)
summary(fit)
}
diff --git a/man/genrayleigh.Rd b/man/genrayleigh.Rd
index 8c5e535..1fd4484 100644
--- a/man/genrayleigh.Rd
+++ b/man/genrayleigh.Rd
@@ -8,9 +8,8 @@
}
\usage{
-genrayleigh(lshape = "loge", lscale = "loge",
- eshape = list(), escale = list(),
- ishape = NULL, iscale = NULL,
+genrayleigh(lshape = "loge", lscale = "loge", eshape = list(),
+ escale = list(), ishape = NULL, iscale = NULL,
tol12 = 1e-05, nsimEIM = 300, zero = 1)
}
%- maybe also 'usage' for other objects documented here.
@@ -52,6 +51,8 @@ genrayleigh(lshape = "loge", lscale = "loge",
the fitted values.
Applications of the generalized Rayleigh distribution include modeling
strength data and general lifetime data.
+ Simulated Fisher scoring is implemented.
+
}
\value{
@@ -59,6 +60,7 @@ genrayleigh(lshape = "loge", lscale = "loge",
The object is used by modelling functions such as \code{\link{vglm}}
and \code{\link{vgam}}.
+
}
\references{
Kundu, D., Raqab, M. C. (2005).
@@ -67,24 +69,27 @@ genrayleigh(lshape = "loge", lscale = "loge",
\emph{Computational Statistics and Data Analysis},
\bold{49}, 187--200.
+
}
\author{ J. G. Lauder and T. W. Yee }
\note{
We define \code{scale} as the reciprocal of the scale parameter
used by Kundu and Raqab (2005).
+
}
\seealso{
\code{\link{dgenray}},
\code{\link{rayleigh}}.
+
}
\examples{
-shape = exp(1); scale = exp(2);
+shape = exp(1); scale = exp(1);
rdata = data.frame(y = rgenray(n = 1000, shape, scale))
fit = vglm(y ~ 1, genrayleigh, rdata, trace = TRUE)
-c(with(rdata, mean(y)), head(fitted(fit),1))
+c(with(rdata, mean(y)), head(fitted(fit), 1))
coef(fit, matrix = TRUE)
Coef(fit)
summary(fit)
diff --git a/man/genrayleighUC.Rd b/man/genrayleighUC.Rd
index f3a2e8a..92ada5a 100644
--- a/man/genrayleighUC.Rd
+++ b/man/genrayleighUC.Rd
@@ -13,19 +13,19 @@
\usage{
dgenray(x, shape, scale = 1, log = FALSE)
pgenray(q, shape, scale = 1)
-qgenray(p, shape, scale = 1)
-rgenray(n, shape, scale = 1)
+qgenray(p, shape, scale = 1)
+rgenray(n, shape, scale = 1)
}
\arguments{
\item{x, q}{vector of quantiles.}
\item{p}{vector of probabilities.}
\item{n}{number of observations.
If \code{length(n) > 1} then the length is taken to be the number required. }
- \item{shape, scale}{
- positive shape and scale parameters. }
+ \item{scale, shape}{
+ positive scale and shape parameters. }
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -43,33 +43,35 @@ rgenray(n, shape, scale = 1)
for estimating the parameters,
for the formula of the probability density function and other details.
+
}
\note{
We define \code{scale} as the reciprocal of the scale parameter
used by Kundu and Raqab (2005).
+
}
\seealso{
- \code{\link{genrayleigh}}.
+ \code{\link{genrayleigh}},
\code{\link{rayleigh}}.
+
}
\examples{
\dontrun{
shape = 0.5; scale = 1; nn = 501
-#x = seq(0.0 , 1.00, len=nn)
-x = seq(-0.1, 3.0, len=nn)
-plot(x, dgenray(x, shape, scale), type="l", las=1, ylim=c(0,1.0),
- ylab=paste("fgenray(shape=", shape, ", scale=", scale, ")"),
- col="blue", cex.main=0.8,
- main="Blue is density, red is cumulative distribution function",
- sub="Purple lines are the 10,20,...,90 percentiles")
-lines(x, pgenray(x, shape, scale), col="red")
-probs = seq(0.1, 0.9, by=0.1)
+x = seq(-0.10, 3.0, len = nn)
+plot(x, dgenray(x, shape, scale), type = "l", las = 1, ylim = c(0, 1.2),
+ ylab = paste("[dp]genray(shape = ", shape, ", scale = ", scale, ")"),
+ col = "blue", cex.main = 0.8,
+ main = "Blue is density, orange is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+lines(x, pgenray(x, shape, scale), col = "orange")
+probs = seq(0.1, 0.9, by = 0.1)
Q = qgenray(probs, shape, scale)
-lines(Q, dgenray(Q, shape, scale), col="purple", lty=3, type="h")
-lines(Q, pgenray(Q, shape, scale), col="purple", lty=3, type="h")
-abline(h=probs, col="purple", lty=3)
+lines(Q, dgenray(Q, shape, scale), col = "purple", lty = 3, type = "h")
+lines(Q, pgenray(Q, shape, scale), col = "purple", lty = 3, type = "h")
+abline(h = probs, col = "purple", lty = 3)
max(abs(pgenray(Q, shape, scale) - probs)) # Should be 0
}
}
diff --git a/man/geometric.Rd b/man/geometric.Rd
index ccb6e6f..d92e03e 100644
--- a/man/geometric.Rd
+++ b/man/geometric.Rd
@@ -6,7 +6,7 @@
Maximum likelihood estimation for the geometric distribution.
}
\usage{
-geometric(link = "logit", earg=list(), expected = TRUE, method.init = 1)
+geometric(link = "logit", earg=list(), expected = TRUE, imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -26,7 +26,7 @@ geometric(link = "logit", earg=list(), expected = TRUE, method.init = 1)
Fisher scoring is used if \code{expected = TRUE}, else Newton-Raphson.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} which
specifies the initialization method for the probability.
If failure to converge occurs try another value.
diff --git a/man/gev.Rd b/man/gev.Rd
index 59192db..d24a512 100644
--- a/man/gev.Rd
+++ b/man/gev.Rd
@@ -11,18 +11,18 @@
\usage{
gev(llocation = "identity", lscale = "loge", lshape = "logoff",
elocation = list(), escale = list(),
- eshape = if (lshape=="logoff") list(offset=0.5) else
- if (lshape=="elogit") list(min=-0.5, max=0.5) else list(),
+ eshape = if (lshape == "logoff") list(offset = 0.5) else
+ if (lshape == "elogit") list(min = -0.5, max = 0.5) else list(),
percentiles = c(95, 99), iscale=NULL, ishape = NULL,
- method.init = 1, gshape=c(-0.45, 0.45), tolshape0=0.001,
- giveWarning=TRUE, zero = 3)
+ imethod = 1, gshape=c(-0.45, 0.45), tolshape0 = 0.001,
+ giveWarning = TRUE, zero = 3)
egev(llocation = "identity", lscale = "loge", lshape = "logoff",
elocation = list(), escale = list(),
- eshape = if (lshape=="logoff") list(offset=0.5) else
- if (lshape=="elogit") list(min=-0.5, max=0.5) else list(),
+ eshape = if (lshape == "logoff") list(offset = 0.5) else
+ if (lshape == "elogit") list(min = -0.5, max = 0.5) else list(),
percentiles = c(95, 99), iscale=NULL, ishape = NULL,
- method.init=1, gshape=c(-0.45, 0.45), tolshape0=0.001,
- giveWarning=TRUE, zero = 3)
+ imethod = 1, gshape=c(-0.45, 0.45), tolshape0 = 0.001,
+ giveWarning = TRUE, zero = 3)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -40,19 +40,20 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
called \eqn{A} below; and then the linear/additive predictor is
\eqn{\log(\xi+A)}{log(xi+A)} which means that
\eqn{\xi > -A}{xi > -A}.
- For technical reasons (see \bold{Details}) it is a good idea for \eqn{A=0.5}.
+ For technical reasons (see \bold{Details}) it is a good idea
+ for \eqn{A = 0.5}.
}
% \item{Offset}{
% Numeric, of length 1.
% Called \eqn{A} below.
-% Offset value if \code{lshape="logoff"}.
+% Offset value if \code{lshape = "logoff"}.
% Then the linear/additive predictor is
% \eqn{\log(\xi+A)}{log(xi+A)} which means that
% \eqn{\xi > -A}{xi > -A}.
% For technical reasons (see \bold{Details}) it is a good idea for
-% \code{Offset=0.5}.
+% \code{Offset = 0.5}.
% }
\item{percentiles}{
@@ -62,6 +63,7 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
\eqn{\mu + \sigma (\Gamma(1-\xi)-1) / \xi}{mu + sigma * (gamma(1-xi)-1)/xi}
is returned, and this is only defined if \eqn{\xi<1}{xi<1}.
+
}
\item{iscale, ishape}{
Numeric. Initial value for \eqn{\sigma}{sigma} and
@@ -74,10 +76,11 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
Also, in general, a larger value of \code{iscale} is better than a
smaller value.
+
}
% \item{rshape}{
% Numeric, of length 2.
-% Range of \eqn{\xi}{xi} if \code{lshape="elogit"} is chosen.
+% Range of \eqn{\xi}{xi} if \code{lshape = "elogit"} is chosen.
% The rationale for the default values is given below.
% }
@@ -88,24 +91,27 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
% See \bold{Details} for more details.
% }
- \item{method.init}{
+ \item{imethod}{
Initialization method. Either the value 1 or 2.
Method 1 involves choosing the best \eqn{\xi}{xi} on a course grid with
endpoints \code{gshape}.
Method 2 is similar to the method of moments.
If both methods fail try using \code{ishape}.
+
}
\item{gshape}{
Numeric, of length 2.
Range of \eqn{\xi}{xi} used for a grid search for a good initial value
for \eqn{\xi}{xi}.
- Used only if \code{method.init} equals 1.
+ Used only if \code{imethod} equals 1.
+
}
\item{tolshape0, giveWarning}{
Passed into \code{\link{dgev}} when computing the log-likelihood.
+
}
\item{zero}{
An integer-valued vector specifying which
@@ -114,7 +120,8 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
respectively to \eqn{\mu}{mu}, \eqn{\sigma}{sigma}, \eqn{\xi}{xi}.
If \code{zero=NULL} then all linear/additive predictors are modelled as
a linear combination of the explanatory variables.
- For many data sets having \code{zero=3} is a good idea.
+ For many data sets having \code{zero = 3} is a good idea.
+
}
}
@@ -131,12 +138,13 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
The cases
\eqn{\xi>0}{xi>0},
\eqn{\xi<0}{xi<0},
- \eqn{\xi=0}{xi=0}
+ \eqn{\xi = 0}{xi = 0}
correspond to the Frechet, Weibull, and Gumbel types respectively.
It can be noted that the Gumbel (or Type I) distribution accommodates
many commonly-used distributions such as the normal, lognormal,
logistic, gamma, exponential and Weibull.
+
For the GEV distribution, the \eqn{k}th moment about the mean exists
if \eqn{\xi < 1/k}{xi < 1/k}.
Provided they exist, the mean and variance are given by
@@ -147,23 +155,27 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
respectively,
where \eqn{\Gamma}{Gamma} is the gamma function.
+
Smith (1985) established that when \eqn{\xi > -0.5}{xi > -0.5},
the maximum likelihood estimators are completely regular.
To have some control over the estimated \eqn{\xi}{xi} try
- using \code{lshape="logoff"} and the \code{eshape=list(offset=0.5)}, say,
- or \code{lshape="elogit"} and \code{eshape=list(min=-0.5, max=0.5)}, say.
+ using \code{lshape = "logoff"} and the \code{eshape=list(offset = 0.5)}, say,
+ or \code{lshape = "elogit"} and \code{eshape=list(min = -0.5, max = 0.5)}, say.
+
% and when \eqn{-1 < \xi < -0.5}{-1 < xi < -0.5} they exist but are
% non-regular; and when \eqn{\xi < -1}{xi < -1} then the maximum
% likelihood estimators do not exist. In most environmental data
% sets \eqn{\xi > -1}{xi > -1} so maximum likelihood works fine.
+
}
\section{Warning }{
Currently, if an estimate of \eqn{\xi}{xi} is too close to zero then
an error will occur for \code{gev()} with multivariate responses.
In general, \code{egev()} is more reliable than \code{gev()}.
+
Fitting the GEV by maximum likelihood estimation can be numerically
fraught. If \eqn{1 + \xi (y-\mu)/ \sigma \leq 0}{1 + xi*(y-mu)/sigma <=
0} then some crude evasive action is taken but the estimation process
@@ -174,6 +186,7 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
half-stepsizing whereas \code{\link{vgam}} doesn't (half-stepsizing
helps handle the problem of straying outside the parameter space.)
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
@@ -186,19 +199,23 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
Vector generalized linear and additive extreme value models.
\emph{Extremes}, \bold{10}, 1--19.
+
Tawn, J. A. (1988)
An extreme-value theory model for dependent observations.
\emph{Journal of Hydrology}, \bold{101}, 227--250.
+
Prescott, P. and Walden, A. T. (1980)
Maximum likelihood estimation of the parameters of the
generalized extreme-value distribution.
\emph{Biometrika}, \bold{67}, 723--724.
+
Smith, R. L. (1985)
Maximum likelihood estimation in a class of nonregular cases.
\emph{Biometrika}, \bold{72}, 67--90.
+
}
\author{ T. W. Yee }
@@ -208,61 +225,68 @@ egev(llocation = "identity", lscale = "loge", lshape = "logoff",
descending order and \code{NA}s are put last.
With a vector or one-column matrix response using
\code{egev} will give the same result but be faster and it handles
- the \eqn{\xi=0}{xi=0} case.
+ the \eqn{\xi = 0}{xi = 0} case.
The function \code{gev} implements Tawn (1988) while
\code{egev} implements Prescott and Walden (1980).
+
The shape parameter \eqn{\xi}{xi} is difficult to estimate
accurately unless there is a lot of data.
Convergence is slow when \eqn{\xi}{xi} is near \eqn{-0.5}.
Given many explanatory variables, it is often a good idea
- to make sure \code{zero=3}.
+ to make sure \code{zero = 3}.
The range restrictions of the parameter \eqn{\xi}{xi} are not
enforced; thus it is possible for a violation to occur.
+
Successful convergence often depends on having a reasonably good initial
value for \eqn{\xi}{xi}. If failure occurs try various values for the
argument \code{ishape}, and if there are covariates,
- having \code{zero=3} is advised.
+ having \code{zero = 3} is advised.
+
}
\seealso{
-%\code{\link{egev}},
-%\code{\link{ogev}},
-\code{\link{rgev}},
-\code{\link{gumbel}},
-\code{\link{egumbel}},
-\code{\link{guplot}},
-\code{\link{rlplot.egev}},
-\code{\link{gpd}},
-\code{\link{elogit}},
-\code{\link{oxtemp}},
-\code{\link{venice}}.
+ %\code{\link{egev}},
+ %\code{\link{ogev}},
+ \code{\link{rgev}},
+ \code{\link{gumbel}},
+ \code{\link{egumbel}},
+ \code{\link{guplot}},
+ \code{\link{rlplot.egev}},
+ \code{\link{gpd}},
+ \code{\link{frechet2}},
+ \code{\link{elogit}},
+ \code{\link{oxtemp}},
+ \code{\link{venice}}.
+
+
}
\examples{
# Multivariate example
-fit1 = vgam(cbind(r1,r2) ~ s(year, df=3), gev(zero=2:3), venice, trace=TRUE)
-coef(fit1, matrix=TRUE)
+fit1 = vgam(cbind(r1, r2) ~ s(year, df = 3), gev(zero = 2:3),
+ venice, trace = TRUE)
+coef(fit1, matrix = TRUE)
head(fitted(fit1))
\dontrun{
-par(mfrow=c(1,2), las=1)
-plot(fit1, se=TRUE, lcol="blue", scol="forestgreen",
- main="Fitted mu(year) function (centered)", cex.main=0.8)
-with(venice, matplot(year, y[,1:2], ylab="Sea level (cm)", col=1:2,
- main="Highest 2 annual sea levels", cex.main=0.8))
-with(venice, lines(year, fitted(fit1)[,1], lty="dashed", col="blue"))
-legend("topleft", lty="dashed", col="blue", "Fitted 95 percentile") }
+par(mfrow=c(1,2), las = 1)
+plot(fit1, se = TRUE, lcol = "blue", scol = "forestgreen",
+ main = "Fitted mu(year) function (centered)", cex.main = 0.8)
+with(venice, matplot(year, y[,1:2], ylab = "Sea level (cm)", col = 1:2,
+ main = "Highest 2 annual sea levels", cex.main = 0.8))
+with(venice, lines(year, fitted(fit1)[,1], lty = "dashed", col = "blue"))
+legend("topleft", lty = "dashed", col = "blue", "Fitted 95 percentile") }
# Univariate example
-(fit = vglm(maxtemp ~ 1, egev, oxtemp, trace=TRUE))
+(fit = vglm(maxtemp ~ 1, egev, oxtemp, trace = TRUE))
head(fitted(fit))
-coef(fit, mat=TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
vcov(fit)
-vcov(fit, untransform=TRUE)
+vcov(fit, untransform = TRUE)
sqrt(diag(vcov(fit))) # Approximate standard errors
\dontrun{ rlplot(fit) }
}
diff --git a/man/gevUC.Rd b/man/gevUC.Rd
index 33498d2..7cfef1c 100644
--- a/man/gevUC.Rd
+++ b/man/gevUC.Rd
@@ -13,11 +13,11 @@
shape parameter \code{shape}.
}
\usage{
-dgev(x, location=0, scale=1, shape=0, log=FALSE, tolshape0 =
+dgev(x, location = 0, scale = 1, shape = 0, log = FALSE, tolshape0 =
sqrt(.Machine$double.eps), oobounds.log = -Inf, giveWarning = FALSE)
-pgev(q, location=0, scale=1, shape=0)
-qgev(p, location=0, scale=1, shape=0)
-rgev(n, location=0, scale=1, shape=0)
+pgev(q, location = 0, scale = 1, shape = 0)
+qgev(p, location = 0, scale = 1, shape = 0)
+rgev(n, location = 0, scale = 1, shape = 0)
}
\arguments{
\item{x, q}{vector of quantiles.}
@@ -30,7 +30,7 @@ rgev(n, location=0, scale=1, shape=0)
\item{shape}{the shape parameter \eqn{\xi}{xi}.}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
\item{tolshape0}{
@@ -61,11 +61,15 @@ rgev(n, location=0, scale=1, shape=0)
\code{pgev} gives the distribution function,
\code{qgev} gives the quantile function, and
\code{rgev} generates random deviates.
+
+
}
\references{
Coles, S. (2001)
\emph{An Introduction to Statistical Modeling of Extreme Values}.
London: Springer-Verlag.
+
+
}
\author{ T. W. Yee }
\details{
@@ -74,36 +78,41 @@ London: Springer-Verlag.
for formulae and other details.
Apart from \code{n}, all the above arguments may be vectors and
are recyled to the appropriate length if necessary.
+
+
}
\note{
- The default value of \eqn{\xi=0}{xi=0} means the default distribution
+ The default value of \eqn{\xi = 0}{xi = 0} means the default distribution
is the Gumbel.
+
Currently, these functions have different argument names compared with
those in the \pkg{evd} package.
+
}
\seealso{
\code{\link{gev}},
\code{\link{egev}},
\code{\link{vglm.control}}.
+
}
\examples{
\dontrun{
-x = seq(-3, 3, by=0.01)
+x = seq(-3, 3, by = 0.01)
loc = 0; sigma = 1; xi = -0.4
-plot(x, dgev(x, loc, sigma, xi), type="l", col="blue", ylim=c(0,1),
- main="Blue is density, red is cumulative distribution function",
- sub="Purple are 5,10,...,95 percentiles", ylab="", las=1)
-abline(h=0, col="blue", lty=2)
-lines(qgev(seq(0.05,0.95,by=0.05), loc, sigma, xi),
- dgev(qgev(seq(0.05,0.95,by=0.05), loc, sigma, xi), loc, sigma, xi),
- col="purple", lty=3, type="h")
-lines(x, pgev(x, loc, sigma, xi), type="l", col="red")
-abline(h=0, lty=2)
-
-pgev(qgev(seq(0.05,0.95,by=0.05), loc, sigma, xi), loc, sigma, xi)
+plot(x, dgev(x, loc, sigma, xi), type = "l", col = "blue", ylim = c(0,1),
+ main = "Blue is density, red is cumulative distribution function",
+ sub = "Purple are 5,10,...,95 percentiles", ylab = "", las = 1)
+abline(h = 0, col = "blue", lty = 2)
+lines(qgev(seq(0.05, 0.95, by = 0.05), loc, sigma, xi),
+ dgev(qgev(seq(0.05, 0.95, by = 0.05), loc, sigma, xi), loc, sigma, xi),
+ col = "purple", lty = 3, type = "h")
+lines(x, pgev(x, loc, sigma, xi), type = "l", col = "red")
+abline(h = 0, lty = 2)
+
+pgev(qgev(seq(0.05, 0.95, by = 0.05), loc, sigma, xi), loc, sigma, xi)
}
}
\keyword{distribution}
diff --git a/man/gpd.Rd b/man/gpd.Rd
index 7887134..f491292 100644
--- a/man/gpd.Rd
+++ b/man/gpd.Rd
@@ -12,7 +12,7 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
eshape = if (lshape == "logoff") list(offset = 0.5) else
if (lshape == "elogit") list(min = -0.5, max = 0.5) else NULL,
percentiles = c(90, 95), iscale = NULL, ishape = NULL,
- tolshape0 = 0.001, giveWarning = TRUE, method.init = 1, zero = 2)
+ tolshape0 = 0.001, giveWarning = TRUE, imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -43,18 +43,18 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
called \eqn{A} below; and then the second linear/additive predictor is
\eqn{\log(\xi+A)}{log(xi+A)} which means that
\eqn{\xi > -A}{xi > -A}.
- The working weight matrices are positive definite if \eqn{A=0.5}.
+ The working weight matrices are positive definite if \eqn{A = 0.5}.
}
% \item{Offset}{
% Numeric, of length 1.
% Called \eqn{A} below.
-% Offset value if \code{lshape="logoff"}.
+% Offset value if \code{lshape = "logoff"}.
% Then the second linear/additive predictor is
% \eqn{\log(\xi+A)}{log(xi+A)} which means that
% \eqn{\xi > -A}{xi > -A}.
-% The working weight matrices are positive definite if \code{Offset=0.5}.
+% The working weight matrices are positive definite if \code{Offset = 0.5}.
% }
\item{percentiles}{
@@ -69,7 +69,7 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
\item{iscale, ishape}{
Numeric. Optional initial values for \eqn{\sigma}{sigma}
and \eqn{\xi}{xi}.
- The default is to use \code{method.init} and compute a value internally for
+ The default is to use \code{imethod} and compute a value internally for
each parameter.
Values of \code{ishape} should be between \eqn{-0.5} and \eqn{1}.
Values of \code{iscale} should be positive.
@@ -77,7 +77,7 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
}
% \item{rshape}{
% Numeric, of length 2.
-% Range of \eqn{\xi}{xi} if \code{lshape="elogit"} is chosen.
+% Range of \eqn{\xi}{xi} if \code{lshape = "elogit"} is chosen.
% The default values ensures the algorithm works (\eqn{\xi > -0.5}{xi > -0.5})
% and the variance exists (\eqn{\xi < 0.5}{xi < 0.5}).
@@ -95,7 +95,7 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
% derivatives etc. will be used.
% }
- \item{method.init}{
+ \item{imethod}{
Method of initialization, either 1 or 2. The first is the method of
moments, and the second is a variant of this. If neither work, try
assigning values to arguments \code{ishape} and/or \code{iscale}.
@@ -110,7 +110,7 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
to be modelled through
a linear combination of the explanatory variables because the
shape parameter is probably best left as an intercept only:
- \code{zero=2}.
+ \code{zero = 2}.
Setting \code{zero=NULL} means both parameters are modelled with
explanatory variables.
@@ -222,12 +222,12 @@ gpd(threshold = 0, lscale = "loge", lshape = "logoff", escale = list(),
}
\examples{
-# Simulated data from an exponential distribution (xi=0)
+# Simulated data from an exponential distribution (xi = 0)
threshold = 0.5
-gdata = data.frame(y = threshold + rexp(n=3000, rate=2))
-fit = vglm(y ~ 1, gpd(threshold=threshold), gdata, trace=TRUE)
+gdata = data.frame(y = threshold + rexp(n = 3000, rate = 2))
+fit = vglm(y ~ 1, gpd(threshold = threshold), gdata, trace = TRUE)
head(fitted(fit))
-coef(fit, matrix=TRUE) # xi should be close to 0
+coef(fit, matrix = TRUE) # xi should be close to 0
Coef(fit)
summary(fit)
@@ -241,27 +241,29 @@ ii = fit at y < fitted(fit)[1,"90\%"]
ii = fit at y < fitted(fit)[1,"95\%"]
100*table(ii)/sum(table(ii)) # Should be 95%
-\dontrun{
-plot(fit at y, col="blue", las=1, main="Fitted 90\% and 95\% quantiles")
-matlines(1:length(fit at y), fitted(fit), lty=2:3, lwd=2) }
+\dontrun{ plot(fit at y, col = "blue", las = 1,
+ main = "Fitted 90\% and 95\% quantiles")
+matlines(1:length(fit at y), fitted(fit), lty = 2:3, lwd = 2) }
# Another example
threshold = 0
-gdata = data.frame(x = runif(nn <- 2000))
-xi = exp(-0.8)-0.5
-gdata = transform(gdata, y = rgpd(nn, scale=exp(1+0.1*x), shape=xi))
-fit = vglm(y ~ x, gpd(threshold), gdata, trace=TRUE)
-coef(fit, matrix=TRUE)
+gdata = data.frame(x2 = runif(nn <- 2000))
+xi = exp(-0.8) - 0.5
+gdata = transform(gdata, y = rgpd(nn, scale = exp(1+0.1*x2), shape = xi))
+fit = vglm(y ~ x2, gpd(threshold), gdata, trace = TRUE)
+coef(fit, matrix = TRUE)
\dontrun{ # Nonparametric fits
-gdata = transform(gdata, yy = y + rnorm(nn, sd=0.1))
-fit1 = vgam(yy ~ s(x), gpd(threshold), gdata, trace=TRUE) # Not so recommended
-par(mfrow=c(2,1))
-plotvgam(fit1, se=TRUE, scol="blue")
-fit2 = vglm(yy ~ bs(x), gpd(threshold), gdata, trace=TRUE) # More recommended
-plotvgam(fit2, se=TRUE, scol="blue") }
+gdata = transform(gdata, yy = y + rnorm(nn, sd = 0.1))
+# Not so recommended:
+fit1 = vgam(yy ~ s(x2), gpd(threshold), gdata, trace = TRUE)
+par(mfrow = c(2,1))
+plotvgam(fit1, se = TRUE, scol = "blue")
+# More recommended:
+fit2 = vglm(yy ~ bs(x2), gpd(threshold), gdata, trace = TRUE)
+plotvgam(fit2, se = TRUE, scol = "blue") }
}
\keyword{models}
\keyword{regression}
diff --git a/man/gpdUC.Rd b/man/gpdUC.Rd
index 9a16f71..eb6f6a1 100644
--- a/man/gpdUC.Rd
+++ b/man/gpdUC.Rd
@@ -11,14 +11,15 @@
location parameter \code{location},
scale parameter \code{scale} and
shape parameter \code{shape}.
+
}
\usage{
-dgpd(x, location=0, scale=1, shape=0, log=FALSE,
+dgpd(x, location = 0, scale = 1, shape = 0, log = FALSE,
tolshape0 = sqrt(.Machine$double.eps),
- oobounds.log = -Inf, giveWarning=FALSE)
-pgpd(q, location=0, scale=1, shape=0)
-qgpd(p, location=0, scale=1, shape=0)
-rgpd(n, location=0, scale=1, shape=0)
+ oobounds.log = -Inf, giveWarning = FALSE)
+pgpd(q, location = 0, scale = 1, shape = 0)
+qgpd(p, location = 0, scale = 1, shape = 0)
+rgpd(n, location = 0, scale = 1, shape = 0)
}
\arguments{
\item{x, q}{vector of quantiles.}
@@ -30,7 +31,8 @@ rgpd(n, location=0, scale=1, shape=0)
\item{shape}{the shape parameter \eqn{\xi}{xi}.}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
+
}
\item{tolshape0}{
@@ -40,6 +42,7 @@ rgpd(n, location=0, scale=1, shape=0)
this value then it will be assumed zero and an exponential distribution will
be used.
+
}
\item{oobounds.log, giveWarning}{
Numeric and logical.
@@ -56,6 +59,7 @@ rgpd(n, location=0, scale=1, shape=0)
for half-stepping. Both arguments are in support of this.
This argument and others match those of \code{\link{gpd}}.
+
}
}
@@ -69,6 +73,8 @@ rgpd(n, location=0, scale=1, shape=0)
Coles, S. (2001)
\emph{An Introduction to Statistical Modeling of Extreme Values}.
London: Springer-Verlag.
+
+
}
\author{ T. W. Yee }
\details{
@@ -77,31 +83,36 @@ London: Springer-Verlag.
for formulae and other details.
Apart from \code{n}, all the above arguments may be vectors and
are recyled to the appropriate length if necessary.
+
+
}
\note{
The default values of all three parameters, especially
- \eqn{\xi=0}{xi=0}, means the default distribution is the exponential.
+ \eqn{\xi = 0}{xi = 0}, means the default distribution is the exponential.
+
Currently, these functions have different argument names compared
with those in the \pkg{evd} package.
+
+
}
\seealso{
\code{\link{gpd}}.
+
}
\examples{
-\dontrun{
-x = seq(-0.2, 3, by=0.01)
+\dontrun{ x = seq(-0.2, 3, by = 0.01)
loc = 0; sigma = 1; xi = -0.4
-plot(x, dgpd(x, loc, sigma, xi), type="l", col="blue", ylim=c(0,1),
- main="Blue is density, red is cumulative distribution function",
- sub="Purple are 5,10,...,95 percentiles", ylab="", las=1)
-abline(h=0, col="blue", lty=2)
-lines(qgpd(seq(0.05,0.95,by=0.05), loc, sigma, xi),
- dgpd(qgpd(seq(0.05,0.95,by=0.05), loc, sigma, xi), loc, sigma, xi),
- col="purple", lty=3, type="h")
-lines(x, pgpd(x, loc, sigma, xi), type="l", col="red")
-abline(h=0, lty=2)
+plot(x, dgpd(x, loc, sigma, xi), type = "l", col = "blue", ylim = c(0, 1),
+ main = "Blue is density, red is cumulative distribution function",
+ sub = "Purple are 5,10,...,95 percentiles", ylab = "", las = 1)
+abline(h = 0, col = "blue", lty = 2)
+lines(qgpd(seq(0.05, 0.95, by = 0.05), loc, sigma, xi),
+ dgpd(qgpd(seq(0.05, 0.95, by = 0.05), loc, sigma, xi), loc, sigma, xi),
+ col = "purple", lty = 3, type = "h")
+lines(x, pgpd(x, loc, sigma, xi), type = "l", col = "red")
+abline(h = 0, lty = 2)
}
}
\keyword{distribution}
diff --git a/man/grc.Rd b/man/grc.Rd
index a8789b7..802d7fe 100644
--- a/man/grc.Rd
+++ b/man/grc.Rd
@@ -11,7 +11,7 @@
\usage{
grc(y, Rank = 1, Index.corner = 2:(1 + Rank),
szero = 1, summary.arg = FALSE, h.step = 1e-04, ...)
-rcam(y, Rank = 0, family = poissonff, Musual = NULL,
+rcam(y, family = poissonff, Rank = 0, Musual = NULL,
Index.corner = if (!Rank) NULL else 1 + Musual * (1:Rank),
rprefix = "Row.", cprefix = "Col.",
szero = if (!Rank) NULL else {
@@ -27,16 +27,7 @@ rcam(y, Rank = 0, family = poissonff, Musual = NULL,
For \code{grc} a matrix of counts.
For \code{rcam} a general matrix response depending on \code{family}.
Output from \code{table()} is acceptable; it is converted into a matrix.
- Note that \code{y} must be at least 3 by 3.
-
- }
- \item{Rank}{
- An integer from the set
- \{0,\ldots,\code{min(nrow(y), ncol(y))}\}.
- This is the dimension of the fit in terms of the interaction.
- For \code{grc()} this argument must be positive.
- A value of 0 means no interactions (i.e., main effects only);
- each row and column is represented by an indicator variable.
+ Note that \code{y} should be at least 3 by 3 in dimension.
}
\item{family}{
@@ -51,12 +42,23 @@ rcam(y, Rank = 0, family = poissonff, Musual = NULL,
\code{\link{zipoisson}} because of the ordering of the
linear/additive predictors.
If the \pkg{VGAM} family function does not have an \code{infos}
- slot then \code{Musual} needs to be inputted.
+ slot then \code{Musual} needs to be inputted (the number of
+ linear predictors for an ordinary (usually univariate) response,
+ aka \eqn{M}).
The \pkg{VGAM} family function also needs to be able to
handle multiple responses; and not all of them can do this.
}
+ \item{Rank}{
+ An integer from the set
+ \{0,\ldots,\code{min(nrow(y), ncol(y))}\}.
+ This is the dimension of the fit in terms of the interaction.
+ For \code{grc()} this argument must be positive.
+ A value of 0 means no interactions (i.e., main effects only);
+ each row and column is represented by an indicator variable.
+
+ }
\item{Index.corner}{
A vector of \code{Rank} integers.
These are used to store the \code{Rank} by \code{Rank}
@@ -126,8 +128,6 @@ These are called \code{Row.} and \code{Col.} (by default) followed
by the row or column number.
-
-
The function \code{rcam()} is more general than \code{grc()}.
Its default is a no-interaction model of \code{grc()}, i.e.,
rank-0 and a Poisson distribution. This means that each
@@ -143,9 +143,9 @@ ANOVA with and without interactions,
Others include
\code{\link{zipoissonff}},
\code{\link{negbinomial}}.
-Hopefully one day \emph{all} \pkg{VGAM} family functions will work when
-assigned to the \code{family} argument
-although the result may not have meaning.
+Hopefully one day \emph{all} \pkg{VGAM} family functions will
+work when assigned to the \code{family} argument, although the
+result may not have meaning.
}
@@ -153,8 +153,12 @@ although the result may not have meaning.
An object of class \code{"grc"}, which currently is the same as
an \code{"rrvglm"} object.
Currently,
- a rank-0 \code{rcam()} object is of class \code{\link{vglm-class}},
- but it may become of class \code{"rcam"} one day.
+ a rank-0 \code{rcam()} object is of class \code{\link{rcam0-class}},
+ else of class \code{"rcam"} (this may change in the future).
+
+% Currently,
+% a rank-0 \code{rcam()} object is of class \code{\link{vglm-class}},
+% but it may become of class \code{"rcam"} one day.
}
@@ -180,7 +184,7 @@ indicator variables.
}
\author{
-Thomas W. Yee, with some
+Thomas W. Yee, with
assistance from Alfian F. Hadi.
@@ -212,7 +216,7 @@ assistance from Alfian F. Hadi.
\section{Warning}{
The function \code{rcam()} is experimental at this stage and
- may have some bugs.
+ may have bugs.
Quite a lot of expertise is needed when fitting and in its
interpretion thereof. For example, the constraint
matrices applies the reduced-rank regression to the first linear
@@ -242,8 +246,11 @@ assistance from Alfian F. Hadi.
\code{\link{rrvglm.control}},
\code{\link{rrvglm-class}},
\code{summary.grc},
+ \code{\link{moffset}},
\code{\link{Rcam}},
\code{\link{plotrcam0}},
+ \code{\link{alcoff}},
+ \code{\link{crashi}},
\code{\link{auuc}},
\code{\link{olympic}},
\code{\link{poissonff}}.
@@ -273,11 +280,17 @@ Coef(oly1)
# Roughly median polish
rcam0 <- rcam(auuc, fam = alaplace2(tau = 0.5, intparloc = TRUE), trace = TRUE)
round(fitted(rcam0), dig = 0)
+round(100 * (fitted(rcam0) - auuc) / auuc, dig = 0) # Discrepancy
rcam0 at y
round(coef(rcam0, matrix = TRUE), dig = 2)
print(Coef(rcam0, matrix = TRUE), dig = 3)
# constraints(rcam0)
names(constraints(rcam0))
+
+# Compare with medpolish():
+(med.a <- medpolish(auuc))
+fv <- med.a$overall + outer(med.a$row, med.a$col, "+")
+round(100 * (fitted(rcam0) - fv) / fv) # Hopefully should be all 0s
}
\keyword{models}
\keyword{regression}
diff --git a/man/gumbel.Rd b/man/gumbel.Rd
index d803997..c0052c7 100644
--- a/man/gumbel.Rd
+++ b/man/gumbel.Rd
@@ -46,19 +46,19 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
Numeric vector of percentiles used
for the fitted values. Values should be between 0 and 100.
This argument uses the argument \code{R} if assigned.
- If \code{percentiles=NULL} then the mean will be returned as the
+ If \code{percentiles = NULL} then the mean will be returned as the
fitted values.
-% This argument is ignored if \code{mean=TRUE}.
+% This argument is ignored if \code{mean = TRUE}.
}
\item{mpv}{
- Logical. If \code{mpv=TRUE} then the \emph{median predicted value} (MPV)
+ Logical. If \code{mpv = TRUE} then the \emph{median predicted value} (MPV)
is computed and returned as the (last) column of the fitted values.
- This argument is ignored if \code{percentiles=NULL}.
+ This argument is ignored if \code{percentiles = NULL}.
See \bold{Details} for more details.
-% This argument is ignored if \code{mean=TRUE}.
+% This argument is ignored if \code{mean = TRUE}.
}
% \item{mean}{
@@ -79,13 +79,14 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
}
\details{
The Gumbel distribution is a generalized extreme value (GEV)
- distribution with \emph{shape} parameter \eqn{\xi=0}{xi=0}.
+ distribution with \emph{shape} parameter \eqn{\xi = 0}{xi = 0}.
Consequently it is more easily estimated than the GEV.
See \code{\link{gev}} for more details.
+
The quantity \eqn{R} is the maximum number of observations possible,
for example, in the Venice data below, the top 10 daily values
- are recorded for each year, therefore \eqn{R=365} because there are
+ are recorded for each year, therefore \eqn{R = 365} because there are
about 365 days per year.
The MPV is the value of the response such that the probability
of obtaining a value greater than the MPV is 0.5 out of
@@ -93,9 +94,10 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
For the Venice data, the MPV is the sea level such that there
is an even chance that the highest level for a particular year
exceeds the MPV.
- When \code{mpv=TRUE}, the column labelled \code{"MPV"} contains
+ When \code{mpv = TRUE}, the column labelled \code{"MPV"} contains
the MPVs when \code{fitted()} is applied to the fitted object.
+
The formula for the mean of a response \eqn{Y} is
\eqn{\mu+\sigma \times Euler} where \eqn{Euler} is a constant
that has value approximately equal to 0.5772.
@@ -107,22 +109,27 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
\eqn{\mu-\sigma \times \log[R(1-P/100)]}{location-
scale*log[-log(R*(1-P/100))]}.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
+
}
\references{
Yee, T. W. and Stephenson, A. G. (2007)
Vector generalized linear and additive extreme value models.
\emph{Extremes}, \bold{10}, 1--19.
+
Smith, R. L. (1986)
Extreme value theory based on the \emph{r} largest annual events.
\emph{Journal of Hydrology},
\bold{86}, 27--43.
+
Rosen, O. and Cohen, A. (1996)
Extreme percentile regression.
In: Haerdle, W. and Schimek, M. G. (eds.),
@@ -131,10 +138,12 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
Semmering, Austria, 27--28 August 1994}, pp.200--214,
Heidelberg: Physica-Verlag.
+
Coles, S. (2001)
\emph{An Introduction to Statistical Modeling of Extreme Values}.
London: Springer-Verlag.
+
}
\author{ T. W. Yee }
@@ -152,11 +161,12 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
\code{egumbel()} only handles a univariate response, and is
preferred to \code{gumbel()} because it is faster.
+
\code{gumbel()} can handle a multivariate response, i.e., a
matrix with more than one column. Each row of the matrix is
sorted into descending order.
Missing values in the response are allowed but require
- \code{na.action=na.pass}. The response matrix needs to be
+ \code{na.action = na.pass}. The response matrix needs to be
padded with any missing values. With a multivariate response
one has a matrix \code{y}, say, where
\code{y[,2]} contains the second order statistics etc.
@@ -177,61 +187,62 @@ egumbel(llocation = "identity", lscale = "loge", elocation = list(),
\code{\link{egev}},
%\code{\link{ogev}},
\code{\link{venice}}.
+
+
}
\examples{
# Example 1: Simulated data
-gdata = data.frame(y = rgumbel(n=1000, loc = 100, scale=exp(1)))
-fit = vglm(y ~ 1, egumbel(perc=NULL), gdata, trace=TRUE)
-coef(fit, matrix=TRUE)
+gdata = data.frame(y = rgumbel(n = 1000, loc = 100, scale = exp(1)))
+fit = vglm(y ~ 1, egumbel(perc = NULL), gdata, trace = TRUE)
+coef(fit, matrix = TRUE)
Coef(fit)
head(fitted(fit))
with(gdata, mean(y))
-
# Example 2: Venice data
-(fit = vglm(cbind(r1,r2,r3,r4,r5) ~ year, data=venice,
- gumbel(R=365, mpv=TRUE), trace=TRUE))
+(fit = vglm(cbind(r1,r2,r3,r4,r5) ~ year, data = venice,
+ gumbel(R = 365, mpv = TRUE), trace = TRUE))
head(fitted(fit))
-coef(fit, mat=TRUE)
+coef(fit, mat = TRUE)
vcov(summary(fit))
sqrt(diag(vcov(summary(fit)))) # Standard errors
# Example 3: Try a nonparametric fit ---------------------
# Use the entire data set, including missing values
-y = as.matrix(venice[,paste("r",1:10,sep="")])
-fit1 = vgam(y ~ s(year, df=3), gumbel(R=365, mpv=TRUE),
- data=venice, trace=TRUE, na.action=na.pass)
+y = as.matrix(venice[,paste("r",1:10,sep = "")])
+fit1 = vgam(y ~ s(year, df = 3), gumbel(R = 365, mpv = TRUE),
+ data = venice, trace = TRUE, na.action = na.pass)
fit1 at y[4:5,] # NAs used to pad the matrix
\dontrun{
# Plot the component functions
-par(mfrow=c(2,1), mar=c(5,4,.2,1)+0.1, xpd=TRUE)
-plot(fit1, se=TRUE, lcol="blue", scol="green", lty=1,
- lwd=2, slwd=2, slty="dashed")
+par(mfrow = c(2,1), mar = c(5,4,.2,1)+0.1, xpd = TRUE)
+plot(fit1, se = TRUE, lcol = "blue", scol = "green", lty = 1,
+ lwd = 2, slwd = 2, slty = "dashed")
# Quantile plot --- plots all the fitted values
-par(mfrow=c(1,1), bty="l", mar=c(4,4,.2,3)+0.1, xpd=TRUE, las=1)
-qtplot(fit1, mpv=TRUE, lcol=c(1,2,5), tcol=c(1,2,5), lwd=2,
- pcol="blue", tadj=0.1, ylab="Sea level (cm)")
+par(mfrow = c(1,1), bty = "l", mar = c(4,4,.2,3)+0.1, xpd = TRUE, las = 1)
+qtplot(fit1, mpv = TRUE, lcol = c(1,2,5), tcol = c(1,2,5), lwd = 2,
+ pcol = "blue", tadj = 0.1, ylab = "Sea level (cm)")
# Plot the 99 percentile only
-par(mfrow=c(1,1), mar=c(3,4,.2,1)+0.1, xpd=TRUE)
+par(mfrow = c(1,1), mar = c(3,4,.2,1)+0.1, xpd = TRUE)
year = venice[["year"]]
-matplot(year, y, ylab="Sea level (cm)", type="n")
-matpoints(year, y, pch="*", col="blue")
-lines(year, fitted(fit1)[,"99\%"], lwd=2, col="red")
+matplot(year, y, ylab = "Sea level (cm)", type = "n")
+matpoints(year, y, pch = "*", col = "blue")
+lines(year, fitted(fit1)[,"99\%"], lwd = 2, col = "red")
# Check the 99 percentiles with a smoothing spline.
# Nb. (1-0.99) * 365 = 3.65 is approx. 4, meaning the 4th order
# statistic is approximately the 99 percentile.
-par(mfrow=c(1,1), mar=c(3,4,2,1)+0.1, xpd=TRUE, lwd=2)
-plot(year, y[,4], ylab="Sea level (cm)", type="n",
- main="Red is 99 percentile, Green is a smoothing spline")
-points(year, y[,4], pch="4", col="blue")
-lines(year, fitted(fit1)[,"99\%"], lty=1, col="red")
-lines(smooth.spline(year, y[,4], df=4), col="darkgreen", lty=2)
+par(mfrow = c(1,1), mar = c(3,4,2,1)+0.1, xpd = TRUE, lwd = 2)
+plot(year, y[,4], ylab = "Sea level (cm)", type = "n",
+ main = "Red is 99 percentile, Green is a smoothing spline")
+points(year, y[,4], pch = "4", col = "blue")
+lines(year, fitted(fit1)[,"99\%"], lty = 1, col = "red")
+lines(smooth.spline(year, y[,4], df = 4), col = "darkgreen", lty = 2)
}
}
\keyword{models}
diff --git a/man/gumbelIbiv.Rd b/man/gumbelIbiv.Rd
index 25899e2..5f4399e 100644
--- a/man/gumbelIbiv.Rd
+++ b/man/gumbelIbiv.Rd
@@ -8,7 +8,7 @@
}
\usage{
-gumbelIbiv(lapar="identity", earg=list(), iapar=NULL, method.init=1)
+gumbelIbiv(lapar="identity", earg=list(), iapar=NULL, imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -27,10 +27,10 @@ gumbelIbiv(lapar="identity", earg=list(), iapar=NULL, method.init=1)
Numeric. Optional initial value for \eqn{\alpha}{alpha}.
By default, an initial value is chosen internally.
If a convergence failure occurs try assigning a different value.
- Assigning a value will override the argument \code{method.init}.
+ Assigning a value will override the argument \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ia}.
diff --git a/man/gumbelUC.Rd b/man/gumbelUC.Rd
index 5371b11..f2ca2e1 100644
--- a/man/gumbelUC.Rd
+++ b/man/gumbelUC.Rd
@@ -12,10 +12,10 @@
scale parameter \code{scale}.
}
\usage{
-dgumbel(x, location=0, scale=1, log=FALSE)
-pgumbel(q, location=0, scale=1)
-qgumbel(p, location=0, scale=1)
-rgumbel(n, location=0, scale=1)
+dgumbel(x, location = 0, scale = 1, log = FALSE)
+pgumbel(q, location = 0, scale = 1)
+qgumbel(p, location = 0, scale = 1)
+rgumbel(n, location = 0, scale = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -88,9 +88,8 @@ rgumbel(n, location=0, scale=1)
\code{\link{gev}}.
}
\examples{
-mu = 1
-sigma = 2
-y = rgumbel(n=100, loc=mu, scale=sigma)
+mu = 1; sigma = 2
+y = rgumbel(n = 100, loc=mu, scale=sigma)
mean(y)
mu - sigma * digamma(1) # population mean
var(y)
@@ -98,17 +97,17 @@ sigma^2 * pi^2 / 6 # population variance
\dontrun{
-x = seq(-2.5, 3.5, by=0.01)
+x = seq(-2.5, 3.5, by = 0.01)
loc = 0; sigma = 1
-plot(x, dgumbel(x, loc, sigma), type="l", col="blue", ylim=c(0,1),
- main="Blue is density, red is cumulative distribution function",
- sub="Purple are 5,10,...,95 percentiles", ylab="", las=1)
-abline(h=0, col="blue", lty=2)
-lines(qgumbel(seq(0.05,0.95,by=0.05), loc, sigma),
- dgumbel(qgumbel(seq(0.05,0.95,by=0.05), loc, sigma), loc, sigma),
- col="purple", lty=3, type="h")
-lines(x, pgumbel(x, loc, sigma), type="l", col="red")
-abline(h=0, lty=2)
+plot(x, dgumbel(x, loc, sigma), type = "l", col = "blue", ylim=c(0,1),
+ main = "Blue is density, red is cumulative distribution function",
+ sub = "Purple are 5,10,...,95 percentiles", ylab = "", las = 1)
+abline(h = 0, col = "blue", lty = 2)
+lines(qgumbel(seq(0.05, 0.95, by = 0.05), loc, sigma),
+ dgumbel(qgumbel(seq(0.05, 0.95, by = 0.05), loc, sigma), loc, sigma),
+ col = "purple", lty = 3, type = "h")
+lines(x, pgumbel(x, loc, sigma), type = "l", col = "red")
+abline(h = 0, lty = 2)
}
}
\keyword{distribution}
diff --git a/man/guplot.Rd b/man/guplot.Rd
index 00a2361..c236557 100644
--- a/man/guplot.Rd
+++ b/man/guplot.Rd
@@ -8,6 +8,7 @@
Produces a Gumbel plot,
a diagnostic plot for checking whether the data appears to be
from a Gumbel distribution.
+
}
\usage{
guplot(object, ...)
@@ -25,29 +26,35 @@ guplot.vlm(object, ...)
plotted. }
\item{object}{ An object that inherits class \code{"vlm"},
usually of class \code{\link{vglm-class}} or
- \code{\link{vgam-class}}. }
+ \code{\link{vgam-class}}.
+
+ }
\item{\dots}{ Graphical argument passed into
\code{\link[graphics]{plot}}. See \code{\link[graphics]{par}}
for an exhaustive list. The arguments \code{xlim} and
- \code{ylim} are particularly useful. }
+ \code{ylim} are particularly useful.
+
+ }
}
\details{
If \eqn{Y} has a Gumbel distribution then plotting the sorted
values \eqn{y_i} versus the \emph{reduced values} \eqn{r_i} should
appear linear. The reduced values are given by
\deqn{r_i = -\log(-\log(p_i)) }{%
- r_i = -\log(-\log(p_i)) }
+ r_i = - log(- log(p_i)) }
where \eqn{p_i} is the \eqn{i}th plotting position, taken
- here to be \eqn{(i-0.5)/n}. Here, \eqn{n} is the number of
- observations.
+ here to be \eqn{(i-0.5)/n}.
+ Here, \eqn{n} is the number of observations.
Curvature upwards/downwards may indicate a Frechet/Weibull
distribution, respectively. Outliers may also be detected
using this plot.
+
The function \code{guplot} is generic, and
\code{guplot.default} and \code{guplot.vlm} are some
methods functions for Gumbel plots.
+
}
\value{
A list is returned invisibly with the following components.
@@ -57,21 +64,37 @@ guplot.vlm(object, ...)
%% zz not sure about the reference
\references{
-Coles, S. (2001)
-\emph{An Introduction to Statistical Modeling of Extreme Values}.
-London: Springer-Verlag.
+
+ Coles, S. (2001)
+ \emph{An Introduction to Statistical Modeling of Extreme Values}.
+ London: Springer-Verlag.
+
+
+ Gumbel, E. J. (1958)
+ \emph{Statistics of Extremes}.
+ New York, USA: Columbia University Press.
+
+
}
\author{ T. W. Yee }
-\note{ The Gumbel distribution is a special case of the
+\note{
+ The Gumbel distribution is a special case of the
GEV distribution with shape parameter equal to zero.
+
+
}
\seealso{
\code{\link{gumbel}},
\code{\link{egumbel}},
- \code{\link{gev}}.
+ \code{\link{gev}},
+ \code{\link{venice}}.
+
+
}
-\examples{\dontrun{guplot(rnorm(500), las=1) -> i
-names(i)
+\examples{\dontrun{guplot(rnorm(500), las=1) -> ii
+names(ii)
+
+guplot(with(venice, r1), col = "blue") # Venice sea levels data
}}
\keyword{models}
\keyword{regression}
diff --git a/man/huber.Rd b/man/huber.Rd
index 7224db7..59ff513 100644
--- a/man/huber.Rd
+++ b/man/huber.Rd
@@ -9,7 +9,7 @@
}
\usage{
huber(llocation = "identity", lscale = "loge", elocation = list(),
- escale = list(), k = 0.862, method.init = 1, zero = 2)
+ escale = list(), k = 0.862, imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -28,7 +28,7 @@ huber(llocation = "identity", lscale = "loge", elocation = list(),
See \code{\link{rhuber}} for more information.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}} for information.
The default value of \code{zero} means the scale parameter is
modelled as an intercept-only.
@@ -84,7 +84,7 @@ hdata = transform(hdata, y = rhuber(NN, mu = coef1 + coef2 * x2))
hdata$x2[1] = 0.0 # Add an outlier
hdata$y[1] = 10
-fit.huber <- vglm(y ~ x2, huber(meth = 3), hdata, trace = TRUE)
+fit.huber <- vglm(y ~ x2, huber(imethod = 3), hdata, trace = TRUE)
coef(fit.huber, matrix = TRUE)
summary(fit.huber)
diff --git a/man/hued.Rd b/man/hued.Rd
new file mode 100644
index 0000000..80a71f3
--- /dev/null
+++ b/man/hued.Rd
@@ -0,0 +1,55 @@
+\name{hued}
+\alias{hued}
+\docType{data}
+\title{
+Harvard University Degrees Conferred by Student Ethnicity
+
+%% ~~ data name/kind ... ~~
+}
+\description{
+ A two-way table of counts; there are 7 ethnic groups by 12
+ degrees.
+
+}
+\usage{data(hued)}
+\format{
+ The format is:
+ chr "hued"
+
+}
+\details{
+ The rownames and colnames have been edited.
+ The full names are:
+Asian/Pacific Islander,
+Black/Non-Hispanic,
+Hispanic,
+International Students,
+Native American,
+White/Non-Hispanic,
+Unknown/Other.
+The academic year was 2009--2010.
+GSAS stands for Graduate School of Arts and Sciences.
+The Other group includes students reported as Two or More Races.
+See the URL below for more technical details supporting the data.
+
+
+
+%% ~~ If necessary, more details than the __description__ above ~~
+}
+\source{
+ \url{http://www.provost.harvard.edu/institutional_research/factbook.php}
+
+}
+\seealso{
+ \code{\link{huie}},
+ \code{\link{huse}}.
+
+}
+
+%%\references{
+%% ~~ possibly secondary sources and usages ~~
+%%}
+\examples{
+print(hued)
+}
+\keyword{datasets}
diff --git a/man/huggins91.Rd b/man/huggins91.Rd
new file mode 100644
index 0000000..97aa7c9
--- /dev/null
+++ b/man/huggins91.Rd
@@ -0,0 +1,181 @@
+\name{huggins91}
+\alias{huggins91}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{ Huggins (1991) Capture-recapture Model Family Function
+ (approximation only) }
+\description{
+ Fits a Huggins (1991) capture-recapture model to a matrix of 0s
+ and 1s: animals sampled on several occasions and individual
+ animals caught at least once.
+
+}
+\usage{
+huggins91(link = "logit", earg = list(), parallel = TRUE,
+ iprob = NULL, eim.not.oim = TRUE)
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{link, earg, parallel, iprob}{
+ See \code{\link{CommonVGAMffArguments}} for information.
+ The \code{parallel} argument should generally be left alone since
+ parallelism is assumed by Huggins (1991).
+
+ }
+ \item{eim.not.oim}{
+ Logical. If \code{TRUE} use the EIM, else the OIM.
+
+ }
+}
+\details{
+ This model operates on a response matrix of 0s and 1s. Each of
+ at least two columns is an occasion where animals are potentially
+ captured (e.g., a field trip), and each row is an individual
+ animal. Capture is a 1, else a 0. Each row has at least one
+ capture. It is well-known that animals are affected by capture,
+ e.g., trap-shy or trap-happy. This \pkg{VGAM} family function
+ attempts to allow the capture history to be modelled. This
+ involves the use of the \code{xij} argument. Ignoring capture
+ history effects would mean \code{\link{posbinomial}} could
+ be used by aggregating over the sampling occasions.
+
+
+ Huggins (1991) suggests a model involving maximizing a
+ conditional likelihood.
+ The form of this is a numerator divided by a denominator,
+ where the true model has part of the linear/additive predictor
+ modelling capture history applying to the numerator only,
+ so that part is set to zero in the denominator.
+ The numerator of the conditional likelihood corresponds
+ to a sequence of Bernoulli trials,
+ with at least one success,
+ for each animal.
+
+
+ Unfortunately the Huggins model is too difficult to fit in this
+ package, and one can only use the \emph{same} linear/additive
+ predictor in the numerator as the denominator. Hence this
+ \pkg{VGAM} family function does \emph{not} implement the model
+ properly.
+
+
+ The number of linear/additive predictors is twice the number
+ of sampling occasions, i.e., \eqn{M = 2T}, say.
+ The first two correspond to the first sampling occasion,
+ the next two correspond to the second sampling occasion, etc.
+ Even-numbered linear/additive predictors should correspond to what
+ would happen if no capture had occurred (they belong to
+ the denominator.)
+ Odd-numbered linear/additive predictors correspond to
+ what actually happened (they belong to the numerator.)
+
+
+ The fitted value for column \eqn{t} is the \eqn{t}th
+ numerator probability divided by the denominator.
+
+
+}
+\value{
+ An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
+ The object is used by modelling functions such as \code{\link{vglm}},
+ and \code{\link{vgam}}.
+
+
+}
+\references{
+
+Huggins, R. M. (1991)
+Some practical aspects of a conditional likelihood
+approach to capture experiments.
+\emph{Biometrics},
+\bold{47}, 725--732.
+
+
+}
+\author{ Thomas W. Yee }
+
+\note{
+ The \code{weights} argument of \code{\link{vglm}} need not be
+ assigned, and the default is just a matrix of ones.
+
+
+ This \pkg{VGAM} family function is currently more complicated
+ than it needs to be, e.g., it is possible to
+ simplify \eqn{M = T}, say.
+
+
+}
+
+\section{Warning }{
+ This \pkg{VGAM} family function is experimental and does not
+ work properly because the linear/additive predictor in the
+ numerator and denominator must be the same.
+ The parameter estimates of the Huggins (1991) model ought to
+ be similar (probably in between, in some sense) to two models:
+ Model 1 is where the capture history variable is included,
+ Model 2 is where the capture history variable is not included.
+ See the example below.
+ A third model, called Model 3, allows for 'half' the capture
+ history to be put in both numerator and denominator. This
+ might be thought of as a compromise between Models 1 and 2,
+ and may be useful as a crude approximation.
+
+
+ Under- or over-flow may occur if the data is ill-conditioned.
+
+
+}
+\seealso{
+ \code{\link{vglm.control}} for \code{xij},
+ \code{\link{dhuggins91}},
+ \code{\link{rhuggins91}}.
+ \code{\link{posbinomial}}.
+
+}
+
+\examples{
+set.seed(123); nTimePts = 5
+hdata = rhuggins91(n = 1000, nTimePts = nTimePts, pvars = 2)
+
+# The truth: xcoeffs are c(-2, 1, 2) and capeffect = -1
+
+# Model 1 is where capture history information is used
+model1 = vglm(cbind(y1, y2, y3, y4, y5) ~ x2 + Chistory,
+ huggins91, data = hdata, trace = TRUE,
+ xij = list(Chistory ~ ch0 + zch0 +
+ ch1 + zch1 + ch2 + zch2 +
+ ch3 + zch3 + ch4 + zch4 - 1),
+ form2 = ~ 1 + x2 + Chistory +
+ ch0 + ch1 + ch2 + ch3 + ch4 +
+ zch0 + zch1 + zch2 + zch3 + zch4)
+
+coef(model1, matrix = TRUE) # Biased!!
+summary(model1)
+head(fitted(model1))
+head(model.matrix(model1, type = "vlm"), 21)
+head(hdata)
+
+# Model 2 is where no capture history information is used
+model2 = vglm(cbind(y1, y2, y3, y4, y5) ~ x2,
+ huggins91, data = hdata, trace = TRUE)
+coef(model2, matrix = TRUE) # Biased!!
+summary(model2)
+
+# Model 3 is where half the capture history is used in both
+# the numerator and denominator
+set.seed(123); nTimePts = 5
+hdata2 = rhuggins91(n = 1000, nTimePts = nTimePts, pvars = 2,
+ double.ch = TRUE)
+head(hdata2) # 2s have replaced the 1s in hdata
+model3 = vglm(cbind(y1, y2, y3, y4, y5) ~ x2 + Chistory,
+ huggins91, data = hdata2, trace = TRUE,
+ xij = list(Chistory ~ ch0 + zch0 +
+ ch1 + zch1 + ch2 + zch2 +
+ ch3 + zch3 + ch4 + zch4 - 1),
+ form2 = ~ 1 + x2 + Chistory +
+ ch0 + ch1 + ch2 + ch3 + ch4 +
+ zch0 + zch1 + zch2 + zch3 + zch4)
+coef(model3, matrix = TRUE) # Biased!!
+}
+\keyword{models}
+\keyword{regression}
+
diff --git a/man/huggins91UC.Rd b/man/huggins91UC.Rd
new file mode 100644
index 0000000..2281d9b
--- /dev/null
+++ b/man/huggins91UC.Rd
@@ -0,0 +1,127 @@
+\name{huggins91UC}
+\alias{huggins91UC}
+\alias{dhuggins91}
+\alias{rhuggins91}
+%- Also NEED an '\alias' for EACH other topic documented here.
+\title{ Huggins (1991) Capture-recapture Model }
+\description{
+ Density, and random generation
+ for the Huggins (1991) capture-recapture model.
+
+}
+\usage{
+rhuggins91(n, nTimePts = 5, pvars = length(xcoeff), xcoeff = c(-2, 1, 2),
+ capeffect = -1, double.ch = FALSE,
+ link = "logit", earg = list())
+dhuggins91(x, prob, prob0 = prob, log = FALSE)
+}
+%- maybe also 'usage' for other objects documented here.
+\arguments{
+ \item{x}{
+ response vector or matrix.
+ Should have values of 0s or 1s.
+ }
+
+ \item{nTimePts}{Number of sampling occasions.
+ Called \eqn{T} in \code{\link{huggins91}}.
+
+ }
+ \item{n}{number of observations.
+ Usually a single positive integer, else the length of the vector
+ is used.
+
+ }
+
+ \item{capeffect}{
+ Numeric, the capture effect.
+ Added to the linear predictor if captured previously.
+ A positive or negative value corresponds to
+ a trap-happy and trap-shy effect respectively.
+
+
+ }
+
+ \item{double.ch}{
+ Logical.
+ If \code{TRUE} then the values of \code{ch0}, \code{ch1}, \ldots are
+ 2 or 0, else 1 or 0.
+ Setting this argument \code{TRUE} means that a model can be fitted
+ with half the capture history in both denominator and numerator
+ (this is a compromise of the Huggins (1991) model where the full
+ capture history only appears in the numerator).
+
+ }
+
+ \item{pvars}{ Number of other numeric covariates that make up
+ the linear predictor.
+ Labelled \code{x1}, \code{x2}, \ldots,
+ where the first is an intercept, and the others are
+ independent standard \code{\link[stats:Uniform]{runif}} random variates.
+ The first \code{pvars} elements of \code{xcoeff} are used.
+
+ }
+
+ \item{xcoeff}{
+ The regression coefficients of the linear predictor.
+ These correspond to \code{x1}, \code{x2}, \ldots,
+ and the first is for the intercept.
+ The length of \code{xcoeff} must be at least \code{pvars}.
+
+ }
+
+ \item{link, earg}{
+ Used to generate the probabilities for capture at each occasion.
+
+ }
+ \item{prob, prob0}{
+ Matrix of probabilities for the numerator and denominators
+ respectively.
+ The default does \emph{not} correspond to the
+ Huggins (1991) model since the denominator should
+ be free of any capture history, i.e., as if it had
+ never been caught before.
+
+ }
+ \item{log}{
+ Logical. Return the logarithm of the answer?
+ }
+
+}
+\details{
+ The form of the conditional likelihood is
+ described in \code{\link{huggins91}}.
+
+
+}
+\value{
+ \code{dhuggins91} gives the density,
+ \code{rhuggins91} returns a data frame with some attributes.
+ The function generates random deviates
+ (\eqn{T} columns labelled \code{y1}, \code{y2}, \ldots)
+ for the response.
+ Some indicator columns are also included
+ (those starting with \code{ch} are for previous capture history,
+ and those starting with \code{z} are zero),
+ and these are useful for the \code{xij} argument.
+
+
+
+}
+%\references{ }
+\author{ Thomas W. Yee }
+\note{
+ These functions are experimental and do not follow the
+ usual conventions of \code{d}- and \code{r}-type R functions.
+
+}
+
+\seealso{
+ \code{\link{huggins91}}.
+
+}
+\examples{
+set.seed(123); rhuggins91(n = 10)
+set.seed(123); rhuggins91(n = 10, double.ch = TRUE)
+attributes(rhuggins91(n = 10))
+}
+\keyword{distribution}
diff --git a/man/huie.Rd b/man/huie.Rd
new file mode 100644
index 0000000..e64087d
--- /dev/null
+++ b/man/huie.Rd
@@ -0,0 +1,59 @@
+\name{huie}
+\alias{huie}
+\docType{data}
+\title{
+Harvard University International Enrollments
+
+%% ~~ data name/kind ... ~~
+}
+\description{
+ A two-way table of counts; there are 12
+ degrees and 8 areas of the world.
+
+%% ~~ A concise (1-5 lines) description of the dataset. ~~
+}
+\usage{data(huie)}
+\format{
+ The format is:
+ chr "huie"
+}
+\details{
+ The rownames and colnames have been edited.
+ The full colnames are:
+Africa,
+Asia,
+Europe,
+Caribbean and Central and and South America,
+Middle East,
+North America,
+Oceania,
+Stateless.
+
+The data was for the autumn (Fall) of 2010.
+GSAS stands for Graduate School of Arts and Sciences.
+See the URL below for more technical details supporting the data.
+
+
+
+%% ~~ If necessary, more details than the __description__ above ~~
+}
+\source{
+ \url{http://www.provost.harvard.edu/institutional_research/factbook.php}
+
+
+%% ~~ reference to a publication or URL from which the data were obtained ~~
+}
+\seealso{
+ \code{\link{hued}},
+ \code{\link{huse}}.
+
+}
+
+%%\references{
+%% ~~ possibly secondary sources and usages ~~
+%%}
+\examples{
+print(huie)
+## maybe str(huie) ; plot(huie) ...
+}
+\keyword{datasets}
diff --git a/man/huse.Rd b/man/huse.Rd
new file mode 100644
index 0000000..8879d6d
--- /dev/null
+++ b/man/huse.Rd
@@ -0,0 +1,73 @@
+\name{huse}
+\alias{huse}
+\docType{data}
+\title{
+Harvard University Numbers of Ladder Faculty by School and Ethnicity
+
+%% ~~ data name/kind ... ~~
+}
+\description{
+ A two-way table of counts; there are 14
+ schools and 5 race/ethnicities.
+
+%% ~~ A concise (1-5 lines) description of the dataset. ~~
+}
+\usage{data(huse)}
+\format{
+ The format is:
+ chr "huse"
+}
+\details{
+ Ladder faculty members of Harvard University are cross-classified by
+ their school and their race/ethnicity.
+ This was for the period 2010--1.
+ Ladder Faculty are defined as Assistant Professors or Convertible
+ Instructors, Associate Professors, and Professors that have
+ been appointed in certain Schools.
+
+
+ Abbreviations:
+ FAS = Faculty of Arts and Sciences = Humanities + Social Sciences +
+ Natural Sciences + SEAS,
+ Natural Sciences = Life Sciences + Physical Sciences,
+ SEAS = School of Engineering and Applied Sciences,
+ HBS = Harvard Business School,
+ HMS = Harvard Medical School,
+ HSPH = Harvard School of Public Health,
+ HLS = Harvard Law School,
+ HKS = Harvard Kennedy School,
+ HGSE = Harvard Graduate School of Education,
+ GSD = Graduate School of Design ,
+ HDS = Harvard Divinity School,
+ HSDM = Harvard School of Dental Medicine.
+
+
+ See the URL below for many technical details supporting the data.
+ The table was constructed from pp.31--2 from the source.
+
+
+%% ~~ If necessary, more details than the __description__ above ~~
+}
+\source{
+ \url{http://www.provost.harvard.edu/institutional_research/factbook.php}
+
+%% ~~ reference to a publication or URL from which the data were obtained ~~
+}
+\references{
+ \emph{Harvard University Office of the Senior Vice Provost Faculty
+ Development \& Diversity: 2010 Annual Report}.
+
+
+%% ~~ possibly secondary sources and usages ~~
+}
+\seealso{
+ \code{\link{hued}},
+ \code{\link{huie}}.
+
+}
+
+\examples{
+print(huse)
+## maybe str(huse) ; plot(huse) ...
+}
+\keyword{datasets}
diff --git a/man/inv.gaussianff.Rd b/man/inv.gaussianff.Rd
index 7c6678e..bf9b0f3 100644
--- a/man/inv.gaussianff.Rd
+++ b/man/inv.gaussianff.Rd
@@ -3,14 +3,14 @@
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Inverse Gaussian Distribution Family Function }
\description{
- Estimates the two parameters of the inverse Gaussian distribution by
- maximum likelihood estimation.
+ Estimates the two parameters of the inverse Gaussian distribution
+ by maximum likelihood estimation.
}
\usage{
inv.gaussianff(lmu = "loge", llambda = "loge",
emu = list(), elambda = list(),
- method.init = 1, ilambda = 1,
+ imethod = 1, ilambda = 1,
shrinkage.init = 0.99, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
@@ -30,7 +30,7 @@ inv.gaussianff(lmu = "loge", llambda = "loge",
Initial value for the \eqn{\lambda}{lambda} parameter.
}
- \item{method.init, shrinkage.init, zero}{
+ \item{imethod, shrinkage.init, zero}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
@@ -66,9 +66,12 @@ Johnson, N. L. and Kotz, S. and Balakrishnan, N. (1994)
\emph{Continuous Univariate Distributions},
2nd edition, Volume 1, New York: Wiley.
+
Evans, M., Hastings, N. and Peacock, B. (2000)
\emph{Statistical Distributions},
New York: Wiley-Interscience, Third edition.
+
+
}
\author{ T. W. Yee }
\note{
diff --git a/man/koenker.Rd b/man/koenker.Rd
index 7a2e754..a36ac08 100644
--- a/man/koenker.Rd
+++ b/man/koenker.Rd
@@ -10,7 +10,7 @@
\usage{
koenker(percentile = 50, llocation = "identity", lscale = "loge",
elocation = list(), escale = list(), ilocation = NULL,
- iscale = NULL, method.init = 1, zero = 2)
+ iscale = NULL, imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -25,7 +25,7 @@ koenker(percentile = 50, llocation = "identity", lscale = "loge",
and \code{\link{CommonVGAMffArguments}}.
}
- \item{ilocation, iscale, method.init, zero}{
+ \item{ilocation, iscale, imethod, zero}{
See \code{\link{CommonVGAMffArguments}} for details.
}
diff --git a/man/laplace.Rd b/man/laplace.Rd
index e748aa7..b39a348 100644
--- a/man/laplace.Rd
+++ b/man/laplace.Rd
@@ -10,7 +10,7 @@
\usage{
laplace(llocation = "identity", lscale = "loge", elocation = list(),
escale = list(), ilocation = NULL, iscale = NULL,
- method.init = 1, zero = 2)
+ imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -31,7 +31,7 @@ laplace(llocation = "identity", lscale = "loge", elocation = list(),
appropriate length.
The default is to choose the value internally.
}
- \item{method.init}{
+ \item{imethod}{
Initialization method.
Either the value 1 or 2.
@@ -109,7 +109,7 @@ with(lddat, median(y))
lddat = data.frame(x = runif(nn <- 1001))
lddat = transform(lddat, y = rlaplace(nn, loc = 2, scale = exp(-1+1*x)))
-coef(vglm(y ~ x, laplace(iloc = .2, meth = 2, zero = 1), lddat,
+coef(vglm(y ~ x, laplace(iloc = .2, imethod = 2, zero = 1), lddat,
trace = TRUE), matrix = TRUE)
}
\keyword{models}
diff --git a/man/lgammaUC.Rd b/man/lgammaUC.Rd
index 55a9eba..e8242cf 100644
--- a/man/lgammaUC.Rd
+++ b/man/lgammaUC.Rd
@@ -46,6 +46,7 @@ Kotz, S. and Nadarajah, S. (2000)
pages 48--49,
London: Imperial College Press.
+
}
\author{ T. W. Yee }
\details{
@@ -64,18 +65,20 @@ London: Imperial College Press.
\seealso{
\code{\link{lgammaff}},
\code{\link{prentice74}}.
+
+
}
\examples{
\dontrun{ loc = 1; Scale = 1.5; k = 1.4
x = seq(-3.2, 5, by = 0.01)
plot(x, dlgamma(x, loc, Scale, k), type = "l", col = "blue", ylim = 0:1,
- main = "Blue is density, red is cumulative distribution function",
+ main = "Blue is density, orange is cumulative distribution function",
sub = "Purple are 5,10,...,95 percentiles", las = 1, ylab = "")
abline(h = 0, col = "blue", lty = 2)
lines(qlgamma(seq(0.05, 0.95, by = 0.05), loc, Scale, k),
dlgamma(qlgamma(seq(0.05, 0.95, by = 0.05), loc, Scale, k),
loc, Scale, k), col = "purple", lty = 3, type = "h")
-lines(x, plgamma(x, loc, Scale, k), type = "l", col = "red")
+lines(x, plgamma(x, loc, Scale, k), type = "l", col = "orange")
abline(h = 0, lty = 2) }
}
\keyword{distribution}
diff --git a/man/lgammaff.Rd b/man/lgammaff.Rd
index 409a0a1..46bb6a8 100644
--- a/man/lgammaff.Rd
+++ b/man/lgammaff.Rd
@@ -57,8 +57,8 @@ lgamma3ff(llocation = "identity", lscale = "loge", lshape = "loge",
\details{
The probability density function of the standard log-gamma distribution
is given by
- \deqn{f(y)=\exp[ky - \exp(y)] / \Gamma(k),}{%
- f(y) = exp[ky - exp(y)]/gamma(k),}
+ \deqn{f(y;k)=\exp[ky - \exp(y)] / \Gamma(k),}{%
+ f(y;k) = exp[ky - exp(y)]/gamma(k),}
for parameter \eqn{k>0}{k>0} and all real \eqn{y}.
The mean of \eqn{Y} is \code{digamma(k)} (returned as
the fitted values) and its variance is \code{trigamma(k)}.
@@ -112,25 +112,25 @@ New York: Wiley.
}
\seealso{
-\code{\link{rlgamma}},
-\code{\link{gengamma}},
-\code{\link{prentice74}},
-\code{\link{gamma1}},
-\code{\link[base:Special]{lgamma}}.
+ \code{\link{rlgamma}},
+ \code{\link{gengamma}},
+ \code{\link{prentice74}},
+ \code{\link{gamma1}},
+ \code{\link[base:Special]{lgamma}}.
}
\examples{
-ldat = data.frame(y = rlgamma(100, k = exp(1)))
-fit = vglm(y ~ 1, lgammaff, ldat, trace = TRUE, crit = "coef")
+ldata = data.frame(y = rlgamma(100, k = exp(1)))
+fit = vglm(y ~ 1, lgammaff, ldata, trace = TRUE, crit = "coef")
summary(fit)
coef(fit, matrix = TRUE)
Coef(fit)
-ldat = data.frame(x = runif(nn <- 5000)) # Another example
-ldat = transform(ldat, loc = -1 + 2*x, Scale = exp(1))
-ldat = transform(ldat, y = rlgamma(nn, loc, scale = Scale, k = exp(0)))
-fit = vglm(y ~ x, lgamma3ff(zero = 2:3), ldat, trace = TRUE, crit = "c")
-coef(fit, matrix = TRUE)
+ldata = data.frame(x = runif(nn <- 5000)) # Another example
+ldata = transform(ldata, loc = -1 + 2 * x, Scale = exp(1))
+ldata = transform(ldata, y = rlgamma(nn, loc, scale = Scale, k = exp(0)))
+fit2 = vglm(y ~ x, lgamma3ff(zero = 2:3), ldata, trace = TRUE, crit = "c")
+coef(fit2, matrix = TRUE)
}
\keyword{models}
\keyword{regression}
diff --git a/man/logff.Rd b/man/logff.Rd
index a110b16..c4a5488 100644
--- a/man/logff.Rd
+++ b/man/logff.Rd
@@ -39,12 +39,14 @@ logff(link = "logit", earg=list(), init.c = NULL)
The mean is \eqn{a c/(1-c)}{a*c/(1-c)} (returned as the fitted values)
and variance is \eqn{a c (1-ac) /(1-c)^2}{a*c*(1-a*c)/(1-c)^2}.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
@@ -68,39 +70,44 @@ New York: Wiley-Interscience, Third edition.
In the \pkg{VGAM} library, a link function with option
\code{\link{loge}} corresponds to this.
+
The logarithmic distribution is sometimes confused with the log-series
distribution. The latter was used by Fisher et al. for species abundance
data, and has two parameters.
+
}
\seealso{
\code{\link{rlog}},
\code{\link[base:Log]{log}},
\code{\link{loge}},
- \code{\link{logoff}}.
+ \code{\link{logoff}},
+ \code{\link{explogarithmic}}.
+
}
\examples{
-ldat = data.frame(y = rlog(n=1000, prob=logit(0.2, inverse=TRUE)))
-fit = vglm(y ~ 1, logff, ldat, trace=TRUE, crit="c")
-coef(fit, matrix=TRUE)
+ldata = data.frame(y = rlog(n = 1000, prob = logit(0.2, inverse = TRUE)))
+fit = vglm(y ~ 1, logff, ldata, trace = TRUE, crit = "c")
+coef(fit, matrix = TRUE)
Coef(fit)
-\dontrun{with(ldat,
- hist(y, prob=TRUE, breaks=seq(0.5, max(y)+0.5, by=1), border="blue"))
-x = seq(1, with(ldat, max(y)), by=1)
-with(ldat, lines(x, dlog(x, Coef(fit)[1]), col="red", type="h", lwd=2)) }
+\dontrun{with(ldata,
+ hist(y, prob = TRUE, breaks = seq(0.5, max(y) + 0.5, by = 1),
+ border = "blue"))
+x = seq(1, with(ldata, max(y)), by=1)
+with(ldata, lines(x, dlog(x, Coef(fit)[1]), col = "orange", type = "h", lwd = 2)) }
# Example: Corbet (1943) butterfly Malaya data
corbet = data.frame(nindiv = 1:24,
ofreq = c(118, 74, 44, 24, 29, 22, 20, 19, 20, 15, 12,
14, 6, 12, 6, 9, 9, 6, 10, 10, 11, 5, 3, 3))
-fit = vglm(nindiv ~ 1, logff, data=corbet, weights=ofreq)
-coef(fit, matrix=TRUE)
+fit = vglm(nindiv ~ 1, logff, data = corbet, weights = ofreq)
+coef(fit, matrix = TRUE)
chat = Coef(fit)["c"]
-pdf2 = dlog(x=with(corbet, nindiv), prob=chat)
-print(with(corbet, cbind(nindiv, ofreq, fitted=pdf2*sum(ofreq))), dig=1)
+pdf2 = dlog(x = with(corbet, nindiv), prob = chat)
+print(with(corbet, cbind(nindiv, ofreq, fitted = pdf2 * sum(ofreq))), dig = 1)
}
\keyword{models}
\keyword{regression}
diff --git a/man/logistic.Rd b/man/logistic.Rd
index 9fadbe9..e93709f 100644
--- a/man/logistic.Rd
+++ b/man/logistic.Rd
@@ -11,10 +11,10 @@
}
\usage{
logistic1(llocation = "identity", elocation = list(),
- scale.arg = 1, method.init = 1)
+ scale.arg = 1, imethod = 1)
logistic2(llocation = "identity", lscale = "loge",
elocation = list(), escale = list(),
- ilocation = NULL, iscale = NULL, method.init = 1, zero = NULL)
+ ilocation = NULL, iscale = NULL, imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -38,7 +38,7 @@ logistic2(llocation = "identity", lscale = "loge",
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
diff --git a/man/loglaplace.Rd b/man/loglaplace.Rd
index d612327..051859b 100644
--- a/man/loglaplace.Rd
+++ b/man/loglaplace.Rd
@@ -18,11 +18,11 @@ loglaplace1(tau = NULL, llocation = "loge", elocation = list(),
ilocation = NULL, kappa = sqrt(tau/(1 - tau)), Scale.arg = 1,
shrinkage.init = 0.95, parallelLocation = FALSE, digt = 4,
dfmu.init = 3, rep0 = 0.5, minquantile = 0, maxquantile = Inf,
- method.init = 1, zero = NULL)
+ imethod = 1, zero = NULL)
logitlaplace1(tau = NULL, llocation = "logit", elocation = list(),
ilocation = NULL, kappa = sqrt(tau/(1 - tau)),
Scale.arg = 1, shrinkage.init = 0.95, parallelLocation = FALSE,
- digt = 4, dfmu.init = 3, rep01 = 0.5, method.init = 1, zero = NULL)
+ digt = 4, dfmu.init = 3, rep01 = 0.5, imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -68,7 +68,7 @@ logitlaplace1(tau = NULL, llocation = "logit", elocation = list(),
% have different values for each \code{tau} value.
% }
- \item{method.init}{
+ \item{imethod}{
Initialization method.
Either the value 1, 2, or \ldots.
diff --git a/man/loglinb2.Rd b/man/loglinb2.Rd
index d7ee1dc..fc333a5 100644
--- a/man/loglinb2.Rd
+++ b/man/loglinb2.Rd
@@ -14,9 +14,11 @@ loglinb2(exchangeable = FALSE, zero = NULL)
\arguments{
\item{exchangeable}{ Logical.
If \code{TRUE}, the two marginal probabilities are constrained to
- be equal. Should be set \code{TRUE} for ears, eyes, etc. data. }
+ be equal. Should be set \code{TRUE} for ears, eyes, etc. data.
+ }
\item{zero}{ Which linear/additive predictor is modelled as an
- intercept only? A \code{NULL} means none of them. }
+ intercept only? A \code{NULL} means none of them.
+ }
}
\details{
@@ -41,9 +43,12 @@ loglinb2(exchangeable = FALSE, zero = NULL)
\code{\link{rrvglm}}
and \code{\link{vgam}}.
+
When fitted, the \code{fitted.values} slot of the object contains the
four joint probabilities, labelled as
\eqn{(Y_1,Y_2)}{(Y1,Y2)} = (0,0), (0,1), (1,0), (1,1), respectively.
+
+
}
\references{
@@ -55,35 +60,35 @@ by Gao, F., Wahba, G., Klein, R., Klein, B.
\emph{Journal of the American Statistical Association},
\bold{96}, 127--160.
+
McCullagh, P. and Nelder, J. A. (1989)
\emph{Generalized Linear Models}, 2nd ed. London: Chapman & Hall.
-Documentation accompanying the \pkg{VGAM} package at
-\url{http://www.stat.auckland.ac.nz/~yee}
-contains further information and examples.
}
\author{ Thomas W. Yee }
\note{
The response must be a two-column matrix of ones and zeros only.
- This is more restrictive than \code{\link{binom2.or}}, which can handle
- more types of input formats.
+ This is more restrictive than \code{\link{binom2.or}},
+ which can handle more types of input formats.
Note that each of the 4 combinations of the multivariate response
need to appear in the data set.
+
}
\seealso{
\code{\link{binom2.or}},
\code{\link{binom2.rho}},
\code{\link{loglinb3}}.
+
}
\examples{
-coalminers = transform(coalminers, Age=(age-42)/5)
+coalminers = transform(coalminers, Age = (age - 42) / 5)
# Get the n x 4 matrix of counts
temp = vglm(cbind(nBnW,nBW,BnW,BW) ~ Age, binom2.or, coalminers)
-counts = round(c(weights(temp, type="prior")) * temp at y)
+counts = round(c(weights(temp, type = "prior")) * temp at y)
# Create a n x 2 matrix response for loglinb2()
# bwmat = matrix(c(0,0, 0,1, 1,0, 1,1), 4, 2, byrow=TRUE)
@@ -95,8 +100,8 @@ newminers = data.frame(bln = kronecker(matof1, bwmat[,1]),
Age = with(coalminers, rep(age, rep(4, length(age)))))
newminers = newminers[with(newminers, wt) > 0,]
-fit = vglm(cbind(bln,wheeze) ~ Age, loglinb2, wei=wt, data=newminers)
-coef(fit, mat=TRUE) # Same! (at least for the log odds-ratio)
+fit = vglm(cbind(bln,wheeze) ~ Age, loglinb2, weight = wt, data = newminers)
+coef(fit, matrix = TRUE) # Same! (at least for the log odds-ratio)
summary(fit)
# Try reconcile this with McCullagh and Nelder (1989), p.234
diff --git a/man/loglinb3.Rd b/man/loglinb3.Rd
index 8d45a3f..8974686 100644
--- a/man/loglinb3.Rd
+++ b/man/loglinb3.Rd
@@ -13,9 +13,11 @@ loglinb3(exchangeable = FALSE, zero = NULL)
\arguments{
\item{exchangeable}{ Logical.
If \code{TRUE}, the three marginal probabilities are constrained to
- be equal. }
+ be equal.
+ }
\item{zero}{ Which linear/additive predictor is modelled as an
- intercept only? A \code{NULL} means none. }
+ intercept only? A \code{NULL} means none.
+ }
}
\details{
@@ -23,19 +25,23 @@ loglinb3(exchangeable = FALSE, zero = NULL)
\deqn{\exp(u_0+u_1 y_1+u_2 y_2+u_3 y_3+u_{12} y_1 y_2+
u_{13} y_1 y_3+u_{23} y_2 y_3)}{%
exp(u0 + u1*y1 + u2*y2 + u3*y3 + u12*y1*y2 + u13*y1*y3+ u23*y2*y3)}
- where \eqn{y_1}{y1}, \eqn{y_2}{y2} and \eqn{y_3}{y3} are 0 or 1,
- and the parameters are \eqn{u_1}{u1}, \eqn{u_2}{u2}, \eqn{u_3}{u3},
- \eqn{u_{12}}{u12}, \eqn{u_{13}}{u13}, \eqn{u_{23}}{u23}. The
- normalizing parameter \eqn{u_0}{u0} can be expressed as a function of
- the other parameters. Note that a third-order association parameter,
+ where \eqn{y_1}{y1}, \eqn{y_2}{y2} and \eqn{y_3}{y3} are 0
+ or 1, and the parameters are \eqn{u_1}{u1}, \eqn{u_2}{u2},
+ \eqn{u_3}{u3}, \eqn{u_{12}}{u12}, \eqn{u_{13}}{u13},
+ \eqn{u_{23}}{u23}.
+ The normalizing parameter \eqn{u_0}{u0} can be expressed as a
+ function of the other parameters.
+ Note that a third-order association parameter,
\eqn{u_{123}}{u123} for the product \eqn{y_1 y_2 y_3}{y1*y2*y3},
is assumed to be zero for this family function.
+
The linear/additive predictors are
\eqn{(\eta_1,\eta_2,\ldots,\eta_6)^T =
(u_1,u_2,u_3,u_{12},u_{13},u_{23})^T}{(eta1,eta2,...,eta6) =
(u1,u2,u3,u12,u13,u23)}.
+
}
\value{
@@ -43,11 +49,13 @@ loglinb3(exchangeable = FALSE, zero = NULL)
The object is used by modelling functions such as \code{\link{vglm}},
\code{\link{rrvglm}} and \code{\link{vgam}}.
+
When fitted, the \code{fitted.values} slot of the object contains the
eight joint probabilities, labelled as \eqn{(Y_1,Y_2,Y_3)}{(Y1,Y2,Y3)}
= (0,0,0), (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0),
(1,1,1), respectively.
+
}
\references{
@@ -59,20 +67,23 @@ by Gao, F., Wahba, G., Klein, R., Klein, B.
\emph{Journal of the American Statistical Association},
\bold{96}, 127--160.
+
McCullagh, P. and Nelder, J. A. (1989)
\emph{Generalized Linear Models}, 2nd ed. London: Chapman & Hall.
+
Documentation accompanying the \pkg{VGAM} package at
\url{http://www.stat.auckland.ac.nz/~yee}
contains further information and examples.
+
}
\author{ Thomas W. Yee }
\note{
- The response must be a three-column matrix of ones and zeros only.
- Note that each of the 8 combinations of the multivariate response
- need to appear in the data set, therefore data sets will need to
- be large in order for this family function to work.
+ The response must be a three-column matrix of ones and zeros
+ only. Note that each of the 8 combinations of the multivariate
+ response need to appear in the data set, therefore data sets
+ will need to be large in order for this family function to work.
}
@@ -82,8 +93,8 @@ contains further information and examples.
}
\examples{
-fit = vglm(cbind(cyadea,beitaw,kniexc) ~ altitude, loglinb3, data=hunua)
-coef(fit, mat=TRUE)
+fit = vglm(cbind(cyadea, beitaw, kniexc) ~ altitude, loglinb3, hunua)
+coef(fit, matrix = TRUE)
head(fitted(fit))
summary(fit)
}
diff --git a/man/lqnorm.Rd b/man/lqnorm.Rd
index 8e324c9..d242b9b 100644
--- a/man/lqnorm.Rd
+++ b/man/lqnorm.Rd
@@ -9,7 +9,7 @@
}
\usage{
lqnorm(qpower=2, link="identity", earg=list(),
- method.init=1, imu=NULL, shrinkage.init=0.95)
+ imethod=1, imu=NULL, shrinkage.init=0.95)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -26,7 +26,7 @@ lqnorm(qpower=2, link="identity", earg=list(),
See \code{\link{Links}} for more details.
}
- \item{method.init}{
+ \item{imethod}{
Must be 1, 2 or 3.
See \code{\link{CommonVGAMffArguments}} for more information.
Ignored if \code{imu} is specified.
@@ -34,7 +34,7 @@ lqnorm(qpower=2, link="identity", earg=list(),
}
\item{imu}{
Numeric, optional initial values used for the fitted values.
- The default is to use \code{method.init=1}.
+ The default is to use \code{imethod=1}.
}
\item{shrinkage.init}{
@@ -42,7 +42,7 @@ lqnorm(qpower=2, link="identity", earg=list(),
The value must be between 0 and 1 inclusive, and
a value of 0 means the individual response values are used,
and a value of 1 means the median or mean is used.
- This argument is used in conjunction with \code{method.init=3}.
+ This argument is used in conjunction with \code{imethod=3}.
}
}
diff --git a/man/meplot.Rd b/man/meplot.Rd
index ea86861..7642c51 100644
--- a/man/meplot.Rd
+++ b/man/meplot.Rd
@@ -7,46 +7,71 @@
\description{
Mean excess plot (also known as a mean residual life plot),
a diagnostic plot for the generalized Pareto distribution (GPD).
+
}
\usage{
meplot(object, ...)
-meplot.default(y, main="Mean Excess Plot",
- xlab="Threshold", ylab="Mean Excess", lty=c(2,1:2),
- conf=0.95, col=c("blue","black","blue"), type="l", ...)
+meplot.default(y, main = "Mean Excess Plot",
+ xlab = "Threshold", ylab = "Mean Excess", lty = c(2, 1:2),
+ conf = 0.95, col = c("blue", "black", "blue"), type = "l", ...)
meplot.vlm(object, ...)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
\item{y}{ A numerical vector. \code{NA}s etc. are not allowed.}
- \item{main}{Character. Overall title for the plot. }
- \item{xlab}{Character. Title for the x axis. }
- \item{ylab}{Character. Title for the y axis. }
- \item{lty}{Line type. The second value is for the mean
- excess value, the first and third values are for the envelope
- surrounding the confidence interval.}
- \item{conf}{Confidence level. The default results in approximate 95
- percent confidence intervals for each mean excess value. }
- \item{col}{Colour of the three lines. }
- \item{type}{Type of plot. The default means lines are
- joined between the mean excesses and also the upper and lower
- limits of the confidence intervals. }
- \item{object}{ An object that inherits class \code{"vlm"},
- usually of class \code{\link{vglm-class}} or
- \code{\link{vgam-class}}. }
+ \item{main, xlab, ylab}{Character.
+ Overall title for the plot,
+ and titles for the x- and y-axes.
+ }
+ \item{lty}{Line type.
+ The second value is for the mean
+ excess value, the first and third values are for the envelope
+ surrounding the confidence interval.
+
+
+ }
+ \item{conf}{Confidence level.
+ The default results in approximate 95 percent confidence
+ intervals for each mean excess value.
+
+
+ }
+ \item{col}{Colour of the three lines.
+
+
+ }
+ \item{type}{Type of plot.
+ The default means lines are
+ joined between the mean excesses and also the upper and lower
+ limits of the confidence intervals.
+
+
+ }
+ \item{object}{
+ An object that inherits class \code{"vlm"},
+ usually of class \code{\link{vglm-class}} or
+ \code{\link{vgam-class}}.
+
+
+ }
\item{\dots}{ Graphical argument passed into
- \code{\link[graphics]{plot}}. See \code{\link[graphics]{par}}
- for an exhaustive list. The arguments \code{xlim} and
- \code{ylim} are particularly useful. }
+ \code{\link[graphics]{plot}}.
+ See \code{\link[graphics]{par}}
+ for an exhaustive list.
+ The arguments \code{xlim} and \code{ylim} are particularly useful.
+
+
+ }
}
\details{
If \eqn{Y} has a GPD with scale parameter
\eqn{\sigma}{sigma} and shape parameter \eqn{\xi<1}{xi<1},
and if \eqn{y>0}, then
\deqn{E(Y-u|Y>u) = \frac{\sigma+\xi u}{1-\xi}.}{%
- E(Y-u|Y>u) = \frac{\sigma+\xi u}{1-\xi}.}
+ E(Y-u|Y>u) = \frac{\sigma+ xi*u}{1- xi}.}
It is a linear function in \eqn{u}, the threshold.
Note that \eqn{Y-u} is called the \emph{excess} and
- values of \eqn{Y} greater than \eqn{u} are called \emph{exceedences}.
+ values of \eqn{Y} greater than \eqn{u} are called \emph{exceedances}.
The empirical versions used by these functions is to use
sample means to estimate the left hand side of the equation.
Values of \eqn{u} in the plot are the values of \eqn{y} itself.
@@ -55,17 +80,35 @@ meplot.vlm(object, ...)
value. See \code{\link{gpd}} for more details.
If the plot is flat then the data may be exponential,
and if it is curved then it may be Weibull or gamma.
+ There is often a lot of variance/fluctuation at the RHS of the
+ plot due to fewer observations.
+
The function \code{meplot} is generic, and
\code{meplot.default} and \code{meplot.vlm} are some
methods functions for mean excess plots.
+
}
\value{
A list is returned invisibly with the following components.
- \item{threshold }{The x axis values. }
- \item{meanExcess }{The y axis values. Each value is a sample
- mean minus a value \eqn{u}. }
+ \item{threshold }{The x axis values.
+
+
+ }
+ \item{meanExcess }{The y axis values.
+ Each value is a sample mean minus a value \eqn{u}.
+
+
+ }
+
+ \item{plusminus }{The amount which is added or subtracted
+ from the mean excess to give the confidence interval.
+ The last value is a \code{NA} because it is based on one observation.
+
+
+ }
+
}
\references{
Davison, A. C. and Smith, R. L. (1990)
@@ -73,20 +116,37 @@ Models for exceedances over high thresholds (with discussion).
\emph{Journal of the Royal Statistical Society, Series B, Methodological},
\bold{52}, 393--442.
+
Coles, S. (2001)
\emph{An Introduction to Statistical Modeling of Extreme Values}.
London: Springer-Verlag.
+
+
}
\author{ T. W. Yee }
-\note{ The function is designed for speed and not
- accuracy, therefore huge data sets with extremely large values
- may cause failure (the function \code{\link[base]{cumsum}}
- is used.) Ties may not be well handled.
+\note{
+ The function is designed for speed and not accuracy, therefore
+ huge data sets with extremely large values may cause failure
+ (the function \code{\link[base]{cumsum}} is used.) Ties may
+ not be well handled.
+
+
+}
+\seealso{
+ \code{\link{gpd}}.
+
+
+}
+\examples{
+\dontrun{meplot(with(venice90, sealevel), las = 1) -> ii
+names(ii)
+abline(h = ii$meanExcess[1], col = "orange", lty = "dashed")
+
+par(mfrow = c(2, 2))
+for (ii in 1:4)
+ meplot(rgpd(1000), col = c("orange", "blue", "orange"))
+}
}
-\seealso{ \code{\link{gpd}}. }
-\examples{\dontrun{meplot(runif(500), las=1) -> i
-names(i)
-}}
\keyword{models}
\keyword{regression}
diff --git a/man/micmen.Rd b/man/micmen.Rd
index 865a1ab..c5064b7 100644
--- a/man/micmen.Rd
+++ b/man/micmen.Rd
@@ -8,7 +8,7 @@
}
\usage{
micmen(rpar = 0.001, divisor = 10, init1 = NULL, init2 = NULL,
- method.init = 1, oim = TRUE,
+ imethod = 1, oim = TRUE,
link1 = "identity", link2 = "identity",
firstDeriv = c("nsimEIM", "rpar"),
earg1 = list(), earg2 = list(), prob.x = c(0.15, 0.85),
@@ -55,7 +55,7 @@ micmen(rpar = 0.001, divisor = 10, init1 = NULL, init2 = NULL,
The first is the default.
}
- \item{method.init, prob.x}{
+ \item{imethod, prob.x}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
diff --git a/man/moffset.Rd b/man/moffset.Rd
index eaa507d..9c2fa43 100644
--- a/man/moffset.Rd
+++ b/man/moffset.Rd
@@ -2,46 +2,75 @@
\alias{moffset}
\title{
-Makes an effective day data set
+Matrix Offset
}
\description{
- Modify a matrix by shitting successive elements.
+ Modify a matrix by shifting successive elements.
}
\usage{
-moffset(mat, roffset = 1, coffset = 1)
+moffset(mat, roffset = 0, coffset = 0, postfix = "")
}
\arguments{
\item{mat}{
- Data frame or matrix, which is considered to 24 hours of rows by
- 7 days a week of columns, or can be any matrix.
+ Data frame or matrix.
+ This ought to have at least three rows and three columns.
+ The elements are shifted in the order of \code{c(mat)},
+ i.e., going down successive columns, as the columns go
+ from left to right. Wrapping of values is done.
}
\item{roffset, coffset}{
- Numeric or character. The number or name of the row/column
- of matrix input. rows/column start as the first cell in
- matrix output. For example, for the \code{\link{alcoff}},
- put \code{roffset = "6"} means that we make an effective days
- dataset start from 6:00 am of the day, and from midnight to
- 05.59 am is part the previous days. Similarly \code{coffset}
- for the column.
+ Numeric or character.
+ If numeric, the amount of shift (offset) for each row and column.
+ The default is no change to \code{mat}.
+ If character, the offset is computed by matching with
+ the row or column names.
+ For example, for the \code{\link{alcoff}},
+ put \code{roffset = "6"} means that we make an effective day's
+ dataset start from 6:00 am, and this wraps around to
+ include midnight to 05.59 am on the next day.
+
+}
+\item{postfix}{
+ Character.
+ Modified rows and columns are renamed by pasting this argument
+ to the end of each name.
+ The default is no change.
}
}
\details{
- In \pkg{VGAM} there are crash data (e.g., see
- \code{\link{crashi}}) and alcohol-related related
- datasets, and also function of \code{\link{rcam}} and
- \code{\link{plotrcam0}} available. In regression analysis of
- main effect model or rank zero of row-column association model,
- it becomes more realistic using the effective days dataset. Since
- in the effective days datasets for example, partying on Friday
- night includes Saturday morning.
+ This function allows a matrix to be rearranged so that
+ element (\code{roffset} + 1, \code{coffset} + 1)
+ becomes the (1, 1) element.
+ The elements are assumed to be ordered in the same way
+ as the elements of \code{c(mat)},
+
+
+ This function is applicable to, e.g.,
+ \code{\link{alcoff}},
+ where it is useful to define the \emph{effective day} as starting
+ at some other hour than midnight, e.g., 6.00am.
+ This is because partying on Friday night continues on into Saturday morning,
+ therefore it is more interpretable to use the effective day when
+ considering a daily effect.
+ This is a data preprocessing function for \code{\link{rcam}}
+ and \code{\link{plotrcam0}}. The differences between
+ \code{\link{Rcam}} and \code{\link{moffset}} is that
+ \code{\link{Rcam}} only reorders the level of the rows and columns
+ so that the data is shifted but not moved.
+ That is, a value in one row stays in that row,
+ and ditto for column.
+ But in \code{\link{moffset}}
+ values in one column can be moved to a previous column.
+ See the examples below.
+
}
\value{
@@ -51,42 +80,52 @@ moffset(mat, roffset = 1, coffset = 1)
\author{
- Alfian F. Hadi,
- T. W. Yee.
+ T. W. Yee,
+ Alfian F. Hadi.
}
\note{
- This function was specifically 24 x 7 dimensional matrix (24
- hours of days of row by 7 days a week), \code{\link{alcoff}}.
- Change into a matrix of "effective days" with flexible start of
- first hour of in the effective day. But now can more generaly
- applied into any dimensional matrix.
+% This function was originally for a 24 x 7 dimensional matrix
+% (24 hours of the day by 7 days per week) such as \code{\link{alcoff}}.
+% Of course, this function can be applied to any moderately
+% large matrix.
- This is a data preprocessing function for \code{\link{rcam}}
- and \code{\link{plotrcam0}}. The differences between
- \code{\link{Rcam}} and \code{\link{moffset}} is that the
- \code{\link{Rcam}} only reordering the level of row and column
- and marking the row/column base line, there is no change in
- entire rows and column. But here in \code{\link{moffset}}
- values in row/column before the rstar/cstar will be moved to
- previuous row/column. So if there is very similar matrix to
- \code{\link{alcoff}}, but on other dimension 7 by 24, for example,
- then the user can use this function very easy.
-
+ The input \code{mat} should have row names and column names.
}
\seealso{
\code{\link{Rcam}},
\code{\link{rcam}},
- \code{\link{plotrcam0}}.
+ \code{\link{plotrcam0}},
+ \code{\link{alcoff}},
+ \code{\link{crashi}}.
}
\examples{
-alcoff.e <- moffset(alcoff, roffset = "6")
-fit0.orig <- rcam(alcoff) #default baselines are first row & col
-fit0 <- rcam(alcoff.e) #default baselines are first roe & col
+moffset(alcoff, 3, 2, "*") # Some day's data is moved to previous day.
+Rcam(alcoff, 3 + 1, 2 + 1) # Data does not move as much.
+alcoff # Original data
+moffset(alcoff, 3, 2, "*") - Rcam(alcoff, 3+1, 2+1) # Note the differences
+
+# An 'effective day' data set:
+alcoff.e <- moffset(alcoff, roffset = "6", postfix = "*")
+fit.o <- rcam(alcoff) # default baselines are first row and col
+fit.e <- rcam(alcoff.e) # default baselines are first row and col
+
+\dontrun{ par(mfrow = c(2, 2), mar = c(9,4,2,1))
+plot(fit.o, rsub = "Not very interpretable", csub = "Not very interpretable")
+plot(fit.e, rsub = "More interpretable", csub = "More interpretable")
+}
+
+# Some checking
+all.equal(moffset(alcoff), alcoff) # Should be no change
+moffset(alcoff, 1, 1, "*")
+moffset(alcoff, 2, 3, "*")
+moffset(alcoff, 1, 0, "*")
+moffset(alcoff, 0, 1, "*")
+moffset(alcoff, "6", "Monday", "*") # This one is good
-#customise rowbaseline
-fit0.based <- rcam(Rcam(alcoff.e, rbaseline="11", cbaseline="Monday"))
-}
+# Customise row and column baselines
+fit2 <- rcam(Rcam(alcoff.e, rbaseline = "11", cbaseline = "Monday*"))
+}
diff --git a/man/morgenstern.Rd b/man/morgenstern.Rd
index e9bff0a..933ab3d 100644
--- a/man/morgenstern.Rd
+++ b/man/morgenstern.Rd
@@ -9,7 +9,7 @@
}
\usage{
morgenstern(lapar="rhobit", earg=list(), iapar=NULL, tola0=0.01,
- method.init=1)
+ imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -28,7 +28,7 @@ morgenstern(lapar="rhobit", earg=list(), iapar=NULL, tola0=0.01,
Numeric. Optional initial value for \eqn{\alpha}{alpha}.
By default, an initial value is chosen internally.
If a convergence failure occurs try assigning a different value.
- Assigning a value will override the argument \code{method.init}.
+ Assigning a value will override the argument \code{imethod}.
}
\item{tola0}{
@@ -39,7 +39,7 @@ morgenstern(lapar="rhobit", earg=list(), iapar=NULL, tola0=0.01,
is too close to zero.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ia}.
diff --git a/man/multinomial.Rd b/man/multinomial.Rd
index 39ab318..971ad37 100644
--- a/man/multinomial.Rd
+++ b/man/multinomial.Rd
@@ -233,11 +233,11 @@ coef(fit , matrix = TRUE) # Easy to reconcile this output with fit2
# Example 3: The response is a factor.
nn = 10
-dframe3 = data.frame(yfactor = gl(3, nn, labels=c("Control","Trt1","Trt2")),
- x = runif(3 * nn))
+dframe3 = data.frame(yfactor = gl(3, nn, labels = c("Control", "Trt1", "Trt2")),
+ x2 = runif(3 * nn))
myrefLevel = with(dframe3, yfactor[12])
-fit3a = vglm(yfactor ~ x, multinomial(refLevel = myrefLevel), dframe3)
-fit3b = vglm(yfactor ~ x, multinomial(refLevel = 2), dframe3)
+fit3a = vglm(yfactor ~ x2, multinomial(refLevel = myrefLevel), dframe3)
+fit3b = vglm(yfactor ~ x2, multinomial(refLevel = 2), dframe3)
coef(fit3a, matrix = TRUE) # "Treatment1" is the reference level
coef(fit3b, matrix = TRUE) # "Treatment1" is the reference level
margeff(fit3b)
diff --git a/man/negbinomial.Rd b/man/negbinomial.Rd
index 9001fab..dda0f1c 100644
--- a/man/negbinomial.Rd
+++ b/man/negbinomial.Rd
@@ -1,40 +1,48 @@
\name{negbinomial}
\alias{negbinomial}
+\alias{polya}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Negative Binomial Distribution Family Function }
\description{
- Maximum likelihood estimation of the two parameters of a negative binomial
- distribution.
+ Maximum likelihood estimation of the two parameters of a negative
+ binomial distribution.
+
}
\usage{
-negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
- imu = NULL, ik = NULL, quantile.probs = 0.75,
+negbinomial(lmu = "loge", lsize = "loge", emu = list(), esize = list(),
+ imu = NULL, isize = NULL, quantile.probs = 0.75,
nsimEIM = 100, cutoff = 0.995,
- Maxiter = 5000, deviance.arg = FALSE, method.init = 1,
+ Maxiter = 5000, deviance.arg = FALSE, imethod = 1,
parallel = FALSE, shrinkage.init = 0.95, zero = -2)
+polya(lprob = "logit", lsize = "loge", eprob = list(), esize = list(),
+ iprob = NULL, isize = NULL, quantile.probs = 0.75, nsimEIM = 100,
+ deviance.arg = FALSE, imethod = 1, shrinkage.init = 0.95, zero = -2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{lmu, lk}{
- Link functions applied to the \eqn{\mu}{mu} and \eqn{k} parameters.
+ \item{lmu, lsize, lprob}{
+ Link functions applied to the \eqn{\mu}{mu}, \eqn{k}
+ and \eqn{p} parameters.
See \code{\link{Links}} for more choices.
- Note that the \eqn{k} parameter is the \code{size} argument of
- \code{\link[stats:NegBinomial]{rnbinom}}.
- Common alternatives for \code{lk} are
+ Note that the \eqn{\mu}{mu}, \eqn{k}
+ and \eqn{p} parameters are the \code{mu},
+ \code{size} and \code{prob} arguments of
+ \code{\link[stats:NegBinomial]{rnbinom}} respectively.
+ Common alternatives for \code{lsize} are
\code{\link{nloge}} and
\code{\link{reciprocal}}.
}
- \item{emu, ek}{
+ \item{emu, esize, eprob}{
List. Extra argument for each of the links.
See \code{earg} in \code{\link{Links}} for general information.
}
- \item{imu, ik}{
- Optional initial values for the mean and \eqn{k}.
- For the latter, if failure to converge occurs then try different values
- (and/or use \code{method.init}).
- For a \eqn{S}-column response, \code{ik} can be of length \eqn{S}.
+ \item{imu, isize, iprob}{
+ Optional initial values for the mean and \eqn{k} and \eqn{p}.
+ For \eqn{k}, if failure to converge occurs then try different values
+ (and/or use \code{imethod}).
+ For a \eqn{S}-column response, \code{isize} can be of length \eqn{S}.
A value \code{NULL} means an initial value for each response is
computed internally using a range of values.
The last argument is ignored if used within \code{\link{cqo}}; see
@@ -44,7 +52,7 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
\item{quantile.probs}{
Passed into the \code{probs} argument
of \code{\link[stats:quantile]{quantile}}
- when \code{method.init = 3} to obtain an initial value for the mean.
+ when \code{imethod = 3} to obtain an initial value for the mean.
}
@@ -86,12 +94,12 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
under the fast algorithm.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} which
specifies the initialization method for the \eqn{\mu}{mu} parameter.
If failure to converge occurs try another value
and/or else specify a value for \code{shrinkage.init}
- and/or else specify a value for \code{ik}.
+ and/or else specify a value for \code{isize}.
}
\item{parallel}{
@@ -109,7 +117,7 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
The value must be between 0 and 1 inclusive, and
a value of 0 means the individual response values are used,
and a value of 1 means the median or mean is used.
- This argument is used in conjunction with \code{method.init}.
+ This argument is used in conjunction with \code{imethod}.
If convergence failure occurs try setting this argument to 1.
}
@@ -117,9 +125,9 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
Integer valued vector, usually assigned \eqn{-2} or \eqn{2} if used
at all. Specifies which of the two linear/additive predictors are
modelled as an intercept only. By default, the \eqn{k} parameter
- (after \code{lk} is applied) is modelled as a single unknown
+ (after \code{lsize} is applied) is modelled as a single unknown
number that is estimated. It can be modelled as a function of the
- explanatory variables by setting \code{zero=NULL}. A negative value
+ explanatory variables by setting \code{zero = NULL}. A negative value
means that the value is recycled, so setting \eqn{-2} means all \eqn{k}
are intercept-only.
See \code{\link{CommonVGAMffArguments}} for more information.
@@ -133,7 +141,8 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
distributed.
There are several common parametrizations of the negative binomial
distribution.
- The one used here uses the mean \eqn{\mu}{mu} and an \emph{index} parameter
+ The one used by \code{negbinomial()} uses the
+ mean \eqn{\mu}{mu} and an \emph{index} parameter
\eqn{k}, both which are positive.
Specifically, the density of a random variable \eqn{Y} is
\deqn{f(y;\mu,k) ~=~ {y + k - 1 \choose y} \,
@@ -152,48 +161,64 @@ negbinomial(lmu = "loge", lk = "loge", emu = list(), ek = list(),
\eqn{E(Y)}.
It is common for some to use \eqn{\alpha=1/k}{alpha=1/k} as the
ancillary or heterogeneity parameter;
- so common alternatives for \code{lk} are
+ so common alternatives for \code{lsize} are
\code{\link{nloge}} and
\code{\link{reciprocal}}.
+ For \code{polya} the density is
+ \deqn{f(y;p,k) ~=~ {y + k - 1 \choose y} \,
+ \left( 1 - p \right)^y\,
+ p^k }{%
+ f(y;p,k) = C_{y}^{y + k - 1}
+ [1 - p]^y p^k}
+ where \eqn{y=0,1,2,\ldots},
+ and \eqn{0 < p < 1}{0 < p < 1} and \eqn{k > 0}.
+
+
The negative binomial distribution can be coerced into the
- classical GLM framework with one of the parameters being of
- interest and the other treated as a nuisance/scale parameter
- (this is implemented in the MASS library). This \pkg{VGAM}
- family function \code{negbinomial} treats both parameters
- on the same footing, and estimates them both by full maximum
- likelihood estimation. Simulated Fisher scoring is employed
- as the default (see the \code{nsimEIM} argument).
+ classical GLM framework with one of the parameters being
+ of interest and the other treated as a nuisance/scale
+ parameter (this is implemented in the MASS library). The
+ \pkg{VGAM} family function \code{negbinomial} treats both
+ parameters on the same footing, and estimates them both
+ by full maximum likelihood estimation. Simulated Fisher
+ scoring is employed as the default (see the \code{nsimEIM}
+ argument).
- The parameters \eqn{\mu}{mu} and \eqn{k} are independent (diagonal EIM),
- and the confidence region for \eqn{k} is extremely skewed so that its
- standard error is often of no practical use. The parameter \eqn{1/k}
- has been used as a measure of aggregation.
+ The parameters \eqn{\mu}{mu} and \eqn{k} are independent
+ (diagonal EIM), and the confidence region for \eqn{k}
+ is extremely skewed so that its standard error is often
+ of no practical use. The parameter \eqn{1/k} has been
+ used as a measure of aggregation.
- This \pkg{VGAM} function handles \emph{multivariate} responses, so
- that a matrix can be used as the response. The number of columns is the
- number of species, say, and setting \code{zero=-2} means that \emph{all}
- species have a \eqn{k} equalling a (different) intercept only.
+ These \pkg{VGAM} family functions handle
+ \emph{multivariate} responses, so that a matrix can be
+ used as the response. The number of columns is the number
+ of species, say, and setting \code{zero = -2} means that
+ \emph{all} species have a \eqn{k} equalling a (different)
+ intercept only.
}
\section{Warning}{
- The Poisson model corresponds to \eqn{k} equalling infinity.
- If the data is Poisson or close to Poisson, numerical
- problems will occur. Possibly choosing a log-log link may
- help in such cases, otherwise use \code{\link{poissonff}}
- or \code{\link{quasipoissonff}}.
+ The Poisson model corresponds to \eqn{k} equalling
+ infinity. If the data is Poisson or close to Poisson,
+ numerical problems will occur. Possibly choosing a
+ log-log link may help in such cases, otherwise use
+ \code{\link{poissonff}} or \code{\link{quasipoissonff}}.
- This function is fragile; the maximum likelihood estimate of the
- index parameter is fraught (see Lawless, 1987). In general, the
- \code{\link{quasipoissonff}} is more robust than this function.
- Other alternatives are to fit a NB-1 or RR-NB model; see Yee (2010).
- Assigning values to the \code{ik} argument may lead to a local solution,
- and smaller values are preferred over large values when using this argument.
+ These functions are fragile; the maximum likelihood
+ estimate of the index parameter is fraught (see Lawless,
+ 1987). In general, the \code{\link{quasipoissonff}} is
+ more robust. Other alternatives to \code{negbinomial} are
+ to fit a NB-1 or RR-NB model; see Yee (2011). Assigning
+ values to the \code{isize} argument may lead to a local
+ solution, and smaller values are preferred over large
+ values when using this argument.
Yet to do: write a family function which uses the methods of moments
@@ -226,7 +251,7 @@ Fitting the negative binomial distribution to biological data.
\bold{9}, 174--200.
- Yee, T. W. (2010)
+ Yee, T. W. (2011)
Two-parameter reduced-rank vector generalized linear models.
\emph{In preparation}.
@@ -239,8 +264,24 @@ Fitting the negative binomial distribution to biological data.
% negative binomial distribution. Currently, none of these others work
% very well.
+
+ These two functions implement two common parameterizations
+ of the negative binomial (NB). Some people called the
+ NB with integer \eqn{k} the \emph{Pascal} distribution,
+ whereas if \eqn{k} is real then this is the \emph{Polya}
+ distribution. I don't. The one matching the details of
+ \code{\link[stats:NegBinomial]{rnbinom}} in terms of \eqn{p}
+ and \eqn{k} is \code{polya()}.
+
+
+ For \code{polya()} the code may fail when \eqn{p} is close
+ to 0 or 1. It is not yet compatible with \code{\link{cqo}}
+ or \code{\link{cao}}.
+
+
Suppose the response is called \code{ymat}.
- The diagonal element of the \emph{expected information matrix}
+ For \code{negbinomial()}
+ the diagonal element of the \emph{expected information matrix}
(EIM) for parameter \eqn{k}
involves an infinite series; consequently simulated Fisher scoring
(see \code{nsimEIM}) is the default. This algorithm should definitely be
@@ -260,16 +301,16 @@ Fitting the negative binomial distribution to biological data.
(in recommended decreasing order)
\code{nsimEIM},
\code{shrinkage.init},
- \code{method.init},
+ \code{imethod},
\code{Maxiter},
\code{cutoff},
- \code{ik},
+ \code{isize},
\code{zero}.
- This function can be used by the fast algorithm in
- \code{\link{cqo}}, however, setting \code{EqualTolerances=TRUE} and
- \code{ITolerances=FALSE} is recommended.
+ The function \code{negbinomial} can be used by the fast algorithm in
+ \code{\link{cqo}}, however, setting \code{EqualTolerances = TRUE} and
+ \code{ITolerances = FALSE} is recommended.
% For \code{\link{cqo}} and \code{\link{cao}}, taking the square-root
@@ -278,7 +319,7 @@ Fitting the negative binomial distribution to biological data.
% If the negative binomial family function \code{\link{negbinomial}}
-% is used for \code{cqo} then set \code{negbinomial(deviance=TRUE)}
+% is used for \code{cqo} then set \code{negbinomial(deviance = TRUE)}
% is necessary. This means to minimize the deviance, which the fast
% algorithm can handle.
@@ -290,8 +331,7 @@ Fitting the negative binomial distribution to biological data.
- There are two special uses of this \pkg{VGAM} family function
- for handling count data.
+ There are two special uses of \code{negbinomial} for handling count data.
Firstly,
when used by \code{\link{rrvglm}} this
results in a continuum of models in between and
@@ -308,8 +348,8 @@ Fitting the negative binomial distribution to biological data.
Secondly,
- the use of this \pkg{VGAM} family function with \code{parallel = TRUE}
- and by \code{\link{vglm}}
+ the use of \code{negbinomial} with \code{parallel = TRUE}
+ inside \code{\link{vglm}}
can result in a model similar to \code{\link{quasipoissonff}}.
This is named the \emph{NB-1} model.
The dispersion parameter is estimated by MLE whereas
@@ -349,16 +389,16 @@ coef(fit, matrix = TRUE)
Coef(fit)
# Example 2: simulated data with multivariate response
-ndata <- data.frame(x = runif(nn <- 500))
-ndata <- transform(ndata, y1 = rnbinom(nn, mu = exp(3+x), size = exp(1)),
- y2 = rnbinom(nn, mu = exp(2-x), size = exp(0)))
-fit1 <- vglm(cbind(y1, y2) ~ x, negbinomial, ndata, trace = TRUE)
+ndata <- data.frame(x2 = runif(nn <- 500))
+ndata <- transform(ndata, y1 = rnbinom(nn, mu = exp(3+x2), size = exp(1)),
+ y2 = rnbinom(nn, mu = exp(2-x2), size = exp(0)))
+fit1 <- vglm(cbind(y1, y2) ~ x2, negbinomial, ndata, trace = TRUE)
coef(fit1, matrix = TRUE)
# Example 3: large counts so definitely use the nsimEIM argument
-ndata <- transform(ndata, y3 = rnbinom(nn, mu = exp(12+x), size = exp(1)))
+ndata <- transform(ndata, y3 = rnbinom(nn, mu = exp(12+x2), size = exp(1)))
with(ndata, range(y3)) # Large counts
-fit2 <- vglm(y3 ~ x, negbinomial(nsimEIM = 100), ndata, trace = TRUE)
+fit2 <- vglm(y3 ~ x2, negbinomial(nsimEIM = 100), ndata, trace = TRUE)
coef(fit2, matrix = TRUE)
# Example 4: a NB-1 to estimate a negative binomial with Var(Y) = phi0 * mu
@@ -375,7 +415,7 @@ nb1 <- vglm(y3 ~ x2 + x3, negbinomial(parallel = TRUE, zero = NULL),
mydata, trace = TRUE)
# Extracting out some quantities:
cnb1 <- coef(nb1, matrix = TRUE)
-mydiff <- (cnb1["(Intercept)", "log(k)"] - cnb1["(Intercept)", "log(mu)"])
+mydiff <- (cnb1["(Intercept)", "log(size)"] - cnb1["(Intercept)", "log(mu)"])
delta0.hat <- exp(mydiff)
(phi.hat <- 1 + 1 / delta0.hat) # MLE of phi
summary(nb1)
diff --git a/man/normal1.Rd b/man/normal1.Rd
index 94701aa..0d7ca5a 100644
--- a/man/normal1.Rd
+++ b/man/normal1.Rd
@@ -1,7 +1,7 @@
\name{normal1}
\alias{normal1}
%- Also NEED an '\alias' for EACH other topic documented here.
-\title{ Univariate normal distribution }
+\title{ Univariate Normal Distribution }
\description{
Maximum likelihood estimation of the two parameters of a univariate
normal distribution.
@@ -9,7 +9,7 @@
}
\usage{
normal1(lmean = "identity", lsd = "loge",
- emean = list(), esd = list(), method.init = 1, zero = -2)
+ emean = list(), esd = list(), imethod = 1, zero = -2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -25,8 +25,9 @@ normal1(lmean = "identity", lsd = "loge",
See \code{earg} in \code{\link{Links}} for general information.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}} for more information.
+ If \code{lmean = loge} then try \code{imethod = 2}.
}
@@ -67,12 +68,13 @@ New York: Wiley-Interscience, Third edition.
\code{\link{posnormal1}},
\code{\link{mix2normal1}},
\code{\link{tobit}},
- \code{\link{cnormal1}},
+ \code{\link{cennormal1}},
\code{\link{fnormal1}},
\code{\link{skewnormal1}},
- \code{\link{dcnormal1}},
+ \code{\link{dcennormal1}},
\code{\link{huber}},
\code{\link{studentt}},
+ \code{\link{binormal}},
\code{\link[stats:Normal]{dnorm}}.
}
diff --git a/man/notdocumentedyet.Rd b/man/notdocumentedyet.Rd
index c702bb6..589a95f 100644
--- a/man/notdocumentedyet.Rd
+++ b/man/notdocumentedyet.Rd
@@ -5,12 +5,24 @@
%
%
%
-% 20110202; James Lauder work
-\alias{dexpgeom}
-\alias{pexpgeom}
-\alias{qexpgeom}
-\alias{rexpgeom}
+% 20110202; 20110317; James Lauder work
+%\alias{dexpgeom}
+%\alias{pexpgeom}
+%\alias{qexpgeom}
+%\alias{rexpgeom}
+%\alias{expgeometric}
%
+%\alias{dweibull3}
+%\alias{pweibull3}
+%\alias{qweibull3}
+%\alias{rweibull3}
+%\alias{weibull3}
+%
+%
+%
+% 20110321; misc. datasets.
+\alias{fibre1.5}
+\alias{fibre15}
%
%
% 20110202; for Melbourne; these include datasets.
@@ -30,6 +42,9 @@
%
%
%
+%20110411
+\alias{dbinorm}
+%
%20090330
\alias{dclogloglap}
\alias{dlogitlap}
@@ -408,7 +423,7 @@
% \alias{vgam.match}
% \alias{vgam.nlchisq}
% \alias{vgety}
-% \alias{vglm.fit}
+\alias{vglm.fit}
\alias{vglm.garma.control}
\alias{vglm.multinomial.control}
\alias{vglm.multinomial.deviance.control}
@@ -439,6 +454,7 @@
%
\alias{Coef.uqo-class}
\alias{cao-class}
+\alias{rcam0-class}
\alias{rcam-class}
\alias{grc-class}
\alias{qrrvglm-class}
diff --git a/man/pareto1.Rd b/man/pareto1.Rd
index c6b0881..b407b0b 100644
--- a/man/pareto1.Rd
+++ b/man/pareto1.Rd
@@ -10,9 +10,9 @@
}
\usage{
-pareto1(lshape = "loge", earg=list(), location=NULL)
-tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
- method.init=1)
+pareto1(lshape = "loge", earg = list(), location = NULL)
+tpareto1(lower, upper, lshape = "loge", earg = list(), ishape = NULL,
+ imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -21,11 +21,13 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
See \code{\link{Links}} for more choices.
A log link is the default because \eqn{k} is positive.
+
}
\item{earg}{
List. Extra argument for the link.
See \code{earg} in \code{\link{Links}} for general information.
+
}
\item{lower, upper}{
Numeric.
@@ -40,6 +42,7 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
A \code{NULL} means a value is obtained internally.
If failure to converge occurs try specifying a value, e.g., 1 or 2.
+
}
\item{location}{
Numeric. The parameter \eqn{\alpha}{alpha} below.
@@ -48,12 +51,14 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
estimation, which means \code{min(y)} where \code{y} is the response
vector.
+
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for \code{ishape}.
+
}
}
\details{
@@ -67,16 +72,16 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
The Pareto distribution, which is used a lot in economics,
has a probability density function that can be written
- \deqn{f(y) = k \alpha^k / y^{k+1}}{%
+ \deqn{f(y) = k \alpha^k / y^{k+1}}{%
f(y) = k * alpha^k / y^(k+1)}
for \eqn{0 < \alpha < y}{0< alpha < y} and \eqn{k>0}.
The \eqn{\alpha}{alpha} is known as the location parameter, and
\eqn{k} is known as the shape parameter.
The mean of \eqn{Y} is
- \eqn{\alpha k/(k-1)}{alpha*k/(k-1)} provided \eqn{k>1}.
+ \eqn{\alpha k/(k-1)}{alpha*k/(k-1)} provided \eqn{k > 1}.
Its variance is
\eqn{\alpha^2 k /((k-1)^2 (k-2))}{alpha^2 k /((k-1)^2 (k-2))}
- provided \eqn{k>2}.
+ provided \eqn{k > 2}.
The upper truncated Pareto distribution
@@ -99,23 +104,26 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
Evans, M., Hastings, N. and Peacock, B. (2000)
\emph{Statistical Distributions},
New York: Wiley-Interscience, Third edition.
+
Aban, I. B., Meerschaert, M. M. and Panorska, A. K. (2006)
Parameter estimation for the truncated Pareto distribution,
\emph{Journal of the American Statistical Association},
\bold{101}(473),
270--277.
+
}
\author{ T. W. Yee }
\note{
- Outside of economics, the Pareto distribution is known as the Bradford
- distribution.
+ Outside of economics, the Pareto distribution is known as the
+ Bradford distribution.
For \code{pareto1},
@@ -123,8 +131,8 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
then the fitted values will be \code{NA}s.
Also, \code{pareto1} fits the Pareto(I) distribution.
See \code{\link{paretoIV}} for the more general Pareto(IV/III/II)
- distributions, but there is a slight change in notation: \eqn{s=k}
- and \eqn{b=\alpha}{b=alpha}.
+ distributions, but there is a slight change in notation: \eqn{s = k}
+ and \eqn{b=\alpha}{b = alpha}.
In some applications the Pareto law is truncated by a
@@ -136,6 +144,7 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
the usual properties of MLEs.
Aban (2006) discusses other inferential details.
+
}
\section{Warning }{
The usual or unbounded Pareto distribution has two parameters
@@ -157,29 +166,30 @@ tpareto1(lower, upper, lshape = "loge", earg=list(), ishape=NULL,
\code{\link{paretoIV}},
\code{\link{gpd}}.
+
}
\examples{
-alpha = 2; k = exp(3)
-pdat = data.frame(y = rpareto(n=1000, location=alpha, shape=k))
-fit = vglm(y ~ 1, pareto1, pdat, trace=TRUE)
+alpha = 2; kay = exp(3)
+pdat = data.frame(y = rpareto(n = 1000, location = alpha, shape = kay))
+fit = vglm(y ~ 1, pareto1, pdat, trace = TRUE)
fit at extra # The estimate of alpha is here
head(fitted(fit))
with(pdat, mean(y))
-coef(fit, matrix=TRUE)
+coef(fit, matrix = TRUE)
summary(fit) # Standard errors are incorrect!!
# Here, alpha is assumed known
-fit2 = vglm(y ~ 1, pareto1(location=alpha), pdat, trace=TRUE, crit="c")
+fit2 = vglm(y ~ 1, pareto1(location = alpha), pdat, trace = TRUE, crit = "c")
fit2 at extra # alpha stored here
head(fitted(fit2))
-coef(fit2, matrix=TRUE)
-summary(fit2) # Standard errors are ok
+coef(fit2, matrix = TRUE)
+summary(fit2) # Standard errors are okay
# Upper truncated Pareto distribution
-lower = 2; upper = 8; k = exp(2)
-pdat3 = data.frame(y = rtpareto(n=100, lower=lower, upper=upper, shape=k))
-fit3 = vglm(y ~ 1, tpareto1(lower, upper), pdat3, trace=TRUE, cri="c")
-coef(fit3, matrix=TRUE)
+lower = 2; upper = 8; kay = exp(2)
+pdat3 = data.frame(y = rtpareto(n = 100, lower = lower, upper = upper, shape = kay))
+fit3 = vglm(y ~ 1, tpareto1(lower, upper), pdat3, trace = TRUE, cri = "c")
+coef(fit3, matrix = TRUE)
c(fit3 at misc$lower, fit3 at misc$upper)
}
\keyword{models}
diff --git a/man/paretoIV.Rd b/man/paretoIV.Rd
index 1ba2e8d..d060f73 100644
--- a/man/paretoIV.Rd
+++ b/man/paretoIV.Rd
@@ -13,7 +13,7 @@
\usage{
paretoIV(location=0, lscale="loge", linequality="loge", lshape="loge",
escale=list(), einequality=list(), eshape=list(),
- iscale=1, iinequality=1, ishape=NULL, method.init=1)
+ iscale=1, iinequality=1, ishape=NULL, imethod=1)
paretoIII(location=0, lscale="loge", linequality="loge",
escale=list(), einequality=list(),
iscale=NULL, iinequality=NULL)
@@ -50,7 +50,7 @@ paretoII(location=0, lscale="loge", lshape="loge",
some alternative initial values.
}
- \item{method.init}{
+ \item{imethod}{
Method of initialization for the shape parameter.
Currently only values 1 and 2 are available.
Try the other value if convergence failure occurs.
@@ -69,29 +69,35 @@ paretoII(location=0, lscale="loge", lshape="loge",
\eqn{g} the \emph{inequality} parameter, and
\eqn{s} the \emph{shape} parameter.
+
The location parameter is assumed known otherwise the Pareto(IV)
distribution will not be a regular family. This assumption is not too
restrictive in modelling because in typical applications this parameter
is known, e.g., in insurance and reinsurance it is pre-defined by a
contract and can be represented as a deductible or a retention level.
+
The inequality parameter is so-called because of its interpretation
in the economics context. If we choose a unit shape parameter value
and a zero location parameter value then the inequality parameter
is the Gini index of inequality, provided \eqn{g \leq 1}{g<=1}.
+
The fitted values are currently \code{NA} because I haven't worked
out what the mean of \eqn{Y} is yet.
+
% The mean of \eqn{Y} is
% \eqn{\alpha k/(k-1)}{alpha*k/(k-1)} provided \eqn{k>1}.
% Its variance is
% \eqn{\alpha^2 k /((k-1)^2 (k-2))}{alpha^2 k /((k-1)^2 (k-2))}
% provided \eqn{k>2}.
+
% The maximum likelihood estimator for the location parameter is
% \code{min(y)}, i.e., the smallest response value.
+
There are a number of special cases of the Pareto(IV) distribution.
These include the Pareto(I), Pareto(II), Pareto(III), and Burr family
of distributions.
@@ -108,12 +114,14 @@ paretoII(location=0, lscale="loge", lshape="loge",
but there is a slight change in notation: \eqn{s=k} and
\eqn{b=\alpha}{b=alpha}.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
Brazauskas, V. (2003)
@@ -121,16 +129,19 @@ Information matrix for Pareto(IV), Burr, and related distributions.
\emph{Comm.\ Statist.\ Theory and Methods}
\bold{32}, 315--325.
+
Arnold, B. C. (1983)
\emph{Pareto Distributions}.
Fairland, Maryland: International Cooperative Publishing House.
+
}
\author{ T. W. Yee }
\note{
The \code{extra} slot of the fitted object has a component called
\code{"location"} which stores the location parameter value(s).
+
}
%\section{Warning }{
% The Pareto(IV) distribution is very general,
@@ -146,6 +157,8 @@ Fairland, Maryland: International Cooperative Publishing House.
\code{\link{ParetoIV}},
\code{\link{pareto1}},
\code{\link{gpd}}.
+
+
}
\examples{
pdat = data.frame(y=rparetoIV(2000, scal=exp(1), ineq=exp(-0.3), shap=exp(1)))
diff --git a/man/plackett.Rd b/man/plackett.Rd
index 64e37a3..b9ff39f 100644
--- a/man/plackett.Rd
+++ b/man/plackett.Rd
@@ -8,7 +8,7 @@
}
\usage{
-plackett(link="loge", earg=list(), ioratio=NULL, method.init=1, nsimEIM=200)
+plackett(link="loge", earg=list(), ioratio=NULL, imethod=1, nsimEIM=200)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -28,7 +28,7 @@ plackett(link="loge", earg=list(), ioratio=NULL, method.init=1, nsimEIM=200)
If a convergence failure occurs try assigning a value or a different value.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method for the parameter.
If failure to converge occurs try another value
diff --git a/man/plotrcam0.Rd b/man/plotrcam0.Rd
index 53bcfce..860aad9 100644
--- a/man/plotrcam0.Rd
+++ b/man/plotrcam0.Rd
@@ -6,97 +6,119 @@
}
\description{
- Produces the main effects plot for Row-Column Association
- Models (RCAMs) in \code{\link{rcam}} with rank zero for some
- family functions. The main result of the rank-zero \bold{RCAM}
- models is the plot of main effects (row and column).
+ Produces a main effects plot for Row-Column Association
+ Models (RCAMs).
}
\usage{
- plotrcam0(object, rfirst = 1, cfirst = 1,
+ plotrcam0(object, centered = TRUE, whichplots = c(1, 2),
+ hline0 = TRUE, hlty = "dashed", hcol = par()$col, hlwd = par()$lwd,
+ rfirst = 1, cfirst = 1,
rtype = "h", ctype = "h",
- rlas = 1, rcex.lab = 1,
- rcex.axis = 1, rlabels = FALSE,
- rtick = FALSE, clas = 1, ccex.lab = 1,
- ccex.axis = 1, clabels = FALSE, ctick = FALSE,
+ rcex.lab = 1, rcex.axis = 1, rtick = FALSE,
+ ccex.lab = 1, ccex.axis = 1, ctick = FALSE,
rmain = "Row effects", rsub = "",
- rxlabel = "", rylabel = "Row effects",
- cmain = "Column effects", csub = "", cxlabel= "",
- cylabel = "Column effects",
- rcol = par()$col, ccol = par()$col,
- ...)
+ rxlab = "", rylab = "Row effects",
+ cmain = "Column effects", csub = "",
+ cxlab= "", cylab = "Column effects",
+ rcol = par()$col, ccol = par()$col, ...)
}
\arguments{
\item{object}{
- An \code{\link{rcam}} object.
+ An \code{\link{rcam}} object.
+ This should be of rank-0, i.e., main effects only and no
+ interactions.
}
-\item{rfirst, cfirst}{
- \code{rfirst} is the level of row that is placed first in the
- row effect plot, and \code{cfirst} for the column effect.
+\item{whichplots}{
+ Numeric, describing which plots are to be plotted.
+ The row effects plot is 1 and the column effects plot is 2.
+ Set the value \code{0}, say, for no plots at all.
-}
-\item{rmain, cmain}{
- \code{rmain} is a character of name for main label in row effect
- plot, and \code{cmain} for the column one.
+}
+\item{centered}{
+ Logical.
+ If \code{TRUE} then the row and column effects are centered
+ (but not scaled) by \code{\link[base]{scale}}.
+ If \code{FALSE} then the raw effects are used (of which
+ the first are zero by definition).
}
-\item{rtype, ctype}{
- See \code{type} argument of
- \code{\link[graphics:plot]{plot}}.
+\item{hline0, hlty, hcol, hlwd}{
+ \code{hline0} is logical. If \code{TRUE} then a horizontal line is
+ plotted at 0 and the other arguments describe this line.
+ Probably having \code{hline0 = TRUE} only makes sense when
+ \code{centered = TRUE}.
}
-\item{rlabels, clabels}{
- Currently not functioning properly.
- zz.
- See \code{labels} argument of
- \code{\link[graphics:plot]{plot}}.
+\item{rfirst, cfirst}{
+ \code{rfirst} is the level of row that is placed first in the
+ row effects plot, etc.
+
+}
+\item{rmain, cmain}{
+ Character.
+ \code{rmain} is the main label in the row effects plot, etc.
}
-\item{rsub, csub}{
- See \code{sub} argument of
+\item{rtype, ctype, rsub, csub}{
+ See the \code{type} and \code{sub} arguments of
\code{\link[graphics:plot]{plot}}.
}
-\item{rxlabel, rylabel, cxlabel, cylabel}{
- \code{rxlabel} is a character of names for x-axis label and
- \code{rylabel} is for the y-axis in the row effect plot.
- And \code{cxlabel} and \code{ylabel} repectivrly name the
- x and y label on the column effect plot.
+%\item{rlabels, clabels}{
+% rlabels = FALSE, clabels = FALSE,
+% Currently not functioning properly.
+% zz.
+% See \code{labels} argument of
+% \code{\link[graphics:plot]{plot}}.
+%
+%}
+\item{rxlab, rylab, cxlab, cylab}{
+ Character.
+ For the row effects plot,
+ \code{rxlab} is \code{xlab} and
+ \code{rylab} is \code{ylab};
+ see \code{\link[graphics:par]{par}}.
+ Ditto for \code{cxlab} and \code{cylab} for the column effects plot.
}
\item{rcex.lab, ccex.lab}{
- Both are numeric.
- \code{rcex.lab} is number of character expansion for row effect
- label, and \code{ccex.lab} for the column one.
+ Numeric.
+ \code{rcex.lab} is \code{cex} for the row effects plot label,
+ etc.
}
\item{rcex.axis, ccex.axis}{
- Both are numeric.
- \code{rcex.axis} is number of character expansion for the row
- axis label, and \code{ccex.axis } for the column one.
+ Numeric.
+ \code{rcex.axis} is the \code{cex} argument for the row effects axis label,
+ etc.
}
\item{rtick, ctick}{
- Logical. \code{rtick = TRUE} means give ticks in row effect
- plot, and \code{ctick} for the column one.
+ Logical.
+ If \code{rtick = TRUE} then add ticks to the row effects plot, etc.
}
\item{rcol, ccol}{
- \code{rcol} give a colour for the row effect, and \code{ccol}
- for the column one.
+ \code{rcol} give a colour for the row effects plot,
+ etc.
}
%\item{llwd}{
% Fed into \code{lwd} of \code{\link[graphics:par]{par}}.
%
%}
-\item{rlas, clas}{
- Fed into \code{las} of \code{\link[graphics:par]{par}}.
-
-}
+%\item{rlas, clas}{
+% Fed into \code{las} of \code{\link[graphics:par]{par}}.
+%
+%}
+%\item{main}{
+% Character. A common title.
+%
+%}
%\item{type}{
% Fed into \code{type} of \code{\link[graphics:plot]{plot}}.
%
@@ -107,32 +129,53 @@
}
}
+\details{
+ This function plots the row and column effects of a rank-0 RCAM.
+ As the result is a main effects plot of a regression analysis, its
+ interpretation when \code{centered = FALSE} is relative
+ to the baseline (reference level) of a row and column, and
+ should also be considered in light of the link function used.
+ Many arguments that start with \code{"r"} refer to the row
+ effects plot, and \code{"c"} for the column
+ effects plot.
+
+
+}
+\value{
+ The original object with the \code{post} slot
+ assigned additional information from the plot.
+
+
+}
+
+
\note{
- This function plots the rows and columns effect of a rank-0 RCAM.
- As the result is a main effect plot of a regression analysis, its
- interpretation relative to the baseline or reference level of row
- and column and should be considered the link function was used.
+ This function should be only used to plot the object of rank-0 RCAM.
+ If the rank is positive then it will issue a warning.
- This function should be only used to plots the object of rank-0 RCAM.
- If it use to plot non-rank-0 RCAM object, it will issue a warning.
+ Using an argument \code{ylim} will mean the row and column
+ effects are plotted on a common scale;
+ see \code{\link[graphics]{plot.window}}.
+% This function is not finished yet.
+% There may be several bugs!
+
}
\author{
T. W. Yee,
A. F. Hadi.
-}
-
-\section{Warning}{
- This function is not finished yet.
- There are many bugs!
}
+%\section{Warning}{
+%
+%}
+
\seealso{
\code{\link{moffset}}
@@ -141,33 +184,33 @@
}
\examples{
-# poissonff example
-fit0 <- rcam(Rcam(moffset(alcoff), rbaseline = "11", cbaseline = "Monday"),
- fam = poissonff)
-\dontrun{par(oma = c(0,0,4,0), mfrow = c(1, 2))
-plotrcam0(fit0) }
-
-# negbinomial example
-fit1 <- rcam(Rcam(moffset(alcoff), rbaseline = "11", cbaseline = "Monday"),
- fam = negbinomial)
-\dontrun{par(oma = c(0,0,4,0), mfrow = c(1, 2))
-plotrcam0(fit1) }
-
-# normal1 example
-fit2 <- rcam(Rcam(moffset(alcoff), rbaseline = "11", cbaseline = "Monday"),
- fam = normal1)
-\dontrun{par(oma = c(0,0,4,0), mfrow = c(1, 2))
-plotrcam0(fit2) }
-
-# medpolish example
-fit3 <- rcam(Rcam(moffset(alcoff), rbaseline = "11", cbaseline = "Monday"),
- fam = alaplace2(tau = 0.5, intparloc = TRUE))
-\dontrun{par(oma = c(0,0,4,0), mfrow = c(1, 2))
-plotrcam0(fit3) }
-
-# zipoissonff example
-fit4 <- rcam(Rcam(moffset(crashp), rbaseline = "11", cbaseline = "Monday"),
- fam = zipoissonff, Rank = 0, trace = TRUE, crit = "l")
-\dontrun{par(oma = c(0,0,4,0), mfrow = c(1, 2))
-plotrcam0(fit4) }
+alcoff.e <- moffset(alcoff, "6", "Monday", postfix = "*") # Effective day
+fit0 <- rcam(alcoff.e, family = poissonff)
+\dontrun{par(oma = c(0, 0, 4, 0), mfrow = 1:2) # For all plots below too
+ii = plot(fit0, rcol = "blue", ccol = "orange",
+ lwd = 4, ylim = c(-2, 2), # A common ylim
+ cylab = "Effective daily effects", rylab = "Hourly effects",
+ rxlab = "Hour", cxlab = "Effective day")
+ii at post # Endowed with additional information
+}
+
+# Negative binomial example
+fit1 <- rcam(alcoff.e, negbinomial, trace = TRUE)
+\dontrun{ plot(fit1, ylim = c(-2, 2)) }
+
+# Univariate normal example
+fit2 <- rcam(alcoff.e, normal1, trace = TRUE)
+\dontrun{ plot(fit2, ylim = c(-200, 400)) }
+
+# Median-polish example
+fit3 <- rcam(alcoff.e, alaplace2(tau = 0.5, intparloc = TRUE),
+ trace = TRUE)
+\dontrun{ plot(fit3, ylim = c(-200, 250)) }
+
+# Zero-inflated Poisson example on "crashp" (no 0s in alcoff)
+cbind(rowSums(crashp)) # Easy to see the data
+cbind(colSums(crashp)) # Easy to see the data
+fit4 <- rcam(Rcam(crashp, rbaseline = "5", cbaseline = "Sunday"),
+ zipoissonff, trace = TRUE)
+\dontrun{ plot(fit4, ylim = c(-3, 3)) }
}
diff --git a/man/poissonff.Rd b/man/poissonff.Rd
index c272a3c..29c2602 100644
--- a/man/poissonff.Rd
+++ b/man/poissonff.Rd
@@ -11,7 +11,7 @@
}
\usage{
poissonff(link = "loge", earg=list(), dispersion = 1, onedpar = FALSE,
- imu=NULL, method.init=1, parallel = FALSE, zero = NULL)
+ imu=NULL, imethod=1, parallel = FALSE, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -46,7 +46,7 @@ poissonff(link = "loge", earg=list(), dispersion = 1, onedpar = FALSE,
A logical or formula. Used only if the response is a matrix.
}
- \item{imu, method.init}{
+ \item{imu, imethod}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
diff --git a/man/poissonp.Rd b/man/poissonp.Rd
index 798c6ec..24d1fd1 100644
--- a/man/poissonp.Rd
+++ b/man/poissonp.Rd
@@ -9,7 +9,7 @@
}
\usage{
poissonp(ostatistic, dimension=2, link="loge", earg=list(),
- idensity=NULL, method.init=1)
+ idensity=NULL, imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -40,7 +40,7 @@ poissonp(ostatistic, dimension=2, link="loge", earg=list(),
Use this argument if convergence failure occurs.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method for \eqn{\lambda}{lambda}.
If failure to converge occurs try another value
diff --git a/man/posbinomUC.Rd b/man/posbinomUC.Rd
index 0681db3..0f73356 100644
--- a/man/posbinomUC.Rd
+++ b/man/posbinomUC.Rd
@@ -74,7 +74,7 @@ rposbinom(n, size, prob)
}
\examples{
prob = 0.2; size = 10
-y = rposbinom(n=1000, size, prob)
+y = rposbinom(n = 1000, size, prob)
table(y)
mean(y) # Sample mean
@@ -93,6 +93,22 @@ round(dposbinom(1:10, size, prob) * 1000) # Should be similar
main=paste("Positive-binomial(", size, ",", prob, ") (blue) vs",
" Binomial(", size, ",", prob, ") (green)", sep=""),
names.arg = as.character(0:size), las=1) }
+
+# Simulated data example
+nn = 1000; sizeval1 = 10; sizeval2 = 20
+pdat <- data.frame(x2 = seq(0, 1, length = nn))
+pdat <- transform(pdat, prob1 = logit(-2 + 2 * x2, inverse = TRUE),
+ prob2 = logit(-1 + 1 * x2, inverse = TRUE),
+ sizev1 = rep(sizeval1, len = nn),
+ sizev2 = rep(sizeval2, len = nn))
+pdat <- transform(pdat, y1 = rposbinom(nn, size = sizev1, prob = prob1),
+ y2 = rposbinom(nn, size = sizev2, prob = prob2))
+with(pdat, table(y1))
+with(pdat, table(y2))
+# Multivariate response
+fit2 = vglm(cbind(y1, y2) ~ x2, posbinomial(mv = TRUE),
+ trace = TRUE, pdat, weight = cbind(sizev1, sizev2))
+coef(fit2, matrix = TRUE)
}
\keyword{distribution}
diff --git a/man/posbinomial.Rd b/man/posbinomial.Rd
index 7c5ebee..f243fd6 100644
--- a/man/posbinomial.Rd
+++ b/man/posbinomial.Rd
@@ -6,18 +6,18 @@
Fits a positive binomial distribution.
}
\usage{
-posbinomial(link = "logit", earg=list())
+posbinomial(link = "logit", earg = list(),
+ mv = FALSE, parallel = FALSE, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{link}{
- Link function for the usual probability parameter.
- See \code{\link{Links}} for more choices.
+ \item{link, earg}{
+ Link function and its extra argument for the usual probability parameter.
+ See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{earg}{
- List. Extra argument for the link.
- See \code{earg} in \code{\link{Links}} for general information.
+ \item{mv, parallel, zero}{
+ See \code{\link{CommonVGAMffArguments}} for more information.
}
}
@@ -26,6 +26,9 @@ posbinomial(link = "logit", earg=list())
but with the probability of zero being zero.
Thus the other probabilities are scaled up
(i.e., divided by \eqn{1-P(Y=0)}{1-P(Y=0)}).
+ The fitted values are the ordinary binomial distribution
+ fitted values, i.e., the usual mean.
+
}
\value{
@@ -33,6 +36,7 @@ posbinomial(link = "logit", earg=list())
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
Patil, G. P. (1962)
@@ -42,32 +46,50 @@ truncated binomial distribution.
\emph{Biometrika},
\bold{49}, 227--237.
+
Documentation accompanying the \pkg{VGAM} package at
\url{http://www.stat.auckland.ac.nz/~yee}
contains further information and examples.
+
}
\author{ Thomas W. Yee }
+
\note{
-The input for this family function is the same as
-\code{\link{binomialff}}.
+ The input for this family function is the same as
+ \code{\link{binomialff}}.
+
+
+ If \code{mv = TRUE} then each column of the matrix response
+ should be a count (the number of successes), and the
+ \code{weights} argument should be a matrix of the same dimension
+ as the response containing the number of trials.
+ If \code{mv = FALSE} then the response input should be the same
+ as \code{\link{binomialff}}.
+
+
+
+ Yet to be done: a \code{quasi.posbinomial} which estimates a
+ dispersion parameter.
+
-Yet to be done: a \code{quasi.posbinomial} which estimates a dispersion
-parameter.
}
\section{Warning }{
Under- or over-flow may occur if the data is ill-conditioned.
+
}
\seealso{
\code{\link{binomialff}}.
+
}
\examples{
# Number of albinotic children in families with 5 kids (from Patil, 1962)
-akids = data.frame(y = c(rep(1,25), rep(2,23), rep(3,10), 4,5), n=rep(5,60))
+akids = data.frame(y = c(rep(1, 25), rep(2, 23), rep(3, 10), 4, 5),
+ n = rep(5, 60))
fit1 = vglm(cbind(y, n-y) ~ 1, posbinomial, akids, trace = TRUE)
summary(fit1)
Coef(fit1) # = MLE of p = 0.3088
diff --git a/man/posnegbinomial.Rd b/man/posnegbinomial.Rd
index edfcee4..cc915e2 100644
--- a/man/posnegbinomial.Rd
+++ b/man/posnegbinomial.Rd
@@ -8,9 +8,9 @@
}
\usage{
-posnegbinomial(lmunb = "loge", lk = "loge", emunb = list(), ek = list(),
- ik = NULL, zero = -2, cutoff = 0.995, shrinkage.init = 0.95,
- method.init = 1)
+posnegbinomial(lmunb = "loge", lsize = "loge", emunb = list(), esize = list(),
+ isize = NULL, zero = -2, cutoff = 0.995, shrinkage.init = 0.95,
+ imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -20,22 +20,22 @@ posnegbinomial(lmunb = "loge", lk = "loge", emunb = list(), ek = list(),
See \code{\link{Links}} for more choices.
}
- \item{lk}{
+ \item{lsize}{
Parameter link function applied to the dispersion parameter,
called \code{k}.
See \code{\link{Links}} for more choices.
}
- \item{emunb, ek}{
+ \item{emunb, esize}{
List. Extra argument for the respective links.
See \code{earg} in \code{\link{Links}} for general information.
}
- \item{ik}{
+ \item{isize}{
Optional initial value for \code{k}, an index parameter.
The value \code{1/k} is known as a dispersion parameter.
If failure to converge occurs try different values (and/or use
- \code{method.init}).
+ \code{imethod}).
If necessary this vector is recycled to length equal to the number
of responses.
A value \code{NULL} means an initial value for each response is
@@ -46,13 +46,14 @@ posnegbinomial(lmunb = "loge", lk = "loge", emunb = list(), ek = list(),
Integer valued vector, usually assigned \eqn{-2} or \eqn{2} if used
at all. Specifies which of the two linear/additive predictors are
modelled as an intercept only. By default, the \code{k} parameter
- (after \code{lk} is applied) is modelled as a single unknown
+ (after \code{lsize} is applied) is modelled as a single unknown
number that is estimated. It can be modelled as a function of
the explanatory variables by setting \code{zero = NULL}. A negative
value means that the value is recycled, so setting \eqn{-2} means
all \code{k} are intercept only.
See \code{\link{CommonVGAMffArguments}} for more information.
+
}
\item{cutoff}{
A numeric which is close to 1 but never exactly 1. Used to
@@ -62,7 +63,7 @@ posnegbinomial(lmunb = "loge", lk = "loge", emunb = list(), ek = list(),
\code{qnegbin(p)}.
}
- \item{shrinkage.init, method.init}{
+ \item{shrinkage.init, imethod}{
See \code{\link{negbinomial}}.
}
@@ -170,7 +171,7 @@ corbet <- data.frame(nindiv = 1:24,
fit <- vglm(nindiv ~ 1, posnegbinomial, weights = ofreq, data = corbet)
coef(fit, matrix = TRUE)
Coef(fit)
-(khat <- Coef(fit)["k"])
+(khat <- Coef(fit)["size"])
pdf2 <- dposnegbin(x = with(corbet, nindiv), mu = fitted(fit), size = khat)
print( with(corbet, cbind(nindiv, ofreq, fitted = pdf2*sum(ofreq))), dig = 1)
}
diff --git a/man/posnormUC.Rd b/man/posnormUC.Rd
index 7a1f72a..2fd914b 100644
--- a/man/posnormUC.Rd
+++ b/man/posnormUC.Rd
@@ -11,23 +11,29 @@
}
\usage{
-dposnorm(x, mean=0, sd=1, log=FALSE)
-pposnorm(q, mean=0, sd=1)
-qposnorm(p, mean=0, sd=1)
-rposnorm(n, mean=0, sd=1)
+dposnorm(x, mean = 0, sd = 1, log = FALSE)
+pposnorm(q, mean = 0, sd = 1)
+qposnorm(p, mean = 0, sd = 1)
+rposnorm(n, mean = 0, sd = 1)
}
\arguments{
\item{x, q}{vector of quantiles.}
\item{p}{vector of probabilities.}
\item{n}{number of observations.
- If \code{length(n) > 1} then the length is taken to be the number required. }
- \item{mean, sd, log}{ see \code{\link[stats:Normal]{rnorm}}. }
+ If \code{length(n) > 1} then the length is taken to be the number required.
+
+ }
+ \item{mean, sd, log}{ see \code{\link[stats:Normal]{rnorm}}.
+
+ }
+
}
\value{
\code{dposnorm} gives the density,
\code{pposnorm} gives the distribution function,
\code{qposnorm} gives the quantile function, and
\code{rposnorm} generates random deviates.
+
}
\author{ T. W. Yee }
\details{
@@ -44,20 +50,19 @@ rposnorm(n, mean=0, sd=1)
}
\examples{
-\dontrun{
-m = 0.8; x = seq(-1, 4, len=501)
-plot(x, dposnorm(x, m=m), type="l", ylim=0:1, las=1,
- ylab=paste("posnorm(m=",m,", sd=1)"), col="blue",
- main="Blue is density, red is cumulative distribution function",
- sub="Purple lines are the 10,20,...,90 percentiles")
-lines(x, pposnorm(x, m=m), col="red")
-abline(h=0)
-probs = seq(0.1, 0.9, by=0.1)
-Q = qposnorm(probs, m=m)
-lines(Q, dposnorm(Q, m=m), col="purple", lty=3, type="h")
-lines(Q, pposnorm(Q, m=m), col="purple", lty=3, type="h")
-abline(h=probs, col="purple", lty=3)
-max(abs(pposnorm(Q, m=m) - probs)) # Should be 0
+\dontrun{ m = 0.8; x = seq(-1, 4, len = 501)
+plot(x, dposnorm(x, m = m), type = "l", ylim = 0:1, las = 1,
+ ylab = paste("posnorm(m = ", m, ", sd = 1)"), col = "blue",
+ main = "Blue is density, red is cumulative distribution function",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+lines(x, pposnorm(x, m = m), col = "red")
+abline(h = 0)
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qposnorm(probs, m = m)
+lines(Q, dposnorm(Q, m = m), col = "purple", lty = 3, type = "h")
+lines(Q, pposnorm(Q, m = m), col = "purple", lty = 3, type = "h")
+abline(h = probs, col = "purple", lty = 3)
+max(abs(pposnorm(Q, m = m) - probs)) # Should be 0
}
}
\keyword{distribution}
diff --git a/man/posnormal1.Rd b/man/posnormal1.Rd
index e03f6fb..d2109aa 100644
--- a/man/posnormal1.Rd
+++ b/man/posnormal1.Rd
@@ -6,8 +6,8 @@
Fits a positive (univariate) normal distribution.
}
\usage{
-posnormal1(lmean="identity", lsd="loge", emean=list(), esd=list(),
- imean=NULL, isd=NULL, nsimEIM = 100, zero=NULL)
+posnormal1(lmean = "identity", lsd = "loge", emean = list(), esd = list(),
+ imean = NULL, isd = NULL, nsimEIM = 100, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -37,9 +37,9 @@ posnormal1(lmean="identity", lsd="loge", emean=list(), esd=list(),
linear/additive predictors are modelled as intercepts only.
The values must be from the set \{1,2\} corresponding
respectively to \eqn{\mu}{mu}, \eqn{\sigma}{sigma}.
- If \code{zero=NULL} then all linear/additive predictors are modelled as
+ If \code{zero = NULL} then all linear/additive predictors are modelled as
a linear combination of the explanatory variables.
- For many data sets having \code{zero=2} is a good idea.
+ For many data sets having \code{zero = 2} is a good idea.
}
}
@@ -97,20 +97,23 @@ posnormal1(lmean="identity", lsd="loge", emean=list(), esd=list(),
}
\seealso{
- \code{\link{normal1}}.
+ \code{\link{normal1}},
+ \code{\link{tobit}}.
+
+
}
\examples{
-pndat = data.frame(m = 1.0, SD = exp(1.0))
-pndat = transform(pndat, y = rposnorm(n <- 1000, m=m, sd=SD))
+pdata = data.frame(m = 1.0, SD = exp(1.0))
+pdata = transform(pdata, y = rposnorm(n <- 1000, m = m, sd = SD))
-\dontrun{with(pndat, hist(y, prob=TRUE, border="blue",
- main=paste("posnorm(m=",m[1],", sd=",round(SD[1],2),")"))) }
-fit = vglm(y ~ 1, fam=posnormal1, pndat, trace=TRUE)
-coef(fit, mat=TRUE)
+\dontrun{with(pdata, hist(y, prob = TRUE, border = "blue",
+ main = paste("posnorm(m =", m[1], ", sd =", round(SD[1], 2),")"))) }
+fit = vglm(y ~ 1, fam = posnormal1, pdata, trace = TRUE)
+coef(fit, matrix = TRUE)
(Cfit = Coef(fit))
-mygrid = with(pndat, seq(min(y), max(y), len=200)) # Add the fit to the histogram
-\dontrun{lines(mygrid, dposnorm(mygrid, Cfit[1], Cfit[2]), col="red")}
+mygrid = with(pdata, seq(min(y), max(y), len = 200)) # Add the fit to the histogram
+\dontrun{lines(mygrid, dposnorm(mygrid, Cfit[1], Cfit[2]), col = "red")}
}
\keyword{models}
\keyword{regression}
diff --git a/man/pospoisson.Rd b/man/pospoisson.Rd
index 0399f89..ff6fcac 100644
--- a/man/pospoisson.Rd
+++ b/man/pospoisson.Rd
@@ -7,7 +7,7 @@
}
\usage{
pospoisson(link = "loge", earg = list(),
- expected = TRUE, ilambda = NULL, method.init = 1)
+ expected = TRUE, ilambda = NULL, imethod = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -32,7 +32,7 @@ pospoisson(link = "loge", earg = list(),
A \code{NULL} means a value is computed internally.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} which
specifies the initialization method for \eqn{\lambda}{lambda}.
If failure to converge occurs try another value
diff --git a/man/propodds.Rd b/man/propodds.Rd
index 5518c10..f7af884 100644
--- a/man/propodds.Rd
+++ b/man/propodds.Rd
@@ -7,7 +7,7 @@
}
\usage{
-propodds(reverse=TRUE)
+propodds(reverse = TRUE)
}
\arguments{
@@ -28,7 +28,7 @@ propodds(reverse=TRUE)
the \emph{parallelism} assumption ought to be checked,
e.g., via a likelihood ratio test.
This \pkg{VGAM} family function is merely a shortcut for
- \code{cumulative(reverse=reverse, link="logit", parallel = TRUE)}.
+ \code{cumulative(reverse = reverse, link = "logit", parallel = TRUE)}.
Please see \code{\link{cumulative}} for more details on this model.
}
@@ -39,10 +39,6 @@ propodds(reverse=TRUE)
}
\references{
-Agresti, A. (2002)
-\emph{Categorical Data Analysis},
-2nd ed. New York: Wiley.
-
Agresti, A. (2010)
\emph{Analysis of Ordinal Categorical Data},
@@ -61,10 +57,12 @@ Vector generalized additive models.
\emph{Journal of the Royal Statistical Society, Series B, Methodological},
\bold{58}, 481--493.
+
Documentation accompanying the \pkg{VGAM} package at
\url{http://www.stat.auckland.ac.nz/~yee}
contains further information and examples.
+
}
\author{ Thomas W. Yee }
@@ -95,8 +93,8 @@ fit2 = vgam(cbind(normal, mild, severe) ~ s(let, df = 2), propodds, pneumo)
# Check the proportional odds assumption with a LRT ----------
(fit3 = vglm(cbind(normal, mild, severe) ~ let,
cumulative(parallel = FALSE, reverse = TRUE), pneumo))
-pchisq(2*(logLik(fit3)-logLik(fit)),
- df = length(coef(fit3))-length(coef(fit)), lower.tail = FALSE)
+pchisq(deviance(fit) - deviance(fit3),
+ df = df.residual(fit) - df.residual(fit3), lower.tail = FALSE)
}
\keyword{models}
\keyword{regression}
diff --git a/man/prplot.Rd b/man/prplot.Rd
index 15f0182..3b5a29b 100644
--- a/man/prplot.Rd
+++ b/man/prplot.Rd
@@ -4,10 +4,12 @@
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
Probability Plots for Categorical Data Analysis
+
}
\description{
Plots the fitted probabilities for some very simplified special
cases of categorical data analysis models.
+
}
\usage{
prplot(object, control = prplot.control(...), ...)
@@ -26,7 +28,7 @@ prplot.control(xlab = NULL, ylab = "Probability", main = NULL, xlim = NULL,
}
\item{control}{
-List containing some basic graphical parameters.
+ List containing some basic graphical parameters.
}
\item{xlab, ylab, main, xlim, ylim, lty }{
@@ -39,23 +41,27 @@ List containing some basic graphical parameters.
Argument \code{rug.arg} is logical: add a rug for the distinct values of the
explanatory variable?
+
}
\item{\dots}{
Arguments such as \code{xlab} which are fed into \code{prplot.control()}.
Only a small selection of graphical arguments from
\code{\link[graphics]{par}} are offered.
+
}
}
\details{
For models involving one term in the RHS of the formula this function
plots the fitted probabilities against the single explanatory variable.
+
}
\value{
The object is returned invisibly with the \code{preplot} slot assigned.
This is obtained by a call to \code{plotvgam()}.
+
}
%\references{
%% ~put references to the literature/web site here ~
@@ -65,6 +71,8 @@ List containing some basic graphical parameters.
%}
\note{
This function is rudimentary.
+
+
}
%% ~Make other sections like Warning with \section{Warning }{....} ~
@@ -72,14 +80,15 @@ List containing some basic graphical parameters.
\seealso{
\code{\link{cumulative}}.
+
}
\examples{
-pneumo = transform(pneumo, let=log(exposure.time))
+pneumo = transform(pneumo, let = log(exposure.time))
fit = vglm(cbind(normal, mild, severe) ~ let, propodds, pneumo)
M = fit at misc$M
-\dontrun{
-prplot(fit)
-prplot(fit, lty=1:M, col=(1:M)+2, rug=TRUE, las=1, ylim=c(0,1), rlwd=2) }
+\dontrun{ prplot(fit)
+prplot(fit, lty = 1:M, col = (1:M)+2, rug = TRUE, las = 1,
+ ylim = c(0,1), rlwd = 2) }
}
% Add one or more standard keywords, see file 'KEYWORDS' in the
% R documentation directory.
diff --git a/man/qrrvglm.control.Rd b/man/qrrvglm.control.Rd
index 6ec8968..2757cc9 100644
--- a/man/qrrvglm.control.Rd
+++ b/man/qrrvglm.control.Rd
@@ -26,7 +26,7 @@ qrrvglm.control(Rank = 1,
iShape = 0.1,
ITolerances = FALSE,
maxitl = 40,
- method.init = 1,
+ imethod = 1,
Maxit.optim = 250,
MUXfactor = rep(7, length=Rank),
Norrr = ~ 1,
@@ -188,7 +188,7 @@ qrrvglm.control(Rank = 1,
Most users should ignore this argument.
}
- \item{method.init}{
+ \item{imethod}{
Method of initialization. A positive integer 1 or 2 or 3 etc.
depending on the \pkg{VGAM} family function.
Currently it is used for \code{\link{negbinomial}} and
diff --git a/man/rayleigh.Rd b/man/rayleigh.Rd
index 365d825..8dad6d0 100644
--- a/man/rayleigh.Rd
+++ b/man/rayleigh.Rd
@@ -1,6 +1,6 @@
\name{rayleigh}
\alias{rayleigh}
-\alias{crayleigh}
+\alias{cenrayleigh}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{Rayleigh Distribution Family Function }
\description{
@@ -9,8 +9,8 @@
}
\usage{
- rayleigh(lscale = "loge", escale = list(), nrfs = 1/3 + 0.01)
-crayleigh(lscale = "loge", escale = list(), oim = TRUE)
+ rayleigh(lscale = "loge", escale = list(), nrfs = 1/3 + 0.01)
+cenrayleigh(lscale = "loge", escale = list(), oim = TRUE)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -54,7 +54,7 @@ crayleigh(lscale = "loge", escale = list(), oim = TRUE)
\eqn{b^2 (4-\pi)/2}{b^2 (4-pi)/2}.
- The \pkg{VGAM} family function \code{crayleigh} handles right-censored
+ The \pkg{VGAM} family function \code{cenrayleigh} handles right-censored
data (the true value is greater than the observed value). To indicate
which type of censoring, input \code{extra = list(rightcensored = vec2)}
where \code{vec2} is a logical vector the same length as the response.
@@ -109,7 +109,7 @@ rdata <- transform(rdata, U = runif(nn, 5, 15))
rdata <- transform(rdata, y = pmin(U, ystar))
\dontrun{ par(mfrow = c(1,2)); hist(with(rdata, ystar)); hist(with(rdata, y)) }
extra <- with(rdata, list(rightcensored = ystar > U))
-fit <- vglm(y ~ 1, crayleigh, rdata, trace = TRUE, extra = extra)
+fit <- vglm(y ~ 1, cenrayleigh, rdata, trace = TRUE, extra = extra)
table(fit at extra$rightcen)
coef(fit, matrix = TRUE)
head(fitted(fit))
diff --git a/man/recexp1.Rd b/man/recexp1.Rd
index 3a9239d..71a5f89 100644
--- a/man/recexp1.Rd
+++ b/man/recexp1.Rd
@@ -8,7 +8,7 @@
record values.
}
\usage{
-recexp1(lrate="loge", irate=NULL, method.init=1)
+recexp1(lrate="loge", irate=NULL, imethod=1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -20,10 +20,10 @@ recexp1(lrate="loge", irate=NULL, method.init=1)
\item{irate}{
Numeric. Optional initial values for the rate.
The default value \code{NULL} means they are computed internally,
- with the help of \code{method.init}.
+ with the help of \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3. Initial method, three algorithms are
implemented. Choose the another value if convergence fails, or use
\code{irate}.
diff --git a/man/recnormal1.Rd b/man/recnormal1.Rd
index eaf01ba..919e9a2 100644
--- a/man/recnormal1.Rd
+++ b/man/recnormal1.Rd
@@ -6,10 +6,11 @@
Maximum likelihood estimation of the two parameters of a
univariate normal distribution when the observations are upper
record values.
+
}
\usage{
-recnormal1(lmean="identity", lsd="loge",
- imean=NULL, isd=NULL, method.init=1, zero=NULL)
+recnormal1(lmean = "identity", lsd = "loge",
+ imean = NULL, isd = NULL, imethod = 1, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -21,10 +22,10 @@ recnormal1(lmean="identity", lsd="loge",
\item{imean, isd}{
Numeric. Optional initial values for the mean and sd.
The default value \code{NULL} means they are computed internally,
- with the help of \code{method.init}.
+ with the help of \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
Integer, either 1 or 2 or 3. Initial method, three algorithms are
implemented. Choose the another value if convergence fails, or use
\code{imean} and/or \code{isd}.
@@ -33,7 +34,7 @@ recnormal1(lmean="identity", lsd="loge",
\item{zero}{
An integer vector, containing the value 1 or 2. If so, the mean or
standard deviation respectively are modelled as an intercept only.
- Usually, setting \code{zero=2} will be used, if used at all.
+ Usually, setting \code{zero = 2} will be used, if used at all.
The default value \code{NULL} means both linear/additive predictors
are modelled as functions of the explanatory variables.
@@ -43,47 +44,55 @@ recnormal1(lmean="identity", lsd="loge",
The response must be a vector or one-column matrix with strictly
increasing values.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
+
}
\references{
Arnold, B. C. and Balakrishnan, N. and Nagaraja, H. N. (1998)
\emph{Records},
New York: John Wiley & Sons.
+
}
\author{ T. W. Yee }
\note{
This family function tries to solve a difficult problem, and the
larger the data set the better.
Convergence failure can commonly occur, and
- convergence may be very slow, so set \code{maxit=200, trace=TRUE}, say.
+ convergence may be very slow, so set \code{maxit = 200, trace = TRUE}, say.
Inputting good initial values are advised.
- This family function uses the BFGS quasi-Newton update formula for the
- working weight matrices. Consequently the estimated variance-covariance
- matrix may be inaccurate or simply wrong! The standard errors must be
- therefore treated with caution; these are computed in functions such
- as \code{vcov()} and \code{summary()}.
+
+ This family function uses the BFGS quasi-Newton update formula
+ for the working weight matrices. Consequently the estimated
+ variance-covariance matrix may be inaccurate or simply wrong! The
+ standard errors must be therefore treated with caution; these are
+ computed in functions such as \code{vcov()} and \code{summary()}.
+
}
\seealso{
\code{\link{normal1}},
- \code{\link{dcnormal1}}.
+ \code{\link{dcennormal1}}.
+
+
}
\examples{
-n = 10000
-mymean = 100
+nn = 10000; mymean = 100
# First value is reference value or trivial record
-rawy = c(mymean, rnorm(n, me=mymean, sd=exp(3)))
-(y = unique(cummax(rawy))) # Keep only observations that are records
+Rdata = data.frame(rawy = c(mymean, rnorm(nn, me = mymean, sd = exp(3))))
+# Keep only observations that are records:
+rdata = data.frame(y = unique(cummax(with(Rdata, rawy))))
-fit = vglm(y ~ 1, recnormal1, trace=TRUE, maxit=200)
-coef(fit, matrix=TRUE)
+fit = vglm(y ~ 1, recnormal1, rdata, trace = TRUE, maxit = 200)
+coef(fit, matrix = TRUE)
Coef(fit)
summary(fit)
}
@@ -91,7 +100,7 @@ summary(fit)
\keyword{regression}
%# Keep only observations that are records
-%delete = c(FALSE, rep(TRUE, len=n))
+%delete = c(FALSE, rep(TRUE, len = n))
%for(i in 2:length(rawy))
% if (rawy[i] > max(rawy[1:(i-1)])) delete[i] = FALSE
%(y = rawy[!delete])
diff --git a/man/rlplot.egev.Rd b/man/rlplot.egev.Rd
index 44fc64a..fc3e680 100644
--- a/man/rlplot.egev.Rd
+++ b/man/rlplot.egev.Rd
@@ -5,6 +5,7 @@
\title{ Return Level Plot for GEV Fits }
\description{
A return level plot is constructed for a GEV-type model.
+
}
\usage{
rlplot.egev(object, plot.it = TRUE,
@@ -14,7 +15,7 @@ rlplot.egev(object, plot.it = TRUE,
pch = par()$pch, pcol.arg = par()$col, pcex = par()$cex,
llty.arg = par()$lty, lcol.arg = par()$col, llwd.arg = par()$lwd,
slty.arg = par()$lty, scol.arg = par()$col, slwd.arg = par()$lwd,
- ylim = NULL, Log = TRUE, CI = TRUE, epsilon = 1e-05, ...)
+ ylim = NULL, log = TRUE, CI = TRUE, epsilon = 1e-05, ...)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -33,6 +34,7 @@ rlplot.egev(object, plot.it = TRUE,
\item{probability}{
Numeric vector of probabilities used.
+
}
\item{add.arg}{ Logical. Add the plot to an existing plot? }
\item{xlab}{ Caption for the x-axis. See \code{\link[graphics]{par}}. }
@@ -54,10 +56,12 @@ rlplot.egev(object, plot.it = TRUE,
\item{slty.arg, scol.arg, slwd.arg}{
Correponding arguments for the lines used for the
confidence intervals. Used only if \code{CI=TRUE}.
+
}
\item{ylim}{ Limits for the y-axis. Numeric of length 2. }
- \item{Log}{ Logical. If \code{TRUE} then \code{log=""} otherwise
+ \item{log}{ Logical. If \code{TRUE} then \code{log=""} otherwise
\code{log="x"}. This changes the labelling of the x-axis only.
+
}
\item{CI}{ Logical. Add in a 95 percent confidence interval? }
\item{epsilon}{
@@ -65,21 +69,25 @@ rlplot.egev(object, plot.it = TRUE,
approximation to the first derivatives with respect to
each parameter. If too small, numerical problems will occur.
+
}
\item{\dots}{
Arguments passed into the \code{plot} function
when setting up the entire plot. Useful arguments here include
\code{sub} and \code{las}.
+
}
}
\details{
A return level plot plots \eqn{z_p}{zp} versus
- \eqn{\log(y_p)}{log(yp)}. It is linear if the shape parameter
- \eqn{\xi=0}{xi=0}. If \eqn{\xi<0}{xi<0} then the plot is convex
+ \eqn{\log(y_p)}{log(yp)}.
+ It is linear if the shape parameter \eqn{\xi=0}{xi=0}.
+ If \eqn{\xi<0}{xi<0} then the plot is convex
with asymptotic limit as \eqn{p} approaches zero at
- \eqn{\mu-\sigma / \xi}{mu-sigma/xi}. And if
- \eqn{\xi>0}{xi>0} then the plot is concave and has no finite bound.
+ \eqn{\mu-\sigma / \xi}{mu-sigma/xi}.
+ And if \eqn{\xi>0}{xi>0} then the plot is concave and has
+ no finite bound.
Here, \eqn{G(z_p) = 1-p}{G(zp) = 1-p} where \eqn{0<p<1}
(\eqn{p} corresponds to the argument \code{probability})
and \eqn{G} is the cumulative distribution function of the
@@ -89,6 +97,7 @@ rlplot.egev(object, plot.it = TRUE,
is exceeded by the annual
maximum in any particular year with probability \eqn{p}.
+
The points in the plot are the actual data.
@@ -104,9 +113,12 @@ rlplot.egev(object, plot.it = TRUE,
}
\references{
+
Coles, S. (2001)
\emph{An Introduction to Statistical Modeling of Extreme Values}.
London: Springer-Verlag.
+
+
}
\author{ T. W. Yee }
@@ -118,19 +130,23 @@ London: Springer-Verlag.
\seealso{
\code{\link{egev}}.
+
+
}
\examples{
-y = rgev(n <- 100, scale=exp(1), shape = -0.1)
-fit = vglm(y ~ 1, egev, trace=TRUE)
+gdata = data.frame(y = rgev(n <- 100, scale = 2, shape = -0.1))
+fit = vglm(y ~ 1, egev, gdata, trace = TRUE)
# Identity link for all parameters:
-fit2 = vglm(y ~ 1, egev(lsh=identity, lsc=identity, isc=10), trace=TRUE)
+fit2 = vglm(y ~ 1, egev(lshape = identity, lscale = identity,
+ iscale = 10), gdata, trace = TRUE)
+coef(fit2, matrix = TRUE)
\dontrun{
-par(mfrow=c(1,2))
+par(mfrow = c(1, 2))
rlplot(fit) -> i1
-rlplot(fit2, pcol="darkorange", lcol="blue", Log=FALSE,
- scol="darkgreen", slty="dashed") -> i2
+rlplot(fit2, pcol = "darkorange", lcol = "blue", log = FALSE,
+ scol = "darkgreen", slty = "dashed", las = 1) -> i2
range(i2 at post$rlplot$upper - i1 at post$rlplot$upper) # Should be near 0
range(i2 at post$rlplot$lower - i1 at post$rlplot$lower) # Should be near 0
}
diff --git a/man/rrar.Rd b/man/rrar.Rd
index 5b5cba1..45722a1 100644
--- a/man/rrar.Rd
+++ b/man/rrar.Rd
@@ -7,6 +7,7 @@ time series }
Estimates the parameters of a
nested reduced-rank autoregressive model for multiple
time series.
+
}
\usage{
rrar(Ranks = 1, coefstart = NULL)
@@ -17,35 +18,42 @@ rrar(Ranks = 1, coefstart = NULL)
Each value must be at least one and no more than \code{M},
where \code{M} is the number of response variables in the time series.
The length of \code{Ranks} is the \emph{lag}, which is often denoted by
- the symbol \emph{L} in the literature. }
+ the symbol \emph{L} in the literature.
+
+ }
\item{coefstart}{ Optional numerical vector of initial values for the
coefficients.
- By default, the family function chooses these automatically. }
+ By default, the family function chooses these automatically.
+
+ }
}
\details{
Full details are given in Ahn and Reinsel (1988).
- Convergence may be very slow, so setting \code{maxits=50}, say, may help.
+ Convergence may be very slow, so setting \code{maxits = 50}, say, may help.
If convergence is not obtained, you might like to try inputting different
initial values.
- Setting \code{trace=TRUE} in \code{\link{vglm}} is useful for monitoring
+
+ Setting \code{trace = TRUE} in \code{\link{vglm}} is useful for monitoring
the progress at each iteration.
+
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}}
and \code{\link{vgam}}.
+
+
}
\references{
+
Ahn, S. and Reinsel, G. C. (1988)
Nested reduced-rank autoregressive models for multiple
time series.
\emph{Journal of the American Statistical Association},
\bold{83}, 849--856.
-Documentation accompanying the \pkg{VGAM} package at
-\url{http://www.stat.auckland.ac.nz/~yee}
-contains further information and examples.
}
\author{ T. W. Yee }
@@ -56,6 +64,7 @@ not with \code{\link{rrvglm}} because
it does not fit into the RR-VGLM framework exactly. Instead, the
reduced-rank model is formulated as a VGLM!
+
A methods function \code{Coef.rrar}, say, has yet to be written.
It would return the quantities
\code{Ak1},
@@ -66,37 +75,39 @@ It would return the quantities
etc. as slots, and then \code{print.Coef.rrar} would also need to be
written.
+
}
\seealso{
-\code{\link{vglm}},
-\code{\link{usagrain}}.
+ \code{\link{vglm}},
+ \code{\link{usgrain}}.
+
}
\examples{
\dontrun{
-year = seq(1961+1/12, 1972+10/12, by=1/12)
-par(mar=c(4,4,2,2)+0.1, mfrow=c(2,2))
+year = seq(1961 + 1/12, 1972 + 10/12, by = 1/12)
+par(mar = c(4, 4, 2, 2) + 0.1, mfrow = c(2, 2))
for(ii in 1:4) {
- plot(year, usagrain[,ii], main=names(usagrain)[ii],
- type="l", xlab="", ylab="")
- points(year, usagrain[,ii], pch="*")
+ plot(year, usgrain[, ii], main = names(usgrain)[ii],
+ type = "l", xlab = "", ylab = "")
+ points(year, usgrain[,ii], pch = "*")
}
-apply(usagrain, 2, mean) # mu vector
-cgrain = scale(usagrain, scale=FALSE) # Center the time series only
-fit = vglm(cgrain ~ 1, rrar(Ranks=c(4,1)), trace=TRUE)
+apply(usgrain, 2, mean) # mu vector
+cgrain = scale(usgrain, scale = FALSE) # Center the time series only
+fit = vglm(cgrain ~ 1, rrar(Ranks = c(4, 1)), trace = TRUE)
summary(fit)
-print(fit at misc$Ak1, dig=2)
-print(fit at misc$Cmatrices, dig=3)
-print(fit at misc$Dmatrices, dig=3)
-print(fit at misc$omegahat, dig=3)
-print(fit at misc$Phimatrices, dig=2)
+print(fit at misc$Ak1, dig = 2)
+print(fit at misc$Cmatrices, dig = 3)
+print(fit at misc$Dmatrices, dig = 3)
+print(fit at misc$omegahat, dig = 3)
+print(fit at misc$Phimatrices, dig = 2)
-par(mar=c(4,4,2,2)+0.1, mfrow=c(4,1))
+par(mar = c(4, 4, 2, 2) + 0.1, mfrow = c(4, 1))
for(ii in 1:4) {
- plot(year, fit at misc$Z[,ii], main=paste("Z", ii, sep=""),
- type="l", xlab="", ylab="")
- points(year, fit at misc$Z[,ii], pch="*")
+ plot(year, fit at misc$Z[,ii], main = paste("Z", ii, sep = ""),
+ type = "l", xlab = "", ylab = "")
+ points(year, fit at misc$Z[,ii], pch = "*")
}
}
}
diff --git a/man/rrvglm-class.Rd b/man/rrvglm-class.Rd
index 83eef97..c797301 100644
--- a/man/rrvglm-class.Rd
+++ b/man/rrvglm-class.Rd
@@ -124,7 +124,7 @@ Objects can be created by calls to \code{\link{rrvglm}}.
}
\item{\code{prior.weights}:}{
Object of class
- \code{"numeric"}, from class \code{ "vlm"}
+ \code{"matrix"}, from class \code{ "vlm"}
holding the initially supplied weights.
}
\item{\code{qr}:}{
diff --git a/man/rrvglm.Rd b/man/rrvglm.Rd
index cef717f..9b5dcd1 100644
--- a/man/rrvglm.Rd
+++ b/man/rrvglm.Rd
@@ -243,9 +243,9 @@ plot(y2 ~ x2, data = mydata, pch = "+", col = 'blue', las = 1,
main = paste("Var(Y) = mu + ", delta1, " * mu^", delta2, sep = "")) }
rrnb2 <- rrvglm(y2 ~ x2 + x3, negbinomial(zero = NULL), mydata, trace = TRUE)
-a21.hat <- (Coef(rrnb2)@A)["log(k)", 1]
+a21.hat <- (Coef(rrnb2)@A)["log(size)", 1]
beta11.hat <- Coef(rrnb2)@B1["(Intercept)", "log(mu)"]
-beta21.hat <- Coef(rrnb2)@B1["(Intercept)", "log(k)"]
+beta21.hat <- Coef(rrnb2)@B1["(Intercept)", "log(size)"]
(delta1.hat <- exp(a21.hat * beta11.hat - beta21.hat))
(delta2.hat <- 2 - a21.hat)
# exp(a21.hat * predict(rrnb2)[1,1] - predict(rrnb2)[1,2]) # delta1.hat
diff --git a/man/simplex.Rd b/man/simplex.Rd
index 1b4f473..f5f37c4 100644
--- a/man/simplex.Rd
+++ b/man/simplex.Rd
@@ -11,7 +11,7 @@
\usage{
simplex(lmu = "logit", lsigma = "loge", emu=list(), esigma=list(),
imu = NULL, isigma = NULL,
- method.init = 1, shrinkage.init = 0.95, zero = 2)
+ imethod = 1, shrinkage.init = 0.95, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
@@ -31,7 +31,7 @@ simplex(lmu = "logit", lsigma = "loge", emu=list(), esigma=list(),
A \code{NULL} means a value is obtained internally.
}
- \item{method.init, shrinkage.init, zero}{
+ \item{imethod, shrinkage.init, zero}{
See \code{\link{CommonVGAMffArguments}} for more information.
}
diff --git a/man/studentt.Rd b/man/studentt.Rd
index 104823a..dbf4c50 100644
--- a/man/studentt.Rd
+++ b/man/studentt.Rd
@@ -10,17 +10,17 @@
}
\usage{
studentt(ldf = "loglog", edf = list(), idf = NULL, tol1 = 0.1,
- method.init = 1)
+ imethod = 1)
studentt2(df = Inf,
llocation = "identity", elocation = list(),
lscale = "loge", escale = list(),
ilocation = NULL, iscale = NULL,
- method.init = 1, zero = -2)
+ imethod = 1, zero = -2)
studentt3(llocation = "identity", elocation = list(),
lscale = "loge", escale = list(),
ldf = "loglog", edf = list(),
ilocation = NULL, iscale = NULL, idf = NULL,
- method.init = 1, zero = -(2:3))
+ imethod = 1, zero = -(2:3))
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -58,7 +58,7 @@ studentt3(llocation = "identity", elocation = list(),
matrix.
}
- \item{method.init, zero}{
+ \item{imethod, zero}{
See \code{\link{CommonVGAMffArguments}}.
}
diff --git a/man/tobit.Rd b/man/tobit.Rd
index 95dddc7..08d7460 100644
--- a/man/tobit.Rd
+++ b/man/tobit.Rd
@@ -3,11 +3,15 @@
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Tobit Model }
\description{
- Fits a Tobit model to a univariate response.
+ Fits a Tobit model.
+
}
\usage{
tobit(Lower = 0, Upper = Inf, lmu = "identity", lsd = "loge",
- emu = list(), esd = list(), method.init = 1, zero = 2)
+ emu = list(), esd = list(), nsimEIM = 250,
+ imu = NULL, isd = NULL,
+ type.fitted = c("uncensored", "censored", "mean.obs"),
+ imethod = 1, zero = -2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -15,39 +19,58 @@ tobit(Lower = 0, Upper = Inf, lmu = "identity", lsd = "loge",
Numeric of length 1, it is the value \eqn{L} described below.
Any value of the linear model
\eqn{x_i^T \beta}{x_i^T beta} that
- is less than this value is assigned this value.
- Hence this should be the smallest possible value in the response variable.
+ is less than this lowerbound is assigned this value.
+ Hence this should be the smallest possible value in the response
+ variable.
}
\item{Upper}{
Numeric of length 1, it is the value \eqn{U} described below.
Any value of the linear model
\eqn{x_i^T \beta}{x_i^T beta} that
- is greater than this value is assigned this value.
- Hence this should be the largest possible value in the response variable.
+ is greater than this upperbound is assigned this value.
+ Hence this should be the largest possible value in the response
+ variable.
}
- \item{lmu, lsd}{
- Parameter link functions applied to the mean and
+ \item{lmu, lsd, emu, esd}{
+ Parameter link functions and extra arguments for the mean and
standard deviation parameters.
See \code{\link{Links}} for more choices.
The standard deviation is a positive quantity, therefore a log link
is its default.
}
- \item{emu, esd}{
- List. Extra argument for each of the links.
- See \code{earg} in \code{\link{Links}} for general information.
+ \item{imu, isd}{
+ See \code{\link{CommonVGAMffArguments}} for information.
+
+ }
+ \item{type.fitted}{
+ Type of fitted value returned.
+ The first choice is default and is the ordinary uncensored or
+ unbounded linear model.
+ If \code{"censored"} then the fitted values in the interval \eqn{[L, U]}.
+ If \code{"mean.obs"} then the mean of the observations is returned;
+ this is a doubly truncated normal distribution
+ augmented by point masses at the truncation points
+ (see \code{\link{dtobit}}).
+
}
- \item{method.init}{
+ \item{imethod}{
Initialization method. Either 1 or 2, this specifies
two methods for obtaining initial values for the parameters.
}
+ \item{nsimEIM}{
+ Used if nonstandard Tobit model.
+ See \code{\link{CommonVGAMffArguments}} for information.
+
+ }
\item{zero}{
An integer vector, containing the value 1 or 2. If so,
- the mean or standard deviation respectively are modelled as an intercept only.
+ the mean or standard deviation respectively are modelled
+ as an intercept-only.
Setting \code{zero = NULL} means both linear/additive predictors
are modelled as functions of the explanatory variables.
@@ -57,8 +80,8 @@ tobit(Lower = 0, Upper = Inf, lmu = "identity", lsd = "loge",
The Tobit model can be written
\deqn{y_i^* = x_i^T \beta + \varepsilon_i}{%
y_i^* = x_i^T beta + e_i}
- where the \eqn{e_i \sim N(0,\sigma^2)}{e_i ~ N(0,sigma^2)} independently and
- \eqn{i=1,\ldots,n}{i=1,...,n}.
+ where the \eqn{e_i \sim N(0,\sigma^2)}{e_i ~ N(0,sigma^2)}
+ independently and \eqn{i=1,\ldots,n}{i=1,...,n}.
However, we measure \eqn{y_i = y_i^*} only if \eqn{y_i^* > L} and
\eqn{y_i^* < U} for some
cutpoints \eqn{L} and \eqn{U}. Otherwise we let \eqn{y_i=L} or
@@ -66,66 +89,130 @@ tobit(Lower = 0, Upper = Inf, lmu = "identity", lsd = "loge",
The Tobit model is thus a multiple linear regression but with censored
responses if it is below or above certain cutpoints.
- The defaults for \code{Lower} and \code{Upper} correspond to the
- classical Tobit model. By default, the mean \eqn{x_i^T \beta}{x_i^T
- beta} is the first linear/additive predictor, and the log of the
- standard deviation is the second linear/additive predictor. The Fisher
- information matrix for uncensored data is diagonal.
- The fitted values are the estimates of \eqn{x_i^T \beta}{x_i^T beta}.
+
+ The defaults for \code{Lower} and \code{Upper} and
+ \code{lmu} correspond to the \emph{standard} Tobit model.
+ Then Fisher scoring is used, else simulated Fisher scoring.
+ By default, the mean \eqn{x_i^T \beta}{x_i^T beta} is
+ the first linear/additive predictor, and the log of
+ the standard deviation is the second linear/additive
+ predictor. The Fisher information matrix for uncensored
+ data is diagonal. The fitted values are the estimates
+ of \eqn{x_i^T \beta}{x_i^T beta}.
+
}
-%\section{Warning }{
+\section{Warning }{
+ Convergence is often slow. Setting \code{crit = "coeff"}
+ is recommended since premature convergence of the log-likelihood
+ is common.
+ Simulated Fisher scoring is implemented for the nonstandard
+ Tobit model. For this, the working weight matrices for
+ some observations are prone to not being positive-definite;
+ if so then some checking of the final model is recommended
+ and/or try inputting some initial values.
+
+
% The working weight matrices for most observations
% are not positive-definite. These responses would otherwise have a
% fitted value much less than the cutpoint.
-%}
+}
+
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
+
}
\references{
-Tobin, J. (1958)
-Estimation of relationships for limited dependent variables.
-\emph{Econometrica} \bold{26}, 24--36.
+ Tobin, J. (1958)
+ Estimation of relationships for limited dependent variables.
+ \emph{Econometrica} \bold{26}, 24--36.
+
+
}
\author{ Thomas W. Yee }
\note{
- The response must be univariate. If there is no censoring then
- \code{\link{normal1}} is recommended instead. Any value of the
- response less than \code{Lower} or greater than \code{Upper} will
- be assigned the value \code{Lower} and \code{Upper} respectively,
- and a warning will be issued.
- The fitted object has components \code{censoredL} and \code{censoredU}
- in the \code{extra} slot which specifies whether observations
- are censored in that direction.
+ The response can be a matrix. Then \code{Lower} and \code{Upper}
+ are recycled to the number of columns.
+ If there is no censoring then
+ \code{\link{normal1}} is recommended instead. Any value of the
+ response less than \code{Lower} or greater than \code{Upper} will
+ be assigned the value \code{Lower} and \code{Upper} respectively,
+ and a warning will be issued.
+ The fitted object has components \code{censoredL} and \code{censoredU}
+ in the \code{extra} slot which specifies whether observations
+ are censored in that direction.
+ The function \code{\link{cennormal1}} is an alternative
+ to \code{tobit()}.
+
}
\seealso{
- \code{\link{normal1}},
- \code{\link{cnormal1}}.
- \code{\link{dcnormal1}}.
+ \code{\link{rtobit}},
+ \code{\link{cennormal1}},
+ \code{\link{normal1}},
+ \code{\link{dcennormal1}},
+ \code{\link{posnormal1}},
+ \code{\link[stats:Normal]{rnorm}}.
+
+
}
\examples{
-tdata = data.frame(x = seq(-1, 1, len = (nn <- 1000)))
-foo = function(x) 1 + 4*x
-tdata = transform(tdata, ystar = foo(x) + rnorm(nn))
-Lower = 1; Upper = 4
-tdata = transform(tdata, y = pmax(ystar, Lower))
-tdata = transform(tdata, y = pmin(y, Upper))
-with(tdata, table(y == Lower | y == Upper)) # How many censored values?
-
-fit = vglm(y ~ x, tobit(Lower = Lower, Upper = Upper), tdata, trace = TRUE)
-table(fit at extra$censoredL)
-table(fit at extra$censoredU)
-coef(fit, matrix = TRUE)
-summary(fit)
-\dontrun{
-with(tdata, plot(x, y, main = "Tobit model", las=1))
-legend(-0.9, 3, c("Truth", "Estimate"), col=c("blue", "red"), lwd=2)
-with(tdata, lines(x, foo(x), col="blue", lwd=2))
-with(tdata, lines(x, fitted(fit), col="red", lwd=2, lty="dashed")) }
+# Here, fit1 is a standard Tobit model and fit2 is a nonstandard Tobit model
+Lower = 1; Upper = 4; set.seed(1) # For the nonstandard Tobit model
+tdata = data.frame(x2 = seq(-1, 1, len = (nn <- 100)))
+meanfun1 = function(x) 0 + 2*x
+meanfun2 = function(x) 2 + 2*x
+tdata = transform(tdata,
+ y1 = rtobit(nn, mean = meanfun1(x2)), # Standard Tobit model
+ y2 = rtobit(nn, mean = meanfun2(x2), Lower = Lower, Upper = Upper))
+with(tdata, table(y1 == 0)) # How many censored values?
+with(tdata, table(y2 == Lower | y2 == Upper)) # How many censored values?
+with(tdata, table(attr(y2, "cenL")))
+with(tdata, table(attr(y2, "cenU")))
+
+fit1 = vglm(y1 ~ x2, tobit, tdata, trace = TRUE,
+ crit = "coeff") # crit = "coeff" is recommended
+coef(fit1, matrix = TRUE)
+summary(fit1)
+
+fit2 = vglm(y2 ~ x2, tobit(Lower = Lower, Upper = Upper, type.f = "cens"),
+ tdata, crit = "coeff", trace = TRUE) # ditto
+table(fit2 at extra$censoredL)
+table(fit2 at extra$censoredU)
+coef(fit2, matrix = TRUE)
+
+\dontrun{ # Plot the results
+par(mfrow = c(2, 1))
+plot(y1 ~ x2, tdata, las = 1, main = "Standard Tobit model",
+ col = as.numeric(attr(y1, "cenL")) + 3,
+ pch = as.numeric(attr(y1, "cenL")) + 1)
+legend(x = "topleft", leg = c("censored", "uncensored"),
+ pch = c(2, 1), col = c("blue", "green"))
+legend(-1.0, 2.5, c("Truth", "Estimate", "Naive"),
+ col = c("purple", "orange", "black"), lwd = 2, lty = c(1, 2, 2))
+lines(meanfun1(x2) ~ x2, tdata, col = "purple", lwd = 2)
+lines(fitted(fit1) ~ x2, tdata, col = "orange", lwd = 2, lty = 2)
+lines(fitted(lm(y1 ~ x2, tdata)) ~ x2, tdata, col = "black",
+ lty = 2, lwd = 2) # This is simplest but wrong!
+
+plot(y2 ~ x2, tdata, las = 1, main = "Tobit model",
+ col = as.numeric(attr(y2, "cenL")) + 3 +
+ as.numeric(attr(y2, "cenU")),
+ pch = as.numeric(attr(y2, "cenL")) + 1 +
+ as.numeric(attr(y2, "cenU")))
+legend(x = "topleft", leg = c("censored", "uncensored"),
+ pch = c(2, 1), col = c("blue", "green"))
+legend(-1.0, 3.5, c("Truth", "Estimate", "Naive"),
+ col = c("purple", "orange", "black"), lwd = 2, lty = c(1, 2, 2))
+lines(meanfun2(x2) ~ x2, tdata, col = "purple", lwd = 2)
+lines(fitted(fit2) ~ x2, tdata, col = "orange", lwd = 2, lty = 2)
+lines(fitted(lm(y2 ~ x2, tdata)) ~ x2, tdata, col = "black",
+ lty = 2, lwd = 2) # This is simplest but wrong!
+}
}
\keyword{models}
\keyword{regression}
diff --git a/man/tobitUC.Rd b/man/tobitUC.Rd
new file mode 100644
index 0000000..710e474
--- /dev/null
+++ b/man/tobitUC.Rd
@@ -0,0 +1,90 @@
+\name{Tobit}
+\alias{Tobit}
+\alias{dtobit}
+\alias{ptobit}
+\alias{qtobit}
+\alias{rtobit}
+\title{The Tobit Distribution}
+\description{
+ Density, distribution function, quantile function and random
+ generation for the Tobit model.
+
+}
+\usage{
+dtobit(x, mean = 0, sd = 1, Lower = 0, Upper = Inf, log = FALSE)
+ptobit(q, mean = 0, sd = 1, Lower = 0, Upper = Inf,
+ lower.tail = TRUE, log.p = FALSE)
+qtobit(p, mean = 0, sd = 1, Lower = 0, Upper = Inf)
+rtobit(n, mean = 0, sd = 1, Lower = 0, Upper = Inf)
+}
+\arguments{
+ \item{x, q}{vector of quantiles.}
+ \item{p}{vector of probabilities.}
+ \item{n}{number of observations.
+ If \code{length(n) > 1} then the length is taken to be the number required.
+
+ }
+ \item{Lower, Upper}{vector of lower and upper
+ thresholds.
+
+ }
+ \item{mean, sd, lower.tail, log, log.p}{
+ see \code{\link[stats:Normal]{rnorm}}.
+
+ }
+
+}
+\value{
+ \code{dtobit} gives the density,
+ \code{ptobit} gives the distribution function,
+ \code{qtobit} gives the quantile function, and
+ \code{rtobit} generates random deviates.
+
+}
+\author{ T. W. Yee }
+\details{
+ See \code{\link{tobit}}, the \pkg{VGAM} family function
+ for estimating the parameters,
+ for details.
+ Note that the density at \code{Lower} and \code{Upper} is the
+ value of \code{\link[stats:Normal]{dnorm}} evaluated there plus
+ the area to the left/right of that point too.
+ Thus there are two spikes; see the example below.
+
+}
+%\note{
+
+%}
+\seealso{
+ \code{\link{tobit}}.
+
+}
+\examples{
+\dontrun{ m = 0.5; x = seq(-2, 4, len = 501)
+Lower = -1; Upper = 2.5
+plot(x, ptobit(x, m = m, Lower = Lower, Upper = Upper),
+ type = "l", ylim = 0:1, las = 1, col = "orange",
+ ylab = paste("ptobit(m = ", m, ", sd = 1, Lower =", Lower,
+ ", Upper =", Upper, ")"),
+ main = "Orange is cumulative distribution function; blue is density",
+ sub = "Purple lines are the 10,20,...,90 percentiles")
+abline(h = 0)
+lines(x, dtobit(x, m = m, Lower = Lower, Upper = Upper), col = "blue")
+
+probs = seq(0.1, 0.9, by = 0.1)
+Q = qtobit(probs, m = m, Lower = Lower, Upper = Upper)
+lines(Q, ptobit(Q, m = m, Lower = Lower, Upper = Upper),
+ col = "purple", lty = "dashed", type = "h")
+lines(Q, dtobit(Q, m = m, Lower = Lower, Upper = Upper),
+ col = "darkgreen", lty = "dashed", type = "h")
+abline(h = probs, col = "purple", lty = "dashed")
+max(abs(ptobit(Q, m = m, Lower = Lower, Upper = Upper) - probs)) # Should be 0
+
+endpts = c(Lower, Upper) # Endpoints have a spike
+lines(endpts, dtobit(endpts, m = m, Lower = Lower, Upper = Upper),
+ col = "blue", lwd = 2, type = "h")
+}
+}
+\keyword{distribution}
+
+
diff --git a/man/tparetoUC.Rd b/man/tparetoUC.Rd
index f050b7e..b96c16c 100644
--- a/man/tparetoUC.Rd
+++ b/man/tparetoUC.Rd
@@ -12,7 +12,7 @@
}
\usage{
-dtpareto(x, lower, upper, shape)
+dtpareto(x, lower, upper, shape, log = FALSE)
ptpareto(q, lower, upper, shape)
qtpareto(p, lower, upper, shape)
rtpareto(n, lower, upper, shape)
@@ -20,17 +20,19 @@ rtpareto(n, lower, upper, shape)
\arguments{
\item{x, q}{vector of quantiles.}
\item{p}{vector of probabilities.}
- \item{n}{number of observations. Must be a single positive integer. }
+ \item{n, log}{Same meaning as \code{\link[stats:Uniform]{runif}}. }
\item{lower, upper, shape}{
the lower, upper and shape (\eqn{k}) parameters.
If necessary, values are recycled.
}
+
}
\value{
\code{dtpareto} gives the density,
\code{ptpareto} gives the distribution function,
\code{qtpareto} gives the quantile function, and
\code{rtpareto} generates random deviates.
+
}
\references{
Aban, I. B., Meerschaert, M. M. and Panorska, A. K. (2006)
@@ -39,6 +41,7 @@ rtpareto(n, lower, upper, shape)
\bold{101}(473),
270--277.
+
}
\author{ T. W. Yee }
\details{
@@ -47,6 +50,7 @@ rtpareto(n, lower, upper, shape)
for the formula of the probability density function and the
range restrictions imposed on the parameters.
+
}
%%\note{
%% The truncated Pareto distribution is
@@ -54,24 +58,27 @@ rtpareto(n, lower, upper, shape)
\seealso{
\code{\link{tpareto1}}.
+
}
-\examples{
-lower = 3; upper = 8; k = exp(0.5)
-\dontrun{
-x = seq(lower, upper, len=200)
-plot(x, dtpareto(x, lo=lower, up=upper, shape=k), type="l",
- main="Truncated Pareto density split into 10 equal areas")
-abline(h=0, col="blue", lty=2)
-qq = qtpareto(seq(0.1,0.9,by=0.1),lo=lower, up=upper,shape=k)
-lines(qq, dtpareto(qq, lo=lower, up=upper, shape=k),
- col="purple", lty=3, type="h")
+\examples{ lower = 3; upper = 8; kay = exp(0.5)
+\dontrun{ xx = seq(lower - 0.5, upper + 0.5, len = 401)
+plot(xx, dtpareto(xx, low = lower, upp = upper, shape = kay),
+ main = "Truncated Pareto density split into 10 equal areas",
+ type = "l", ylim = 0:1, xlab = "x")
+abline(h = 0, col = "blue", lty = 2)
+qq = qtpareto(seq(0.1, 0.9, by = 0.1), low = lower, upp = upper, shape = kay)
+lines(qq, dtpareto(qq, low = lower, upp = upper, shape = kay),
+ col = "purple", lty = 3, type = "h")
+lines(xx, ptpareto(xx, low = lower, upp = upper, shape = kay), col = "orange")
}
-pp = seq(0.1,0.9,by=0.1)
-qq = qtpareto(pp, lo=lower, up=upper, shape=k)
-ptpareto(qq, lo=lower, up=upper, shape=k)
-qtpareto(ptpareto(qq, lo=lower, up=upper, shape=k),
- lo=lower, up=upper, shape=k) - qq # Should be all 0
+pp = seq(0.1, 0.9,by = 0.1)
+qq = qtpareto(pp, low = lower, upp = upper, shape = kay)
+
+ptpareto(qq, low = lower, upp = upper, shape = kay)
+qtpareto(ptpareto(qq, low = lower, upp = upper, shape = kay),
+ low = lower, upp = upper, shape = kay) - qq # Should be all 0
}
\keyword{distribution}
+
diff --git a/man/ugss.Rd b/man/ugss.Rd
new file mode 100644
index 0000000..05169e1
--- /dev/null
+++ b/man/ugss.Rd
@@ -0,0 +1,98 @@
+\name{ugss}
+\alias{ugss}
+\docType{data}
+\title{
+ Undergraduate Statistics Students Lifestyle Questionnaire
+
+%% ~~ data name/kind ... ~~
+}
+\description{
+ About 800 students studying undergraduate statistics
+ were asked many lifestyle questions.
+
+%% ~~ A concise (1-5 lines) description of the dataset. ~~
+}
+\usage{data(ugss)}
+\format{
+ A data frame with 804 observations on the following 29 variables.
+\describe{
+ \item{\code{sex}}{Gender, a factor, (female or male) }
+ \item{\code{age}}{age in years, a numeric vector}
+ \item{\code{eyes}}{eye colour, a factor,
+ (blue, brown, green, hazel or other)}
+ \item{\code{piercings}}{Number of body piercings, a numeric vector}
+ \item{\code{pierced}}{Any body piercings? a factor, (Yes or No)}
+ \item{\code{tattoos}}{Number of tattoos, a numeric vector}
+ \item{\code{tattooed}}{Any tattoos? a factor, (Yes or No) }
+ \item{\code{glasses}}{Wears glasses etc.? a factor, (Yes or No)}
+ \item{\code{sleep}}{Average number of hours of sleep per night,
+ a numeric vector}
+ \item{\code{study}}{Average number of hours of study per week,
+ a numeric vector}
+ \item{\code{tv}}{Average number of hours watching TV per week,
+ a numeric vector}
+ \item{\code{movies}}{Number of movies seen at a cinema during the last 3 months,
+ a numeric vector}
+ \item{\code{movies3m}}{Seen movies in last 3 months?
+ a factor, (Yes or No)}
+ \item{\code{sport}}{Favourite sport, a factor,
+ about 19 of them }
+ \item{\code{entertainment}}{Favourite entertainment, a factor,
+ about 15 of them }
+ \item{\code{fruit}}{Favourite fruit a factor,
+ about 13 of them }
+ \item{\code{income}}{Average income during semester per week,
+ a numeric vector }
+ \item{\code{rent}}{Amount spent on rent or room and board per week,
+ a numeric vector }
+ \item{\code{clothes}}{Average amount spent on clothes per month,
+ a numeric vector }
+ \item{\code{hair}}{Average cost to get a hair-cut,
+ a numeric vector }
+ \item{\code{tobacco}}{Average amount spent on tobacco per week,
+ a numeric vector}
+ \item{\code{smokes}}{Smokes? a factor, (Yes or No) }
+ \item{\code{alcohol}}{Average amount spent on alcohol per week,
+ a numeric vector }
+ \item{\code{purchase.alcohol}}{Purchases alcohol? a factor, (Yes or No) }
+ \item{\code{sendtxt}}{Average number text messages sent per day,
+ a numeric vector.}
+ \item{\code{receivetxt}}{Average number text messages received per day,
+ a numeric vector.}
+ \item{\code{txts}}{Uses text messaging? a factor, (Yes or No) }
+ \item{\code{country}}{Country of birth, a factor,
+ about 54 of them }
+ \item{\code{status}}{Student status, a factor,
+ (International, NZ.Citizen, NZ.Resident) }
+ }
+}
+%%\format{
+%% The format is:
+%% chr "ugss"
+%%}
+\details{
+ This data was collected online and anonymously in 2010.
+ The respondents were students studying an undergraduate statistics
+ course at a New Zealand university.
+ Possibly there are duplicate students (due to failing and
+ re-enrolling).
+ All monies are in NZD.
+ Note the data has had minimal checking.
+ Most numerical variables tend to have measurement error, and all of
+ them happen to be all integer-valued.
+
+
+%% ~~ If necessary, more details than the __description__ above
+}
+
+
+%%\source{
+%% ~~ reference to a publication or URL from which the data were obtained ~~
+%%}
+%%\references{
+%% ~~ possibly secondary sources and usages ~~
+%%}
+\examples{
+summary(ugss)
+}
+\keyword{datasets}
diff --git a/man/undocumented-methods.Rd b/man/undocumented-methods.Rd
index cf1c936..487d988 100644
--- a/man/undocumented-methods.Rd
+++ b/man/undocumented-methods.Rd
@@ -91,6 +91,8 @@
\alias{guplot,vlm-method}
%\alias{model.frame,ANY-method}
\alias{model.frame,vlm-method}
+\alias{plot,rcam0,ANY-method}
+\alias{plot,rcam,ANY-method}
\alias{plot,cao,ANY-method}
\alias{plot,vlm,ANY-method}
\alias{plot,vglm,ANY-method}
@@ -210,6 +212,7 @@
\alias{summary,cao-method}
\alias{summary,qrrvglm-method}
\alias{summary,rcam-method}
+\alias{summary,rcam0-method}
\alias{summary,rrvglm-method}
\alias{summary,vgam-method}
\alias{summary,vglm-method}
diff --git a/man/usagrain.Rd b/man/usagrain.Rd
deleted file mode 100644
index 88f76a8..0000000
--- a/man/usagrain.Rd
+++ /dev/null
@@ -1,42 +0,0 @@
-\name{usagrain}
-\alias{usagrain}
-\docType{data}
-\title{USA Grain Prices Data}
-\description{
-A 4-column matrix.
-
-}
-\usage{data(usagrain)}
-\format{
- The columns are:
- \describe{
- \item{wheat.flour}{numeric}
- \item{corn}{numeric}
- \item{wheat}{numeric}
- \item{rye}{numeric}
- }
-}
-\details{
-Monthly averages of grain prices
-in the United States for wheat flour, corn, wheat, and rye for the
-period January 1961 through October 1972.
-The units are US dollars per 100 pound sack for wheat flour, and
-per bushel for corn, wheat and rye.
-}
-\source{
-Ahn and Reinsel (1988)
-}
-\references{
-Ahn, S. K and Reinsel, G. C. (1988)
-Nested reduced-rank autoregressive models for multiple time series.
-\emph{Journal of the American Statistical Association},
-\bold{83}, 849--856.
-}
-\examples{
-cgrain = scale(usagrain, scale=FALSE) # Center the time series only
-fit = vglm(cgrain ~ 1, rrar(Rank=c(4,1)),
- eps=1e-3, step=0.5, trace=TRUE, maxit=40)
-summary(fit)
-}
-\keyword{datasets}
-
diff --git a/man/uscrime.Rd b/man/uscrime.Rd
new file mode 100644
index 0000000..8e7a2f3
--- /dev/null
+++ b/man/uscrime.Rd
@@ -0,0 +1,81 @@
+\name{uscrime}
+\alias{uscrime}
+\docType{data}
+\title{
+Estimated Crime in 2009 in USA
+
+}
+\description{
+Crime totals and rates, cross-classified by US state, during 2009.
+
+}
+\usage{data(uscrime)}
+\format{
+ A data frame with 50 observations on the following 22 variables.
+ \describe{
+ \item{\code{State}}{a character vector. White spaces have been
+ replaced by underscores. }
+ \item{\code{Population}}{a numeric vector}
+ \item{\code{ViolentCrimeTotal}}{a numeric vector}
+ \item{\code{Murder}}{a numeric vector}
+ \item{\code{Rape}}{a numeric vector}
+ \item{\code{Robbery}}{a numeric vector}
+ \item{\code{Assault}}{a numeric vector}
+ \item{\code{PropertyCrimeTotal}}{a numeric vector}
+ \item{\code{Burglary}}{a numeric vector}
+ \item{\code{LarcenyTheft}}{a numeric vector}
+ \item{\code{MotorVehicleTheft}}{a numeric vector}
+ \item{\code{ViolentCrimeRate}}{a numeric vector}
+ \item{\code{MurderRate}}{a numeric vector}
+ \item{\code{RapeRate}}{a numeric vector}
+ \item{\code{RobberyRate}}{a numeric vector}
+ \item{\code{AssaultRate}}{a numeric vector}
+ \item{\code{PropertyCrimeRate}}{a numeric vector}
+ \item{\code{BurglaryRate}}{a numeric vector}
+ \item{\code{LarcenyTheftRate}}{a numeric vector}
+ \item{\code{MotorVehicleTheftRate}}{a numeric vector}
+ \item{\code{stateNumber}}{a numeric vector, running from 1 to 50.}
+ \item{\code{abbrev}}{State name as a character vector}
+ }
+}
+\details{
+ Each row is a state of the United States of America.
+ The first half of the columns tend to be totals,
+ and the second half are crime rates per 100,000 population.
+
+
+ The data frame was downloaded as a \code{.csv} file and edited.
+ The full column names are:
+ State, Population, Violent crime total, Murder and nonnegligent
+ Manslaughter, Forcible rape, Robbery, Aggravated assault, Property
+ crime total, Burglary, Larceny-theft, Motor vehicle theft, Violent
+ Crime rate, Murder and nonnegligent manslaughter rate, Forcible
+ rape rate, Robbery rate, Aggravated assault rate, Property crime
+ rate, Burglary rate, Larceny-theft rate, Motor vehicle theft rate,
+ state Number, abbreviation.
+ Technical details governing the data set are given in the URL.
+
+
+
+%% ~~ If necessary, more details than the __description__ above ~~
+}
+\source{
+ \url{http://www.ucrdatatool.gov},
+ \url{http://www.ucrdatatool.gov/Search/Crime/State/RunCrimeOneYearofData.cfm}
+
+}
+%%\references{
+%% ~~ possibly secondary sources and usages ~~
+%%}
+\examples{
+\dontrun{ # Louisiana is the one outlier
+plot(MurderRate ~ stateNumber, uscrime,
+ axes = FALSE, type = "h", col = 1:6,
+ main = "USA murder rates in 2009 (per 100,000 population)")
+axis(1, with(uscrime, abbrev), at = with(uscrime, stateNumber),
+ col = 1:6, col.tick = 1:6, cex.lab = 0.5)
+axis(2) }
+tail(uscrime[ sort.list(with(uscrime, MurderRate)), ])
+}
+\keyword{datasets}
+% data(uscrime)
diff --git a/man/usgrain.Rd b/man/usgrain.Rd
new file mode 100644
index 0000000..33afbfb
--- /dev/null
+++ b/man/usgrain.Rd
@@ -0,0 +1,48 @@
+\name{usgrain}
+\alias{usgrain}
+\docType{data}
+\title{Grain Prices Data in USA }
+\description{
+A 4-column matrix.
+
+}
+\usage{data(usgrain)}
+\format{
+ The columns are:
+ \describe{
+ \item{wheat.flour}{numeric}
+ \item{corn}{numeric}
+ \item{wheat}{numeric}
+ \item{rye}{numeric}
+ }
+}
+\details{
+ Monthly averages of grain prices
+ in the United States for wheat flour, corn, wheat, and rye for the
+ period January 1961 through October 1972.
+ The units are US dollars per 100 pound sack for wheat flour, and
+ per bushel for corn, wheat and rye.
+
+
+}
+\source{
+Ahn and Reinsel (1988).
+
+
+}
+\references{
+
+Ahn, S. K and Reinsel, G. C. (1988)
+Nested reduced-rank autoregressive models for multiple time series.
+\emph{Journal of the American Statistical Association},
+\bold{83}, 849--856.
+
+}
+\examples{
+cgrain = scale(usgrain, scale = FALSE) # Center the time series only
+fit = vglm(cgrain ~ 1, rrar(Rank = c(4, 1)),
+ eps = 1e-3, step = 0.5, trace = TRUE, maxit = 40)
+summary(fit)
+}
+\keyword{datasets}
+
diff --git a/man/venice.Rd b/man/venice.Rd
index 0f990fc..2e2ed0f 100644
--- a/man/venice.Rd
+++ b/man/venice.Rd
@@ -1,64 +1,142 @@
\name{venice}
\alias{venice}
+\alias{venice90}
\docType{data}
\title{ Venice Maximum Sea Levels Data}
\description{
- The maximum heights of sea levels recorded at Venice, Italy, between
- 1931 and 1981.
+ Some sea levels data sets recorded at Venice, Italy.
+
+}
+\usage{
+data(venice)
+data(venice90)
}
-\usage{data(venice)}
\format{
- A data frame with 51 observations on the following 11 variables.
+ \code{venice} is a data frame with 51 observations on the following 11
+ variables.
+ It concerns the maximum heights of sea levels between
+ 1931 and 1981.
\describe{
\item{year}{a numeric vector. }
- \item{r1}{a numeric vector; the highest recorded value. }
- \item{r2,r3,r4,r5,r6,r7,r8,r9,r10}{numeric vectors; the second highest recorded value
- down to the tenth highest recorded value. }
+ \item{r1,r2,r3,r4,r5,r6,r7,r8,r9,r10}{numeric vectors;
+ \code{r1} is the highest recorded value,
+ \code{r2} is the second highest recorded value, etc.
+
+ }
+ }
+
+ \code{venice90} is a data frame with 455 observations on the following
+ 7 variables.
+ \describe{
+ \item{year, month, day, hour }{numeric vectors;
+ actual time of the recording. }
+ \item{sealevel}{numeric; sea level. }
+
+ \item{ohour}{numeric;
+ number of hours since the midnight of 31 Dec 1939 and 1 Jan 1940.
+
}
+
+ \item{Year}{numeric vector;
+ approximate year as a real number.
+ The formula is \code{start.year + ohour / (365.26 * 24)}
+ where \code{start.year} is 1940.
+ One can treat \code{Year} as continuous whereas
+ \code{year} can be treated as both continuous and discrete.
+
+ }
+
+
+ }
+
}
+
+
\details{
- The units are cm.
- In 1935 only the top six values were recorded.
+ Sea levels are in cm.
+ For \code{venice90}, the value 0 corresponds to a fixed
+ reference point (e.g., the mean sea level in 1897 at an old
+ palace of Venice). Clearly since the relative (perceived)
+ mean sea level has been increasing in trend over time (more
+ than an overall 0.4 m increase by 2010), therefore the value 0 is
+ (now) a very low and unusual measurement.
+
+
+ For \code{venice}, in 1935 only the top six values were recorded.
+
+
+ For \code{venice90}, this is a subset of a data set provided by
+ Paolo Pirazzoli consisting of hourly sea levels from 1940 to 2009.
+ Values greater than 90 cm were extracted, and then declustered
+ (each cluster provides no more than one value, and
+ each value is at least 24 hours apart).
+ Thus the values are more likely to be independent.
+ Of the original \code{(2009-1940+1)*365.26*24} values
+ about 7 percent of these comprise \code{venice90}.
+
+
+ Yet to do: check for consistency between the data sets.
+ Some external data sets elsewhere have some extremes recorded
+ at times not exactly on the hour.
+
+
}
\source{
-Pirazzoli, P. (1982)
-Maree estreme a Venezia (periodo 1872--1981).
-\emph{Acqua Aria}, \bold{10}, 1023--1039.
+
+
+ Pirazzoli, P. (1982)
+ Maree estreme a Venezia (periodo 1872--1981).
+ \emph{Acqua Aria}, \bold{10}, 1023--1039.
+
+
+ Thanks to Paolo Pirazzoli and Alberto Tomasin for the \code{venice90}
+ data.
+
}
\references{
+
+
Smith, R. L. (1986)
Extreme value theory based on the \emph{r} largest annual events.
\emph{Journal of Hydrology},
\bold{86}, 27--43.
+
+
+Battistin, D. and Canestrelli, P. (2006).
+\emph{La serie storica delle maree a Venezia, 1872--2004} (in Italian),
+Comune di Venezia.
+Istituzione Centro Previsione e Segnalazioni Maree.
- Rosen, O. and Cohen, A. (1996)
- Extreme Percentile Regression.
- In: Haerdle, W. and Schimek, M. G. (eds.)
- \emph{Statistical Theory and Computational Aspects of
- Smoothing: Proceedings of the COMPSTAT '94 Satellite
- Meeting held in Semmering, Austria, 27--28 August 1994},
- Physica-Verlag: Heidelberg,
- pp.200--214.
}
-\examples{
-\dontrun{
-matplot(venice[["year"]], venice[,-1], xlab="Year", ylab="Sea level (cm)")
+\seealso{
+ \code{\link{guplot}},
+ \code{\link{gev}},
+ \code{\link{gpd}}.
+
}
-y = as.matrix(venice[,paste("r",1:10,sep="")])
-fit1 = vgam(y ~ s(year, df=3), gumbel(R=365, mpv=TRUE),
- data=venice, trace=TRUE, na.action=na.pass)
+
+\examples{
+\dontrun{ matplot(venice[["year"]], venice[, -1], xlab = "Year",
+ ylab = "Sea level (cm)", type = "l") }
+
+ymat = as.matrix(venice[, paste("r", 1:10, sep = "")])
+fit1 = vgam(ymat ~ s(year, df = 3), gumbel(R = 365, mpv = TRUE),
+ data = venice, trace = TRUE, na.action = na.pass)
head(fitted(fit1))
-\dontrun{
-par(mfrow=c(2,1), xpd=TRUE)
-plot(fit1, se=TRUE, lcol="blue", llwd=2, slty="dashed")
+\dontrun{ par(mfrow = c(2, 1), xpd = TRUE)
+plot(fit1, se = TRUE, lcol = "blue", llwd = 2, slty = "dashed")
-par(mfrow=c(1,1), bty="l", xpd=TRUE, las=1)
-qtplot(fit1, mpv=TRUE, lcol=c(1,2,5), tcol=c(1,2,5),
- llwd=2, pcol="blue", tadj=0.1)
-}
+par(mfrow = c(1,1), bty = "l", xpd = TRUE, las = 1)
+qtplot(fit1, mpv = TRUE, lcol = c(1, 2, 5), tcol = c(1, 2, 5),
+ llwd = 2, pcol = "blue", tadj = 0.1) }
+
+plot(sealevel ~ Year, data = venice90, type = "h", col = "blue")
+summary(venice90)
+dim(venice90)
+round(100 * nrow(venice90) / ((2009-1940+1)*365.26*24), dig = 3)
}
\keyword{datasets}
diff --git a/man/vgam-class.Rd b/man/vgam-class.Rd
index 11ca00f..aab4582 100644
--- a/man/vgam-class.Rd
+++ b/man/vgam-class.Rd
@@ -113,7 +113,7 @@ used by \code{\link{plotvgam}}; the plotting parameters
may be put here.
}
\item{\code{prior.weights}:}{Object of class
-\code{"numeric"}, from class \code{ "vlm"}
+\code{"matrix"}, from class \code{ "vlm"}
holding the initially supplied weights.
}
\item{\code{qr}:}{Object of class \code{"list"},
diff --git a/man/vgam.control.Rd b/man/vgam.control.Rd
index 5768c5e..81b0813 100644
--- a/man/vgam.control.Rd
+++ b/man/vgam.control.Rd
@@ -173,9 +173,9 @@ Vector generalized additive models.
\examples{
data(pneumo)
-pneumo = transform(pneumo, let=log(exposure.time))
-vgam(cbind(normal, mild, severe) ~ s(let, df=3), multinomial,
- pneumo, trace=TRUE, eps=1e-4, maxit=10)
+pneumo = transform(pneumo, let = log(exposure.time))
+vgam(cbind(normal, mild, severe) ~ s(let, df = 3), multinomial,
+ pneumo, trace = TRUE, eps = 1e-4, maxit = 10)
}
\keyword{models}
\keyword{regression}
diff --git a/man/vglm-class.Rd b/man/vglm-class.Rd
index cc36354..e903e78 100644
--- a/man/vglm-class.Rd
+++ b/man/vglm-class.Rd
@@ -101,7 +101,7 @@ used by \code{\link{plotvgam}}; the plotting parameters
may be put here.
}
\item{\code{prior.weights}:}{Object of class
-\code{"numeric"}, from class \code{ "vlm"}
+\code{"matrix"}, from class \code{ "vlm"}
holding the initially supplied weights.
}
\item{\code{qr}:}{Object of class \code{"list"},
diff --git a/man/vglm.control.Rd b/man/vglm.control.Rd
index bebbb7a..b4f2625 100644
--- a/man/vglm.control.Rd
+++ b/man/vglm.control.Rd
@@ -8,7 +8,7 @@
}
\usage{
-vglm.control(checkwz=TRUE, criterion = names(.min.criterion.VGAM),
+vglm.control(checkwz = TRUE, criterion = names(.min.criterion.VGAM),
epsilon = 1e-07, half.stepsizing = TRUE,
maxit = 30, stepsize = 1, save.weight = FALSE,
trace = FALSE, wzepsilon = .Machine$double.eps^0.75,
@@ -178,9 +178,9 @@ These are handled using the \code{xij} argument.
\examples{
# Example 1.
-pneumo = transform(pneumo, let=log(exposure.time))
-vglm(cbind(normal,mild,severe) ~ let, multinomial, data=pneumo,
- crit="coef", step=0.5, trace=TRUE, eps=1e-8, maxit=40)
+pneumo = transform(pneumo, let = log(exposure.time))
+vglm(cbind(normal, mild, severe) ~ let, multinomial, data = pneumo,
+ crit = "coef", step = 0.5, trace = TRUE, eps = 1e-8, maxit = 40)
# Example 2. The use of the xij argument (simple case).
diff --git a/man/vonmises.Rd b/man/vonmises.Rd
index d351b87..8fca26f 100644
--- a/man/vonmises.Rd
+++ b/man/vonmises.Rd
@@ -10,7 +10,7 @@
vonmises(llocation="elogit", lscale="loge",
elocation=if(llocation=="elogit") list(min=0, max=2*pi)
else list(), escale=list(), ilocation=NULL,
- iscale=NULL, method.init=1, zero=NULL)
+ iscale=NULL, imethod=1, zero=NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -29,18 +29,18 @@ vonmises(llocation="elogit", lscale="loge",
\item{ilocation}{
Initial value for the location \eqn{a} parameter.
By default, an initial value is chosen internally using
- \code{method.init}. Assigning a value will override
- the argument \code{method.init}.
+ \code{imethod}. Assigning a value will override
+ the argument \code{imethod}.
}
\item{iscale}{
Initial value for the scale \eqn{k} parameter.
By default, an initial value is chosen internally using
- \code{method.init}. Assigning a value will override
- the argument \code{method.init}.
+ \code{imethod}. Assigning a value will override
+ the argument \code{imethod}.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method. If failure to converge occurs
try the other value, or else specify a value for
diff --git a/man/weibull.Rd b/man/weibull.Rd
index 9afa1a2..3951339 100644
--- a/man/weibull.Rd
+++ b/man/weibull.Rd
@@ -2,6 +2,7 @@
\alias{weibull}
%\alias{weibullff}
%\alias{weibull.lsh}
+%\alias{weibull3}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Weibull Distribution Family Function }
\description{
@@ -12,7 +13,7 @@
\usage{
weibull(lshape = "loge", lscale = "loge",
eshape = list(), escale = list(),
- ishape = NULL, iscale = NULL, nrfs = 1, method.init = 1, zero = 2)
+ ishape = NULL, iscale = NULL, nrfs = 1, imethod = 1, zero = 2)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -42,9 +43,11 @@ weibull(lshape = "loge", lscale = "loge",
positive-definite working weights.
}
- \item{method.init}{
+ \item{imethod}{
Initialization method used if there are censored observations.
Currently only the values 1 and 2 are allowed.
+
+
}
\item{zero}{
An integer specifying which linear/additive predictor is to be modelled
@@ -91,6 +94,7 @@ weibull(lshape = "loge", lscale = "loge",
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
\references{
Kleiber, C. and Kotz, S. (2003)
@@ -103,6 +107,12 @@ Johnson, N. L. and Kotz, S. and Balakrishnan, N. (1994)
2nd edition, Volume 1, New York: Wiley.
+Rinne, Horst. (2009)
+\emph{The Weibull Distribution: A Handbook}.
+Boca Raton, FL, USA: CRC Press.
+
+
+
Gupta, R. D. and Kundu, D. (2006)
On the comparison of Fisher information of the
Weibull and GE distributions,
@@ -111,6 +121,19 @@ Weibull and GE distributions,
3130--3144.
+ Smith, R. L. (1985)
+ Maximum likelihood estimation in a class of nonregular cases.
+ \emph{Biometrika}, \bold{72}, 67--90.
+
+
+ Smith, R. L. and Naylor, J. C. (1987)
+ A comparison of maximum likelihood and Bayesian estimators
+ for the three-parameter Weibull distribution.
+ \emph{Applied Statistics}, \bold{36}, 358--369.
+
+
+
+
}
\author{ T. W. Yee }
\note{
@@ -124,6 +147,15 @@ Weibull and GE distributions,
\eqn{1/Y} where \eqn{Y} has a Weibull(\eqn{a,b}) distribution, is
known as the log-Gompertz distribution.
+
+ There are problems implementing the three-parameter Weibull
+ distribution. These are because
+ the classical regularity conditions for the
+ asymptotic properties of the MLEs are not satisfied because the
+ support of the distribution depends on one of the parameters.
+
+
+
}
\section{Warning}{
This function is under development to handle other censoring situations.
@@ -143,6 +175,8 @@ Weibull and GE distributions,
\code{\link{gev}},
\code{\link{lognormal}},
\code{\link{expexp}}.
+
+
}
\examples{
# Complete data
diff --git a/man/zanegbinUC.Rd b/man/zanegbinUC.Rd
index 3afbb52..ced39b5 100644
--- a/man/zanegbinUC.Rd
+++ b/man/zanegbinUC.Rd
@@ -31,7 +31,7 @@ rzanegbin(n, p0, size, prob = NULL, munb = NULL)
}
\item{p0}{
Probability of zero, called \eqn{p0}.
- The default value of \code{p0=0} corresponds
+ The default value of \code{p0 = 0} corresponds
to the response having a positive negative binomial distribution.
}
@@ -39,7 +39,7 @@ rzanegbin(n, p0, size, prob = NULL, munb = NULL)
\details{
The probability function of \eqn{Y} is 0 with probability \code{p0},
else a positive
- \eqn{negative binomial(\mu_{nb}, size)}{negative binomial(munb, size)}
+ negative binomial(\eqn{\mu_{nb}}{munb}, size)
distribution.
}
@@ -54,7 +54,7 @@ rzanegbin(n, p0, size, prob = NULL, munb = NULL)
\author{ Thomas W. Yee }
\note{
The argument \code{p0} is recycled to the required length, and
- must have values which lie in the interval [0,1].
+ must have values which lie in the interval \eqn{[0,1]}.
}
@@ -65,17 +65,16 @@ rzanegbin(n, p0, size, prob = NULL, munb = NULL)
}
\examples{
munb <- 3; size <- 4; p0 <- 0.3; x <- (-1):7
-(ii <- dzanegbin(x, p0 = p0, munb = munb, size = size))
- table(rzanegbin(100, p0 = p0, munb = munb, size = size))
+dzanegbin(x, p0 = p0, munb = munb, size = size)
+table(rzanegbin(100, p0 = p0, munb = munb, size = size))
-\dontrun{
-x = 0:10
+\dontrun{ x = 0:10
barplot(rbind(dzanegbin(x, p0 = p0, munb = munb, size = size),
dnbinom(x, mu = munb, size = size)),
- beside = TRUE, col = c("blue","green"), cex.main=0.7, las=1,
+ beside = TRUE, col = c("blue","green"), cex.main = 0.7, las = 1,
ylab = "Probability",names.arg = as.character(x),
- main=paste("ZANB(p0=", p0, ", munb=", munb, ", size=", size,
- ") [blue] vs", " NB(mu=", munb, ", size=", size,
+ main = paste("ZANB(p0 =", p0, ", munb =", munb, ", size =", size,
+ ") [blue] vs", " NB(mu =", munb, ", size =", size,
") [green] densities", sep="")) }
}
\keyword{distribution}
diff --git a/man/zanegbinomial.Rd b/man/zanegbinomial.Rd
index cfa6be9..bc52cdd 100644
--- a/man/zanegbinomial.Rd
+++ b/man/zanegbinomial.Rd
@@ -9,9 +9,9 @@
}
\usage{
-zanegbinomial(lp0 = "logit", lmunb = "loge", lk = "loge",
- ep0 = list(), emunb =list(), ek = list(), ipnb0 = NULL,
- ik = NULL, zero = -3, cutoff = 0.995, method.init = 1,
+zanegbinomial(lp0 = "logit", lmunb = "loge", lsize = "loge",
+ ep0 = list(), emunb = list(), esize = list(), ipnb0 = NULL,
+ isize = NULL, zero = -3, cutoff = 0.995, imethod = 1,
shrinkage.init = 0.95)
}
%- maybe also 'usage' for other objects documented here.
@@ -27,14 +27,14 @@ zanegbinomial(lp0 = "logit", lmunb = "loge", lk = "loge",
See \code{\link{Links}} for more choices.
}
- \item{lk}{
+ \item{lsize}{
Parameter link function applied to the reciprocal of the dispersion
parameter, called \code{k}. That is, as \code{k} increases, the
variance of the response decreases.
See \code{\link{Links}} for more choices.
}
- \item{ep0, emunb, ek}{
+ \item{ep0, emunb, esize}{
List. Extra argument for the respective links.
See \code{earg} in \code{\link{Links}} for general information.
@@ -45,7 +45,7 @@ zanegbinomial(lp0 = "logit", lmunb = "loge", lk = "loge",
and it is ok to give one value each for each response/species.
}
- \item{ik}{
+ \item{isize}{
Optional initial values for \code{k}.
If given, they must be positive, and give one value
for each response/species.
@@ -55,7 +55,7 @@ zanegbinomial(lp0 = "logit", lmunb = "loge", lk = "loge",
Integer valued vector, usually assigned \eqn{-3} or \eqn{3} if
used at all. Specifies which of the three linear predictors are
modelled as an intercept only. By default, the \code{k} parameter
- (after \code{lk} is applied) for each response is modelled as
+ (after \code{lsize} is applied) for each response is modelled as
a single unknown number that is estimated. It can be modelled as a
function of the explanatory variables by setting \code{zero = NULL}.
A negative value means that the value is recycled, so setting \eqn{-3}
@@ -71,7 +71,7 @@ zanegbinomial(lp0 = "logit", lmunb = "loge", lk = "loge",
\code{qnegbin(p)}.
}
- \item{method.init, shrinkage.init}{
+ \item{imethod, shrinkage.init}{
See \code{\link{negbinomial}}
and \code{\link{CommonVGAMffArguments}}.
@@ -168,9 +168,10 @@ for counts with extra zeros.
\examples{
zdata <- data.frame(x = runif(nn <- 2000))
-zdata <- transform(zdata, p0 = logit(-1 + 2*x, inverse = TRUE),
- y1 = rposnegbin(nn, munb = exp(0+2*x), size = exp(1)),
- y2 = rposnegbin(nn, munb = exp(1+2*x), size = exp(1)))
+zdata <- transform(zdata,
+ p0 = logit(-1 + 2*x, inverse = TRUE),
+ y1 = rposnegbin(nn, munb = exp(0+2*x), size = exp(1)),
+ y2 = rposnegbin(nn, munb = exp(1+2*x), size = exp(1)))
zdata <- transform(zdata, y1 = ifelse(runif(nn) < p0, 0, y1),
y2 = ifelse(runif(nn) < p0, 0, y2))
with(zdata, table(y1))
diff --git a/man/zapoisUC.Rd b/man/zapoisUC.Rd
index c14124c..1443de9 100644
--- a/man/zapoisUC.Rd
+++ b/man/zapoisUC.Rd
@@ -26,7 +26,7 @@ rzapois(n, lambda, p0 = 0)
\item{lambda}{ Vector of positive means. }
\item{p0}{
Probability of zero, called \eqn{p0}.
- The default value of \code{p0=0} corresponds
+ The default value of \code{p0 = 0} corresponds
to the response having a positive Poisson distribution.
}
@@ -47,7 +47,7 @@ rzapois(n, lambda, p0 = 0)
\author{ Thomas W. Yee }
\note{
The argument \code{p0} is recycled to the required length, and
- must have values which lie in the interval [0,1].
+ must have values which lie in the interval \eqn{[0,1]}.
}
@@ -63,12 +63,11 @@ table(rzapois(100, lambda, p0))
table(qzapois(runif(100), lambda, p0))
round(dzapois(0:10, lambda, p0) * 100) # Should be similar
-\dontrun{
-x = 0:10
+\dontrun{ x = 0:10
barplot(rbind(dzapois(x, lambda, p0), dpois(x, lambda)),
- beside = TRUE, col = c("blue","green"),
- main=paste("ZAP(", lambda, ", p0=", p0, ") [blue] vs",
- " Poisson(", lambda, ") [green] densities", sep=""),
- names.arg = as.character(x), ylab="Probability") }
+ beside = TRUE, col = c("blue", "green"), las = 1,
+ main = paste("ZAP(", lambda, ", p0 = ", p0, ") [blue] vs",
+ " Poisson(", lambda, ") [green] densities", sep = ""),
+ names.arg = as.character(x), ylab = "Probability") }
}
\keyword{distribution}
diff --git a/man/zapoisson.Rd b/man/zapoisson.Rd
index 74388af..957a18c 100644
--- a/man/zapoisson.Rd
+++ b/man/zapoisson.Rd
@@ -145,14 +145,14 @@ contains further information and examples.
}
\examples{
-zapdata <- data.frame(x = runif(nn <- 1000))
-zapdata <- transform(zapdata, p0 = logit( -1 + 1*x, inverse = TRUE),
- lambda = loge(-0.5 + 2*x, inverse = TRUE))
+zapdata <- data.frame(x2 = runif(nn <- 1000))
+zapdata <- transform(zapdata, p0 = logit( -1 + 1*x2, inverse = TRUE),
+ lambda = loge(-0.5 + 2*x2, inverse = TRUE))
zapdata <- transform(zapdata, y = rzapois(nn, lambda, p0 = p0))
with(zapdata, table(y))
-fit <- vglm(y ~ x, zapoisson, zapdata, trace = TRUE)
-fit <- vglm(y ~ x, zapoisson, zapdata, trace = TRUE, crit = "c")
+fit <- vglm(y ~ x2, zapoisson, zapdata, trace = TRUE)
+fit <- vglm(y ~ x2, zapoisson, zapdata, trace = TRUE, crit = "c")
head(fitted(fit))
head(predict(fit))
head(predict(fit, untransform = TRUE))
diff --git a/man/zero.Rd b/man/zero.Rd
index eba4061..a82feeb 100644
--- a/man/zero.Rd
+++ b/man/zero.Rd
@@ -8,7 +8,7 @@
only.
}
% \usage{
-% VGAMfamilyFunction(zero=3)
+% VGAMfamilyFunction(zero = 3)
% }
\value{
Nothing is returned.
@@ -26,13 +26,17 @@
there is potential conflict of definition.
Currently no checking for consistency is made.
+
The argument \code{zero} may be renamed in the future to
something better.
+
}
\section{Side Effects}{
The argument creates the appropriate constraint matrices
internally.
+
+
}
\details{
Often a certain parameter needs to be modelled simply while other
@@ -44,38 +48,47 @@
Using the \code{zero} argument allows this to be fitted conveniently
without having to input all the constraint matrices explicitly.
+
The \code{zero} argument should be assigned an integer vector from the
set \{\code{1:M}\} where \code{M} is the number of linear/additive
- predictors. Full details about constraint matrices can be found in
+ predictors. Full details about constraint matrices can be found in
the references.
+
}
\author{T. W. Yee }
\note{
- In all \pkg{VGAM} family functions \code{zero=NULL} means
+ In all \pkg{VGAM} family functions \code{zero = NULL} means
none of the linear/additive predictors are modelled as
intercepts-only.
- Almost all \pkg{VGAM} family function have \code{zero=NULL}
+ Almost all \pkg{VGAM} family function have \code{zero = NULL}
as the default, but there are some exceptions, e.g.,
\code{\link{binom2.or}}.
- Typing something like \code{coef(fit, matrix=TRUE)} is a useful
+
+ Typing something like \code{coef(fit, matrix = TRUE)} is a useful
way to ensure that the \code{zero} argument has worked as expected.
+
}
\references{
+
Yee, T. W. and Wild, C. J. (1996)
Vector generalized additive models.
\emph{Journal of the Royal Statistical Society, Series B, Methodological},
\bold{58}, 481--493.
+
Yee, T. W. and Hastie, T. J. (2003)
Reduced-rank vector generalized linear models.
\emph{Statistical Modelling},
\bold{3}, 15--41.
+
\url{http://www.stat.auckland.ac.nz/~yee}
+
+
}
\seealso{
@@ -88,8 +101,8 @@ args(binom2.or)
args(gpd)
#LMS quantile regression example
-fit = vglm(BMI ~ bs(age, df=4), lms.bcg(zero=c(1,3)), bminz, trace=TRUE)
-coef(fit, matrix=TRUE)
+fit = vglm(BMI ~ bs(age, df = 4), lms.bcg(zero = c(1,3)), bminz, trace = TRUE)
+coef(fit, matrix = TRUE)
}
\keyword{models}
\keyword{regression}
diff --git a/man/zeta.Rd b/man/zeta.Rd
index 1108e5b..9c5dd8b 100644
--- a/man/zeta.Rd
+++ b/man/zeta.Rd
@@ -26,17 +26,19 @@ zeta(x, deriv = 0)
}
\details{
While the usual definition involves an infinite series, more efficient
- methods have been devised to compute the value. In particular,
- this function uses Euler-Maclaurin summation. Theoretically, the
+ methods have been devised to compute the value. In particular,
+ this function uses Euler-Maclaurin summation. Theoretically, the
zeta function can be computed over the whole complex plane because of
analytic continuation.
+
The formula used here for analytic continuation is
\deqn{\zeta(s) = 2^s \pi^{s-1} \sin(\pi s/2) \Gamma(1-s) \zeta(1-s).}{%
zeta(s) = 2^s * pi^(s-1) * sin(pi*s/2) * gamma(1-s) * zeta(1-s).}
This is actually one of several formulas, but this one was discovered
by Riemann himself and is called the \emph{functional equation}.
+
}
\section{Warning}{
@@ -46,15 +48,18 @@ zeta(x, deriv = 0)
\code{\link[base:Special]{gamma}} function does not handle complex
arguments.
+
}
\value{
A vector/matrix of computed values.
+
% The derivative is attached as an attribute zz.
}
\references{
+
Riemann, B. (1859)
Ueber die Anzahl der Primzahlen unter einer gegebenen Grosse.
\emph{Monatsberichte der Berliner Akademie, November 1859}.
@@ -79,10 +84,11 @@ New York: Dover Publications Inc.
}
-\author{ T. W. Yee, with the help of G. J. Tee. }
+\author{ T. W. Yee, with the help of Garry J. Tee. }
\note{
- Estimation of the parameter of the zeta distribution can be achieved
- with \code{\link{zetaff}}.
+ Estimation of the parameter of the zeta distribution can
+ be achieved with \code{\link{zetaff}}.
+
}
@@ -91,38 +97,37 @@ New York: Dover Publications Inc.
\code{\link{lerch}},
\code{\link[base:Special]{gamma}}.
+
}
\examples{
zeta(2:10)
\dontrun{
-curve(zeta, -13, 0.8, xlim=c(-12,10), ylim=c(-1,4), col="red")
-curve(zeta, 1.2, 12, add = TRUE, col="red")
-abline(v=0, h=c(0,1), lty="dashed")
-
-# Close up plot
-curve(zeta, -14, -0.4, col="red")
-abline(v=0, h=0, lty="dashed")
-
-# Plot of the first derivative
-x = seq(0.04, 0.8, len=100)
-plot(x, zeta(x, deriv=1), type="l", las=1, col="blue",
- xlim=c(0.04,3), ylim=c(-6,0), main="zeta'(x)")
-x = seq(1.2, 3, len=100)
-lines(x, zeta(x, deriv=1), col="blue")
-abline(v=0, h=0, lty="dashed") }
+curve(zeta, -13, 0.8, xlim = c(-12, 10), ylim = c(-1, 4), col = "orange")
+curve(zeta, 1.2, 12, add = TRUE, col = "orange")
+abline(v = 0, h = c(0, 1), lty = "dashed")
+
+curve(zeta, -14, -0.4, col = "orange") # Close up plot
+abline(v = 0, h = 0, lty = "dashed")
+
+x = seq(0.04, 0.8, len = 100) # Plot of the first derivative
+plot(x, zeta(x, deriv = 1), type = "l", las = 1, col = "blue",
+ xlim = c(0.04, 3), ylim = c(-6, 0), main = "zeta'(x)")
+x = seq(1.2, 3, len = 100)
+lines(x, zeta(x, deriv = 1), col = "blue")
+abline(v = 0, h = 0, lty = "dashed") }
zeta(2) - pi^2 / 6 # Should be zero
zeta(4) - pi^4 / 90 # Should be zero
zeta(6) - pi^6 / 945 # Should be 0
zeta(8) - pi^8 / 9450 # Should be 0
-# zeta(0, deriv=1) + 0.5 * log(2*pi) # Should be 0
+# zeta(0, deriv = 1) + 0.5 * log(2*pi) # Should be 0
}
\keyword{math}
-% curve(zeta, -13, 0.8, xlim=c(-12,10), ylim=c(-1,4), col="red")
-% curve(zeta, 1.2, 12, add = TRUE, col="red")
-% abline(v=0, h=c(0,1), lty="dashed")
+% curve(zeta, -13, 0.8, xlim = c(-12, 10), ylim = c(-1, 4), col = "orange")
+% curve(zeta, 1.2, 12, add = TRUE, col = "orange")
+% abline(v = 0, h = c(0,1), lty = "dashed")
diff --git a/man/zetaUC.Rd b/man/zetaUC.Rd
index a252ac5..25d694e 100644
--- a/man/zetaUC.Rd
+++ b/man/zetaUC.Rd
@@ -5,10 +5,11 @@
\title{The Zeta Distribution }
\description{
Density for the zeta distribution.
+
}
% zz p is not a good argument name, esp. with qzeta(p, p)
\usage{
-dzeta(x, p, log=FALSE)
+dzeta(x, p, log = FALSE)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -16,7 +17,7 @@ dzeta(x, p, log=FALSE)
\item{p}{ The parameter \eqn{p}. This must be positive. }
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -35,15 +36,18 @@ dzeta(x, p, log=FALSE)
}
\references{
+
Johnson N. L., Kotz S., and Balakrishnan N. (1993)
\emph{Univariate Discrete Distributions},
2nd ed.
New York: Wiley.
+
% Lindsey, J. K. (2002zz)
% \emph{Applied Statistical Modelling}, 2nd ed.
% London: Chapman & Hall.zz
+
% Knight, K. (2002zz)
% Theory book.
% London: Chapman & Hall.zz
@@ -54,25 +58,27 @@ New York: Wiley.
The \pkg{VGAM} family function \code{\link{zetaff}} estimates the
parameter \eqn{p}.
+
}
\section{Warning}{
This function has not been fully tested.
+
}
\seealso{
\code{\link{zeta}},
\code{\link{zetaff}}.
+
}
\examples{
-dzeta(1:20, p=2)
-\dontrun{
-plot(1:6, dzeta(1:6, p=4), type="h", las=1, ylab="Probability",
- main="zeta probability function; black: p = 4; blue: p = 2")
-points(0.10+1:6, dzeta(1:6, p=2), type="h", col="blue") }
+dzeta(1:20, p = 2)
+\dontrun{ plot(1:6, dzeta(1:6, p = 4), type = "h", las = 1, ylab = "Probability",
+ main = "zeta probability function; black: p = 4; blue: p = 2")
+points(0.10 + 1:6, dzeta(1:6, p = 2), type = "h", col = "blue") }
}
\keyword{distribution}
diff --git a/man/zetaff.Rd b/man/zetaff.Rd
index bff8e35..255a2ff 100644
--- a/man/zetaff.Rd
+++ b/man/zetaff.Rd
@@ -6,26 +6,17 @@
Estimates the parameter of the zeta distribution.
}
\usage{
-zetaff(link = "loge", earg=list(), init.p = NULL)
+zetaff(link = "loge", earg = list(), init.p = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{link}{
- Parameter link function applied to the (positive) parameter \eqn{p}.
+ \item{link, earg, init.p}{
+ See \code{\link{CommonVGAMffArguments}} for more information.
+ These arguments apply to the (positive) parameter \eqn{p}.
See \code{\link{Links}} for more choices.
Choosing \code{\link{loglog}} constrains \eqn{p>1}, but
may fail if the maximum likelihood estimate is less than one.
- }
- \item{earg}{
- List. Extra argument for the link.
- See \code{earg} in \code{\link{Links}} for general information.
-
- }
- \item{init.p}{
- Optional initial value for the parameter \eqn{p}.
- The default is to choose an initial value internally.
- If converge failure occurs use this argument to input a value.
}
}
@@ -40,15 +31,17 @@ The parameter \eqn{p} is positive, therefore a log link
is the default.
The mean of \eqn{Y} is
\eqn{\mu = \zeta(p) / \zeta(p+1)}{mu = zeta(p)/zeta(p+1)}
-provided \eqn{p>1}.
+(provided \eqn{p>1}) and these are the fitted values.
The variance of \eqn{Y} is
\eqn{\zeta(p-1) / \zeta(p+1) - \mu^2}{zeta(p-1) / zeta(p+1) - mu^2}
provided \eqn{p>2}.
+
It appears that good initial values are needed for successful
convergence. If convergence is not obtained, try several values
ranging from values near 0 to values about 10 or more.
+
}
\value{
@@ -64,16 +57,19 @@ ranging from values near 0 to values about 10 or more.
\references{
+
pp.527-- of Chapter 11 of
Johnson N. L., Kemp, A. W. and Kotz S. (2005)
\emph{Univariate Discrete Distributions},
3rd edition,
Hoboken, New Jersey: Wiley.
+
Knight, K. (2000)
\emph{Mathematical Statistics}.
Boca Raton: Chapman & Hall/CRC Press.
+
}
\author{ T. W. Yee }
\note{
@@ -91,16 +87,16 @@ Boca Raton: Chapman & Hall/CRC Press.
}
\examples{
zdata = data.frame(y = 1:5, w = c(63, 14, 5, 1, 2)) # Knight, p.304
-fit = vglm(y ~ 1, zetaff, zdata, trace=TRUE, wei=w, crit="c")
+fit = vglm(y ~ 1, zetaff, zdata, trace = TRUE, weight = w, crit = "c")
(phat = Coef(fit)) # 1.682557
with(zdata, cbind(round(dzeta(y, phat) * sum(w), 1), w))
with(zdata, weighted.mean(y, w))
-fitted(fit, mat=FALSE)
+fitted(fit, matrix = FALSE)
predict(fit)
# The following should be zero at the MLE:
-with(zdata, mean(log(rep(y, w))) + zeta(1+phat, deriv=1)/zeta(1+phat))
+with(zdata, mean(log(rep(y, w))) + zeta(1+phat, deriv = 1) / zeta(1+phat))
}
\keyword{models}
\keyword{regression}
diff --git a/man/zibinomUC.Rd b/man/zibinomUC.Rd
index aeaa512..82f0d56 100644
--- a/man/zibinomUC.Rd
+++ b/man/zibinomUC.Rd
@@ -7,8 +7,9 @@
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ Zero-Inflated Binomial Distribution }
\description{
- Density, distribution function, quantile function and random generation
- for the zero-inflated binomial distribution with parameter \code{phi}.
+ Density, distribution function, quantile function and random
+ generation for the zero-inflated binomial distribution with
+ parameter \code{phi}.
}
\usage{
@@ -29,8 +30,9 @@ rzibinom(n, size, prob, phi = 0)
\code{\link[stats:Binomial]{pbinom}}.}
\item{phi}{
Probability of zero (ignoring the binomial distribution), called
- \eqn{\phi}{phi}. The default value of \eqn{\phi=0}{phi=0} corresponds
- to the response having an ordinary binomial distribution.
+ \eqn{\phi}{phi}. The default value of \eqn{\phi=0}{phi=0}
+ corresponds to the response having an ordinary binomial
+ distribution.
}
}
@@ -40,42 +42,46 @@ rzibinom(n, size, prob, phi = 0)
probability \eqn{1-\phi}{1-phi}. Thus
\deqn{P(Y=0) =\phi + (1-\phi) P(W=0)}{%
P(Y=0) = phi + (1-phi) * P(W=0)}
- where \eqn{W} is distributed \eqn{Binomial(size, prob)}{Binomial(size, prob)}.
+ where \eqn{W} is
+ distributed \eqn{Binomial(size, prob)}{Binomial(size, prob)}.
+
+
}
\value{
\code{dzibinom} gives the density,
\code{pzibinom} gives the distribution function,
\code{qzibinom} gives the quantile function, and
\code{rzibinom} generates random deviates.
+
}
%\references{ }
\author{ Thomas W. Yee }
\note{
- The argument \code{phi} is recycled to the required length, and
- must have values which lie in the interval [0,1].
+ The argument \code{phi} is recycled to the required length,
+ and must have values which lie in the interval \eqn{[0,1]}.
}
\seealso{
\code{\link{zibinomial}},
\code{\link[stats:Binomial]{dbinom}}.
+
}
\examples{
prob = 0.2; size = 10; phi = 0.5
-(ii = dzibinom(0:size, size, prob, phi=phi))
-max(abs(cumsum(ii) - pzibinom(0:size, size, prob, phi=phi))) # Should be 0
-table(rzibinom(100, size, prob, phi=phi))
+(ii = dzibinom(0:size, size, prob, phi = phi))
+max(abs(cumsum(ii) - pzibinom(0:size, size, prob, phi = phi))) # Should be 0
+table(rzibinom(100, size, prob, phi = phi))
-table(qzibinom(runif(100), size, prob, phi=phi))
-round(dzibinom(0:10, size, prob, phi=phi) * 100) # Should be similar
+table(qzibinom(runif(100), size, prob, phi = phi))
+round(dzibinom(0:10, size, prob, phi = phi) * 100) # Should be similar
-\dontrun{
-x = 0:size
-barplot(rbind(dzibinom(x, size, prob, phi=phi),
- dbinom(x, size, prob)),
- beside = TRUE, col = c("blue","green"),
- main=paste("ZIB(", size, ", ", prob, ", phi=", phi, ") (blue) vs",
- " Binomial(", size, ", ", prob, ") (green)", sep=""),
- names.arg = as.character(x), las=1, lwd=2) }
+\dontrun{ x = 0:size
+barplot(rbind(dzibinom(x, size, prob, phi = phi),
+ dbinom(x, size, prob)),
+ beside = TRUE, col = c("blue", "green"), ylab = "Probability",
+ main = paste("ZIB(", size, ", ", prob, ", phi = ", phi, ") (blue) vs",
+ " Binomial(", size, ", ", prob, ") (green)", sep=""),
+ names.arg = as.character(x), las = 1, lwd = 2) }
}
\keyword{distribution}
diff --git a/man/zibinomial.Rd b/man/zibinomial.Rd
index a544b0d..631da6c 100644
--- a/man/zibinomial.Rd
+++ b/man/zibinomial.Rd
@@ -8,8 +8,8 @@
}
\usage{
-zibinomial(lphi="logit", lmu="logit", ephi=list(), emu=list(),
- iphi=NULL, zero=1, mv=FALSE)
+zibinomial(lphi = "logit", lmu = "logit", ephi = list(), emu = list(),
+ iphi = NULL, zero = 1, mv = FALSE)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -34,9 +34,10 @@ zibinomial(lphi="logit", lmu="logit", ephi=list(), emu=list(),
\item{zero}{
An integer specifying which linear/additive predictor is modelled
as intercepts only. If given, the value must be either 1 or 2,
- and the default is the first. Setting \code{zero=NULL} enables both
+ and the default is the first. Setting \code{zero = NULL} enables both
\eqn{\phi}{phi} and \eqn{\mu}{mu} to be modelled as a function of
the explanatory variables.
+ See \code{\link{CommonVGAMffArguments}} for more information.
}
\item{mv}{
@@ -62,16 +63,19 @@ zibinomial(lphi="logit", lmu="logit", ephi=list(), emu=list(),
By default, the two linear/additive predictors are \eqn{(logit(\phi),
logit(\mu))^T}{(logit(phi), logit(mu))^T}.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}}
and \code{\link{vgam}}.
+
}
%\references{
%}
+
\author{ T. W. Yee }
\note{
The response variable must have one of the formats described by
@@ -79,18 +83,22 @@ zibinomial(lphi="logit", lmu="logit", ephi=list(), emu=list(),
vector of sample proportions with the \code{weights} argument
specifying the values of \eqn{N}.
+
To work well, one needs \eqn{N>1} and \eqn{\mu>0}{mu>0}, i.e.,
the larger \eqn{N} and \eqn{\mu}{mu} are, the better.
+
For intercept-models and constant \eqn{N} over the \eqn{n} observations,
the \code{misc} slot has a component called \code{p0} which is the
estimate of \eqn{P(Y=0)}. This family function currently cannot handle
- a multivariate response (only \code{mv=FALSE} can be handled).
+ a multivariate response (only \code{mv = FALSE} can be handled).
+
% The zero-\emph{deflated} binomial distribution cannot be handled with
% this family function. It can be handled with the zero-altered binomial
% distribution; see \code{\link{zabinomial}}.
+
}
\section{Warning }{
@@ -108,11 +116,11 @@ zibinomial(lphi="logit", lmu="logit", ephi=list(), emu=list(),
}
\examples{
-size = 10 # number of trials; N in the notation above
+size = 10 # Number of trials; N in the notation above
nn = 200
-zibdata = data.frame(phi = logit( 0, inv = TRUE), # 0.50
- mubin = logit(-1, inv = TRUE), # Mean of usual binomial
- sv = rep(size, len = nn))
+zibdata = data.frame(phi = logit( 0, inverse = TRUE), # 0.50
+ mubin = logit(-1, inverse = TRUE), # Mean of usual binomial
+ sv = rep(size, length = nn))
zibdata = transform(zibdata,
y = rzibinom(nn, size = sv, prob = mubin, phi = phi))
with(zibdata, table(y))
@@ -120,7 +128,7 @@ fit = vglm(cbind(y, sv - y) ~ 1, zibinomial, zibdata, trace = TRUE)
coef(fit, matrix = TRUE)
Coef(fit) # Useful for intercept-only models
-fit at misc$p0 # Estimate of P(Y=0)
+fit at misc$p0 # Estimate of P(Y = 0)
head(fitted(fit))
with(zibdata, mean(y)) # Compare this with fitted(fit)
summary(fit)
diff --git a/man/zinegbinUC.Rd b/man/zinegbinUC.Rd
index 5e4776a..7874a8b 100644
--- a/man/zinegbinUC.Rd
+++ b/man/zinegbinUC.Rd
@@ -12,10 +12,10 @@
}
\usage{
-dzinegbin(x, phi, size, prob=NULL, munb=NULL, log=FALSE)
-pzinegbin(q, phi, size, prob=NULL, munb=NULL)
-qzinegbin(p, phi, size, prob=NULL, munb=NULL)
-rzinegbin(n, phi, size, prob=NULL, munb=NULL)
+dzinegbin(x, phi, size, prob = NULL, munb = NULL, log = FALSE)
+pzinegbin(q, phi, size, prob = NULL, munb = NULL)
+qzinegbin(p, phi, size, prob = NULL, munb = NULL)
+rzinegbin(n, phi, size, prob = NULL, munb = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -48,18 +48,21 @@ rzinegbin(n, phi, size, prob=NULL, munb=NULL)
for the formula of the probability density function and other details
of the negative binomial distribution.
+
}
\value{
\code{dzinegbin} gives the density,
\code{pzinegbin} gives the distribution function,
\code{qzinegbin} gives the quantile function, and
\code{rzinegbin} generates random deviates.
+
+
}
%\references{ }
\author{ Thomas W. Yee }
\note{
The argument \code{phi} is recycled to the required length, and
- must have values which lie in the interval [0,1].
+ must have values which lie in the interval \eqn{[0,1]}.
}
@@ -68,24 +71,24 @@ rzinegbin(n, phi, size, prob=NULL, munb=NULL)
\code{\link[stats:NegBinomial]{rnbinom}},
\code{\link{rzipois}}.
+
}
\examples{
munb = 3; phi = 0.2; size = k = 10
x = 0:10
-(ii = dzinegbin(x, phi=phi, mu=munb, size=k))
-max(abs(cumsum(ii) - pzinegbin(x, phi=phi, mu=munb, size=k))) # Should be 0
-table(rzinegbin(100, phi=phi, mu=munb, size=k))
+(ii = dzinegbin(x, phi = phi, mu = munb, size = k))
+max(abs(cumsum(ii) - pzinegbin(x, phi = phi, mu = munb, size = k))) # Should be 0
+table(rzinegbin(100, phi = phi, mu = munb, size = k))
-table(qzinegbin(runif(1000), phi=phi, mu=munb, size=k))
-round(dzinegbin(x, phi=phi, mu=munb, size=k) * 1000) # Should be similar
+table(qzinegbin(runif(1000), phi = phi, mu = munb, size = k))
+round(dzinegbin(x, phi = phi, mu = munb, size = k) * 1000) # Should be similar
-\dontrun{
-barplot(rbind(dzinegbin(x, phi=phi, mu=munb, size=k),
- dnbinom(x, mu=munb, size=k)),
- beside = TRUE, col = c("blue","green"),
- main=paste("ZINB(mu=", munb, ", k=", k, ", phi=", phi,
- ") (blue) vs negative binomial(mu=", munb,
- ", size=", k, ") (green)", sep=""),
+\dontrun{barplot(rbind(dzinegbin(x, phi = phi, mu = munb, size = k),
+ dnbinom(x, mu = munb, size = k)),
+ beside = TRUE, col = c("blue", "green"),
+ main = paste("ZINB(mu = ", munb, ", k = ", k, ", phi = ", phi,
+ ") (blue) vs negative binomial(mu = ", munb,
+ ", size = ", k, ") (green)", sep = ""),
names.arg = as.character(x)) }
}
\keyword{distribution}
diff --git a/man/zinegbinomial.Rd b/man/zinegbinomial.Rd
index e99bc85..f0e65e0 100644
--- a/man/zinegbinomial.Rd
+++ b/man/zinegbinomial.Rd
@@ -8,45 +8,37 @@
}
\usage{
-zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
- emunb = list(), ek = list(), iphi = NULL, ik = NULL, zero = -3,
- method.init = 1, shrinkage.init = 0.95, nsimEIM = 200)
+zinegbinomial(lphi = "logit", lmunb = "loge", lsize = "loge", ephi = list(),
+ emunb = list(), esize = list(), iphi = NULL, isize = NULL, zero = -3,
+ imethod = 1, shrinkage.init = 0.95, nsimEIM = 200)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
- \item{lphi, lmunb, lk}{
+ \item{lphi, lmunb, lsize}{
Link functions for the parameters \eqn{\phi}{phi},
the mean and \eqn{k}; see \code{\link{negbinomial}} for details,
and \code{\link{Links}} for more choices.
}
- \item{ephi, emunb, ek}{
+ \item{ephi, emunb, esize}{
List. Extra arguments for the respective links.
See \code{earg} in \code{\link{Links}} for general information.
}
- \item{iphi, ik}{
+ \item{iphi, isize}{
Optional initial values for \eqn{\phi}{phi} and \eqn{k}{k}.
The default is to compute an initial value internally for both.
If a vector then recycling is used.
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} or \code{3} which
specifies the initialization method for the mean parameter.
If failure to converge occurs try another value
and/or else specify a value for \code{shrinkage.init}.
}
- \item{shrinkage.init}{
- How much shrinkage is used when initializing the mean.
- The value must be between 0 and 1 inclusive, and
- a value of 0 means the individual response values are used,
- and a value of 1 means the median or mean is used.
- This argument is used in conjunction with \code{method.init}.
-
- }
\item{zero}{
Integers specifying which linear/additive predictor is modelled
as intercepts only. If given, their absolute values must be
@@ -55,8 +47,8 @@ zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
See \code{\link{CommonVGAMffArguments}} for more information.
}
- \item{nsimEIM}{
- See \code{\link{CommonVGAMffArguments}} for more information.
+ \item{shrinkage.init, nsimEIM}{
+ See \code{\link{CommonVGAMffArguments}} for information.
}
}
@@ -76,9 +68,11 @@ zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
for the formula of the probability density function and other details
of the negative binomial distribution.
+
Independent multivariate responses are handled.
- If so then arguments \code{iphi} and \code{ik} may be vectors with
- length equal to the number of responses.
+ If so then arguments \code{iphi} and \code{isize} may be vectors
+ with length equal to the number of responses.
+
}
\value{
@@ -86,6 +80,7 @@ zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
The object is used by modelling functions such as \code{\link{vglm}},
and \code{\link{vgam}}.
+
}
%\references{
%
@@ -117,10 +112,10 @@ zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
probability of zero.
Half-stepping is not uncommon.
If failure to converge occurs, try using combinations of
- \code{method.init},
+ \code{imethod},
\code{shrinkage.init},
\code{iphi},
- \code{ik}, and/or
+ \code{isize}, and/or
\code{zero} if there are explanatory variables.
}
@@ -137,9 +132,9 @@ zinegbinomial(lphi = "logit", lmunb = "loge", lk = "loge", ephi = list(),
nbdat <- data.frame(x2 = runif(nn <- 1000))
nbdat <- transform(nbdat, phi = logit(-0.5 + 1 * x2, inverse = TRUE),
munb = exp(3 + x2),
- k = exp(0 + 2*x2))
-nbdat <- transform(nbdat, y1 = rzinegbin(nn, phi, mu = munb, size = k),
- y2 = rzinegbin(nn, phi, mu = munb, size = k))
+ size = exp(0 + 2*x2))
+nbdat <- transform(nbdat, y1 = rzinegbin(nn, phi, mu = munb, size = size),
+ y2 = rzinegbin(nn, phi, mu = munb, size = size))
with(nbdat, table(y1)["0"] / sum(table(y1)))
fit <- vglm(cbind(y1, y2) ~ x2, zinegbinomial(zero = NULL), nbdat)
coef(fit, matrix = TRUE)
@@ -154,8 +149,8 @@ nbdat <- transform(nbdat, x3 = runif(nn))
nbdat <- transform(nbdat, eta1 = 3 + 1 * x2 + 2 * x3)
nbdat <- transform(nbdat, phi = logit(-1.5 + 0.5 * eta1, inverse = TRUE),
munb = exp(eta1),
- k = exp(4))
-nbdat <- transform(nbdat, y1 = rzinegbin(nn, phi, mu = munb, size = k))
+ size = exp(4))
+nbdat <- transform(nbdat, y1 = rzinegbin(nn, phi, mu = munb, size = size))
with(nbdat, table(y1)["0"] / sum(table(y1)))
rrzinb <- rrvglm(y1 ~ x2 + x3, zinegbinomial(zero = NULL), nbdat,
Index.corner = 2, szero = 3, trace = TRUE)
diff --git a/man/zipebcom.Rd b/man/zipebcom.Rd
index d895c1e..6077913 100644
--- a/man/zipebcom.Rd
+++ b/man/zipebcom.Rd
@@ -11,10 +11,10 @@
}
\usage{
-zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
- emu12=list(), ephi12=list(), eoratio=list(),
- imu12=NULL, iphi12=NULL, ioratio = NULL,
- zero=2:3, tol=0.001, addRidge=0.001)
+zipebcom(lmu12 = "cloglog", lphi12 = "logit", loratio = "loge",
+ emu12 = list(), ephi12 = list(), eoratio = list(),
+ imu12 = NULL, iphi12 = NULL, ioratio = NULL,
+ zero = 2:3, tol = 0.001, addRidge = 0.001)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -91,11 +91,13 @@ zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
written \eqn{\psi=p_{00}p_{11}/(p_{10}p_{01})}{psi=p00 p11 / (p10 p01)}.
We have \eqn{p_{10} = p_{01}}{p10 = p01} because of the exchangeability.
+
The second linear/additive predictor models the \eqn{\phi}{phi}
parameter (see \code{\link{zipoisson}}).
The third linear/additive predictor is the same as \code{\link{binom2.or}},
viz., the log odds ratio.
+
Suppose a dataset1 comes from a Poisson distribution that has been
converted to presence/absence, and that both marginal probabilities
are the same (exchangeable).
@@ -110,16 +112,19 @@ zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
of by \code{zipebcom()} so that it is just like the simpler
\code{\link{binom2.or}}.
+
Note that, for \eqn{\eta_1}{eta_1},
\code{mu12 = prob12 / (1-phi12)} where \code{prob12} is the probability
of a 1 under the ZIP model.
Here, \code{mu12} correspond to \code{mu1} and \code{mu2} in the
\code{\link{binom2.or}}-Poisson model.
+
If \eqn{\phi=0}{phi=0} then \code{zipebcom()} should be equivalent to
\code{binom2.or("cloglog", exch=TRUE)}.
Full details are given in Yee and Dirnbock (2009).
+
The leading \eqn{2 \times 2}{2 x 2} submatrix of the expected
information matrix (EIM) is of rank-1, not 2! This is due to the
fact that the parameters corresponding to the first two
@@ -128,24 +133,28 @@ zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
The model is fitted by maximum likelihood estimation since the full
likelihood is specified. Fisher scoring is implemented.
+
The default models \eqn{\eta_2}{eta2} and \eqn{\eta_3}{eta3} as
single parameters only, but this
can be circumvented by setting \code{zero=NULL} in order to model the
\eqn{\phi}{phi} and odds ratio as a function of all the explanatory
variables.
+
}
\value{
An object of class \code{"vglmff"} (see \code{\link{vglmff-class}}).
The object is used by modelling functions such as \code{\link{vglm}}
and \code{\link{vgam}}.
+
When fitted, the \code{fitted.values} slot of the object contains the
four joint probabilities, labelled as \eqn{(Y_1,Y_2)}{(Y1,Y2)} = (0,0),
(0,1), (1,0), (1,1), respectively.
These estimated probabilities should be extracted with the \code{fitted}
generic function.
+
}
\section{Warning }{
The fact that the EIM is not of full rank may mean the model is
@@ -155,13 +164,15 @@ zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
it is certainly safer to fit \code{\link{binom2.or}} to bivariate binary
responses.
+
}
\references{
Yee, T. W. and Dirnbock, T. (2009)
Models for analysing species' presence/absence data
at two time points.
- Journal of Theoretical Biology, \bold{259}. In press.
+ Journal of Theoretical Biology, \bold{259}(4), 684--694.
+
}
%\author{ Thomas W. Yee }
@@ -172,15 +183,18 @@ zipebcom(lmu12="cloglog", lphi12="logit", loratio="loge",
\emph{zero-inflated Poisson exchangeable bivariate complementary
log-log odds-ratio model} or ZIP-EBCOM.
+
See \code{\link{binom2.or}} for details that are pertinent to this
\pkg{VGAM} family function too.
Even better initial values are usually needed here.
+
The \code{xij} (see \code{\link{vglm.control}}) argument enables
environmental variables with different values at the two time points
to be entered into an exchangeable \code{\link{binom2.or}} model.
See the author's webpage for sample code.
+
}
\seealso{
\code{\link{binom2.or}},
@@ -201,22 +215,22 @@ mydat = transform(mydat, ybin1 = tmat[,1], ybin2 = tmat[,2])
with(mydat, table(ybin1,ybin2)) / nsites # For interest only
\dontrun{
# Various plots of the data, for interest only
-par(mfrow=c(2,2))
-plot(jitter(ybin1) ~ x, data = mydat, col="blue")
+par(mfrow = c(2, 2))
+plot(jitter(ybin1) ~ x, data = mydat, col = "blue")
-plot(jitter(ybin2) ~ jitter(ybin1), data = mydat, col="blue")
+plot(jitter(ybin2) ~ jitter(ybin1), data = mydat, col = "blue")
-plot(mu12 ~ x, data = mydat, col="blue", type="l", ylim=0:1,
- ylab="Probability", main="Marginal probability and phi")
-with(mydat, abline(h=phi1[1], col="red", lty="dashed"))
+plot(mu12 ~ x, data = mydat, col = "blue", type = "l", ylim = 0:1,
+ ylab = "Probability", main = "Marginal probability and phi")
+with(mydat, abline(h = phi1[1], col = "red", lty = "dashed"))
-tmat2 = with(mydat, dbinom2.or(mu1=mu12, oratio=oratio, exch=TRUE))
-with(mydat, matplot(x, tmat2, col=1:4, type="l", ylim=0:1,
- ylab="Probability", main="Joint probabilities")) }
+tmat2 = with(mydat, dbinom2.or(mu1 = mu12, oratio = oratio, exch = TRUE))
+with(mydat, matplot(x, tmat2, col = 1:4, type = "l", ylim = 0:1,
+ ylab = "Probability", main = "Joint probabilities")) }
# Now fit the model to the data.
-fit = vglm(cbind(ybin1,ybin2) ~ x, fam=zipebcom, dat=mydat, trace=TRUE)
-coef(fit, matrix=TRUE)
+fit = vglm(cbind(ybin1,ybin2) ~ x, fam = zipebcom, dat = mydat, trace = TRUE)
+coef(fit, matrix = TRUE)
summary(fit)
vcov(fit)
}
diff --git a/man/zipf.Rd b/man/zipf.Rd
index e061bed..59ae7ad 100644
--- a/man/zipf.Rd
+++ b/man/zipf.Rd
@@ -7,7 +7,7 @@
}
\usage{
-zipf(N=NULL, link="loge", earg=list(), init.s=NULL)
+zipf(N = NULL, link = "loge", earg = list(), init.s = NULL)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
@@ -15,7 +15,7 @@ zipf(N=NULL, link="loge", earg=list(), init.s=NULL)
Number of elements, an integer satisfying \code{1 < N < Inf}.
The default is to use the maximum value of the response.
If given, \code{N} must be no less that the largest response value.
- If \code{N=Inf} and \eqn{s>1} then this is the zeta distribution
+ If \code{N = Inf} and \eqn{s>1} then this is the zeta distribution
(use \code{\link{zetaff}} instead).
}
@@ -83,13 +83,14 @@ pp.526-- of Chapter 11 of
}
\examples{
-zdat = data.frame(y = 1:5, w = c(63, 14, 5, 1, 2))
-fit = vglm(y ~ 1, zipf, zdat, trace=TRUE, weight=w, cri="c")
-fit = vglm(y ~ 1, zipf(link=identity, init=3.4), zdat, tra=TRUE, weight=w)
+zdata = data.frame(y = 1:5, w = c(63, 14, 5, 1, 2))
+fit = vglm(y ~ 1, zipf, zdata, trace = TRUE, weight = w, crit = "c")
+fit = vglm(y ~ 1, zipf(link = identity, init = 3.4), zdata,
+ trace = TRUE, weight = w)
fit at misc$N
(shat = Coef(fit))
-with(zdat, weighted.mean(y, w))
-fitted(fit, mat=FALSE)
+with(zdata, weighted.mean(y, w))
+fitted(fit, matrix = FALSE)
}
\keyword{models}
\keyword{regression}
diff --git a/man/zipfUC.Rd b/man/zipfUC.Rd
index 849058c..8a595b5 100644
--- a/man/zipfUC.Rd
+++ b/man/zipfUC.Rd
@@ -27,7 +27,7 @@ pzipf(q, N, s)
}
\item{log}{
Logical.
- If \code{log=TRUE} then the logarithm of the density is returned.
+ If \code{log = TRUE} then the logarithm of the density is returned.
}
@@ -52,13 +52,13 @@ pzipf(q, N, s)
}
\examples{
-N = 10; s=0.5; y = 1:N
-proby = dzipf(y, N=N, s=s)
-\dontrun{
-plot(proby ~ y, type="h", col="blue", ylab="P[Y=y]", ylim=c(0,0.2),
- main=paste("Zipf(N=",N,", s=",s,")", sep=""), lwd=2, las = 1) }
+N = 10; s = 0.5; y = 1:N
+proby = dzipf(y, N = N, s = s)
+\dontrun{ plot(proby ~ y, type = "h", col = "blue", ylab = "Probability",
+ ylim = c(0, 0.2), main = paste("Zipf(N = ",N,", s = ",s,")", sep = ""),
+ lwd = 2, las = 1) }
sum(proby) # Should be 1
-max(abs(cumsum(proby) - pzipf(y, N=N, s=s))) # Should be 0
+max(abs(cumsum(proby) - pzipf(y, N = N, s = s))) # Should be 0
}
\keyword{distribution}
diff --git a/man/zipoisUC.Rd b/man/zipoisUC.Rd
index fb675d4..32919b6 100644
--- a/man/zipoisUC.Rd
+++ b/man/zipoisUC.Rd
@@ -25,7 +25,7 @@ rzipois(n, lambda, phi = 0)
\item{lambda}{ Vector of positive means. }
\item{phi}{
Probability of zero (ignoring the Poisson distribution), called
- \eqn{\phi}{phi}. The default value of \eqn{\phi=0}{phi=0} corresponds
+ \eqn{\phi}{phi}. The default value of \eqn{\phi = 0}{phi = 0} corresponds
to the response having an ordinary Poisson distribution.
}
@@ -38,26 +38,31 @@ rzipois(n, lambda, phi = 0)
\deqn{P(Y=0) =\phi + (1-\phi) P(W=0)}{%
P(Y=0) = phi + (1-phi) * P(W=0)}
where \eqn{W} is distributed \eqn{Poisson(\lambda)}{Poisson(lambda)}.
+
+
}
\value{
\code{dzipois} gives the density,
\code{pzipois} gives the distribution function,
\code{qzipois} gives the quantile function, and
\code{rzipois} generates random deviates.
+
+
}
%\references{ }
\author{ Thomas W. Yee }
\note{
The argument \code{phi} is recycled to the required length, and
- must have values which lie in the interval [0,1].
+ must have values which lie in the interval \eqn{[0,1]}.
}
\seealso{
- \code{\link[stats:Poisson]{dpois}},
\code{\link{zipoisson}},
+ \code{\link[stats:Poisson]{dpois}},
\code{\link{rzinegbin}}.
+
}
\examples{
lambda = 3; phi = 0.2; x = (-1):7
@@ -68,12 +73,11 @@ table(rzipois(100, lambda, phi))
table(qzipois(runif(100), lambda, phi))
round(dzipois(0:10, lambda, phi) * 100) # Should be similar
-\dontrun{
-x = 0:10
+\dontrun{ x = 0:10
barplot(rbind(dzipois(x, lambda, phi), dpois(x, lambda)),
beside = TRUE, col = c("blue","green"),
- main=paste("ZIP(", lambda, ", phi=", phi, ") (blue) vs",
- " Poisson(", lambda, ") (green)", sep=""),
+ main = paste("ZIP(", lambda, ", phi = ", phi, ") (blue) vs",
+ " Poisson(", lambda, ") (green)", sep = ""),
names.arg = as.character(x)) }
}
\keyword{distribution}
diff --git a/man/zipoisson.Rd b/man/zipoisson.Rd
index 8cc72d3..579568c 100644
--- a/man/zipoisson.Rd
+++ b/man/zipoisson.Rd
@@ -11,11 +11,11 @@
\usage{
zipoissonff(llambda = "loge", lprobp = "logit",
elambda = list(), eprobp = list(),
- ilambda = NULL, iprobp = NULL, method.init = 1,
+ ilambda = NULL, iprobp = NULL, imethod = 1,
shrinkage.init = 0.8, zero = -2)
-zipoisson(lphi ="logit", llambda = "loge",
+zipoisson(lphi = "logit", llambda = "loge",
ephi = list(), elambda = list(),
- iphi = NULL, ilambda = NULL, method.init = 1,
+ iphi = NULL, ilambda = NULL, imethod = 1,
shrinkage.init = 0.8, zero = NULL)
}
%- maybe also 'usage' for other objects documented here.
@@ -48,7 +48,7 @@ zipoisson(lphi ="logit", llambda = "loge",
}
- \item{method.init}{
+ \item{imethod}{
An integer with value \code{1} or \code{2} which
specifies the initialization method for \eqn{\lambda}{lambda}.
If failure to converge occurs try another value
@@ -62,7 +62,7 @@ zipoisson(lphi ="logit", llambda = "loge",
The value must be between 0 and 1 inclusive, and
a value of 0 means the individual response values are used,
and a value of 1 means the median or mean is used.
- This argument is used in conjunction with \code{method.init}.
+ This argument is used in conjunction with \code{imethod}.
See \code{\link{CommonVGAMffArguments}} for more information.
}
@@ -178,7 +178,7 @@ zipoisson(lphi ="logit", llambda = "loge",
replacing 182 by 1 results in nonconvergence.
Half-stepping is not uncommon.
If failure to converge occurs, try using combinations of
- \code{method.init},
+ \code{imethod},
\code{shrinkage.init},
\code{iphi}, and/or
\code{zipoisson(zero = 1)} if there are explanatory variables.
@@ -195,6 +195,7 @@ zipoisson(lphi ="logit", llambda = "loge",
\code{\link{zipebcom}},
\code{\link[stats:Poisson]{rpois}}.
+
}
\examples{
# Example 1: simulated ZIP data
@@ -210,13 +211,13 @@ zdata <- transform(zdata, y1 = rzipois(nn, lambda1, Phi1),
with(zdata, table(y1)) # Eyeball the data
with(zdata, table(y2))
-fit1 <- vglm(y1 ~ x2, zipoisson(zero = 1), zdata, crit = "c")
-fit2 <- vglm(y2 ~ x2, zipoisson(zero = 1), zdata, crit = "c")
+fit1 <- vglm(y1 ~ x2, zipoisson(zero = 1), zdata, crit = "coef")
+fit2 <- vglm(y2 ~ x2, zipoisson(zero = 1), zdata, crit = "coef")
coef(fit1, matrix = TRUE) # These should agree with the above values
coef(fit2, matrix = TRUE) # These should agree with the above values
# Fit all two simultaneously, using a different parameterization:
-fit12 <- vglm(cbind(y1, y2) ~ x2, zipoissonff, zdata, crit = "c")
+fit12 <- vglm(cbind(y1, y2) ~ x2, zipoissonff, zdata, crit = "coef")
coef(fit12, matrix = TRUE) # These should agree with the above values
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/r-cran-vgam.git
More information about the debian-science-commits
mailing list