Atlas
statminds
GLM (Beta Logit-Link Model)The underlying model family class (e.g. GLM, linear model, categorical matrix, log-linear).Parametric ReferenceStatistical methods that assume a specific probability distribution family (typically normal).12-stage workflow

Beta Regression

The engine for Proportion Discovery. Beta regression audits outcomes that are naturally bounded between 0 and 1 (e.g., percentages, rates, or indices), revealing the drivers of relative magnitude.

Model familyGLM (Beta Logit-Link Model)
Hypothesistwo-tailed
AliasesProportion Regression · Bounded Continuous Model · Fractional Response Engine
G1
Bounded Outcome Audit
Correct for the bias caused by participants hitting the '0 to 1' ceiling and floor of a proportion.
G2
Dispersion Mapping
Simultaneously model the average rate AND the variable spread (precision) of the data.
G3
Proportional Synergy
Isolate the influence of predictors on outcomes where 'more' doesn't mean 'infinite'.
1

What is it?

Beta Regression models variables representing rates, proportions, or fractions bounded strictly between 0 and 1 (excluding limits), using a beta distribution.

2

When to use it

  • Bounded Outcomes: Dependent outcomes represent percentages or ratios.
  • Skewness Adaptability: Beta distributions can curve left or right.
  • Precision Scaling: Phi accounts for outcome variance shrinkage.
Interactive Sandbox

Beta Regression Bounded Live Laboratory

Adjust mean slope and precision parameter phi to see bounded outcome dispersion.

Presets
Mean Slope (b1)1.00
Precision (phi)15
Scatter Plot Space (Outcomes bounded between Y: 0.0 and 1.0; X range: -1..1)Fitted logit curve shown in blue
The 12-Stage Precision Workflow
01Rate Influence
Hypotheses
We test if the predictor moves the 'Mean Rate'—discovery within the tight mathematical walls of the unit interval.
02Bounded Continuity
Assumptions
Ensuring the outcome is continuous and strictly within (0, 1). If 0 or 1 values exist, the model requires specialized 'Adjustment' or 'Zero-One' pivots.
03Precision Parameter (phi)
Diagnostics
Checking the 'Precision'—the indicator of how much the spread of the data changes as the rate increases.
04focus
Predicting the 'Percentage of Pain-Free Days' per month in FlowMotion participants based on Baseline Activity and Age.
05Logit Pivot
Alternatives
Knowing when to switch to Fractional Logistic models if the outcome contains exact 0s or 1s that the pure Beta math cannot handle.
06Maximum Likelihood
Significance
Executing significance tests based on ML—ensuring p-values respect the 'S-shaped' nature of proportional discovery.
07Odds of Proportion
Effect Size
Interpreting the Odds Ratio for the proportion—e.g., 'X increases the odds of a higher recovery percentage by Y%.'
08Interval Stability
Sample Size
Accounting for the increased N required to stabilize estimates when the data clusters near the 0 or 1 boundaries.
09The Link Narrative
Reporting
Explaining the Logit link used to keep predictions within (0, 1) while narrating the real-world clinical implications.
10betareg Logic
Software
Executing the 'betareg' command, ensuring the model formula accounts for both the mean and the precision parameter.
11focus
Avoiding the error of running OLS on percentages—which leads to impossible predictions outside the 0 to 1 range.
12focus
Tracing the model back to Ferrari and Cribari-Neto (2004) and the foundational evolution of proportion forensics.
01Hypothesis test logic

Hypotheses

Pragmatic null and alternative hypotheses defined in mathematical notation.

We ask not just 'is there a link?', but 'how much does Y change for every unit of X?'
Logic Core
Null · H₀

H₀: β₁ = 0 (predictor has no effect on mean proportion μ on link scale)

Alternative · Hₐ

Hₐ: β₁ ≠ 0 (predictor affects mean proportion)

Why it matters two-tailed

