Overview of the Analysis

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.

General data about the Local Wellness Policy Data

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:

  1. Factoring consideration will region, district_type, implementation_status, primary_barrier, and technical_assistance_priority variables
  2. The Analysis will need to group district_id by region, and then by district_type for segmentation.
  3. policy_readiness_score and barriers_counts will be able to provide mean(), median(), variance(), frequency_counts
  4. Immediate need to change assessment_response_rate into a number for mean(), median(), variance(), etc calculations

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"

The Questions (NOTE: My initial Questions without reviewing module questions)

  1. Total number of regions, and district_ids by region
  2. Total number (percentage) of district_id by suburban, rural and urban total and by region
  3. Average policy_readiness_score per region.
  4. average policy_readiness_score by district_type per region.
  5. Frequency of implementation_status, any trends (bar graphs)
  6. barriers_count by region
  7. Total barriers_count - median(), mean(), variance()
  8. frequency of “primary_barrier” (desc) - what i the most prominent?
  9. assessment_response_rate by region
  10. Frequency of technical assistance. Where are “high” needs?

Module Questions (May be duplication):

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]

Analysis of Local Wellness Policy Data

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.

  1. 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.

  2. 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.

  3. 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.