CaseStudy

Introduction

The fundamental concept behind Regional Frequency Analysis (RFA) is to evaluate whether a group of time series from distinct sites can be considered “acceptably homogeneous” (Hosking and Wallis 1997).

In its original version, the RFA is valid only when the variable of interest assumes strictly positive values. However, (Martins et al. 2022) verified that this technique can be effectively applied to extreme maximum (Tmax) and minimum (Tmin) air temperature series, which may assume both positive and negative values, by adopting the so-called additive approach.

Although the study by (Martins et al. 2022) showed promising results, it did not address the influence of long-term warming trends. This calls for an extension of the RFA framework to incorporate time-dependent, nonstationary statistical properties.

To overcome this limitation, (Blain et al. 2026) proposed the Non-stationary Additive Regional Frequency Analysis, an extension of the additive RFA that integrates nonstationary probabilistic models to represent temporal changes in air temperature frequency distributions at the regional scale. This package was designed to facilitate the application of this new method to extreme Tmax and Tmin data under nonstationary climate conditions.

The NSTempRFA package implements the Non-Stationary Additional Regional Frequency Analysis (NS-Add-RFA) method, designed to assess extreme temperature trends in a regional context. This vignette demonstrates the package’s application using 13 annual maximum temperature (Tmax) series (1991-2024) from São Paulo, Brazil. The data were sourced from NOAA’s Physical Sciences Laboratory (NOAA Physical Sciences Laboratory 2026), were derived using the block maxima approach (one block per calendar year).

Getting Started

Install the package from GitHub https://github.com/gabrielblain/NSTempRFA (see README) and load it into your R session:

library(NSTempRFA)

Data

Table 1 presents the longitude (lon) and latitude (lat), in decimal degrees of the 10 Tmax series.

Table1 <- lonlat_Tmax
Table1
#>        lon    lat
#> 1  -48.110 -24.81
#> 2  -48.735 -24.31
#> 3  -48.110 -24.31
#> 4  -47.485 -24.31
#> 5  -49.360 -23.81
#> 6  -48.735 -23.81
#> 7  -48.110 -23.81
#> 8  -47.485 -23.81
#> 9  -49.360 -23.31
#> 10 -48.735 -23.31

Table 2 displays the Tmax data, in Celsius degrees.

