Background

Smaller classes are believed to enhance learning by allowing instructors to better focus on individual students. The Tennessee state department conducted the four-year Student/Teacher Achievement Ratio (STAR) study in order to verify this claim.

Problem statement

However, I wanted to investigate whether smaller class sizes would lead to positive outcomes regardless of the teacher’s level of experience. Which leads to my problem statement:

Do teachers with low experience level perform better in small classes ?

This question is of significant importance as the answer could aid in optimizing school staffing.

For instance, instead of waiting for highly experienced teachers to handle larger classes of 30 students, schools could consider hiring multiple less experienced teachers to teach smaller classes of 10 or fewer students.

This approach would not only provide the teachers with valuable experience but could also prove to be a strategic investment for schools.

Dataset

The data set I analyzed includes survey results from STAR, with 26,000 observations from over 1300 teachers, with education levels varying from associate to graduate degrees. These teachers were placed in different class sizes:

#Load data set, remove index column
df <- read.csv("star.csv")
df <- df[, -which(names(df) == "X")]
head(df)

Data wrangling

I have decided to only keep data on the teacher’s experience, and the test scores of their students. I also decided to combine the reading and math scores into one new column for this observation:

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#Columns: make a subset of the data frame with only these columns in it
my_df <-subset(df, select = c("cltype","hdeg","clad","exp","read","math","tch"))
#Delete rows with NA values in these columns
my_df <- my_df %>% filter(!is.na(hdeg))
my_df <- my_df %>% filter(!is.na(clad))
my_df <- my_df %>% filter(!is.na(exp))
my_df <- my_df %>% filter(!is.na(read))
my_df <- my_df %>% filter(!is.na(math))
#Create new column from math and read scores
my_df$score <- my_df$math + my_df$read
my_df <- my_df[, -which(names(my_df) == "math")]
my_df <- my_df[, -which(names(my_df) == "read")]
head(my_df)

Data exploration

I have decided to only keep the data on the teachers and the test scores of the students that they instructed. Here I have 3 graphs that helped me explore the data:

Most of the teachers seem to be Bachelor holders, and have less than 15 years of experience.

library(dplyr)
#Columns: make an other subset of the subset. Delete all duplicates rows of tch column
ex_df <- subset(df, select = c("hdeg","clad","exp","tch"))
ex_df <- distinct(ex_df, tch, .keep_all = TRUE)
#Make this char column into a column of levels
ex_df$hdeg <- factor(ex_df$hdeg)
#Make bar plot of teacher education and career ladder
barplot(table(ex_df$hdeg))

barplot(table(ex_df$clad))

hist(ex_df$exp, breaks = 10, col = "skyblue", border = "black", main = "Histogram of Year of Experience", xlab = "Years of experience", ylab = "Frequency")

#Bar plot to compare years of experience with education
plot(ex_df$hdeg, ex_df$exp, main = "Experience vs Education", xlab = "Education", ylab = "Experience")

Here I wanted to see if there was a relation between the teacher’s career level and their year of experience.

# Calculate the correlation between column1 and column2
plot(factor(ex_df$clad), ex_df$exp, main = "Experience vs Career ladder", xlab = "Career", ylab = "Experience")

Here, I wanted to look at the mean score for different amount of experience, by different types of classroom. This was done for all teachers.

In this graph, each bar represents the mean of the scores for a particular group of teachers with similar amount of experience (first bar on the left represents the mean score of all teacher with 0 experience).

Now each bar has 3 colors:

-Blue is for regular classes -Red is for regular classes with teaching aid -Green is for small classes

They overlap each other depending on which group got the higher mean score.

# Calculate the mean of "score" by grouping on "year"
mean_scores <- aggregate(score ~ exp + cltype, data = my_df, FUN = mean)
new_df <- data.frame(score = mean_scores$score, years = mean_scores$exp)


# Create bar graph with bars of different colors
barplot(mean_scores$score[mean_scores$cltype == "reg"], col = "blue", border = "black", main = "Bar Graph of Scores by Year of Experience and Class Type", xlab = "Year of Experience", ylab = "Mean Score")
barplot(mean_scores$score[mean_scores$cltype == "small"], col = "green", border = "black", add = TRUE)
barplot(mean_scores$score[mean_scores$cltype == "reg+A"], col = "red", border = "black", add = TRUE)

Here is a summary of the mean score for different type of class sizes:

count <- levels(factor(my_df$cltype))
for (i in count){
  print(paste(rep("____", 30), collapse = ""))
  print(paste("Summary for", i, ": "))
  print(summary(my_df$score[my_df$cltype == i]))
}
## [1] "________________________________________________________________________________________________________________________"
## [1] "Summary for reg : "
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     635     974    1093    1085    1194    1501 
## [1] "________________________________________________________________________________________________________________________"
## [1] "Summary for reg+A : "
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     719     982    1116    1098    1207    1527 
## [1] "________________________________________________________________________________________________________________________"
## [1] "Summary for small : "
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     756    1001    1129    1113    1223    1502

##Conclusion:

From the previous Bar graph, we can see that teachers with lower number of years of experience teaching small classes can perform just as well as teachers with 10+ years of experience teaching regular sized classes with teaching aids.

This finding has significant implications for schools as it suggests a potential cost-effective approach. Instead of mandating a highly experienced teacher alongside another staff member as a teacher’s aid, schools could opt to hire a single less experienced teacher for a small classroom and still attain similar outcomes. This insight could lead to more efficient resource allocation and improved overall educational performance.