Interpretation of Zero-One Inflated Beta Regression Parameters

Overview

I have an outcome variable that is a percentage with some 0% and 100% included. My main goal is to test the difference between two groups on this percentage. I am using brms and zero_one_inflated_beta().

brms code

fit <- brm(
  formula = bf(
    pct ~ 1 + group + (1 | participant) + (1 | target),
    phi ~ 1 + group + (1 | participant) + (1 | target),
    zoi ~ 1 + group + (1 | participant) + (1 | target),
    coi ~ 1 + group + (1 | participant) + (1 | target)
  ),
  family = zero_one_inflated_beta(),
  ...
)

Results

Here are my results (simplified to just median and pd for your readability):

Parameter     Median      pd
(Intercept)   -1.19     100%
phi_Intercept  1.74     100%
zoi_Intercept -3.44     100%
coi_Intercept -7.60     100%
group1	       0.38	  99.36%
phi_group1	  -0.39	  99.74%
zoi_group1     0.54   76.92%
coi_group1     3.72   99.05%

Density Definitions

image
image

Interpretation

Here is my interpretation. I’d greatly appreciate a confirmation that this is right or a correction.

(Intercept) = \mu, the beta distribution’s mean parameter (in logit units), for group0

phi_Intercept = \phi, the beta distribution’s precision parameter (in log units), for group0

zoi_Intercept = \alpha, the probability that an observation is either a zero or a one (in logit units), for group0

coi_Intercept = \gamma, the probability that an observation is a one given that it is either a zero or a one (in logit units), for group0

group1 = the difference between group1 and group0 in \mu (in logit units), the beta distribution’s mean parameter

phi_group1 = the difference between group1 and group0 in \phi (in log units), the beta distribution’s precision parameter

zoi_group1 = the difference between group1 and group0 in \alpha, the probability that an observation is either a zero or a one (in logit units)

coi_group1 = the difference between group1 and group0 in \gamma, the probability that an observation is a one given that it is either a zero or a one (in logit units)

Questions

In addition to a confirmation that the above interpretations are right, please help with me this question:
Can I (and how do I) test the following hypotheses?

  1. The groups differ on the overall probability of a one occurring

  2. The groups differ on the overall probability of a zero occurring

  3. The groups differ on the overall mean score, inclusive of the zero, one, and beta components

I assume that I will use hypothesis() and do some parameter algebra, perhaps converting back from logit units to probabilities?

2 Likes

I think I figured it out based on the density definitions and the posterior_epred_zero_one_inflated_beta() function below:

Answer

Probability of 1 = \alpha\gamma
Probability of 0 = \alpha(1 - \gamma)
Total Score = \alpha\gamma + (1-\alpha)\mu

hypothesis(
  fit, 
  c(
    "mu group0" = "plogis(Intercept) = 0",
    "mu group1" = "plogis(Intercept + group1) = 0",
    "mu group1 - mu group0" = "plogis(Intercept + group1) > plogis(Intercept)",
    "p0 group0" = "plogis(zoi_Intercept)*(1 - plogis(coi_Intercept)) = 0",
    "p0 group1" = "plogis(zoi_Intercept + zoi_group1)*(1 - plogis(coi_Intercept + coi_group1)) = 0",
    "p0 group1 - p0 group0" = "plogis(zoi_Intercept + zoi_group1)*(1 - plogis(coi_Intercept + coi_group1)) > plogis(zoi_Intercept)*(1 - plogis(coi_Intercept))",
    "p1 group0" = "plogis(zoi_Intercept)*(plogis(coi_Intercept)) = 0",
    "p1 group1" = "plogis(zoi_Intercept + zoi_group1)*(plogis(coi_Intercept + coi_group1)) = 0",
    "p1 group1 - p1 group0" = "plogis(zoi_Intercept + zoi_group1)*(plogis(coi_Intercept + coi_group1)) > plogis(zoi_Intercept)*(plogis(coi_Intercept))",
    "total group0" = "plogis(zoi_Intercept)*plogis(coi_Intercept) + plogis(Intercept)*(1 - plogis(zoi_Intercept)) = 0",
    "total group1" = "plogis(zoi_Intercept + zoi_group1)*plogis(coi_Intercept + coi_group1) + plogis(Intercept + group1)*(1 - plogis(zoi_Intercept + zoi_group1)) = 0",
    "total group1 - total group0" = "plogis(zoi_Intercept + zoi_group1)*plogis(coi_Intercept + coi_group1) + plogis(Intercept + group1)*(1 - plogis(zoi_Intercept + zoi_group1)) > plogis(zoi_Intercept)*plogis(coi_Intercept) + plogis(Intercept)*(1 - plogis(zoi_Intercept))"
  )
)
6 Likes