TmaxCPC_SP[, 2:11] <- round(TmaxCPC_SP[, 2:11], 1)
Table2 <- TmaxCPC_SP
Table2
#>    Year Pixel_1 Pixel_2 Pixel_3 Pixel_4 Pixel_5 Pixel_6 Pixel_7 Pixel_8 Pixel_9
#> 1  1991    36.3    33.9    34.9    35.1    33.7    33.9    34.1    32.9    34.8
#> 2  1992    34.2    32.4    33.0    33.9    34.1    33.7    33.2    31.8    34.6
#> 3  1993    34.4    33.1    33.6    33.7    35.5    34.9    33.9    31.8    36.5
#> 4  1994    34.6    32.8    33.8    35.3    35.6    34.1    34.0    32.8    35.6
#> 5  1995    35.4    32.7    34.2    35.5    34.8    33.7    33.9    32.7    35.0
#> 6  1996    35.5    32.8    33.8    34.3    33.2    33.6    33.6    31.8    34.2
#> 7  1997    38.1    35.4    36.5    36.4    35.1    35.4    35.2    33.6    36.6
#> 8  1998    35.9    33.0    34.7    35.5    33.4    34.3    34.6    32.8    34.3
#> 9  1999    36.5    31.8    32.9    33.8    33.9    32.9    32.8    32.6    34.5
#> 10 2000    34.0    31.0    32.6    34.8    33.6    33.2    32.7    31.5    35.0
#> 11 2001    35.8    31.9    33.8    35.1    33.6    32.4    31.8    31.8    34.4
#> 12 2002    35.9    34.1    35.0    36.2    35.7    36.0    35.2    33.0    36.8
#> 13 2003    36.3    35.4    35.8    36.5    36.5    36.6    35.6    33.7    35.9
#> 14 2004    33.5    31.3    32.7    33.6    33.6    32.7    32.4    30.7    34.6
#> 15 2005    35.5    34.5    35.0    34.7    33.3    33.0    34.0    31.7    33.3
#> 16 2006    35.5    35.2    36.2    36.3    33.5    34.0    35.5    33.0    34.8
#> 17 2007    35.9    34.2    34.8    34.7    33.6    33.2    33.2    31.9    35.5
#> 18 2008    34.6    33.5    34.0    33.7    34.5    34.2    33.6    31.4    35.7
#> 19 2009    35.9    33.8    34.8    35.2    34.9    34.9    34.4    31.5    35.4
#> 20 2010    37.1    34.4    34.9    34.0    35.3    34.6    33.5    31.5    35.1
#> 21 2011    35.9    33.1    34.2    34.5    34.8    33.7    33.5    31.8    36.4
#> 22 2012    36.4    33.1    34.8    35.6    35.3    34.7    34.4    33.3    37.0
#> 23 2013    34.5    31.4    32.5    34.1    34.2    33.2    33.1    32.8    35.5
#> 24 2014    35.1    33.6    34.6    35.7    36.0    35.2    35.1    34.4    37.7
#> 25 2015    36.0    34.0    35.0    35.4    35.6    35.1    34.9    33.6    36.6
#> 26 2016    36.1    33.2    34.5    34.6    35.1    34.1    34.0    33.0    36.7
#> 27 2017    33.9    33.0    33.3    33.9    35.2    34.5    33.8    32.5    36.5
#> 28 2018    35.5    32.7    33.7    34.2    34.1    33.7    33.6    31.8    35.1
#> 29 2019    36.6    34.5    35.5    35.8    36.5    36.0    35.4    33.4    38.4
#> 30 2020    36.4    36.1    36.3    37.0    38.9    37.9    37.2    35.9    39.9
#> 31 2021    34.1    34.2    34.9    35.8    37.0    36.7    36.3    35.1    38.9
#> 32 2022    34.2    32.7    33.5    34.2    34.6    34.7    34.8    33.1    34.8
#> 33 2023    35.5    35.2    36.3    37.6    37.6    37.7    37.7    36.3    38.5
#> 34 2024    35.6    34.1    34.6    35.2    37.0    35.9    35.3    34.4    38.1
#>    Pixel_10
#> 1      34.2
#> 2      34.0
#> 3      35.7
#> 4      35.3
#> 5      35.0
#> 6      35.2
#> 7      36.3
#> 8      35.0
#> 9      33.9
#> 10     34.6
#> 11     33.9
#> 12     35.8
#> 13     35.6
#> 14     33.2
#> 15     32.9
#> 16     34.1
#> 17     34.9
#> 18     35.2
#> 19     34.4
#> 20     34.6
#> 21     35.2
#> 22     36.7
#> 23     34.9
#> 24     37.7
#> 25     36.6
#> 26     36.0
#> 27     35.9
#> 28     34.7
#> 29     36.5
#> 30     38.8
#> 31     38.4
#> 32     34.7
#> 33     38.4
#> 34     37.4

Data Screening

Before analysis, ensure data quality by checking for inconsistencies or outliers. The Add_Discord() function (demonstrated below) can help identify problematic series.

Add_Discord(TmaxCPC_SP)
#>       Local SampleSize      l_1       l_2           t_3       t_4          t_5
#> 1   Pixel_1         34 35.49118 0.5728164 -0.0438190447 0.1274556  0.114240201
#> 2   Pixel_2         34 33.47353 0.7125668  0.0054878049 0.1243494 -0.018257883
#> 3   Pixel_3         34 34.43235 0.6229055  0.0007511804 0.1147091  0.047267826
#> 4   Pixel_4         34 35.05588 0.5854724  0.1074364439 0.0673508  0.079369620
#> 5   Pixel_5         34 34.97941 0.7640820  0.1798670244 0.1008154  0.102772019
#> 6   Pixel_6         34 34.54118 0.7668449  0.1738145049 0.1375776  0.028978457
#> 7   Pixel_7         34 34.30294 0.7179144  0.1194134078 0.1703085  0.020835085
#> 8   Pixel_8         34 32.82059 0.7063280  0.1988328076 0.1547777  0.091450086
#> 9   Pixel_9         34 35.96176 0.8596257  0.1867807154 0.1126398  0.011555377
#> 10 Pixel_10         34 35.46176 0.8163102  0.1566491975 0.1566598 -0.008945898
#>      discord
#> 1  1.7993460
#> 2  1.6713427
#> 3  1.2285874
#> 4  2.3643506
#> 5  1.3084772
#> 6  0.7747331
#> 7  1.5490414
#> 8  1.9429602
#> 9  1.9242423
#> 10 1.2960442

