When Using OLS Hurts

Re-examining the Relationship Between Tenure Denial and Race in Masters-Waage et al. (2024)

People often use OLS for bounded continuous variables even though we know it isn’t the correct model. Ordered beta regression is a better model–but hard to predict when the results will change. For the article discussed in this blog post, OLS hid an important empirical relationship in the data.
R
Statistics
Ordered Beta Regression
Tenure
Race
Author

Robert Kubinec

Published

May 14, 2026

Background

Masters-Waage et al. (2024) examine whether underrepresented minority (URM) faculty receive less favourable voting outcomes during tenure and promotion reviews. The main analyses use ordinary least squares (OLS) regression for two key continuous outcomes:

  • Department-level negative vote percentage (department_negative_vote_percentage): the share of department members voting against the candidate
  • College-level negative vote percentage (college_committee_negative_vote_percentage): the share of college committee members voting against the candidate

Both outcomes are proportions bounded strictly in [0, 1] and often pile up at the boundaries (unanimous votes). OLS does not respect these boundaries and can produce biased estimates when the outcome distribution is skewed or boundary-heavy. Ordered beta regression (ordbetareg) is purpose-built for such outcomes: it handles zeros and ones directly as a mixture component and models the interior with a beta distribution.

This post re-runs every lm model that uses department_negative_vote_percentage as the outcome and compares the results to ordbetareg. The question is simple: does the choice of model change the substantive conclusions?


Distribution of the Outcome

Show the code
ggplot(candidates, aes(x = department_negative_vote_percentage)) +
  geom_histogram(bins = 30, fill = "#0072B2", color = "white", alpha = 0.8) +
  scale_x_continuous(labels = scales::percent_format()) +
  labs(
    title = "Distribution of Department Negative Vote Percentage",
    x     = "Department negative vote %",
    y     = "Count"
  ) +
  theme_minimal(base_size = 13)


1 · URM Status → Dept. Negative Vote % (No Controls, Full Sample)

Models

Show the code
lm1 <- lm(
  scaled_department_negative_vote_percentage ~ candidate_urm_num,
  data = candidates
)

ord1 <- ordbetareg(
  department_negative_vote_percentage ~ candidate_urm_num,
  data    = candidates,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 3.2 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 3.1 seconds.

Both chains finished successfully.
Mean chain execution time: 3.1 seconds.
Total execution time: 6.5 seconds.

LM summary

Show the code
summary(lm1)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num, 
    data = candidates)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.5373 -0.3828 -0.3828 -0.3828  4.7822 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)       -0.01478    0.02778  -0.532   0.5947  
candidate_urm_num  0.15445    0.09258   1.668   0.0955 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.9992 on 1420 degrees of freedom
  (149 observations deleted due to missingness)
Multiple R-squared:  0.001956,  Adjusted R-squared:  0.001253 
F-statistic: 2.783 on 1 and 1420 DF,  p-value: 0.09549

Ordbetareg summary

Show the code
summary(ord1)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num 
   Data: data (Number of observations: 1422) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                  Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept            -0.94      0.06    -1.05    -0.82 1.00     1840     1593
candidate_urm_num     0.30      0.13     0.03     0.54 1.00     2386     1716

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         3.57      0.26     3.07     4.10 1.00     2331     1457
cutzero     0.23      0.08     0.07     0.40 1.00     2046     1605
cutone      1.12      0.07     0.99     1.26 1.00     2212     1299

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm1, ord1, "URM → dept. negative vote % — no controls, full sample")
URM → dept. negative vote % — no controls, full sample
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.154
[-0.027, 0.336]
b_candidate_urm_num 0.305
[0.035, 0.542]
Num.Obs. 1422 1422
R2 0.002 0.003
R2 Adj. 0.001
AIC 4037.2
BIC 4053.0
Log.Lik. -2015.600
ELPD -764.5
ELPD s.e. 25.5
LOOIC 1529.0
LOOIC s.e. 50.9
WAIC 1528.9
RMSE 1.00 0.19

2 · URM Status → Dept. Negative Vote % (Full Controls, Full Sample)

The full control set matches the main specification in the paper.

Models

Show the code
lm2 <- lm(
  scaled_department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + promotion_to_full_professor +
    scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data = candidates
)

ord2 <- ordbetareg(
  department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + promotion_to_full_professor +
    scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data    = candidates,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 32.6 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 21.5 seconds.

Both chains finished successfully.
Mean chain execution time: 27.1 seconds.
Total execution time: 56.7 seconds.

LM summary

Show the code
summary(lm2)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num + 
    candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + 
    promotion_to_full_professor + scaled_years_in_present_rank + 
    candidate_discipline_cip_category_as_numeric + school_code, 
    data = candidates)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.3950 -0.4894 -0.2672  0.0087  4.9164 

Coefficients:
                                               Estimate Std. Error t value
(Intercept)                                    -0.67773    0.69754  -0.972
candidate_urm_num                               0.08492    0.10233   0.830
candidate_gender_num                           -0.05543    0.06191  -0.895
scaled_pi_grants                               -0.02246    0.03030  -0.741
candidate_discipline_stem_status_sbs_included   0.06232    0.16082   0.388
promotion_to_full_professor                     0.16739    0.05955   2.811
scaled_years_in_present_rank                    0.07755    0.02800   2.769
candidate_discipline_cip_category_as_numericAA -0.23166    1.19147  -0.194
candidate_discipline_cip_category_as_numericAB  0.58516    0.70624   0.829
candidate_discipline_cip_category_as_numericAC  0.59478    0.88799   0.670
candidate_discipline_cip_category_as_numericAD  0.40090    0.72329   0.554
candidate_discipline_cip_category_as_numericAE  0.74594    0.70737   1.055
candidate_discipline_cip_category_as_numericAF  0.41399    0.72596   0.570
candidate_discipline_cip_category_as_numericAG  0.28892    0.72944   0.396
candidate_discipline_cip_category_as_numericC   0.28556    0.78413   0.364
candidate_discipline_cip_category_as_numericD   0.30968    0.69553   0.445
candidate_discipline_cip_category_as_numericE   0.48786    0.71081   0.686
candidate_discipline_cip_category_as_numericF   0.43364    0.69904   0.620
candidate_discipline_cip_category_as_numericG   0.19531    0.71443   0.273
candidate_discipline_cip_category_as_numericH   0.29383    0.70369   0.418
candidate_discipline_cip_category_as_numericI   0.25941    0.70765   0.367
candidate_discipline_cip_category_as_numericJ   0.07596    0.72673   0.105
candidate_discipline_cip_category_as_numericL  -0.16088    1.19078  -0.135
candidate_discipline_cip_category_as_numericM   0.62185    0.73835   0.842
candidate_discipline_cip_category_as_numericN   0.83905    0.71510   1.173
candidate_discipline_cip_category_as_numericO   0.37071    0.71383   0.519
candidate_discipline_cip_category_as_numericP   0.31803    0.72349   0.440
candidate_discipline_cip_category_as_numericQ   0.01440    1.19747   0.012
candidate_discipline_cip_category_as_numericR   0.48408    0.72534   0.667
candidate_discipline_cip_category_as_numericS  -0.01705    0.75575  -0.023
candidate_discipline_cip_category_as_numericT   0.09067    0.71152   0.127
candidate_discipline_cip_category_as_numericU   0.34568    0.70707   0.489
candidate_discipline_cip_category_as_numericV   0.04437    0.73176   0.061
candidate_discipline_cip_category_as_numericW   0.05074    0.71733   0.071
candidate_discipline_cip_category_as_numericX   0.03997    0.75550   0.053
candidate_discipline_cip_category_as_numericY   0.32980    0.70229   0.470
candidate_discipline_cip_category_as_numericZ   0.35763    0.76127   0.470
school_code3                                    0.23778    0.09854   2.413
school_code4                                    0.24414    0.11085   2.202
school_code6                                    0.03145    0.14462   0.217
school_code9                                    0.26903    0.10903   2.468
                                               Pr(>|t|)   
(Intercept)                                     0.33144   
candidate_urm_num                               0.40676   
candidate_gender_num                            0.37074   
scaled_pi_grants                                0.45878   
candidate_discipline_stem_status_sbs_included   0.69842   
promotion_to_full_professor                     0.00502 **
scaled_years_in_present_rank                    0.00570 **
candidate_discipline_cip_category_as_numericAA  0.84587   
candidate_discipline_cip_category_as_numericAB  0.40752   
candidate_discipline_cip_category_as_numericAC  0.50311   
candidate_discipline_cip_category_as_numericAD  0.57949   
candidate_discipline_cip_category_as_numericAE  0.29185   
candidate_discipline_cip_category_as_numericAF  0.56860   
candidate_discipline_cip_category_as_numericAG  0.69212   
candidate_discipline_cip_category_as_numericC   0.71579   
candidate_discipline_cip_category_as_numericD   0.65623   
candidate_discipline_cip_category_as_numericE   0.49263   
candidate_discipline_cip_category_as_numericF   0.53515   
candidate_discipline_cip_category_as_numericG   0.78461   
candidate_discipline_cip_category_as_numericH   0.67634   
candidate_discipline_cip_category_as_numericI   0.71400   
candidate_discipline_cip_category_as_numericJ   0.91678   
candidate_discipline_cip_category_as_numericL   0.89255   
candidate_discipline_cip_category_as_numericM   0.39983   
candidate_discipline_cip_category_as_numericN   0.24089   
candidate_discipline_cip_category_as_numericO   0.60363   
candidate_discipline_cip_category_as_numericP   0.66032   
candidate_discipline_cip_category_as_numericQ   0.99041   
candidate_discipline_cip_category_as_numericR   0.50466   
candidate_discipline_cip_category_as_numericS   0.98200   
candidate_discipline_cip_category_as_numericT   0.89862   
candidate_discipline_cip_category_as_numericU   0.62500   
candidate_discipline_cip_category_as_numericV   0.95165   
candidate_discipline_cip_category_as_numericW   0.94362   
candidate_discipline_cip_category_as_numericX   0.95782   
candidate_discipline_cip_category_as_numericY   0.63872   
candidate_discipline_cip_category_as_numericZ   0.63859   
school_code3                                    0.01596 * 
school_code4                                    0.02783 * 
school_code6                                    0.82789   
school_code9                                    0.01374 * 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.9687 on 1220 degrees of freedom
  (310 observations deleted due to missingness)
