2022-2023 Science Benchmark Data:

Research Question: What are the trends in student performance across 6th, 7th, and 8th graders on science benchmark assessments over the academic year? Which specific questions or standards show consistent struggles or growth across all three benchmarks?

1. Load necessary libraries:

This section ensures that all the required libraries for the analysis are loaded. Each library serves a specific purpose in handling different aspects of the data:

  • readxl: Used to read Excel files containing benchmark data.

  • purrr: Enhances iteration and functional programming.

  • dplyr: Provides functions for data manipulation like filtering, selecting, and summarizing data.

  • tidyr: Helps in tidying data, such as pivoting and reshaping datasets.

  • naniar: Used for visualizing and handling missing data in the dataset.

  • visdat: Helps in creating heatmaps that visually show missing values in the dataset.

  • ggplot2: A powerful package for creating visualizations like line plots and bar charts.

  • DT: Allows the creation of interactive tables for easier data exploration.

  • reshape2: Used for reshaping data, especially in transforming data between wide and long formats.

  • knitr: Helps in knitting R Markdown files into different formats like HTML, PDF, and Word.

  • corrplot: Facilitates creating correlation plots, useful in showing relationships between variables.

  • stringr: Used for working with strings, such as extracting or cleaning text data.

The libraries loaded in this section lay the groundwork for the data analysis and visualizations performed in the subsequent steps.

## 
## 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
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
## corrplot 0.92 loaded
## Warning: package 'gt' was built under R version 4.4.1
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout

2. Explore the data

2.1 Load the data

The goal of this section is to import the raw data from the Excel file into R, laying the foundation for further data cleaning, manipulation, and analysis. After this, the data will be explored and prepared for deeper insight into student performance across benchmarks.

  • Reading 6th, 7th, and 8th Grade Benchmarks:

    • The read_excel() function is used to load the data for different grade levels and benchmarks. This includes data from three assessments for each grade, allowing us to analyze performance trends over time.

    • The benchmark sheets are labeled accordingly (e.g., “6th Grade Benchmark 1”, “7th Grade Benchmark 2”), and the data is read for each grade level separately.

  • Cleaning 7th Grade Data:

For the 7th-grade benchmark 1 data, specific columns (I, N, P, R, S, U) are removed. These columns represent hidden information that, I assume, is irrelevant for analysis.

## New names:
## New names:
## New names:
## New names:
## New names:
## New names:
## New names:
## New names:
## New names:
## • `` -> `...1`
## • `` -> `...25`
## • `` -> `...26`

2.2 Load all data into a list:

In this section, we streamline the process of loading the benchmark data for all grades and assessments by placing them into a list structure. This helps to simplify future data manipulations and ensures consistency across the different datasets.

By organizing the data in a list, future analysis and transformations (such as combining or comparing benchmarks across different grades) become more manageable, making it easier to perform operations across the entire dataset.

## List of 9
##  $ benchmark_6_1: tibble [28 × 26] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 600  : chr [1:28] "% Correct" "41" "62" "38" ...
##   ..$ 601  : chr [1:28] "% Correct" "60" "63" "30" ...
##   ..$ 602  : chr [1:28] "% Correct" "50" "50" "43" ...
##   ..$ 603  : chr [1:28] "% Correct" "50" "50" "20" ...
##   ..$ 604  : chr [1:28] "% Correct" "55" "48" "30" ...
##   ..$ 605  : chr [1:28] "% Correct" "22" "17" "9" ...
##   ..$ 606  : chr [1:28] "% Correct" "25" "33" "17" ...
##   ..$ 607  : chr [1:28] "% Correct" "12" "24" "36" ...
##   ..$ 608  : chr [1:28] "% Correct" "31" "65" "27" ...
##   ..$ 609  : chr [1:28] "% Correct" "48" "50" "15" ...
##   ..$ 610  : chr [1:28] "% Correct" "50" "49" "18" ...
##   ..$ 611  : chr [1:28] "% Correct" "39" "39" "23" ...
##   ..$ 612  : chr [1:28] "% Correct" "50" "50" "38" ...
##   ..$ 613  : chr [1:28] "% Correct" "54" "50" "25" ...
##   ..$ 614  : chr [1:28] "% Correct" "40" "43" "20" ...
##   ..$ 615  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 616  : chr [1:28] "% Correct" "53" "40" "23" ...
##   ..$ 617  : chr [1:28] "% Correct" "34" "62" "14" ...
##   ..$ 618  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 619  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 620  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 621  : chr [1:28] "% Correct" "50" "50" "17" ...
##   ..$ 676  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...25: chr [1:28] "Per Question Average" "42.4444444444444" "46.9444444444444" "24.6111111111111" ...
##   ..$ ...26: chr [1:28] "Skills" "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" ...
##  $ benchmark_6_2: tibble [28 × 27] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 600  : chr [1:28] "% Correct" "90" "90" "55" ...
##   ..$ 601  : chr [1:28] "% Correct" "96" "86" "57" ...
##   ..$ 602  : chr [1:28] "% Correct" "93" "81" "44" ...
##   ..$ 603  : chr [1:28] "% Correct" "93" "60" "43" ...
##   ..$ 604  : chr [1:28] "% Correct" "77" "54" "41" ...
##   ..$ 605  : chr [1:28] "% Correct" "58" "46" "55" ...
##   ..$ 606  : chr [1:28] "% Correct" "82" "46" "18" ...
##   ..$ 607  : chr [1:28] "% Correct" "70" "50" "20" ...
##   ..$ 608  : chr [1:28] "% Correct" "58" "26" "21" ...
##   ..$ 609  : chr [1:28] "% Correct" "???" NA NA ...
##   ..$ 610  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 611  : chr [1:28] "% Correct" "84" "40" "28" ...
##   ..$ 612  : chr [1:28] "% Correct" "96" "52" "52" ...
##   ..$ 613  : chr [1:28] "% Correct" "80" "48" "28" ...
##   ..$ 614  : chr [1:28] "% Correct" "80" "32" "36" ...
##   ..$ 615  : chr [1:28] "% Correct" "100" "55" "59" ...
##   ..$ 616  : chr [1:28] "% Correct" "92" "62" "46" ...
##   ..$ 617  : chr [1:28] "% Correct" "60" "32" "12" ...
##   ..$ 618  : chr [1:28] "% Correct" "86" "35" "21" ...
##   ..$ 619  : chr [1:28] "% Correct" "85" "44" "56" ...
##   ..$ 620  : chr [1:28] "% Correct" "76" "35" "21" ...
##   ..$ 621  : chr [1:28] "% Correct" "100" "33" "0" ...
##   ..$ 622  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 676  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...26: chr [1:28] "Per Question Average" "81.8947368421053" "51.2631578947368" "37.5263157894737" ...
##   ..$ ...27: chr [1:28] "Skills" "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" ...
##  $ benchmark_6_3: tibble [28 × 25] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 600  : chr [1:28] "% Correct" "75" "93" "72" ...
##   ..$ 601  : chr [1:28] "% Correct" "68" "92" "76" ...
##   ..$ 602  : chr [1:28] "% Correct" "66" "87" "66" ...
##   ..$ 603  : chr [1:28] "% Correct" "64" "94" "67" ...
##   ..$ 604  : chr [1:28] "% Correct" "77" "54" "39" ...
##   ..$ 605  : chr [1:28] "% Correct" "76" "50" "50" ...
##   ..$ 606  : chr [1:28] "% Correct" "95" "55" "50" ...
##   ..$ 607  : chr [1:28] "% Correct" "75" "60" "28" ...
##   ..$ 608  : chr [1:28] "% Correct" "87" "34" "25" ...
##   ..$ 611  : chr [1:28] "% Correct" "83" "58" "29" ...
##   ..$ 612  : chr [1:28] "% Correct" "96" "87" "73" ...
##   ..$ 613  : chr [1:28] "% Correct" "93" "54" "57" ...
##   ..$ 614  : chr [1:28] "% Correct" "91" "39" "17" ...
##   ..$ 615  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 616  : chr [1:28] "% Correct" "64" "76" "48" ...
##   ..$ 617  : chr [1:28] "% Correct" "83" "66" "35" ...
##   ..$ 618  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 619  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 620  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 621  : chr [1:28] "% Correct" "60" "0" "20" ...
##   ..$ 622  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 676  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...24: chr [1:28] "Per Question Average" "78.3125" "62.4375" "47" ...
##   ..$ ...25: chr [1:28] "Skills" "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" ...
##  $ benchmark_7_1: tibble [28 × 22] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1    : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 700     : chr [1:28] "% Correct" "23" "52" "39" ...
##   ..$ 701     : chr [1:28] "% Correct" "24" "36" "40" ...
##   ..$ 702     : chr [1:28] "% Correct" "24" "48" "33" ...
##   ..$ 703     : chr [1:28] "% Correct" "6" "38" "19" ...
##   ..$ 704     : chr [1:28] "% Correct" "23" "36" "23" ...
##   ..$ 705     : chr [1:28] "% Correct" "24" "34" "14" ...
##   ..$ 706     : chr [1:28] "% Correct" "14" "32" "46" ...
##   ..$ 707...10: chr [1:28] "% Correct" "18.5185185185185" "25.9259259259259" "25.9259259259259" ...
##   ..$ 708     : chr [1:28] "% Correct" "21" "25" "39" ...
##   ..$ 709     : chr [1:28] "% Correct" "14" "0" "14" ...
##   ..$ 710     : chr [1:28] "% Correct" "10" "60" "0" ...
##   ..$ 711...15: chr [1:28] "% Correct" "13.3333333333333" "36.6666666666667" "26.6666666666667" ...
##   ..$ 712...17: chr [1:28] "% Correct" "20" "33.3333333333333" "36.6666666666667" ...
##   ..$ 713...20: chr [1:28] "% Correct" "28.5714285714286" "46.4285714285714" "35.7142857142857" ...
##   ..$ 714...22: chr [1:28] "% Correct" "3.57142857142857" "53.5714285714286" "28.5714285714286" ...
##   ..$ 715     : chr [1:28] "% Correct" "30" "41" "30" ...
##   ..$ 716     : chr [1:28] "% Correct" "32" "59" "32" ...
##   ..$ 717     : chr [1:28] "% Correct" "21.4285714285714" "25" "46.4285714285714" ...
##   ..$ 718     : chr [1:28] "% Correct" "46.1538461538462" "57.6923076923077" "26.9230769230769" ...
##   ..$ 719     : chr [1:28] "% Correct" "22" "33" "22" ...
##   ..$ ...28   : chr [1:28] "Per Question Average" "17.2529664068126" "32.2545474468551" "24.3421777652547" ...
##  $ benchmark_7_2: tibble [28 × 22] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 700  : chr [1:28] "% Correct" "4" "35" "26" ...
##   ..$ 701  : chr [1:28] "% Correct" "4" "48" "68" ...
##   ..$ 702  : chr [1:28] "% Correct" "5" "10" "10" ...
##   ..$ 703  : chr [1:28] "% Correct" "24" "47" "65" ...
##   ..$ 704  : chr [1:28] "% Correct" "25" "50" "60" ...
##   ..$ 705  : chr [1:28] "% Correct" "13" "39" "78" ...
##   ..$ 706  : chr [1:28] "% Correct" "12" "32" "64" ...
##   ..$ 707  : chr [1:28] "% Correct" "30" "52" "48" ...
##   ..$ 708  : chr [1:28] "% Correct" "13" "35" "39" ...
##   ..$ 709  : chr [1:28] "% Correct" "???" NA NA ...
##   ..$ 710  : chr [1:28] "% Correct" "???" NA NA ...
##   ..$ 711  : chr [1:28] "% Correct" "30" "11" "59" ...
##   ..$ 712  : chr [1:28] "% Correct" "31" "34" "55" ...
##   ..$ 713  : chr [1:28] "% Correct" "18" "36" "61" ...
##   ..$ 714  : chr [1:28] "% Correct" "17" "38" "72" ...
##   ..$ 715  : chr [1:28] "% Correct" "4" "20" "12" ...
##   ..$ 716  : chr [1:28] "% Correct" "0" "24" "10" ...
##   ..$ 717  : chr [1:28] "% Correct" "???" NA NA ...
##   ..$ 718  : chr [1:28] "% Correct" "36" "43" "50" ...
##   ..$ 719  : chr [1:28] "% Correct" "38" "46" "38" ...
##   ..$ ...22: chr [1:28] "Per Question Average" "17.8823529411765" "35.2941176470588" "47.9411764705882" ...
##  $ benchmark_7_3: tibble [28 × 22] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 700  : chr [1:28] "% Correct" "22" "39" "96" ...
##   ..$ 701  : chr [1:28] "% Correct" "96" "88" "92" ...
##   ..$ 702  : chr [1:28] "% Correct" "25" "5" "90" ...
##   ..$ 703  : chr [1:28] "% Correct" "50" "38" "82" ...
##   ..$ 704  : chr [1:28] "% Correct" "20" "34" "100" ...
##   ..$ 705  : chr [1:28] "% Correct" "38" "34" "63" ...
##   ..$ 706  : chr [1:28] "% Correct" "23" "31" "73" ...
##   ..$ 707  : chr [1:28] "% Correct" "46" "31" "72" ...
##   ..$ 708  : chr [1:28] "% Correct" "26" "31" "44" ...
##   ..$ 709  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 710  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 711  : chr [1:28] "% Correct" "45" "24" "72" ...
##   ..$ 712  : chr [1:28] "% Correct" "38" "7" "62" ...
##   ..$ 713  : chr [1:28] "% Correct" "55" "55" "90" ...
##   ..$ 714  : chr [1:28] "% Correct" "59" "34" "72" ...
##   ..$ 715  : chr [1:28] "% Correct" "31" "15" "89" ...
##   ..$ 716  : chr [1:28] "% Correct" "14" "18" "86" ...
##   ..$ 717  : chr [1:28] "% Correct" "63" "63" "89" ...
##   ..$ 718  : chr [1:28] "% Correct" "80" "84" "76" ...
##   ..$ 719  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...22: chr [1:28] "Per Question Average" "43" "37.1176470588235" "79.2941176470588" ...
##  $ benchmark_8_1: tibble [28 × 25] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 800  : chr [1:28] "% Correct" "55" "72" "62" ...
##   ..$ 801  : chr [1:28] "% Correct" "69" "86" "59" ...
##   ..$ 802  : chr [1:28] "% Correct" "60" "80" "53" ...
##   ..$ 803  : chr [1:28] "% Correct" "50" "76" "57" ...
##   ..$ 804  : chr [1:28] "% Correct" "55" "77" "66" ...
##   ..$ 805  : chr [1:28] "% Correct" "39" "91" "34" ...
##   ..$ 806  : chr [1:28] "% Correct" "28" "60" "68" ...
##   ..$ 807  : chr [1:28] "% Correct" "26" "70" "26" ...
##   ..$ 808  : chr [1:28] "% Correct" "17" "47" "26" ...
##   ..$ 809  : chr [1:28] "% Correct" "9" "18" "9" ...
##   ..$ 810  : chr [1:28] "% Correct" "22" "33" "33" ...
##   ..$ 811  : chr [1:28] "% Correct" "28" "72" "32" ...
##   ..$ 812  : chr [1:28] "% Correct" "52" "61" "44" ...
##   ..$ 813  : chr [1:28] "% Correct" "50" "79" "71" ...
##   ..$ 814  : chr [1:28] "% Correct" "38" "71" "38" ...
##   ..$ 815  : chr [1:28] "% Correct" "76" "88" "50" ...
##   ..$ 816  : chr [1:28] "% Correct" "59" "89" "63" ...
##   ..$ 817  : chr [1:28] "% Correct" "23" "50" "35" ...
##   ..$ 818  : chr [1:28] "% Correct" "31" "42" "23" ...
##   ..$ 819  : chr [1:28] "% Correct" "15" "55" "35" ...
##   ..$ 820  : num [1:28] 0 NA NA NA NA NA NA NA NA NA ...
##   ..$ 821  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 822  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...25: chr [1:28] "Per Question Average" "40.1" "65.84999999999999" "44.2" ...
##  $ benchmark_8_2: tibble [28 × 25] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 800  : chr [1:28] "% Correct" "96" "82" "67" ...
##   ..$ 801  : chr [1:28] "% Correct" "96" "86" "64" ...
##   ..$ 802  : chr [1:28] "% Correct" "73" "90" "66" ...
##   ..$ 803  : chr [1:28] "% Correct" "50" "73.09999999999999" "84.59999999999999" ...
##   ..$ 804  : chr [1:28] "% Correct" "60.7" "71.40000000000001" "78.59999999999999" ...
##   ..$ 805  : chr [1:28] "% Correct" "79.2" "83.3" "70.8" ...
##   ..$ 806  : chr [1:28] "% Correct" "39" "54" "62" ...
##   ..$ 807  : chr [1:28] "% Correct" "52" "64" "48" ...
##   ..$ 808  : chr [1:28] "% Correct" "27.3" "36.4" "54.5" ...
##   ..$ 809  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 810  : chr [1:28] "% Correct" "???" NA NA ...
##   ..$ 811  : chr [1:28] "% Correct" "27" "85" "54" ...
##   ..$ 812  : chr [1:28] "% Correct" "46" "64" "64" ...
##   ..$ 813  : chr [1:28] "% Correct" "52" "61" "44" ...
##   ..$ 814  : chr [1:28] "% Correct" "32" "64" "46" ...
##   ..$ 815  : chr [1:28] "% Correct" "50" "84.59999999999999" "65.40000000000001" ...
##   ..$ 816  : chr [1:28] "% Correct" "96" "89" "82" ...
##   ..$ 817  : chr [1:28] "% Correct" "43" "31" "46" ...
##   ..$ 818  : chr [1:28] "% Correct" "62" "65" "62" ...
##   ..$ 819  : chr [1:28] "% Correct" "30" "61" "57" ...
##   ..$ 820  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 821  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 822  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...25: chr [1:28] "Per Question Average" "56.1777777777778" "69.15555555555559" "61.9944444444444" ...
##  $ benchmark_8_3: tibble [28 × 25] (S3: tbl_df/tbl/data.frame)
##   ..$ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##   ..$ 800  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 801  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 802  : chr [1:28] "% Correct" "100" "100" "100" ...
##   ..$ 803  : chr [1:28] "% Correct" "72" "84" "84" ...
##   ..$ 804  : chr [1:28] "% Correct" "93" "97" "97" ...
##   ..$ 805  : chr [1:28] "% Correct" "81" "86" "95" ...
##   ..$ 806  : chr [1:28] "% Correct" "54" "77" "85" ...
##   ..$ 807  : chr [1:28] "% Correct" "72" "86" "79" ...
##   ..$ 808  : chr [1:28] "% Correct" "48" "81" "71" ...
##   ..$ 809  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 810  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 811  : chr [1:28] "% Correct" "69" "81" "81" ...
##   ..$ 812  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 813  : chr [1:28] "% Correct" "85" "90" "80" ...
##   ..$ 814  : chr [1:28] "% Correct" "88" "88" "79" ...
##   ..$ 815  : chr [1:28] "% Correct" "84" "100" "92" ...
##   ..$ 816  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 817  : chr [1:28] "% Correct" "83" "90" "90" ...
##   ..$ 818  : chr [1:28] "% Correct" "71" "88" "79" ...
##   ..$ 819  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 820  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 821  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ 822  : chr [1:28] "% Correct" NA NA NA ...
##   ..$ ...25: chr [1:28] "Per Question Average" "76.92307692307691" "88.30769230769231" "85.5384615384615" ...