Can also model dispersion: H₀: γ₁ = 0 (predictor doesn't affect variability φ). Beta regression models both mean (μ) and precision (φ) parameters.

02Model diagnostics

Assumptions

The core mathematical criteria needed to ensure that statistical testing remains unbiased and valid.

Linearity is a strong claim. Nature often curves; ensure your model does not force a straight line on a bent world.
Integrity Shield
6
Assumptions
3
Critical / High Severity
How to check
Quick
Check range of outcome: any values = 0 or = 1? Histogram should show distribution in (0,1) without boundary spikes. Beta distribution undefined at exact 0 or 1
Rigorous
summary(outcome): min > 0 and max < 1. Count boundary values: sum(y==0 | y==1). If any exist, beta regression will fail or produce errors
If violated
If 0s or 1s present: (1) Zero-one-inflated beta regression (ZOIB; mixture model); (2) Transformation: y'=(y*(n-1)+0.5)/n for n observations; (3) Add small constant: y'=0.001+(y*0.998) to push boundaries; (4) Use quasi-binomial GLM; (5) If many 0s/1s: use ordered beta regression or two-part model (logistic for boundary + beta for (0,1))
How to check
Quick
Examine study design: repeated measures? Clustered data (students within schools)? Time series (proportions over time)? Spatial clustering?
Rigorous
Plot residuals vs. time/cluster. Check for autocorrelation in residuals. Durbin-Watson test on deviance residuals
If violated
Beta regression doesn't handle dependence. Use: (1) Beta mixed-effects models with random intercepts/slopes for clusters; (2) GEE with beta family for clustered/longitudinal data; (3) Cluster-robust standard errors; (4) Time series methods for temporal dependence
gee
How to check
Quick
Most common: logit link (symmetric). Probit for symmetric, heavy tails. Cloglog for asymmetric (rare events near 0 or 1). Try multiple links and compare AIC/BIC
Rigorous
Compare models with different links (logit, probit, cloglog, log-log) using AIC, BIC, likelihood ratio tests. Residual plots should show no patterns. Check predicted values all in (0,1)
If violated
Choose appropriate link: (1) Logit (default): symmetric, most common; (2) Probit: symmetric, narrower tails; (3) Cloglog: asymmetric, proportions near 0; (4) Log-log: asymmetric, proportions near 1. Use model selection criteria (AIC/BIC) to choose
How to check
Quick
Histogram of outcome: should show unimodal distribution in (0,1), possibly skewed. Beta is flexible (U-shape, J-shape, uniform, unimodal). Avoid if multimodal
Rigorous
Fit beta regression, extract Pearson residuals. Q-Q plot of residuals should be approximately linear. Check for overdispersion: compare residual deviance to df. Fitted vs. observed plot
If violated
If beta inappropriate: (1) Multimodal: mixture models or separate subgroup analysis; (2) Overdispersed: adjust for overdispersion or use quasi-beta; (3) Alternative distributions: simplex regression, fractional logit; (4) Discrete proportions (counts/n): use binomial GLM instead
How to check
Quick
Default: constant precision (φ). If variability changes with predictors: model dispersion. Plot absolute residuals vs. predictors or fitted values; patterns suggest varying dispersion
Rigorous
Fit model with constant φ, then with variable precision model (φ ~ covariates). Compare AIC/BIC. Likelihood ratio test if nested. Check if dispersion differs across groups
If violated
If dispersion varies: specify dispersion formula in beta regression (φ ~ predictors). E.g., variability larger for intermediate proportions than extremes, or differs by group. Improves efficiency and inference
How to check
Quick
Check variance of outcome: var(y) should not be near 0 (all proportions similar). Check predictor range. If all proportions 0.48-0.52, little signal
Rigorous
Coefficient of variation for outcome. Examine predictor distributions for sufficient spread. Check if predictors explain variation: compare null model AIC to full model AIC
If violated
Insufficient variation: (1) Collect more diverse sample; (2) Re-examine measurement (ceiling/floor effects?); (3) Combine categories if discrete; (4) Accept limited conclusions. Can't detect effects without variability
03Residual Forensics

Diagnostics

Checking residual plots and indices to examine model deviations and ensure standard error integrity.

Trust, but verify. The outliers often hold more truth than the averages.
System Health
Essential checks
  1. Logit / Probit link function audit to ensure predictions remain strictly within (0, 1).
  2. Significance strike on the Precision Parameter (phi) to confirm non-zero dispersion.
  3. Standardized Weighted Residuals audit to verify the Beta-distribution fit.
  4. Pseudo R-Squared (Cribari-Neto) calculation to quantify model predictive weight.
  5. Wald tests for coefficient significance within the unit-interval scale.
Recommended checks
  1. Half-normal plot with simulated envelopes to detect residual patterning.
  2. Cook's distance audit specifically calibrated for proportion-data influence.
  3. Residuals vs. Linear Predictor plot to hunt for unmodeled non-linearity.
  4. Sensitivity audit of the Precision model (checking if phi depends on predictors).
  5. Likelihood Ratio comparison between Beta and Fractional Logistic models.
04Live Instances

Applied Minds

Review concrete study examples, data layout guidelines, and copy executable syntax scripts.

Theory is the map. Practice is the terrain. Simulation bridges the gap.
Applied Wisdom
Example 01

Exam Pass Rates (Proportion Outcome with Group Differences)

Research question: Do class size and teacher experience predict exam pass rates? Design: Observational study of N=90 classrooms. Outcome: Proportion of students passing standardized exam (continuous, 0.15 to 0.95, no 0s or 1s). Predictors: Class size (10-40 students), teacher experience (0-30 years). Goal: model proportions accounting for beta distribution, compare to inappropriate linear regression.

DesignCross-sectional observational
Outcome ScalePass rate (proportion in 0,1, no boundaries)
# Beta Regression Example 1: Exam Pass Rates
# Proportion outcome: class pass rates

library(betareg)     # Beta regression
library(ggplot2)     # Visualization
library(dplyr)       # Data manipulation
library(lmtest)      # Likelihood ratio tests

set.seed(2025)
n <- 90

# Simulate classroom data
data <- data.frame(
  class_size = sample(10:40, n, replace=TRUE),
  teacher_exp = sample(0:30, n, replace=TRUE)
)

# True model: logit(pass_rate) = 0.5 - 0.04*class_size + 0.03*teacher_exp
# Smaller classes → higher pass rates
# More experienced teachers → higher pass rates
logit_mu <- 0.5 - 0.04*data$class_size + 0.03*data$teacher_exp
mu <- plogis(logit_mu)  # Inverse logit: (0,1)

# Generate beta-distributed pass rates with precision φ=30
phi <- 30  # Higher φ = less variability
alpha <- mu * phi
beta_param <- (1 - mu) * phi
data$pass_rate <- rbeta(n, alpha, beta_param)

# Ensure no exact 0s or 1s (requirement for beta regression)
data$pass_rate <- pmax(0.001, pmin(0.999, data$pass_rate))

cat("=== Data Summary ===")
summary(data)
cat("\nPass rate range:", range(data$pass_rate), "\n")
cat("Any exact 0s or 1s?", any(data$pass_rate == 0 | data$pass_rate == 1), "\n")

# === STEP 1: Visualize Data ===
p1 <- ggplot(data, aes(x=class_size, y=pass_rate)) +
  geom_point(alpha=0.6, size=2) +
  geom_smooth(method="loess", se=TRUE, color="blue") +
  labs(title="Pass Rate vs. Class Size",
       x="Class Size", y="Pass Rate(Proportion)") +
  ylim(0, 1) +
  theme_classic()

p2 <- ggplot(data, aes(x=teacher_exp, y=pass_rate)) +
  geom_point(alpha=0.6, size=2) +
  geom_smooth(method="loess", se=TRUE, color="darkgreen") +
  labs(title="Pass Rate vs. Teacher Experience",
       x="Teacher Experience(years)", y="Pass Rate(Proportion)") +
  ylim(0, 1) +
  theme_classic()

library(gridExtra)
grid.arrange(p1, p2, ncol=2)

# Histogram of pass rates
ggplot(data, aes(x=pass_rate)) +
  geom_histogram(bins=20, fill="steelblue", color="black", alpha=0.7) +
  labs(title="Distribution of Pass Rates",
       x="Pass Rate", y="Frequency") +
  theme_classic()

# === STEP 2: WRONG APPROACH - Linear Regression (OLS) ===
# Common mistake: treating proportions as normal continuous outcome
model_ols <- lm(pass_rate ~ class_size + teacher_exp, data=data)
summary(model_ols)

cat("\n=== OLS Problems ===")
# Check for predictions outside [0,1]
pred_ols <- predict(model_ols)
cat("OLS predictions < 0:", sum(pred_ols < 0), "\n")
cat("OLS predictions > 1:", sum(pred_ols > 1), "\n")
cat("Range of OLS predictions:", round(range(pred_ols), 3), "\n")

# Check heteroscedasticity (common with proportions)
library(lmtest)
bptest(model_ols)
cat("Breusch-Pagan p-value suggests heteroscedasticity\n")

# Residual plot shows heteroscedasticity
par(mfrow=c(2,2))
plot(model_ols)
par(mfrow=c(1,1))

# === STEP 3: CORRECT APPROACH - Beta Regression ===
model_beta <- betareg(pass_rate ~ class_size + teacher_exp, data=data,
                      link="logit")  # Default: logit link
summary(model_beta)

cat("\n=== Beta Regression Results ===")
print(summary(model_beta))

# Coefficients interpretation (on logit scale)
coef_beta <- coef(model_beta)
cat("\nCoefficients(logit scale):")
print(coef_beta)

# === STEP 4: Coefficient Interpretation ===
# On logit scale: β represents change in log-odds
# For substantive interpretation: marginal effects at means

# Average marginal effects (AME)
library(margins)
margins_beta <- margins(model_beta)
summary(margins_beta)

cat("\n=== Average Marginal Effects ===")
print(summary(margins_beta))

# Manual calculation for interpretation
# At mean values:
mean_class <- mean(data$class_size)
mean_exp <- mean(data$teacher_exp)

# Predict at mean
pred_mean <- predict(model_beta, 
                     newdata=data.frame(class_size=mean_class, 
                                       teacher_exp=mean_exp),
                     type="response")

# Predict with class_size + 1
pred_class_plus1 <- predict(model_beta,
                           newdata=data.frame(class_size=mean_class+1,
                                             teacher_exp=mean_exp),
                           type="response")

cat("\n=== Substantive Interpretation ===")
cat("At mean class size(", round(mean_class, 1), ") and mean experience(",
    round(mean_exp, 1), " years):\n")
cat("Predicted pass rate:", round(pred_mean, 3), "\n")
cat("\nEffect of 1-student increase in class size:\n")
cat("New predicted pass rate:", round(pred_class_plus1, 3), "\n")
cat("Absolute change:", round(pred_class_plus1 - pred_mean, 4), 
    "(~", round((pred_class_plus1 - pred_mean)*100, 2), "percentage points)\n")

# === STEP 5: Model Diagnostics ===

# Residual plots
par(mfrow=c(2,2))

# Pearson residuals vs. fitted
resid_pearson <- residuals(model_beta, type="pearson")
fitted_beta <- fitted(model_beta)

plot(fitted_beta, resid_pearson, 
     main="Pearson Residuals vs. Fitted",
     xlab="Fitted Values", ylab="Pearson Residuals")
abline(h=0, col="red", lty=2)

# Q-Q plot
qqnorm(resid_pearson, main="Q-Q Plot(Pearson Residuals)")
qqline(resid_pearson, col="red")

# Residuals vs. class_size
plot(data$class_size, resid_pearson,
     main="Residuals vs. Class Size",
     xlab="Class Size", ylab="Pearson Residuals")
abline(h=0, col="red", lty=2)

# Residuals vs. teacher_exp
plot(data$teacher_exp, resid_pearson,
     main="Residuals vs. Teacher Experience",
     xlab="Teacher Experience", ylab="Pearson Residuals")
abline(h=0, col="red", lty=2)

par(mfrow=c(1,1))

# === STEP 6: Pseudo R-squared ===
cat("\n=== Model Fit ===")
cat("Pseudo R² (McFadden):", round(model_beta$pseudo.r.squared, 3), "\n")
cat("Log-likelihood:", round(logLik(model_beta), 2), "\n")
cat("AIC:", round(AIC(model_beta), 2), "\n")
cat("BIC:", round(BIC(model_beta), 2), "\n")

# Compare to null model
model_null <- betareg(pass_rate ~ 1, data=data)
lrtest(model_null, model_beta)

# === STEP 7: Predictions and Visualization ===

# Create prediction grid
class_range <- seq(10, 40, length.out=50)
exp_range <- seq(0, 30, length.out=50)
pred_grid <- expand.grid(class_size=class_range, teacher_exp=mean(data$teacher_exp))
pred_grid$predicted <- predict(model_beta, newdata=pred_grid, type="response")

# Plot predictions
ggplot(pred_grid, aes(x=class_size, y=predicted)) +
  geom_line(color="blue", size=1.2) +
  geom_point(data=data, aes(x=class_size, y=pass_rate), alpha=0.4) +
  labs(title="Beta Regression: Predicted Pass Rate vs. Class Size",
       subtitle=paste("Holding teacher experience at mean(", round(mean(data$teacher_exp), 1), " years)"),
       x="Class Size", y="Pass Rate") +
  ylim(0, 1) +
  theme_classic()

# Predicted vs. Observed
data$predicted_beta <- fitted(model_beta)

ggplot(data, aes(x=predicted_beta, y=pass_rate)) +
  geom_point(alpha=0.6, size=2) +
  geom_abline(slope=1, intercept=0, color="red", linetype="dashed") +
  labs(title="Predicted vs. Observed Pass Rates",
       x="Predicted Pass Rate(Beta Regression)",
       y="Observed Pass Rate") +
  xlim(0, 1) + ylim(0, 1) +
  theme_classic()

# === STEP 8: Compare OLS vs. Beta Predictions ===
data$predicted_ols <- fitted(model_ols)

ggplot(data, aes(x=class_size)) +
  geom_point(aes(y=pass_rate), alpha=0.5, size=2) +
  geom_line(aes(y=predicted_beta, color="Beta Regression"), size=1.2) +
  geom_line(aes(y=predicted_ols, color="OLS"), size=1.2, linetype="dashed") +
  scale_color_manual(values=c("Beta Regression"="blue", "OLS"="red")) +
  labs(title="Beta Regression vs. OLS Predictions",
       x="Class Size", y="Pass Rate", color="Model") +
  ylim(0, 1) +
  theme_classic()

# === STEP 9: Specific Predictions ===
new_classrooms <- data.frame(
  class_size = c(15, 25, 35),
  teacher_exp = c(5, 15, 25)
)

preds <- predict(model_beta, newdata=new_classrooms, type="response")
se_preds <- predict(model_beta, newdata=new_classrooms, type="response", se.fit=TRUE)

cat("\n=== Predictions for Specific Classrooms ===")
result_df <- cbind(new_classrooms, 
                   Predicted_Pass_Rate = round(preds, 3))
print(result_df)

# === APA-Style Reporting ===
cat("\n=== APA-Style Report ===")
cat("Beta regression was used to model exam pass rates(proportions in (0,1))\n")
cat("as a function of class size and teacher experience(N=", n, " classrooms).\n")
cat("Beta regression is appropriate for proportions, avoiding issues of linear\n")
cat("regression(predictions outside [0,1], heteroscedasticity). A logit link\n")
cat("function was used to map proportions to the real line.\n")
cat("\n")
cat("The model was significant(LR test vs. null: p < .001), with pseudo-R²=",
    round(model_beta$pseudo.r.squared, 2), ".\n")
cat("Class size had a significant negative effect(β=", round(coef_beta[2], 3),
    ", z=", round(summary(model_beta)$coefficients$mean[2,3], 2), ", p<.001),\n")
cat("indicating larger classes associated with lower pass rates. At mean teacher\n")
cat("experience, each additional student decreased pass rate by approximately\n")
cat(round(abs((pred_class_plus1 - pred_mean)*100), 2), "percentage points.\n")
cat("\n")
cat("Teacher experience had a significant positive effect(β=", round(coef_beta[3], 3),
    ", z=", round(summary(model_beta)$coefficients$mean[3,3], 2), ", p<.001).\n")
cat("Diagnostic plots showed good model fit with no systematic residual patterns.\n")
cat("Beta regression provided superior fit compared to OLS(which produced\n")
cat("out-of-range predictions and heteroscedastic residuals).\n")
Interpretation Blueprint

Beta regression (or GLM with beta-like family) correctly handles proportion outcome, ensuring predictions in (0,1). Class size negatively predicts pass rates (β≈-0.04 on logit scale, ~2% point decrease per student); teacher experience positively predicts (β≈0.03). OLS inappropriately models proportions (some predictions <0 or >1, heteroscedasticity). Beta regression superior for proportion outcomes. Pseudo-R²≈0.30-0.40. Demonstrates importance of appropriate distribution for bounded outcomes.

05Tactical Pivots

Alternatives

Structured fallback pathways for choosing alternative tests when normality or slopes requirements fail.

When the path is blocked, pivot. Rigor is not rigidity; it is the intelligent adaptation to reality.
Adaptive Strategy
Measurement Precision Ladder Ideal · Proportion / Rate (0, 1)
Ratio
Consider OLS Regression if the outcome is not bounded. Beta math chokes if predictions exceed the 0-1 walls.
Range Distortion
Proportion
Maintain Beta logic. The definitive engine for auditing recovery percentages and incidence rates.
Peak Signal
Ordinal
Pivot to Proportional Odds Regression to exploit the natural rank of discrete categories.
Threshold Loss
Nominal
Abandon Beta. Use Cramer's V or Logistic models if the 'Magnitude' of the rate is clinically irrelevant.
Identity Only
Temporal Trajectory Audit Static Proportional Snapshot
Static Rate
Single point audit.
Stay with Beta Regression. Model both the 'Rate' and the 'Precision' (dispersion).
Repeated Proportions
Trajectory changes.
Pivot to GEE or Multilevel Beta Regression to account for subject-level clustering of rates.
Adaptive Technical Safeguards · adaptive safeguards
exact 0 or 1 detected
  • Zero-One Inflated Beta (ZOIB) — Model the 'Exact Boundaries' as discrete processes alongside the proportion.
  • Fractional Logistic Regression — Use Quasi-Binomial GLM to handle data that includes exact 0s and 1s.
heteroscedastic precision
  • Precision Sub-Model — Explicitly model the 'phi' parameter as a function of your predictors.
  • Robust Standard Errors — Protect p-values from non-constant dispersion across the unit interval.
non linear logit links
  • Beta-GAM — Apply smoothing splines to the proportional predictors to capture curved recovery paths.
06Adjusted Comparisons

Post-hoc

Group mean comparisons and correction controls (e.g. Tukey HSD, Bonferroni) to protect against Family-Wise Error Rates.

The omnibus test opens the door; post-hoc analysis explores the room.
Forensic Detail
Adjusted Comparisons

Post-hoc pairwise tests defined for this model.

Interpretation Guidelines

Beta regression is unique because it models both the 'Center' and the 'Spread' of percentages. Post-hoc forensics should audit both to reveal if your intervention makes outcomes more positive OR simply more predictable.

07Standardized scale impact

Effect Size

Understanding effect sizes (e.g., Cohen's d, Partial Eta-Squared) and clinical impact benchmarks.

Significance is noise. Magnitude is the signal. Measure the impact, not just the probability.
Impact Magnitude

McFadden R²: 0.2-0.4 excellent fit for proportions. Cox-Snell and Nagelkerke R² also used. NOT directly comparable to OLS R²; indicates relative improvement over null model

AME shows average change in proportion (0-1 scale) for 1-unit predictor increase. Easier to interpret than coefficients on link scale. E.g., AME=0.03 → 3 percentage point increase

For logit link: OR = exp(β). OR>1 increases odds, OR<1 decreases odds. E.g., OR=1.5 → 50% higher odds per unit increase

Predicted proportions at specific covariate values (e.g., 'At class size=25, predicted pass rate=0.72'). Most interpretable for applied work

φ (phi): higher values indicate less variability (more precise). Can model as function of predictors in variable dispersion models

Recommended Metric: Report pseudo R², average marginal effects for key predictors, and predicted proportions at meaningful covariate values (e.g., quartiles). For logit link, can report odds ratios alongside AMEs
Small
0.2
Medium
0.5
Large
0.8
0.50
Report pseudo R², average marginal effects for key predictors, and predicted proportions at meaningful covariate values (e.g., quartiles). For logit link, can report odds ratios alongside AMEs
Recommended Measure
5
Available Metrics
ReportUse Report pseudo R², average marginal effects for key predictors, and predicted proportions at meaningful covariate values (e.g., quartiles). For logit link, can report odds ratios alongside AMEs to represent clinical impact magnitude.
08Statistical Power

Sample Size

Guidelines for minimum sample requirements and power analysis parameters.

An underpowered study is an ethical failure. Respect the data by collecting enough of it.
Power Protocol
Floor Requirements

At least 25-30 observations per predictor for stable estimates. For variable dispersion models, need larger n (50+ per predictor). Beta regression more demanding than OLS due to non-linearity

Effect SizeParametersRequired n
Small Effectα=.05, power=.80n ≈ 650-700
Medium Effectα=.05, power=.80n ≈ 100-120
Large Effectα=.05, power=.80n ≈ 50-60
G*Power StrategyNo standard power analysis tools for beta regression. Use simulation-based power analysis or approximate with binomial GLM power. Generally need 10-20% larger sample than OLS for equivalent power
09APA narrative blueprint

Reporting

How to compile statistical results into publication prose matching APA and journal style guides.

The Beta coefficient is the currency of change. Interpret it in real-world units, not just standardized abstractions.
Narrative Arc
Worked APA paragraph example
Beta regression was used to model exam pass rates (proportions ranging from 0.15 to 0.95, N=90 classrooms, no boundary values) as a function of class size and teacher experience. A logit link function was used to map proportions to the real line. The model fit significantly better than the null model (LR χ²(2)=45.3, p<.001) with pseudo-R²=0.38 (McFadden). Class size negatively predicted pass rates (β=-0.041, SE=0.008, z=-5.2, p<.001, AME=-0.024), indicating each additional student decreased pass rate by approximately 2.4 percentage points. Teacher experience positively predicted pass rates (β=0.029, SE=0.006, z=4.8, p<.001, AME=0.017), with each additional year of experience increasing pass rate by 1.7 percentage points. At mean teacher experience (15 years), predicted pass rates were 0.72 for class size 20 vs. 0.58 for class size 35. Residual diagnostics showed good model fit with no systematic patterns.
Reusable template

Beta regression was used to model proportion outcome (range: min, max, N=n with X observations at boundaries if applicable) as a function of predictors. If ZOIB: Zero-one-inflated beta regression was used due to X observations with exact 0 or 1 values. A logit/probit/cloglog link function was used and variable precision model if applicable. State assumption checks and model selection. The model showed good/adequate fit (pseudo-R²=X.XX, AIC=XXX). For each predictor: Predictor significantly predicted outcome (β=X.XX on link scale, z=X.XX, p=.XXX, average marginal effect=X.XX, indicating substantive interpretation). If variable dispersion: Precision modeling showed predictor affected variability (γ=X.XX, z=X.XX, p=.XXX). Predicted proportions at specific values were X.XX (95% CI X.XX, X.XX).

Essential statistics to report
  • Link function used (logit, probit, cloglog)
  • Sample size and outcome range (check for 0s/1s)
  • Model type: constant vs. variable precision; standard vs. ZOIB
  • Pseudo R² and AIC/BIC for model comparison
  • For each predictor: β (link scale), SE, z-statistic, p-value
  • Average marginal effects (AME) for substantive interpretation
  • Predicted proportions at meaningful covariate values with CIs
  • If variable dispersion: precision model coefficients γ
  • Likelihood ratio test vs. null model
  • Residual diagnostics (plots mentioned)
10Exhibit Builder

Manuscript Lab

Copy standard summary tables and forensic reporting grids to outline analysis details.

Table 1: Beta Regression for Proportions (0-1 Range)
PredictorB (Logit)SEzpOR (Proportional Odds)
(Intercept)-0.150.08-1.87.0620.86
Dosage0.450.104.50< .0011.57
Duration-0.220.05-4.40< .0010.80
Note. Outcome: Recovery Percentage (0.0 to 1.0). N = 120. Link Function: Logit.
Dosage (p < .001)Powerful linear link in the logit space. Treatment is highly effective at shifting patients toward the 1.0 (Full Recovery) boundary.
Header glossary

The Improvement Odds. OR = 1.57 means for every unit of Dosage, the 'odds' of being in a higher recovery percentage increase by 57%.

Ensures that predicted percentages never fall below 0% or exceed 100%—a common failure of OLS.

11Algorithmic Logic

Command Center

Syntax libraries and function parameters for executing calculations in stats packages.

Code your model to handle residuals. The errors tell you what your model missed.
Execution Engine
# 1. Fit Beta Model
model <- betareg::betareg(recovery ~ dosage + duration, data = df)

# 2. Extract Odds Ratios
exp(coef(model))
Library stack
R
betaregemmeans
Python
statsmodels
Elite Forensic Strike

If your outcome is a proportion (like 'percentage correct'), OLS will produce 'Impossible Predictions' (e.g., 105% recovery). Beta regression is the mathematically correct choice.

# Execute Residual Audit (Beta distribution residuals)
performance::check_model(model)
12The Over-adjustment Trap

Common Mistakes

Analytical caveats and corrections to maintain modeling integrity.

Wisdom is learning from the failures of others. Anticipate the error before it occurs.
Defensive Logic
Why it's wrong
Beta distribution is defined only on OPEN interval (0,1), EXCLUDING exact 0 and 1. If data contain any exact boundary values, beta regression will fail (error) or produce invalid results. This is mathematical impossibility, not software limitation
The correction
Check outcome range: sum(y==0 | y==1). If any boundaries: (1) BEST: Use zero-one-inflated beta (ZOIB) regression (mixture model: gamlss.inf::BEINF, zoib package); (2) QUICK FIX: Transform using y'=(y*(n-1)+0.5)/n (Smithson-Verkuilen); (3) Add small constant: y'=0.001+(y*0.998); (4) If many 0s/1s: use two-part model (logistic for boundary + beta for middle). Report which method used and why
Why it's wrong
OLS treats proportions as unbounded continuous variables, producing predictions <0 or >1 (impossible proportions). Also causes heteroscedasticity (variance highest at p=0.5, lower near 0/1) and non-normal residuals. Confidence intervals and p-values invalid
The correction
ALWAYS use beta regression (or logistic/binomial GLM) for proportions. Beta regression: (1) ensures predictions in (0,1); (2) handles heteroscedasticity naturally via beta distribution; (3) allows flexible link functions. Compare OLS vs. beta predictions to show OLS failures
Why it's wrong
Standard beta regression assumes constant precision φ (homogeneous variance). If variability differs (e.g., more variable for intermediate proportions, or differs by group), constant-φ model is misspecified. Leads to inefficient estimates and poor fit
The correction
Check if variance changes: plot |residuals| vs. predictors or fitted values; compare variance across groups. If heterogeneous: specify variable precision model (y ~ x1 + x2 | z, where z predicts precision). Compare AIC/BIC and LR test. Variable dispersion often improves fit substantially
Why it's wrong
Beta regression coefficients are on LINK scale (logit, probit, etc.), not original proportion scale. β=0.5 on logit ≠ 0.5 proportion increase. Effect depends on baseline proportion due to non-linearity. Reporting β alone is hard to interpret substantively
The correction
Report coefficients on link scale (for modeling transparency) BUT ALSO: (1) Average marginal effects (AME): average change in proportion per unit X; (2) Predicted proportions at specific values (e.g., 'At X=10, ŷ=0.72; at X=20, ŷ=0.58'); (3) For logit link: odds ratios exp(β) if desired. AMEs most interpretable for applied audiences
Why it's wrong
Beta distribution is flexible but not always appropriate. If data multimodal, severely skewed, or have other distributional issues, beta regression will fit poorly. Ignoring diagnostics leads to invalid inference and poor predictions
The correction
ALWAYS check: (1) Pearson residuals vs. fitted values (random scatter); (2) Q-Q plot of residuals (approximately normal); (3) Residuals vs. each predictor (no patterns); (4) Predicted vs. observed plot (on diagonal). If poor fit: try different link functions, variable dispersion, transformations, or alternative models (simplex regression, fractional logit)
Why it's wrong
Beta regression designed for CONTINUOUS proportions (e.g., % of exam completed, proportion of time spent). For discrete proportions from count data (k successes out of n trials), binomial distribution more appropriate. Beta ignores information about denominator (n)
The correction
Discrete proportions (k/n): use binomial GLM (logistic regression) with cbind(successes, failures) as outcome, or quasi-binomial for overdispersion. Continuous proportions (%, rates): use beta regression. If n varies across observations and using beta, consider weighting or binomial model
Why it's wrong
Pseudo R² (McFadden, Cox-Snell) NOT comparable to OLS R². Pseudo R² typically much lower; 0.2-0.4 considered excellent fit for GLMs/beta regression. Expecting R²>0.7 (as in OLS) is unrealistic. Different formulas, different interpretations
The correction
Don't compare pseudo R² to OLS R². For beta regression: pseudo R²>0.2 is good fit, >0.4 excellent. Focus on: (1) Pseudo R² for relative comparison (model A vs. model B); (2) AIC/BIC for model selection; (3) Predicted vs. observed plots; (4) Substantive interpretation of effects. Report pseudo R² but don't over-interpret absolute value
Why it's wrong
Logit link (default) is symmetric and works well for proportions near 0.5, but may fit poorly for asymmetric distributions (proportions bunched near 0 or 1). Other links (probit, cloglog, log-log) handle asymmetry better. Dogmatically using logit loses flexibility
The correction
Try multiple link functions and compare: (1) Logit (symmetric, most common); (2) Probit (symmetric, narrower tails); (3) Cloglog (asymmetric, proportions near 0); (4) Log-log (asymmetric, proportions near 1). Compare AIC/BIC and residual plots. Choose based on fit, not habit. Report which link used and why (model selection)
13Academic Lineage

References

Scholarly lineage and citation keys grounding the statistical framework.

We stand on the shoulders of giants. Honor the source of the method.
Academic Lineage
[1]
Ferrari, S., & Cribari-Neto, F. (2004). Beta regression for modelling rates and proportions. Journal of Applied Statistics, 31(7), 799-815.
Seminal paper introducing beta regression. Demonstrates advantages over linear regression for proportions, provides R implementation (betareg package)
doi: 10.1080/0266476042000214501
[2]
Smithson, M., & Verkuilen, J. (2006). A better lemon squeezer? Maximum-likelihood regression with beta-distributed dependent variables. Psychological Methods, 11(1), 54-71.
Comprehensive tutorial for psychologists. Covers variable dispersion models, boundary value handling (transformation), and practical examples
doi: 10.1037/1082-989X.11.1.54
[3]
Cribari-Neto, F., & Zeileis, A. (2010). Beta regression in R. Journal of Statistical Software, 34(2), 1-24.
Authoritative guide to betareg R package. Explains implementation, diagnostics, variable dispersion, link functions, and residual analysis
doi: 10.18637/jss.v034.i02
[4]
Ospina, R., & Ferrari, S. L. (2012). A general class of zero-or-one inflated beta regression models. Computational Statistics & Data Analysis, 56(6), 1609-1623.
Develops zero-one-inflated beta (ZOIB) regression for proportions with boundary values. Mixture model approach with 3 components
doi: 10.1016/j.csda.2011.10.005
[5]
Simas, A. B., Barreto-Souza, W., & Rocha, A. V. (2010). Improved estimators for a general class of beta regression models. Computational Statistics & Data Analysis, 54(2), 348-366.
Technical improvements to beta regression estimation. Bias-corrected and bias-reduced estimators for small samples
doi: 10.1016/j.csda.2009.08.017
[6]
Hunger, M., Döring, A., & Holle, R. (2012). Longitudinal beta regression models for analyzing health-related quality of life scores over time. BMC Medical Research Methodology, 12, 144.
Applied paper showing beta regression for longitudinal quality-of-life scores (proportions). Extensions to mixed-effects and GEE
doi: 10.1186/1471-2288-12-144
A proportion is a story of limits. If your model doesn't respect the boundary, it doesn't respect the data. Use Beta to find the truth within the interval.
The Interpretive Rigor Directive
statminds · BetaMind reference · v2.2 · updated 2026-01-1715 of 15 sections