Multiple R-squared:  0.06089,   Adjusted R-squared:  0.0301 
F-statistic: 1.978 on 40 and 1220 DF,  p-value: 0.0003164

Ordbetareg summary

Show the code
summary(ord2)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num + candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + promotion_to_full_professor + scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + school_code 
   Data: data (Number of observations: 1261) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                                               Estimate Est.Error l-95% CI
Intercept                                         -2.60      0.90    -4.44
candidate_urm_num                                  0.26      0.15    -0.05
candidate_gender_num                              -0.06      0.10    -0.27
scaled_pi_grants                                  -0.06      0.05    -0.15
candidate_discipline_stem_status_sbs_included     -0.23      0.24    -0.68
promotion_to_full_professor                        0.37      0.09     0.19
scaled_years_in_present_rank                       0.09      0.04     0.01
candidate_discipline_cip_category_as_numericAA    -2.80      3.44   -10.55
candidate_discipline_cip_category_as_numericAB     1.17      0.91    -0.54
candidate_discipline_cip_category_as_numericAC     1.28      1.22    -1.08
candidate_discipline_cip_category_as_numericAD     0.95      0.92    -0.85
candidate_discipline_cip_category_as_numericAE     1.40      0.91    -0.30
candidate_discipline_cip_category_as_numericAF     1.45      0.93    -0.32
candidate_discipline_cip_category_as_numericAG    -1.09      1.41    -4.23
candidate_discipline_cip_category_as_numericC      0.82      0.99    -1.04
candidate_discipline_cip_category_as_numericD      0.71      0.88    -0.97
candidate_discipline_cip_category_as_numericE      1.44      0.89    -0.26
candidate_discipline_cip_category_as_numericF      0.98      0.90    -0.75
candidate_discipline_cip_category_as_numericG      0.30      1.00    -1.53
candidate_discipline_cip_category_as_numericH      0.43      0.93    -1.38
candidate_discipline_cip_category_as_numericI      0.46      0.94    -1.32
candidate_discipline_cip_category_as_numericJ      0.14      1.02    -1.92
candidate_discipline_cip_category_as_numericL     -2.89      3.50   -10.46
candidate_discipline_cip_category_as_numericM      0.92      0.99    -0.99
candidate_discipline_cip_category_as_numericN      1.47      0.92    -0.30
candidate_discipline_cip_category_as_numericO      1.24      0.90    -0.47
candidate_discipline_cip_category_as_numericP      1.02      0.91    -0.66
candidate_discipline_cip_category_as_numericQ     -2.63      3.66   -10.49
candidate_discipline_cip_category_as_numericR      1.42      0.94    -0.43
candidate_discipline_cip_category_as_numericS     -4.39      3.01   -11.11
candidate_discipline_cip_category_as_numericT      0.71      0.90    -0.99
candidate_discipline_cip_category_as_numericU      1.06      0.90    -0.65
candidate_discipline_cip_category_as_numericV     -0.70      1.19    -3.12
candidate_discipline_cip_category_as_numericW     -0.62      1.17    -2.93
candidate_discipline_cip_category_as_numericX      0.73      0.99    -1.23
candidate_discipline_cip_category_as_numericY      0.88      0.90    -0.84
candidate_discipline_cip_category_as_numericZ      1.16      1.01    -0.79
school_code3                                       0.53      0.20     0.15
school_code4                                       0.50      0.22     0.09
school_code6                                       0.13      0.30    -0.47
school_code9                                       0.63      0.21     0.20
                                               u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept                                         -0.87 1.02      140      336
candidate_urm_num                                  0.56 1.00     1904     1163
candidate_gender_num                               0.14 1.00     2434     1447
scaled_pi_grants                                   0.02 1.00     1979     1381
candidate_discipline_stem_status_sbs_included      0.25 1.00     1601     1414
promotion_to_full_professor                        0.55 1.00     1871     1550
scaled_years_in_present_rank                       0.17 1.01     2035     1516
candidate_discipline_cip_category_as_numericAA     2.98 1.00     1855     1392
candidate_discipline_cip_category_as_numericAB     2.89 1.02      140      415
candidate_discipline_cip_category_as_numericAC     3.51 1.01      285      684
candidate_discipline_cip_category_as_numericAD     2.81 1.02      134      364
candidate_discipline_cip_category_as_numericAE     3.23 1.02      154      429
candidate_discipline_cip_category_as_numericAF     3.31 1.02      163      376
candidate_discipline_cip_category_as_numericAG     1.36 1.01      430      818
candidate_discipline_cip_category_as_numericC      2.86 1.02      208      482
candidate_discipline_cip_category_as_numericD      2.47 1.02      133      324
candidate_discipline_cip_category_as_numericE      3.25 1.02      134      312
candidate_discipline_cip_category_as_numericF      2.77 1.02      130      346
candidate_discipline_cip_category_as_numericG      2.26 1.02      206      439
candidate_discipline_cip_category_as_numericH      2.26 1.02      186      396
candidate_discipline_cip_category_as_numericI      2.34 1.02      145      364
candidate_discipline_cip_category_as_numericJ      2.15 1.01      186      416
candidate_discipline_cip_category_as_numericL      2.77 1.00     1928     1263
candidate_discipline_cip_category_as_numericM      2.95 1.02      181      399
candidate_discipline_cip_category_as_numericN      3.31 1.02      135      400
candidate_discipline_cip_category_as_numericO      3.04 1.02      129      333
candidate_discipline_cip_category_as_numericP      2.90 1.02      152      350
candidate_discipline_cip_category_as_numericQ      3.61 1.00     1701     1376
candidate_discipline_cip_category_as_numericR      3.29 1.02      158      393
candidate_discipline_cip_category_as_numericS      0.20 1.00     1572     1236
candidate_discipline_cip_category_as_numericT      2.54 1.02      148      298
candidate_discipline_cip_category_as_numericU      2.85 1.02      123      302
candidate_discipline_cip_category_as_numericV      1.52 1.01      250      576
candidate_discipline_cip_category_as_numericW      1.58 1.01      270      617
candidate_discipline_cip_category_as_numericX      2.65 1.02      164      519
candidate_discipline_cip_category_as_numericY      2.66 1.02      137      328
candidate_discipline_cip_category_as_numericZ      3.23 1.02      148      523
school_code3                                       0.93 1.00      915      990
school_code4                                       0.93 1.00      955     1182
school_code6                                       0.73 1.00     1352     1082
school_code9                                       1.04 1.00      927     1211

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         4.12      0.34     3.47     4.82 1.00     2214     1361
cutzero     0.09      0.09    -0.09     0.27 1.00     1592     1633
cutone      1.17      0.08     1.02     1.33 1.00     2213     1255

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm2, ord2, "URM → dept. negative vote % — full controls, full sample")
URM → dept. negative vote % — full controls, full sample
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.085
[-0.116, 0.286]
Gender (female = 1) -0.055
[-0.177, 0.066]
PI grants (scaled) -0.022
[-0.082, 0.037]
STEM discipline 0.062
[-0.253, 0.378]
Promotion to full prof. 0.167
[0.051, 0.284]
Years in present rank (scaled) 0.078
[0.023, 0.132]
b_candidate_urm_num 0.263
[-0.045, 0.558]
b_candidate_gender_num -0.059
[-0.266, 0.138]
b_scaled_pi_grants -0.061
[-0.153, 0.025]
b_candidate_discipline_stem_status_sbs_included -0.235
[-0.683, 0.247]
b_promotion_to_full_professor 0.370
[0.188, 0.545]
b_scaled_years_in_present_rank 0.089
[0.007, 0.169]
Num.Obs. 1261 1261
R2 0.061 0.089
R2 Adj. 0.030
AIC 3540.7
BIC 3756.6
Log.Lik. -1728.356
ELPD -669.2
ELPD s.e. 25.4
LOOIC 1338.5
LOOIC s.e. 50.9
WAIC 1332.4
RMSE 0.95 0.19

3 · URM Status → Dept. Negative Vote % (Controls Without STEM, Full Sample)

Show the code
lm3 <- lm(
  scaled_department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    promotion_to_full_professor + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data = candidates
)

ord3 <- ordbetareg(
  department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    promotion_to_full_professor + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data    = candidates,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 21.7 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 22.4 seconds.

Both chains finished successfully.
Mean chain execution time: 22.1 seconds.
Total execution time: 44.2 seconds.

LM summary

Show the code
summary(lm3)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num + 
    candidate_gender_num + scaled_pi_grants + promotion_to_full_professor + 
    scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + 
    school_code, data = candidates)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.3947 -0.4876 -0.2679  0.0090  4.9156 

Coefficients:
                                               Estimate Std. Error t value