2.3 Examine the data structure

In this section, we examine the structure of the datasets we have loaded to ensure they are in a suitable format for analysis.

Inspecting Data: We use the lapply() function to apply the head() function to each dataset within the benchmarks_list. This allows us to view the first few rows of each benchmark dataset, providing an overview of their contents and structure.

## $benchmark_6_1
## # A tibble: 6 × 26
##   ...1   `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610` `611`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      41    60    50    50    55    22    25    12    31    48    50    39   
## 3 2      62    63    50    50    48    17    33    24    65    50    49    39   
## 4 3      38    30    43    20    30    9     17    36    27    15    18    23   
## 5 4      55    66    46    50    33    39    54    20    42    32    35    35   
## 6 5      52    60    56    63    44    22    38    40    31    40    32    27   
## # ℹ 13 more variables: `612` <chr>, `613` <chr>, `614` <chr>, `615` <chr>,
## #   `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>, `620` <chr>,
## #   `621` <chr>, `676` <chr>, ...25 <chr>, ...26 <chr>
## 
## $benchmark_6_2
## # A tibble: 6 × 27
##   ...1   `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610` `611`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      90    96    93    93    77    58    82    70    58    ???   <NA>  84   
## 3 2      90    86    81    60    54    46    46    50    26    <NA>  <NA>  40   
## 4 3      55    57    44    43    41    55    18    20    21    <NA>  <NA>  28   
## 5 4      59    64    44    73    32    29    14    30    30    <NA>  <NA>  72   
## 6 5      76    86    67    83    77    21    36    45    83    <NA>  <NA>  64   
## # ℹ 14 more variables: `612` <chr>, `613` <chr>, `614` <chr>, `615` <chr>,
## #   `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>, `620` <chr>,
## #   `621` <chr>, `622` <chr>, `676` <chr>, ...26 <chr>, ...27 <chr>
## 
## $benchmark_6_3
## # A tibble: 6 × 25
##   ...1   `600` `601` `602` `603` `604` `605` `606` `607` `608` `611` `612` `613`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      75    68    66    64    77    76    95    75    87    83    96    93   
## 3 2      93    92    87    94    54    50    55    60    34    58    87    54   
## 4 3      72    76    66    67    39    50    50    28    25    29    73    57   
## 5 4      86    80    59    94    58    39    65    47    34    54    65    57   
## 6 5      86    96    90    94    66    50    50    40    42    67    57    82   
## # ℹ 12 more variables: `614` <chr>, `615` <chr>, `616` <chr>, `617` <chr>,
## #   `618` <chr>, `619` <chr>, `620` <chr>, `621` <chr>, `622` <chr>,
## #   `676` <chr>, ...24 <chr>, ...25 <chr>
## 
## $benchmark_7_1
## # A tibble: 6 × 22
##   ...1    `700` `701` `702` `703` `704` `705` `706` `707...10` `708` `709` `710`
##   <chr>   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>      <chr> <chr> <chr>
## 1 Questi… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Correct  % Co… % Co… % Co…
## 2 1       23    24    24    6     23    24    14    18.518518… 21    14    10   
## 3 2       52    36    48    38    36    34    32    25.925925… 25    0     60   
## 4 3       39    40    33    19    23    14    46    25.925925… 39    14    0    
## 5 4       61    48    62    63    41    14    32    25.925925… 29    14    10   
## 6 5       65    48    29    38    32    21    54    33.333333… 21    14    30   
## # ℹ 10 more variables: `711...15` <chr>, `712...17` <chr>, `713...20` <chr>,
## #   `714...22` <chr>, `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>,
## #   `719` <chr>, ...28 <chr>
## 
## $benchmark_7_2
## # A tibble: 6 × 22
##   ...1   `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710` `711`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      4     4     5     24    25    13    12    30    13    ???   ???   30   
## 3 2      35    48    10    47    50    39    32    52    35    <NA>  <NA>  11   
## 4 3      26    68    10    65    60    78    64    48    39    <NA>  <NA>  59   
## 5 4      61    48    62    53    70    30    40    33    26    <NA>  <NA>  56   
## 6 5      52    68    29    47    25    22    44    19    39    <NA>  <NA>  30   
## # ℹ 9 more variables: `712` <chr>, `713` <chr>, `714` <chr>, `715` <chr>,
## #   `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>, ...22 <chr>
## 
## $benchmark_7_3
## # A tibble: 6 × 22
##   ...1   `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710` `711`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      22    96    25    50    20    38    23    46    26    <NA>  <NA>  45   
## 3 2      39    88    5     38    34    34    31    31    31    <NA>  <NA>  24   
## 4 3      96    92    90    82    100   63    73    72    44    <NA>  <NA>  72   
## 5 4      70    92    80    75    39    38    50    28    35    <NA>  <NA>  48   
## 6 5      57    96    40    44    30    25    39    17    35    <NA>  <NA>  41   
## # ℹ 9 more variables: `712` <chr>, `713` <chr>, `714` <chr>, `715` <chr>,
## #   `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>, ...22 <chr>
## 
## $benchmark_8_1
## # A tibble: 6 × 25
##   ...1   `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810` `811`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      55    69    60    50    55    39    28    26    17    9     22    28   
## 3 2      72    86    80    76    77    91    60    70    47    18    33    72   
## 4 3      62    59    53    57    66    34    68    26    26    9     33    32   
## 5 4      24    38    20    23    25    21    40    35    43    0     44    28   
## 6 5      86    72    80    80    88    82    68    74    30    73    22    56   
## # ℹ 12 more variables: `812` <chr>, `813` <chr>, `814` <chr>, `815` <chr>,
## #   `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>, `820` <dbl>,
## #   `821` <chr>, `822` <chr>, ...25 <chr>
## 
## $benchmark_8_2
## # A tibble: 6 × 25
##   ...1   `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810` `811`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      96    96    73    50    60.7  79.2  39    52    27.3  <NA>  ???   27   
## 3 2      82    86    90    73.0… 71.4… 83.3  54    64    36.4  <NA>  <NA>  85   
## 4 3      67    64    66    84.5… 78.5… 70.8  62    48    54.5  <NA>  <NA>  54   
## 5 4      41    54    50    38.5  53.6  50    35    48    36.4  <NA>  <NA>  23   
## 6 5      96    93    87    73.0… 78.5… 79.2  62    56    72.7  <NA>  <NA>  65   
## # ℹ 12 more variables: `812` <chr>, `813` <chr>, `814` <chr>, `815` <chr>,
## #   `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>, `820` <chr>,
## #   `821` <chr>, `822` <chr>, ...25 <chr>
## 
## $benchmark_8_3
## # A tibble: 6 × 25
##   ...1   `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810` `811`
##   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Quest… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co… % Co…
## 2 1      <NA>  <NA>  100   72    93    81    54    72    48    <NA>  <NA>  69   
## 3 2      <NA>  <NA>  100   84    97    86    77    86    81    <NA>  <NA>  81   
## 4 3      <NA>  <NA>  100   84    97    95    85    79    71    <NA>  <NA>  81   
## 5 4      <NA>  <NA>  100   72    97    76    62    76    57    <NA>  <NA>  81   
## 6 5      <NA>  <NA>  100   92    90    95    66    76    86    <NA>  <NA>  88   
## # ℹ 12 more variables: `812` <chr>, `813` <chr>, `814` <chr>, `815` <chr>,
## #   `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>, `820` <chr>,
## #   `821` <chr>, `822` <chr>, ...25 <chr>
## tibble [28 × 22] (S3: tbl_df/tbl/data.frame)
##  $ ...1    : chr [1:28] "Question" "1" "2" "3" ...
##  $ 700     : chr [1:28] "% Correct" "23" "52" "39" ...
##  $ 701     : chr [1:28] "% Correct" "24" "36" "40" ...
##  $ 702     : chr [1:28] "% Correct" "24" "48" "33" ...
##  $ 703     : chr [1:28] "% Correct" "6" "38" "19" ...
##  $ 704     : chr [1:28] "% Correct" "23" "36" "23" ...
##  $ 705     : chr [1:28] "% Correct" "24" "34" "14" ...
##  $ 706     : chr [1:28] "% Correct" "14" "32" "46" ...
##  $ 707...10: chr [1:28] "% Correct" "18.5185185185185" "25.9259259259259" "25.9259259259259" ...
##  $ 708     : chr [1:28] "% Correct" "21" "25" "39" ...
##  $ 709     : chr [1:28] "% Correct" "14" "0" "14" ...
##  $ 710     : chr [1:28] "% Correct" "10" "60" "0" ...
##  $ 711...15: chr [1:28] "% Correct" "13.3333333333333" "36.6666666666667" "26.6666666666667" ...
##  $ 712...17: chr [1:28] "% Correct" "20" "33.3333333333333" "36.6666666666667" ...
##  $ 713...20: chr [1:28] "% Correct" "28.5714285714286" "46.4285714285714" "35.7142857142857" ...
##  $ 714...22: chr [1:28] "% Correct" "3.57142857142857" "53.5714285714286" "28.5714285714286" ...
##  $ 715     : chr [1:28] "% Correct" "30" "41" "30" ...
##  $ 716     : chr [1:28] "% Correct" "32" "59" "32" ...
##  $ 717     : chr [1:28] "% Correct" "21.4285714285714" "25" "46.4285714285714" ...
##  $ 718     : chr [1:28] "% Correct" "46.1538461538462" "57.6923076923077" "26.9230769230769" ...
##  $ 719     : chr [1:28] "% Correct" "22" "33" "22" ...
##  $ ...28   : chr [1:28] "Per Question Average" "17.2529664068126" "32.2545474468551" "24.3421777652547" ...
## tibble [28 × 22] (S3: tbl_df/tbl/data.frame)
##  $ ...1 : chr [1:28] "Question" "1" "2" "3" ...
##  $ 700  : chr [1:28] "% Correct" "23" "52" "39" ...
##  $ 701  : chr [1:28] "% Correct" "24" "36" "40" ...
##  $ 702  : chr [1:28] "% Correct" "24" "48" "33" ...
##  $ 703  : chr [1:28] "% Correct" "6" "38" "19" ...
##  $ 704  : chr [1:28] "% Correct" "23" "36" "23" ...
##  $ 705  : chr [1:28] "% Correct" "24" "34" "14" ...
##  $ 706  : chr [1:28] "% Correct" "14" "32" "46" ...
##  $ 707  : chr [1:28] "% Correct" "18.5185185185185" "25.9259259259259" "25.9259259259259" ...
##  $ 708  : chr [1:28] "% Correct" "21" "25" "39" ...
##  $ 709  : chr [1:28] "% Correct" "14" "0" "14" ...
##  $ 710  : chr [1:28] "% Correct" "10" "60" "0" ...
##  $ 711  : chr [1:28] "% Correct" "13.3333333333333" "36.6666666666667" "26.6666666666667" ...
##  $ 712  : chr [1:28] "% Correct" "20" "33.3333333333333" "36.6666666666667" ...
##  $ 713  : chr [1:28] "% Correct" "28.5714285714286" "46.4285714285714" "35.7142857142857" ...
##  $ 714  : chr [1:28] "% Correct" "3.57142857142857" "53.5714285714286" "28.5714285714286" ...
##  $ 715  : chr [1:28] "% Correct" "30" "41" "30" ...
##  $ 716  : chr [1:28] "% Correct" "32" "59" "32" ...
##  $ 717  : chr [1:28] "% Correct" "21.4285714285714" "25" "46.4285714285714" ...
##  $ 718  : chr [1:28] "% Correct" "46.1538461538462" "57.6923076923077" "26.9230769230769" ...
##  $ 719  : chr [1:28] "% Correct" "22" "33" "22" ...
##  $ ...28: chr [1:28] "Per Question Average" "17.2529664068126" "32.2545474468551" "24.3421777652547" ...

It looks like the row %correct is a part of the data which will mess up with any further analysis.I am going to take of that on the section of Exploring each tab so I can be able to proceed with visualizing and exploring the data.

  • Data Structure: Observing the output reveals the following key points:

    • Column Names: The first column, which is intended to represent question numbers, is currently lacking a meaningful header. This should be changed to “Questions” for clarity. A clear and informative column header enhances readability and understanding when analyzing the data.

    • Subheadings: The remaining columns are labeled “% Correct.” While this indicates the percentage of correct responses for each question, the uniformity of the header name across multiple columns can create confusion during analysis. It is crucial to rename these headers appropriately (e.g., “600” “817,” “715”) to avoid ambiguity and ensure accurate referencing in subsequent analysis.

    • Importance of Tidy Data: Tidy data principles dictate that each variable should have its own column, and each observation should have its own row. Ensuring that the structure adheres to these principles will facilitate more effective data manipulation and analysis later on, reducing the potential for errors and misunderstandings during interpretation.

2.4 Visualize Missing Values:

In this section, we assess the quality of our data by examining the presence of missing values across the benchmark datasets. Understanding the extent and pattern of missing data is crucial for determining the reliability of our analysis.

Visualizing Missing Data: We utilize the vis_miss() function from the naniar package to create heatmaps for each benchmark dataset. This visualization provides a clear representation of missing values, where missing data is indicated by a distinct color, allowing for easy identification of patterns.

