performance_poor: Proportion of Opposed Odds Ratios

View source: R/performance_poor.R

performance_poorR Documentation

Proportion of Opposed Odds Ratios

Description

This function quantifies the extent to which the residual (unexplained) stratum heterogeneity dominates the estimated fixed effect of a group- or stratum-level characteristic. This measure represents the percentage of all hypothetical, pairwise comparisons in which the individual-level effect is in the opposite direction of the estimated average odds ratio (OR).

Usage

performance_poor(x)

Arguments

x

A (logistic) multilevel model.

Details

The POOR value always ranges between 0% and 50%.

  • 0%: Perfect homogeneity. Every single randomly selected pair of observations shows an effect in the same direction as the overall OR.

  • 50%: Total heterogeneity (pure chance). In exactly half of the cases, the effect is reversed; the stratum characteristic possesses no orderly predictive power whatsoever, as it is completely dominated by the unexplained stratum variance.

Practical Significance: A high POOR value (e.g., > 30%) serves as a strong warning to researchers against making overgeneralized statements about the utility of a stratum characteristic, as the average OR masks massive internal heterogeneity.

Value

A data frame with the parameter names and their POOR estimates.

References

Larsen K, Merlo J. Appropriate Assessment of Neighborhood Effects on Individual Health: Integrating Random and Fixed Effects in Multilevel Logistic Regression. American Journal of Epidemiology (2005) 161:81–88. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1093/aje/kwi017")}

Merlo J, Wagner P, Ghith N, Leckie G. An Original Stepwise Multilevel Logistic Regression Analysis of Discriminatory Accuracy: The Case of Neighbourhoods and Health. PLoS ONE (2016) 11:e0153778. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1371/journal.pone.0153778")}

See Also

performance_ior() and performance_mor() as additional metrics specifically for logistic multilevel regression models, and icc() for multilevel models in general.

Examples


data(sleepstudy, package = "lme4")
sleepstudy$mygrp <- sample(1:5, size = 180, replace = TRUE)
sleepstudy$high_reaction <- as.factor(datawizard::categorize(sleepstudy$Reaction))

m <- lme4::glmer(
  high_reaction ~ Days + (1 | Subject),
  data = sleepstudy,
  family = "binomial"
)
performance_poor(m)

m <- suppressWarnings(lme4::glmer(
  high_reaction ~ Days + (1 | mygrp) + (1 | Subject),
  data = sleepstudy,
  family = "binomial"
))
performance_poor(m)


performance documentation built on Sept. 10, 2026, 5:06 p.m.