(Intercept)                                    -0.67772    0.69730  -0.972
candidate_urm_num                               0.08430    0.10228   0.824
candidate_gender_num                           -0.05556    0.06189  -0.898
scaled_pi_grants                               -0.02096    0.03004  -0.698
promotion_to_full_professor                     0.16736    0.05953   2.811
scaled_years_in_present_rank                    0.07768    0.02799   2.775
candidate_discipline_cip_category_as_numericAA -0.23216    1.19105  -0.195
candidate_discipline_cip_category_as_numericAB  0.58514    0.70600   0.829
candidate_discipline_cip_category_as_numericAC  0.59430    0.88768   0.670
candidate_discipline_cip_category_as_numericAD  0.40131    0.72304   0.555
candidate_discipline_cip_category_as_numericAE  0.74574    0.70712   1.055
candidate_discipline_cip_category_as_numericAF  0.47352    0.70928   0.668
candidate_discipline_cip_category_as_numericAG  0.28848    0.72919   0.396
candidate_discipline_cip_category_as_numericC   0.28554    0.78385   0.364
candidate_discipline_cip_category_as_numericD   0.31010    0.69529   0.446
candidate_discipline_cip_category_as_numericE   0.54854    0.69311   0.791
candidate_discipline_cip_category_as_numericF   0.43328    0.69880   0.620
candidate_discipline_cip_category_as_numericG   0.19532    0.71418   0.273
candidate_discipline_cip_category_as_numericH   0.29358    0.70344   0.417
candidate_discipline_cip_category_as_numericI   0.25939    0.70741   0.367
candidate_discipline_cip_category_as_numericJ   0.07522    0.72647   0.104
candidate_discipline_cip_category_as_numericL  -0.16069    1.19037  -0.135
candidate_discipline_cip_category_as_numericM   0.62126    0.73809   0.842
candidate_discipline_cip_category_as_numericN   0.85910    0.71298   1.205
candidate_discipline_cip_category_as_numericO   0.43174    0.69600   0.620
candidate_discipline_cip_category_as_numericP   0.37975    0.70550   0.538
candidate_discipline_cip_category_as_numericQ   0.01606    1.19704   0.013
candidate_discipline_cip_category_as_numericR   0.52072    0.71890   0.724
candidate_discipline_cip_category_as_numericS  -0.01692    0.75548  -0.022
candidate_discipline_cip_category_as_numericT   0.15185    0.69355   0.219
candidate_discipline_cip_category_as_numericU   0.38825    0.69825   0.556
candidate_discipline_cip_category_as_numericV   0.04433    0.73150   0.061
candidate_discipline_cip_category_as_numericW   0.05049    0.71708   0.070
candidate_discipline_cip_category_as_numericX   0.10089    0.73871   0.137
candidate_discipline_cip_category_as_numericY   0.33680    0.70182   0.480
candidate_discipline_cip_category_as_numericZ   0.41856    0.74460   0.562
school_code3                                    0.23918    0.09844   2.430
school_code4                                    0.24491    0.11080   2.210
school_code6                                    0.03262    0.14454   0.226
school_code9                                    0.26994    0.10897   2.477
                                               Pr(>|t|)   
(Intercept)                                     0.33128   
candidate_urm_num                               0.40999   
candidate_gender_num                            0.36949   
scaled_pi_grants                                0.48555   
promotion_to_full_professor                     0.00501 **
scaled_years_in_present_rank                    0.00560 **
candidate_discipline_cip_category_as_numericAA  0.84548   
candidate_discipline_cip_category_as_numericAB  0.40737   
candidate_discipline_cip_category_as_numericAC  0.50330   
candidate_discipline_cip_category_as_numericAD  0.57898   
candidate_discipline_cip_category_as_numericAE  0.29181   
candidate_discipline_cip_category_as_numericAF  0.50451   
candidate_discipline_cip_category_as_numericAG  0.69246   
candidate_discipline_cip_category_as_numericC   0.71572   
candidate_discipline_cip_category_as_numericD   0.65567   
candidate_discipline_cip_category_as_numericE   0.42885   
candidate_discipline_cip_category_as_numericF   0.53535   
candidate_discipline_cip_category_as_numericG   0.78453   
candidate_discipline_cip_category_as_numericH   0.67650   
candidate_discipline_cip_category_as_numericI   0.71392   
candidate_discipline_cip_category_as_numericJ   0.91755   
candidate_discipline_cip_category_as_numericL   0.89264   
candidate_discipline_cip_category_as_numericM   0.40012   
candidate_discipline_cip_category_as_numericN   0.22846   
candidate_discipline_cip_category_as_numericO   0.53516   
candidate_discipline_cip_category_as_numericP   0.59049   
candidate_discipline_cip_category_as_numericQ   0.98930   
candidate_discipline_cip_category_as_numericR   0.46901   
candidate_discipline_cip_category_as_numericS   0.98213   
candidate_discipline_cip_category_as_numericT   0.82673   
candidate_discipline_cip_category_as_numericU   0.57829   
candidate_discipline_cip_category_as_numericV   0.95169   
candidate_discipline_cip_category_as_numericW   0.94388   
candidate_discipline_cip_category_as_numericX   0.89139   
candidate_discipline_cip_category_as_numericY   0.63138   
candidate_discipline_cip_category_as_numericZ   0.57414   
school_code3                                    0.01525 * 
school_code4                                    0.02726 * 
school_code6                                    0.82149   
school_code9                                    0.01338 * 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.9684 on 1221 degrees of freedom
  (310 observations deleted due to missingness)
Multiple R-squared:  0.06078,   Adjusted R-squared:  0.03078 
F-statistic: 2.026 on 39 and 1221 DF,  p-value: 0.0002249

Ordbetareg summary

Show the code
summary(ord3)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num + candidate_gender_num + scaled_pi_grants + promotion_to_full_professor + scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + school_code 
   Data: data (Number of observations: 1261) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                                               Estimate Est.Error l-95% CI
Intercept                                         -2.72      0.88    -4.36
candidate_urm_num                                  0.25      0.15    -0.06
candidate_gender_num                              -0.05      0.10    -0.24
scaled_pi_grants                                  -0.06      0.05    -0.15
promotion_to_full_professor                        0.37      0.09     0.18
scaled_years_in_present_rank                       0.09      0.04     0.01
candidate_discipline_cip_category_as_numericAA    -2.62      3.34    -9.85
candidate_discipline_cip_category_as_numericAB     1.30      0.89    -0.39
candidate_discipline_cip_category_as_numericAC     1.40      1.16    -0.92
candidate_discipline_cip_category_as_numericAD     1.09      0.91    -0.65
candidate_discipline_cip_category_as_numericAE     1.54      0.87    -0.16
candidate_discipline_cip_category_as_numericAF     1.35      0.89    -0.34
candidate_discipline_cip_category_as_numericAG    -1.00      1.48    -4.23
candidate_discipline_cip_category_as_numericC      0.94      1.00    -0.92
candidate_discipline_cip_category_as_numericD      0.84      0.87    -0.79
candidate_discipline_cip_category_as_numericE      1.34      0.86    -0.30
candidate_discipline_cip_category_as_numericF      1.11      0.88    -0.55
candidate_discipline_cip_category_as_numericG      0.42      0.96    -1.49
candidate_discipline_cip_category_as_numericH      0.55      0.93    -1.27
candidate_discipline_cip_category_as_numericI      0.60      0.90    -1.13
candidate_discipline_cip_category_as_numericJ      0.25      0.99    -1.67
candidate_discipline_cip_category_as_numericL     -2.75      3.52   -10.57
candidate_discipline_cip_category_as_numericM      1.04      0.97    -0.81
candidate_discipline_cip_category_as_numericN      1.47      0.92    -0.28
candidate_discipline_cip_category_as_numericO      1.14      0.87    -0.48
candidate_discipline_cip_category_as_numericP      0.93      0.86    -0.68
candidate_discipline_cip_category_as_numericQ     -2.57      3.56   -10.02
candidate_discipline_cip_category_as_numericR      1.36      0.91    -0.36
candidate_discipline_cip_category_as_numericS     -4.40      3.11   -11.65
candidate_discipline_cip_category_as_numericT      0.62      0.87    -1.02
candidate_discipline_cip_category_as_numericU      1.03      0.86    -0.67
candidate_discipline_cip_category_as_numericV     -0.55      1.15    -2.90
candidate_discipline_cip_category_as_numericW     -0.53      1.16    -2.88
candidate_discipline_cip_category_as_numericX      0.64      0.97    -1.23
candidate_discipline_cip_category_as_numericY      0.99      0.86    -0.67
candidate_discipline_cip_category_as_numericZ      1.06      0.98    -0.84
school_code3                                       0.53      0.20     0.16
school_code4                                       0.49      0.22     0.08
school_code6                                       0.13      0.30    -0.47
school_code9                                       0.63      0.22     0.22
                                               u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept                                         -1.06 1.01      254      446