Findings:

  • 7th Grade Benchmark 1: Notably, this benchmark dataset is complete with no missing values. This indicates a high-quality dataset, which is beneficial for further analysis.

  • 6th Grade - Benchmark 1&3:The analysis indicates that five classes in these benchmarks have approximately 96% of their data missing. In contrast, the remaining classes exhibit around 4% missing data.This substantial amount of missing data raises concerns regarding data collection processes, possibly hinting at issues such as student attendance or incomplete assessments. It is important to recognize that such gaps may lead to skewed interpretations of the overall cohort’s performance on specific questions.

    • Similar Trends in Other Grades: Similar observations can be made for the other benchmarks across various grades, where significant proportions of missing data exist. This recurring pattern suggests systemic issues that could affect the accuracy of our results.
  • Impact on Analysis: High proportions of missing data can have serious implications for our analysis. They may lead to biases if not adequately addressed, and thus it’s essential to consider these gaps when drawing conclusions about student performance and trends. Careful handling of missing data, whether through imputation or exclusion, will be necessary as we proceed with our analysis to ensure our findings are valid and reflective of the actual student performance.

For the reasons mentioned above, removing columns with 100% missing values is generally a good approach. Here’s why:

  • No Information: These columns contain no usable data, so they don’t contribute any insights or values to my analysis.

  • Simplify the Dataset: Reducing the number of columns makes the dataset cleaner and easier to work with. It can also reduce the complexity of any data visualizations or statistical models I create.

  • Computational Efficiency: When performing computations on the dataset, removing completely empty columns can save on processing time and memory usage. The cleaning process will be taken care of in teh section “Cleaning the Data”

2.5 Explore Each Tab:

In this section, we focus on enhancing the structure of our data for effective analysis. Each benchmark dataset has its unique format and organization, and we aim to standardize these formats to facilitate easier manipulation and analysis.

Improving Data Structure: - We initiate the process by creating a loop to iterate through the first three benchmark datasets (6th Grade Benchmark 1, 6th Grade Benchmark 2, and 6th Grade Benchmark 3) from our benchmarks_list.

  • The main goal is to refine the data structure by:

    • Removing Redundant Rows: The first row of each dataset, which contains the header % Correct, is removed. This ensures that our main data begins with the relevant class scores, avoiding any confusion or errors in subsequent analyses.

    • Renaming Columns: The first column is renamed to “Questions” for clarity, as it now represents the specific question numbers. Furthermore, we rename the last two columns to “Per_Question_Average” and “Skills.” This naming convention will help maintain consistency across datasets and enhance readability.

## tibble [27 × 26] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 600                 : chr [1:27] "41" "62" "38" "55" ...
##  $ 601                 : chr [1:27] "60" "63" "30" "66" ...
##  $ 602                 : chr [1:27] "50" "50" "43" "46" ...
##  $ 603                 : chr [1:27] "50" "50" "20" "50" ...
##  $ 604                 : chr [1:27] "55" "48" "30" "33" ...
##  $ 605                 : chr [1:27] "22" "17" "9" "39" ...
##  $ 606                 : chr [1:27] "25" "33" "17" "54" ...
##  $ 607                 : chr [1:27] "12" "24" "36" "20" ...
##  $ 608                 : chr [1:27] "31" "65" "27" "42" ...
##  $ 609                 : chr [1:27] "48" "50" "15" "32" ...
##  $ 610                 : chr [1:27] "50" "49" "18" "35" ...
##  $ 611                 : chr [1:27] "39" "39" "23" "35" ...
##  $ 612                 : chr [1:27] "50" "50" "38" "23" ...
##  $ 613                 : chr [1:27] "54" "50" "25" "33" ...
##  $ 614                 : chr [1:27] "40" "43" "20" "33" ...
##  $ 615                 : chr [1:27] NA NA NA NA ...
##  $ 616                 : chr [1:27] "53" "40" "23" "60" ...
##  $ 617                 : chr [1:27] "34" "62" "14" "45" ...
##  $ 618                 : chr [1:27] NA NA NA NA ...
##  $ 619                 : chr [1:27] NA NA NA NA ...
##  $ 620                 : chr [1:27] NA NA NA NA ...
##  $ 621                 : chr [1:27] "50" "50" "17" "33" ...
##  $ 676                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "42.4444444444444" "46.9444444444444" "24.6111111111111" "40.7777777777778" ...
##  $ Skills              : chr [1:27] "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" "Plan and Carry Out Investigations" ...

In this extended section, we further refine our dataset by processing the next set of benchmark data for the 7th Grade assessments. This ensures that all relevant datasets are uniformly structured for effective analysis.

The loop performs the following tasks:

  • Conditional Row Removal: We first check if the first row contains the header % Correct. If this header exists, we remove the first row. This condition prevents unnecessary removal in cases where the header might not be present, maintaining the integrity of our data.

  • Column Renaming: The first column is renamed to “Questions,” indicating it now represents specific question identifiers. This clarity is crucial for later analyses. The last column is renamed to “Per_Question_Average,” indicating the average score per question across all classes. This column will be instrumental when assessing overall performance.

## tibble [27 × 22] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 700                 : chr [1:27] "23" "52" "39" "61" ...
##  $ 701                 : chr [1:27] "24" "36" "40" "48" ...
##  $ 702                 : chr [1:27] "24" "48" "33" "62" ...
##  $ 703                 : chr [1:27] "6" "38" "19" "63" ...
##  $ 704                 : chr [1:27] "23" "36" "23" "41" ...
##  $ 705                 : chr [1:27] "24" "34" "14" "14" ...
##  $ 706                 : chr [1:27] "14" "32" "46" "32" ...
##  $ 707                 : chr [1:27] "18.5185185185185" "25.9259259259259" "25.9259259259259" "25.9259259259259" ...
##  $ 708                 : chr [1:27] "21" "25" "39" "29" ...
##  $ 709                 : chr [1:27] "14" "0" "14" "14" ...
##  $ 710                 : chr [1:27] "10" "60" "0" "10" ...
##  $ 711                 : chr [1:27] "13.3333333333333" "36.6666666666667" "26.6666666666667" "40" ...
##  $ 712                 : chr [1:27] "20" "33.3333333333333" "36.6666666666667" "36.6666666666667" ...
##  $ 713                 : chr [1:27] "28.5714285714286" "46.4285714285714" "35.7142857142857" "28.5714285714286" ...
##  $ 714                 : chr [1:27] "3.57142857142857" "53.5714285714286" "28.5714285714286" "46.4285714285714" ...
##  $ 715                 : chr [1:27] "30" "41" "30" "41" ...
##  $ 716                 : chr [1:27] "32" "59" "32" "36" ...
##  $ 717                 : chr [1:27] "21.4285714285714" "25" "46.4285714285714" "28.5714285714286" ...
##  $ 718                 : chr [1:27] "46.1538461538462" "57.6923076923077" "26.9230769230769" "3.84615384615385" ...
##  $ 719                 : chr [1:27] "22" "33" "22" "22" ...
##  $ Per_Question_Average: chr [1:27] "17.2529664068126" "32.2545474468551" "24.3421777652547" "28.6542375003913" ...

In this concluding part of our data exploration, we complete the process of refining the datasets for the 8th Grade benchmarks. This ensures that all data across the various grade levels is consistent and ready for analysis. Here, I focuse on the last three benchmark datasets (8th Grade Benchmark 1, 8th Grade Benchmark 2, and 8th Grade Benchmark 3). The loop aims to ensure that these datasets are also formatted in a manner consistent with previous datasets.

## tibble [27 × 25] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 800                 : chr [1:27] "55" "72" "62" "24" ...
##  $ 801                 : chr [1:27] "69" "86" "59" "38" ...
##  $ 802                 : chr [1:27] "60" "80" "53" "20" ...
##  $ 803                 : chr [1:27] "50" "76" "57" "23" ...
##  $ 804                 : chr [1:27] "55" "77" "66" "25" ...
##  $ 805                 : chr [1:27] "39" "91" "34" "21" ...
##  $ 806                 : chr [1:27] "28" "60" "68" "40" ...
##  $ 807                 : chr [1:27] "26" "70" "26" "35" ...
##  $ 808                 : chr [1:27] "17" "47" "26" "43" ...
##  $ 809                 : chr [1:27] "9" "18" "9" "0" ...
##  $ 810                 : chr [1:27] "22" "33" "33" "44" ...
##  $ 811                 : chr [1:27] "28" "72" "32" "28" ...
##  $ 812                 : chr [1:27] "52" "61" "44" "22" ...
##  $ 813                 : chr [1:27] "50" "79" "71" "42" ...
##  $ 814                 : chr [1:27] "38" "71" "38" "29" ...
##  $ 815                 : chr [1:27] "76" "88" "50" "42" ...
##  $ 816                 : chr [1:27] "59" "89" "63" "44" ...
##  $ 817                 : chr [1:27] "23" "50" "35" "15" ...
##  $ 818                 : chr [1:27] "31" "42" "23" "35" ...
##  $ 819                 : chr [1:27] "15" "55" "35" "15" ...
##  $ 820                 : num [1:27] NA NA NA NA NA NA NA NA NA NA ...
##  $ 821                 : chr [1:27] NA NA NA NA ...
##  $ 822                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "40.1" "65.84999999999999" "44.2" "29.25" ...

After making these modifications, the updated data frame is saved back to the benchmarks_list at the appropriate index. This finalizes the clean-up process for all datasets included in our analysis.

The structure of the seventh dataset (8th Grade Benchmark 1) is checked using the str() and head() functions. This step serves as a confirmation that the column names and data types are correct and ready for further exploration and analysis.

## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         55    69    60    50    55    39    28    26    17    9     22   
## 2 2         72    86    80    76    77    91    60    70    47    18    33   
## 3 3         62    59    53    57    66    34    68    26    26    9     33   
## 4 4         24    38    20    23    25    21    40    35    43    0     44   
## 5 5         86    72    80    80    88    82    68    74    30    73    22   
## 6 6         83    90    80    69    92    69    56    78    60    55    33   
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <dbl>, `821` <chr>, `822` <chr>, Per_Question_Average <chr>

Next, I implement a crucial step to ensure the integrity of our data before proceeding with further analysis: checking for any empty data frames within our benchmarks_list.

The primary goal is to identify any data frames that may not contain any rows (i.e., are empty). This is an important quality control step, as empty data frames could indicate issues with data loading or data extraction processes. These empty frames would not provide any useful information for our analysis and could lead to errors if not addressed.

## benchmark_6_1 benchmark_6_2 benchmark_6_3 benchmark_7_1 benchmark_7_2 
##         FALSE         FALSE         FALSE         FALSE         FALSE 
## benchmark_7_3 benchmark_8_1 benchmark_8_2 benchmark_8_3 
##         FALSE         FALSE         FALSE         FALSE

The output of the data above integrity check indicates that none of the benchmark data frames are empty. The output shows “FALSE” for all nine benchmarks, which means that every data frame contains rows of data. This is a positive outcome, as it confirms that the data has been successfully loaded for all benchmark assessments across the three grade levels.

The next exploration section plays a crucial role in both understanding the datasets and preparing for more detailed analyses. It highlights not only the overall performance trends but also areas where students may need additional support.

