Learn R Programming

SPIGA (version 1.0.0)

Drought Index: Calculation of Standardized Precipitation Index, using the Genetic Algorithm Method (SPIGA) and Maximum Likelihood (SPIML)

Description

Calculate the standardized precipitation index (SPI) for monitoring drought using the technique of Genetic Algorithm (SPIGA) and Maximum Likelihood (SPIML) of a series of monthly rainfall for different time scales.

Usage

SPIGA(Pmon, scale = 3, population = 500, maxIter = 50, plotGA = FALSE, plotCDF = FALSE)
SPIML(Pmon, scale =3)

Arguments

Pmon
monthly precipitation series ordered according to time. It is a data frame with columns: year, month, station 1, station 2, etc.
scale
an integer value representing the time scale of analysis. The most common are 1, 3, 6, 9, 12, 48, etc.
population
an integer value that sets the number of population for the use of the technique of Genetic Algorithm.
maxIter
an integer value that sets the maximum number of iterations also called cycles within the concept of Genetic Algorithm.
plotGA
optional, value Boolean default false. Shows the performance versus the number of cycles in the Genetic Algorithm.
plotCDF
optional, value Boolean default false. Shows the cumulative distribution function of each station. The graphics are monthly.

Value

Functions SPIGA and SPIML return values saved in .txt formats (Tabular) and .pdf (graphics). They are located in the working folder of R [getwd()].

Details

The SPIGA and SPIML, are functions to calculate the SPI using Artificial Intelligence techniques - Genetic Algorithms (GA) and numerical method - Maximum Likelihood (ML) and both provide quantitative results for monitoring DROUGHT. The GA optimize the parameters alpha and beta of the probability function Gamma given by McKee.

The population parameter must be an integer and balanced value, large values can generate higher time run, ie, high computational effort and small values can influence the accuracy of the results. By plotGA option and its corresponding graph, you can see the number of cycles to obtain a proper balance of the accuracy of the results and the computational effort.

Input data similar to Pm_Pisco.

Year Mon st_1 st_2 st_3
st_4 1981 1 120.25 125.25
90.55 150.25 1981 2 145.25
140.25 120.70 145.50 1981 3
120.80 150.28 90.50 130.40 1981
4 90.25 80.25 70.52 120.40
1981 5 50.25 58.25 60.50
80.50 1981 6 40.25 38.45
80.25 50.40 1981 7 20.25
30.69 50.40 40.40 1981 8
1.25 8.85 10.40 25.80 1981
9 25.25 14.25 5.80 20.80
1981 10 13.25 10.23 10.50
30.45 1981 11 50.25 40.25
30.50 80.50 1981 12 80.25
90.52 80.70 90.40 1982 1
145.80 110.25 105.40 120.25 .
. . . . .
. . . . .
. . . . .
. . Year Mon st_1

References

McKee, Thomas B. and Doesken, Nolan J. and Kleist, John. 1993. The relationship of Drought Frequency and Duration to Time Scales. Eighth Conference on Applied Climatology

A. Belauneh and J. Adamowski. Standard Precipitation Index Drought Forecasting Using Neural Networks, Wavelet Neural Networks, and Support Vector Regression. Applied Computational Intelligence and Soft Computing, http://dx.doi.org/10.1155/2012/794061

See Also

SPIFromParameters to calculate the standardized precipitation index, from alpha and beta parameter of the Gamma function.

Examples

Run this code
#### Load data
data(Pm_Pisco)
Pmon<-Pm_Pisco      # dataframe Precipitation
summary(Pm_Pisco)   # view summary
Pmon<-Pm_Pisco[,]

#### Computing SPI with Genetic Algorithms
pob     <-50        # Define population number
iMax    <-10        # Define Max iteration

# Total stations calculation. It may take some time.
#SPIGA(Pmon, scale=3, population=pob, maxIter = iMax, plotGA=TRUE, plotCDF=TRUE)

# station 1 computing
Pmon1<-data.frame(Pmon[,1:2], Pmon$Pm_St1)
SPIGA(Pmon1, scale=3, population=pob, maxIter = iMax)

# station 2 computing
Pmon2<-data.frame(Pmon[,1:2], Pmon$Pm_St2)
SPIGA(Pmon2, scale=3, population=pob, maxIter = iMax)

#### Computing SPI with Maximun Likelihood
SPIML(Pmon, scale=3)

Run the code above in your browser using DataLab