## Week 7 Homework ##

#Clear work space
rm(list=ls(all=TRUE))

#Set Working Directory
setwd("C:/Users/kylee/OneDrive/Desktop/304C")

#Load packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(ggplot2)

#Read data
data <-read.csv("HW7_data.SPRING2025.csv")

#view column names
colnames(data)
## [1] "setup"                   "paraffin.mass.initial.g"
## [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
## [5] "beaker.mass.filled.g"    "temp.initial.C"         
## [7] "temp.final.C"
#mutate the data to create a new column for the absolute value of the change in paraffin mass, using the variable name 'delta.paraffin.mass.g'
data <- data |> mutate(delta.paraffin.mass.g = abs(paraffin.mass.final.g - paraffin.mass.initial.g))

#mutate the data to create a new column for the water mass in the beaker, using the variable name 'water.mass.g'
data <- data |> mutate(water.mass.g = beaker.mass.filled.g - beaker.mass.empty.g)

#mutate the data to create a new column for the change in temperature, using the variable name 'delta.temp.C'
data <- data |> mutate(delta.temp.C = temp.final.C - temp.initial.C)

#view column names
colnames(data)
##  [1] "setup"                   "paraffin.mass.initial.g"
##  [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
##  [5] "beaker.mass.filled.g"    "temp.initial.C"         
##  [7] "temp.final.C"            "delta.paraffin.mass.g"  
##  [9] "water.mass.g"            "delta.temp.C"
#mutate the data to create a new column for the amount of energy added to the water, using the variable name 'added.energy.kJ'
  #To find the amount of added energy, use the equation: added energy(kJ)=water mass(g)*change in temperature(C)*specific heat of water(kJ/g*C)
  #Use 0.00418 (kJ/g*C) for the specific heat of water
data <- data |> mutate(added.energy.kJ = water.mass.g * delta.temp.C * 0.00418)

#mutate the data to create a new column for the observed paraffin energy density, using the variable name 'energy.density.kJ_g'
  #To find the energy density, use the equation: energy density (kJ/g) = added energy (kJ) / change in paraffin mass (g)
data <- data |> mutate(energy.density.kJ_g = added.energy.kJ / delta.paraffin.mass.g)

#view column names
colnames(data)
##  [1] "setup"                   "paraffin.mass.initial.g"
##  [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
##  [5] "beaker.mass.filled.g"    "temp.initial.C"         
##  [7] "temp.final.C"            "delta.paraffin.mass.g"  
##  [9] "water.mass.g"            "delta.temp.C"           
## [11] "added.energy.kJ"         "energy.density.kJ_g"
#create summary statistics table for observed energy density (kJ/g) grouped by setup (initial vs. modified)
Energy.Density <- data |> group_by(setup) |> summarise(mean = mean(energy.density.kJ_g) 
                                                          ,sd = sd(energy.density.kJ_g)
                                                          ,min = min(energy.density.kJ_g)
                                                          ,max = max(energy.density.kJ_g))

#view summary statistics table
Energy.Density
## # A tibble: 2 × 5
##   setup     mean    sd   min   max
##   <chr>    <dbl> <dbl> <dbl> <dbl>
## 1 Initial   13.2  2.84  4.24  22.4
## 2 Modified  18.9 17.4   9.31 101.
#view column names
colnames(data)
##  [1] "setup"                   "paraffin.mass.initial.g"
##  [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
##  [5] "beaker.mass.filled.g"    "temp.initial.C"         
##  [7] "temp.final.C"            "delta.paraffin.mass.g"  
##  [9] "water.mass.g"            "delta.temp.C"           
## [11] "added.energy.kJ"         "energy.density.kJ_g"
#conduct a t-test comparing the observed energy density (kJ/g) between the initial and modified set up
  #Hint:(Numeric variable ~ Grouping variable, data = dataset)
t.test(energy.density.kJ_g ~ setup, data = data)
## 
##  Welch Two Sample t-test
## 
## data:  energy.density.kJ_g by setup
## t = -1.7289, df = 28.441, p-value = 0.09467
## alternative hypothesis: true difference in means between group Initial and group Modified is not equal to 0
## 95 percent confidence interval:
##  -12.560544   1.058042
## sample estimates:
##  mean in group Initial mean in group Modified 
##               13.16991               18.92116
#view column names
colnames(data)
##  [1] "setup"                   "paraffin.mass.initial.g"
##  [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
##  [5] "beaker.mass.filled.g"    "temp.initial.C"         
##  [7] "temp.final.C"            "delta.paraffin.mass.g"  
##  [9] "water.mass.g"            "delta.temp.C"           
## [11] "added.energy.kJ"         "energy.density.kJ_g"
#mutate the data to create a new column for the percent error in observed paraffin energy density, using the variable name 'percent.error'
  #To find the percent error, use the equation: error (%) = ((absolute value(observed value - expected value)) / expected value) * 100% 
data <- data |> mutate(percent.error = ((abs(energy.density.kJ_g - 42))/42)*100)

#view column names
colnames(data)
##  [1] "setup"                   "paraffin.mass.initial.g"
##  [3] "paraffin.mass.final.g"   "beaker.mass.empty.g"    
##  [5] "beaker.mass.filled.g"    "temp.initial.C"         
##  [7] "temp.final.C"            "delta.paraffin.mass.g"  
##  [9] "water.mass.g"            "delta.temp.C"           
## [11] "added.energy.kJ"         "energy.density.kJ_g"    
## [13] "percent.error"
#create a summary statistics table for percent error grouped by setup (initial vs. modified)
Percent.Error <- data |> group_by(setup) |> summarise(mean = mean(percent.error) 
                                                             ,sd = sd(percent.error)
                                                             ,min = min(percent.error)
                                                             ,max = max(percent.error))

#view summary statistics table
Percent.Error
## # A tibble: 2 × 5
##   setup     mean    sd   min   max
##   <chr>    <dbl> <dbl> <dbl> <dbl>
## 1 Initial   68.6  6.76  46.8  89.9
## 2 Modified  66.0 18.1   15.3 139.
#create a boxplot showing the observed energy density of the two experimental setups
  #Hint: x is a grouping variable
energy.density.graph <- ggplot(data, aes(x=setup, y=energy.density.kJ_g))+
  geom_boxplot(outliers = F)+
  geom_hline(yintercept = 42, color="red", linetype="dashed")+
  labs(x=NULL, y= "Paraffin Energy Density (kJ/g)", title = "Paraffin Energy Density in Initial and Modified Setups")+
  labs(caption = str_wrap("This graph shows a comparison between the intital and modified setups for the observed paraffin energy density which were conducted in a t-test.The expected paraffin energy density is shown for reference as the red dashed line."
                          , width = 130))+
  theme(plot.caption = element_text(hjust = 0.5), plot.caption.position = "plot")

#view graph
energy.density.graph

#save graph
ggsave("HW7.graph.jpg",energy.density.graph,width=8,height=6)