## 
## 
## ### Exploring Benchmark 1 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 26
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         41    60    50    50    55    22    25    12    31    48    50   
## 2 2         62    63    50    50    48    17    33    24    65    50    49   
## 3 3         38    30    43    20    30    9     17    36    27    15    18   
## 4 4         55    66    46    50    33    39    54    20    42    32    35   
## 5 5         52    60    56    63    44    22    38    40    31    40    32   
## 6 6         21    26    33    30    33    22    42    24    38    10    17   
## # ℹ 14 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `676` <chr>, Per_Question_Average <chr>,
## #   Skills <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 26] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 600                 : chr [1:27] "41" "62" "38" "55" ...
##  $ 601                 : chr [1:27] "60" "63" "30" "66" ...
##  $ 602                 : chr [1:27] "50" "50" "43" "46" ...
##  $ 603                 : chr [1:27] "50" "50" "20" "50" ...
##  $ 604                 : chr [1:27] "55" "48" "30" "33" ...
##  $ 605                 : chr [1:27] "22" "17" "9" "39" ...
##  $ 606                 : chr [1:27] "25" "33" "17" "54" ...
##  $ 607                 : chr [1:27] "12" "24" "36" "20" ...
##  $ 608                 : chr [1:27] "31" "65" "27" "42" ...
##  $ 609                 : chr [1:27] "48" "50" "15" "32" ...
##  $ 610                 : chr [1:27] "50" "49" "18" "35" ...
##  $ 611                 : chr [1:27] "39" "39" "23" "35" ...
##  $ 612                 : chr [1:27] "50" "50" "38" "23" ...
##  $ 613                 : chr [1:27] "54" "50" "25" "33" ...
##  $ 614                 : chr [1:27] "40" "43" "20" "33" ...
##  $ 615                 : chr [1:27] NA NA NA NA ...
##  $ 616                 : chr [1:27] "53" "40" "23" "60" ...
##  $ 617                 : chr [1:27] "34" "62" "14" "45" ...
##  $ 618                 : chr [1:27] NA NA NA NA ...
##  $ 619                 : chr [1:27] NA NA NA NA ...
##  $ 620                 : chr [1:27] NA NA NA NA ...
##  $ 621                 : chr [1:27] "50" "50" "17" "33" ...
##  $ 676                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "42.4444444444444" "46.9444444444444" "24.6111111111111" "40.7777777777778" ...
##  $ Skills              : chr [1:27] "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" "Plan and Carry Out Investigations" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             600                601                602           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      603                604                605                606           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      607                608                609                610           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      611                612                613                614           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      615                616                617                618           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      619                620                621                676           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##  Per_Question_Average    Skills         
##  Length:27            Length:27         
##  Class :character     Class :character  
##  Mode  :character     Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion
## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 2 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 27
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         90    96    93    93    77    58    82    70    58    ???   <NA> 
## 2 2         90    86    81    60    54    46    46    50    26    <NA>  <NA> 
## 3 3         55    57    44    43    41    55    18    20    21    <NA>  <NA> 
## 4 4         59    64    44    73    32    29    14    30    30    <NA>  <NA> 
## 5 5         76    86    67    83    77    21    36    45    83    <NA>  <NA> 
## 6 6         31    7     22    33    14    42    23    60    17    <NA>  <NA> 
## # ℹ 15 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `622` <chr>, `676` <chr>,
## #   Per_Question_Average <chr>, Skills <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 27] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 600                 : chr [1:27] "90" "90" "55" "59" ...
##  $ 601                 : chr [1:27] "96" "86" "57" "64" ...
##  $ 602                 : chr [1:27] "93" "81" "44" "44" ...
##  $ 603                 : chr [1:27] "93" "60" "43" "73" ...
##  $ 604                 : chr [1:27] "77" "54" "41" "32" ...
##  $ 605                 : chr [1:27] "58" "46" "55" "29" ...
##  $ 606                 : chr [1:27] "82" "46" "18" "14" ...
##  $ 607                 : chr [1:27] "70" "50" "20" "30" ...
##  $ 608                 : chr [1:27] "58" "26" "21" "30" ...
##  $ 609                 : chr [1:27] "???" NA NA NA ...
##  $ 610                 : chr [1:27] NA NA NA NA ...
##  $ 611                 : chr [1:27] "84" "40" "28" "72" ...
##  $ 612                 : chr [1:27] "96" "52" "52" "76" ...
##  $ 613                 : chr [1:27] "80" "48" "28" "44" ...
##  $ 614                 : chr [1:27] "80" "32" "36" "40" ...
##  $ 615                 : chr [1:27] "100" "55" "59" "48" ...
##  $ 616                 : chr [1:27] "92" "62" "46" "73" ...
##  $ 617                 : chr [1:27] "60" "32" "12" "36" ...
##  $ 618                 : chr [1:27] "86" "35" "21" "28" ...
##  $ 619                 : chr [1:27] "85" "44" "56" "37" ...
##  $ 620                 : chr [1:27] "76" "35" "21" "31" ...
##  $ 621                 : chr [1:27] "100" "33" "0" "50" ...
##  $ 622                 : chr [1:27] NA NA NA NA ...
##  $ 676                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "81.8947368421053" "51.2631578947368" "37.5263157894737" "45.2631578947368" ...
##  $ Skills              : chr [1:27] "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" "Plan and Carry Out Investigations" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             600                601                602           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      603                604                605                606           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      607                608                609                610           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      611                612                613                614           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      615                616                617                618           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      619                620                621                622           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      676            Per_Question_Average    Skills         
##  Length:27          Length:27            Length:27         
##  Class :character   Class :character     Class :character  
##  Mode  :character   Mode  :character     Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 3 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 25
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `611` `612`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         75    68    66    64    77    76    95    75    87    83    96   
## 2 2         93    92    87    94    54    50    55    60    34    58    87   
## 3 3         72    76    66    67    39    50    50    28    25    29    73   
## 4 4         86    80    59    94    58    39    65    47    34    54    65   
## 5 5         86    96    90    94    66    50    50    40    42    67    57   
## 6 6         58    44    63    74    39    31    35    20    34    42    44   
## # ℹ 13 more variables: `613` <chr>, `614` <chr>, `615` <chr>, `616` <chr>,
## #   `617` <chr>, `618` <chr>, `619` <chr>, `620` <chr>, `621` <chr>,
## #   `622` <chr>, `676` <chr>, Per_Question_Average <chr>, Skills <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 25] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 600                 : chr [1:27] "75" "93" "72" "86" ...
##  $ 601                 : chr [1:27] "68" "92" "76" "80" ...
##  $ 602                 : chr [1:27] "66" "87" "66" "59" ...
##  $ 603                 : chr [1:27] "64" "94" "67" "94" ...
##  $ 604                 : chr [1:27] "77" "54" "39" "58" ...
##  $ 605                 : chr [1:27] "76" "50" "50" "39" ...
##  $ 606                 : chr [1:27] "95" "55" "50" "65" ...
##  $ 607                 : chr [1:27] "75" "60" "28" "47" ...
##  $ 608                 : chr [1:27] "87" "34" "25" "34" ...
##  $ 611                 : chr [1:27] "83" "58" "29" "54" ...
##  $ 612                 : chr [1:27] "96" "87" "73" "65" ...
##  $ 613                 : chr [1:27] "93" "54" "57" "57" ...
##  $ 614                 : chr [1:27] "91" "39" "17" "75" ...
##  $ 615                 : chr [1:27] NA NA NA NA ...
##  $ 616                 : chr [1:27] "64" "76" "48" "68" ...
##  $ 617                 : chr [1:27] "83" "66" "35" "41" ...
##  $ 618                 : chr [1:27] NA NA NA NA ...
##  $ 619                 : chr [1:27] NA NA NA NA ...
##  $ 620                 : chr [1:27] NA NA NA NA ...
##  $ 621                 : chr [1:27] "60" "0" "20" "20" ...
##  $ 622                 : chr [1:27] NA NA NA NA ...
##  $ 676                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "78.3125" "62.4375" "47" "58.875" ...
##  $ Skills              : chr [1:27] "Question and Problem" "Analyze and Interpret Data/ Cause and Effect" "Plan and Carry Out Investigations/ Cause and Effect" "Plan and Carry Out Investigations" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             600                601                602           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      603                604                605                606           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      607                608                611                612           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      613                614                615                616           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      617                618                619                620           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      621                622                676            Per_Question_Average
##  Length:27          Length:27          Length:27          Length:27           
##  Class :character   Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character    
##     Skills         
##  Length:27         
##  Class :character  
##  Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 4 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707`    `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>    <chr> <chr> <chr>
## 1 1         23    24    24    6     23    24    14    18.5185… 21    14    10   
## 2 2         52    36    48    38    36    34    32    25.9259… 25    0     60   
## 3 3         39    40    33    19    23    14    46    25.9259… 39    14    0    
## 4 4         61    48    62    63    41    14    32    25.9259… 29    14    10   
## 5 5         65    48    29    38    32    21    54    33.3333… 21    14    30   
## 6 6         57    36    29    50    23    24    14    18.5185… 21    14    10   
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 22] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 700                 : chr [1:27] "23" "52" "39" "61" ...
##  $ 701                 : chr [1:27] "24" "36" "40" "48" ...
##  $ 702                 : chr [1:27] "24" "48" "33" "62" ...
##  $ 703                 : chr [1:27] "6" "38" "19" "63" ...
##  $ 704                 : chr [1:27] "23" "36" "23" "41" ...
##  $ 705                 : chr [1:27] "24" "34" "14" "14" ...
##  $ 706                 : chr [1:27] "14" "32" "46" "32" ...
##  $ 707                 : chr [1:27] "18.5185185185185" "25.9259259259259" "25.9259259259259" "25.9259259259259" ...
##  $ 708                 : chr [1:27] "21" "25" "39" "29" ...
##  $ 709                 : chr [1:27] "14" "0" "14" "14" ...
##  $ 710                 : chr [1:27] "10" "60" "0" "10" ...
##  $ 711                 : chr [1:27] "13.3333333333333" "36.6666666666667" "26.6666666666667" "40" ...
##  $ 712                 : chr [1:27] "20" "33.3333333333333" "36.6666666666667" "36.6666666666667" ...
##  $ 713                 : chr [1:27] "28.5714285714286" "46.4285714285714" "35.7142857142857" "28.5714285714286" ...
##  $ 714                 : chr [1:27] "3.57142857142857" "53.5714285714286" "28.5714285714286" "46.4285714285714" ...
##  $ 715                 : chr [1:27] "30" "41" "30" "41" ...
##  $ 716                 : chr [1:27] "32" "59" "32" "36" ...
##  $ 717                 : chr [1:27] "21.4285714285714" "25" "46.4285714285714" "28.5714285714286" ...
##  $ 718                 : chr [1:27] "46.1538461538462" "57.6923076923077" "26.9230769230769" "3.84615384615385" ...
##  $ 719                 : chr [1:27] "22" "33" "22" "22" ...
##  $ Per_Question_Average: chr [1:27] "17.2529664068126" "32.2545474468551" "24.3421777652547" "28.6542375003913" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             700                701                702           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      703                704                705                706           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      707                708                709                710           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      711                712                713                714           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      715                716                717                718           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      719            Per_Question_Average
##  Length:27          Length:27           
##  Class :character   Class :character    
##  Mode  :character   Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 5 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         4     4     5     24    25    13    12    30    13    ???   ???  
## 2 2         35    48    10    47    50    39    32    52    35    <NA>  <NA> 
## 3 3         26    68    10    65    60    78    64    48    39    <NA>  <NA> 
## 4 4         61    48    62    53    70    30    40    33    26    <NA>  <NA> 
## 5 5         52    68    29    47    25    22    44    19    39    <NA>  <NA> 
## 6 6         65    32    43    47    40    26    32    41    30    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 22] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 700                 : chr [1:27] "4" "35" "26" "61" ...
##  $ 701                 : chr [1:27] "4" "48" "68" "48" ...
##  $ 702                 : chr [1:27] "5" "10" "10" "62" ...
##  $ 703                 : chr [1:27] "24" "47" "65" "53" ...
##  $ 704                 : chr [1:27] "25" "50" "60" "70" ...
##  $ 705                 : chr [1:27] "13" "39" "78" "30" ...
##  $ 706                 : chr [1:27] "12" "32" "64" "40" ...
##  $ 707                 : chr [1:27] "30" "52" "48" "33" ...
##  $ 708                 : chr [1:27] "13" "35" "39" "26" ...
##  $ 709                 : chr [1:27] "???" NA NA NA ...
##  $ 710                 : chr [1:27] "???" NA NA NA ...
##  $ 711                 : chr [1:27] "30" "11" "59" "56" ...
##  $ 712                 : chr [1:27] "31" "34" "55" "55" ...
##  $ 713                 : chr [1:27] "18" "36" "61" "50" ...
##  $ 714                 : chr [1:27] "17" "38" "72" "59" ...
##  $ 715                 : chr [1:27] "4" "20" "12" "72" ...
##  $ 716                 : chr [1:27] "0" "24" "10" "62" ...
##  $ 717                 : chr [1:27] "???" NA NA NA ...
##  $ 718                 : chr [1:27] "36" "43" "50" "22" ...
##  $ 719                 : chr [1:27] "38" "46" "38" "31" ...
##  $ Per_Question_Average: chr [1:27] "17.8823529411765" "35.2941176470588" "47.9411764705882" "48.8235294117647" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             700                701                702           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      703                704                705                706           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      707                708                709                710           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      711                712                713                714           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      715                716                717                718           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      719            Per_Question_Average
##  Length:27          Length:27           
##  Class :character   Class :character    
##  Mode  :character   Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 6 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         22    96    25    50    20    38    23    46    26    <NA>  <NA> 
## 2 2         39    88    5     38    34    34    31    31    31    <NA>  <NA> 
## 3 3         96    92    90    82    100   63    73    72    44    <NA>  <NA> 
## 4 4         70    92    80    75    39    38    50    28    35    <NA>  <NA> 
## 5 5         57    96    40    44    30    25    39    17    35    <NA>  <NA> 
## 6 6         78    88    65    50    58    55    43    34    31    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 22] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 700                 : chr [1:27] "22" "39" "96" "70" ...
##  $ 701                 : chr [1:27] "96" "88" "92" "92" ...
##  $ 702                 : chr [1:27] "25" "5" "90" "80" ...
##  $ 703                 : chr [1:27] "50" "38" "82" "75" ...
##  $ 704                 : chr [1:27] "20" "34" "100" "39" ...
##  $ 705                 : chr [1:27] "38" "34" "63" "38" ...
##  $ 706                 : chr [1:27] "23" "31" "73" "50" ...
##  $ 707                 : chr [1:27] "46" "31" "72" "28" ...
##  $ 708                 : chr [1:27] "26" "31" "44" "35" ...
##  $ 709                 : chr [1:27] NA NA NA NA ...
##  $ 710                 : chr [1:27] NA NA NA NA ...
##  $ 711                 : chr [1:27] "45" "24" "72" "48" ...
##  $ 712                 : chr [1:27] "38" "7" "62" "45" ...
##  $ 713                 : chr [1:27] "55" "55" "90" "62" ...
##  $ 714                 : chr [1:27] "59" "34" "72" "55" ...
##  $ 715                 : chr [1:27] "31" "15" "89" "62" ...
##  $ 716                 : chr [1:27] "14" "18" "86" "64" ...
##  $ 717                 : chr [1:27] "63" "63" "89" "81" ...
##  $ 718                 : chr [1:27] "80" "84" "76" "88" ...
##  $ 719                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "43" "37.1176470588235" "79.2941176470588" "59.5294117647059" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             700                701                702           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      703                704                705                706           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      707                708                709                710           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      711                712                713                714           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      715                716                717                718           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      719            Per_Question_Average
##  Length:27          Length:27           
##  Class :character   Class :character    
##  Mode  :character   Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 7 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         55    69    60    50    55    39    28    26    17    9     22   
## 2 2         72    86    80    76    77    91    60    70    47    18    33   
## 3 3         62    59    53    57    66    34    68    26    26    9     33   
## 4 4         24    38    20    23    25    21    40    35    43    0     44   
## 5 5         86    72    80    80    88    82    68    74    30    73    22   
## 6 6         83    90    80    69    92    69    56    78    60    55    33   
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <dbl>, `821` <chr>, `822` <chr>, Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 25] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 800                 : chr [1:27] "55" "72" "62" "24" ...
##  $ 801                 : chr [1:27] "69" "86" "59" "38" ...
##  $ 802                 : chr [1:27] "60" "80" "53" "20" ...
##  $ 803                 : chr [1:27] "50" "76" "57" "23" ...
##  $ 804                 : chr [1:27] "55" "77" "66" "25" ...
##  $ 805                 : chr [1:27] "39" "91" "34" "21" ...
##  $ 806                 : chr [1:27] "28" "60" "68" "40" ...
##  $ 807                 : chr [1:27] "26" "70" "26" "35" ...
##  $ 808                 : chr [1:27] "17" "47" "26" "43" ...
##  $ 809                 : chr [1:27] "9" "18" "9" "0" ...
##  $ 810                 : chr [1:27] "22" "33" "33" "44" ...
##  $ 811                 : chr [1:27] "28" "72" "32" "28" ...
##  $ 812                 : chr [1:27] "52" "61" "44" "22" ...
##  $ 813                 : chr [1:27] "50" "79" "71" "42" ...
##  $ 814                 : chr [1:27] "38" "71" "38" "29" ...
##  $ 815                 : chr [1:27] "76" "88" "50" "42" ...
##  $ 816                 : chr [1:27] "59" "89" "63" "44" ...
##  $ 817                 : chr [1:27] "23" "50" "35" "15" ...
##  $ 818                 : chr [1:27] "31" "42" "23" "35" ...
##  $ 819                 : chr [1:27] "15" "55" "35" "15" ...
##  $ 820                 : num [1:27] NA NA NA NA NA NA NA NA NA NA ...
##  $ 821                 : chr [1:27] NA NA NA NA ...
##  $ 822                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "40.1" "65.84999999999999" "44.2" "29.25" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             800                801                802           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      803                804                805                806           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      807                808                809                810           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      811                812                813                814           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      815                816                817                818           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##      819                 820          821                822           
##  Length:27          Min.   : NA   Length:27          Length:27         
##  Class :character   1st Qu.: NA   Class :character   Class :character  
##  Mode  :character   Median : NA   Mode  :character   Mode  :character  
##                     Mean   :NaN                                        
##                     3rd Qu.: NA                                        
##                     Max.   : NA                                        
##                     NA's   :27                                         
##  Per_Question_Average
##  Length:27           
##  Class :character    
##  Mode  :character    
##                      
##                      
##                      
## 
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 8 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803`    `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr>    <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         96    96    73    50       60.7  79.2  39    52    27.3  <NA>  ???  
## 2 2         82    86    90    73.0999… 71.4… 83.3  54    64    36.4  <NA>  <NA> 
## 3 3         67    64    66    84.5999… 78.5… 70.8  62    48    54.5  <NA>  <NA> 
## 4 4         41    54    50    38.5     53.6  50    35    48    36.4  <NA>  <NA> 
## 5 5         96    93    87    73.0999… 78.5… 79.2  62    56    72.7  <NA>  <NA> 
## 6 6         82    89    97    88.5     89.3  70.8  66    60    77.3  <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 25] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 800                 : chr [1:27] "96" "82" "67" "41" ...
##  $ 801                 : chr [1:27] "96" "86" "64" "54" ...
##  $ 802                 : chr [1:27] "73" "90" "66" "50" ...
##  $ 803                 : chr [1:27] "50" "73.09999999999999" "84.59999999999999" "38.5" ...
##  $ 804                 : chr [1:27] "60.7" "71.40000000000001" "78.59999999999999" "53.6" ...
##  $ 805                 : chr [1:27] "79.2" "83.3" "70.8" "50" ...
##  $ 806                 : chr [1:27] "39" "54" "62" "35" ...
##  $ 807                 : chr [1:27] "52" "64" "48" "48" ...
##  $ 808                 : chr [1:27] "27.3" "36.4" "54.5" "36.4" ...
##  $ 809                 : chr [1:27] NA NA NA NA ...
##  $ 810                 : chr [1:27] "???" NA NA NA ...
##  $ 811                 : chr [1:27] "27" "85" "54" "23" ...
##  $ 812                 : chr [1:27] "46" "64" "64" "36" ...
##  $ 813                 : chr [1:27] "52" "61" "44" "52" ...
##  $ 814                 : chr [1:27] "32" "64" "46" "41" ...
##  $ 815                 : chr [1:27] "50" "84.59999999999999" "65.40000000000001" "34.6" ...
##  $ 816                 : chr [1:27] "96" "89" "82" "44" ...
##  $ 817                 : chr [1:27] "43" "31" "46" "50" ...
##  $ 818                 : chr [1:27] "62" "65" "62" "62" ...
##  $ 819                 : chr [1:27] "30" "61" "57" "30" ...
##  $ 820                 : chr [1:27] NA NA NA NA ...
##  $ 821                 : chr [1:27] NA NA NA NA ...
##  $ 822                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "56.1777777777778" "69.15555555555559" "61.9944444444444" "43.2833333333333" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             800                801                802           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      803                804                805                806           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      807                808                809                810           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      811                812                813                814           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      815                816                817                818           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      819                820                821                822           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##  Per_Question_Average
##  Length:27           
##  Class :character    
##  Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###
## 
## 
## ### Exploring Benchmark 9 ###
## ### First Few Rows of the Data ###
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         <NA>  <NA>  100   72    93    81    54    72    48    <NA>  <NA> 
## 2 2         <NA>  <NA>  100   84    97    86    77    86    81    <NA>  <NA> 
## 3 3         <NA>  <NA>  100   84    97    95    85    79    71    <NA>  <NA> 
## 4 4         <NA>  <NA>  100   72    97    76    62    76    57    <NA>  <NA> 
## 5 5         <NA>  <NA>  100   92    90    95    66    76    86    <NA>  <NA> 
## 6 6         <NA>  <NA>  100   84    97    100   73    72    57    <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <chr>
## 
## ### Structure of the Data ###
## tibble [27 × 25] (S3: tbl_df/tbl/data.frame)
##  $ Questions           : chr [1:27] "1" "2" "3" "4" ...
##  $ 800                 : chr [1:27] NA NA NA NA ...
##  $ 801                 : chr [1:27] NA NA NA NA ...
##  $ 802                 : chr [1:27] "100" "100" "100" "100" ...
##  $ 803                 : chr [1:27] "72" "84" "84" "72" ...
##  $ 804                 : chr [1:27] "93" "97" "97" "97" ...
##  $ 805                 : chr [1:27] "81" "86" "95" "76" ...
##  $ 806                 : chr [1:27] "54" "77" "85" "62" ...
##  $ 807                 : chr [1:27] "72" "86" "79" "76" ...
##  $ 808                 : chr [1:27] "48" "81" "71" "57" ...
##  $ 809                 : chr [1:27] NA NA NA NA ...
##  $ 810                 : chr [1:27] NA NA NA NA ...
##  $ 811                 : chr [1:27] "69" "81" "81" "81" ...
##  $ 812                 : chr [1:27] NA NA NA NA ...
##  $ 813                 : chr [1:27] "85" "90" "80" "85" ...
##  $ 814                 : chr [1:27] "88" "88" "79" "88" ...
##  $ 815                 : chr [1:27] "84" "100" "92" "92" ...
##  $ 816                 : chr [1:27] NA NA NA NA ...
##  $ 817                 : chr [1:27] "83" "90" "90" "80" ...
##  $ 818                 : chr [1:27] "71" "88" "79" "88" ...
##  $ 819                 : chr [1:27] NA NA NA NA ...
##  $ 820                 : chr [1:27] NA NA NA NA ...
##  $ 821                 : chr [1:27] NA NA NA NA ...
##  $ 822                 : chr [1:27] NA NA NA NA ...
##  $ Per_Question_Average: chr [1:27] "76.92307692307691" "88.30769230769231" "85.5384615384615" "81.07692307692309" ...
## NULL
## 
## ### Summary Statistics of the Data ###
##   Questions             800                801                802           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      803                804                805                806           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      807                808                809                810           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      811                812                813                814           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      815                816                817                818           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      819                820                821                822           
##  Length:27          Length:27          Length:27          Length:27         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##  Per_Question_Average
##  Length:27           
##  Class :character    
##  Mode  :character
## Warning in explore_data(benchmarks_list[[i]]): NAs introduced by coercion

