Changes in gnm 1.0-6
====================
Bug fixes
---------
o added catch for when deviance becomes NaN
Changes in gnm 1.0-5
====================
Improvements
------------
o eliminated coefficients now returned as named vector.
o step-quartering introduced to start-up iterations to avoid increasing
deviance.
Changes in behaviour
--------------------
o gnm() no longer restarts if algorithm fails - better to provide
improved starting values in this case.
Bug fixes
---------
o fixed bug in the way 'etastart' is used to initialise the linear
parameters when 'eliminate' is used as well.
Changes in gnm 1.0-4
====================
Bug fixes
---------
o restarting mechanism now reinitialises correctly.
o removed call to external C function that is no longer available.
o gnm() now works with 'eliminate' argument when remaining linear part of
predictor only involves one parameter.
Changes in gnm 1.0-3
====================
Improvements
------------
o pickCoef() extended to allow fixed pattern matching and to optionally
return actual coefficients rather than their indices.
o gnm() now looks for exact match in coefficient names when a single
character string is passed to the 'constrain' argument before treating
as regular expression.
o hatvalues.gnm() has been reimplemented to work more efficiently for large
model matrices.
o "nonlin" terms defined for homogeneous factors will now accept factors
specified as an interaction (using ':').
Bug fixes
---------
o results now returned in original order for models fitted with 'eliminate'
argument.
o bug introduced into residSVD reverted so that now correctly aggregates
working residuals.
o anova.gnm() now works when model is a single "nonlin" term.
Changes in gnm 1.0-2
====================
Improvements
------------
o factors specified as homogenous in nonlin functions can now be
specified as interactions of factors.
Bug fixes
---------
o fixed bug so that variables handled correctly in nonlinTerms.
o corrected rank calculation for constrained models.
o removed calls to Internal
Changes in gnm 1.0-1
====================
New Features
------------
o added meanResiduals() function
o 'check' argument added to getContrasts.
Improvements
------------
o added example SVD calculation to wheat.Rd; also in vignette.
Bug fixes
---------
o added update.gnm() so that nonlinear terms were no ordered as linear,
first order terms.
Changes in gnm 1.0-0
====================
Improvements
------------
o eliminated coefficients now treated entirely separately, in particular
the design matrix no longer has columns for these coefficients, making
the algorithm far more efficient for models with many eliminated
coefficients.
o more reliable calculation of rank
Changes in Behaviour
--------------------
o ofInterest and constrain now index non-eliminated coefficients only.
o eliminated coefficients now returned as attribute of returned
coefficient vector.
o "lsMethod" argument to gnm() removed as now the LAPACK routines are
always used to determine the least squares solution at the heart of
the fitting algorithm. Hence qrSolve() and cholInv() deprecated.
o the "eliminate", "onlyFirstCol" and "onlyNonElim" arguments to
MPinv() have been removed as no longer used.
Bug fixes
---------
o etastart now works for models with no linear parameters.
o anova now ignores terms that are completely constrained.
Changes in gnm 0.10-0
=====================
Improvements
------------
o mustart/etastart now used to obtain starting values for linear and
nonlinear parameters separately, improving performance.
Changes in Behaviour
--------------------
o expandCategorical now groups together individuals with common covariate
values, by default. New 'group' argument added to switch this behaviour.
Bug fixes
---------
o print.profile.gnm() now prints full result.
o data now read in correctly for Lee-Carter example in vignette.
Changes in gnm 0.9-9
====================
New Features
------------
o 'etastart' and 'mustart' arguments added to gnm().
Changes in gnm 0.9-8
====================
Improvements
------------
o gnm() now returns 'data' argument as glm() does.
Changes in gnm 0.9-7
====================
Bug fixes
---------
o more minor corrections in documentation.
Changes in gnm 0.9-6
====================
Bug fixes
---------
o minor corrections in documentation.
Changes in gnm 0.9-5
====================
Improvements
------------
o getContrasts() can now estimate _scaled_ contrasts with more flexibility in
how the reference level is defined.
o changed tolerance level in checkEstimable to 1e6 * .Machine$double.eps as
previous tolerance too strict for some examples.
Changes in Behaviour
--------------------
o getContrasts() now only handles one set of parameters at a time.
o use of Const() is now restricted to the symbolic predictors of "nonlin"
functions.
o Nonlin() - the wrapper function for plug-in functions - is now defunct. Use
"nonlin" functions to specify custom nonlinear terms.
Bug fixes
---------
o plot.gnm now uses standardised Pearson residuals for plot 'which = 5' so
that the Cook's distance contours are correct
Changes in gnm 0.9-4
====================
New Features
------------
o predict() now implemented for "gnm" objects
Improvements
------------
o results formatted as contingency tables where appropriate by extractor
functions (fitted(), etc), rather than gnm()
Changes in Behaviour
--------------------
o default for `match' argument of nonlinTerms() now zero vector (i.e. no
matching to arguments of `call' by default)
Bug fixes
---------
o termPredictors() now works on "gnm" objects fitted with glm.fit()
o intercept removed when `eliminate' argument of gnm() is non-NULL
o models with all parameters eliminated now summarised sensibly
o Diag() and Symm() now work for factors of length 1
o asGnm() now returns object with "gnm"-type terms component
o print method for "profile.gnm" objects now exported
Changes in gnm 0.9-3
====================
New Features
------------
o added DrefWeights() for computing the weights in a diagonal reference
term and the corresponding standard errors.
Improvements
------------
o "assign" attribute now attached to the parameter vector when passed to
start functions defined by "nonlin" functions, specifying the
correspondence between parameters and predictors in the nonlinear term.
Bug fixes
---------
o start function in Dref() now identifies weight parameters correctly.
o can now evaluate term predictors for "nonlin" terms that depend on
covariates.
Changes in gnm 0.9-2
====================
Improvements
------------
o Calls to "nonlin" functions now evaluated in the same environment and
enclosure as call to create model frame, so "nonlin" functions should
be able to find variables in gnm calls - potentially useful for setting
starting values.
Bug fixes
---------
o gnm() algorithm now reinitiates correctly when restarting after
non-convergence.
o gnm() now works correctly when a model is specified with nonlinear terms
inbetween linear terms.
Changes in gnm 0.9-1
====================
New Features
------------
o introduction of functions of class "nonlin" for the unified specification
of nonlinear terms. Mult(), Exp(), Dref() and MultHomog() have all been
converted to functions of this class.
o added Inv() to specify the reciprocal of a predictor.
o added Const() to specify a constant in a predictor.
o added instances() to specify multiple instances of a nonlinear term.
Improvements
------------
o nonlinear terms can now be nested.
o Exp() can now be used outside of Mult() or to exponentiate part of a
constituent multiplier.
Changes in Behaviour
--------------------
o to accommodate the increased functionality introduced by "nonlin"
functions, new labelling conventions have been introduced. In
particular, most "nonlin" functions use argument-matched parameter
labels.
o in the new implementation of Dref() the 'formula' argument has been
re-named 'delta' to provide more informative parameter labels under the
new conventions.
Bug fixes
---------
o specifying 'ofInterest = "[?]"' in gnm() now works as documented.
Changes in gnm 0.8-5
====================
New Features
------------
none in this release
Improvements
------------
o added a new `ridge' argument to gnm, to allow some control over
the Levenberg-Marquardt regularization of the internal least squares
calculation
o changed the default ridge constant to 1e-8 (from 1e-5), to increase
speed of convergence (especially in cases where there are infinite
parameter estimates)
o modified the "qr" method so that it no longer checks for rank deficiency
(it was both unreliable, and not necessary since the matrix is regularized
prior to solving)
o substantial speed improvements in model fitting when there are large
numbers of eliminated parameters, achieved mainly via a new internal
function cholInv1(). Corresponding example timings changed in the
Overview document (vignette).
o speed improvements in vcov.gnm() when there are eliminated parameters; new
logical argument `use.eliminate' gives control over this
o in getContrasts(), added new arguments `dispersion' and `use.eliminate',
both of which are passed on to vcov()
o implemented faster alternatives to ifelse in gnmFit()
o speed gains from use of tcrossprod(). Because of this the gnm
package now requires R 2.3.0 or later.
Changes in Behaviour
--------------------
o in gnm(), changed the default value of argument x to TRUE (it was
previously FALSE)
o in checkEstimable(), changed the name of the first argument from
`coefMatrix' to `combMatrix' (to reflect better that it is a matrix of
coefficient *combinations*); and changed the default tolerance value to
one which should give more reliable results. Also, more fundamentally,
changed the check to be whether combinations are in the column span of
crossprod(X) instead of the row span of X; the results should be the same,
but the new version is much faster for large n.
o model.matrix.gnm() no longer passes extra arguments to gnm as it's unlikely
to be useful/sensible. For the same reasons it will not pass extra
arguments to model.frame(), unlike model.matrix.lm()
o getContrasts() now results in a list only when the `sets' argument itself
is a list; otherwise (ie, normally) the result is a single object
(rather than a list of objects) of class `qv'
Bug fixes
---------
o fixed a bug in internal function quick.glm.fit(), which greatly improves
its performance. Also changed the default value of the nIter argument
from 3 to 2.
o fixed a small bug in demo(gnm)
o fixed a bug in vcov.gnm(), which previously gave an error when data were
of class "table")
o fixed summary.gnm() so that it now takes proper account of the dispersion
argument
o in se(), added new arguments `Vcov' and `dispersion'; the latter fixes a
bug, while the former minimizes wasted computation in summary.gnm
o fixed bug in model.matrix.gnm() so that it can compute the model matrix
even when original data is not available - unless model frame has not been
saved. Original data still needed to update model frame - this is the
same as for glms, etc.
o fixed bug in gnm() so that reconstructing "table"-class data works for
models with weights/offsets
Changes in gnm 0.8-4
====================
New Features
------------
o added "gnm" methods for profile() and confint(). Use of 'alpha' argument
differs slightly from "glm" methods: see help files.
o 'constrain' argument to gnm() now supplemented by 'constrainTo'
argument, allowing specification of values to which parameters should be
constrained.
o gnm() now has 'ofInterest' argument to specify a subset of coefficients
which are of interest - returned in 'ofInterest' component of "gnm"
object as named numeric vector. print() summaries of model object/its
components extracted by accessor functions only print coefficients of
interest and (where appropriate) methods for "gnm" objects select
coefficients of interest by default.
o added ofInterest() and ofInterest<-() to extract/replace 'ofInterest'
component of "gnm" object.
o added parameters() to which returns coefficient vector with constrained
parameters replaced by their constrained value.
o added pickCoef() function to aid selection of coefficients - returns
numeric indices of coefficients selected by Tk dialog or regular
expression matching.
Improvements
------------
o 'constrain' argument to gnm() now accepts a regular expression to match
against coefficient names.
Changes in Behaviour
--------------------
o 'constrain' component of "gnm" objects is now a numeric, rather than
logical, vector of indices.
o all "gnm" methods for which a subset of the coefficients may be
specified by numeric indices now interpret those indices as
referencing the full coefficient vector (not just non-eliminated
parameters).
o gnm() now preserves order of terms rather than moving all linear
terms to the start (this fixes bug in anova.gnm()).
o the "pick" option for the 'constrain' argument to gnm() and the
'estimate' argument to se() has been replaced by "[?]" to avoid
possible conflict with coefficient names/regular expressions.
Bug Fixes
---------
o fixed bug in se() so will now work for single parameter.
o fixed bug in summary.gnm() so will now work for models with one
parameter.
o fixed bug in anova() so that rows of returned table are correct for
models with eliminated terms.
o fixed bug in eliminate() so that it now accepts interactions.
o fixed bug in MPInv() so that it works for models in which all parameters
are eliminated.
Changes in gnm 0.8-3
====================
Improvements
------------
o improved use of functions from other packages
Bug Fixes
---------
o fixed bug in asGnm.lm() where object not fully identified
o corrected maintainer address in DESCRIPTION!
Changes in gnm 0.8-2
====================
New Features
------------
o added demonstration script to run using demo()
o added package help file, opened by package?gnm
Improvements
------------
o improved existing documentation
Changes in gnm 0.8-1
====================
New Features
------------
o added the `method' argument to MPinv(), to allow the method of
calculation to be specified. Permitted values are "svd" to
compute the pseudo-inverse by singular value decomposition,
and "chol" to use the Cholseky decomposition instead. The latter
is valid only for symmetric matrices, but is usually faster
and more accurate.
o added the `lsMethod' argument to gnm(), to allow specification of
the numerical method used for least-squares calculations in the
core of the iterative algorithm. Permitted options are "chol" and
"qr".
o added new function qrSolve(), which behaves like base::qr.coef but
in the non-full-rank case gives the minimum-length solution rather
than an arbitrary solution determined by pivoting.
o added .onUnload() so that compiled code is unloaded when namespace of
package is unloaded using unloadNamespace().
o added 'coef' argument to model.matrix.gnm() so that the model matrix
can be evaluated at any specified value of the parameter vector.
o added asGnm() generic to coerce linear model objects to gnm objects.
o added exitInfo() for printing numerical details of last iteration on
non-convergence of gnm().
o added new dataset, friend, to illustrate a workaround to fit a
homogeneous RC(2) using gnm() - documented in help file for MultHomog().
Improvements
------------
o gnm() now takes less time per (main) iteration, due to improvements
made internally in the iterative algorithm. These include
pre-scaling of the local design matrix, and Levenberg-Marquardt
adjustment of the least-squares solvers so that rank determination
is no longer necessary.
o the default convergence tolerance has been tightened (from 1e-4 to 1e-6)
o modified model.matrix.gnm() so it can be used when only the namespace
of gnm is loaded.
Bug Fixes
---------
o fixed bug in gnm() so that 'subset' now works with table data.
o fixed bug in model.matrix.gnm() so can construct model matrix from "gnm"
object even when original call not made in .GlobalEnv.
o fixed bug in the examples on help page for House2001 data.
o fixed bug so that 'formula' in gnm() now accepts '.' in formulae
even when 'eliminate = NULL'.
o fixed bug in getContrasts(), so that the first two columns
of the qvframe component of each element of the result list
are correctly named as "estimate" and "SE", as required for
objects of class "qv".
Changes in gnm 0.8-0
=======================
New Features
------------
o added "model.matrix" option for 'method' argument of gnm() so that
model matrix can be obtained much faster. The new method is used in
model.matrix.gnm() and vcov.gnm().
o added new utility function residSVD(), to facilitate the calculation
of good starting values for parameters in certain Mult() terms.
o added new dataset House2001, to illustrate the use of gnm in
Rasch-type scaling of legislator votes.
o added new utility function expandCategorical() for expanding data frame
on the basis of a categorical variable.
o added formula.gnm() method - returns formula from "gnm" object excluding
the 'eliminate'd factor where necessary.
Improvements
------------
o gnm() now takes less time to run due to improvements made in internal
functions.
o the fitting algorithm used by gnm() now copes better with zero-valued
residuals.
o output given by gnm() when 'trace' = TRUE or 'verbose' = TRUE is now
displayed as it is generated on console-based versions of R.
o plot.gnm() now includes option 'which' = 5 as in plot.lm() in
R >= 2.2.0. Now has separate help page.
o the 'constrain' argument to gnm() now accepts the names of parameters.
o the 'formula' argument to gnm() now accepts '.' as described in
?terms.formula, ignoring eliminated factor if in 'data'.
o interface for se() extended - can now use to find standard errors for
all parameters or (a selection of) individual parameters in a gnm model.
o made it possible to use gnm() with alternative fitting function.
o ".Environment" attribute now attached to "gnm" objects so that gnm package
loaded when workspace containing "gnm" objects is loaded.
Changes in Behaviour
--------------------
o start-up iterations now only update column of design matrix required in
next iteration. Therefore plug-in functions using the default start-up
procedure for nonlinear parameters need a localDesignFunction() with the
argument 'ind' specifying the column that should be returned.
o modified output given by gnm() when 'trace' = TRUE: now prints initial
deviance and the deviance at the end of each iteration.
o modified updates of linear parameters in starting procedure: now offset
contribution of fully specified terms only.
o results of summary.gnm(), vcov.gnm() and coef.gnm() now include any
eliminated parameters. Print methods have been added for vcov.gnm and
coef.gnm objects so that any eliminated parameters are not shown.
o Mult() terms are no longer split into components by anova.gnm(),
termPredictors.gnm(), labels.gnm() or the "assign" attribute of the
model matrix - consistent with terms() output.
o the 'eliminate' argument to gnm() must now be an expression that
evaluates to a factor - this reverts the extension of 0.7-2.
o when using gnm() with 'constrain' = "pick", the name(s) of the chosen
parameter(s) will replace "pick" in the reurned model call.
o getContrasts() now uses first level of a factor as the reference level
(by default).
o gnmControl() replaced by arguments to gnm().
o gnm() now uses glm.fit() for linear models (with control parameters at
the gnm() defaults).unless 'eliminate'is non-NULL.
o vcov.gnm() and summary.gnm() now return variance-covariance matrices
including any aliased parameters.
o summary.gnm() now returns standard errors with test statistics etc,
where estimated parameters are identified.
Bug Fixes
---------
o fixed bug in summary.gnm(), anova.gnm(), termPredictors.gnm() and
model.matrix.gnm() where search for model variables was incorrect.
o fixed bug preventing estimation of weight parameters in Dref() terms and
changed default starting values so that these parameters no longer sum
to one or appear to be estimable.
o corrected options for 'method' argument in gnm() help file: replaced
'method' = "coef" with 'method' = "coefNames".
o fixed bug in gnm() so that it can handle tables with missing values when
formatting components of fit.
o hatvalues.gnm() now works for objects produced from table data.
o residuals.gnm() now returns table not matrix when 'type' = "deviance"
for "gnm" objects produced from table data.
o hatvalues.gnm(), cooks.distance.gnm() and plot.gnm() now handle cases
which are fitted exactly (giving a hat value of 1).
o example fitting proportional odds model in backPain help file now works.
o fixed bug in Mult() terms so that an offset can be added to a constituent
multiplier without an unspecified intercept being added also.
o gnm() argument 'constrain' = "pick" now allows selection of more than
one constraint and is compatible with use of 'eliminate'.
o gnm() can now fit models which only have the term specified by 'eliminate'.
Changes in gnm 0.7-2
=======================
Improvements
------------
o Extended use of the 'eliminate' argument of gnm() to allow crossed
factors - this also fixes bug which occurred when interactions were
eliminated in the presence of lower order terms involving other factors
Changes in Behaviour
--------------------
o 'vcov' returned by gnm() now has no rank attribute (as before, the
rank is returned as the separate component 'rank').
Bug Fixes
---------
o Changed the calculation of 'df.residual' returned by gnm() to
correctly take account of zero-weighted observations (as in glm()).
o When gnm() is called with arguments 'x' = TRUE or 'VCOV' = TRUE, the
returned matrices now include columns of zeros for constrained
parameters.
o Corrected evaluation of model frame in gnm() so that if data is missing,
variables are taken from environment(formula), as documented. Modified
evaluation of plug-in functions to be consistent with this, i.e.
objects are taken from environment(formula) if not in model frame.
o MPinv() now checks that the diagonal elements of an 'eliminate'd
submatrix are all non-zero and reports an error otherwise.
Changes in gnm 0.7-1
=======================
New Features
------------
o Topo() introduced for creating topological interaction factors.
o anova() implemented for objects of class c("gnm", "glm").
Improvements
------------
o Diagnostic messages given by gnm() have been improved.
o Step-halving introduced in main iterations of gnm() to ensure deviance
is reduced at every iteration.
o getContrasts() now (additionally) reports quasi standard errors, when
available.
o Calls to gnm() plug-in functions are now evaluated in the environment
of the model frame and the enclosing environment of the parent frame
of the call to gnm(). This means that variables can be found in a
more standard fashion.
Changes in Behaviour
--------------------
o The 'data' argument of Nonlin() is defunct: Nonlin() now identifies
variables to be added to the model frame as those passed to unspecified
arguments of the plug-in function or those identified by a companion
function to the plug-in, which is of a specified format.
o The (optional) 'start' object returned by a plug-in function can no
longer be a function, only a vector. However it may now include NA
values, to indicate parameters which may be treated as linear for the
purpose of finding starting values, given the non-NA values.
Bug Fixes
---------
o The 'eliminate' argument of gnm() now handles functions of variables in
the given formula e.g. ~ strata(A, B), ~ as.factor(A):as.factor(B), etc.
o gnm() was giving an error for models with either no linear parameters,
or none specified by the 'start' argument, this is now fixed.
o Long calls to plug-in functions caused problems in parsing the model
formula: now fixed.
o gnm() now only restarts after failing if there are unspecified nonlinear
parameters.
o gnm() now returns NULL if model fails.
o Bug fixed in calculation of starting values for gnm() that occurred when some
parameters were constrained.