Overview
The bueller package provides automated analysis and reporting for assessment participation and chronic absenteeism patterns. Designed for state education agencies, it generates comprehensive reports that help identify student engagement challenges across districts and schools.
Core Function: bueller_report()
The main function generates multi-year trend analysis reports in both HTML and Word formats:
bueller_report(
data = your_combined_dataset,
output_dir = where_your_reports_will_live
)
Parameters
data
: Combined dataset with test participation and chronic absenteeism dataoutput_dir
: Directory where reports will be saved
Required Data Format
The package expects a single combined dataset with the following structure:
Required Columns
Column Name | Type | Description |
---|---|---|
COUNTY_ID |
Integer | County identifier |
DISTRICT_ID |
Integer | District identifier |
SCHOOL_ID |
Integer | School identifier |
COUNTY_NAME |
Character | County name |
DISTRICT_NAME |
Character | District name |
SCHOOL_NAME |
Character | School name |
YEAR |
Integer | Academic year (2023 = 2023-24) |
SUBJECT |
Character | “ELA” or “MATH” |
DISAGGREGATED_GROUP |
Character | Student group (e.g., “All_Students”, “Hispanic”, “English_Learners”) |
PARTICIPATION_RATE |
Numeric | Assessment participation rate (0-100) |
CHRONIC_ABSENT_RATE |
Numeric | Chronic absenteeism rate (0-100) |
STUDENTS_ENROLLED |
Integer | Number of students enrolled |
Data Structure Requirements
Multi-Year Data: Each row represents a unique combination of school-year-subject-student group. The package analyzes trends across years, so multiple years of data are essential.
Subject Coverage: Include both ELA and MATH data. Each school-year-student group combination should have separate rows for ELA and MATH.
Student Groups: Include “All_Students” as well as disaggregated groups. The “All_Students” group serves as the baseline for gap analysis.
Example Data Structure
# Example of properly formatted data
<- data.frame(
sample_data COUNTY_ID = c("01", "01", "01", "01"),
DISTRICT_ID = c("001", "001", "001", "001"),
SCHOOL_ID = c("0001", "0001", "0001", "0001"),
COUNTY_NAME = c("Alameda", "Alameda", "Alameda", "Alameda"),
DISTRICT_NAME = c("Oakland Unified", "Oakland Unified", "Oakland Unified", "Oakland Unified"),
SCHOOL_NAME = c("Lincoln Elementary", "Lincoln Elementary", "Lincoln Elementary", "Lincoln Elementary"),
YEAR = c(2023, 2023, 2023, 2023),
SUBJECT = c("ELA", "MATH", "ELA", "MATH"),
DISAGGREGATED_GROUP = c("All_Students", "All_Students", "Hispanic", "Hispanic"),
PARTICIPATION_RATE = c(94.5, 93.2, 89.1, 88.7),
CHRONIC_ABSENT_RATE = c(18.3, 18.3, 22.1, 22.1),
STUDENTS_ENROLLED = c(245, 245, 156, 156)
)
Data Quality Checks
Before running bueller_report()
:
# Check required columns
<- c("COUNTY_ID", "DISTRICT_ID", "SCHOOL_ID", "COUNTY_NAME",
required_cols "DISTRICT_NAME", "SCHOOL_NAME", "YEAR", "SUBJECT",
"DISAGGREGATED_GROUP", "PARTICIPATION_RATE",
"CHRONIC_ABSENT_RATE", "STUDENTS_ENROLLED")
<- required_cols[!required_cols %in% names(your_data)]
missing_cols if(length(missing_cols) > 0) {
stop("Missing required columns: ", paste(missing_cols, collapse = ", "))
}
# Check data ranges
summary(your_data[c("PARTICIPATION_RATE", "CHRONIC_ABSENT_RATE")])
# Check for required student group
if(!"All_Students" %in% your_data$DISAGGREGATED_GROUP) {
warning("All_Students group not found - gap analysis may not work properly")
}
Report Output
The function generates:
- HTML Report: Interactive report with embedded tables and visualizations
- Word Document: Formatted report suitable for printing and sharing
- Analysis Focus:
- Multi-year trends in participation and absenteeism
- School-level variation analysis within districts
- Student group gap analysis
- Federal compliance tracking (95% participation threshold)
Getting Started
# Install the package (if not already installed)
::install_github("erwx/bueller")
devtools
# Load the package
library(bueller)
# Generate your report
bueller_report(
data = your_prepared_data,
output_dir = "engagement_reports/"
)