## 
## ### Histogram of Per_Question_Average ###
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

## 
## ### Bar Plot of Per_Question_Average by Question ###

  • The histogram (blue graphs) helps to see the overall spread of average scores across all questions by showing how frequently each score range appears. This the question that is answered by the histogram: How often do different average scores appear?

  • The bar plot (green plots) provides a direct comparison of individual question scores, helping identify which questions scored higher or lower on average. This is the question that is answered by the bar plot: What is the average score for each question?

6th Grade Benchmark 1: Bimodal Distribution, The histogram shows two prominent peaks (tall bars) at different ranges: one around 33 to 37 and another around 23 to 27. This indicates that there are two groups of questions that were scored significantly differently, suggesting that some questions were more accessible than others.In other words, This bimodal nature suggests varied levels of understanding among students, with certain questions being much more challenging than others. The presence of low-scoring averages indicates that many students struggled overall.

6th Grade Benchmark 2: Right-Skewed Distribution, The tallest bar is found in the range of 57 to 63, with several shorter bars extending towards lower scores. The frequency of questions decreases as you move towards the lower score ranges (27 to 33), indicating that most students performed better on this benchmark compared to the first. This right-skewed distribution implies that while there was some improvement, there are still questions that posed difficulties for students. The data suggest a gradual increase in understanding, with some students still lagging in certain areas.

6th Grade Benchmark 3: Unimodal Distribution, The tallest bar, representing 8 questions, is located between 63 and 67, with fewer questions showing lower average scores. Most questions cluster around this higher range, indicating that students are performing better overall.This unimodal distribution suggests that there is a more unified performance level across the questions. The peak indicates an overall increase in students’ understanding and mastery of the material covered in this benchmark.

  • Overall Trends Across the three benchmarks, there is a noticeable shift from a bimodal distribution in Benchmark 1 to a right-skewed distribution in Benchmark 2, and finally to a unimodal distribution in Benchmark 3. This change suggests an improvement in student performance and understanding of the material over time, indicating that instructional methods or study practices may be effectively helping students grasp the concepts.

7th Grade Benchmarks:

Benchmark 1 shows a left-skewed distribution, suggesting that a majority of questions were challenging for students, with a cluster of lower scores.

Benchmark 2 transitions into a multimodal distribution, showing improvements but still with a broad range of performance, indicating uneven understanding of the material.

Benchmark 3 presents a bimodal distribution, where the peaks at both mid-range and higher scores suggest that some students demonstrated mastery while others still struggled, especially with certain concepts.

8th Grade Benchmark

Benchmark 1 shows a multimodal distribution, indicating varied student performance with several peaks. There are clusters of scores around the middle, suggesting that some students excelled on specific sets of questions while others struggled, leading to an uneven performance pattern.

Benchmark 2 shifts to a right-skewed distribution, indicating overall improvement. More students scored higher on this benchmark, with the majority of averages falling in the upper ranges.

Benchmark 3 continues the right-skewed pattern, with students clustering around higher scores, implying sustained improvement and mastery of many of the concepts tested.

After these plots, it is a good idea to have a quick overview of missing values in the dataset. Knowing where and how much data is missing helps ensure that your analysis of Per_Question_Average and Questions is based on complete or mostly complete data. I am going to use the function vis_miss which will help identify some abnormalities (for example question 7 on 6th grade benchmark 1 has a high average which gets lower in the 2nd benchmark) seeing missing data for that question can give context to those values. In other words, we will be able to identify if these averages are due to missing values. Moreover, detecting missing values early can guide any further cleaning steps I might need to take. If certain questions have high amounts of missing data, I can decide whether to fill in, omit, or address those missing values before proceeding with more detailed analysis.

3. Data Cleaning and Preparation

3.1 Preparing the data:

In this step, we inspected the dataset to confirm the presence of the necessary columns. The dataset contains the following columns:

## [1] "Columns before selection: Questions, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, Per_Question_Average"

By reviewing this structure, we ensure that all the necessary columns are available for further analysis, which includes comparing performance across different benchmarks and identifying trends in student performance for each question using the Per_Question_Average.

## $benchmark_6_1
## $benchmark_6_1$Questions
## [1] "Class Average"
## 
## $benchmark_6_1$`600`
## character(0)
## 
## $benchmark_6_1$`601`
## character(0)
## 
## $benchmark_6_1$`602`
## character(0)
## 
## $benchmark_6_1$`603`
## character(0)
## 
## $benchmark_6_1$`604`
## character(0)
## 
## $benchmark_6_1$`605`
## character(0)
## 
## $benchmark_6_1$`606`
## character(0)
## 
## $benchmark_6_1$`607`
## character(0)
## 
## $benchmark_6_1$`608`
## character(0)
## 
## $benchmark_6_1$`609`
## character(0)
## 
## $benchmark_6_1$`610`
## character(0)
## 
## $benchmark_6_1$`611`
## character(0)
## 
## $benchmark_6_1$`612`
## character(0)
## 
## $benchmark_6_1$`613`
## character(0)
## 
## $benchmark_6_1$`614`
## character(0)
## 
## $benchmark_6_1$`615`
## character(0)
## 
## $benchmark_6_1$`616`
## character(0)
## 
## $benchmark_6_1$`617`
## character(0)
## 
## $benchmark_6_1$`618`
## character(0)
## 
## $benchmark_6_1$`619`
## character(0)
## 
## $benchmark_6_1$`620`
## character(0)
## 
## $benchmark_6_1$`621`
## [1] "Class has 6 students"
## 
## $benchmark_6_1$`676`
## character(0)
## 
## $benchmark_6_1$Per_Question_Average
## [1] "Grade Average"
## 
## $benchmark_6_1$Skills
##  [1] "Question and Problem"                                                
##  [2] "Analyze and Interpret Data/ Cause and Effect"                        
##  [3] "Plan and Carry Out Investigations/ Cause and Effect"                 
##  [4] "Plan and Carry Out Investigations"                                   
##  [5] "Analyze and Interpret Data"                                          
##  [6] "Construct an Explanations and Design Solutions"                      
##  [7] "Developing and Using Models/ System and System Models"               
##  [8] "Construct an Explanations and Design Solutions/ Stability and Change"
##  [9] "Analyze and Interpret Data/ Patterns"                                
## [10] "Developing and Using Models/ Patterns"                               
## [11] "Developing and Using Models/ Cause and Effect"                       
## [12] "Developing and Using Models"                                         
## [13] "Construct an Explanations and Design Solutions/ Cause and Effect"    
## 
## 
## $benchmark_6_2
## $benchmark_6_2$Questions
## [1] "Class Average"
## 
## $benchmark_6_2$`600`
## character(0)
## 
## $benchmark_6_2$`601`
## character(0)
## 
## $benchmark_6_2$`602`
## character(0)
## 
## $benchmark_6_2$`603`
## character(0)
## 
## $benchmark_6_2$`604`
## character(0)
## 
## $benchmark_6_2$`605`
## character(0)
## 
## $benchmark_6_2$`606`
## character(0)
## 
## $benchmark_6_2$`607`
## character(0)
## 
## $benchmark_6_2$`608`
## character(0)
## 
## $benchmark_6_2$`609`
## [1] "???"
## 
## $benchmark_6_2$`610`
## character(0)
## 
## $benchmark_6_2$`611`
## character(0)
## 
## $benchmark_6_2$`612`
## character(0)
## 
## $benchmark_6_2$`613`
## character(0)
## 
## $benchmark_6_2$`614`
## character(0)
## 
## $benchmark_6_2$`615`
## character(0)
## 
## $benchmark_6_2$`616`
## character(0)
## 
## $benchmark_6_2$`617`
## character(0)
## 
## $benchmark_6_2$`618`
## character(0)
## 
## $benchmark_6_2$`619`
## character(0)
## 
## $benchmark_6_2$`620`
## character(0)
## 
## $benchmark_6_2$`621`
## character(0)
## 
## $benchmark_6_2$`622`
## character(0)
## 
## $benchmark_6_2$`676`
## character(0)
## 
## $benchmark_6_2$Per_Question_Average
## [1] "Grade Average"
## 
## $benchmark_6_2$Skills
##  [1] "Question and Problem"                                                
##  [2] "Analyze and Interpret Data/ Cause and Effect"                        
##  [3] "Plan and Carry Out Investigations/ Cause and Effect"                 
##  [4] "Plan and Carry Out Investigations"                                   
##  [5] "Analyze and Interpret Data"                                          
##  [6] "Construct an Explanations and Design Solutions"                      
##  [7] "Developing and Using Models/ System and System Models"               
##  [8] "Construct an Explanations and Design Solutions/ Stability and Change"
##  [9] "Analyze and Interpret Data/ Patterns"                                
## [10] "Developing and Using Models/ Patterns"                               
## [11] "Developing and Using Models/ Cause and Effect"                       
## [12] "Developing and Using Models"                                         
## [13] "Construct an Explanations and Design Solutions/ Cause and Effect"    
## 
## 
## $benchmark_6_3
## $benchmark_6_3$Questions
## [1] "Class Average"
## 
## $benchmark_6_3$`600`
## character(0)
## 
## $benchmark_6_3$`601`
## character(0)
## 
## $benchmark_6_3$`602`
## character(0)
## 
## $benchmark_6_3$`603`
## character(0)
## 
## $benchmark_6_3$`604`
## character(0)
## 
## $benchmark_6_3$`605`
## character(0)
## 
## $benchmark_6_3$`606`
## character(0)
## 
## $benchmark_6_3$`607`
## character(0)
## 
## $benchmark_6_3$`608`
## character(0)
## 
## $benchmark_6_3$`611`
## character(0)
## 
## $benchmark_6_3$`612`
## character(0)
## 
## $benchmark_6_3$`613`
## character(0)
## 
## $benchmark_6_3$`614`
## character(0)
## 
## $benchmark_6_3$`615`
## character(0)
## 
## $benchmark_6_3$`616`
## character(0)
## 
## $benchmark_6_3$`617`
## character(0)
## 
## $benchmark_6_3$`618`
## character(0)
## 
## $benchmark_6_3$`619`
## character(0)
## 
## $benchmark_6_3$`620`
## character(0)
## 
## $benchmark_6_3$`621`
## character(0)
## 
## $benchmark_6_3$`622`
## character(0)
## 
## $benchmark_6_3$`676`
## character(0)
## 
## $benchmark_6_3$Per_Question_Average
## [1] "Grade Average"
## 
## $benchmark_6_3$Skills
##  [1] "Question and Problem"                                                
##  [2] "Analyze and Interpret Data/ Cause and Effect"                        
##  [3] "Plan and Carry Out Investigations/ Cause and Effect"                 
##  [4] "Plan and Carry Out Investigations"                                   
##  [5] "Analyze and Interpret Data"                                          
##  [6] "Construct an Explanations and Design Solutions"                      
##  [7] "Developing and Using Models/ System and System Models"               
##  [8] "Construct an Explanations and Design Solutions/ Stability and Change"
##  [9] "Analyze and Interpret Data/ Patterns"                                
## [10] "Developing and Using Models/ Patterns"                               
## [11] "Developing and Using Models/ Cause and Effect"                       
## [12] "Developing and Using Models"                                         
## [13] "Construct an Explanations and Design Solutions/ Cause and Effect"    
## 
## 
## $benchmark_7_1
## $benchmark_7_1$Questions
## [1] "Class Average"
## 
## $benchmark_7_1$`700`
## character(0)
## 
## $benchmark_7_1$`701`
## character(0)
## 
## $benchmark_7_1$`702`
## character(0)
## 
## $benchmark_7_1$`703`
## character(0)
## 
## $benchmark_7_1$`704`
## character(0)
## 
## $benchmark_7_1$`705`
## character(0)
## 
## $benchmark_7_1$`706`
## character(0)
## 
## $benchmark_7_1$`707`
## character(0)
## 
## $benchmark_7_1$`708`
## character(0)
## 
## $benchmark_7_1$`709`
## character(0)
## 
## $benchmark_7_1$`710`
## character(0)
## 
## $benchmark_7_1$`711`
## character(0)
## 
## $benchmark_7_1$`712`
## character(0)
## 
## $benchmark_7_1$`713`
## character(0)
## 
## $benchmark_7_1$`714`
## character(0)
## 
## $benchmark_7_1$`715`
## character(0)
## 
## $benchmark_7_1$`716`
## character(0)
## 
## $benchmark_7_1$`717`
## character(0)
## 
## $benchmark_7_1$`718`
## character(0)
## 
## $benchmark_7_1$`719`
## character(0)
## 
## $benchmark_7_1$Per_Question_Average
## [1] "Grade Average"
## 
## 
## $benchmark_7_2
## $benchmark_7_2$Questions
## [1] "Class Average"
## 
## $benchmark_7_2$`700`
## character(0)
## 
## $benchmark_7_2$`701`
## character(0)
## 
## $benchmark_7_2$`702`
## character(0)
## 
## $benchmark_7_2$`703`
## character(0)
## 
## $benchmark_7_2$`704`
## character(0)
## 
## $benchmark_7_2$`705`
## character(0)
## 
## $benchmark_7_2$`706`
## character(0)
## 
## $benchmark_7_2$`707`
## character(0)
## 
## $benchmark_7_2$`708`
## character(0)
## 
## $benchmark_7_2$`709`
## [1] "???"
## 
## $benchmark_7_2$`710`
## [1] "???"
## 
## $benchmark_7_2$`711`
## character(0)
## 
## $benchmark_7_2$`712`
## character(0)
## 
## $benchmark_7_2$`713`
## character(0)
## 
## $benchmark_7_2$`714`
## character(0)
## 
## $benchmark_7_2$`715`
## character(0)
## 
## $benchmark_7_2$`716`
## character(0)
## 
## $benchmark_7_2$`717`
## [1] "???"
## 
## $benchmark_7_2$`718`
## character(0)
## 
## $benchmark_7_2$`719`
## character(0)
## 
## $benchmark_7_2$Per_Question_Average
## [1] "Grade Average"
## 
## 
## $benchmark_7_3
## $benchmark_7_3$Questions
## [1] "Class Average"
## 
## $benchmark_7_3$`700`
## character(0)
## 
## $benchmark_7_3$`701`
## character(0)
## 
## $benchmark_7_3$`702`
## character(0)
## 
## $benchmark_7_3$`703`
## character(0)
## 
## $benchmark_7_3$`704`
## character(0)
## 
## $benchmark_7_3$`705`
## character(0)
## 
## $benchmark_7_3$`706`
## character(0)
## 
## $benchmark_7_3$`707`
## character(0)
## 
## $benchmark_7_3$`708`
## character(0)
## 
## $benchmark_7_3$`709`
## character(0)
## 
## $benchmark_7_3$`710`
## character(0)
## 
## $benchmark_7_3$`711`
## character(0)
## 
## $benchmark_7_3$`712`
## character(0)
## 
## $benchmark_7_3$`713`
## character(0)
## 
## $benchmark_7_3$`714`
## character(0)
## 
## $benchmark_7_3$`715`
## character(0)
## 
## $benchmark_7_3$`716`
## character(0)
## 
## $benchmark_7_3$`717`
## character(0)
## 
## $benchmark_7_3$`718`
## character(0)
## 
## $benchmark_7_3$`719`
## character(0)
## 
## $benchmark_7_3$Per_Question_Average
## [1] "Grade Average"
## 
## 
## $benchmark_8_1
## $benchmark_8_1$Questions
## [1] "Class Average"
## 
## $benchmark_8_1$`800`
## character(0)
## 
## $benchmark_8_1$`801`
## character(0)
## 
## $benchmark_8_1$`802`
## character(0)
## 
## $benchmark_8_1$`803`
## character(0)
## 
## $benchmark_8_1$`804`
## character(0)
## 
## $benchmark_8_1$`805`
## character(0)
## 
## $benchmark_8_1$`806`
## character(0)
## 
## $benchmark_8_1$`807`
## character(0)
## 
## $benchmark_8_1$`808`
## character(0)
## 
## $benchmark_8_1$`809`
## character(0)
## 
## $benchmark_8_1$`810`
## character(0)
## 
## $benchmark_8_1$`811`
## character(0)
## 
## $benchmark_8_1$`812`
## character(0)
## 
## $benchmark_8_1$`813`
## character(0)
## 
## $benchmark_8_1$`814`
## character(0)
## 
## $benchmark_8_1$`815`
## character(0)
## 
## $benchmark_8_1$`816`
## character(0)
## 
## $benchmark_8_1$`817`
## character(0)
## 
## $benchmark_8_1$`818`
## character(0)
## 
## $benchmark_8_1$`819`
## character(0)
## 
## $benchmark_8_1$`820`
## NULL
## 
## $benchmark_8_1$`821`
## character(0)
## 
## $benchmark_8_1$`822`
## character(0)
## 
## $benchmark_8_1$Per_Question_Average
## [1] "Grade Average"
## 
## 
## $benchmark_8_2
## $benchmark_8_2$Questions
## [1] "Class Average"
## 
## $benchmark_8_2$`800`
## character(0)
## 
## $benchmark_8_2$`801`
## character(0)
## 
## $benchmark_8_2$`802`
## character(0)
## 
## $benchmark_8_2$`803`
## character(0)
## 
## $benchmark_8_2$`804`
## character(0)
## 
## $benchmark_8_2$`805`
## character(0)
## 
## $benchmark_8_2$`806`
## character(0)
## 
## $benchmark_8_2$`807`
## character(0)
## 
## $benchmark_8_2$`808`
## character(0)
## 
## $benchmark_8_2$`809`
## character(0)
## 
## $benchmark_8_2$`810`
## [1] "???"
## 
## $benchmark_8_2$`811`
## character(0)
## 
## $benchmark_8_2$`812`
## character(0)
## 
## $benchmark_8_2$`813`
## character(0)
## 
## $benchmark_8_2$`814`
## character(0)
## 
## $benchmark_8_2$`815`
## character(0)
## 
## $benchmark_8_2$`816`
## character(0)
## 
## $benchmark_8_2$`817`
## character(0)
## 
## $benchmark_8_2$`818`
## character(0)
## 
## $benchmark_8_2$`819`
## character(0)
## 
## $benchmark_8_2$`820`
## character(0)
## 
## $benchmark_8_2$`821`
## character(0)
## 
## $benchmark_8_2$`822`
## character(0)
## 
## $benchmark_8_2$Per_Question_Average
## [1] "Grade Average"
## 
## 
## $benchmark_8_3
## $benchmark_8_3$Questions
## [1] "Class Average"
## 
## $benchmark_8_3$`800`
## character(0)
## 
## $benchmark_8_3$`801`
## character(0)
## 
## $benchmark_8_3$`802`
## character(0)
## 
## $benchmark_8_3$`803`
## character(0)
## 
## $benchmark_8_3$`804`
## character(0)
## 
## $benchmark_8_3$`805`
## character(0)
## 
## $benchmark_8_3$`806`
## character(0)
## 
## $benchmark_8_3$`807`
## character(0)
## 
## $benchmark_8_3$`808`
## character(0)
## 
## $benchmark_8_3$`809`
## character(0)
## 
## $benchmark_8_3$`810`
## character(0)
## 
## $benchmark_8_3$`811`
## character(0)
## 
## $benchmark_8_3$`812`
## character(0)
## 
## $benchmark_8_3$`813`
## character(0)
## 
## $benchmark_8_3$`814`
## character(0)
## 
## $benchmark_8_3$`815`
## character(0)
## 
## $benchmark_8_3$`816`
## character(0)
## 
## $benchmark_8_3$`817`
## character(0)
## 
## $benchmark_8_3$`818`
## character(0)
## 
## $benchmark_8_3$`819`
## character(0)
## 
## $benchmark_8_3$`820`
## character(0)
## 
## $benchmark_8_3$`821`
## character(0)
## 
## $benchmark_8_3$`822`
## character(0)
## 
## $benchmark_8_3$Per_Question_Average
## [1] "Grade Average"