Do the 10 Tmax series form an “acceptably homogeneous” group?

We develped the Add_Heterogeneity() function to verify if a group of extreme maximum or minimum air temperature series can be deemed as “acceptably homogeneous”. This function calculates the additional heterogeneity measure (Add_H) as proposed by (Martins et al. 2022). To calculate Add_H we first need to subtract from each data its sample mean. This can be accomplished by applying the Dataset_add() function.

add.data <- Dataset_add(TmaxCPC_SP)
add.data$add_data
#>            Pixel_1     Pixel_2     Pixel_3     Pixel_4     Pixel_5     Pixel_6
#>  [1,]  0.808823529  0.42647059  0.46764706  0.04411765 -1.27941176 -0.64117647
#>  [2,] -1.291176471 -1.07352941 -1.43235294 -1.15588235 -0.87941176 -0.84117647
#>  [3,] -1.091176471 -0.37352941 -0.83235294 -1.35588235  0.52058824  0.35882353
#>  [4,] -0.891176471 -0.67352941 -0.63235294  0.24411765  0.62058824 -0.44117647
#>  [5,] -0.091176471 -0.77352941 -0.23235294  0.44411765 -0.17941176 -0.84117647
#>  [6,]  0.008823529 -0.67352941 -0.63235294 -0.75588235 -1.77941176 -0.94117647
#>  [7,]  2.608823529  1.92647059  2.06764706  1.34411765  0.12058824  0.85882353
#>  [8,]  0.408823529 -0.47352941  0.26764706  0.44411765 -1.57941176 -0.24117647
#>  [9,]  1.008823529 -1.67352941 -1.53235294 -1.25588235 -1.07941176 -1.64117647
#> [10,] -1.491176471 -2.47352941 -1.83235294 -0.25588235 -1.37941176 -1.34117647
#> [11,]  0.308823529 -1.57352941 -0.63235294  0.04411765 -1.37941176 -2.14117647
#> [12,]  0.408823529  0.62647059  0.56764706  1.14411765  0.72058824  1.45882353
#> [13,]  0.808823529  1.92647059  1.36764706  1.44411765  1.52058824  2.05882353
#> [14,] -1.991176471 -2.17352941 -1.73235294 -1.45588235 -1.37941176 -1.84117647
#> [15,]  0.008823529  1.02647059  0.56764706 -0.35588235 -1.67941176 -1.54117647
#> [16,]  0.008823529  1.72647059  1.76764706  1.24411765 -1.47941176 -0.54117647
#> [17,]  0.408823529  0.72647059  0.36764706 -0.35588235 -1.37941176 -1.34117647
#> [18,] -0.891176471  0.02647059 -0.43235294 -1.35588235 -0.47941176 -0.34117647
#> [19,]  0.408823529  0.32647059  0.36764706  0.14411765 -0.07941176  0.35882353
#> [20,]  1.608823529  0.92647059  0.46764706 -1.05588235  0.32058824  0.05882353
#> [21,]  0.408823529 -0.37352941 -0.23235294 -0.55588235 -0.17941176 -0.84117647
#> [22,]  0.908823529 -0.37352941  0.36764706  0.54411765  0.32058824  0.15882353
#> [23,] -0.991176471 -2.07352941 -1.93235294 -0.95588235 -0.77941176 -1.34117647
#> [24,] -0.391176471  0.12647059  0.16764706  0.64411765  1.02058824  0.65882353
#> [25,]  0.508823529  0.52647059  0.56764706  0.34411765  0.62058824  0.55882353
#> [26,]  0.608823529 -0.27352941  0.06764706 -0.45588235  0.12058824 -0.44117647
#> [27,] -1.591176471 -0.47352941 -1.13235294 -1.15588235  0.22058824 -0.04117647
#> [28,]  0.008823529 -0.77352941 -0.73235294 -0.85588235 -0.87941176 -0.84117647
#> [29,]  1.108823529  1.02647059  1.06764706  0.74411765  1.52058824  1.45882353
#> [30,]  0.908823529  2.62647059  1.86764706  1.94411765  3.92058824  3.35882353
#> [31,] -1.391176471  0.72647059  0.46764706  0.74411765  2.02058824  2.15882353
#> [32,] -1.291176471 -0.77352941 -0.93235294 -0.85588235 -0.37941176  0.15882353
#> [33,]  0.008823529  1.72647059  1.86764706  2.54411765  2.62058824  3.15882353
#> [34,]  0.108823529  0.62647059  0.16764706  0.14411765  2.02058824  1.35882353
#>           Pixel_7     Pixel_8     Pixel_9   Pixel_10
#>  [1,] -0.20294118  0.07941176 -1.16176471 -1.2617647
#>  [2,] -1.10294118 -1.02058824 -1.36176471 -1.4617647
#>  [3,] -0.40294118 -1.02058824  0.53823529  0.2382353
#>  [4,] -0.30294118 -0.02058824 -0.36176471 -0.1617647
#>  [5,] -0.40294118 -0.12058824 -0.96176471 -0.4617647
#>  [6,] -0.70294118 -1.02058824 -1.76176471 -0.2617647
#>  [7,]  0.89705882  0.77941176  0.63823529  0.8382353
#>  [8,]  0.29705882 -0.02058824 -1.66176471 -0.4617647
#>  [9,] -1.50294118 -0.22058824 -1.46176471 -1.5617647
#> [10,] -1.60294118 -1.32058824 -0.96176471 -0.8617647
#> [11,] -2.50294118 -1.02058824 -1.56176471 -1.5617647
#> [12,]  0.89705882  0.17941176  0.83823529  0.3382353
#> [13,]  1.29705882  0.87941176 -0.06176471  0.1382353
#> [14,] -1.90294118 -2.12058824 -1.36176471 -2.2617647
#> [15,] -0.30294118 -1.12058824 -2.66176471 -2.5617647
#> [16,]  1.19705882  0.17941176 -1.16176471 -1.3617647
#> [17,] -1.10294118 -0.92058824 -0.46176471 -0.5617647
#> [18,] -0.70294118 -1.42058824 -0.26176471 -0.2617647
#> [19,]  0.09705882 -1.32058824 -0.56176471 -1.0617647
#> [20,] -0.80294118 -1.32058824 -0.86176471 -0.8617647
#> [21,] -0.80294118 -1.02058824  0.43823529 -0.2617647
#> [22,]  0.09705882  0.47941176  1.03823529  1.2382353
#> [23,] -1.20294118 -0.02058824 -0.46176471 -0.5617647
#> [24,]  0.79705882  1.57941176  1.73823529  2.2382353
#> [25,]  0.59705882  0.77941176  0.63823529  1.1382353
#> [26,] -0.30294118  0.17941176  0.73823529  0.5382353
#> [27,] -0.50294118 -0.32058824  0.53823529  0.4382353
#> [28,] -0.70294118 -1.02058824 -0.86176471 -0.7617647
#> [29,]  1.09705882  0.57941176  2.43823529  1.0382353
#> [30,]  2.89705882  3.07941176  3.93823529  3.3382353
#> [31,]  1.99705882  2.27941176  2.93823529  2.9382353
#> [32,]  0.49705882  0.27941176 -1.16176471 -0.7617647
#> [33,]  3.39705882  3.47941176  2.53823529  2.9382353
#> [34,]  0.99705882  1.57941176  2.13823529  1.9382353
#> attr(,"scaled:center")
#>  Pixel_1  Pixel_2  Pixel_3  Pixel_4  Pixel_5  Pixel_6  Pixel_7  Pixel_8 
#> 35.49118 33.47353 34.43235 35.05588 34.97941 34.54118 34.30294 32.82059 
#>  Pixel_9 Pixel_10 
#> 35.96176 35.46176
add.data$reg_mean
#>  Pixel_1  Pixel_2  Pixel_3  Pixel_4  Pixel_5  Pixel_6  Pixel_7  Pixel_8 
#> 35.49118 33.47353 34.43235 35.05588 34.97941 34.54118 34.30294 32.82059 
#>  Pixel_9 Pixel_10 
#> 35.96176 35.46176

