written narrative

By Tenzin Dhondup, Nimo Hassan, Breanna Ranglall, Alexander Wodarski

For our final project in DASC 130, we partnered with the Office of Sustainability Initiatives (OSI) to explore key sustainability credit areas. Our group focused on OP-18: Waste Minimization and Diversion, which evaluates waste reduction efforts in higher education institutions. We chose this area because we were interested in seeing how the University of St. Thomas performs in waste management compared to other Minnesota peer institutions, especially given the university’s investments in sustainability initiatives.

To conduct our analysis, we used the AASHE STARS platform—a comprehensive tool that provides transparent and standardized metrics for assessing sustainability performance across colleges and universities. Through this platform, we examined changes in waste minimization over time and evaluated how St. Thomas measures up against its peers. Our findings are presented in a visually engaging and reproducible format, offering actionable insights into sustainability efforts at St. Thomas and beyond.

Data Tidying/Wrangling

# Loading needed libraries 
library(tidyverse)
library(readxl)
library(dplyr)
  • Read data from excel spreadsheets
# Read data from excel spreadsheet

dataf <- read_excel("OP-18_Waste_Minimization_and_Diversion_2024.xlsx")
pop_data <- read.csv("updated_school_population.csv")
  • Converting ‘chr’ to ‘numeric’
dataframe <- dataf

# Converting 'chr' to 'numeric'

dataframe$'Materials recycled, performance year' <- as.numeric(dataframe$'Materials recycled, performance year')
dataframe$'Materials recycled, baseline year' <- as.numeric(dataframe$'Materials recycled, baseline year')
dataframe$'Materials composted, performance year' <- as.numeric(dataframe$'Materials composted, performance year')
dataframe$'Materials composted, baseline year' <- as.numeric(dataframe$'Materials composted, baseline year')
dataframe$'Materials donated or re-sold, performance year' <- as.numeric(dataframe$'Materials donated or re-sold, performance year')
dataframe$'Materials donated or re-sold, baseline year' <- as.numeric(dataframe$'Materials donated or re-sold, baseline year')
dataframe$'Materials disposed through post-recycling residual conversion, performance year' <- as.numeric(dataframe$'Materials disposed through post-recycling residual conversion, performance year')
dataframe$'Materials disposed through post-recycling residual conversion, baseline year' <- as.numeric(dataframe$'Materials disposed through post-recycling residual conversion, baseline year')
dataframe$'Materials disposed in a solid waste landfill or incinerator, performance year' <- as.numeric(dataframe$'Materials disposed in a solid waste landfill or incinerator, performance year')
dataframe$'Materials disposed in a solid waste landfill or incinerator, baseline year' <- as.numeric(dataframe$'Materials disposed in a solid waste landfill or incinerator, baseline year')
dataframe$'Total waste generated, performance year' <- as.numeric(dataframe$'Total waste generated, performance year')
dataframe$'Total waste generated, baseline year' <- as.numeric(dataframe$'Total waste generated, baseline year')
dataframe$'Start date, performance year or 3-year period' <- as.numeric(dataframe$'Start date, performance year or 3-year period')
dataframe$'End date, performance year or 3-year period' <- as.numeric(dataframe$'End date, performance year or 3-year period')
dataframe$'Start date, baseline year or 3-year period' <- as.numeric(dataframe$'Start date, baseline year or 3-year period')
dataframe$'End date, baseline year or 3-year period' <- as.numeric(dataframe$'End date, baseline year or 3-year period')
dataframe$'Number of students resident on-site, performance year' <- as.numeric(dataframe$'Number of students resident on-site, performance year')
dataframe$'Number of students resident on-site, baseline year' <- as.numeric(dataframe$'Number of students resident on-site, baseline year')
dataframe$'Number of employees resident on-site, performance year' <- as.numeric(dataframe$'Number of employees resident on-site, performance year')
dataframe$'Number of employees resident on-site, baseline year' <- as.numeric(dataframe$'Number of employees resident on-site, baseline year')
dataframe$'Number of other individuals resident on-site, performance year' <- as.numeric(dataframe$'Number of other individuals resident on-site, performance year')
dataframe$'Number of other individuals resident on-site, baseline year' <- as.numeric(dataframe$'Number of other individuals resident on-site, baseline year')
dataframe$'Total full-time equivalent student enrollment, performance year' <- as.numeric(dataframe$'Total full-time equivalent student enrollment, performance year')
dataframe$'Total full-time equivalent student enrollment, baseline year' <- as.numeric(dataframe$'Total full-time equivalent student enrollment, baseline year')
dataframe$'Full-time equivalent of employees, performance year' <- as.numeric(dataframe$'Full-time equivalent of employees, performance year')
dataframe$'Full-time equivalent of employees, baseline year' <- as.numeric(dataframe$'Full-time equivalent of employees, baseline year')
dataframe$'Full-time equivalent of students enrolled in exclusively in distance education, performance year' <- as.numeric(dataframe$'Full-time equivalent of students enrolled in exclusively in distance education, performance year')
dataframe$'Full-time equivalent of students enrolled exclusively in distance education, baseline year' <- as.numeric(dataframe$'Full-time equivalent of students enrolled exclusively in distance education, baseline year')
dataframe$'Weighted campus users, performance year' <- as.numeric(dataframe$'Weighted campus users, performance year')
dataframe$'Weighted campus users, baseline year' <- as.numeric(dataframe$'Weighted campus users, baseline year')
dataframe$'Total waste generated per weighted campus user, performance year' <- as.numeric(dataframe$'Total waste generated per weighted campus user, performance year')
dataframe$'Total waste generated per weighted campus user, baseline year' <- as.numeric(dataframe$'Total waste generated per weighted campus user, baseline year')
dataframe$'Weighted campus users, performance year' <- as.numeric(dataframe$'Weighted campus users, performance year')
dataframe$'Weighted campus users, baseline year' <- as.numeric(dataframe$'Weighted campus users, baseline year')
dataframe$'Percentage reduction in total waste generated per weighted campus user from baseline' <- as.numeric(dataframe$'Percentage reduction in total waste generated per weighted campus user from baseline')
dataframe$'Percentage of materials diverted from the landfill or incinerator by recycling, composting, ...' <- as.numeric(dataframe$'Percentage of materials diverted from the landfill or incinerator by recycling, composting, ...')
dataframe$'Percentage of materials diverted from the landfill or incinerator (including up to 10 percent ...' <- as.numeric(dataframe$'Percentage of materials diverted from the landfill or incinerator (including up to 10 percent ...')
# Replace the single NA with 0
# Replace NA values with 0 for the specified columns
dataframe$`Total waste generated, baseline year`[is.na(dataframe$`Total waste generated, baseline year`)] <- 0
dataframe$`Weighted campus users, baseline year`[is.na(dataframe$`Weighted campus users, baseline year`)] <- 0
dataframe$`Total waste generated, performance year`[is.na(dataframe$`Total waste generated, performance year`)] <- 0
dataframe$`Weighted campus users, performance year`[is.na(dataframe$`Weighted campus users, performance year`)] <- 0
dataframe$`Materials recycled, performance year`[is.na(dataframe$`Materials recycled, performance year`)] <- 0
dataframe$`Materials composted, performance year`[is.na(dataframe$`Materials composted, performance year`)] <- 0
dataframe$`Materials donated or re-sold, performance year`[is.na(dataframe$`Materials donated or re-sold, performance year`)] <- 0
dataframe$`Materials disposed in a solid waste landfill or incinerator, performance year`[is.na(dataframe$`Materials disposed in a solid waste landfill or incinerator, performance year`)] <- 0
  • Rename some Universities