The output from the code above reveals that there are several non-numeric entries in the Questions and Per_Question_Average columns. In particular, we have values like “Class Average” and “Grade Average” in the Questions column, and various skills-related text in some other columns, such as Skills.

To clean up these non-numeric entries, I am going to Convert Per_Question_Average to Numeric in Each Data Frame. This will ensure that the Per_Question_Average column in each benchmark data frame is numeric before combining them.

##  [1] 42.444444 46.944444 24.611111 40.777778 41.444444 25.833333 59.000000
##  [8] 31.944444 44.111111 35.111111 23.166667 20.833333 46.944444 53.111111
## [15] 36.333333 35.111111 32.833333 41.055556 22.722222 29.722222 36.277778
## [22]  8.944444 18.000000 31.444444  8.888889 33.504444        NA

Why was this step necessary? Data in R might be stored as characters or factors, especially if there were non-numeric values or formatting inconsistencies. This would cause issues when performing numerical analysis, such as calculating averages, identifying trends, or generating plots. Thus, converting the Per_Question_Average column to numeric ensures that I can work with the data properly for statistical purposes.

3.2 Cleaning the Data:

This step aims to clean up the dataset by handling missing values, converting columns to numeric types, and ensuring consistency across different benchmark tabs.

## Before cleaning: benchmark_6_1 
## # A tibble: 6 × 26
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         41    60    50    50    55    22    25    12    31    48    50   
## 2 2         62    63    50    50    48    17    33    24    65    50    49   
## 3 3         38    30    43    20    30    9     17    36    27    15    18   
## 4 4         55    66    46    50    33    39    54    20    42    32    35   
## 5 5         52    60    56    63    44    22    38    40    31    40    32   
## 6 6         21    26    33    30    33    22    42    24    38    10    17   
## # ℹ 14 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `676` <chr>, Per_Question_Average <dbl>,
## #   Skills <chr>
## After replacing '???': benchmark_6_1 
## # A tibble: 6 × 26
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         41    60    50    50    55    22    25    12    31    48    50   
## 2 2         62    63    50    50    48    17    33    24    65    50    49   
## 3 3         38    30    43    20    30    9     17    36    27    15    18   
## 4 4         55    66    46    50    33    39    54    20    42    32    35   
## 5 5         52    60    56    63    44    22    38    40    31    40    32   
## 6 6         21    26    33    30    33    22    42    24    38    10    17   
## # ℹ 14 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `676` <chr>, Per_Question_Average <dbl>,
## #   Skills <chr>
## After conversion: benchmark_6_1 
## # A tibble: 6 × 26
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    41    60    50    50    55    22    25    12    31    48    50
## 2         2    62    63    50    50    48    17    33    24    65    50    49
## 3         3    38    30    43    20    30     9    17    36    27    15    18
## 4         4    55    66    46    50    33    39    54    20    42    32    35
## 5         5    52    60    56    63    44    22    38    40    31    40    32
## 6         6    21    26    33    30    33    22    42    24    38    10    17
## # ℹ 14 more variables: `611` <dbl>, `612` <dbl>, `613` <dbl>, `614` <dbl>,
## #   `615` <dbl>, `616` <dbl>, `617` <dbl>, `618` <dbl>, `619` <dbl>,
## #   `620` <dbl>, `621` <dbl>, `676` <dbl>, Per_Question_Average <dbl>,
## #   Skills <chr>
## Before cleaning: benchmark_6_2 
## # A tibble: 6 × 27
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         90    96    93    93    77    58    82    70    58    ???   <NA> 
## 2 2         90    86    81    60    54    46    46    50    26    <NA>  <NA> 
## 3 3         55    57    44    43    41    55    18    20    21    <NA>  <NA> 
## 4 4         59    64    44    73    32    29    14    30    30    <NA>  <NA> 
## 5 5         76    86    67    83    77    21    36    45    83    <NA>  <NA> 
## 6 6         31    7     22    33    14    42    23    60    17    <NA>  <NA> 
## # ℹ 15 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `622` <chr>, `676` <chr>,
## #   Per_Question_Average <dbl>, Skills <chr>
## After replacing '???': benchmark_6_2 
## # A tibble: 6 × 27
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         90    96    93    93    77    58    82    70    58    <NA>  <NA> 
## 2 2         90    86    81    60    54    46    46    50    26    <NA>  <NA> 
## 3 3         55    57    44    43    41    55    18    20    21    <NA>  <NA> 
## 4 4         59    64    44    73    32    29    14    30    30    <NA>  <NA> 
## 5 5         76    86    67    83    77    21    36    45    83    <NA>  <NA> 
## 6 6         31    7     22    33    14    42    23    60    17    <NA>  <NA> 
## # ℹ 15 more variables: `611` <chr>, `612` <chr>, `613` <chr>, `614` <chr>,
## #   `615` <chr>, `616` <chr>, `617` <chr>, `618` <chr>, `619` <chr>,
## #   `620` <chr>, `621` <chr>, `622` <chr>, `676` <chr>,
## #   Per_Question_Average <dbl>, Skills <chr>
## After conversion: benchmark_6_2 
## # A tibble: 6 × 27
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `609` `610`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    90    96    93    93    77    58    82    70    58    NA    NA
## 2         2    90    86    81    60    54    46    46    50    26    NA    NA
## 3         3    55    57    44    43    41    55    18    20    21    NA    NA
## 4         4    59    64    44    73    32    29    14    30    30    NA    NA
## 5         5    76    86    67    83    77    21    36    45    83    NA    NA
## 6         6    31     7    22    33    14    42    23    60    17    NA    NA
## # ℹ 15 more variables: `611` <dbl>, `612` <dbl>, `613` <dbl>, `614` <dbl>,
## #   `615` <dbl>, `616` <dbl>, `617` <dbl>, `618` <dbl>, `619` <dbl>,
## #   `620` <dbl>, `621` <dbl>, `622` <dbl>, `676` <dbl>,
## #   Per_Question_Average <dbl>, Skills <chr>
## Before cleaning: benchmark_6_3 
## # A tibble: 6 × 25
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `611` `612`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         75    68    66    64    77    76    95    75    87    83    96   
## 2 2         93    92    87    94    54    50    55    60    34    58    87   
## 3 3         72    76    66    67    39    50    50    28    25    29    73   
## 4 4         86    80    59    94    58    39    65    47    34    54    65   
## 5 5         86    96    90    94    66    50    50    40    42    67    57   
## 6 6         58    44    63    74    39    31    35    20    34    42    44   
## # ℹ 13 more variables: `613` <chr>, `614` <chr>, `615` <chr>, `616` <chr>,
## #   `617` <chr>, `618` <chr>, `619` <chr>, `620` <chr>, `621` <chr>,
## #   `622` <chr>, `676` <chr>, Per_Question_Average <dbl>, Skills <chr>
## After replacing '???': benchmark_6_3 
## # A tibble: 6 × 25
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `611` `612`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         75    68    66    64    77    76    95    75    87    83    96   
## 2 2         93    92    87    94    54    50    55    60    34    58    87   
## 3 3         72    76    66    67    39    50    50    28    25    29    73   
## 4 4         86    80    59    94    58    39    65    47    34    54    65   
## 5 5         86    96    90    94    66    50    50    40    42    67    57   
## 6 6         58    44    63    74    39    31    35    20    34    42    44   
## # ℹ 13 more variables: `613` <chr>, `614` <chr>, `615` <chr>, `616` <chr>,
## #   `617` <chr>, `618` <chr>, `619` <chr>, `620` <chr>, `621` <chr>,
## #   `622` <chr>, `676` <chr>, Per_Question_Average <dbl>, Skills <chr>
## After conversion: benchmark_6_3 
## # A tibble: 6 × 25
##   Questions `600` `601` `602` `603` `604` `605` `606` `607` `608` `611` `612`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    75    68    66    64    77    76    95    75    87    83    96
## 2         2    93    92    87    94    54    50    55    60    34    58    87
## 3         3    72    76    66    67    39    50    50    28    25    29    73
## 4         4    86    80    59    94    58    39    65    47    34    54    65
## 5         5    86    96    90    94    66    50    50    40    42    67    57
## 6         6    58    44    63    74    39    31    35    20    34    42    44
## # ℹ 13 more variables: `613` <dbl>, `614` <dbl>, `615` <dbl>, `616` <dbl>,
## #   `617` <dbl>, `618` <dbl>, `619` <dbl>, `620` <dbl>, `621` <dbl>,
## #   `622` <dbl>, `676` <dbl>, Per_Question_Average <dbl>, Skills <chr>
## Before cleaning: benchmark_7_1 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707`    `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>    <chr> <chr> <chr>
## 1 1         23    24    24    6     23    24    14    18.5185… 21    14    10   
## 2 2         52    36    48    38    36    34    32    25.9259… 25    0     60   
## 3 3         39    40    33    19    23    14    46    25.9259… 39    14    0    
## 4 4         61    48    62    63    41    14    32    25.9259… 29    14    10   
## 5 5         65    48    29    38    32    21    54    33.3333… 21    14    30   
## 6 6         57    36    29    50    23    24    14    18.5185… 21    14    10   
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After replacing '???': benchmark_7_1 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707`    `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>    <chr> <chr> <chr>
## 1 1         23    24    24    6     23    24    14    18.5185… 21    14    10   
## 2 2         52    36    48    38    36    34    32    25.9259… 25    0     60   
## 3 3         39    40    33    19    23    14    46    25.9259… 39    14    0    
## 4 4         61    48    62    63    41    14    32    25.9259… 29    14    10   
## 5 5         65    48    29    38    32    21    54    33.3333… 21    14    30   
## 6 6         57    36    29    50    23    24    14    18.5185… 21    14    10   
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After conversion: benchmark_7_1 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    23    24    24     6    23    24    14  18.5    21    14    10
## 2         2    52    36    48    38    36    34    32  25.9    25     0    60
## 3         3    39    40    33    19    23    14    46  25.9    39    14     0
## 4         4    61    48    62    63    41    14    32  25.9    29    14    10
## 5         5    65    48    29    38    32    21    54  33.3    21    14    30
## 6         6    57    36    29    50    23    24    14  18.5    21    14    10
## # ℹ 10 more variables: `711` <dbl>, `712` <dbl>, `713` <dbl>, `714` <dbl>,
## #   `715` <dbl>, `716` <dbl>, `717` <dbl>, `718` <dbl>, `719` <dbl>,
## #   Per_Question_Average <dbl>
## Before cleaning: benchmark_7_2 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         4     4     5     24    25    13    12    30    13    ???   ???  
## 2 2         35    48    10    47    50    39    32    52    35    <NA>  <NA> 
## 3 3         26    68    10    65    60    78    64    48    39    <NA>  <NA> 
## 4 4         61    48    62    53    70    30    40    33    26    <NA>  <NA> 
## 5 5         52    68    29    47    25    22    44    19    39    <NA>  <NA> 
## 6 6         65    32    43    47    40    26    32    41    30    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After replacing '???': benchmark_7_2 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         4     4     5     24    25    13    12    30    13    <NA>  <NA> 
## 2 2         35    48    10    47    50    39    32    52    35    <NA>  <NA> 
## 3 3         26    68    10    65    60    78    64    48    39    <NA>  <NA> 
## 4 4         61    48    62    53    70    30    40    33    26    <NA>  <NA> 
## 5 5         52    68    29    47    25    22    44    19    39    <NA>  <NA> 
## 6 6         65    32    43    47    40    26    32    41    30    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After conversion: benchmark_7_2 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1     4     4     5    24    25    13    12    30    13    NA    NA
## 2         2    35    48    10    47    50    39    32    52    35    NA    NA
## 3         3    26    68    10    65    60    78    64    48    39    NA    NA
## 4         4    61    48    62    53    70    30    40    33    26    NA    NA
## 5         5    52    68    29    47    25    22    44    19    39    NA    NA
## 6         6    65    32    43    47    40    26    32    41    30    NA    NA
## # ℹ 10 more variables: `711` <dbl>, `712` <dbl>, `713` <dbl>, `714` <dbl>,
## #   `715` <dbl>, `716` <dbl>, `717` <dbl>, `718` <dbl>, `719` <dbl>,
## #   Per_Question_Average <dbl>
## Before cleaning: benchmark_7_3 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         22    96    25    50    20    38    23    46    26    <NA>  <NA> 
## 2 2         39    88    5     38    34    34    31    31    31    <NA>  <NA> 
## 3 3         96    92    90    82    100   63    73    72    44    <NA>  <NA> 
## 4 4         70    92    80    75    39    38    50    28    35    <NA>  <NA> 
## 5 5         57    96    40    44    30    25    39    17    35    <NA>  <NA> 
## 6 6         78    88    65    50    58    55    43    34    31    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After replacing '???': benchmark_7_3 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         22    96    25    50    20    38    23    46    26    <NA>  <NA> 
## 2 2         39    88    5     38    34    34    31    31    31    <NA>  <NA> 
## 3 3         96    92    90    82    100   63    73    72    44    <NA>  <NA> 
## 4 4         70    92    80    75    39    38    50    28    35    <NA>  <NA> 
## 5 5         57    96    40    44    30    25    39    17    35    <NA>  <NA> 
## 6 6         78    88    65    50    58    55    43    34    31    <NA>  <NA> 
## # ℹ 10 more variables: `711` <chr>, `712` <chr>, `713` <chr>, `714` <chr>,
## #   `715` <chr>, `716` <chr>, `717` <chr>, `718` <chr>, `719` <chr>,
## #   Per_Question_Average <dbl>
## After conversion: benchmark_7_3 
## # A tibble: 6 × 22
##   Questions `700` `701` `702` `703` `704` `705` `706` `707` `708` `709` `710`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    22    96    25    50    20    38    23    46    26    NA    NA
## 2         2    39    88     5    38    34    34    31    31    31    NA    NA
## 3         3    96    92    90    82   100    63    73    72    44    NA    NA
## 4         4    70    92    80    75    39    38    50    28    35    NA    NA
## 5         5    57    96    40    44    30    25    39    17    35    NA    NA
## 6         6    78    88    65    50    58    55    43    34    31    NA    NA
## # ℹ 10 more variables: `711` <dbl>, `712` <dbl>, `713` <dbl>, `714` <dbl>,
## #   `715` <dbl>, `716` <dbl>, `717` <dbl>, `718` <dbl>, `719` <dbl>,
## #   Per_Question_Average <dbl>
## Before cleaning: benchmark_8_1 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         55    69    60    50    55    39    28    26    17    9     22   
## 2 2         72    86    80    76    77    91    60    70    47    18    33   
## 3 3         62    59    53    57    66    34    68    26    26    9     33   
## 4 4         24    38    20    23    25    21    40    35    43    0     44   
## 5 5         86    72    80    80    88    82    68    74    30    73    22   
## 6 6         83    90    80    69    92    69    56    78    60    55    33   
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <dbl>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After replacing '???': benchmark_8_1 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         55    69    60    50    55    39    28    26    17    9     22   
## 2 2         72    86    80    76    77    91    60    70    47    18    33   
## 3 3         62    59    53    57    66    34    68    26    26    9     33   
## 4 4         24    38    20    23    25    21    40    35    43    0     44   
## 5 5         86    72    80    80    88    82    68    74    30    73    22   
## 6 6         83    90    80    69    92    69    56    78    60    55    33   
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <dbl>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After conversion: benchmark_8_1 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    55    69    60    50    55    39    28    26    17     9    22
## 2         2    72    86    80    76    77    91    60    70    47    18    33
## 3         3    62    59    53    57    66    34    68    26    26     9    33
## 4         4    24    38    20    23    25    21    40    35    43     0    44
## 5         5    86    72    80    80    88    82    68    74    30    73    22
## 6         6    83    90    80    69    92    69    56    78    60    55    33
## # ℹ 13 more variables: `811` <dbl>, `812` <dbl>, `813` <dbl>, `814` <dbl>,
## #   `815` <dbl>, `816` <dbl>, `817` <dbl>, `818` <dbl>, `819` <dbl>,
## #   `820` <dbl>, `821` <dbl>, `822` <dbl>, Per_Question_Average <dbl>
## Before cleaning: benchmark_8_2 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803`    `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr>    <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         96    96    73    50       60.7  79.2  39    52    27.3  <NA>  ???  
## 2 2         82    86    90    73.0999… 71.4… 83.3  54    64    36.4  <NA>  <NA> 
## 3 3         67    64    66    84.5999… 78.5… 70.8  62    48    54.5  <NA>  <NA> 
## 4 4         41    54    50    38.5     53.6  50    35    48    36.4  <NA>  <NA> 
## 5 5         96    93    87    73.0999… 78.5… 79.2  62    56    72.7  <NA>  <NA> 
## 6 6         82    89    97    88.5     89.3  70.8  66    60    77.3  <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After replacing '???': benchmark_8_2 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803`    `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr>    <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         96    96    73    50       60.7  79.2  39    52    27.3  <NA>  <NA> 
## 2 2         82    86    90    73.0999… 71.4… 83.3  54    64    36.4  <NA>  <NA> 
## 3 3         67    64    66    84.5999… 78.5… 70.8  62    48    54.5  <NA>  <NA> 
## 4 4         41    54    50    38.5     53.6  50    35    48    36.4  <NA>  <NA> 
## 5 5         96    93    87    73.0999… 78.5… 79.2  62    56    72.7  <NA>  <NA> 
## 6 6         82    89    97    88.5     89.3  70.8  66    60    77.3  <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After conversion: benchmark_8_2 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    96    96    73  50    60.7  79.2    39    52  27.3    NA    NA
## 2         2    82    86    90  73.1  71.4  83.3    54    64  36.4    NA    NA
## 3         3    67    64    66  84.6  78.6  70.8    62    48  54.5    NA    NA
## 4         4    41    54    50  38.5  53.6  50      35    48  36.4    NA    NA
## 5         5    96    93    87  73.1  78.6  79.2    62    56  72.7    NA    NA
## 6         6    82    89    97  88.5  89.3  70.8    66    60  77.3    NA    NA
## # ℹ 13 more variables: `811` <dbl>, `812` <dbl>, `813` <dbl>, `814` <dbl>,
## #   `815` <dbl>, `816` <dbl>, `817` <dbl>, `818` <dbl>, `819` <dbl>,
## #   `820` <dbl>, `821` <dbl>, `822` <dbl>, Per_Question_Average <dbl>
## Before cleaning: benchmark_8_3 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         <NA>  <NA>  100   72    93    81    54    72    48    <NA>  <NA> 
## 2 2         <NA>  <NA>  100   84    97    86    77    86    81    <NA>  <NA> 
## 3 3         <NA>  <NA>  100   84    97    95    85    79    71    <NA>  <NA> 
## 4 4         <NA>  <NA>  100   72    97    76    62    76    57    <NA>  <NA> 
## 5 5         <NA>  <NA>  100   92    90    95    66    76    86    <NA>  <NA> 
## 6 6         <NA>  <NA>  100   84    97    100   73    72    57    <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After replacing '???': benchmark_8_3 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##   <chr>     <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1         <NA>  <NA>  100   72    93    81    54    72    48    <NA>  <NA> 
## 2 2         <NA>  <NA>  100   84    97    86    77    86    81    <NA>  <NA> 
## 3 3         <NA>  <NA>  100   84    97    95    85    79    71    <NA>  <NA> 
## 4 4         <NA>  <NA>  100   72    97    76    62    76    57    <NA>  <NA> 
## 5 5         <NA>  <NA>  100   92    90    95    66    76    86    <NA>  <NA> 
## 6 6         <NA>  <NA>  100   84    97    100   73    72    57    <NA>  <NA> 
## # ℹ 13 more variables: `811` <chr>, `812` <chr>, `813` <chr>, `814` <chr>,
## #   `815` <chr>, `816` <chr>, `817` <chr>, `818` <chr>, `819` <chr>,
## #   `820` <chr>, `821` <chr>, `822` <chr>, Per_Question_Average <dbl>
## After conversion: benchmark_8_3 
## # A tibble: 6 × 25
##   Questions `800` `801` `802` `803` `804` `805` `806` `807` `808` `809` `810`
##       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1    NA    NA   100    72    93    81    54    72    48    NA    NA
## 2         2    NA    NA   100    84    97    86    77    86    81    NA    NA
## 3         3    NA    NA   100    84    97    95    85    79    71    NA    NA
## 4         4    NA    NA   100    72    97    76    62    76    57    NA    NA
## 5         5    NA    NA   100    92    90    95    66    76    86    NA    NA
## 6         6    NA    NA   100    84    97   100    73    72    57    NA    NA
## # ℹ 13 more variables: `811` <dbl>, `812` <dbl>, `813` <dbl>, `814` <dbl>,
## #   `815` <dbl>, `816` <dbl>, `817` <dbl>, `818` <dbl>, `819` <dbl>,
## #   `820` <dbl>, `821` <dbl>, `822` <dbl>, Per_Question_Average <dbl>
## NULL

