This document provides of the descriptive analysis of the Local Wellness Policy assessment results. The survey was conduct during the school year of 2025-2026 and was shared to all school districts throughout South Carolina.
Below are inital questions and methods used to identify insights for each question.
Structure
library(readr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ purrr 1.2.2
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
data <- read.csv("local_wellness_policy.csv")
str(data)
## 'data.frame': 100 obs. of 10 variables:
## $ district_id : chr "D001" "D002" "D003" "D004" ...
## $ district_name : chr "District 001" "District 002" "District 003" "District 004" ...
## $ region : chr "Upstate" "Midlands" "Pee Dee" "Lowcountry" ...
## $ district_type : chr "Suburban" "Rural" "Urban" "Urban" ...
## $ policy_readiness_score : int 84 62 78 68 86 92 70 74 75 61 ...
## $ implementation_status : chr "Strong Implementation" "Early Implementation" "Partial Implementation" "Early Implementation" ...
## $ barriers_count : int 1 2 3 4 1 0 2 2 1 3 ...
## $ primary_barrier : chr "Community Engagement" "Staff Capacity" "Staff Capacity" "Funding" ...
## $ assessment_response_rate : chr "84%" "84%" "89%" "70%" ...
## $ technical_assistance_priority: chr "Low" "Medium" "Medium" "High" ...
Intial considerations regarding the structre:
Dimension
dim(data)
## [1] 100 10
Names
names(data)
## [1] "district_id" "district_name"
## [3] "region" "district_type"
## [5] "policy_readiness_score" "implementation_status"
## [7] "barriers_count" "primary_barrier"
## [9] "assessment_response_rate" "technical_assistance_priority"
Calculate the number of districts and frequency of each implementation status. [Duplicate] Calculate mean and median policy readiness score overall. [Duplicate] Calculate readiness score by region. [Duplicate] Compare mean with median. What might a difference suggest about the distribution? [Duplicated] Identify which barrier category appears most often. [Duplicate] Write three descriptive findings. Do not explain causality. [ Answer Below] Write one limitation and one next analytical question. [ Answer Below]
1. Total number of regions, and district_ids by region There are 4 regions in the data set which includes Lowcountry, Midlands, Pee Dee, and Upstate. Each region has 25 school districts within its region.
region_factor <- as.factor(data$region)
levels(region_factor)
## [1] "Lowcountry" "Midlands" "Pee Dee" "Upstate"
table(region_factor)
## region_factor
## Lowcountry Midlands Pee Dee Upstate
## 25 25 25 25
2. Total number of district_id by suburban, rural and urban total Looking at the total of schools categorized by district_type, Suburban is the largest type, followed by Rural, and then Urban
type_factor <- as.factor(data$district_type)
table(type_factor)
## type_factor
## Rural Suburban Urban
## 39 43 18
2a. Total number of suburban, rural and urban total by region Each region includes each of the district_types. This analysis provides more context into where schools are located across regions and district_types.
#district_type and regions.
type_region <- table(data$region, data$district_type)
type_region
##
## Rural Suburban Urban
## Lowcountry 12 10 3
## Midlands 4 14 7
## Pee Dee 13 10 2
## Upstate 10 9 6
3. Average policy_readiness_score. The average policy_readiness_score for all school districts is 73.95
average_policy_readiness <- mean(data$policy_readiness_score) #73.95
mean_policy_readiness <- median(data$policy_readiness_score) #74
3b. Average policy_readiness_score per region Looking at the overall mean, Midlands is the closet to the overall average, followed by the Lowcounty. Upstate has the highest average, while Pee Dee has the lowest readiness score. This probably highlights an opportunity to look further into how Upstate is performing in comparison to Pee Dee, since they are the furthest from the average.
#learning the tidyverse makes this way easier.
data %>%
group_by(region) %>%
summarize(mean_score = mean(policy_readiness_score))
## # A tibble: 4 × 2
## region mean_score
## <chr> <dbl>
## 1 Lowcountry 69.4
## 2 Midlands 76.6
## 3 Pee Dee 67.4
## 4 Upstate 82.5
3c. Normal distribution
hist(data$policy_readiness_score)
4. Average policy_readiness_score by district_type per region. Looking at this analysis, raises flags for Lowcountry that would be overlooked looking at its aggregate readiness score. The rural average readiness is 64.2 for both the Pee Dee and Lowcountry regions, and further investigation should take place to identify the root cause.
#Learning its not about memorizing but finding the function and syntax to help you answer your question.
regional_summary <- data %>%
group_by(region, district_type) %>%
summarize(
average_readiness = mean(policy_readiness_score, na.rm=TRUE),
.groups = "drop"
)
print(regional_summary)
## # A tibble: 12 × 3
## region district_type average_readiness
## <chr> <chr> <dbl>
## 1 Lowcountry Rural 64.2
## 2 Lowcountry Suburban 75.7
## 3 Lowcountry Urban 69
## 4 Midlands Rural 67.8
## 5 Midlands Suburban 77.8
## 6 Midlands Urban 79.1
## 7 Pee Dee Rural 64.2
## 8 Pee Dee Suburban 70.2
## 9 Pee Dee Urban 73.5
## 10 Upstate Rural 76.8
## 11 Upstate Suburban 88.2
## 12 Upstate Urban 83.3
5. Frequency of implementation_status, any trends (bar graphs) This highlights that Pee Dee and Lowcountry has a small number of schools with strong implementation. Lowcountry, Midlands, and Pee Dee has a high number of schools in early implementation compared to Upstate. In fact, Upstate is the only region with the majority of its school districts in either partial or strong implementation And schools identified as needing significant support are located in the Pee Dee and Lowcountry regions.
table(data$implementation_status, data$region)
##
## Lowcountry Midlands Pee Dee Upstate
## Early Implementation 9 8 10 2
## Needs Significant Support 4 0 4 0
## Partial Implementation 10 10 10 8
## Strong Implementation 2 7 1 15
6. barriers_count by region Lowcountry and Pee Dee are identified as having the highest barriers.
barriers_totals <- data %>%
group_by(region) %>%
summarize(total_barriers = sum(barriers_count, na.rm = TRUE))
print(barriers_totals)
## # A tibble: 4 × 2
## region total_barriers
## <chr> <int>
## 1 Lowcountry 61
## 2 Midlands 42
## 3 Pee Dee 66
## 4 Upstate 29
7. barriers_count mean, median, range The average barrier is 1.98 per school, with the median number of barriers is 2. The following shows high prevalence of barriers above the median and average. Pee Dee had the highest occurrence of barriers over the average, followed by Lowcountry.
avg_barrier <- mean(data$barriers_count) #1.98
median_barrier <- median(data$barriers_count) #2
range_barrier <- range(data$barriers_count) # 0 & 4
var_barrier <- var(data$barriers_count) #1.33
top_barriers_count <- data %>%
filter(barriers_count > 2) %>%
arrange(region) %>%
select(district_name, region,barriers_count)
print(top_barriers_count)
## district_name region barriers_count
## 1 District 004 Lowcountry 4
## 2 District 012 Lowcountry 3
## 3 District 016 Lowcountry 4
## 4 District 040 Lowcountry 4
## 5 District 044 Lowcountry 3
## 6 District 052 Lowcountry 4
## 7 District 060 Lowcountry 3
## 8 District 064 Lowcountry 3
## 9 District 068 Lowcountry 4
## 10 District 096 Lowcountry 3
## 11 District 100 Lowcountry 3
## 12 District 010 Midlands 3
## 13 District 026 Midlands 3
## 14 District 030 Midlands 3
## 15 District 066 Midlands 3
## 16 District 078 Midlands 3
## 17 District 086 Midlands 3
## 18 District 098 Midlands 3
## 19 District 003 Pee Dee 3
## 20 District 015 Pee Dee 3
## 21 District 023 Pee Dee 4
## 22 District 031 Pee Dee 3
## 23 District 035 Pee Dee 4
## 24 District 039 Pee Dee 3
## 25 District 051 Pee Dee 3
## 26 District 055 Pee Dee 4
## 27 District 059 Pee Dee 3
## 28 District 063 Pee Dee 3
## 29 District 071 Pee Dee 3
## 30 District 075 Pee Dee 3
## 31 District 079 Pee Dee 3
## 32 District 083 Pee Dee 4
## 33 District 091 Pee Dee 3
## 34 District 099 Pee Dee 3
## 35 District 061 Upstate 3
## 36 District 069 Upstate 3
8. frequency of “primary_barrier” (desc) - what i the most prominent? The data identifies top barriers to be staffing capacity, funding, data tracing and policy clarity.
primary_barrier_factor <- as.factor(data$primary_barrier)
table(primary_barrier_factor)
## primary_barrier_factor
## Community Engagement Data Tracking Funding
## 11 15 18
## Leadership Buy-In None Reported Policy Clarity
## 11 11 15
## Staff Capacity
## 19
8a. Frequency Lowcountry and Pee Dee Staff capacity followed by community engagement are top barriers for Lowcountry. While, policy clarity and data tracking are top barriers for Pee Dee. Across Lowcountry, Pee Dee, and Midlands noted funding barriers.
table(primary_barrier_factor, data$region)
##
## primary_barrier_factor Lowcountry Midlands Pee Dee Upstate
## Community Engagement 6 1 0 4
## Data Tracking 1 4 6 4
## Funding 5 6 5 2
## Leadership Buy-In 2 4 2 3
## None Reported 1 3 1 6
## Policy Clarity 3 2 8 2
## Staff Capacity 7 5 3 4
9. assessment_response_rate by region Response rate is relatively high across all regions.
library(stringr)
regional_response_avg <- data %>%
mutate(
assessment_response_rate = as.numeric(str_remove(assessment_response_rate, "%"))
) %>%
group_by(region) %>%
summarize(
avergae_response_rate_pct = mean(assessment_response_rate, na.rm = TRUE)
)
print(regional_response_avg)
## # A tibble: 4 × 2
## region avergae_response_rate_pct
## <chr> <dbl>
## 1 Lowcountry 83.3
## 2 Midlands 85.0
## 3 Pee Dee 81.7
## 4 Upstate 84.1
10. Frequency of technical assistance. Where are “high” needs? 12% of schools require high technical needs.
table(data$technical_assistance_priority)
##
## High Low Medium
## 12 53 35
10a. For schools who are requesting high technical assistance, they are all located in either the Lowcountry or Pee Dee regions. Additionally, on average, these school have low average readiness scores.
# assignment ... then '%>%' pipe as saying: "And then do this next.."
high_tech_need <- data %>%
#Step 1: Row isolation (only what you need)
filter(technical_assistance_priority == "High") %>%
#Step 2: bucket creation (separate into sub-groups for math category variable)
group_by(region) %>%
#step 3: Mathematical collapse (turn 100 rows into 1 summary row per group)
summarize(
average_score = mean(policy_readiness_score, na.rm = TRUE)
)
print(high_tech_need)
## # A tibble: 2 × 2
## region average_score
## <chr> <dbl>
## 1 Lowcountry 57.8
## 2 Pee Dee 58
What schools have high tech needs? The twelve identified schools with tech needs are listed below.
high_needs_ids <- data %>%
#Step 1: Keep only the high-need rows
filter(technical_assistance_priority == "High") %>%
#step 2: sort alphabetically by region
arrange(region) %>%
#step 3: keep only the columns you want to view
select(district_id, district_name, region)
print(high_needs_ids)
## district_id district_name region
## 1 D004 District 004 Lowcountry
## 2 D012 District 012 Lowcountry
## 3 D016 District 016 Lowcountry
## 4 D040 District 040 Lowcountry
## 5 D052 District 052 Lowcountry
## 6 D068 District 068 Lowcountry
## 7 D015 District 015 Pee Dee
## 8 D023 District 023 Pee Dee
## 9 D031 District 031 Pee Dee
## 10 D035 District 035 Pee Dee
## 11 D055 District 055 Pee Dee
## 12 D083 District 083 Pee Dee
Write three descriptive findings. Do not explain causality.
Lowcountry (69.40) and Pee Dee (67.36) had schools with the lowest readiness scores, compared to Midlands(76.56) and Upstate(82.48). The Midlands is closer to the average.
23 schools in the Upstate region are either in partial or strong implementation compared to other regions. This region also had the highest readiness score and had less schools reporting barriers over the average/median of 2.
High technical assistance was requested by 12 schools located in either the Pee Dee or Lowcountry. The average readiness scores for these schools are 58 for Pee Dee and 57.8 for the Lowcountry.
Write one limitation and one next analytical question.
One limitation is not understanding the size of the school districts. What if Upstate is more successful because their schools are smaller. Additionally, understanding funding because they will play a role in readiness.
My next analytical question is how is readiness being defined.