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).

- In
`betatree()`

the`"xlevels"`

attribute from`partykit::mob`

is now correctly stored in`$levels`

(rather than`$xlevels`

) of the returned object.

- Added
`IGNORE_RDIFF`

flags in some examples in order to avoid showing diffs due to small numeric deviations in some checks (especially on CRAN).

- Added
`suppressWarnings(RNGversion("3.5.0"))`

in those places where`set.seed()`

was used to assure exactly reproducible results from R 3.6.0 onwards.

- Conditional registration of
`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.

- Avoid
`.Call()`

-ing logit link functions directly, instead use elements of`make.link("logit")`

.

- Small consistency updates in labeling coefficients for current R-devel.

- New release accompanying the second JSS paper: “Extended Beta
Regression in R: Shaken, Stirred, Mixed, and Partitioned” by Gruen,
Kosmidis, and Zeileis which appears as Journal of Statistical Software
48(11). See also
`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.

- Documentation updates for
`?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.