-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
188 lines (133 loc) · 8.48 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
---
title: "Burlington, VT, School Enrollment"
author: "Alex Reutter"
date: "`r format(Sys.Date())`"
output:
github_document:
# md_extension: +gfm_auto_identifiers
toc: true # table of content true
toc_depth: 3 # upto three depths of headings (specified by #, ## and ###)
---
```{r setup, include=FALSE, warning=FALSE, message=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r echo = FALSE}
library(knitr)
opts_chunk$set(message = FALSE, warning = FALSE, cache = TRUE,
cache.path = "./README-cache/",
fig.path = "./README-fig/")
```
The purpose of this project is to help shed some light on questions surrounding enrollment in schools in Vermont, especially the Burlington district. It is a reference from which easier-to-consume conclusions and recommendations can be drawn.
## Background
I originally ran this report in 2018 on data through the end of the 2016-2017 school year, when the school district of Burlington, VT, was in its nth consecutive year of staff cuts, and parents were concerned about whether these cuts will adversely affect the quality of education provided by the district.
Now I've added more years of data, as available from the VTAoE.
## Summary
While there is good evidence that statewide and Chittenden countywide enrollment is dropping, the data show that Burlington's K-12 enrollment has been stable over the time, and the expansion of the Pre-K program has actually increased total enrollment since 2003.
# Data sources
## Vermont Agency of Education
The VT Agency of Education (VTAoE)maintains a [portal where you can download reports of enrollment at Vermont’s Public schools](http://edw.vermont.gov/REPORTSERVER/Pages/ReportViewer.aspx?%2fPublic%2fEnrollment+Report). The data goes back to the 2003-2004 school year. Because it is time-consuming to submit the requests and download the data, I have saved original copies of Excel exports produced by the portal in this public GitHub repository.
## Burlington School District Annual Reports
The school district produces [annual reports](http://district.bsd.schoolfusion.us/modules/cms/pages.phtml?pageid=309846) that are publicly available. The numbers from the BSD Annual Reports are slightly different from the VTAOE numbers; my understanding is that this is because the numbers in each of the reports are pulled at different times of the school year, and enrollment fluctuates over the course of the school year.
The plots in this project are based on the VTAoE data.
# Analyses
In order to make this analysis open and replicable, the code used to produce the analysis is in this public GitHub repository. At the moment, I am using R code to work with the data.
## Processing the original reports
```{r echo = FALSE}
source("data processing.r")
```
Unfortunately, the VTAOE reports are not in good condition for performing further analysis. In order to get the data into shape, I wrote the data processing.r file. This processing file combines the reports and restructures them into a single dataset with the following columns:
* School, which identifies the school
* OperatingDistrict, which identifies the operating district the school is a part of
* SupervisoryUnion, which identifies the supervisory union or school district that the operating district is a part of
* County, which identifies the county in which the supervisory union operates
* Grade, which identifies the grade for which enrollment is reported. VTAOE does not have classroom-level data
* Year, which identifies the year that the school term ends; thus, rows with the value 2014 for Year report enrollment for the 2013-2014 school year
* Enrollment, which is the number of students enrolled in a given year in a given grade at a given school
## State-level analysis
It is clear that, in Vermont as a whole, total K-12 enrollment is decreasing, and over the 16 years of data available, the decline is near the [20% claimed by Sec. Holcombe](http://www.burlingtonfreepress.com/story/news/local/vermont/2017/10/19/vermont-education-budget-gap-may-have-burlington-tightening-its-belt/745578001/).
```{r echo=FALSE}
enrollment %>%
filter(Grade != 'PKEEE') %>%
group_by(year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=enrollmentRatio)) + geom_line()
```
The plot below shows that the rate of decline differs from county to county. There is a separate line to represent each county, which shows the enrollment in that county, relative to the maximum enrollment observed. Essex and Grafton counties have experienced the most severe declines, while Lamoille and Chittenden county have seen the least declines.
```{r echo=FALSE}
enrollment %>%
filter(Grade != 'PKEEE') %>%
group_by(County, year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=enrollmentRatio, color=County)) + geom_line()
```
This chart displays a ratio rather than the total enrollment because this makes the year-to-year changes easier to compare across counties.
## Chittenden county-level analysis
Let’s look more closely at the supervisory unions and school districts within Chittenden county. This is the same style of plot as shown for comparing the county-to-county enrollment, but here there is a separate line to represent each supervisory union or school district.
What this plot shows is that, within Chittenden county, most districts appear to have experienced a decline in K-12 enrollment; however, Burlington has held steady. **Update**: with the extra data available, it appears that Burlington's enrollment could now be declining.
```{r echo=FALSE}
enrollment %>%
filter(County == "Chittenden County") %>%
filter(Grade != 'PKEEE') %>%
group_by(SupervisoryUnion, year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=enrollmentRatio, color=SupervisoryUnion)) + geom_line()
```
## Focus on Burlington
The following table shows the year-by-year total enrollment in Burlington School District, not including the Pre-K students.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
filter(Grade != 'PKEEE') %>%
group_by(year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>% kable()
```
This chart breaks it down by school, which makes it look like the losses are occurring in high school.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
filter(Grade != 'PKEEE') %>%
group_by(School,year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=EnrollmentSum, color=School)) + geom_line()
```
This chart breaks it down by grade.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
filter(Grade != 'PKEEE') %>%
group_by(Grade,year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=EnrollmentSum, color=Grade)) + geom_line()
```
The following table shows the year-by-year total enrollment in Burlington School District, *including* the Pre-K children.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
group_by(year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>% kable()
```
This chart breaks it down by school.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
group_by(School,year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>%
ggplot(aes(x=year, y=EnrollmentSum, color=School)) + geom_line()
```
That is the Champlain School whose enrollment suddenly jumped in the 2012-2013 school year, due to the addition of Pre-K students.
```{r echo=FALSE}
enrollment %>%
filter(SupervisoryUnion == "Burlington SD") %>%
filter(School == "Champlain School") %>%
group_by(year) %>%
summarise(EnrollmentSum=sum(Enrollment)) %>%
mutate(maxEnrollment=max(EnrollmentSum),enrollmentRatio=EnrollmentSum/maxEnrollment) %>% kable()
```