Then, the Add_Heterogeneity() function can be applied as follows:

set.seed(123)
rho <- 0.49 # The average spatial correlation among the series
Ns <- 500 # Number of Simulation required for calculating
Add_H <- Add_Heterogeneity(dataset.add = add.data$add_data, rho = rho, Ns = Ns)
Add_H
#> [1] 0.8029503

Add_H values equal to or lower than 2 allows us to accept that the group of series can be regarded as acceptably homogeneous. Therefore, the Add_H value obtained in this example (~0.90) allowed us to accept such a assumption. In case we had obtained Add_H values larger than 2, we probably could verified which Tmax series were preventing the group to be deemed as acceptably homogeneous. This sort of verification can be performed using the Add_Discord() function, which calculates the discordance measure under the additional approach (Add_d).

Add_Discord(TmaxCPC_SP)
#>       Local SampleSize      l_1       l_2           t_3       t_4          t_5
#> 1   Pixel_1         34 35.49118 0.5728164 -0.0438190447 0.1274556  0.114240201
#> 2   Pixel_2         34 33.47353 0.7125668  0.0054878049 0.1243494 -0.018257883
#> 3   Pixel_3         34 34.43235 0.6229055  0.0007511804 0.1147091  0.047267826
#> 4   Pixel_4         34 35.05588 0.5854724  0.1074364439 0.0673508  0.079369620
#> 5   Pixel_5         34 34.97941 0.7640820  0.1798670244 0.1008154  0.102772019
#> 6   Pixel_6         34 34.54118 0.7668449  0.1738145049 0.1375776  0.028978457
#> 7   Pixel_7         34 34.30294 0.7179144  0.1194134078 0.1703085  0.020835085
#> 8   Pixel_8         34 32.82059 0.7063280  0.1988328076 0.1547777  0.091450086
#> 9   Pixel_9         34 35.96176 0.8596257  0.1867807154 0.1126398  0.011555377
#> 10 Pixel_10         34 35.46176 0.8163102  0.1566491975 0.1566598 -0.008945898
#>      discord
#> 1  1.7993460
#> 2  1.6713427
#> 3  1.2285874
#> 4  2.3643506
#> 5  1.3084772
#> 6  0.7747331
#> 7  1.5490414
#> 8  1.9429602
#> 9  1.9242423
#> 10 1.2960442

