sliding_window: Expand time data series with a sliding window

Description Usage Arguments Details Value See Also Examples

View source: R/sliding_window.R

Description

This function allows to expand the time data series to include adjacent time steps and days, using a sliding window. The procedure is used to shift the variable generation time series, so calculations are not limited to the observed load and variable generation pairs. The objective is to further explore how the variable behaviour of these generators affect reliability calculations.

Usage

1
2
sliding_window(time.data, win.h.size = NULL, win.h.weight = NULL,
  win.d.size = NULL, win.d.weight = NULL)

Arguments

time.data

Time series data formatted with format_timedata

win.h.size

Vector to determine the size of the window for adjacent time steps

win.h.weight

Weights associated with adjacent hours

win.d.size

Vector to determine the size of the window for adjacent days

win.d.weight

Weights associated with adjacent days

Details

The sliding window can include adjacent time steps (typically adjacent hours) and/or adjacent days. Table 1 shows and example, with the current hour being hour 6 in day 5. If an hour is withing the extent of the sliding window it is marked with an x.

Table 1: Example of sliding window

H1 H2 H3 H4 H5 H6 H7 H8 H9 H10
Day 1
Day 2
Day 3 x x x x x x x
Day 4 x x x x x x x
Day 5 x x x Current x x x
Day 6 x x x x x x x
Day 7 x x x x x x x
Day 8
Day 9

win.h.size determines how many adjacent time steps are included in the sliding window. By default, the window only includes the current hour. If specified, win.h.size must be a numeric vector with 2 values.

Similarly, win.d.size determines how many adjacent days are used in the window and defaults to the current day. If defined, it must be a vector with 2 integers.

For example, to reproduce the window in Table 1 set:

By default, all the data points in the sliding window are given the same probability in the calculations. It is possible to provide different weights to adjacent hours and adjacent days. This is achieved by using the wind.h.weight and wind.d.weight parameters, respectively. The lengths of these needs to be consistent with the corresponding sizes parameters. Table 2 shows an example of how the final weights are calculated, by setting:

Figure 2: Example of sliding window with different weights

H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 Day weight
Day 1
Day 2
Day 3 0.01 0.01 0.02 0.02 0.02 0.01 0.01 0.1
Day 4 0.02 0.02 0.04 0.04 0.04 0.02 0.02 0.2
Day 5 0.04 0.04 0.08 0.08 0.08 0.04 0.04 0.4
Day 6 0.02 0.02 0.04 0.04 0.04 0.02 0.02 0.2
Day 7 0.01 0.01 0.02 0.02 0.02 0.01 0.01 0.1
Day 8
Day 9
Hour weight 0.1 0.1 0.2 0.2 0.2 0.1 0.1

Use of a sliding window is currently an open area of research. The authors suggest to use it as a sensitivitiy tool, especially when only a few years of data is available. Special care should be taken with solar data. Because of its daily pattern, a window with too many adjacent hours could return erroneous results.

A vignette in the package presents some additional examples and graphs for the use of this function. It can be accessed with browseVignettes("sliding_window").

Value

An expanded data frame with the same format as data.time, but with a sliding window applied to the variable generation columns

See Also

format_timedata to create the time.data object

This function is called from calculate_metrics and calculate_elcc

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Create time data object
tdata <- data.frame(Area = c(rep("A", 48), rep("B", 48)),
                    Time = 1:48,
                    Load = c(runif(48, 200, 250), runif(48, 400, 450)),
                    Wind = c(runif(48, 20, 25), runif(48, 40, 45)))
td <- format_timedata(tdata)
head(td)

# If no data is provided, results remain intact
td2 <- sliding_window(td)

# Expand data for adjacent time steps (with equal and different weights)
td3 <- sliding_window(td, win.h.size = c(-1, 1))
td4 <- sliding_window(td, win.h.size = c(-1, 1), win.h.weight = c(1, 2, 1))

# Expand data for ajdacent days
td5 <- sliding_window(td, win.d.size = c(0, 1))

# Expand data for both adjacent times and days
td6 <- sliding_window(td, win.h.size = c(-1, 1), win.d.size = c(0, 1))

NREL/repra documentation built on May 7, 2019, 6:03 p.m.