Final Project Progress Report

I will be working with data from the Cuprapca station.

#dowload data
url <- "https://noaadata.apps.nsidc.org/NOAA/G02141/uni.cuprapca.24768.dat"
download.file(url,destfile='data.dat',method='curl')

cuprapca <- read.table('data.dat',sep="",na.strings="999.99")

#Clean Data
cuprapca_clean <- cuprapca %>%
  select(
    year = V2,
    month = V3,
    latitude= V7,
    longitude =V8,
    temp = V9
  )

cuprapca_clean <- cuprapca_clean %>%
  filter(!is.na(temp))

Prepare data and calculate stats

#Divide data into time periods for analysis

early_data <- cuprapca_clean %>%
  filter(year >= 1961 & year <= 1980)

late_data <- cuprapca_clean %>%
  filter(year >= 1981 & year <= 2000)

full <- cuprapca_clean %>%
  filter(year >= 1961 & year <= 2000)


#Calculate stats

early_stats <- early_data %>%
  group_by(month) %>%
  summarise(
    early_mean = mean(temp),
    early_median = median(temp)
  )

late_stats <- late_data %>%
  group_by(month) %>%
  summarise(
    late_mean = mean(temp),
    late_median = median(temp)
  )

full_stats <- full %>%
  group_by(month) %>%
  summarise(
    full_mean = mean(temp),
    full_median = median(temp),
    sd = sd(temp)
  )

#join all stats into a final table
final_table <- full_stats %>%
  left_join(early_stats, by = "month") %>%
  left_join(late_stats, by = "month")

Plot Montly Mean Temperature

#Montly mean temperature 

bars <- full_stats

# Define ymin
ymin <- floor(min(bars$full_mean, na.rm = TRUE) / 10) * 10

# Shift values so all bars go up
bars_shift <- bars$full_mean - ymin

# Plot
barplot(bars_shift,
        yaxt = "n",
        names.arg = bars$month,
        col = "steelblue",
        main = "Monthly Mean Temperature",
        xlab = "Month",
        ylab = "Temp (°C)")

# Create y-axis labels in original temperature scale
ymax <- ceiling(max(bars$full_mean, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)

axis(2, at = yticks, labels = yticks + ymin)

##Plot Mean vs Median

# Create matrix with mean and median
bars <- cbind(full_stats$full_mean, full_stats$full_median)

# Define ymin
ymin <- floor(min(bars, na.rm = TRUE) / 10) * 10

# Shift values so all bars go upward
bars_shift <- bars - ymin

# Plot side-by-side bars
barplot(t(bars_shift),
        beside = TRUE,
        yaxt = "n",
        names.arg = full_stats$month,
        col = c("steelblue", "orange"),
        main = "Mean vs Median Temperature",
        xlab = "Month",
        ylab = "Temp (°C)")

# Create y-axis labels in original scale
ymax <- ceiling(max(bars, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)

axis(2, at = yticks, labels = yticks + ymin)

# Add legend
legend("topright",
       legend = c("Mean", "Median"),
       fill = c("steelblue", "orange"))

Plot Early vs Late

Early include the years (1961 - 1980) Late include the years (1981 - 2000)

#Early vs Late plot

# Combine early and late means into a matrix
bars <- cbind(early_stats$early_mean, late_stats$late_mean)

# Define ymin 
ymin <- floor(min(bars, na.rm = TRUE) / 10) * 10

# Shift values so all bars go upward
bars_shift <- bars - ymin

# Plot side-by-side bars
barplot(t(bars_shift),
        beside = TRUE,
        yaxt = "n",
        names.arg = early_stats$month,
        col = c("steelblue", "tomato"),
        main = "Early vs Late Temperature Comparison",
        xlab = "Month",
        ylab = "Temp (°C)")

# Create y-axis labels in original scale
ymax <- ceiling(max(bars, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)

axis(2, at = yticks, labels = yticks + ymin)

# Add legend
legend("topright",
       legend = c("1961–1980", "1981–2000"),
       fill = c("steelblue", "tomato"))

Plot Mean and SD

# Mean and sd plot 


bars <- full_stats$full_mean
sd_vals <- full_stats$sd

# Define ymin
ymin <- floor(min(bars - sd_vals, na.rm = TRUE) / 10) * 10

# Shift values
bars_shift <- bars - ymin

# Plot bars
bp <- barplot(bars_shift,
              yaxt = "n",
              names.arg = full_stats$month,
              col = "steelblue",
              main = "Monthly Mean Temperature with SD",
              xlab = "Month",
              ylab = "Temp (°C)")

# Add error bars (SD)
arrows(x0 = bp,
       y0 = (bars - sd_vals) - ymin,
       x1 = bp,
       y1 = (bars + sd_vals) - ymin,
       angle = 90,
       code = 3,
       length = 0.05)

# Create y-axis labels in original scale
ymax <- ceiling(max(bars + sd_vals, na.rm = TRUE) / 10) * 10
yticks <- seq(0, ymax - ymin, by = 5)

axis(2, at = yticks, labels = yticks + ymin)