The column discord presents the Add_d values for each series. In case of Add_H larger than 2, the series with the largest Add_d values may be removed from the group and the Add_H measure may be re-calculated. It is also worth mentioning that this discordance measure may also be used at the onset of the analysis - before pre-defining the groups - to detect series with gross errors.

Selecting the best GEV-model

In its current version, the NS-Add-RFA method offers four nonstationary models to describe the whether and how the probabilistic structure of the air temperature series, which forms the homogeneous group, are changing across time. These models are based on the Generalized Extreme Value distribution and are described as follows:

  • Model 1: (stationary): The three parameters of the GEV are constant over time.
  • Model 2: (homoscedastic): Only the location is allowed to vary over time linearly.
  • Model 3: Only the scale parameter is allowed to vary over time linearly.
  • Model 4: Both location and scale parameters are allowed to vary over time linearly.

The Best_model() function selects the best model among these four candidates using the second-order Akaike Information Criterion.

best.parms <- Best_model(add.data = add.data$add_data)
# The best model is:
as.numeric(best.parms$best) #Model 5
#> [1] 5
# The at-site parameters are:
best.parms$atsite.models
#>            mu0         mu1           mu2    sigma0 sigma1       shape size
#> 1  -0.63492503  0.05311586 -0.0016490197 0.9818368      0 -0.24175515   34
#> 2  -0.76035965 -0.01023204  0.0013024587 1.1490046      0 -0.27474919   34
#> 3  -0.71708165  0.01170000  0.0003396675 1.0214691      0 -0.26474937   34
#> 4  -0.46664040 -0.02511245  0.0012119331 0.8545011      0 -0.11439244   34
#> 5  -0.68314970 -0.08570688  0.0043296036 0.8934112      0 -0.09714428   34
#> 6  -0.22737423 -0.15332150  0.0059000537 0.8026338      0  0.08605926   34
#> 7  -0.30748414 -0.13294156  0.0054640723 0.8928013      0 -0.11435857   34
#> 8  -0.08552344 -0.15884564  0.0061287501 0.8391650      0 -0.12911423   34
#> 9  -0.97773361 -0.09463029  0.0057116272 1.1872930      0 -0.38968515   34
#> 10 -0.73617875 -0.10564268  0.0056571970 1.1360496      0 -0.41737256   34

