I am quite new to regression in R. I would like to analyse the relationship between 'Vegetation Cover'(response variable) and a single predictor variable 'Canopy Openness'. 'Vegetation Cover' is a percentage (sum of 3 microplots per plot) and contains many (true) zeros (> 50 %). 'Canopy Openness' is averaged from 3 measurements inside the same plot and a percentage as well.

This is what the data looks like:

'data.frame':   42 obs. of  3 variables:
$ Plot_ID: int  1 2 3 5 9 10 12 13 14 17 ...
$ VegCover: num  0 38.4667 36.9 5.1 0.0333 ...
$ CanOpe: num  12.71 51.04 60.16 6.33 18.41 ...

The distribution of the response variable: if [1]: https://i.sstatic.net/8WR98.png

Am I right to look for zero-inflated beta regression models?

If so, which R-package would you recommend to use on this data? gamlss, pscl or brm?

Any advice is greatly appreciated!

  • $\begingroup$ Yes, a zero inflated Beta model can be a good starting point. brms can fit that type of model. Bear in mind that the Beta distribution has a support equal to (0, 1), so you need to express the percentages as ratios in that interval. $\endgroup$
    – piplustwo
    Commented Aug 6, 2020 at 9:37
  • $\begingroup$ Hi @ping, Thank you so much for your detailed answer. When trying to use brm in R with the code: brm(bf(VegCover ~ CanOpe, phi ~ CanOpe, zi ~ CanOpe, family = zero_inflated_beta()), df) I get the Error Error in brm(bf(VegCover ~ CanOpe), : unused arguments (data = df, iter = 5000) Any idea how to solve this? Thanks $\endgroup$
    – RudW
    Commented Aug 12, 2020 at 10:05
  • $\begingroup$ try putting family outside of bf. $\endgroup$
    – piplustwo
    Commented Aug 12, 2020 at 10:11
  • $\begingroup$ there is still an error. now I get: ...unused arguments (family = zero_inflated_beta(), data = df, iter = 5000) $\endgroup$
    – RudW
    Commented Aug 12, 2020 at 10:18
  • $\begingroup$ brm(formula=bf(VegCover ~ CanOpe, phi ~ CanOpe, zi ~ CanOpe), family=zero_inflated_beta, data=df, n.iter=5000) $\endgroup$
    – piplustwo
    Commented Aug 12, 2020 at 10:32

1 Answer 1


From the histogram, it's plausible to consider a zero-inflated model.

Since your VegCover is expressed as a percentage, you can consider a Beta distribution for the non-zero component of the model.

I would suggest using brms, so that you can start getting used to Bayesian regression.

Bear in mind that you need to divide the shown percentages by 100, in order to get the right ratios in the $(0,1)$ interval (the support for the Beta).

An important aspect of the zero-inflated models. When using this approach, you are considering the zero as coming from two different processes. An example can be that the first process is one where it's impossible for the observation to be non-zero (let's say the number of twins, considering women with no children). Then the other zeros are modelled from the specific non-zero distribution (like Poisson, you can have a non-zero probability to observe zero counts). This means that the zeros are modelled as a mixture of the two distributions.
In the case of a zero-inflated Beta, the non-zero component of the model is not defined for $x=0$, thus all the zeros are assigned to a different generating process. This means that all observed zeros are qualitatively different from the non-zero observations.

A general issue arises from the fact that you cannot fit a Beta with values equal to 0 or 1. In that case, you may consider a zero-one inflated Beta model. Here you can find more details about this model https://www.r-bloggers.com/better-living-through-zero-one-inflated-beta-regression/


Ospina, R., & Ferrari, S. L. P. (2010). Inflated beta distributions. Statistical Papers, 51(1), 111-126. Ospina, R., & Ferrari, S. L. P. (2012). A general class of zero-or-one inflated beta regression models. Computational Statistics and Data Analysis, 56(6), 1609 - 1623.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.