candidate_urm_num                                  0.55 1.00     2619     1632
candidate_gender_num                               0.14 1.00     1681     1231
scaled_pi_grants                                   0.02 1.00     1707     1269
promotion_to_full_professor                        0.55 1.00     1878     1366
scaled_years_in_present_rank                       0.17 1.00     1693     1271
candidate_discipline_cip_category_as_numericAA     3.02 1.00     1746     1188
candidate_discipline_cip_category_as_numericAB     3.01 1.01      267      428
candidate_discipline_cip_category_as_numericAC     3.62 1.01      403      689
candidate_discipline_cip_category_as_numericAD     2.90 1.01      271      454
candidate_discipline_cip_category_as_numericAE     3.23 1.01      266      416
candidate_discipline_cip_category_as_numericAF     3.06 1.01      271      437
candidate_discipline_cip_category_as_numericAG     1.65 1.00      608      725
candidate_discipline_cip_category_as_numericC      2.92 1.01      323      589
candidate_discipline_cip_category_as_numericD      2.53 1.01      255      372
candidate_discipline_cip_category_as_numericE      3.02 1.01      252      371
candidate_discipline_cip_category_as_numericF      2.81 1.01      256      386
candidate_discipline_cip_category_as_numericG      2.25 1.01      327      460
candidate_discipline_cip_category_as_numericH      2.38 1.01      281      396
candidate_discipline_cip_category_as_numericI      2.27 1.01      268      404
candidate_discipline_cip_category_as_numericJ      2.13 1.01      317      532
candidate_discipline_cip_category_as_numericL      3.14 1.00     1914     1301
candidate_discipline_cip_category_as_numericM      2.99 1.01      309      518
candidate_discipline_cip_category_as_numericN      3.23 1.01      271      423
candidate_discipline_cip_category_as_numericO      2.77 1.01      253      395
candidate_discipline_cip_category_as_numericP      2.60 1.01      260      415
candidate_discipline_cip_category_as_numericQ      3.18 1.00     1834     1353
candidate_discipline_cip_category_as_numericR      3.12 1.01      277      416
candidate_discipline_cip_category_as_numericS      0.42 1.00     1187     1163
candidate_discipline_cip_category_as_numericT      2.30 1.01      255      403
candidate_discipline_cip_category_as_numericU      2.71 1.01      259      418
candidate_discipline_cip_category_as_numericV      1.66 1.00      464      670
candidate_discipline_cip_category_as_numericW      1.59 1.01      484      810
candidate_discipline_cip_category_as_numericX      2.50 1.01      293      582
candidate_discipline_cip_category_as_numericY      2.62 1.01      268      416
candidate_discipline_cip_category_as_numericZ      2.96 1.01      303      526
school_code3                                       0.92 1.00      872     1134
school_code4                                       0.93 1.00      835     1271
school_code6                                       0.73 1.00     1149     1392
school_code9                                       1.05 1.00      893     1066

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         4.08      0.32     3.47     4.73 1.00     1622     1256
cutzero     0.09      0.09    -0.07     0.26 1.00     1816     1419
cutone      1.18      0.07     1.03     1.32 1.00     2388     1312

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm3, ord3, "URM → dept. negative vote % — controls without STEM, full sample")
URM → dept. negative vote % — controls without STEM, full sample
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.084
[-0.116, 0.285]
Gender (female = 1) -0.056
[-0.177, 0.066]
PI grants (scaled) -0.021
[-0.080, 0.038]
Promotion to full prof. 0.167
[0.051, 0.284]
Years in present rank (scaled) 0.078
[0.023, 0.133]
b_candidate_urm_num 0.252
[-0.063, 0.550]
b_candidate_gender_num -0.053
[-0.243, 0.143]
b_scaled_pi_grants -0.062
[-0.151, 0.023]
b_promotion_to_full_professor 0.367
[0.184, 0.548]
b_scaled_years_in_present_rank 0.090
[0.010, 0.175]
Num.Obs. 1261 1261
R2 0.061 0.086
R2 Adj. 0.031
AIC 3538.9
BIC 3749.6
Log.Lik. -1728.434
ELPD -667.5
ELPD s.e. 25.4
LOOIC 1335.0
LOOIC s.e. 50.7
WAIC 1331.4
RMSE 0.95 0.18

4 · Promotion to Associate Professor Subset: No Controls

Show the code
lm4 <- lm(
  scaled_department_negative_vote_percentage ~ candidate_urm_num,
  data = promotion_to_associate_professor_candidates_distinct
)

ord4 <- ordbetareg(
  department_negative_vote_percentage ~ candidate_urm_num,
  data    = promotion_to_associate_professor_candidates_distinct,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 1.5 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 1.5 seconds.

Both chains finished successfully.
Mean chain execution time: 1.5 seconds.
Total execution time: 3.2 seconds.

LM summary

Show the code
summary(lm4)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num, 
    data = promotion_to_associate_professor_candidates_distinct)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.5458 -0.2790 -0.2790 -0.2790  4.8860 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)       -0.11860    0.03408  -3.480 0.000531 ***
candidate_urm_num  0.26683    0.12759   2.091 0.036854 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8867 on 727 degrees of freedom
  (99 observations deleted due to missingness)
Multiple R-squared:  0.005979,  Adjusted R-squared:  0.004612 
F-statistic: 4.373 on 1 and 727 DF,  p-value: 0.03685

Ordbetareg summary

Show the code
summary(ord4)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num 
   Data: data (Number of observations: 729) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                  Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept            -1.15      0.09    -1.33    -0.97 1.00     1505     1398
candidate_urm_num     0.56      0.21     0.13     0.96 1.00     2359     1171

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         3.65      0.41     2.92     4.52 1.00     1894     1444
cutzero     0.24      0.13    -0.01     0.50 1.00     1648     1561
cutone      1.09      0.11     0.90     1.31 1.00     2504     1172

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm4, ord4, "URM → dept. negative vote % — no controls, associate promotion subset")
URM → dept. negative vote % — no controls, associate promotion subset
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.267
[0.016, 0.517]
b_candidate_urm_num 0.567
[0.130, 0.965]
Num.Obs. 729 729
R2 0.006 0.010
R2 Adj. 0.005
AIC 1897.4
BIC 1911.2
Log.Lik. -945.718
F 4.373
ELPD -347.9
ELPD s.e. 19.2
LOOIC 695.8
LOOIC s.e. 38.4
WAIC 695.8
RMSE 0.89 0.17

5 · Promotion to Associate Professor Subset: With Controls

Show the code
lm5 <- lm(
  scaled_department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data = promotion_to_associate_professor_candidates_distinct
)

ord5 <- ordbetareg(
  department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data    = promotion_to_associate_professor_candidates_distinct,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 7.6 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 7.8 seconds.

Both chains finished successfully.
Mean chain execution time: 7.7 seconds.
Total execution time: 15.6 seconds.

LM summary

Show the code
summary(lm5)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num + 
    candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + 
    scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + 
    school_code, data = promotion_to_associate_professor_candidates_distinct)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.6398 -0.3802 -0.1961  0.0336  4.8083 

Coefficients:
                                               Estimate Std. Error t value
(Intercept)                                    -0.44294    0.86765  -0.511
candidate_urm_num                               0.17108    0.14598   1.172
candidate_gender_num                           -0.05410    0.07561  -0.715
scaled_pi_grants                               -0.07719    0.06641  -1.162
candidate_discipline_stem_status_sbs_included  -0.52418    0.19702  -2.661
scaled_years_in_present_rank                    0.35202    0.07963   4.421
candidate_discipline_cip_category_as_numericAB  0.36968    0.87693   0.422
candidate_discipline_cip_category_as_numericAC  0.69467    1.04920   0.662
candidate_discipline_cip_category_as_numericAD  0.18124    0.90416   0.200
candidate_discipline_cip_category_as_numericAE  0.70311    0.88494   0.795
candidate_discipline_cip_category_as_numericAF  0.71832    0.91458   0.785
candidate_discipline_cip_category_as_numericAG -0.06701    0.90799  -0.074
candidate_discipline_cip_category_as_numericC   0.26481    1.21035   0.219
candidate_discipline_cip_category_as_numericD   0.30256    0.86385   0.350
candidate_discipline_cip_category_as_numericE   0.87623    0.88426   0.991
candidate_discipline_cip_category_as_numericF   0.32968    0.86793   0.380
candidate_discipline_cip_category_as_numericG   0.06645    0.88769   0.075
candidate_discipline_cip_category_as_numericH   0.34489    0.87581   0.394
candidate_discipline_cip_category_as_numericI   0.17738    0.87769   0.202
candidate_discipline_cip_category_as_numericJ  -0.05900    0.91464  -0.065
candidate_discipline_cip_category_as_numericM   0.67130    0.91438   0.734
candidate_discipline_cip_category_as_numericN   0.28863    0.88571   0.326
candidate_discipline_cip_category_as_numericO   0.86610    0.88785   0.975
candidate_discipline_cip_category_as_numericP   0.83061    0.90329   0.920
candidate_discipline_cip_category_as_numericR   0.47000    0.89964   0.522
candidate_discipline_cip_category_as_numericS  -0.00291    0.94007  -0.003
candidate_discipline_cip_category_as_numericT   0.62774    0.88416   0.710
candidate_discipline_cip_category_as_numericU   0.71354    0.88022   0.811
candidate_discipline_cip_category_as_numericV  -0.04044    0.90454  -0.045
candidate_discipline_cip_category_as_numericW   0.07833    0.89479   0.088
candidate_discipline_cip_category_as_numericX   0.62531    0.94549   0.661
candidate_discipline_cip_category_as_numericY   0.26487    0.87187   0.304
candidate_discipline_cip_category_as_numericZ   0.57775    0.93875   0.615
school_code3                                    0.20919    0.11980   1.746
school_code4                                    0.17095    0.13285   1.287
school_code6                                    0.03299    0.16655   0.198
school_code9                                    0.11340    0.13111   0.865
                                                Pr(>|t|)    
(Intercept)                                      0.60988    
candidate_urm_num                                0.24168    
candidate_gender_num                             0.47459    
scaled_pi_grants                                 0.24553    
candidate_discipline_stem_status_sbs_included    0.00801 ** 
scaled_years_in_present_rank                   0.0000117 ***
candidate_discipline_cip_category_as_numericAB   0.67349    
candidate_discipline_cip_category_as_numericAC   0.50817    
candidate_discipline_cip_category_as_numericAD   0.84119    
candidate_discipline_cip_category_as_numericAE   0.42720    
candidate_discipline_cip_category_as_numericAF   0.43253    
candidate_discipline_cip_category_as_numericAG   0.94119    
candidate_discipline_cip_category_as_numericC    0.82689    
candidate_discipline_cip_category_as_numericD    0.72628    
candidate_discipline_cip_category_as_numericE    0.32213    
candidate_discipline_cip_category_as_numericF    0.70420    
candidate_discipline_cip_category_as_numericG    0.94035    
candidate_discipline_cip_category_as_numericH    0.69387    
candidate_discipline_cip_category_as_numericI    0.83991    
candidate_discipline_cip_category_as_numericJ    0.94859    
candidate_discipline_cip_category_as_numericM    0.46314    
candidate_discipline_cip_category_as_numericN    0.74463    
candidate_discipline_cip_category_as_numericO    0.32971    
candidate_discipline_cip_category_as_numericP    0.35818    
candidate_discipline_cip_category_as_numericR    0.60157    
candidate_discipline_cip_category_as_numericS    0.99753    
candidate_discipline_cip_category_as_numericT    0.47799    
candidate_discipline_cip_category_as_numericU    0.41790    
candidate_discipline_cip_category_as_numericV    0.96435    
candidate_discipline_cip_category_as_numericW    0.93027    
candidate_discipline_cip_category_as_numericX    0.50864    
candidate_discipline_cip_category_as_numericY    0.76139    
candidate_discipline_cip_category_as_numericZ    0.53850    
school_code3                                     0.08129 .  
school_code4                                     0.19868    
school_code6                                     0.84307    
school_code9                                     0.38743    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8518 on 598 degrees of freedom
  (193 observations deleted due to missingness)
