Initialisation, downloading and parsing the data

Load the libraries we’ll use, set output options

Download the overall KS4 performance table. We’ll only use a few of he columns from this though.

The easiest way to geolocate schools seems to be looking up their postcodes in a table we download here from the web.

We download the detailed GCSE performance tables, select the interesting columns and make the names vaguely consistent. Work out the mean grade.

Selecting CS entries

OK, let’s look at just the CS entries. We’ll also work out the proportion of the year group who took CS.

Which are our top schools for CS?

OK. Now we’ve done all that, let’s see what we’ve got here!

Which schools entered more than 90% of their cohort for CS?

Which schools got the best average grades in CS? Let’s say an average of at least an 7.

But look, these are all independents or grammars. Well, maybe not:

Investigating the schools that offer CS

Are schools that offer CS different from the others?

## # A tibble: 2 x 6
##   OffersSubj     n   KS2    PP    A8      P8
##   <lgl>      <int> <dbl> <dbl> <dbl>   <dbl>
## 1 FALSE       2692  20.7 0.455  29.0 -0.719 
## 2 TRUE        2827  28.6 0.267  46.3 -0.0223

Does takeup vary between types of school, e.g. admissions policies?

## # A tibble: 5 x 2
##   ADMPOL Offered
##   <fct>    <dbl>
## 1 COMP    0.749 
## 2 SPEC    0.0243
## 3 IND     0.287 
## 4 SEL     0.810 
## 5 MOD     0.691

OK, so what does determine the chance that a schools offers CS?

## 
## Call:
## glm(formula = OffersSubj ~ KS2APS + PTFSM6CLA1A + ADMPOL + EGENDER, 
##     family = "binomial", data = gcsesubjall)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.3306  -0.0711   0.5130   0.6626   3.7820  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -7.71540    1.15057  -6.706 2.00e-11 ***
## KS2APS        0.34157    0.03948   8.652  < 2e-16 ***
## PTFSM6CLA1A  -1.31394    0.32010  -4.105 4.05e-05 ***
## ADMPOLSPEC   -1.47719    0.35882  -4.117 3.84e-05 ***
## ADMPOLIND    -1.75239    0.38996  -4.494 7.00e-06 ***
## ADMPOLSEL    -1.61032    0.28405  -5.669 1.44e-08 ***
## ADMPOLMOD    -0.49367    0.22033  -2.241   0.0251 *  
## EGENDERGIRLS -0.97490    0.17525  -5.563 2.65e-08 ***
## EGENDERBOYS   0.14732    0.24517   0.601   0.5479    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 4743.7  on 3765  degrees of freedom
## Residual deviance: 3098.1  on 3757  degrees of freedom
##   (1753 observations deleted due to missingness)
## AIC: 3116.1
## 
## Number of Fisher Scoring iterations: 7

Some exploratory plots

Enough with the tables and the models, show us some graphs. Do larger groups get lower scores?

So is their a link between uptake, PP and grades?

## 
## Call:
## lm(formula = AvGrade ~ Uptake + PTFSM6CLA1A, data = gcsesubjonly)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1868 -0.7895 -0.0776  0.7486  3.9174 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.65539    0.05844   96.78   <2e-16 ***
## Uptake      -2.19263    0.21300  -10.29   <2e-16 ***
## PTFSM6CLA1A -3.39614    0.15271  -22.24   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.144 on 2445 degrees of freedom
##   (379 observations deleted due to missingness)
## Multiple R-squared:  0.2004, Adjusted R-squared:  0.1998 
## F-statistic: 306.4 on 2 and 2445 DF,  p-value: < 2.2e-16

KS2 as a predictor of grades in GCSE CS:

Adding KS2 SATS into the model:

## 
## Call:
## lm(formula = AvGrade ~ Uptake + PTFSM6CLA1A + KS2APS, data = gcsesubjonly)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.7501 -0.6819 -0.0267  0.6212  3.5439 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -8.88211    0.49341 -18.001   <2e-16 ***
## Uptake      -2.70387    0.18357 -14.729   <2e-16 ***
## PTFSM6CLA1A -0.40835    0.16536  -2.469   0.0136 *  
## KS2APS       0.48328    0.01632  29.616   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9817 on 2444 degrees of freedom
##   (379 observations deleted due to missingness)
## Multiple R-squared:  0.4116, Adjusted R-squared:  0.4109 
## F-statistic: 569.9 on 3 and 2444 DF,  p-value: < 2.2e-16

Does the admission policy make any difference to grades?

Let’s look at a map of these

Comparisons with 2016-17

Loading the old data and adding columns to our dataframes for comparison. We convert to points using the DfE guidance for this.

These schools are new to CS (not allowing for academy conversion at the moment).

On the other hand, these schools that dropped CS in 2018 (again, not allowing for academy conversion).

Let’s look at the grades for the two years, bearing in mind we have a new spec and grading structure.

And uptake for the two years:

We can compare uptake and achievement changes for the two years:

##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -0.89446 -0.03273  0.01566  0.02696  0.07610  0.98837
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -3.2500 -0.4704  0.2042  0.2168  0.8644  4.9091     644

And finally, comparing both uptake and grade changes on the same plot.