Before Cleaning: Each debug message labeled “Before cleaning” shows the initial state of the data in each benchmark tab. It allows us to see if there are any anomalies, such as the presence of ??? or inconsistent formats before cleaning.

After Replacing ‘???’: Each “After replacing ‘???’” message shows that any placeholder ??? values have been successfully replaced by NA. This ensures missing data is handled correctly.

After Conversion: Each “After conversion” message confirms that character columns have been converted to numeric where applicable, ensuring that you can perform calculations and analysis without errors due to character data types.

For example, the debug message: After conversion: 6th Grade Benchmark 1 indicates that the conversion process was applied, and columns now contain numeric values (or NA for non-convertible entries).

3.3 Checking the cleaned data:

When combining the data frames, check that the bind_rows function is receiving properly formatted data frames. If the data frames were cleaned to the point where they only contain NA or empty rows, the combined data will also reflect that.

## $benchmark_6_1
## [1] FALSE
## 
## $benchmark_6_2
## [1] FALSE
## 
## $benchmark_6_3
## [1] FALSE
## 
## $benchmark_7_1
## [1] FALSE
## 
## $benchmark_7_2
## [1] FALSE
## 
## $benchmark_7_3
## [1] FALSE
## 
## $benchmark_8_1
## [1] FALSE
## 
## $benchmark_8_2
## [1] FALSE
## 
## $benchmark_8_3
## [1] FALSE

No Empty Data Frames:

Since every result is FALSE, it means that none of the benchmarks lost all their data during the cleaning process. This is a positive outcome, confirming that the cleaning steps—such as replacing ???, handling missing values, and converting columns to numeric—did not remove so much data that any benchmark tab became completely empty.

4. Data Analysis:

4.1 Combining the data frames:

  • Combine All Benchmark Data into One Data Frame After converting the columns to numeric, combine all the data frames into a single data frame.
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "609"                  "610"                 
## [13] "611"                  "612"                  "613"                 
## [16] "614"                  "615"                  "616"                 
## [19] "617"                  "618"                  "619"                 
## [22] "620"                  "621"                  "676"                 
## [25] "Per_Question_Average" "Skills"              
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "609"                  "610"                 
## [13] "611"                  "612"                  "613"                 
## [16] "614"                  "615"                  "616"                 
## [19] "617"                  "618"                  "619"                 
## [22] "620"                  "621"                  "622"                 
## [25] "676"                  "Per_Question_Average" "Skills"              
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "611"                  "612"                 
## [13] "613"                  "614"                  "615"                 
## [16] "616"                  "617"                  "618"                 
## [19] "619"                  "620"                  "621"                 
## [22] "622"                  "676"                  "Per_Question_Average"
## [25] "Skills"              
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
## [[1]]
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "609"                  "610"                 
## [13] "611"                  "612"                  "613"                 
## [16] "614"                  "615"                  "616"                 
## [19] "617"                  "618"                  "619"                 
## [22] "620"                  "621"                  "676"                 
## [25] "Per_Question_Average" "Skills"              
## 
## [[2]]
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "609"                  "610"                 
## [13] "611"                  "612"                  "613"                 
## [16] "614"                  "615"                  "616"                 
## [19] "617"                  "618"                  "619"                 
## [22] "620"                  "621"                  "622"                 
## [25] "676"                  "Per_Question_Average" "Skills"              
## 
## [[3]]
##  [1] "Questions"            "600"                  "601"                 
##  [4] "602"                  "603"                  "604"                 
##  [7] "605"                  "606"                  "607"                 
## [10] "608"                  "611"                  "612"                 
## [13] "613"                  "614"                  "615"                 
## [16] "616"                  "617"                  "618"                 
## [19] "619"                  "620"                  "621"                 
## [22] "622"                  "676"                  "Per_Question_Average"
## [25] "Skills"              
## 
## [[4]]
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
## 
## [[5]]
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
## 
## [[6]]
##  [1] "Questions"            "700"                  "701"                 
##  [4] "702"                  "703"                  "704"                 
##  [7] "705"                  "706"                  "707"                 
## [10] "708"                  "709"                  "710"                 
## [13] "711"                  "712"                  "713"                 
## [16] "714"                  "715"                  "716"                 
## [19] "717"                  "718"                  "719"                 
## [22] "Per_Question_Average"
## 
## [[7]]
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
## 
## [[8]]
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
## 
## [[9]]
##  [1] "Questions"            "800"                  "801"                 
##  [4] "802"                  "803"                  "804"                 
##  [7] "805"                  "806"                  "807"                 
## [10] "808"                  "809"                  "810"                 
## [13] "811"                  "812"                  "813"                 
## [16] "814"                  "815"                  "816"                 
## [19] "817"                  "818"                  "819"                 
## [22] "820"                  "821"                  "822"                 
## [25] "Per_Question_Average"
## Processing benchmark: benchmark_6_1 
## Extracted grade: 6 
## Processing benchmark: benchmark_6_2 
## Extracted grade: 6 
## Processing benchmark: benchmark_6_3 
## Extracted grade: 6 
## Processing benchmark: benchmark_7_1 
## Extracted grade: 7 
## Processing benchmark: benchmark_7_2 
## Extracted grade: 7 
## Processing benchmark: benchmark_7_3 
## Extracted grade: 7 
## Processing benchmark: benchmark_8_1 
## Extracted grade: 8 
## Processing benchmark: benchmark_8_2 
## Extracted grade: 8 
## Processing benchmark: benchmark_8_3 
## Extracted grade: 8
## Combined data frame rows: 243
## # A tibble: 6 × 5
##   Questions Per_Question_Average Benchmark     Grade Benchmark_Number
##       <dbl>                <dbl> <chr>         <dbl>            <dbl>
## 1         1                 42.4 benchmark_6_1     6                1
## 2         2                 46.9 benchmark_6_1     6                1
## 3         3                 24.6 benchmark_6_1     6                1
## 4         4                 40.8 benchmark_6_1     6                1
## 5         5                 41.4 benchmark_6_1     6                1
## 6         6                 25.8 benchmark_6_1     6                1

In this step, I successfully combined the benchmark data for all grades into one data frame, cleaned the data further, and ensured that only valid rows are included for analysis.

  • Each data frame (representing a specific benchmark) was combined into one single combined_benchmarks data frame.

  • Only the Questions and Per_Question_Average columns, which are common across all benchmarks, were selected.

  • A new column Benchmark was added to keep track of the specific benchmark (e.g., “6th Grade Benchmark 1”).

  • Rows with missing (NA) values in the Per_Question_Average column were identified and printed for debugging purposes.

  • 9 rows were found where Per_Question_Average was NA. These rows came from all grades and benchmarks.

  • All rows with NA in Per_Question_Average were removed from the data frame.

  • After removal, the number of rows in combined_benchmarks was reduced to 234.

  • There was a specific issue where “6th Grade Benchmark 3” had extra whitespace. This was cleaned up by renaming the affected rows.

  • The Benchmark column was split into two new columns:

    - Grade: Extracted from the first digit of the benchmark name (e.g., "6" for "6th Grade").
    
    - Benchmark_Number: Extracted from the last digit of the benchmark name (e.g., "1" for "Benchmark 1").
    
    - The original Benchmark column was then dropped.
  • I printed the first few rows of the final cleaned and combined data frame to verify the structure. This shows that the data is now neatly organized with columns for Questions, Per_Question_Average, Grade, and Benchmark_Number, which will allow us to easily analyze trends across different grades and benchmarks.