Multiple R-squared:  0.08716,   Adjusted R-squared:  0.03221 
F-statistic: 1.586 on 36 and 598 DF,  p-value: 0.01765

Ordbetareg summary

Show the code
summary(ord5)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num + candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + school_code 
   Data: data (Number of observations: 635) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                                               Estimate Est.Error l-95% CI
Intercept                                         -3.09      1.07    -5.17
candidate_urm_num                                  0.47      0.28    -0.06
candidate_gender_num                              -0.02      0.17    -0.35
scaled_pi_grants                                  -0.24      0.15    -0.55
candidate_discipline_stem_status_sbs_included     -0.81      0.44    -1.67
scaled_years_in_present_rank                       0.40      0.14     0.13
candidate_discipline_cip_category_as_numericAB     1.18      1.05    -0.94
candidate_discipline_cip_category_as_numericAC     1.78      1.27    -0.73
candidate_discipline_cip_category_as_numericAD     1.09      1.11    -1.09
candidate_discipline_cip_category_as_numericAE     1.83      1.06    -0.27
candidate_discipline_cip_category_as_numericAF     1.46      1.30    -1.15
candidate_discipline_cip_category_as_numericAG    -4.03      3.16   -11.25
candidate_discipline_cip_category_as_numericC      0.78      1.33    -1.96
candidate_discipline_cip_category_as_numericD      0.95      1.03    -1.06
candidate_discipline_cip_category_as_numericE      2.21      1.06     0.19
candidate_discipline_cip_category_as_numericF      1.24      1.03    -0.82
candidate_discipline_cip_category_as_numericG     -4.37      3.10   -11.76
candidate_discipline_cip_category_as_numericH      0.32      1.15    -1.98
candidate_discipline_cip_category_as_numericI      0.47      1.10    -1.70
candidate_discipline_cip_category_as_numericJ     -3.80      3.02   -10.69
candidate_discipline_cip_category_as_numericM      0.19      1.62    -3.30
candidate_discipline_cip_category_as_numericN      0.83      1.22    -1.50
candidate_discipline_cip_category_as_numericO      2.14      1.07     0.13
candidate_discipline_cip_category_as_numericP      2.15      1.07     0.11
candidate_discipline_cip_category_as_numericR      1.14      1.25    -1.34
candidate_discipline_cip_category_as_numericS     -3.56      3.12   -10.19
candidate_discipline_cip_category_as_numericT      1.67      1.07    -0.38
candidate_discipline_cip_category_as_numericU      1.84      1.04    -0.15
candidate_discipline_cip_category_as_numericV     -4.11      3.17   -11.47
candidate_discipline_cip_category_as_numericW      0.39      1.25    -2.09
candidate_discipline_cip_category_as_numericX      1.75      1.18    -0.53
candidate_discipline_cip_category_as_numericY      1.04      1.03    -0.97
candidate_discipline_cip_category_as_numericZ     -3.23      3.31   -10.68
school_code3                                       0.76      0.35     0.09
school_code4                                       0.69      0.37    -0.01
school_code6                                       0.39      0.48    -0.58
school_code9                                       0.84      0.37     0.15
                                               u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept                                         -0.98 1.01      359      577
candidate_urm_num                                  1.02 1.00     2309     1396
candidate_gender_num                               0.31 1.00     2838     1187
scaled_pi_grants                                   0.05 1.00     3606     1379
candidate_discipline_stem_status_sbs_included      0.05 1.00     1754     1057
scaled_years_in_present_rank                       0.68 1.00     3054     1461
candidate_discipline_cip_category_as_numericAB     3.28 1.01      339      505
candidate_discipline_cip_category_as_numericAC     4.29 1.01      472      704
candidate_discipline_cip_category_as_numericAD     3.25 1.01      377      614
candidate_discipline_cip_category_as_numericAE     3.89 1.01      355      545
candidate_discipline_cip_category_as_numericAF     3.97 1.01      444      748
candidate_discipline_cip_category_as_numericAG     1.00 1.00     1672     1261
candidate_discipline_cip_category_as_numericC      3.46 1.00      545      865
candidate_discipline_cip_category_as_numericD      2.95 1.01      330      482
candidate_discipline_cip_category_as_numericE      4.37 1.01      328      461
candidate_discipline_cip_category_as_numericF      3.30 1.01      342      546
candidate_discipline_cip_category_as_numericG      0.54 1.00     1606     1184
candidate_discipline_cip_category_as_numericH      2.47 1.01      396      672
candidate_discipline_cip_category_as_numericI      2.58 1.01      360      523
candidate_discipline_cip_category_as_numericJ      0.91 1.00     1871     1346
candidate_discipline_cip_category_as_numericM      3.15 1.00      805     1012
candidate_discipline_cip_category_as_numericN      3.20 1.01      461      762
candidate_discipline_cip_category_as_numericO      4.33 1.01      336      484
candidate_discipline_cip_category_as_numericP      4.34 1.01      322      525
candidate_discipline_cip_category_as_numericR      3.62 1.01      434      689
candidate_discipline_cip_category_as_numericS      1.32 1.00     1948     1544
candidate_discipline_cip_category_as_numericT      3.83 1.01      323      429
candidate_discipline_cip_category_as_numericU      4.00 1.01      315      484
candidate_discipline_cip_category_as_numericV      0.94 1.00     1595     1086
candidate_discipline_cip_category_as_numericW      2.75 1.01      475      813
candidate_discipline_cip_category_as_numericX      4.08 1.01      423      801
candidate_discipline_cip_category_as_numericY      3.06 1.01      344      496
candidate_discipline_cip_category_as_numericZ      1.91 1.00     1718     1485
school_code3                                       1.49 1.00      930     1192
school_code4                                       1.42 1.00      967     1313
school_code6                                       1.36 1.00     1160     1606
school_code9                                       1.61 1.00      936     1303

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         3.83      0.49     2.91     4.83 1.00     2318     1436
cutzero    -0.00      0.15    -0.29     0.28 1.00     2274     1574
cutone      1.14      0.11     0.92     1.37 1.00     3036     1408

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm5, ord5, "URM → dept. negative vote % — controls, associate promotion subset")
URM → dept. negative vote % — controls, associate promotion subset
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.171
[-0.116, 0.458]
Gender (female = 1) -0.054
[-0.203, 0.094]
PI grants (scaled) -0.077
[-0.208, 0.053]
STEM discipline -0.524
[-0.911, -0.137]
Years in present rank (scaled) 0.352
[0.196, 0.508]
b_candidate_urm_num 0.468
[-0.059, 1.023]
b_candidate_gender_num -0.016
[-0.351, 0.310]
b_scaled_pi_grants -0.232
[-0.546, 0.046]
b_candidate_discipline_stem_status_sbs_included -0.797
[-1.671, 0.053]
b_scaled_years_in_present_rank 0.399
[0.127, 0.677]
Num.Obs. 635 635
R2 0.087 0.108
R2 Adj. 0.032
AIC 1636.2
BIC 1805.5
Log.Lik. -780.114
ELPD -308.7
ELPD s.e. 21.4
LOOIC 617.3
LOOIC s.e. 42.7
WAIC 611.1
RMSE 0.83 0.16

6 · Promotion to Full Professor Subset: No Controls

Show the code
lm6 <- lm(
  scaled_department_negative_vote_percentage ~ candidate_urm_num,
  data = promotion_to_full_professor_candidates_distinct
)

ord6 <- ordbetareg(
  department_negative_vote_percentage ~ candidate_urm_num,
  data    = promotion_to_full_professor_candidates_distinct,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 1.5 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 1.5 seconds.

Both chains finished successfully.
Mean chain execution time: 1.5 seconds.
Total execution time: 3.2 seconds.

LM summary

Show the code
summary(lm6)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num, 
    data = promotion_to_full_professor_candidates_distinct)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.5314 -0.4967 -0.4967 -0.0994  4.6683 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)        0.09913    0.04415   2.246    0.025 *
candidate_urm_num  0.03468    0.13331   0.260    0.795  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.097 on 691 degrees of freedom
  (50 observations deleted due to missingness)
Multiple R-squared:  9.792e-05, Adjusted R-squared:  -0.001349 
F-statistic: 0.06767 on 1 and 691 DF,  p-value: 0.7948

Ordbetareg summary

Show the code
summary(ord6)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num 
   Data: data (Number of observations: 693) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                  Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept            -0.78      0.07    -0.92    -0.63 1.00     1820     1611
candidate_urm_num     0.07      0.17    -0.26     0.39 1.00     2268     1148

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         3.78      0.37     3.08     4.52 1.01     2055     1343
cutzero     0.18      0.11    -0.03     0.40 1.00     1939     1598
cutone      1.14      0.09     0.97     1.32 1.00     2203     1435

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm6, ord6, "URM → dept. negative vote % — no controls, full professor subset")
URM → dept. negative vote % — no controls, full professor subset
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.035
[-0.227, 0.296]
b_candidate_urm_num 0.074
[-0.258, 0.393]
Num.Obs. 693 693
R2 0.000 0.001
R2 Adj. -0.001
AIC 2098.4
BIC 2112.0
Log.Lik. -1046.200
F 0.068
ELPD -410.2
ELPD s.e. 17.1
LOOIC 820.4
LOOIC s.e. 34.1
WAIC 820.4
RMSE 1.09 0.21