pop_data$Institution[pop_data$Institution == "University of Minnesota Twin Cities"] <- "University of Minnesota, Twin Cities"
pop_data$Institution[pop_data$Institution == "University of Minnesota Crookston"] <- "University of Minnesota, Crookston"
pop_data$Institution[pop_data$Institution == "University of Minnesota Morris"] <- "University of Minnesota, Morris"
  • Converting ‘chr’ to ‘date’
dataframe$'Last Updated' <- as.Date(dataframe$'Last Updated')
dataframe$'Start date, performance year or 3-year period' <- as.Date(dataframe$'Start date, performance year or 3-year period', origin = "1899-12-30")
dataframe$'End date, performance year or 3-year period' <- as.Date(dataframe$'End date, performance year or 3-year period', origin = "1899-12-30")
dataframe$'Start date, baseline year or 3-year period' <- as.Date(dataframe$'Start date, baseline year or 3-year period', origin = "1899-12-30")
dataframe$'End date, baseline year or 3-year period' <- as.Date(dataframe$'End date, baseline year or 3-year period', origin = "1899-12-30")
pop_data$Undergraduate.Population <- as.numeric(pop_data$Undergraduate.Population)
  • Combine Both Spreadsheets
peer_schools <- c("Iowa State University", "University of Minnesota, Twin Cities", "University of St. Thomas", 
                  "Macalester College", "Gustavus Adolphus College", "University of Wisconsin-Madison", 
                  "Marquette University", "University of Wisconsin-Eau Claire", 
                  "University of Wisconsin-Green Bay", "University of Wisconsin-Oshkosh", 
                  "University of Wisconsin-Platteville", "University of Wisconsin-Stevens Point", 
                  "University of Wisconsin-River Falls", "University of Minnesota, Morris", 
                  "University of Minnesota, Crookston","Concordia University",
                  "Carleton College", "South Dakota State University", 
                  "University of South Dakota")