4.2 Calculating the Performance Growth/Decay:

This step calculates how student performance on individual questions changes (grows or declines) across three benchmarks. It provides insights into whether students are improving or struggling as they progress through the assessments.

The data is grouped by Questions and Grade to calculate performance metrics for each question across the benchmarks.

## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
##   always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## # A tibble: 81 × 7
##    Questions Grade Benchmark_1 Benchmark_2 Benchmark_3 Growth_1_to_2
##        <dbl> <dbl>       <dbl>       <dbl>       <dbl>         <dbl>
##  1         1     6        42.4        81.9        78.3        39.4  
##  2         1     7        17.2        17.9        43           0.630
##  3         1     8        40.1        56.2        76.9        16.1  
##  4         2     6        46.9        51.3        62.4         4.32 
##  5         2     7        32.2        35.3        37.1         3.04 
##  6         2     8        65.8        69.2        88.3         3.31 
##  7         3     6        24.6        37.5        47          12.9  
##  8         3     7        24.3        47.9        79.3        23.6  
##  9         3     8        44.2        62.0        85.5        17.8  
## 10         4     6        40.8        45.3        58.9         4.48 
## # ℹ 71 more rows
## # ℹ 1 more variable: Growth_2_to_3 <dbl>

For each question and grade combination: Benchmark_1, Benchmark_2, and Benchmark_3 represent the average performance (from the Per_Question_Average column) on the first, second, and third benchmarks, respectively.

Growth_1_to_2: The difference between performance on Benchmark 2 and Benchmark 1 (Benchmark_2 - Benchmark_1). Positive values indicate improvement, while negative values show a decline.

Growth_2_to_3: The difference between performance on Benchmark 3 and Benchmark 2 (Benchmark_3 - Benchmark_2), which similarly shows improvement or decline between these benchmarks.

  • For Example:

    Question 1, Grade 6: Performance improved from 42.44 on Benchmark 1 to 81.89 on Benchmark 2 (with a growth of 39.45), but dropped slightly to 78.31 on Benchmark 3 (showing a small decay of -3.58).

    Question 1, Grade 7: There was minimal growth from Benchmark 1 to Benchmark 2 (0.63), but a significant improvement from Benchmark 2 to Benchmark 3 (25.12).

    Question 2, Grade 6: Performance steadily improved across all benchmarks, with positive growth from Benchmark 1 to Benchmark 2 (4.32) and Benchmark 2 to Benchmark 3 (11.18).

Question-Specific Trends: This analysis helps identify specific questions where students are consistently improving or struggling over time. For example, Question 1 in Grade 6 shows strong growth from the first to the second benchmark but a slight decay afterward, suggesting that the topic might need reinforcement before the third benchmark.

Grade-Level Differences: It also highlights differences in performance growth across grades, which can help tailor teaching strategies for different student groups.

4.3 Visualizing the Growth/Decay:

4.3.1 Line Graph:

The line graph visualizes student performance trends across questions for each grade (6th, 7th, and 8th), showing how their average performance changed across the three benchmarks. Here’s a breakdown of the key observations:

  • Red Line (Benchmark 1): Represents the average performance on the first benchmark.

  • Green Line (Benchmark 2): Represents the average performance on the second benchmark.

  • Blue Line (Benchmark 3): Represents the average performance on the third benchmark.

  • In all grades (6th, 7th, and 8th), the blue line (Benchmark 3) is consistently above the green line (Benchmark 2), which in turn is a little above the red line (Benchmark 1). This shows a positive trend, where student performance generally improves from the first to the third benchmark. The steady increase between benchmarks suggests that students are learning and retaining information better over time.

  • 8th Grade: The lines are consistently higher in the 8th-grade graph compared to 6th and 7th grades, indicating that 8th-grade students have a higher average performance overall. This could suggest that older students perform better on the benchmark assessments, potentially due to increased experience or familiarity with the subject matter as they progress through the grades.

  • The lines fluctuate across questions for all grades, following a similar trend. For instance, in 6th grade, between questions 1-5, the lines start high, dip, and then rise again. The fluctuations suggest that certain questions are more difficult for students than others, leading to dips in performance. However, the fact that the lines follow a similar trend across benchmarks indicates that the same questions are challenging throughout, but students show overall improvement on those questions.

The warnings above, which state “Removed 1 row containing missing values or values outside the scale range,” indicate that there is at least one row in your dataset that has NA values or values that fall outside the range of what is being plotted. This can happen if:

Let’s check for outliers:

##    Questions      Grade    Benchmark_1     Benchmark_2     Benchmark_3   
##  Min.   : 1   Min.   :6   Min.   : 8.89   Min.   :17.88   Min.   :24.76  
##  1st Qu.: 7   1st Qu.:6   1st Qu.:27.39   1st Qu.:42.54   1st Qu.:59.04  
##  Median :13   Median :7   Median :35.97   Median :56.00   Median :67.25  
##  Mean   :13   Mean   :7   Mean   :38.15   Mean   :54.39   Mean   :66.83  
##  3rd Qu.:19   3rd Qu.:8   3rd Qu.:46.92   3rd Qu.:67.03   3rd Qu.:79.11  
##  Max.   :25   Max.   :8   Max.   :72.75   Max.   :83.89   Max.   :90.31  
##  NA's   :6                NA's   :3       NA's   :3       NA's   :3      
##  Growth_1_to_2   Growth_2_to_3    
##  Min.   : 0.35   Min.   :-10.080  
##  1st Qu.:10.03   1st Qu.:  7.945  
##  Median :14.90   Median : 11.180  
##  Mean   :16.23   Mean   : 12.439  
##  3rd Qu.:20.16   3rd Qu.: 16.545  
##  Max.   :75.00   Max.   : 37.800  
##  NA's   :3       NA's   :3

There is no outlier in benchmark 1 and the distribution is normal, which suggests that Benchmark_1 scores are fairly normally distributed.

  • 1st Quartile (Q1, 25th percentile): Around 27.39, meaning 25% of students scored below this.

  • Median (50th percentile): The median score is approximately 35.97, showing that half of the students scored below this.

  • 3rd Quartile (Q3, 75th percentile): Around 46.92, indicating that 75% of students scored below this value.

  • Interquartile Range (IQR): The range between the 1st and 3rd quartiles shows the spread of the middle 50% of the data, which spans from about 27 to 47.

Let’s check for missing values in the new dataset we created for analysis:

## # A tibble: 3 × 7
##   Questions Grade Benchmark_1 Benchmark_2 Benchmark_3 Growth_1_to_2
##       <dbl> <dbl>       <dbl>       <dbl>       <dbl>         <dbl>
## 1        NA     6          NA          NA          NA            NA
## 2        NA     7          NA          NA          NA            NA
## 3        NA     8          NA          NA          NA            NA
## # ℹ 1 more variable: Growth_2_to_3 <dbl>

The output of your missing values check indicates that there are no missing values in the Benchmark_1, Benchmark_2, or Benchmark_3 columns. This confirms that the dataset is complete with respect to these three columns, and we can proceed confidently without having to worry about missing data affecting our analysis of growth.

4.3.2 Bar Plot:

The bar plots provide a clear visual representation of growth trends between the benchmarks for each question,

  • Growth 2 to 3 (Blue) vs Growth 1 to 2 (Red) (for example question 15 for 6th grade): Most questions show positive growth between the second and third benchmarks (blue bars on the bottom), followed by positive growth between the first and second benchmarks (red bars on top). This suggests that students improved consistently from the first benchmark to the third.

  • Only Blue Bars (question 5 for 8th grade): Some questions have only blue bars (Growth 2 to 3) with no red bars (Growth 1 to 2). This indicates that these questions showed improvement only between the second and third benchmarks, but not between the first and second benchmarks. This could imply that students initially struggled with these questions but eventually caught up later in the year.

  • Negative Growth (Blue Bars Below Zero) (questions 1 and 25 in 6th grade): two questions have blue bars below zero, meaning that there was a decline in performance between the second and third benchmarks. However, red bars (Growth 1 to 2) for these questions are still positive, suggesting an initial improvement that later decayed.

Possible Interpretations:

  • Consistent Growth: The majority of questions show steady improvement across all benchmarks, which indicates successful teaching strategies and student learning progress.

  • Late Improvement: The questions with only blue bars (Growth 2 to 3) may have required additional reinforcement or reteaching between the second and third benchmarks.

  • Challenges in Later Benchmarks: The questions with negative blue bars (Growth 2 to 3) suggest that students either found the content more challenging during later assessments or there may have been external factors affecting their performance on these questions.

4.3.3 Create an Interactive Table:

The interactive table allows us to dynamically explore the data by filtering, sorting, and searching through the various columns. Here’s what you’re seeing in the output:

Key Columns:

  • Questions: The question number (from 1 to 25).

  • Grade: The grade level (6, 7, or 8).

  • Benchmark_1, Benchmark_2, Benchmark_3: These columns display the average scores for each question in the respective benchmark assessments.

  • Growth_1_to_2: The difference in performance between Benchmark 1 and Benchmark 2 (positive values indicate improvement).

  • Growth_2_to_3: The difference in performance between Benchmark 2 and Benchmark 3 (positive values indicate improvement, and negative values indicate a drop in performance).

Insights of the above table:

  • Interactive Filtering: You can quickly filter for a specific grade, question, or benchmarks to focus on areas that require attention (e.g., negative growth or large performance changes).

  • Dynamic Sorting: Sorting the table by Growth_1_to_2 or Growth_2_to_3 will help identify the highest and lowest growth questions, making it easier to pinpoint which areas need reteaching or reinforcement.

This table enhances the ability to drill down into specific performance trends and helps guide instructional decisions.

4.3.4 Creating a Suggestion Table:

This step involves creating a suggestion table based on students’ performance across the three benchmarks, which helps identify areas for intervention and improvement. Here’s an interpretation of the analysis:

  • The suggestions are derived from the following criteria:

Struggling Students: If the score on Benchmark 3 is below 40, it indicates that students are struggling with that particular question. This suggests the need for more focused practice or instruction to help them improve.

Growth Indicated: If there is a growth of 10 points or more from Benchmark 1 to Benchmark 3, it indicates that students are showing significant improvement on that question. This is a positive outcome and may suggest that previous teaching methods or interventions were effective.

No Significant Change: For questions where the performance does not fit into either of the above categories, the suggestion states “No significant change.” This implies that students’ performance has remained stable, but it might also indicate that no further action is needed unless the scores are deemed unsatisfactory.

Question Performance and Suggestions by Grade
Grade Questions Benchmark_1 Benchmark_2 Benchmark_3 Suggestion
6 1 42.44 81.89 78.31 Students show growth on this question.
7 1 17.25 17.88 43.00 Students show growth on this question.
8 1 40.10 56.18 76.92 Students show growth on this question.
6 2 46.94 51.26 62.44 Students show growth on this question.
7 2 32.25 35.29 37.12 Students are struggling, they need more practice on this question.
8 2 65.85 69.16 88.31 Students show growth on this question.
6 3 24.61 37.53 47.00 Students show growth on this question.
7 3 24.34 47.94 79.29 Students show growth on this question.
8 3 44.20 61.99 85.54 Students show growth on this question.
6 4 40.78 45.26 58.88 Students show growth on this question.
7 4 28.65 48.82 59.53 Students show growth on this question.
8 4 29.25 43.28 81.08 Students show growth on this question.
6 5 41.44 57.58 63.19 Students show growth on this question.
7 5 28.95 38.06 49.53 Students show growth on this question.
8 5 66.25 74.94 87.77 Students show growth on this question.
6 6 25.83 28.16 43.19 Students show growth on this question.
7 6 22.77 38.71 56.00 Students show growth on this question.
8 6 67.90 78.76 86.54 Students show growth on this question.
6 7 59.00 79.11 82.19 Students show growth on this question.
7 7 36.59 61.71 70.47 Students show growth on this question.
8 7 31.75 50.74 75.85 Students show growth on this question.
6 8 31.94 33.11 42.88 Students show growth on this question.
7 8 31.14 42.47 52.59 Students show growth on this question.
8 8 68.65 78.27 85.92 Students show growth on this question.
6 9 44.11 58.68 67.31 Students show growth on this question.
7 9 21.53 28.18 45.06 Students show growth on this question.
8 9 43.00 58.16 75.23 Students show growth on this question.
6 10 35.11 48.74 57.12 Students show growth on this question.
7 10 40.17 64.06 75.24 Students show growth on this question.
8 10 47.45 63.21 72.77 Students show growth on this question.
6 11 23.17 27.53 40.56 Students show growth on this question.
7 11 17.74 42.76 63.53 Students show growth on this question.
8 11 49.70 68.84 88.85 Students show growth on this question.
6 12 20.83 31.42 38.38 Students are struggling, they need more practice on this question.
7 12 26.11 40.00 49.65 Students show growth on this question.
8 12 25.25 33.92 65.85 Students show growth on this question.
6 13 46.94 54.00 63.12 Students show growth on this question.
7 13 32.63 46.00 60.82 Students show growth on this question.
8 13 66.60 77.74 84.46 Students show growth on this question.
6 14 53.11 70.26 77.25 Students show growth on this question.
7 14 48.90 81.65 84.06 Students show growth on this question.
8 14 69.90 82.46 90.31 Students show growth on this question.
6 15 36.33 57.74 66.38 Students show growth on this question.
7 15 18.57 20.24 24.76 Students are struggling, they need more practice on this question.
8 15 52.20 67.54 85.31 Students show growth on this question.
6 16 35.11 62.58 67.19 Students show growth on this question.
7 16 46.88 62.18 79.29 Students show growth on this question.
8 16 58.25 71.58 77.38 Students show growth on this question.
6 17 32.83 45.58 61.12 Students show growth on this question.
7 17 30.36 57.71 65.94 Students show growth on this question.
8 17 53.35 62.52 77.77 Students show growth on this question.
6 18 41.06 62.26 69.69 Students show growth on this question.
7 18 24.29 38.12 69.82 Students show growth on this question.
8 18 67.35 81.41 82.69 Students show growth on this question.
6 19 22.72 39.42 52.69 Students show growth on this question.
7 19 30.79 46.41 66.47 Students show growth on this question.
8 19 72.75 82.59 87.62 Students show growth on this question.
6 20 29.72 58.68 66.44 Students show growth on this question.
7 20 28.58 31.76 46.29 Students show growth on this question.
8 20 49.95 69.82 82.31 Students show growth on this question.
6 21 36.28 54.89 64.38 Students show growth on this question.
7 21 45.01 69.29 80.18 Students show growth on this question.
8 21 40.55 65.12 78.46 Students show growth on this question.
6 22 8.94 50.05 63.62 Students show growth on this question.
7 22 20.72 33.29 44.18 Students show growth on this question.
8 22 35.65 49.26 67.77 Students show growth on this question.
6 23 18.00 27.47 39.56 Students are struggling, they need more practice on this question.
7 23 27.00 27.35 42.12 Students show growth on this question.
8 23 37.70 69.14 80.46 Students show growth on this question.
6 24 31.44 55.26 60.31 Students show growth on this question.
7 24 26.45 57.06 67.18 Students show growth on this question.
8 24 46.05 67.51 76.85 Students show growth on this question.
6 25 8.89 83.89 73.81 Students show growth on this question.
7 25 42.48 61.65 79.35 Students show growth on this question.
8 25 44.15 55.82 73.38 Students show growth on this question.
6 NA 33.50 50.13 60.28 Students show growth on this question.
6 NA NA NA NA No significant change.
7 NA 30.01 45.54 59.66 Students show growth on this question.
7 NA NA NA NA No significant change.
8 NA 50.95 65.60 78.56 Students show growth on this question.
8 NA NA NA NA No significant change.

This suggestion table serves as a valuable tool for educators to identify areas of struggle and growth, guiding their instructional strategies effectively. It highlights the importance of data-driven decision-making in education, helping to ensure that students receive the support they need to succeed.