7 · Promotion to Full Professor Subset: With Controls

Show the code
lm7 <- lm(
  scaled_department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data = promotion_to_full_professor_candidates_distinct
)

ord7 <- ordbetareg(
  department_negative_vote_percentage ~
    candidate_urm_num + candidate_gender_num + scaled_pi_grants +
    candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank +
    candidate_discipline_cip_category_as_numeric + school_code,
  data    = promotion_to_full_professor_candidates_distinct,
  backend = "cmdstanr",
  chains  = 2,
  seed    = 42
)
Running MCMC with 2 sequential chains...

Chain 1 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 1 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 1 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 1 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 1 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 1 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 1 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 1 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 1 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 1 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 1 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 1 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 1 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 1 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 1 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 1 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 1 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 1 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 1 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 1 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 1 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 1 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 1 finished in 9.9 seconds.
Chain 2 Iteration:    1 / 2000 [  0%]  (Warmup) 
Chain 2 Iteration:  100 / 2000 [  5%]  (Warmup) 
Chain 2 Iteration:  200 / 2000 [ 10%]  (Warmup) 
Chain 2 Iteration:  300 / 2000 [ 15%]  (Warmup) 
Chain 2 Iteration:  400 / 2000 [ 20%]  (Warmup) 
Chain 2 Iteration:  500 / 2000 [ 25%]  (Warmup) 
Chain 2 Iteration:  600 / 2000 [ 30%]  (Warmup) 
Chain 2 Iteration:  700 / 2000 [ 35%]  (Warmup) 
Chain 2 Iteration:  800 / 2000 [ 40%]  (Warmup) 
Chain 2 Iteration:  900 / 2000 [ 45%]  (Warmup) 
Chain 2 Iteration: 1000 / 2000 [ 50%]  (Warmup) 
Chain 2 Iteration: 1001 / 2000 [ 50%]  (Sampling) 
Chain 2 Iteration: 1100 / 2000 [ 55%]  (Sampling) 
Chain 2 Iteration: 1200 / 2000 [ 60%]  (Sampling) 
Chain 2 Iteration: 1300 / 2000 [ 65%]  (Sampling) 
Chain 2 Iteration: 1400 / 2000 [ 70%]  (Sampling) 
Chain 2 Iteration: 1500 / 2000 [ 75%]  (Sampling) 
Chain 2 Iteration: 1600 / 2000 [ 80%]  (Sampling) 
Chain 2 Iteration: 1700 / 2000 [ 85%]  (Sampling) 
Chain 2 Iteration: 1800 / 2000 [ 90%]  (Sampling) 
Chain 2 Iteration: 1900 / 2000 [ 95%]  (Sampling) 
Chain 2 Iteration: 2000 / 2000 [100%]  (Sampling) 
Chain 2 finished in 10.0 seconds.

Both chains finished successfully.
Mean chain execution time: 10.0 seconds.
Total execution time: 20.0 seconds.

LM summary

Show the code
summary(lm7)

Call:
lm(formula = scaled_department_negative_vote_percentage ~ candidate_urm_num + 
    candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + 
    scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + 
    school_code, data = promotion_to_full_professor_candidates_distinct)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9903 -0.5774 -0.3305  0.0532  4.5819 

Coefficients:
                                                Estimate Std. Error t value
(Intercept)                                    -0.614037   1.084769  -0.566
candidate_urm_num                               0.009131   0.147961   0.062
candidate_gender_num                           -0.067993   0.101506  -0.670
scaled_pi_grants                               -0.007589   0.037541  -0.202
candidate_discipline_stem_status_sbs_included   0.485671   0.268293   1.810
scaled_years_in_present_rank                    0.051466   0.033382   1.542
candidate_discipline_cip_category_as_numericAA -0.050231   1.515289  -0.033
candidate_discipline_cip_category_as_numericAB  0.783188   1.101313   0.711
candidate_discipline_cip_category_as_numericAC -0.061831   1.514473  -0.041
candidate_discipline_cip_category_as_numericAD  0.643818   1.120697   0.574
candidate_discipline_cip_category_as_numericAE  0.776948   1.095270   0.709
candidate_discipline_cip_category_as_numericAF  0.151352   1.125144   0.135
candidate_discipline_cip_category_as_numericAG  0.653163   1.133503   0.576
candidate_discipline_cip_category_as_numericC   0.365413   1.162953   0.314
candidate_discipline_cip_category_as_numericD   0.302765   1.083547   0.279
candidate_discipline_cip_category_as_numericE   0.247748   1.107981   0.224
candidate_discipline_cip_category_as_numericF   0.591752   1.089713   0.543
candidate_discipline_cip_category_as_numericG   0.423679   1.112765   0.381
candidate_discipline_cip_category_as_numericH   0.244955   1.094280   0.224
candidate_discipline_cip_category_as_numericI   0.274478   1.104580   0.248
candidate_discipline_cip_category_as_numericJ   0.189899   1.121597   0.169
candidate_discipline_cip_category_as_numericL  -0.126567   1.514504  -0.084
candidate_discipline_cip_category_as_numericM   0.533032   1.153898   0.462
candidate_discipline_cip_category_as_numericN   1.408968   1.121020   1.257
candidate_discipline_cip_category_as_numericO   0.009664   1.112597   0.009
candidate_discipline_cip_category_as_numericP   0.019143   1.124688   0.017
candidate_discipline_cip_category_as_numericQ   0.203398   1.525837   0.133
candidate_discipline_cip_category_as_numericR   0.537580   1.134437   0.474
candidate_discipline_cip_category_as_numericS  -0.010580   1.175628  -0.009
candidate_discipline_cip_category_as_numericT  -0.283631   1.110208  -0.255
candidate_discipline_cip_category_as_numericU   0.098679   1.100112   0.090
candidate_discipline_cip_category_as_numericV   0.066468   1.146941   0.058
candidate_discipline_cip_category_as_numericW   0.067558   1.113487   0.061
candidate_discipline_cip_category_as_numericX  -0.368260   1.171541  -0.314
candidate_discipline_cip_category_as_numericY   0.474899   1.095924   0.433
candidate_discipline_cip_category_as_numericZ   0.477462   1.202223   0.397
school_code3                                    0.200911   0.162398   1.237
school_code4                                    0.267947   0.183424   1.461
school_code6                                   -0.032357   0.250655  -0.129
school_code9                                    0.376165   0.184027   2.044
                                               Pr(>|t|)  
(Intercept)                                      0.5716  
candidate_urm_num                                0.9508  
candidate_gender_num                             0.5032  
scaled_pi_grants                                 0.8399  
candidate_discipline_stem_status_sbs_included    0.0708 .
scaled_years_in_present_rank                     0.1237  
candidate_discipline_cip_category_as_numericAA   0.9736  
candidate_discipline_cip_category_as_numericAB   0.4773  
candidate_discipline_cip_category_as_numericAC   0.9674  
candidate_discipline_cip_category_as_numericAD   0.5659  
candidate_discipline_cip_category_as_numericAE   0.4784  
candidate_discipline_cip_category_as_numericAF   0.8930  
candidate_discipline_cip_category_as_numericAG   0.5647  
candidate_discipline_cip_category_as_numericC    0.7535  
candidate_discipline_cip_category_as_numericD    0.7800  
candidate_discipline_cip_category_as_numericE    0.8231  
candidate_discipline_cip_category_as_numericF    0.5873  
candidate_discipline_cip_category_as_numericG    0.7035  
candidate_discipline_cip_category_as_numericH    0.8230  
candidate_discipline_cip_category_as_numericI    0.8038  
candidate_discipline_cip_category_as_numericJ    0.8656  
candidate_discipline_cip_category_as_numericL    0.9334  
candidate_discipline_cip_category_as_numericM    0.6443  
candidate_discipline_cip_category_as_numericN    0.2093  
candidate_discipline_cip_category_as_numericO    0.9931  
candidate_discipline_cip_category_as_numericP    0.9864  
candidate_discipline_cip_category_as_numericQ    0.8940  
candidate_discipline_cip_category_as_numericR    0.6358  
candidate_discipline_cip_category_as_numericS    0.9928  
candidate_discipline_cip_category_as_numericT    0.7984  
candidate_discipline_cip_category_as_numericU    0.9286  
candidate_discipline_cip_category_as_numericV    0.9538  
candidate_discipline_cip_category_as_numericW    0.9516  
candidate_discipline_cip_category_as_numericX    0.7534  
candidate_discipline_cip_category_as_numericY    0.6649  
candidate_discipline_cip_category_as_numericZ    0.6914  
school_code3                                     0.2165  
school_code4                                     0.1446  
school_code6                                     0.8973  
school_code9                                     0.0414 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.065 on 586 degrees of freedom
  (117 observations deleted due to missingness)
Multiple R-squared:  0.08866,   Adjusted R-squared:  0.028 
F-statistic: 1.462 on 39 and 586 DF,  p-value: 0.0374

Ordbetareg summary

Show the code
summary(ord7)
 Family: ord_beta_reg 
  Links: mu = identity 
Formula: department_negative_vote_percentage ~ candidate_urm_num + candidate_gender_num + scaled_pi_grants + candidate_discipline_stem_status_sbs_included + scaled_years_in_present_rank + candidate_discipline_cip_category_as_numeric + school_code 
   Data: data (Number of observations: 626) 
  Draws: 2 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 2000

Regression Coefficients:
                                               Estimate Est.Error l-95% CI