Having defined the best GEV model, the Reg_par() function can be applied to specify the parameters of the regional distribution, which is valid for all 13 series.

regional.parms <- Reg_par(best_model = best.parms$atsite.models)
regional.parms
#>   weighted_mu0 weighted_mu1 weighted_mu2 weighted_sigma0 weighted_sigma1
#> 1   -0.5596451  -0.07016172  0.003439634       0.9758166               0
#>   weighted_shape
#> 1     -0.1957262

The analysis of the parameters of the regional distribution indicates that the frequency distribution of the Tmax data in the region is experiencing changes in the location parameter. In other words, the distribution is experiencing a change in its central tendency. More specifically, the positive value of weighted_mu1 indicates that the average the Tmax values increased from 1991 to 2024.

Additionally, we may also calculate the confidence intervals for the parameters of this regional distribution. This can be accomplished by applying the Reg_parCI() as follows:

set.seed(123)
Reg_parCI(
  add_data = add.data$add_data,
  model = best.parms$best,
  reg_par = regional.parms,
  n.boots = 500
)
#> This calculation may take some time.
#>              weighted_mu0 weighted_mu1 weighted_mu2 weighted_sigma0
#> Lower 95% CI   -1.3399073  -0.19585968 0.0003802024       0.8093432
#> Upper 95% CI    0.4394965   0.03916475 0.0069630344       1.1918751
#>              weighted_sigma1 weighted_shape
#> Lower 95% CI               0     -0.4571469
#> Upper 95% CI               0      0.0319819

Because the Regional Frequency Analysis uses all series within a homogeneous region to fit the regional distribution, it is expect to reduce parameter estimation uncertainties in respect to the at-site approach. To verify such assumption, we will calculate the confidence interval, through the at-site approach, for the Tmax series of Pixel_1 (see Table 2).

set.seed(123)
temperatures <- TmaxCPC_SP$Pixel_1
model <- 5
site_par <- Fit_model(temperatures, model)
if (all(is.finite(as.numeric(site_par[1, 1:6])))) {
  Site_parCI(
    atsite_temp = temperatures,
    model = model,
    site_par = site_par[1, 1:6],
    n.boots = 500
  )
}
#> This calculation may take some time.
#>                   mu0        mu1          mu2    sigma0 sigma1        shape
#> Lower 95% CI 33.86502 -0.1277334 -0.005912072 0.6972618      0 -1.063071228
#> Upper 95% CI 36.32640  0.2043037  0.003210235 1.3498475      0 -0.009173119

The differences between the upper and lower 95% confidence intervals (CI) of the regional estimates are lower than those of the at-site approach for all GEV parameter. Additionally, both upper and lower limits for weighted_mu1 - regional approach (~ 0.079 and ~0.021, respectively) - indicate changes toward warmer conditions. However, for the at-site approach, while the lower limit for mu1 (~ -0.046), indicates a change toward cooler conditions, the upper limit (~0.035) indicates a change towards warmer conditions.

The narrower CI of the parameters of the regional distribution are consistent with the assumption that the NS-Add-RFA method reduces the parameter estimation uncertainties in respect to the at-site approach. Therefore, we may use its statistics to calculate the quantile estimates associated with distinct cumulative probabilities. Additionally, since the best model (model 2) is a non-stationary model, we can also calculate how these quantile estimates changed from the first year (1991) to the last year (2024) of the series. This assessment can be carried out using Add_RegQuant() function.

