knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Background

Snow loads have long been a primary design consideration for roofs, but little work has been done to determine the unique interactions of snow and solar panels. It is crucial that solar panels in many portions of the United States be built to withstand severe winter weather. A combination of tilting angles and the insulating property of solar panels ensures that snow is melted off panels within days. This shedding phenomenon limits the amount of time that snow accumulates on the panel, which is a critical structural difference compared to non-slip roofing systems. This shedding phenomenon of snow on panels motivates the need for a method to mimic and analyze snow measurements as though it felt on a solar panel. The rdailychange package provides a way to extract daily sequential changes, fit, and estimate ground snow load mean recurrence intervals (MRIs) for any weather station across the United States. The DAY-1 method assumes the shedding phenomenon of solar panels occurs daily, as such observations are daily sequential changes. On the other hand, DAY-2, DAY-3, DAY-4, and DAY-5 method assume snow shedding occurs after two, three, fourth, and fifth day of continuous snow accumulation. A simple demonstration of the workflow underlying estimating MRI values from single and multiple-day snow accumulations is provided in this vignette for the 100 randomly selected First-order stations (FOS). The package README also demonstrates this workflow by estimating MRI values for 7 FOS weather stations.


Data

The daily snow water equivalent of measurement stations used in this analysis was collected from the National Oceanic and Atmospheric Administration’s (NOAA) Global Historical Climatology Network using the snowload2 package. The data analysis will focus on snow water equivalent (SWE) for 100 National Weather Service First Order Stations (FOS) from October 1, 1950, to June 30, 2020, for a total of 70 snow seasons. Note that not all stations will have a total of 70 snow seasons. The data is included in the package and can be accessed with the commands

library(rdailychange)
data("snow_daily")
head(snow_daily)

The following figure shows the locations of the 100 stations on a US map. The code for this map makes use of the ggplot2, sf, and dplyr package.

library(ggplot2)
library(usmap)
library(dplyr)
library(maptools)


df = distinct(snow_daily, ID, .keep_all = TRUE) %>%
  select(LONGITUDE, LATITUDE)


transformed_data <- usmap_transform(df)

plot_usmap("states") + 
  geom_point(data = transformed_data, 
             aes(x = LONGITUDE.1, y = LATITUDE.1), 
             color = "red",
             size = 2)

Extract Day-X Observations

Our goal is to mimic the snow shedding phenomenon on solar panel across the United States. Doing so allows us to compare how sensitive are MRI values from a single day to multiple day accumulation. The first step in the workflow is to extract the single and multiple-day observations. Using the extract_observations() function as demonstrated below returns a list of list objects. Each list represents a weather station and within each list is the Day-X observations and the annual maximum snow loads. Note that as we move from a single to multiple day there is a reduction in the number of extracted observations.

# extract single-day observations
d1 = rdailychange::extract_observations(snow_daily, day=1)
d1[[3]][[1]]


# extract Day-2 observations
d2 = rdailychange::extract_observations(snow_daily, day=2)
d2[[3]][[1]]


# extract Day-3 observations
d3 = rdailychange::extract_observations(snow_daily, day=3)
d3[[3]][[1]]

Fit Distributions

Once the observations are extracted, we can now fit a distribution to the observations. The package can fit the Generalized Extreme Value(GEV) or the Generalized Pareto distribution (GP), which are the two main distributions for fitting extreme values. These distributions are preferred because of their ability to better fit extreme values of observations. The return value will include 50-year, 100-year, and 500-year MRI value from the Day-X method along with their ratio with respective to the annual data.

d1_parm_gev = rdailychange::fit_observations(d1, type = "GEV")
d1_parm_gp = rdailychange::fit_observations(d1, type = "GP")
d1_parm_gev[1:5,]
d1_parm_gp[1:5,]
d2_parm_gev = rdailychange::fit_observations(d2, type = "GEV")
d2_parm_gp = rdailychange::fit_observations(d2, type = "GP")
d2_parm_gev[1:5,]
d2_parm_gp[1:5,]
d3_parm_gev = rdailychange::fit_observations(d3, type = "GEV")
d3_parm_gp = rdailychange::fit_observations(d3, type = "GP")
d3_parm_gev[1:5,]
d3_parm_gp[1:5,]

From the above output, we can see that fitting a GEV using a block-maxima approach or a GP using the peak-over-thresholds approach did not significantly change our results.


Visualize MRI Values

In this section of the workflow we will visualize the 50-year MRI and their respective ratio of the solar-specific MRI values to that of the traditional design load standard. The traditional design standard MRI values are calculated using annual maximum loads. Note that the generic plot() function demonstrated below can be applied to multiple-day objects.

plot(d1_parm_gev, event = 50, annual = FALSE)

The above plot shows that MRI values for low-elevation, mid-latitude locations are 20 or fewer pounds per square foot(psf).

plot(d1_parm_gev, event = 50, annual = TRUE)

From the above figure, we can see that the plot shows lower ratio values for northern stations. As we move towards the country's south, the ratio values increase from 0.2 to about 1. The plot pattern shows that stations farther south have similar short-term maximum snow load MRIs relative to their traditional design snow load standard.




Kinekenneth48/rdailychange documentation built on Dec. 18, 2021, 3:34 a.m.