schools_to_exclude <- c("Marquette University", "University of Wisconsin-Green Bay", "University of Minnesota, Crookston")
peers <-  dataframe|>
  filter(Institution %in% peer_schools)|>
  left_join(pop_data,by = "Institution")|>
  filter(Undergraduate.Population<11000)|>
  filter(!Institution %in% schools_to_exclude)|>
  mutate(
  `Reduction in Total Waste per Person` = 5 * (
    (
      (`Total waste generated, baseline year` / `Weighted campus users, baseline year`) - 
      (`Total waste generated, performance year` / `Weighted campus users, performance year`)
    ) / 
    (`Total waste generated, baseline year` / `Weighted campus users, baseline year`)
  ),
  
  `Total waste per person` = 2.78 * (
    (
      0.46 - 
      (`Total waste generated, performance year` / `Weighted campus users, performance year`) / 0.46
    )
  ),
  
  `Waste diverted from the landfill or incinerator` = 3 * (
    (
      (
        `Materials recycled, performance year` + 
        `Materials composted, performance year` + 
        `Materials donated or re-sold, performance year` +
        (0.1 * (
          `Materials recycled, performance year` + 
          `Materials composted, performance year` + 
          `Materials donated or re-sold, performance year` + 
          `Materials disposed in a solid waste landfill or incinerator, performance year`
        ))
      ) / 
      (
        `Materials recycled, performance year` + 
        `Materials composted, performance year` + 
        `Materials donated or re-sold, performance year` + 
        `Materials disposed in a solid waste landfill or incinerator, performance year`
      )
    )
  )
)

Summary Statistics

While analyzing Minnesota peer institutions, we noticed that there weren’t many schools to compare. To expand our analysis, we included schools from North Dakota, South Dakota, Iowa, and Wisconsin, creating a broader dataset. We compiled a new CSV file with these schools, including their undergraduate populations, and filtered the data accordingly. To address outliers, we excluded any schools with undergraduate populations over 11,000. Additionally, we filtered out schools that did not report data or lacked sufficient information to calculate their scores, placing them on an exclusion list. Finally, we calculated the scores using equations from the AASHE STARS website. This required some adjustments, such as replacing NA values with 0, to ensure that each institution generated a score.

When looking at the summary statistics, an important thing to note is that all variables are measured in tons. We see that on average the schools in Iowa, Minnesota, South Dakota, and Wisconsin, within our undergraduate population range, dispose of 587 tons of solid waste in landfills, compared to just recycling 278 tons of waste. With that number being about double, these schools could improve their efforts to recycle more, in order to be a more sustainable institution.
numeric_summary <- peers |>
  summarize(across(where(is.numeric), list(
    mean = ~ mean(.x, na.rm = TRUE),
    median = ~ median(.x, na.rm = TRUE),
    sd = ~ sd(.x, na.rm = TRUE),
    min = ~ min(.x, na.rm = TRUE),
    max = ~ max(.x, na.rm = TRUE)
  )))
View(peers)
library(dplyr)
library(tidyr)


summarydata <- data.frame(
  Material = rep(c(
    "Materials recycled",
    "Materials composted",
    "Materials donated or re-sold",
    "Materials disposed through post-recycling residual conversion",
    "Materials disposed in a solid waste landfill or incinerator"
  ), each = 10),
  Year_Type = rep(c(
    "Performance Year", "Baseline Year"
  ), times = 5),
  Metric = rep(c("mean", "median", "sd", "min", "max"), times = 10),
  Value = c(
    2.2, 2.2, 2.2, 0, 2.2,
    278.7805, 256.3863, 183.5492, 41.03, 773.5,
    307.247, 318, 172.3574, 22.45, 531.64,
    77.07808, 67.4, 58.18791, 0, 188,
    95.93739, 67.55, 77.5185, 7, 185.6,
    34.03183, 6.6, 50.33896, 0, 134.7,
    105.936, 73.55, 87.61951, 35.6, 257,
    NA, NA, NA, Inf, -Inf,
    NA, NA, NA, Inf, -Inf,
    587.6389, 422, 417.0653, 104, 1534.84
  )
)


organizedSummary <- summarydata|>
  pivot_wider(
    names_from = Metric,
    values_from = Value
  ) |>
  arrange(Material, Year_Type)


view(organizedSummary)

Data Visuilzations