prob <- c(0.8, 0.85, 0.90, 0.92, 0.93, 0.94, 0.95, 0.97, 0.99)
add.data <- Dataset_add(TmaxCPC_SP)
best.parms <- Best_model(add.data = add.data$add_data)
regional_pars <- Reg_par(best_model = best.parms$atsite.models)
Quantiles_1991 <- Add_RegQuant(
  prob = prob,
  regional_pars = regional_pars,
  site_temp = TmaxCPC_SP$Pixel_1,
  n.year = 1
)
Quantiles_2024 <- Add_RegQuant(
  prob = prob,
  regional_pars = regional_pars,
  site_temp = TmaxCPC_SP$Pixel_1,
  n.year = 34
)
Quantiles_1991
#>      Q80      Q85      Q90      Q92      Q93      Q94      Q95      Q97 
#> 36.13319 36.35684 36.64097 36.78463 36.86683 36.95850 37.06274 37.33308 
#>      Q99 
#> 37.82418
Quantiles_2024
#>      Q80      Q85      Q90      Q92      Q93      Q94      Q95      Q97 
#> 37.79064 38.01428 38.29841 38.44207 38.52427 38.61594 38.72018 38.99052 
#>      Q99 
#> 39.48162

The analysis of the quantile estimates for 1991 and 2024 highlights the changes towards warmer conditions that this region in the State of Sao Paulo has experienced over the last 34 years. For example, the quantil estimates associated with a cumulative probability equal to 0.8 raised from ~35.58°C in 1991 to 37.23°C in 2024.

This package also allows an equivalent analysis to that of the Add_RegQuant()that indicates whether and how the cumulative probabilities of a given quantile changed over time. This assessment can be carried out using Add_RegProb() function.

 quantiles <- c(
   35.58301,
   35.81863,
   36.11727,
   36.26792,
   36.35403,
   36.44996,
   36.55892,
   36.84087,
   37.35040
 )
 add.data <- Dataset_add(TmaxCPC_SP)
 best.parms <- Best_model(add.data = add.data$add_data)
 regional_pars <- Reg_par(best_model = best.parms$atsite.models)
 Probs_1991 <- Add_RegProb(
   quantiles = quantiles,
   regional_pars = regional_pars,
   site_temp = TmaxCPC_SP$Pixel_1,
   n.year = 1
 )
 Probs_2024 <- Add_RegProb(
   quantiles = quantiles,
   regional_pars = regional_pars,
   site_temp = TmaxCPC_SP$Pixel_1,
   n.year = 34
 )
 Probs_1991
#>            [,1]
#>  [1,] 0.6365416
#>  [2,] 0.7132432
#>  [3,] 0.7960680
#>  [4,] 0.8312817
#>  [5,] 0.8494324
#>  [6,] 0.8679989
#>  [7,] 0.8870402
#>  [8,] 0.9269504
#>  [9,] 0.9710244
 Probs_2024
#>             [,1]
#>  [1,] 0.08933682
#>  [2,] 0.14042700
#>  [3,] 0.22529023
#>  [4,] 0.27542666
#>  [5,] 0.30581791
#>  [6,] 0.34084677
#>  [7,] 0.38175162
#>  [8,] 0.48987176
#>  [9,] 0.67347178

References

Blain, G. C., G. R. Sobierajski, and L. L. Martins. 2026. “The Non-Stationary Additive Regional Frequency Analysis Method.” Theoretical and Applied Climatology 157: 157–219. https://doi.org/10.1007/s00704-026-06148-4.
Hosking, J. R. M., and J. R. Wallis. 1997. Regional Frequency Analysis: An Approach Based on l-Moments. Cambridge University Press. https://doi.org/10.1017/CBO9780511529443.
Martins, L. L., J. C. Souza, G. R. Sobierajski, and G. C. Blain. 2022. “Is It Possible to Apply the Regional Frequency Analysis to Daily Extreme Air Temperature Data?” Bragantia 81: 1–22. https://doi.org/10.1590/1678-4499.20220061.
NOAA Physical Sciences Laboratory. 2026. CPC Global Unified Temperature Data.