Quality Indices
Distribution Analysis
Explore distribution of key business metrics
Comprehensive benchmarking of business environments across 168 economies using World Bank Enterprise Survey data
Density plots showing the distribution of business environment metrics across countries. Use the arrows, dropdown, or auto-scroll to explore different indicators.
In-depth analysis of business environment indicators for individual countries
Bars rank which infrastructure services firms flag as biggest obstacles, indicating where reliability investments are needed.
Shows water and transport infrastructure constraints affecting business operations.
Financial product uptake across credit and deposit instruments highlights where inclusion gaps remain.
Bribery prevalence by transaction type surfaces which interactions with government most often trigger informal payments.
Shows workforce composition including female participation and skill levels.
Shows crime and security costs as obstacles to business operations.
Shows capacity utilization and operational efficiency metrics.
National-level indicators on governance, infrastructure, and trade complement the firm-level business environment radar.
World Bank Worldwide Governance Indicators ranging from -2.5 (weak) to +2.5 (strong).
In-depth analysis of business environment indicators for individual sectors
In-depth analysis of business environment indicators across geographic regions
Bars rank which infrastructure services firms in this region flag as biggest obstacles.
Water and transport constraints for firms in this region.
Financial product uptake across credit and deposit instruments for this region.
Bribery prevalence by transaction type for firms in this region.
Gender composition in workforce and ownership for firms in this region.
Crime as obstacle and security costs for firms in this region.
Operational performance metrics for firms in this region.
In-depth analysis of business environment indicators by firm size category
Bars rank which infrastructure services firms of this size flag as biggest obstacles.
The pie shows how firms of this size power operations (grid, generator, mixed).
Water and transport constraints for firms of this size.
Digital connectivity metrics for firms of this size.
Financial product uptake across credit and deposit instruments for this firm size.
The gauge reports average collateral required for loans for firms of this size.
Bribery prevalence by transaction type for firms of this size.
Management time spent on regulatory tasks for this firm size category.
Gender composition in workforce and ownership for firms of this size.
Workforce quality and training metrics for this firm size.
Crime as obstacle and security costs for firms of this size.
Crime-related losses as percentage of sales.
Operational performance metrics for firms of this size.
Export orientation of firms of this size.
Shows the geographic distribution of surveyed firms in this size category across countries.
Compare business environment indicators across multiple countries and regions
Summary of key indicators across all domains for selected countries
Compares firm-reported metrics (WBES) with national statistics (World Bank). Gaps may indicate differences between firm experience and national averages.
Compare business environment indicators across economic sectors by domain
Summary of key indicators across all domains for selected sectors
Compare business environment indicators across geographic regions by domain
Summary of key indicators across all domains for selected regions
Compare business environment indicators across firm size categories by domain
Summary of key indicators across all domains for selected firm sizes
Analyze power, water, and transport infrastructure impacts on business operations
Analyze financial inclusion, credit access, and financing constraints across economies
Complete transparency on data sources, quality issues, and analytical filtering logic
This section provides comprehensive documentation of data quality considerations following best practices for transparent data science . Understanding data limitations is essential for valid interpretation.
Bars show the share of non-missing responses for each key indicator so you can judge reliability before analysis.
Regional completeness highlights where survey coverage is thinner, guiding cautious interpretation.
Each issue is classified by severity and includes the specific filter/adjustment applied.
Purpose: Analyze power, water, and transport infrastructure impacts
Data Scope: Firms responding to infrastructure module (variables c6-c20)
wbes_data |>
# Step 1: Remove missing values
filter(!is.na(power_outages_per_month)) |>
# Step 2: Winsorize extreme values
mutate(
avg_outage_duration_hrs = pmin(avg_outage_duration_hrs, 48)
) |>
# Step 3: Flag low-sample countries
mutate(
low_sample_flag = sample_size < 200,
reliability = case_when(
sample_size >= 500 ~ "High",
sample_size >= 200 ~ "Medium",
TRUE ~ "Low (Use with caution)"
)
) |>
# Step 4: Apply weights for aggregation
group_by(country, year) |>
summarise(
weighted_outages = weighted.mean(
power_outages_per_month,
w = sample_weight,
na.rm = TRUE
),
n_firms = n(),
.groups = "drop"
)
Purpose: Analyze credit constraints and financial inclusion
Data Scope: Firms responding to finance module (variables k1-k30)
wbes_data |>
# Step 1: Remove logical inconsistencies
filter(!(has_loan == 1 & has_bank_account == 0)) |>
# Step 2: Winsorize collateral at 99th percentile
mutate(
collateral_required_pct = pmin(
collateral_required_pct,
quantile(collateral_required_pct, 0.99, na.rm = TRUE)
)
) |>
# Step 3: Create firm size categories (World Bank SME definitions)
mutate(
size_category = case_when(
employees < 20 ~ "Small (5-19)",
employees < 100 ~ "Medium (20-99)",
TRUE ~ "Large (100+)"
)
) |>
# Step 4: Calculate credit gap by size
group_by(country, size_category) |>
summarise(
credit_access_pct = weighted.mean(has_credit_line, w = sample_weight, na.rm = TRUE) * 100,
rejection_rate = weighted.mean(loan_rejected, w = sample_weight, na.rm = TRUE) * 100,
avg_collateral = weighted.mean(collateral_required_pct, w = sample_weight, na.rm = TRUE),
n_firms = n(),
.groups = "drop"
)
Purpose: Analyze bribery incidence and regulatory burden
Data Scope: Firms responding to governance module (variables j1-j15)
Caution: Sensitive topic with known underreporting bias
wbes_data |>
# Step 1: Filter on response rate for corruption questions
filter(corruption_response_rate >= 0.50) |>
# Step 2: Flag potential social desirability bias
mutate(
potential_underreport = response_time_seconds < 5,
# Apply conservative adjustment for flagged responses
bribery_adjusted = case_when(
potential_underreport & bribery_incidence == 0 ~ 0.1, # Small upward adjustment
TRUE ~ bribery_incidence
)
) |>
# Step 3: Weighted aggregation
group_by(country, year) |>
summarise(
bribery_incidence_pct = weighted.mean(
bribery_adjusted,
w = sample_weight,
na.rm = TRUE
) * 100,
response_rate = mean(!is.na(bribery_incidence)),
n_firms = n(),
.groups = "drop"
) |>
# Step 4: Add reliability indicators
mutate(
reliability_flag = case_when(
response_rate < 0.6 ~ "Low - High non-response",
n_firms < 200 ~ "Low - Small sample",
TRUE ~ "Adequate"
)
)
Purpose: Build radar charts and summary cards for a single country
Data Scope: Latest survey wave with complete core indicators
Key Output: Radar scores normalized to 0–100 for comparability
profile_data <- wbes_data |>
group_by(country) |>
filter(year == max(year, na.rm = TRUE)) |>
ungroup() |>
filter(!if_any(c(power_outages_per_month, firms_with_credit_line_pct,
bribery_incidence_pct, capacity_utilization_pct,
export_firms_pct, female_ownership_pct), is.na)) |>
mutate(power_outages_per_month = pmin(power_outages_per_month, 30))
Purpose: Enable like-for-like comparisons across selected countries
Data Scope: Countries with Global Methodology surveys (2019+)
Caution: Exclude economies with sample size < 150 to avoid unstable ranks
benchmark_data <- wbes_data |>
filter(year >= 2019, sample_size >= 150) |>
mutate(size_bucket = case_when(
employees < 20 ~ "Small (5-19)",
employees < 100 ~ "Medium (20-99)",
TRUE ~ "Large (100+)"
)) |>
group_by(country) |>
summarise(
indicator_mean = weighted.mean(.data[[indicator_id]], w = sample_weight, na.rm = TRUE),
indicator_se = sd(.data[[indicator_id]], na.rm = TRUE) / sqrt(n()),
.groups = "drop"
)
Purpose: Examine labor constraints and gender inclusion
Data Scope: Workforce and gender variables (b3, b4, b5, c6)
Notes: Gender variables use female share; missing values imputed with sector medians
workforce_clean <- wbes_data |>
filter(employees >= 5) |>
group_by(sector) |>
mutate(female_workers_pct = if_else(
is.na(female_workers_pct),
median(female_workers_pct, na.rm = TRUE),
female_workers_pct
)) |>
ungroup() |>
mutate(gender_gap_pct = female_workers_pct - female_ownership_pct,
low_response_flag = female_ownership_response_rate < 0.6)
Purpose: Assess capacity utilization, exports, and competitiveness
Data Scope: Capacity (f1), exports (d3), and constraint indicators
Method: Smooth volatile year-to-year changes with 3-year rolling averages where panel data exist
performance <- wbes_panel |>
mutate(export_firms_pct = pmin(export_firms_pct, quantile(export_firms_pct, 0.95, na.rm = TRUE))) |>
group_by(country) |>
arrange(year) |>
mutate(capacity_roll = zoo::rollmean(capacity_utilization_pct, 3, fill = NA, align = "right")) |>
summarise(
capacity_recent = coalesce(last(capacity_roll[!is.na(capacity_roll)]), last(capacity_utilization_pct)),
export_recent = last(export_firms_pct),
n_obs = n(),
reliability = if_else(n_obs < 100, "Low", "Adequate"),
.groups = "drop"
)
Purpose: Evaluate crime obstacles and security spending
Data Scope: Crime and security variables (g5, g6, j14)
Bias Check: Exclude firms with zero security spend but positive crime losses as inconsistent
security_filters <- wbes_data |>
filter(!(security_costs_pct == 0 & crime_losses_pct > 0)) |>
mutate(security_costs_pct = pmin(security_costs_pct, 50)) |>
group_by(income) |>
summarise(
crime_obstacle = weighted.mean(IC.FRM.CRIM.ZS, w = sample_weight, na.rm = TRUE),
security_costs = weighted.mean(security_costs_pct, w = sample_weight, na.rm = TRUE),
combined_risk = crime_obstacle * 0.6 + security_costs * 0.4,
.groups = "drop"
)
Purpose: Valid comparison of business environments across countries
Key Challenge: Survey timing, definitions, and sampling vary
wbes_data |>
# Step 1: Use only Global Methodology surveys (2019+)
filter(
year >= 2019,
survey_methodology == "Global"
) |>
# Step 2: Standardize firm size (harmonize country definitions)
mutate(
size_standardized = case_when(
employees >= 5 & employees < 20 ~ "Small (5-19)",
employees >= 20 & employees < 100 ~ "Medium (20-99)",
employees >= 100 ~ "Large (100+)",
TRUE ~ NA_character_
)
) |>
filter(!is.na(size_standardized)) |>
# Step 3: Weight by sector to ensure comparability
group_by(country, sector) |>
mutate(
sector_weight = sample_weight * sector_adjustment_factor
) |>
ungroup() |>
# Step 4: Calculate indicators with design-based SEs
group_by(country) |>
summarise(
across(
c(power_outages_per_month, firms_with_credit_line_pct, bribery_incidence_pct),
list(
mean = ~weighted.mean(.x, w = sector_weight, na.rm = TRUE),
se = ~sqrt(sum(sector_weight^2 * (.x - weighted.mean(.x, w = sector_weight, na.rm = TRUE))^2, na.rm = TRUE)) / sum(sector_weight, na.rm = TRUE)
)
),
n_firms = n(),
survey_year = max(year),
.groups = "drop"
) |>
# Step 5: Add confidence intervals
mutate(
across(
ends_with("_mean"),
list(
ci_lower = ~.x - 1.96 * get(gsub("_mean$", "_se", cur_column())),
ci_upper = ~.x + 1.96 * get(gsub("_mean$", "_se", cur_column()))
),
.names = "{.col}_{.fn}"
)
)
The Enterprise Surveys use a stratified random sampling methodology with three levels of stratification:
Download complete data quality documentation for your records:
World Bank. (2024). Enterprise Surveys. Available at: https://www.enterprisesurveys.org Dashboard developed by Kwiz Computing Technologies. https://kwizresearch.com
Business Environment Benchmarking using World Bank Enterprise Survey Data
The Enterprise Surveys are the World Bank's flagship firm-level data collection, providing comparable, standardized data on the business environment across economies.
Official Data Source: enterprisesurveys.org
Boutique Data Science Consultancy
Nairobi, Kenya
World Bank Enterprise Survey data is publicly available under the World Bank Terms of Use .
Users should cite the source as:
World Bank Group. Enterprise Surveys. Available at: https://www.enterprisesurveys.org
This dashboard is developed by Kwiz Computing Technologies.
For commercial licensing, customization, or consultancy inquiries:
Explore distribution of key business metrics
Apply filters to refine your analysis