Intercept                                         -2.40      0.89    -4.15
candidate_urm_num                                  0.10      0.19    -0.28
candidate_gender_num                              -0.09      0.14    -0.38
scaled_pi_grants                                  -0.03      0.05    -0.13
candidate_discipline_stem_status_sbs_included      0.01      0.35    -0.66
scaled_years_in_present_rank                       0.04      0.05    -0.05
candidate_discipline_cip_category_as_numericAA    -2.97      3.77   -11.18
candidate_discipline_cip_category_as_numericAB     1.45      0.95    -0.34
candidate_discipline_cip_category_as_numericAC    -2.78      3.55   -10.59
candidate_discipline_cip_category_as_numericAD     1.39      0.95    -0.40
candidate_discipline_cip_category_as_numericAE     1.41      0.93    -0.38
candidate_discipline_cip_category_as_numericAF     1.53      0.91    -0.23
candidate_discipline_cip_category_as_numericAG    -0.16      1.51    -3.25
candidate_discipline_cip_category_as_numericC      1.12      1.15    -1.08
candidate_discipline_cip_category_as_numericD      0.96      0.91    -0.72
candidate_discipline_cip_category_as_numericE      1.52      0.89    -0.16
candidate_discipline_cip_category_as_numericF      1.23      0.91    -0.44
candidate_discipline_cip_category_as_numericG      1.18      0.99    -0.64
candidate_discipline_cip_category_as_numericH      0.70      0.95    -1.04
candidate_discipline_cip_category_as_numericI      0.64      1.00    -1.33
candidate_discipline_cip_category_as_numericJ      0.68      1.03    -1.34
candidate_discipline_cip_category_as_numericL     -2.83      3.61   -10.54
candidate_discipline_cip_category_as_numericM      1.33      1.04    -0.67
candidate_discipline_cip_category_as_numericN      1.99      0.96     0.15
candidate_discipline_cip_category_as_numericO      1.19      0.90    -0.58
candidate_discipline_cip_category_as_numericP      0.99      0.91    -0.78
candidate_discipline_cip_category_as_numericQ     -2.54      3.67   -10.70
candidate_discipline_cip_category_as_numericR      1.66      0.94    -0.22
candidate_discipline_cip_category_as_numericS     -3.91      3.22   -11.13
candidate_discipline_cip_category_as_numericT      0.70      0.90    -1.07
candidate_discipline_cip_category_as_numericU      1.13      0.89    -0.58
candidate_discipline_cip_category_as_numericV      0.07      1.21    -2.34
candidate_discipline_cip_category_as_numericW     -4.32      3.05   -11.51
candidate_discipline_cip_category_as_numericX      0.28      1.18    -2.01
candidate_discipline_cip_category_as_numericY      1.26      0.94    -0.51
candidate_discipline_cip_category_as_numericZ      1.75      1.03    -0.34
school_code3                                       0.37      0.25    -0.11
school_code4                                       0.40      0.27    -0.11
school_code6                                      -0.20      0.42    -1.02
school_code9                                       0.61      0.28     0.04
                                               u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept                                         -0.69 1.00      229      584
candidate_urm_num                                  0.47 1.00     2724     1462
candidate_gender_num                               0.18 1.00     2755     1544
scaled_pi_grants                                   0.07 1.00     3091     1390
candidate_discipline_stem_status_sbs_included      0.74 1.00     1772     1300
scaled_years_in_present_rank                       0.13 1.01     3289     1553
candidate_discipline_cip_category_as_numericAA     3.17 1.00     1668      882
candidate_discipline_cip_category_as_numericAB     3.34 1.00      245      568
candidate_discipline_cip_category_as_numericAC     3.13 1.00     1880     1428
candidate_discipline_cip_category_as_numericAD     3.22 1.01      267      684
candidate_discipline_cip_category_as_numericAE     3.28 1.00      245      542
candidate_discipline_cip_category_as_numericAF     3.36 1.00      235      628
candidate_discipline_cip_category_as_numericAG     2.65 1.00      527     1081
candidate_discipline_cip_category_as_numericC      3.46 1.00      365      779
candidate_discipline_cip_category_as_numericD      2.76 1.00      233      503
candidate_discipline_cip_category_as_numericE      3.31 1.01      219      570
candidate_discipline_cip_category_as_numericF      3.09 1.00      232      517
candidate_discipline_cip_category_as_numericG      3.16 1.00      270      705
candidate_discipline_cip_category_as_numericH      2.57 1.00      251      608
candidate_discipline_cip_category_as_numericI      2.53 1.00      285      706
candidate_discipline_cip_category_as_numericJ      2.69 1.00      285      599
candidate_discipline_cip_category_as_numericL      3.08 1.00     2100     1330
candidate_discipline_cip_category_as_numericM      3.41 1.01      294      719
candidate_discipline_cip_category_as_numericN      3.85 1.00      249      590
candidate_discipline_cip_category_as_numericO      3.02 1.01      219      491
candidate_discipline_cip_category_as_numericP      2.82 1.01      222      580
candidate_discipline_cip_category_as_numericQ      3.39 1.00     1584     1225
candidate_discipline_cip_category_as_numericR      3.49 1.00      244      502
candidate_discipline_cip_category_as_numericS      1.11 1.00     1640     1216
candidate_discipline_cip_category_as_numericT      2.50 1.00      227      608
candidate_discipline_cip_category_as_numericU      2.94 1.01      217      553
candidate_discipline_cip_category_as_numericV      2.39 1.00      347      838
candidate_discipline_cip_category_as_numericW      0.31 1.00     1053     1272
candidate_discipline_cip_category_as_numericX      2.57 1.00      312      782
candidate_discipline_cip_category_as_numericY      3.14 1.00      230      681
candidate_discipline_cip_category_as_numericZ      3.81 1.01      296      659
school_code3                                       0.86 1.00     1188     1186
school_code4                                       0.95 1.00     1115     1248
school_code6                                       0.60 1.00     1662     1608
school_code9                                       1.15 1.00     1273     1274

Further Distributional Parameters:
        Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
phi         4.34      0.47     3.44     5.28 1.00     2418     1241
cutzero     0.03      0.12    -0.21     0.28 1.00     1828     1250
cutone      1.20      0.09     1.01     1.38 1.00     2541     1071

Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).

Side-by-side comparison

Show the code
ms_compare(lm7, ord7, "URM → dept. negative vote % — controls, full professor subset")
URM → dept. negative vote % — controls, full professor subset
LM (original) Ordbetareg (new)
LM outcome: z-scored dept. negative vote %; coefficients in SD units.
Ordbetareg outcome: raw proportion [0, 1]; coefficients on log-odds scale.
Discipline and school fixed effects included but omitted from display.
95% frequentist CI (LM) and 95% posterior CrI (Ordbetareg) shown.
URM candidate 0.009
[-0.281, 0.300]
Gender (female = 1) -0.068
[-0.267, 0.131]
PI grants (scaled) -0.008
[-0.081, 0.066]
STEM discipline 0.486
[-0.041, 1.013]
Years in present rank (scaled) 0.051
[-0.014, 0.117]
b_candidate_urm_num 0.097
[-0.282, 0.467]
b_candidate_gender_num -0.089
[-0.378, 0.178]
b_scaled_pi_grants -0.031
[-0.128, 0.066]
b_candidate_discipline_stem_status_sbs_included 0.011
[-0.660, 0.742]
b_scaled_years_in_present_rank 0.044
[-0.046, 0.130]
Num.Obs. 626 626
R2 0.089 0.109
R2 Adj. 0.028
AIC 1896.0
BIC 2078.0
Log.Lik. -907.002
ELPD -382.0
ELPD s.e. 17.8
LOOIC 764.0
LOOIC s.e. 35.6
WAIC 757.9
RMSE 1.03 0.20

8 · Consolidated Comparison

This section assembles the URM coefficient from every model pair into a single table and forest plot.

How to read the scales:

  • LM coefficients are on the standardised (z-scored) outcome scale (SD units). To convert to proportion units multiply by the SD of the raw outcome.
  • Ordbetareg posterior medians are on the log-odds (latent beta) scale. Positive = more negative votes; negative = fewer negative votes.
  • The scales are not directly comparable numerically, but direction and whether the 95% interval excludes zero are directly comparable.
Show the code
# ── Helper: extract URM row from each model pair ───────────────────────────
extract_urm <- function(lm_mod, ord_mod, label, lm_sd) {
  # LM
  lm_row  <- coef(summary(lm_mod))["candidate_urm_num", ]
  # Ordbetareg: fixef() from brms returns Estimate, Est.Error, Q2.5, Q97.5
  ord_row <- fixef(ord_mod)["candidate_urm_num", ]
  # Posterior probability > 0
  draws   <- as_draws_df(ord_mod)[["b_candidate_urm_num"]]
  pp_pos  <- round(mean(draws > 0), 3)

  tibble(
    analysis      = label,
    lm_est        = lm_row[["Estimate"]],
    lm_lo         = lm_row[["Estimate"]] - 1.96 * lm_row[["Std. Error"]],
    lm_hi         = lm_row[["Estimate"]] + 1.96 * lm_row[["Std. Error"]],
    lm_p          = lm_row[["Pr(>|t|)"]],
    lm_est_prop   = lm_row[["Estimate"]]    * lm_sd,
    lm_lo_prop    = (lm_row[["Estimate"]] - 1.96 * lm_row[["Std. Error"]]) * lm_sd,
    lm_hi_prop    = (lm_row[["Estimate"]] + 1.96 * lm_row[["Std. Error"]]) * lm_sd,
    ord_est       = ord_row[["Estimate"]],
    ord_lo        = ord_row[["Q2.5"]],
    ord_hi        = ord_row[["Q97.5"]],
    pp_pos        = pp_pos,
    same_sign     = sign(lm_row[["Estimate"]]) == sign(ord_row[["Estimate"]]),
    lm_sig        = lm_row[["Pr(>|t|)"]] < 0.05,
    ord_sig       = ord_row[["Q2.5"]] > 0 | ord_row[["Q97.5"]] < 0
  )
}

