New working paper “Extended-Support Beta Regression for [0, 1] Responses” by Ioannis Kosmidis and Achim Zeileis in the arXiv.org E-Print Archive, doi:10.48550/arXiv.2409.07233.
New package web page (via
altdoc
/quarto
) at https://topmodels.R-Forge.R-project.org/betareg/
Extended functionality of predict()
method for
betareg
objects and enhanced the corresponding
documentation, see ?predict.betareg
.
Turned vignette("betareg", package = "betareg")
and
vignette("betareg-ext", package = "betareg")
from Sweave
into Quarto vignettes. Some improvements/updates in the text.
Major extension in betareg()
: In addition to classic
beta regression for responses in the open interval (0, 1),
extended-support beta regression is added which can model responses in
the closed interval [0, 1] (i.e., including boundary observations at 0
and/or 1). This is accomplished by adding two new response
distributions: The extended-support beta distribution
("xbeta"
) leverages an underlying symmetric four-parameter
beta distribution with exceedence parameter nu
to obtain
support [-nu, 1 + nu] that is subsequently censored to [0, 1] in order
to obtain point masses at the boundary values 0 and 1. The
extended-support beta mixture distribution ("xbetax"
) is a
continuous mixture of extended-support beta distributions where the
exceedence parameter follows an exponential distribution with mean
nu
(rather than a fixed value of nu
). The
latter "xbetax"
specification is used by default in case of
boundary observations at 0 and/or 1. The "xbeta"
specification with fixed nu
is mostly for testing and
debugging purposes.
Quantile residuals are added to the residuals()
method for betareg
objects. They are easy to compute and
have good distributional properties. Hence, they are the new default
residuals.
Bug fix in pseudo.r.squared
computation for weighted
models where previously the weights were erroneously ignored (reported
by Ray Tayek).
Bug fixes in betatree()
: Split points were computed
incorrectly due to wrong sign of the log-likelihood (reported by Se-Wan
Jeong). And trees with only intercepts for both mu
and
phi
could not be fitted (reported by Ludwig
Hothorn).
betatree()
the "xlevels"
attribute from
partykit::mob
is now correctly stored in
$levels
(rather than $xlevels
) of the returned
object.IGNORE_RDIFF
flags in some examples in order to
avoid showing diffs due to small numeric deviations in some checks
(especially on CRAN).suppressWarnings(RNGversion("3.5.0"))
in those
places where set.seed()
was used to assure exactly
reproducible results from R 3.6.0 onwards.sctest()
method for
betatree
objects when strucchange
package is
loaded.The betatree()
function now uses the new
mob()
implementation from the partykit
package
(instead of the old party
package). The user interface
essentially remained the same but now many more options are available
through the new mob()
function. The returned model object
is now inheriting from
modelparty
/party
.
Included grDevices
in Imports.
Fixed model.frame()
method for betareg
objects which do not store the model frame in
$model
.
betamix()
gained arguments weights
(case weights for observations) and offset
(for the mean
linear predictor).
The Formula
package is now only in Imports but not
Depends (see below).
Method FLXgetModelmatrix
for FLXMRbeta
objects modified due to changes in flexmix
2.3.12.
For some datasets betareg()
would just “hang”
because dbeta()
“hangs” for certain extreme parameter
combinations (in current R versions). betareg()
now tries
to catch these cases in order to avoid the problem.
Depends/Imports/Suggests have been rearranged to conform with
current CRAN check policies. This is the last version of
betareg
to have the Formula
package in Depends
- from the next version onwards it will only be in Imports.
The predict()
method gained support for
type = "quantile"
, so that quantiles of the response
distribution can be predicted.
The Formula
package is now not only in the list of
dependencies but is also imported in the NAMESPACE
, in
order to facilitate importing betareg
in other
packages.
.Call()
-ing logit link functions directly,
instead use elements of make.link("logit")
.citation("betareg")
. The paper presents
the recently introduced features: bias correction/reduction in
betareg()
, recursive partitioning via
betatree()
, and finite mixture modeling via
betamix()
. See also
vignette("betareg-ext", package = "betareg")
for the
vignette version within the package.Formula interface for betamix()
changed to allow for
three parts in the right hand side where the third part relates to the
concomitant variables.
Modified the internal structure of vignettes/tests. The original vignettes are now moved to the vignettes directory, containing also .Rout.save files. Similarly, an .Rout.save for the examples is added in the tests directory.
Support bias-corrected (BC) and bias-reduced (BR) maximum
likelihood estimation of beta regressions. See the type
argument of betareg()
. To enable BC/BR, an additional
Fisher scoring iteration was added that (by default) also enhances the
usual ML results.
New vignette("betareg-ext", package = "betareg")
introducing BC/BR estimation along with the recent additions beta
regression trees and latent class beta regression (aka finite mixture
beta regression models).
Enabled fitting of beta regression models without coefficients in the mean equation.
Enabled usage of offsets in both parts of the model, i.e., one
can use betareg(y ~ x + offset(o1) | z + offset(o2))
which
is also equivalent to
betareg(y ~ x | z + offset(o2), offset = o1)
, i.e., the
offset
argument of betareg is employed for the mean
equation only. Consequently, betareg_object$offset
is now a
list with two elements
(mean
/precision
).
Added warning and ad-hoc workaround in the starting value
selection of betareg.fit()
for the precision model. If no
valid starting value can be obtained, a warning is issued and
c(1, 0, ..., 0)
is employed.
Added betareg_object$nobs
in the return object
containing the number of observations with non-zero weights. Then
nobs()
can be used to extract this and consequently
BIC()
can be used to compute the BIC.
New betatree()
function for beta regression trees
based on model-based recursive partitioning. betatree()
leverages the mob()
function from the party
package. For enabling this plug-in, a StatModel
constructor
betaReg()
is provided based on the modeltools
package.
New betamix()
function for latent class beta
regression, or finite mixture beta regression models.
betamix()
leverages the flexmix()
function
from the flexmix
package. For enabling this plug-in, the
driver FLXMRbeta()
is provided.
Added tests/vignette-betareg.R based on the models fitted in
vignette("betareg", package = "betareg")
.
The "levels"
element of a betareg
object is now a list with components "mean"
,
"precision"
, and "full"
to match the
"terms"
of the object.
Improved data handling bug in predict()
method.
?gleverage
.Package now published in Journal of Statistical Software, see
https://www.jstatsoft.org/v34/i02/ and citation("betareg")
within R.
Bug fix and improvements in gleverage()
method for
betareg
objects: Analytic second derivatives are now used
and variable dispersion models are handled correctly.
dbeta(..., log = TRUE)
is now used for computing the
log-likelihood which is numerically more stable than the previous
hand-crafted version.
The starting values in the dispersion regression are now chosen differently, resulting in a somewhat more robust specification of starting values. The intercept is computed as described in Ferrari & Cribari-Neto (2004), plus a link transformation (if any). All further parameters (if any) are initially set to zero. See also the vignette for details.
Various documentation improvements, especially in the vignette.
New vignette (written by Francisco Cribari-Neto and Z)
introducing the package and replicating a range of publications related
to beta regression:
vignette("betareg", package = "betareg")
provides some
theoretical background, a discussion of the implementation and several
hands-on examples.
Implemented an optional precision model, yielding variable
dispersion. The precision parameter phi
may depend on a
linear predictor, as suggested by Simas, Barreto-Souza, and Rocha
(2010). In single part formulas of type y ~ x1 + x2
,
phi
is by default assumed to be constant, i.e., an
intercept plus identity link. But it can be extended to
y ~ x1 + x2 | z1 + z2
where phi
depends on
z1 + z2
, by default through a log link.
Allowed all link functions (in mean model) that are available in
make.link()
for binary responses, and added log-log
link.
Added data and replication code for Smithson & Verkuilen
(2006, Psychological Methods). See ?ReadingSkills
,
?MockJurors
, ?StressAnxiety
as well as the
complete replication code in
demo("SmithsonVerkuilen2006")
.
Default in residuals()
(as well as in the related
plot()
and summary()
components) is now to use
standardized weighted residuals 2
(type = "sweighted2"
).
Package betareg
was orphaned on CRAN, Z took over as
maintainer, ended up re-writing the whole package. The package still
provides all functionality as before but the interface is not fully
backward-compatible.
betareg()
: More standard formula-interface
arguments; betareg
objects do not inherit from
lm
anymore.
betareg.fit()
: Renamed from br.fit()
,
enhanced interface with more arguments and returned information.
Untested support of weighted regressions is enabled.
betareg.control()
: New function encapsulating
control of optim()
, slightly modified default
values.
anova()
method was removed, use
lrtest()
from lmtest
package instead.
gen.lev.betareg()
was changed to
gleverage()
method (with new generic) and a bug in the
method was fixed.
envelope.beta()
was removed and is now included in
plot()
method for betareg
objects.
Datasets prater
and pratergrouped
were
incorporated into a single GasolineYield
dataset.
New data set FoodExpenditure
from Griffiths et
al. (1993), replicating second application from Ferrari and Cribari-Neto
(2004).
Added NAMESPACE
.
The residuals()
method now has three further types
of residuals suggested by Espinheira et al. (2008) who recommend to use
“standardized weighted residuals 2” (type = "sweighted2"
).
The default are Pearson (aka standardized) residuals.