results <- bind_rows(
  extract_urm(lm1, ord1, "1. Full sample – no controls",         dnvp_sd),
  extract_urm(lm2, ord2, "2. Full sample – full controls",       dnvp_sd),
  extract_urm(lm3, ord3, "3. Full sample – no STEM control",     dnvp_sd),
  extract_urm(lm4, ord4, "4. Associate subset – no controls",    dnvp_sd_assoc),
  extract_urm(lm5, ord5, "5. Associate subset – with controls",  dnvp_sd_assoc),
  extract_urm(lm6, ord6, "6. Full-prof subset – no controls",    dnvp_sd_full),
  extract_urm(lm7, ord7, "7. Full-prof subset – with controls",  dnvp_sd_full)
)

# ── Forest plot ────────────────────────────────────────────────────────────────
lm_plot <- results |>
  mutate(analysis = fct_rev(factor(analysis))) |>
  ggplot(aes(x = lm_est_prop, xmin = lm_lo_prop, xmax = lm_hi_prop,
             y = analysis, color = lm_sig)) +
  geom_pointrange(size = 0.7, linewidth = 1) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey40") +
  scale_color_manual(
    values = c("TRUE" = "#D55E00", "FALSE" = "#0072B2"),
    labels = c("TRUE" = "p < .05", "FALSE" = "p ≥ .05")
  ) +
  labs(
    title  = "LM",
    x      = "Effect on dept. negative vote\n(proportion units, LM coef × SD)",
    y      = NULL,
    color  = NULL
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom", panel.grid.minor = element_blank())

ord_plot <- results |>
  mutate(analysis = fct_rev(factor(analysis))) |>
  ggplot(aes(x = ord_est, xmin = ord_lo, xmax = ord_hi,
             y = analysis, color = ord_sig)) +
  geom_pointrange(size = 0.7, linewidth = 1) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey40") +
  scale_color_manual(
    values = c("TRUE" = "#D55E00", "FALSE" = "#0072B2"),
    labels = c("TRUE" = "95% CrI ≠ 0", "FALSE" = "95% CrI spans 0")
  ) +
  labs(
    title  = "Ordbetareg",
    x      = "Effect on dept. negative vote\n(log-odds, latent beta scale)",
    y      = NULL,
    color  = NULL
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position  = "bottom",
    panel.grid.minor = element_blank(),
    axis.text.y      = element_blank(),
    axis.ticks.y     = element_blank()
  )

lm_plot + ord_plot +
  plot_annotation(
    title    = "URM Effect on Department Negative Vote Percentage",
    subtitle = "Orange = statistically/credibly different from zero; Blue = interval spans zero",
    theme    = theme(plot.title = element_text(size = 14, face = "bold"))
  )

Summary table

Show the code
results |>
  transmute(
    Analysis         = analysis,
    `LM β (SD)`      = round(lm_est, 3),
    `LM 95% CI`      = paste0("[", round(lm_lo, 3), ", ", round(lm_hi, 3), "]"),
    `LM p`           = round(lm_p, 3),
    `Ord median`     = round(ord_est, 3),
    `Ord 95% CrI`    = paste0("[", round(ord_lo, 3), ", ", round(ord_hi, 3), "]"),
    `P(β > 0)`       = pp_pos,
    `Same direction` = if_else(same_sign, "✓", "✗"),
    `Both sig.`      = case_when(
      lm_sig & ord_sig   ~ "Both",
      lm_sig & !ord_sig  ~ "LM only",
      !lm_sig & ord_sig  ~ "Ord only",
      TRUE               ~ "Neither"
    )
  ) |>
  gt() |>
  tab_header(
    title    = "URM Effect on Dept. Negative Vote %: LM vs. Ordbetareg",
    subtitle = "Key predictor: candidate_urm_num"
  ) |>
  tab_spanner(label = "Linear Model",   columns = c(`LM β (SD)`, `LM 95% CI`, `LM p`)) |>
  tab_spanner(label = "Ordbetareg",     columns = c(`Ord median`, `Ord 95% CrI`, `P(β > 0)`)) |>
  tab_style(
    style     = cell_fill(color = "#fff3cd"),
    locations = cells_body(rows = `Same direction` == "✗")
  ) |>
  tab_style(
    style     = cell_fill(color = "#d4edda"),
    locations = cells_body(rows = `Both sig.` == "Both")
  ) |>
  tab_footnote(
    footnote  = "LM β in SD units (z-scored outcome). Ordbetareg median on log-odds (latent beta) scale. P(β > 0): posterior probability URM coefficient is positive (more negative votes). Yellow = models disagree on direction; green = both find a credible/significant effect.",
    locations = cells_title()
  )
URM Effect on Dept. Negative Vote %: LM vs. Ordbetareg1
Key predictor: candidate_urm_num1
Analysis
Linear Model
Ordbetareg
Same direction Both sig.
LM β (SD) LM 95% CI LM p Ord median Ord 95% CrI P(β > 0)
1. Full sample – no controls 0.154 [-0.027, 0.336] 0.095 0.301 [0.035, 0.542] 0.988 Ord only
2. Full sample – full controls 0.085 [-0.116, 0.285] 0.407 0.257 [-0.045, 0.558] 0.951 Neither
3. Full sample – no STEM control 0.084 [-0.116, 0.285] 0.410 0.251 [-0.063, 0.55] 0.948 Neither
4. Associate subset – no controls 0.267 [0.017, 0.517] 0.037 0.563 [0.13, 0.965] 0.993 Both
5. Associate subset – with controls 0.171 [-0.115, 0.457] 0.242 0.469 [-0.059, 1.023] 0.954 Neither
6. Full-prof subset – no controls 0.035 [-0.227, 0.296] 0.795 0.074 [-0.258, 0.393] 0.686 Neither
7. Full-prof subset – with controls 0.009 [-0.281, 0.299] 0.951 0.098 [-0.282, 0.467] 0.688 Neither
1 LM β in SD units (z-scored outcome). Ordbetareg median on log-odds (latent beta) scale. P(β > 0): posterior probability URM coefficient is positive (more negative votes). Yellow = models disagree on direction; green = both find a credible/significant effect.

Session Info

Show the code
sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS Sequoia 15.7.3

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rstan_2.32.6           StanHeaders_2.32.10    fmsb_0.7.6            
 [4] gt_0.11.1              broom.mixed_0.2.9.6    patchwork_1.3.0       
 [7] marginaleffects_0.32.0 modelsummary_2.6.0     posterior_1.6.0       
[10] ordbetareg_0.8         brms_2.23.1            Rcpp_1.1.1            
[13] lubridate_1.9.5        forcats_1.0.0          stringr_1.6.0         
[16] dplyr_1.2.0            purrr_1.2.1            readr_2.1.5           
[19] tidyr_1.3.1            tibble_3.3.1           ggplot2_4.0.2         
[22] tidyverse_2.0.0       

loaded via a namespace (and not attached):
  [1] gridExtra_2.3        inline_0.3.19        sandwich_3.1-1      
  [4] rlang_1.1.7          magrittr_2.0.4       multcomp_1.4-26     
  [7] furrr_0.3.1          otel_0.2.0           matrixStats_1.4.1   
 [10] compiler_4.4.2       loo_2.8.0            reshape2_1.4.4      
 [13] vctrs_0.7.2          pkgconfig_2.0.3      crayon_1.5.3        
 [16] fastmap_1.2.0        backports_1.5.0      labeling_0.4.3      
 [19] effectsize_1.0.1     cmdstanr_0.9.0       rmarkdown_2.30      
 [22] tzdb_0.4.0           ps_1.9.1             bit_4.6.0           
 [25] xfun_0.57            litedown_0.9         jsonlite_2.0.0      
 [28] tinytable_0.16.0     broom_1.0.6          parallel_4.4.2      
 [31] R6_2.6.1             tables_0.9.31        stringi_1.8.7       
 [34] RColorBrewer_1.1-3   parallelly_1.46.1    lmtest_0.9-40       
 [37] estimability_1.5.1   knitr_1.51           future.apply_1.11.2 
 [40] zoo_1.8-12           parameters_0.28.3    bayesplot_1.11.1    
 [43] Matrix_1.7-1         splines_4.4.2        timechange_0.4.0    
 [46] tidyselect_1.2.1     abind_1.4-8          yaml_2.3.12         
 [49] codetools_0.2-20     curl_7.0.0           processx_3.8.6      
 [52] listenv_0.9.1        pkgbuild_1.4.4       plyr_1.8.9          
 [55] lattice_0.22-6       bayestestR_0.17.0    withr_3.0.2         
 [58] bridgesampling_1.1-2 S7_0.2.1             coda_0.19-4.1       
 [61] evaluate_1.0.5       archive_1.1.9        future_1.70.0       
 [64] survival_3.7-0       RcppParallel_5.1.9   xml2_1.5.2          
 [67] pillar_1.11.1        tensorA_0.36.2.1     checkmate_2.3.2     
 [70] stats4_4.4.2         insight_1.4.6        distributional_0.5.0
 [73] generics_0.1.4       vroom_1.6.5          hms_1.1.4           
 [76] rstantools_2.4.0     scales_1.4.0         globals_0.19.1      
 [79] xtable_1.8-8         glue_1.8.0           emmeans_1.10.5      
 [82] tools_4.4.2          data.table_1.18.2.1  mvtnorm_1.3-1       
 [85] grid_4.4.2           QuickJSR_1.3.1       datawizard_1.3.0    
 [88] colorspace_2.1-1     nlme_3.1-166         performance_0.16.0  
 [91] cli_3.6.5            Brobdingnag_1.2-9    V8_8.0.1            
 [94] gtable_0.3.6         sass_0.4.10          digest_0.6.39       
 [97] TH.data_1.1-2        htmlwidgets_1.6.4    farver_2.1.2        
[100] htmltools_0.5.9      lifecycle_1.0.5      bit64_4.6.0-1       
[103] MASS_7.3-61