text:
Article | Open

# Global rainfall erosivity assessment based on high-temporal resolution rainfall records

• Scientific Reportsvolume 7, Article number: 4175 (2017)
• doi:10.1038/s41598-017-04282-8
Accepted:
Published online:

## Abstract

The exposure of the Earth’s surface to the energetic input of rainfall is one of the key factors controlling water erosion. While water erosion is identified as the most serious cause of soil degradation globally, global patterns of rainfall erosivity remain poorly quantified and estimates have large uncertainties. This hampers the implementation of effective soil degradation mitigation and restoration strategies. Quantifying rainfall erosivity is challenging as it requires high temporal resolution(<30 min) and high fidelity rainfall recordings. We present the results of an extensive global data collection effort whereby we estimated rainfall erosivity for 3,625 stations covering 63 countries. This first ever Global Rainfall Erosivity Database was used to develop a global erosivity map at 30 arc-seconds(~1 km) based on a Gaussian Process Regression(GPR). Globally, the mean rainfall erosivity was estimated to be 2,190 MJ mm ha−1 h−1 yr−1, with the highest values in South America and the Caribbean countries, Central east Africa and South east Asia. The lowest values are mainly found in Canada, the Russian Federation, Northern Europe, Northern Africa and the Middle East. The tropical climate zone has the highest mean rainfall erosivity followed by the temperate whereas the lowest mean was estimated in the cold climate zone.

## Introduction

Given the growing concerns about climate change, climatic data is particularly important for the scientific community and society in general, as decisions of individuals, business and governments are dependent on available meteorological data1. At present, a large number of the large-scale precipitation datasets are publicly available, although formats and completeness of the records vary widely2. Heavy rainfall and extreme events are of major importance for climate change, economy and society3. However, extreme events are typically rare events of short duration and in many regions of the world only limited observational data of sufficient temporal resolution is available to capture them4. High temporal resolution rainfall measurements are important in this context, but also have been recognised to be very useful for urban drainage models5, climate change modelling6, cropping patterns and crop production7.

Further, the patterns of heavy and violent rainfall, as captured by the rainfall erosivity factor, influence hydrological and erosive processes and as such are essential for the definition of soil and water conservation practices in the adaptation of agriculture to climate change8. Rainfall erosivity is one of the most important input parameters for describing erosive processes and proposing conservation measures by using soil erosion prediction models. Since soil erosion is difficult to measure at large scales, models are required for estimating soil loss by water erosion at regional, national and continental scales. Large scale and global model predictions are of utmost importance, since soil erosion is, in addition to soil sealing, the major threat to soil sustainability and consequently to water- and food security.

As a consequence, recent developments in the soil modelling and climate change communities aim at addressing major scientific gaps in describing key soil processes such as water erosion9, based on updated global datasets. Nonetheless, policy initiatives such as the United Nations Convention to Combat Desertification (UNCCD) for zero net land degradation10, the Intergovernmental Science-Policy Platform on Biodiversity and Ecosystem Services (IPBES), the Land Degradation and Restoration Assessment11, and the Food Agricultural Organisation (FAO) World Soil Resources12 still remarked the lack of an updated scientific dataset on global soil erosion.

A vital component of such a global soil erosion map is a spatial assessment of rainfall erosivity. However, methods that estimate erosivity based on annual rainfall data are problematic and highly biased, since rainfall intensity is typically not considered13. In order to include rainfall intensity on the calculation of rainfall erosivity, it is necessary to have high temporal resolution rainfall data for long time periods. In this study, we aim to tackle the challenging task of compiling and processing the first global erosivity dataset from long-term high-resolution rainfall data using sub-hourly and hourly pluviographic records. We have used this global erosivity station dataset combined with a set of exhaustive secondary environment variables to generate a global rainfall erosivity map in order to improve our understanding of the global patterns of high intensity rainfall events.

## Results

### Global Rainfall Erosivity Database - GloREDa

At global scale, this is the first time ever that an erosivity database of such dimension is compiled. The Global Rainfall Erosivity Database, named hereafter as GloREDa, contains erosivity values estimated as R-factors (refer to the method section) from 3,625 stations distributed in 63 countries worldwide. This is the result of an extensive data collection of high temporal resolution rainfall data from the maximum possible number of countries in order to have a representative sample across different climatic and geographic gradients. GloREDa has three components, which are described in the methods section: a) the Rainfall Erosivity database at European Scale (REDES)14 b) 1,865 stations from 23 countries outside Europe and c) 85 stations collected from a literature review.

The number of GloREDa stations varied greatly among continents (Fig. 1). Europe had the largest contribution to the dataset, with 1,725 stations (48% of total), while South America had the lowest number of stations (141 stations or ~4% of total). Africa has very low density of GloREDa stations (5% of the total). In North America and the Caribbean, we collected erosivity values from 146 stations located in 6 countries (Unites States, Canada, Mexico, Cuba, Jamaica and Costa Rica). Finally, Asia and the Middle East were well represented in GloREDa, with 1,220 stations (34% of the total) distributed in 10 countries including the Siberian part of the Russian Federation (Fig. 1b). The geographic distribution within each continent also differed substantially. For instance, stations in Europe, Oceania and North America covered most of the territory, while those in Africa and South America were largely clustered. However, the stations are well distributed among different erosivity classes (Fig. 2b).

### Global erosivity map

The Gaussian Process Regression (GPR) model used to interpolate the erosivity (R-factor) point values to a map showed a good performance for the cross-validation dataset [R2 = 0.722, RMSE (Root Mean Square Error) = 1,629 MJ mm ha−1 h−1 yr−1]. The annual global erosivity map (Fig. 2) is presented at 30 arc-seconds (~1 km) spatial resolution and subdivided in 10 erosivity classes corresponding to the quantiles. The mean of the global R-factor map is 2,190 MJ mm ha−1 h−1 yr−1 with high variability as expressed by the standard deviation of 2,974 MJ mm ha−1 h−1 yr−1. The median (50th percentile) of the global erosivity map is 1,150 MJ mm ha−1 h−1 yr−1 while 20% of the erosivity values (20th percentile) are lower than 200 MJ mm ha−1 h−1 yr−1 and the highest 20% (80th percentile) are higher than 5,200 MJ mm ha−1 h−1 yr−1 (Fig. 2). According to the global erosivity map, the highest values are located in south-eastern Asia (Cambodia, Indonesia, Malaysia, the Philippines and Bangladesh), Central Africa (Congo and Cameroon), South America (Brazil, Colombia and Peru), Central America and the Caribbean. The lowest erosivity is mainly located in Siberia, the Middle East, Northern Africa, Canada and Northern Europe. The Polar Regions have been masked out in the global erosivity map.

We found that the spatial patterns of the highest erosivity values (Fig. 2) are coincident with the corresponding patterns of extreme rainfall events reported by Zipser et al.14. Zipser et al.14 defined intense storms based on the convective vertical velocity of rain. The authors compiled a 7-year period (1998–2004) database of intense storms and they generated global maps of extreme rainstorm events based on lightening flash, brightness, temperature and noise. According to their study the highest frequency of extreme rainfall events (similar to high annual erosivity values) occurs in the central part of Latin America, Gulf of Mexico, central and western Africa, Madagascar, south-eastern Asia (mainly Bangladesh, south China), Indonesia and North Australia.

### Continental assessments

At the continental level, South America experiences the highest mean R-factor with 5,874 MJ mm ha−1 h−1 yr−1, followed by Africa (3,053 MJ mm ha−1 h−1 yr−1), Asia and the Middle East (1,487 MJ mm ha−1 h−1 yr−1). In Oceania, the mean R-factor was estimated at 1,675 MJ mm ha−1 h−1 yr−1(Fig. 2c).

Africa exhibits the highest erosivity estimates at the country level; Mauritius and Comoros have the highest worldwide mean annual erosivity values with an R-factor close to 20,000 MJ mm ha−1 h−1 yr−1. In Western Africa (Liberia, Sierra Leone and Equatorial Guinea), Central Africa (D.R of Congo, Republic of Congo and Cameroon) and Madagascar mean annual R-factor is higher than 7,000 MJ mm ha−1 h−1 yr−1. These patterns agree with those from other continental-scale assessments15, 16 which indicated highest erosivity values (>10,000 MJ mm ha−1 h−1 yr−1) along the Guinea coast of west and central Africa, the Congo basin and Madagascar. Ethiopia and South Africa have mean R-factor values close to 2,500 MJ mm ha−1 h−1 yr−1, but the spatial patterns are highly variable with the Ethiopian highlands having extremely high erosivity (>7,000 MJ mm ha−1 h−1 yr−1) while the lowlands have 3–4 times smaller values. The lowest mean R-factor, with values less than 115 MJ mm ha−1 h−1 yr−1, was estimated for Western Sahara, Libya and Egypt.

Within Asia, the Middle East has the lowest erosivity values, with a mean annual R-factor less than 220 MJ mm ha−1 h−1 yr−1 in Jordan, Saudi Arabia, Kuwait, Syria, Iran and Iraq (Fig. 2). China has a mean value of 1,600 MJ mm ha−1 h−1 yr−1, but exhibits high variability with zero erosivity in the arid north-west areas (Taklimakan desert), and extreme erosivity (>15,000) in the south-eastern coastal zones. Regional studies conducted by Zhu and Yu17 and Qin et al.18 show very similar spatial patters compared to our rainfall erosivity distribution in China. In Japan, the mean annual erosivity was estimated as 4,815 MJ mm ha−1 h−1 yr−1, a value close to the 5,130 MJ mm ha−1 h−1 yr−1 modelled by Shiono et al.19.

As expected the Siberian part of the Russian Federation and the former Union of Soviet Socialist Republics (Kazakhstan, Turkmenistan and Uzbekistan) have very low mean erosivity values (<250 MJ mm ha−1 h−1 yr−1) due their continental climate. On the contrary, Southeast Asia falls almost completely within the highest erosivity class (>7,400 MJ mm ha−1 h−1 yr−1), in agreement with national assessments for Peninsular Malaysia20. Their erosivity values, generated from pluviographic data range from 7,500 to 20,000 MJ mm ha−1 h−1 yr−1.

In South America, Chile has the lowest R-factor with a mean annual value 1,320 MJ mm ha−1 h−1 yr−1, followed by Argentina (2,232 MJ mm ha−1 h−1 yr−1). The rest of the South American countries have high mean erosivity values (>3,700 MJ mm ha−1 h−1 yr−1), with the highest ones in Brazil, Colombia and Ecuador (>7,000 MJ mm ha−1 h−1 yr−1). The erosivity gradient created by the Andes is clearly visible in the erosivity map. There were few national assessments on rainfall erosivity in south America21,22,23,24. Most of the data used for these studies have been used as input for GloREDa and their spatial patterns are in broad agreement to ours.

In North America and the Caribbean, the mean R-factor is 1,409 MJ mm ha−1 h−1 yr−1 with very low values in Canada and the Northern part of the United States, and extremely high values (>8,000 MJ mm ha−1 h−1 yr−1) along the Gulf of Mexico and the Caribbean countries. The erosivity map for the United States25 also shows high values along the Gulf of Mexico and southern Florida (>8,500 MJ mm ha−1 h−1 yr−1), while overall low values are observed in the Midwestern region (<690 MJ mm ha−1 h−1 yr−1).

In Australia, the mean R-factor is 1,535 MJ mm ha−1 h−1 yr−1 close to 1,767 MJ mm ha−1 h−1 yr−1 estimated by Teng et al.26 based on 11 years (2002–2012) satellite derived Tropical Rainfall Measuring Mission data. In terms of spatial patterns, Teng et al.26 also found maximum erosivity values along the northern and eastern coastal areas (>8,000 MJ mm ha−1 h−1 yr−1), which decreased towards the south-central region (<300 MJ mm ha−1 h−1 yr−1). In New Zealand, the high erosivity values (>4,000 MJ mm ha−1 h−1 yr−1) occur on the west coast of the South Island and decrease towards the east similar to the patterns observed by Klik et al.27 based on 35 weather stations.

The mean erosivity value for Europe was 488 MJ mm ha−1 h−1 yr−1, which is much lower than the one estimated by Panagos et al.28 for the European Union (722 MJ mm ha−1 h−1 yr−1). This is due to the inclusion of European Russia, Ukraine (422 MJ mm ha−1 h−1 yr−1) and Belarus (365 MJ mm ha−1 h−1 yr−1), all of which have low values compared to the other European countries.

### Analysis by Climate zones

The global rainfall erosivity map was further analysed per climate zones. The updated world Kopper-Geiger climate classification29 is the most widely used and accepted climate map in the scientific community. As expected, tropical climate group showed the highest mean erosivity with 7,104 MJ mm ha−1 h−1 yr−1. Within this group the tropical rainforest (Af) and monsoon (Am) climatic types had the highest mean erosivity and the lowest variability (Fig. 3). Second highest mean erosivity (3,729.3 MJ mm ha−1 h−1 yr−1) occurs in the temperate climate group.

The humid temperate, and temperate with dry winter climate type (Cfa, Cwa), mainly present in the southeastern United States, eastern Australia and southeast China, have mean erosivity values higher than 4,600 MJ mm ha−1 h−1 yr−1. The Mediterranean (Csa, Csb) and the Oceanic (Cfb) climate zones have mean erosivity values lower than 2,000 MJ mm ha−1 h−1 yr−1 (Fig. 3).

The arid climate group has a relatively low mean erosivity (842 MJ mm ha−1 h−1 yr−1) characterised by the highest spatial variability (e.g. the Cold desert (BWk) type). In this group, the hot desert (BWh) has the largest spatial share (13.9% of global area) with low mean erosivity values (537 MJ mm ha−1 h−1 yr−1). The cold desert climate (BWk), characteristic of northwest China and large areas of Kazakhstan, Turkmenistan, Uzbekistan, North Chile and Argentina, has a very low mean erosivity of 362 MJ mm ha−1 h−1 yr−1. The hot steppe climate (BSh), which is a transition from hot dessert to the tropical group (mainly in Africa and India), had medium mean erosivity of 2,371 MJ mm ha−1 h−1 yr−1.

The cold climate group had the lowest mean erosivity, with 493 MJ mm ha−1 h−1 yr−1 whereof the subarctic or boreal climate type (Dsc, Dwc, Dfc), covering major areas of Scandinavia, Siberia and Canada, had minimum mean erosivity values (<285 MJ mm ha−1 h−1 yr−1). By comparison, the climate zones immediately north of hot continental summers (Dfb, Dwb) that cover most of central and eastern Europe, European Russia and the northern United States, have much higher mean erosivity values (526 MJ mm ha−1 h−1 yr−1). The polar areas, mainly located in the Alps, Pyrenees and part of the Tibetan plateau, have a mean erosivity of approximately 990 MJ mm ha−1 h−1 yr−1.

The greatest uncertainty of the global erosivity map is likely related to transition areas between different climatic zones. The different climatic conditions, which result in high variability of rainfall amount, duration, magnitude and intensity, is the main reason for different spatial patterns of erosivity between climatic zones. The standard deviation shows the variability inside the climatic zone (Fig. 3). Moreover, the seasonal variation of climatic conditions play an important role in rainfall erosivity variability.

## Discussion

The increasing availability of rainfall data with high temporal resolution, the growing computing power, and the development of sophisticated geostatistical models, enabled the development of a global rainfall erosivity dataset at 30 arc-seconds (~1 km) spatial resolution. We acknowledge that this achievement was only feasible through the scientific cooperation between scholars from all over the globe. The global erosivity map was possible thanks to the contribution of data providers (see the long list of meteorological services, organisations, and institutions in the Acknowledgements section), tested methodologies and geostatistical models suitable for such a scale.

### Comparison with past studies

Compared to previous works on global R-factor estimation30,31,32, our study presents a data-driven approach including measured hourly and sub-hourly data on rainfall intensity for erosivity assessment. In contrast previous global erosivity assessments by Nachtergaele et al.30 and Yang et al.32 that used annual rainfall to estimate erosivity. However, as demonstrated by past literature13, 28, 33 and by the erosivity density statistics, the relation between rainfall amount and erosivity is not straightforward and as shown by Naipal et al.31 lead to an overestimation of rainfall erosivity. As a consequence, Naipal et al.31, included a simple precipitation intensity index calibrated to high resolution R-factor data of the USA.

In order to compare the three past erosivity maps30,31,32, and the current one, four Ordinary Least Square (OLS) models were fitted using the GloREDa measured values as an independent variable (Fig. 4). An optimal model should have a zero valued intercept and a regression coefficient as close as possible to one, thus matching the grey line of Fig. 4. Given these criteria our study outperforms the other models30,31,32 with a regression line very close to a coefficient of one. All the other models clearly show a significant bias (over-estimating the predictions) in either the slope or the intercept or both. Moreover, all the other models suffer from high variability as evidenced by the dispersion of the points cloud (Fig. 4).

Table 1 shows the comparison of the fitted models when the full measured range is considered. The intercept of the four models is shown in the first line as “B” column while the second line show the regression coefficients for each of the global models. The past studies30,31,32 have a high intercept bias with values deviating from 0 by more than 1,000, whereas the model proposed in this study has a much smaller value for the intercept (−204.2). The regression coefficient of the current study has a relatively small deviation from 1 (0.13), while the other models have a deviation between −0.27 and −0.85. Also in terms of R2 our model clearly outperforms all other models as it was fitted directly to the measured data (Table 1). Solely, the model from Nachtergaele et al.30. performs remarkably well compared to the models of Yang et al.32 and Naipal et al.31.

### Sources of uncertainty

Our inclusive approach to compile the maximum possible number of erosive events assumes that the data collected in one period is comparable with data from other periods. The inter-comparison of different time periods and the non-existence of other alternatives has been extensively discussed28, and has also been followed in similar data collection exercises such as the updated world map of the Koppen-Geiger climate classifications29. Obviously, this simplifying assumption is not valid at local scale, where observed trends in erosivity have been measured over a considerable period (e.g. 30 years). However, at the global scale, the inclusion of 3,625 stations smooths the potential bias due to the presence of trends and long-term temporal variability. Further, we preferred this inclusive approach over the alternative of selecting a common measurement period, since the latter would significantly reduce the station density entailing a reduction of the spatial prediction accuracy.

Past studies recommended a minimum period of 22-years for calculating long term R-factor, while 10-years measurements may lead to under or over-estimation25, 34, 35. As 12% of GloREDa includes stations with less than 10-years measurements, we recognize that this may cause a bias due to the temporal variation of R-factor. This bias, even if we are convinced that it is limited, should be considered.

Other uncertainties are related to the methodological approach such as the a) discrepancies in case of using a different algorithm for rainfall energy estimation (>97.7% of the calculated R-factor stations are based on the original RUSLE equation); b) the application of temporal resolution calibration factors found in European Union to the global dataset; c) the under-representativeness of measured R-factor data in highlands (11.6% of the total dataset is located in areas > 1000 m a.s.l. while the respective area amounts up to 20%), tropical and arid areas and d) the Gaussian Process Regression interpolation model. With regard to the first point the algorithm for unit rainfall energy (Equation 2) may underestimate the rainfall erosivity for instance in high erosive regions (e.g. Ethiopian highlands) due to large drop sizes36. The effect of the above listed uncertainties is considered not significant for the objectives of this product which is the model application at global scale. However, we propose that further improvements can be implemented in regional studies taking into account the best suitable algorithm for rainfall unit energy estimation, using more regional-based calibration factors to account for time resolution discrepancies and having a more representative (in terms of climate and topography) pool of stations with measured R-factor data.

### Implications of global erosivity map and data availability

The new global erosivity map is proposed for global and continental assessments of soil erosion by water, flood risk and natural hazard prevention. Therefore, the aim of the global erosivity dataset is not to challenge other local (or national) erosivity maps, developed from local data with better quality that may not have been available for the present study. Nevertheless, our global R-factor map can potentially cover gaps, where erosivity has not been estimated (due to lack of data), or where it has been calculated solely from rainfall amounts.

Current global estimates on soil erosion by water are very uncertain ranging over one order of magnitude from ca. 20 to over 200 Pg yr−1. More accurate global predictions of the rill and interrill soil erosion rates can only be achieved when the RUSLE rainfall erosivity factor is thoroughly computed. In this study, we present a robust global rainfall-runoff erosivity factor to measure the erosive potential of rainfall, which is a key input in soil erosion prediction models. The global erosivity map represents the first assessment that is solely based on the original RUSLE approach using sub-hourly measured rainfall data for 3,625 stations, providing a solid and harmonised basis for a robust spatial interpolation results. Our results show new insights into the global geography of rainfall erosivity and the global erosivity map which will be publicly available can be employed by other research groups to perform national, continental and global soil erosion modelling.

The GloREDa can be considered as an important step to bring together a large group of scientists to advance your understanding of large scale patterns related to land degradation, facing the current policy challenges and demands by the Food and Agriculture Organization (FAO), the Intergovernmental Platform on Biodiversity and Ecosystem Services (IPBES), and the United Nations Convention to Combat Desertification (UNCCD).

The Global erosivity map (GeoTIFF format) at 30 arc-seconds (~1 km) resolution is available for free download in the European Soil Data Centre (ESDAC) website at http://esdac.jrc.ec.europa.eu. The calculated erosivity values per station in GloREDa will become available in the future pending on the agreed copyright issues with data providers.

## Methods

The generation of the global erosivity map involved the following steps: a) the collection of high-temporal resolution rainfall data; b) the calculation of the erosivity factor (R-factor) for each rainfall station; c) the normalisation of R-factor values calculated with rainfall data collected at different time steps (1 min to 60 min), and d) the spatial interpolation of the R-factor point values.

### Collection of data

At global scale, this is the first time a data collection of observed (measured) high temporal resolution rainfall data takes place. The collection of high temporal resolution rainfall data from the maximum possible number of countries was considered necessary in order to have a representative sample across climatic and geographic gradients.

The Global Rainfall Erosivity Database (GloREDa) was compiled based on the following three components:

• Rainfall Erosivity database at European Scale (REDES) which includes 1,675 rainfall stations in the European Union and Switzerland (28 countries in total). REDES has been the data source for the erosivity map of Europe28 and was updated in 2015 to estimate monthly erosivity in Europe13, 33.

• A global data collection of both high resolution rainfall data and calculated erosivity values based on high temporal resolution rainfall data (Table 2). The data collection yielded 1,865 additional rainfall stations (around 52% of the total stations in GloREDa) from 23 countries outside of Europe. For the majority of the stations (located in China, Japan, India, Kuwait, Israel, Turkey, the United States of America, Mexico, Costa Rica, Jamaica, South Africa and Suriname) the calculation of the rainfall erosivity, based on high temporal resolution data, was performed for the first time (the calculation of rainfall erosivity, named as R-factor, is presented in the homonymous sub-section). For other regions, we used published erosivity data that were based on high temporal resolution rainfall datasets. This included countries such as Australia37, New Zealand27, South Korea38, Iran39, Malaysia40, Colombia21, Brazil22, Chile23, Mauritius41 and Algeria42.

• A literature review was used to fill some important data gaps, mainly in Africa, where high temporal resolution rainfall data are scarce. As a result of this exercise, rainfall erosivity values for 85 stations (2.4% of the whole database) from 13 countries were inserted in GloREDa. These countries included Canada43, Argentina24, Cuba44, Cape Verde45, Cameroon46, Eritrea47, Ethiopia48, Kenya49, 50, Niger51, Nigeria52, 53, Rwanda54, Tenerife55 and Zambia56.

Summarizing, we collected high temporal resolution rainfall data for 3,540 stations (97.7% of the total GloREDa). The total number of observational years equals 59,380; this results in an average of 16.8 years of high temporal resolution rainfall data per station. As such, GloREDa is the most comprehensive global database including the largest possible number of stations with high temporal resolution rainfall data.

### Calculation of rainfall erosivity (R-factor)

Rainfall erosivity accounts for the combined effect of rainfall duration, magnitude and intensity. In addition, it is also necessary to take into account the frequency of erosive events over a longer time period. In this study, the original R-factor from the Revised Universal Soil Loss Equation (RUSLE)25 was used for the vast majority (>97.7%) of the rainfall stations included in GloREDa. Accordingly, the calculation of rainfall erosivity (EI30) of a single event was based on the following equation:

$E I 30 = ( ∑ r = 1 k e r v r ) I 30$
(1)

where er is the unit rainfall energy (MJ ha−1 mm−1) and vr the rainfall volume (mm) during the rth time period of a rainfall event divided in k-parts. I30 is the maximum 30-minutes rainfall intensity (mm h−1). The unit rainfall energy (er) is calculated for each time interval as follows59:

$e r =0.29 [ 1 − 0.72 e ( − 0.05 i r ) ]$
(2)

where ir is the rainfall intensity during the time interval (mm h−1).

R is the average annual rainfall erosivity (MJ mm ha−1 h−1 yr−1):

$R= ∑ j = 1 n ∑ k = 1 m j ( E I 30 ) k n$
(3)

where n is the number of years recorded, m j is the number of erosive events during a given year j and k is the index of a single event with its corresponding erosivity EI 30 .

Equation (2) was developed by Brown and Foster59 as part of the Revised Universal Soil Loss Equation (RUSLE, Renard et al.25), and replaced the original equation of Wischmeier and Smith35 used in the Universal Soil Loss Equation (USLE). Equation (2) was further modified as part of RUSLE260, but its use has been mostly limited to the United States. However, outside of the United States the RUSLE equation is still the most commonly used and we have therefore applied it for our erosivity calculations. A comparison of the two equations yields slightly higher erosivity values for the RUSLE2 equation60. A recent study showed that empirical rainfall kinetic energy relationships compare well to measurement when complete events were considered (R2 > 0.90). Nonetheless, future research will explore how our current GloREDa results compare with alternative functions for rainfall energy.

According to the RUSLE handbook25, the erosive rainfall events were computed based on the following criteria: (i) the cumulative rainfall of an event is greater than 12.7 mm, (ii) the event has at least one peak that is greater than 6.35 mm during a period of 15 min (or 12.7 mm during a period of 30 min) and, (iii)a rainfall accumulation of less than 1.27 mm during a period of six hours splits a longer storm period into two storms. The erosivity factor equations and the above mentioned criteria have been developed according to more than 10,000 plot-years of experiments. The R-factor for each station in GloREDa was calculated using the Rainfall Intensity Summarisation Tool (RIST) software developed by the United States Department of Agriculture (USDA).

### Calibration of different time resolutions

For such an extensive data collection, it is expected to have a variety in both i) the range of available data-years and ii) the time resolution of the data. According to the GloREDa statistics, 35.7% of the stations had rainfall data at very high resolution (<=15 min); ~25.7% had an intermediate resolution (30 minutes), while the remaining 38.6% had a resolution of 60 minutes. Due to this heterogeneity, a time step calibration of erosivity values was considered necessary.

We selected a 30-minute time resolution as an acceptable compromise between the coarse time resolution of 60 minutes and the higher ones (<=15 minutes). For the calibration, we have selected a pool of 86 rainfall stations as their data were available at multiple temporal resolutions and their geographical coverage is representing 14 countries covering a large climate gradient. The calibration process included three steps: a) The R-factor was calculated at the highest possible resolution (5, 10 or 15 minutes); b) The rainfall data were aggregated to coarser resolutions (30 and 60 minutes) and the corresponding R-factor was calculated at the coarser resolutions and c) The calibration factors was derived from the regression analysis of the R-factor calculations at the highest and coarser resolutions. Those calibration factors have been developed in the European study33 and were in agreement with range values provided in the literature25, 60, 61 which have been calculated in China, South Italy and U.S.A.

### Interpolation of GloREDa

Given the correlation between the R-factor and monthly climatic data28, a regression approach was used to infer the spatial global distribution of rainfall erosivity from a series of independent climatic covariates derived from the WorldClim database62. The covariates used included average monthly precipitation, average minimum and maximum monthly precipitation, average monthly temperature, precipitation of the wettest month, precipitation of the driest month, and precipitation seasonality, as defined in the WorldClim database (www.worldclim.org). These variables represent long term conditions based on the interpolation of observed data for the period 1960–199062. As a result, our erosivity map represents long-term erosivity patterns. Elevation was not included in the model, as it was already used to estimate some of the WorldClim variables. We subsequently assembled a dataset where each location (i.e. rainfall station) had a mean R-factor (independent variable) as well as values for the climatic variables (independent variables), and used it as input for the interpolation.

We used Gaussian Process Regression (GPR)63, 64 due to the large number of support covariates, their potential collinearity, and the presence of non-linear relationships between the target variable (R-factor) and the covariates. GPR is a non-linear regression approach that can model non-linear relations by projecting the inputs into a higher dimensional space using basis functions, and by creating a regression model in said space. Considering the regression form $y=f(x)+N ( 0 , σ n 2 )$ with $f ( x ) = x T w$ (where y are the observed responses, x the covariates values vector, f a set of functions and w a vector of weights), the GPR uses a projection from the original input space into a feature space using kernel expansion so that f(x) can be rewritten as $f ( x ) =φ ( x ) T w$ where ϕ is the kernel function.

In this study the Radial Basis Function (RBF) Gaussian kernel was used, which can be written as $K ( x , x ′ ) =exp ( − ∥ x − x ′ ∥ 2 2 σ 2 )$ where σ is free tunable parameter. The Gaussian kernel is highly adaptable and commonly applied in machine learning65. The main advantages of GPR are that it can model very complex non-linear relations between covariates and the target variable, and directly model both average and variance estimation, thus providing information about prediction uncertainty. Moreover, GPR is resistant to the issues derived from collinearity among independent variables that can arise in other statistical models. Finally, the GPR has the advantage of adapting in local conditions (climatic) due to its non-parametric nature. In this study the GPR model performance was tested for both, a fitting, and a cross-validation dataset. The cross-validation was carried out by random sampling with 10% replacement of the original dataset used for validation.

Publisher's note: Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

## References

1. 1.

Freebairn, J. W. & Zillman, J. W. Economic benefits of meteorological services. Meteorol. Appl. 9, 33–44 (2002).

2. 2.

Tapiador, F. J. et al. Global precipitation measurement: Methods, datasets and applications. Atmospheric Res. 104, 70–97 (2012).

3. 3.

Alexander, L. V. et al. Global observed changes in daily climate extremes of temperature and precipitation. J. Geophys. Res. Atmospheres 111 (2006).

4. 4.

Orlowsky, B. & Seneviratne, S. I. Global changes in extreme events: regional and seasonal dimension. Clim. Change 110, 669–696 (2012).

5. 5.

Olsson, J., Berggren, K., Olofsson, M. & Viklander, M. Applying climate model precipitation scenarios for urban hydrological assessment: A case study in Kalmar City, Sweden. 7th Int. Workshop Precip. Urban Areas7th Int. Workshop Precip. Urban Areas 92, 364–375 (2009).

6. 6.

Willems, P., Arnbjerg-Nielsen, K., Olsson, J. & Nguyen, V. T. V. Climate change impact assessment on urban rainfall extremes and urban drainage: methods and shortcomings. Atmospheric Res. 103, 106–118 (2012).

7. 7.

Olesen, J. E. et al. Impacts and adaptation of European crop production systems to climate change. Eur. J. Agron. 34, 96–112 (2011).

8. 8.

Ramon, R., Minella, J. P. G., Merten, G. H., de Barros, C. A. P. & Canale, T. Kinetic energy estimation by rainfall intensity and its usefulness in predicting hydrosedimentological variables in a small rural catchment in southern Brazil. Achiev. Sustain. Conserv. Chang. World 148, Part 2, 176–184 (2017).

9. 9.

Vereecken, H. et al. Modeling Soil Processes: Review, Key Challenges, and New Perspectives. Vadose Zone J. 15 (2016).

10. 10.

UNCCD. United Nations Convention to Combat Desertification: Zero Net Land Degradation. (Bonn, 2012).

11. 11.

IPBES. First Order Drafts of IPBES assessments. (IPBES, 2016).

12. 12.

FAO and ITPS. Status of the World’s Soil Resources (SWSR) – Main Report. (Food and Agriculture Organization of the United Nations and Intergovernmental Technical Panel on Soils, 2015).

13. 13.

Ballabio, C. et al. Mapping monthly rainfall erosivity in Europe. Sci. Total Environ. 579, 1298–1315 (2017).

14. 14.

Zipser, E. J., Cecil, D. J., Liu, C., Nesbitt, S. W. & Yorty, D. P. Where are the most intense thunderstorms on Earth? Bull. Am. Meteorol. Soc. 87, 1057 (2006).

15. 15.

Diodato, N., Knight, J. & Bellocchi, G. Reduced complexity model for assessing patterns of rainfall erosivity in Africa. Glob. Planet. Change 100, 183–193 (2013).

16. 16.

Vrieling, A., Hoedjes, J. C. & van der Velde, M. Towards large-scale monitoring of soil erosion in Africa: Accounting for the dynamics of rainfall erosivity. Glob. Planet. Change 115, 33–43 (2014).

17. 17.

Zhu, Z. & Yu, B. Validation of rainfall erosivity estimators for mainland China. Trans. ASABE 58, 61–71 (2015).

18. 18.

Qin, W. et al. Spatial distribution and temporal trends of rainfall erosivity in mainland China for 1951–2010. Catena 147, 177–186 (2016).

19. 19.

Shiono, T., Ogawa, S., Miyamoto, T. & Kameyama, K. Expected impacts of climate change on rainfall erosivity of farmlands in Japan. Ecol. Eng. 61, 678–689 (2013).

20. 20.

Leow, C. S., Ghani, A. B., Zakaria, N. A. & Abidin, R. Z. Development of rainfall erosivity isohyet map for Peninsular Malaysia. in (2011).

21. 21.

Hoyos, N., Waylen, P. R. & Jaramillo, Á. Seasonal and spatial patterns of erosivity in a tropical watershed of the Colombian Andes. J. Hydrol. 314, 177–191 (2005).

22. 22.

Oliveira, P. T. S., Wendland, E. & Nearing, M. A. Rainfall erosivity in Brazil: A review. CATENA 100, 139–147 (2013).

23. 23.

Bonilla, C. A. & Vidal, K. L. Rainfall erosivity in Central Chile. J. Hydrol. 410, 126–133 (2011).

24. 24.

Rojas, A. & Conde, A. Estimación del factor R de la ecuación universal de pérdidas de suelo para el centro-este de la República Argentina. Cienc. Suelo 3, 85–94 (1985).

25. 25.

Renard, K. G., Foster, G. R., Weesies, G. A., McCool, D. K. & Yoder, D. C. Predicting soil erosion by water: a guide to conservation planning with the Revised Universal Soil Loss Equation (RUSLE). 703, (US Government Printing Office Washington, DC, 1997).

26. 26.

Teng, H. et al. Assimilating satellite imagery and visible–near infrared spectroscopy to model and map soil loss by water erosion in Australia. Environ. Model. Softw. 77, 156–167 (2016).

27. 27.

Klik, A., Haas, K., Dvorackova, A. & Fuller, I. C. Spatial and temporal distribution of rainfall erosivity in New Zealand. Soil Res. 53, 815–825 (2015).

28. 28.

Panagos, P. et al. Rainfall erosivity in Europe. Sci. Total Environ. 511, 801–814 (2015).

29. 29.

Peel, M. C., Finlayson, B. L. & McMahon, T. A. Updated world map of the Köppen-Geiger climate classification. Hydrol. Earth Syst. Sci. Discuss. 4, 439–473 (2007).

30. 30.

Nachtergaele, F. O. et al. Global Land Degradation Information System (GLADIS), an information database for land degradation assessment at global level. (FAO, 2011).

31. 31.

Naipal, V., Reick, C., Pongratz, J. & Van Oost, K. Improving the global applicability of the RUSLE model – adjustment of the topographical and rainfall erosivity factors. Geosci Model Dev 8, 2893–2913 (2015).

32. 32.

Yang, D., Kanae, S., Oki, T., Koike, T. & Musiake, K. Global potential soil erosion with reference to land use and climate changes. Hydrol. Process. 17, 2913–2928 (2003).

33. 33.

Panagos, P. et al. Monthly rainfall erosivity: conversion factors for different time resolutions and regional assessments. Water 8, 119 (2016).

34. 34.

Verstraeten, G., Poesen, J., Demarée, G. & Salles, C. Long-term (105 years) variability in rain erosivity as derived from 10-min rainfall depth data for Ukkel (Brussels, Belgium): Implications for assessing soil erosion rates. J. Geophys. Res. Atmospheres 111, n/a-n/a (2006).

35. 35.

Wischmeier, W. H. & Smith, D. D. Predicting rainfall erosion losses: A guide to conservation planning. Predict. Rainfall Eros. Losses- Guide Conserv. Plan. (1978).

36. 36.

Nyssen, J. et al. Rainfall erosivity and variability in the Northern Ethiopian Highlands. J. Hydrol. 311, 172–187 (2005).

37. 37.

Yu, B. An assessment of uncalibrated CLIGEN in Australia. Agric. For. Meteorol. 119, 131–148 (2003).

38. 38.

Risal, A. et al. Application of Web ERosivity Module (WERM) for estimation of annual and monthly R factor in Korea. CATENA 147, 225–237 (2016).

39. 39.

Sadeghi, S. H. R. & Hazbavi, Z. Trend analysis of the rainfall erosivity index at different time scales in Iran. Nat. Hazards 77, 383–404 (2015).

40. 40.

Yu, B., Hashim, G. M. & Eusof, Z. Estimating the R-factor with limited rainfall data: a case study from peninsular Malaysia. J. Soil Water Conserv. 56, 101–105 (2001).

41. 41.

Nel, W. et al. Intra-event characteristics of extreme erosive rainfall on Mauritius. Phys. Geogr. 37, 264–275 (2016).

42. 42.

Meddi, M., Toumi, S. & Assani, A. A. Spatial and temporal variability of the rainfall erosivity factor in Northern Algeria. Arab. J. Geosci. 9, 282 (2016).

43. 43.

Wall, G. J., Coote, D. R., Pringle, E. A. & Shelton, I. J. Revised Universal Soil Loss Equation for Application in Canada: A Handbook for Estimating Soil Loss from Water Erosion in Canada. Agric. Agri-Food Can. Res. Branch Ott. Contrib. No AAFCAAC2244E (2002).

44. 44.

Schiettecatte, W. et al. Influence of landuse on soil erosion risk in the Cuyaguateje watershed (Cuba). Catena 74, 1–12 (2008).

45. 45.

Mannaerts, C. & Gabriels, D. Rainfall erosivity in Cape Verde. Soil Tillage Res. 55, 207–212 (2000).

46. 46.

Fournier, J. Agressivité climatique et risques érosifs dans la région de Dschang, ouest Cameroun. Bull. Réseau Eros. 14, 145–156 (1994).

47. 47.

Stillhardt, B., Herweg, K. & Hurni, H. Long-term Monitoring of Soil Erosion and Soil and Water Conservation in Afdeyu, Eritrea (1984–1998). CDE Univ. Berne Berne Switz. (2002).

48. 48.

Haile, M., Herweg, K. & Stillhardt, B. Sustainable Land Management – A New Approach to Soil and Water Conservation in Ethiopia. (Mekelle University (with CDE-University of Berne and NCCR), 2006).

49. 49.

Angima, S., Stott, D., O’Neill, M., Ong, C. & Weesies, G. Soil erosion prediction using RUSLE for central Kenyan highland conditions. Agric. Ecosyst. Environ. 97, 295–308 (2003).

50. 50.

Ulsaker, L. G. & Onstad, C. A. Relating rainfall erosivity factors to soil loss in Kenya. Soil Sci. Soc. Am. J. 48, 891–896 (1984).

51. 51.

Delwaulle, J. C. Résultats de six ans d’observations sur l’érosion au Niger. Bois For. Trop. 150, 15–36 (1973).

52. 52.

Gobin, A. M., Campling, P., Deckers, J. A., Poesen, J. & Feyen, J. Soil erosion assessment at the Udi-Nsukka Cuesta (southeastern Nigeria). Land Degrad. Dev. 10, 141–160 (1999).

53. 53.

Salako, F. K., Ghuman, B. S. & Lal, R. Rainfall erosivity in south-central Nigeria. Soil Technol. 7, 279–290 (1995).

54. 54.

Ryumugabe, J. B. & Berding, F. R. Variabilité de l’indice d’agressivité des pluies au Rwanda. Bull. Réseau Eros. 12, 113–119 (1992).

55. 55.

Rodrıguez, A. et al. Forms of eroded soil organic carbon in andosols of the Canary Islands (Spain). Geoderma 121, 205–219 (2004).

56. 56.

Pauwelyn, P. L. L., Lenvain, J. S. & Sakala, W. K. Iso-erodent map of Zambia. Soil Technol. 1, 235–250 (1988).

57. 57.

Rousseva, S. et al. Soil erosion risk in Bulgaria and recommendations for soil protective use of agricultural lands. Part II South. Bulg. Agric. Acad. Inst. Soil Sci. Nikola Poushkarov Publ.-Eco Sofia Bulg. (2010).

58. 58.

Diamond, H. J. et al. U.S. Climate Reference Network after One Decade of Operations: Status and Assessment. Bull. Am. Meteorol. Soc. 94, 485–498 (2013).

59. 59.

Brown, L. C. & Foster, G. R. Storm Erosivity Using Idealized Intensity Distributions. Trans. Am. Soc. Agric. Eng. 30, 379–386 (1987).

60. 60.

Yin, S., Xie, Y., Liu, B. & Nearing, M. A. Rainfall erosivity estimation based on rainfall data collected over a range of temporal resolutions. Hydrol. Earth Syst. Sci. 19, 4113–4126 (2015).

61. 61.

Porto, P. Exploring the effect of different time resolutions to calculate the rainfall erosivity factor R in Calabria, southern Italy. Hydrol. Process. 30, 1551–1562 (2016).

62. 62.

Hijmans, R. J., Cameron, S. E., Parra, J. L., Jones, P. G. & Jarvis, A. Very high resolution interpolated climate surfaces for global land areas. Int. J. Climatol. 25, 1965–1978 (2005).

63. 63.

Rasmussen, C. E. & Williams, C. K. I. Gaussian processes for machine learning. (MIT Press, 2006).

64. 64.

Stein, M. L. Interpolation of spatial data: some theory for kriging. (Springer Science & Business Media, 2012).

65. 65.

Hofmann, T., Schölkopf, B. & Smola, A. J. Kernel methods in machine learning. Ann. Stat. 1171–1220 (2008).

## Acknowledgements

The authors would also like to acknowledge the following services for proving their data: Bureau of Meteorology in Australia, New Zealand Institute of Water and Atmospheric Research (NIWA), Japan Meteorological Agency (JMA), Korea Meteorological Administration (KMA), National Meteorological Information Center of China, India Meteorological Department, Ministry of Earth Sciences, Iranian Meteorological Organization, Department of Meteorology, Directorate General of Civil Aviation - State of Kuwait, Lomonosov Moscow State University, Israel Meteorological Service, Turkish Ministry of Forestry and Water Affairs, U.S. Climate Reference Network (USCRN, NOAA), Comision Nacional Del Agua, Servicio Meteorologico Nacional, Mexico, Meteorological service Jamaica, University of Costa Rica (UCR), Centro Nacional de Investigaciones de Café – Cenicafé (Colombia), General Directorate of Water Resources (Chile), Meteorological organization of Suriname, Mauritius Meteorological Services (MMS), Algerian National Agency of Hydraulic Resources. Plus all the European Organizations listed in Panagos et al28.

## Author information

### Affiliations

1. #### European Commission, Joint Research Centre, I-21027, Ispra (VA), Italy

• Panos Panagos
• , Martino Boni
•  & Cristiano Ballabio
2. #### Environmental Geosciences, University of Basel, Basel, Switzerland

• Pasquale Borrelli
•  & Katrin Meusburger

• Bofu Yu
4. #### BOKU, University of Natural Resources and Life Sciences, Vienna, Austria

• Andreas Klik
5. #### Kangwon National University, Chuncheon-si, Gangwon-do, South Korea

• Kyoung Jae Lim
•  & Jae E. Yang

• Jinren Ni
7. #### College of Global Change and Earth System Science, Beijing Normal University, Beijing, P.R. China

• Chiyuan Miao

9. #### Faculty of Natural Resources, Tarbiat Modares University, Jalal, Iran

• , Zeinab Hazbavi
•  & Mohsen Zabihi
10. #### Faculty of Geography, Lomonosov Moscow State University, Moscow, Russian Federation

• , Sergey F. Krasnov
•  & Andrey V. Gorobets

• Yoav Levi
12. #### Faculty of Agriculture - Soil Science Departement, Ankara University, Ankara, Turkey

• Gunay Erpul
13. #### University of Costa Rica, San Jose, Costa Rica

• Christian Birkel
14. #### Universidad del Norte, Barranquilla, Colombia

• Natalia Hoyos
15. #### Laboratoire des Sciences du Climat et de l′Environnement, IPSL-LSCE, Gif sur Yvette, France

• Victoria Naipal
16. #### Federal University of Mato Grosso do Sul, Campo Grande, Brazil

• Paulo Tarso S. Oliveira
17. #### Departamento de Ingeniería Hidráulica y Ambiental, Pontificia Universidad Católica de Chile, Región Metropolitana, Chile

• Carlos A. Bonilla
18. #### Ecole Nationale Supérieure d’Hydraulique de Blida, Soumaâ, Algeria

• Mohamed Meddi

• Werner Nel
20. #### Department of Meteorology, Kuwait, Kuwait

• Hassan Al Dashti
21. #### Met European Research Observatory, Benevento, Italy

• Nazzareno Diodato
22. #### Université Catholique de Louvain, Louvain-la-Neuve, Belgium

• Kristof Van Oost
23. #### USDA-ARS, Southwest Watershed Research Center, Tucson, AZ, USA

• Mark Nearing

### Contributions

Panos Panagos, Cristiano Ballabio, Pasquale Borrelli, Katrin Meusburger elaborated the results, developed the erosivity model and wrote major part of the manuscript. Prof. Bofu Yu, Dr. Andreas Klik, Dr. Kyoung Jae Lim, Dr. Jae E. Yang, Prof. Jinren Ni, Prof. Chiyuan Miao, Dr. Nabansu Chattopadhyay, Prof. Seyed Hamidreza Sadeghi, Dr. Zeinab Hazbavi, Dr. Mohsen Zabihi, Prof. Genady Larionov, Dr. Andrey Gorobets, Dr. Sergey Krasnov, Mr. Yoav Levi, Dr. Gunay Erpul, Prof. Christian Birkel, Dr. Natalia Hoyos, Dr. Victoria Naipal, Dr. Paulo Tarso Oliveira, Prof. Carlos Bonilla, Dr. Mohamed Meddi, Dr. Werner Nel, Mr. Hassan Al Dashti, Mr. Martino Boni, Dr. Nazzareno Diodato, Prof. Kristof Van Oost and Dr. Mark A. Nearing provided the data input, contributed with modelling and analysis and reviewed the manuscript.

### Competing Interests

The authors declare that they have no competing interests.

### Corresponding author

Correspondence to Panos Panagos.


text:
# Is There Monopsony in the Labor Market? Evidence from a Natural Experiment

@article{Staiger2010IsTM,
title={Is There Monopsony in the Labor Market? Evidence from a Natural Experiment},
author={Douglas O. Staiger and Joanne Spetz and Ciaran S Phibbs},
journal={Journal of Labor Economics},
year={2010},
volume={28},
pages={211 - 236}
}
• Published 2010
• Economics
• Journal of Labor Economics
Recent theoretical and empirical advances have renewed interest in monopsonistic models of the labor market. However, there is little direct empirical support for these models. We use an exogenous change in wages at Department of Veterans Affairs (VA) hospitals as a natural experiment to investigate the extent of monopsony in the nurse labor market. We estimate that labor supply to individual hospitals is quite inelastic, with short‐run elasticity around 0.1. We also find that non‐VA hospitals… Expand
201 Citations
Modern Models of Monopsony in Labor Markets: A Brief Survey
• Economics
• 2010
This brief survey contains a review of several new empirical papers that attempt to measure the extent of monopsony in labor markets. As noted originally by Joan Robinson, monopsonistic exploitationExpand
Monopsony Power, Pay Structure, and Training
• Economics
• 2011
Although interest in monopsonistic influences on labor market outcomes has revived in recent years, only a few empirical studies provide direct evidence on this topic. In this article, the authorsExpand
Monopsony in Labor Markets: A Review
Researchers’ interest in monopsony has increased in recent years. This article reviews the accumulating evidence that employers have considerable monopsony power. It summarizes the application ofExpand
Monopsony Power in Occupational Labor Markets
• Economics
• Journal of Labor Research
• 2019
We collect data from the 1979 National Longitudinal Survey of Youth and create comparable measures of monopsonistic power for up to 46 occupational labor markets in the USA, starting in 1979 andExpand
Evidence of Monopsony in the Labor Market of a Developing Country
Firms are able to behave monopsonistically because of frictions in the labor market. While there is evidence that these frictions lead to labor market power in specific cases in developed countries,Expand
Does monopsony exist in academic labor market?
This study aims to examine empirically the power of monopsony in the academic labor market, particularly in public universities. Upward sloping supply curve is indicative of monopsony and its powerExpand
Estimating the Firm’s Labor Supply Curve in a “New Monopsony” Framework: Schoolteachers in Missouri
• Economics
• Journal of Labor Economics
• 2010
In the context of certain dynamic models, it is possible to infer the elasticity of labor supply to the firm from the elasticity of the quit rate with respect to the wage. Using this property, weExpand
Minimum wages in monopsonistic labor markets
Abstract Over the last 30 years, researchers have disputed the mixed evidence of the effect of the minimum wage on teenage employment in the United States. Whenever the minimum wage has positive orExpand
The Elasticity of Labor Supply at the Establishment Level
Monopsonistic wage‐setting power requires that the supply of labor directed toward individual establishments is upward sloping. This study utilizes institutional features to identify the supplyExpand
Monopsony With Heterogeneous Labour: Evidence From Economic Transition
• Economics
• 2011
Recent years have seen revived interest in the role of monopsony power in wage-setting in the public sector. Most evidence focuses on individual occupations rather than considering the implicationsExpand

#### References

SHOWING 1-10 OF 48 REFERENCES
Monopsony in the Labor Market
• Economics
• 1997
This paper surveys recent theoretical and empirical research on monopsony in labor markets, broadly defined as upward-sloping labor supply to an employer. We compare older monopsony models based onExpand
The Employer Size-Wage Effect: Can Dynamic Monopsony Provide an Explanation?
• Economics
• 1996
In this paper, the authors argue that a dynamic monopsony model, based on labor market frictions, predicts a positive relationship between wages and employer size, but also that the effect will beExpand
Estimating the Firm’s Labor Supply Curve in a “New Monopsony” Framework: Schoolteachers in Missouri
• Economics
• Journal of Labor Economics
• 2010
In the context of certain dynamic models, it is possible to infer the elasticity of labor supply to the firm from the elasticity of the quit rate with respect to the wage. Using this property, weExpand
Oligopsony and monopsonistic competition in labor markets
• Economics
• 2002
We argue that models of oligopsony or monopsonistic competition provide insights and explanation for many empirical phenomena in labor markets. Using a simple model with job differentiation andExpand
The Elasticity of Labor Supply at the Establishment Level
Monopsonistic wage‐setting power requires that the supply of labor directed toward individual establishments is upward sloping. This study utilizes institutional features to identify the supplyExpand
Minimum Wages for Ronald McDonald Monopsonies: A Theory of Monopsonistic Competition
• Economics
• 1996
Recent empirical work on the effects of minimum wages has called into question the conventional wisdom that minimum wages invariably reduce employment. We develop a model of \emph{monopsonisticExpand
Monopolistic competition with outside goods
The Chamberlinian monopolistically competitive equilibrium has been explored and extended in a number of recent papers. These analyses have paid only cursory attention to the existence of an industryExpand
Testing for Employer Monopsony in Turn-of-the-Century Coal Mining
Isolated company towns are often cited as likely examples of labor monopsony. This article tests for monopsony power by estimating inverse labor supply elasticities using a county-level panel datasetExpand
Monopsony power and relative wages in the labor market for nurses.
• Economics, Medicine
• Journal of health economics
• 1995
No positive relationship exists between relative nursing wages and hospital density or market size, and support is found for the presence of monopsony power based on evidence on union wage premiums, slopes of experience profiles, or the mix of RN to total hospital employment. Expand
Monopsony in Motion - Imperfect Competition in Labor Markets.
309 trial relations literature clearly shows. Although the defeat of PATCO was extremely important, the undermining of construction unionism, spearheaded by the Business Roundtable, was happening inExpand

format: plain


text:
# Integration List🔗

This page contains documentation for known integrations that exist for third party plugins. Some integrations also have dedicated pages in the documentation. In total 34 plugins have dedicated support for BetonQuest.

## Provided by BetonQuest🔗

BetonQuest hooks into other plugins by itself to provide more events, conditions and objectives or other features.
AureliumSkills, Brewery, Citizens, DecentHolograms, Denizen, EffectLib, FakeBlock, Heroes, HolographicDisplays, JobsReborn, LuckPerms, Magic, mcMMO, MythicLib, MMOCore, MMOItems, MythicMobs, PlaceholderAPI, ProtocolLib, Quests, Shopkeepers, ProSkillAPI, Skript, Vault, WorldEdit, FastAsyncWorldEdit and WorldGuard.

## Provided by other plugins🔗

Some plugins also hook into BetonQuest and provide support by themselves:
nuNPCDestinations, CalebCompass, NotQuests, HonnyCompass MythicDungeons

There are also plugins that hook into BetonQuest that require a clientside mod:
BetonQuestGUI, NGVexJournal

## AureliumSkills🔗

### Conditions🔗

#### Skill level: aureliumskillslevel🔗

Checks if the player has the specified skill level. The amount can be a variable or a number. The player needs to be on that level or higher to meet the condition. You can disable this behaviour by adding the equal argument, then the player must match the specified level exactly.

 1 2 aureliumskillslevel fighting 5 aureliumskillslevel farming 10 equal

#### Stat level: aureliumstatslevel🔗

Checks if the player has the specified stat level. The amount can be a variable or a number. The player needs to be on that level or higher to meet the condition. You can disable this behaviour by adding the equal argument, then the player must match the specified level exactly.

 1 2 aureliumstatslevel luck 5 aureliumstatslevel luck 10 equal

### Give Skill Xp : aureliumskillsxp🔗

Adds experience to the players skill. The amount can be a variable or a number. The level argument is optional and would convert the amount to levels instead of XP points.

 1 2 aureliumskillsxp farming 5 aureliumskillsxp farming 10 level

## Brewery🔗

### Conditions🔗

#### Drunk: drunk🔗

This condition is true if the player is drunken. Only argument is the minimal drunkness (0-100).

 1 drunk 50

#### Drunk Quality: drunkquality🔗

This condition is true if the player has the given drunk quality. Only argument is the minimal drunk quality (1-10).

 1 drunkquality 3

#### Has Brew: hasbrew🔗

This condition is true if the player has the given brew with the specified amount in his inventory.

 1 hasbrew 2 MY_BREW

### Events🔗

#### Give Brew: givebrew🔗

Gives the player the specified drink. The first number is the amount, and the second number is the quality of the drink.

 1 givebrew 1 10 MY_BREW

#### Take Brew: takebrew🔗

Removes the specified drink from the players inventory. An amount needs to be specified.

 1 takebrew 2 MY_OTHER_BREW

## Citizens🔗

If you have this plugin you can use it's NPCs for conversations. I highly recommend you installing it, it's NPCs are way more immersive. Having Citizens also allows you to use NPCKill objective and to have moving NPC's.

A Citizen NPC will only react to right clicks by default. This can be changed by setting acceptNPCLeftClick in the config.yml to true.

Notice

You need to specify the ID of the NPC instead of it's name in the package.yml when using Citizens!

### Conditions🔗

#### NPC distance: npcdistance🔗

This condition will return true if the player is closer to the NPC with the given ID than the given distance. The NPCs ID is the first argument, the distance is the second. If the npc is despawned the condition will return false.

Example

npcdistance 16 22

#### NPC location: npclocation🔗

persistent, static

This condition will return true if a npc is close to a location. First argument is the id of the NPC, second the location and third the maximum distance to the location that the npc is allowed to have.

Example

npclocation 16 4.0;14.0;-20.0;world 22

#### NPC region: npcregion🔗

persistent, static

Notice

This condition also requires WorldGuard to work.

This condition will return true if a npc is inside a region. First argument is the id of the npc second is the name of the region.

Example

npcregion 16 spawn

### Events🔗

#### Move NPC: movenpc🔗

This event will make the NPC move to a specified location. It will not return on its own, so you have to set a single path point with /npc path command - it will then return to that point every time. If you make it move too far away, it will teleport or break, so beware. You can change maximum pathfinding range in Citizens configuration files. The first argument in this event is ID of the NPC to move. Second one is a location in a standard format (like in teleport event). You can also specify multiple locations separated by colons to let the npc follow a path of locations. You can also specify additional arguments: block will block the NPC so you won't be able to start a conversation with him while he is moving, wait: is a number of tick the NPC will wait at its destination before firing events, done: is a list of events fired after reaching the destination, fail: is a list of events fired if this event fails. Move event can fail if the NPC is already moving for another player.

Example

movenpc 121 100;200;300;world,105;200;280;world block wait:20 done:msg_were_here,give_reward fail:msg_cant_go,give_reward

#### Stop moving NPC: stopnpc🔗

This will stop all current move tasks for the npc with the given ID.

Example

stopnpc 16

#### Teleport NPC: teleportnpc🔗

This event will teleport the NPC with the given ID to the given location.

Example

teleportnpc 53 100;200;300;world

### Objectives🔗

#### NPC Interact: npcinteract🔗

The player has to right-click on the NPC with specified ID. It can also optionally cancel the action, so the conversation won't start. The first argument is number (ID of the NPC), and the second is optional cancel.

Example

npcinteract 3 cancel conditions:sneak events:steal

#### NPC Kill: npckill🔗

The NPC kill objective requires the player to kill a NPC with the given ID. You can also define how many times the NPC has to be killed. Right after the objective's name there must be the ID of the NPC. You can also add an amount with the amount keyword. You can use the notify keyword to display a message each time the player advances the objective, optionally with the notification interval after a colon.

This objective has three properties: amount, left and total. amount is the amount of NPCs already killed, left is the amount of NPCs still needed to kill and total is the amount of NPCs initially required.

Example

npckill 16 amount:3 events:reward notify

#### NPC Range: npcrange🔗

The player has to enter/leave a circle with the given radius around the NPC to complete this objective. It is also possible to define multiple NPCs separated with ,. The objective will be completed as soon as you meet the requirement of just one npc. First argument is the ID of the NPC, second one is the type: Either enter, leave, inside or outside and the third one is the range. The types enter, leave force the player to actually enter the radius after you were outside of it and vice versa. This means that enter is not completed when the player gets the objective and is already in the range, while inside is instantly completed.

Example

npcrange 3,5 enter 20 events:master_inRange

## Denizen🔗

### Events🔗

#### Script: script🔗

With this event you can fire Denizen task scripts. Don't confuse it with skript event, these are different. The first and only argument is the name of the script.

Example

script beton

## EffectLib🔗

If you install this plugin on your server you will be able to set a particle effect on NPCs with conversations and use particle event.

EffectLib is not a normal plugin, it's a developer tool - there are no official docs. However, the Magic plugin has a wiki for EffectLib. It does contain a few magic specific settings though so please don't be confused if some stuff does not work. There is also a magic editor with autocompletion for EffectLib.

You can control the behaviour of particles around the NPCs in the npc_effects section. Each effect is defined as a separate subsection and consists of EffectLib options (described on the EffectLib page) and several BetonQuest settings. npcs is a list of all NPCs on which this effect can be displayed. If no npcs are specified it will use the package NPCs from package.yml. conditions is a list of conditions the player has to meet in order to see the effect. BetonQuest will find the first effect which can be displayed and show it to the player. interval controls how often the effect is displayed (in ticks). The effect will be fired from the exact location of the NPC, upwards.

npc_effects:
check_interval: 50
disabled: false
farmer:
class: VortexEffect
iterations: 20
particle: crit_magic
helixes: 3
circles: 1
grow: 0.1
interval: 30
npcs:
- 1
conditions:
- '!con_tag_started'
- '!con_tag_finished'

### Events🔗

#### Particle: particle🔗

This event will load an effect defined in effects section and display it on player's location. The only argument is the name of the effect. You can optionally add loc: argument followed by a location written like 100;200;300;world;180;-90 to put it on that location. If you add private argument the effect will only be displayed to the player for which you ran the event.

Example

effects:
beton:
class: HelixEffect
iterations: 100
particle: smoke
helixes: 5
circles: 20
grow: 3

events:
playEffect: particle beton loc:100;200;300;world;180;-90 private

## FakeBlock🔗

If you have the FakeBlock integration installed, you will be able to view and hide the block groups created in FakeBlock on a player-specific basis.

### Events🔗

#### Show and hide block groups: fakeblock🔗

Shows or hides the block group for the player. The block group can be specified as a comma-separated list. The groups are case-sensitive. To show a group the showgroup argument is required. To hide a group the hidegroup argument is required.

events:
showBridge: "fakeblock showgroup bridge"
hideCityBorder: "fakeblock hidegroup gate,wall,door"

## Heroes🔗

When you install Heroes, all kills done via this plugin's skills will be counted in MobKill objectives.

### Conditions🔗

#### Heroes Class: heroesclass🔗

This condition checks the classes of the player. The first argument must be primary, secondary or mastered. Second is the name of a class or any. You can optionally specify level: argument followed by the required level of the player.

Example

heroesclass mastered warrior

#### Heroes Attribute: heroesattribute🔗

This condition check's the level of a player's attribute. The first argument must be strength, constitution, endurance, dexterity, intellect, wisdom, or charisma. Second argument is the required level of the attribute. Must be greater than or equal the specified number.

Example

heroesattribute strength 5

#### Skill: heroesskill🔗

This condition checks if the player can use specified skill. The first argument is the name of the skill.

Example

heroesskill charge

### Events🔗

#### Heroes experience: heroesexp🔗

This event simply gives the player specified amount of Heroes experience. The first argument is either primary or secondary and it means player's class. Second one is the amount of experience to add.

Example

heroesexp primary 1000

## JobsReborn🔗

Requires adding the following to config.yml:

hook:
jobs: 'true'

### Conditions🔗

#### Can Level up: nujobs_canlevel {jobname}🔗

Returns true if the player can level up

#### Has Job: nujobs_hasjob {jobname}🔗

Returns true if the player has this job

Example

nujobs_hasjob Woodcutter

#### Job Full: nujobs_jobfull {jobname}🔗

Returns true if the job is at the maximum slots

#### Job Level: nujobs_joblevel {jobname} {min} {max}🔗

Returns true if the player has this job, and at a level equal to or between the min/max

Example

nujobs_joblevel Woodcutter 5 10

### Events🔗

#### Add Jobs Experience: nujobs_addexp {jobname} {exp}🔗

Gives the player experience

#### Increase Jobs Level: nujobs_addlevel {jobname} {amount}🔗

Increases the player level by amount.

#### Decrease Jobs Level: nujobs_dellevel {jobname} {amount}🔗

Decreases the players level by amount.

#### Join Jobs Job Event: nujobs_joinjob {jobname}🔗

Joins the player to job.

#### Leave Jobs Job Event: nujobs_leavejob {jobname}🔗

Removes the player from job.

#### Set Jobs Level: nujobs_setlevel {jobname} {level}🔗

Set the player to level.

### Objectives🔗

#### Join Jobs Job Objective: nujobs_joinjob {jobname}🔗

Triggers when player joins job.

#### Leave Jobs Job Objective: nujobs_leavejob {jobname}🔗

Triggers when player leaves job.

Notice

This is not triggered by '/jobs leaveall'

#### Jobs Job Levelup: nujobs_levelup {jobname}🔗

Triggers when player levels up.

#### Jobs Job Payment: nujobs_payment {amount}🔗

Triggers when player makes {amount} of money from jobs. You can use the notify keyword to display a message each time the player advances the objective, optionally with the notification interval after a colon.

This objective has three properties: amount, left and total. amount is the amount of money already received, left is the amount of money still needed to receive and total is the amount of money initially required.

## LuckPerms🔗

### Context Integration🔗

Any BetonQuest tag (global and per-player) can be used as a LuckPerms context. This means that a player needs the specified tag for a permission to be true - this removes the need for tons of permission add ... events as you can hook your existing quest progress tags right into LuckPerms permission contexts. The syntax is as follows:

key value
betonquest:tag:PACKAGE_NAME.TAG_NAME true
betonquest:globaltag:PACKAGE_NAME.TAG_NAME true
betonquest:tag:myPackage.tagName true
betonquest:globaltag:myQuest.someTag true

Check the Luck Perms documentation for an in-depth explanation on what contexts are and how to add them to permissions.

## Magic🔗

### Conditions🔗

#### Wand: wand🔗

This condition can check wands. The first argument is either hand, inventory or lost. If you choose lost, the condition will check if the player has lost a wand. If you choose hand, the condition will check if you're holding a wand in your hand. inventory will check your whole inventory instead of just the hand. In case of hand and inventory arguments you can also add optional name: argument followed by the name of the wand (as defined in wands.yml in Magic plugin) to check if it's the specific type of the wand. In the case of inventory you can specify an amount with amount and this will only return true if a player has that amount. You can also use optional spells: argument, followed by a list of spells separated with a comma. Each spell in this list must have a minimal level defined after a colon.

Example

wand hand name:master spells:flare:3,missile:2

## McMMO🔗

### Conditions🔗

#### McMMO Level: mcmmolevel🔗

This conditions checks if the player has high enough level in the specified skill. The first argument is the name of the skill, second one is the minimum level the player needs to have to pass this condition.

Example

mcmmolevel woodcutting 50

### Events🔗

#### Add MCMMO Experience: mcmmoexp🔗

This event adds experience points in a specified skill. The first argument is the name of the skill, second one is the amount of experience to add.

Example

mcmmoexp swords 1500

## MMOCore & MMOItems & MythicLib🔗

### Conditions🔗

#### MMOCore class: mmoclass🔗

Checks if a player has the given MMOCore class. You can check for any class that is not the default class by writing * instead of a class name. If a level has been specified the player needs to be on that level or higher to meet the condition. You can disable this behaviour by adding the equal argument.

 1 2 3 4 mmoclass * 5 mmoclass WARRIOR mmoclass MAGE 5 mmoclass MAGE 5 equal

#### MMOCore attribute: mmoattribute🔗

Checks if a player has the specified attribute on the given level or higher. You can disable this behaviour by adding the equal argument.

 1 2 mmoclass mmoattribute strength 2 mmoclass mmoattribute strength 2 equal

#### MMOCore profession: mmoprofession🔗

Checks if a player has the specified profession on the given level or higher. You can disable this behaviour by adding the equal argument.

 1 2 mmoprofession mining 2 mmoprofession mining 2 equal

#### MMOItems item: mmoitem🔗

Checks if a player has the specified amount of MMOItems or more in his inventory. If no amount has been defined the default amount is one.

 1 2 mmoitem ARMOR SKELETON_CROWN mmoitem GEMS SPEED_GEM 3

#### MMOItems hand: mmohand🔗

Checks if a player holds the specified MMOItem in his hand. Checks the main hand if not specified otherwise using the offhand argument. If no amount has been defined the default amount is one.

 1 2 mmohand ARMOR SKELETON_CROWN mmohand GEMS SPEED_GEM 3 offhand

#### MythicLib stat: mmostat🔗

Checks these stats that combine all sorts of stats from MMOCore and MMOItems. The player needs to be on the specified level or higher in order to meet this condition. You can disable this behaviour by adding the equal argument.

 1 mmostat DAMAGE_REDUCTION 3

### Objectives🔗

#### Break Special Blocks: mmocorebreakblock🔗

This objective requires the player to break special blocks from MMOCore. All three different block types and an amount can be defined. You can also send notifications to the player by appending the notify keyword optionally with the notification interval after a colon.

This objective has three properties: amount, left and total. amount is the amount of blocks already broken, left is the amount of blocks still left to break and total is the amount of blocks initially required.

 1 2 3 mmocorebreakblock 5 block:1 #A custom block's block ID mmocorebreakblock 64 block:STONE #vanilla material mmocorebreakblock 1 block:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVy #... this is a heads texture data

#### MMOCore Profession levelup: mmoprofessionlevelup🔗

This objective requires the player to level the given profession to the specified level. Use main to check for class level ups.

 1 mmoprofessionlevelup MINING 10

#### Craft item: mmoitemcraft🔗

This objective requires the player to craft the item with the given type and id. It supports any MMOItem that was crafted using vanilla crafting methods, MMOItems "recipe-amounts" crafting and MMOItems station crafting. An amount can also be set if it shall differ from the default (which is one) by adding the amount: argument. The amount is based on how many items have actually been crafted, not how often a specific recipe has been used! Therefore, a recipe that makes four items at once will let the objective progress by four steps. You can use the notify keyword to display a message each time the player advances the objective, optionally with the notification interval after a colon.

This objective has three properties: amount, left and total. amount is the amount of items already crafted, left is the amount of items still needed to craft and total is the amount of items initially required.

 1 2 mmoitemcraft SWORD STEEL_SWORD mmoitemcraft HEALTH_POTION_RECIPE amount:5

#### Upgrade Item: mmoitemupgrade🔗

This objective tracks if a player upgrades the given item with an upgrade consumable.

 1 mmoitemupgrade SWORD FALCON_BLADE

#### Apply gemstone: mmoitemapplygem🔗

This objective is completed when the player applies the gemstone with the given gemstoneID to an item with the given itemType and itemID.

 1 mmoitemapplygem SWORD CUTLASS GEM_OF_ACCURACY

#### Cast item ability: mmoitemcastability🔗

This objective requires the player to cast an ability using an item. The only argument is the abilityID.

 1 mmoitemcastability LIFE_ENDER

#### Cast class skill: mmocorecastskill🔗

This objective requires the player to cast a class skill. The only argument is the abilityID.

 1 mmocorecastskill BACKSTAB

### Events🔗

#### Give MMOCore class experience: mmoclassexperience🔗

Adds experience to the players class. The amount can be a variable or a number. The level argument is optional and would convert the amount to levels instead of XP points.

 1 2 mmoclassexperience 150 mmoclassexperience 1 level

#### Give MMOCore profession experience: mmoprofessionexperience🔗

Adds experience in the specified player profession. The amount can be a variable or a number. The level argument is optional and would convert the amount to levels instead of XP points.

 1 2 mmoprofessionexperience MINING 100 mmoprofessionexperience CUSTOM_PROFESSION_NAME 1 level

#### Give class points: mmocoreclasspoints🔗

Gives the player class points. The amount can be a variable or a number.

 1 mmocoreclasspoints 1

#### Give skill points: mmocoreskillpoints🔗

Gives the player skill points. The amount can be a variable or a number.

 1 mmocoreskillpoints 10

#### Give attribute points: mmocoreattributepoints🔗

Gives the player attribute points. The amount can be a variable or a number.

 1 mmocoreattributepoints 2

#### Give attribute reallocation points: mmocoreattributereallocationpoints🔗

Gives the player attribute reallocation points. The amount can be a variable or a number.

 1 mmocoreattributereallocationpoints 1

#### Give MMOItem: mmoitemgive🔗

Gives the player predefined item. Default amount is one and can be set manually to a higher amount or a variable. The item can be adjusted to the players level by adding the scale option. If you want all items to be stacked together the singleStack option can be set. If the player doesn't have required space in the inventory, the items will be dropped on the ground. You can also specify the notify keyword to display a message to the player about what items have been received.

 1 mmoitemgive CONSUMABLE MANA_POTION

#### Take MMOItem: mmoitemtake🔗

Removes the specified item from the players inventory. Optional arguments are an amount and notify to send a notification to the player.

Which inventory types are checked is defined by the invOrder: option. You can use Backpack, Inventory and Armor there. One after another will be checked if multiple types are defined. The backpack will not work before 2.0's item rework since the current item system does not safe custom NBT data.

You can also specify notify keyword to display a simple message to the player about loosing items.

Amount can be a variable.

 1 2 3 4 5 mmoitemtake SWORD STEEL_SWORD mmoitemtake SWORD STEEL_SWORD notify mmoitemtake CONSUMABLE HEALTH_POTION amount:5 mmoitemtake CONSUMABLE BAKED_APPLES amount:2 invOrder:Backpack,Inventory mmoitemtake ARMOR KINGS_CHESTPLATE invOrder:Armor,Backpack

## MythicMobs🔗

Required MythicMobs version: 5.0.0 or above

### Objectives🔗

#### MobKill: mmobkill🔗

You need to kill the specified amount of MythicMobs to complete this objective. The first argument must be the mob's internal name (the one defined in your MythicMobs configuration). Multiple mob names must be comma seperated. You can optionally add the amount: argument to specify how many of these mobs need to be killed. It's also possible to add the optional arguments minLevel and maxLevel to further customize what mobs need to be killed. You can also add an optional neutralDeathRadiusAllPlayers argument to complete the objective for each nearby player within the defined radius when the mob is killed by any non-player source. Alternatively, you could use the deathRadiusAllPlayers argument to count all deaths of the specified mythic mob(s), no matter if it was killed by a non-player source or not. You can add a notify keyword if you want to send a notification to players whenever the objective progresses. You can also add an optional marked argument to only count kills marked with the mspawn event. The only supported variable for the marked argument is %player%.

This objective has three properties: amount, left and total. amount is the amount of mythic mobs already killed, left is the amount of mythic mobs still needed to kill and total is the amount of mythic mobs initially required.

Example

mmobkill SkeletalKnight amount:2 events:reward
mmobkill SnekBoss,SnailBoss,SunBoss amount:10 events:reward
mmobkill SnekBoss amount:2 minlevel:4 maxlevel:6 events:reward marked:DungeonBoss3
mmobkill dungeonDevil deathRadiusAllPlayers:30 events:reward

### Conditions🔗

#### MythicMob distance: mythicmobdistance🔗

Check whether the player is near a specific MythicMobs entity. The first argument is the internal name of the mob (the one defined in MythicMobs' configuration). The second argument is the distance to check, measured in block lengths in a circular radius.

Example

mythicmobdistance SkeletalKnight 7

### Events🔗

#### Spawn MythicMob: mspawnmob🔗

Parameter Syntax Default Value Explanation
location ULF The location to spawn the mob at.
name name:level MythicMobs mob name. A level must be specifed after a colon.
amount Positive Number Amount of mobs to spawn.
target Keyword False Will make the mob target the player.
private Keyword Disabled Will hide the mob from all other players until restart. This does not hide particles or block sound from the mob. Also see notes below.
marked marked:text None Marks the mob. You can check for marked mobs in mmobkill objective.
Example
events:
spawnBoss: mspawnmob 100;200;300;world MegaBoss:1 1 target
spawnKnights: mspawnmob 100;200;300;world SkeletalKnight:3 5
spawnPrivateDevil: mspawnmob 100;200;300;world Mephisto:1 5 target private marked:DungeonBoss3

Private Argument

The private argument requires some MythicMob setup for optimal use. It's best to use the private argument in combination with the target argument so the mob does not attack players that cannot see it. Additionally, the mob should be configured to never change its AI target using MythicMobs.

## PlaceholderAPI🔗

If you have this plugin, BetonQuest will add a betonquest placeholder to it and you will be able to use ph variable in your conversations.

### Placeholder: betonquest🔗

You can use all BetonQuest variables in any other plugin that supports PlaceholderAPI. You can even use BetonQuests conditions using the condition variable!
This works using the %betonquest_package:variable% placeholder. The package: part is the name of a package. The variable part is just a BetonQuest variable without percentage characters, like point.beton.amount.

Testing your placeholder is easy using this command:
/papi parse <PlayerName> %betonquest_<PackageName>:<VariableType>.<Property>%

 1 %betonquest_someGreatQuest:objective.killZombies.left%

### Variable: ph🔗

You can also use placeholders from other plugins in BetonQuest. Simply insert a variable starting with ph, the second argument should be the placeholder without percentage characters.

Example

%ph.player_item_in_hand%

## ProtocolLib🔗

### Freeze players: 'freeze'🔗

This event allows you to freeze player for the given amount of ticks:

freezeMe: "freeze 100" #Freezes the player for 5 seconds

## Quests🔗

Quests is another questing plugin, which offers very simple creation of quests. If you don't want to spend a lot of time to write advanced quests in BetonQuest but you need a specific thing from this plugin you can use Custom Event Reward or Custom Condition Requirement. Alternatively, if you have a lot of quests written in Quests, but want to integrate them with the conversation system, you can use quest event and quest condition.

### Condition Requirement (Quests)🔗

When adding requirements to a quest, choose "Custom requirement" and then select "BetonQuest condition". Now specify condition's name and it's package (like package.conditionName). Quests will check BetonQuest condition when starting the quest.

### Event Reward (Quests)🔗

When adding rewards to a quest or a stage, choose "Custom reward" and then select "BetonQuest event". Now specify event's name and it's package (like package.eventName). Quests will fire BetonQuest event when this reward will run.

### Conditions🔗

#### Quest condition: quest🔗

This condition is met when the player has completed the specified quest. The first and only argument is the name of the quest. It it contains any spaces replace them with _.

Example

quest stone_miner

### Events🔗

#### Quest: quest🔗

This event will start the quest for the player. The first argument must be the name of the quest, as defined in name option in the quest. If the name contains any spaces replace them with _. You can optionally add check-requirements argument if you want the event to respect this quest's requirements (otherwise the quest will be forced to be started).

Example

quest stone_miner check-requirements

## Shopkeepers🔗

### Conditions🔗

#### Shop amount: shopamount🔗

This condition checks if the player owns specified (or greater) amount of shops. It doesn't matter what type these shops are. The only argument is a number - minimum amount of shops.

Example

shopamount 2

### Events🔗

#### Open shop window: shopkeeper🔗

This event opens a trading window of a Villager. The only argument is the uniqueID of the shop. You can find it in Shopkeepers/saves.yml file, under uniqueID option.

Example

shopkeeper b687538e-14ce-4b77-ae9f-e83b12f0b929

## ProSkillAPI🔗

This adds support for ProMCTeam's SkillAPI fork. They still update SkillAPI.

### Conditions🔗

#### SkillAPI Class: skillapiclass🔗

This condition checks if the player has specified class or a child class of the specified one. The first argument is simply the name of a class. You can add exact argument if you want to check for that exact class, without checking child classes.

Example

skillapiclass warrior

#### SkillAPI Level: skillapilevel🔗

This condition checks if the player has specified or greater level is the specified class. The first argument is class name, the second one is the required level.

Example

skillapilevel warrior 3

## Skript🔗

BetonQuest can also hook into Skript. Firstly, to avoid any confusion, I will refere to everything here by name of the plugin (Skript event is something else than BetonQuest event). Having Skript on your server will enable using BetonQuest events and conditions in scripts, and also trigger them by BetonQuest event.

You can use cross-package paths using - between the packages. Example: player meets condition "default-Forest-Jack.Completed"

### Skript event triggered by BetonQuest skript event🔗

This entry will describe two things: Skript event and BetonQuest event.

1. Skript event - on [betonquest] event "id" - this is the line you use in your scripts to trigger the code. betonquest part is optional, and id is just some string, which must be equal to the one you specified in BetonQuest event.
2. BetonQuest event - skript - this event will trigger the above Skript event in your scripts. The instruction string accepts only one argument, id of the event. It have to be the same as the one defined in Skript event for it to be triggered.

Example

on betonquest event "concrete":

In BetonQuest
events:
fire_concrete_script: skript concrete

### Skript condition🔗

You can check BetonQuest conditions in your scripts by using the syntax player meets [betonquest] condition "id". betonquest is optional, and id is the name of the condition, as defined in the conditions section.

Example

player meets condition "has_ore"

In BetonQuest
has_ore: item iron_ore:5

### Skript event🔗

You can also fire BetonQuest events with scripts. The syntax for Skript effect is fire [betonquest] event "id" for player. Everything else works just like in condition above.

Example

fire event "give_emeralds" for player

In BetonQuest
events:
give_emeralds: give emerald:5

## Vault🔗

### Conditions🔗

#### Vault Money Condition: money🔗

Checks if the player has the specified amount of money.

conditions:
hasMoney: "money 1"
canAffordPlot: "money 10000"
isRich: "money 1000000"

Tip

Invert this condition if you want to check if the player has less money than specified. Example:

conditions:
isRich: "money 100000"
events:
giveSubsidy: "money +500 conditions:!isRich" #(1)!

1. If the player has less than 100000 money, the giveSubsidy event will be fired.

### Events🔗

#### Vault Money Event: money🔗

Deposits, withdraws or multiplies money in the player's account.

Parameter Syntax Default Value Explanation
amount Number The amount of money to add or remove. Use * to multiply.
notify Keyword: notify Disabled Display a message to the player when their balance is changed.
events:
sellItem: "money +100"
winLottery: "money *7 notify"

#### Change Permission (Groups): permission🔗

Adds or removes a permission or a group.

Parameter Syntax Default Value Explanation
action add or remove Whether to add or remove the thing specified using the following arguments.
type perm or group Whether to use a permission or permission group.
name The name of the permission. The name of the permission or group to add.
world The name of the world. Global You can limit permissions to certain worlds only. If no world is set the permission will be set everywhere (global).
events:
allowFly: "permission add perm essentials.fly"
joinBandit: "permission add group bandit"
leaveBandit: "permission remove group bandit"

### Variables🔗

#### Vault Money Variable: money🔗

Use %money.amount% for showing the player's balance. Use %money.left:500% for showing the difference between the player's balance and the specified amount of money.

events:
notifyBalance: "notify You have %money.amount%$!" notifyNotEnough: "notify You still need %money.left:10000%$ to buy this plot."

## WorldEdit or FastAsyncWorldEdit🔗

### Events🔗

#### Paste schematic: paste🔗

persistent, static

This event will paste a schematic at the given location. The first argument is a location and the second one is the name of schematic file. The file must be located in WorldEdit/schematics or FastAsyncWorldEdit/schematics and have a name like some_building.schematic. An optional noair can be added to paste ignoring air blocks. If you have only a .schem schematic, simply append .schem to the schematic name.

Example
events:
pasteCastle: "paste 100;200;300;world castle noair"

## WorldGuard🔗

### Conditions🔗

#### Inside Region: region🔗

This condition is met when the player is inside the specified region. The only argument is the name of the region.

Example
conditions:
inCastle: "region castle"

### Objectives🔗

#### Enter Region: region🔗

To complete this objective you need to enter WorldGuard region with specified name. A required argument is the name of the region and you may also pass an optional entry and/or exit to only trigger when entering or exiting a region instead of anytime inside a region.

Example
objectives:
deathZone: "region deathZone entry events:kill"


text:
# Integrating $\frac{\partial f(x,y)}{\partial y(x)}$ with respect to x

I don't know how to apply Leibniz's rule for this integrand. I believe there is a substitution to allow me to express this integral differently, but the partial being a function of what we're integrating by is confusing me.

$\int^{b}_{a} \frac{\partial f(x,y)}{\partial y(x)} dx$

Knowns are that $[a,b]$ is a subset of the domain of $x$ and that $y$ is a function of $x$.

Can someone please suggest something to get me started, or ask me a question that may get my brain going in the right direction?

I attempted working with $\int^{b}_{a} \frac{\partial f(x,y)}{\partial x} \frac{dx}{dy}dx$ by expanding the partial according to the chain rule, but I didn't think it helped me.

Edit: I didn't think the above would help because what exactly does $[f(b,y) - f(a,y)]\frac{dx}{dy}$ mean? I don't know how to interpret the factor $\frac{dx}{dy}$.

Last edited:

HallsofIvy
Homework Helper
I don't understand your notation. $\partial f/\partial y$ is defined as the derivative of y, treating x as a constant. With that definition, $\partial f/\partial y(x)$ is meaningless. If y is a function of x and x is a constant, then y is a constant, not a variable and we cannot differentiate with respect to it. And the problem you are working on, $\int_a^b\frac{\partial f}{\partial x}\frac{dx}{dy}dx$ does not imply that. You are, I think, using the chain rule incorrectly. You want, of course, "df" so that you can integrate. But the chain rule gives $df= \left(\frac{\partial f}{\partial x}\frac{dx}{dy}+ \frac{\partial f}{\partial y}\right)dy$, not at all what you have- in addition to an additional term, you end with "dx", not "dy".

The fundamental problem is that your integral, $\int_a^b\frac{\partial f}{\partial x}\frac{dx}{dy}dx$ has an "extra" $\frac{1}{dy}$ that just doesn't make sense in an integral.

I don't know how to apply Leibniz's rule for this integrand.
You can apply it but I don't think it will make much difference. Note:

$$\frac{\partial}{\partial y}\int_a^b f(x,y)dx=\int_a^b \frac{\partial f}{\partial y} dx$$

Last edited:
My original equation was taken from something with messy notation, and I lost some subscripts while working part of the larger question out. So I gave you a poorly framed question to answer -- I'm sorry.

In my original question, the function $f(x,y)$ is vector valued, and the integrand is with respect to $dx_{1}[$.

Since I just noticed how sloppy my notation is getting, I'll go back through my problem with more precision before I ask another question.

My original equation was taken from something with messy notation, and I lost some subscripts while working part of the larger question out. So I gave you a poorly framed question to answer
. . . then I want my money back.

. . . then I want my money back.
Don't worry, it's... uh... already in the mail! :uhh:


text:
Plot Candlestick Charts in Research

Since Quantopian doesn't support matplotlib.finance yet, I hacked out a candlestick chart function purely using pyplot. It makes a candlestick chart from the dataframe returned by get_pricing. I wrote this to use in my research notebooks and it has made me happier, and if you like looking at technical charts this is golden. Cheers!

Features:
Works with day or minute data
Optional volume bars
Customizable candle colors
Technical Indicators

583
14 responses

Update: Added support for indicators (overlays or supplemental subplots).

ex.

RSI = talib.RSI(last_hour['close_price'].as_matrix())
plot_candles(last_hour,
title='1 minute candles + Bollinger Bands + RSI',
overlays=[upper, middle, lower],
technicals=[RSI],
technicals_titles=['RSI'])

235
Click to load notebook preview

This is really neat, and will be helpful for so many I'm sure. Thanks for sharing!

Awesome! I feel like you've given me back hours of my life. Now I can visualize some of the data as I build my backtests WITHOUT having to go to another platform.

I've been playing with this candlestick charting code of yours a little more, and I'm very impressed. It was easy to adopt into some studies of my own. I have a question though: have you tried formatting labels the x-axis? I'm working on some charts with 1-minute data, and currently it plots all of the timestamps along the x-axis. There is so much overlap that you cannot read the labels.

I tried formatting the timestamps and specifying major labels (ax1.set_major_locator & ax1.set_major_formatter), but I get an error when I try to import dates from matplotlib:

InputRejected:
Importing dates from matplotlib raised an ImportError. No modules or attributes with a similar name were found.

Evidently this is not one of the libraries that Quantopian supports. Have you played with this label formatting feature at all? Have you found an acceptable alternative that can clean up the chart a little bit?

5
Click to load notebook preview

Hi, great work!

Due to some reasons research won't let you import dates from matplotlib, but you can still use it by:

import matplotlib
matplotlib.dates

If fixed this issue in the attachted notebook as well as a missing .xaxis. Unfortunately one can't read any of the labels in a minute chart :D

49
Click to load notebook preview

Sebastian, thanks! import matplotlib and matplotlib.dates works great! I'd like to use this, however I could not figure out how to get locators to do what I want, so I sliced the index instead to get every other minute, every 5 minutes, etc... I may come back to this and try again. Also, for multiple-day pricing, do you know if we can get DayLocator to skip weekends?

Even with limited x labels, minute data is still unreadable, so to view a day or more of intraday history I recommend aggregating into 2,5, or 15-minute bars. Example included.

Here is my latest, including:

• More readable dates and times by default
• max_x_ticks parameter to limit the number of x axis major ticks/labels
• Filled / hollow bars in addition to color filled
• Respects time zone when formatting intraday data
• Added example aggregating price data into 5-minute bars
120
Click to load notebook preview

Thanks for sharing, that is fantastic ! And, a great example of how to use TA-LIB, Thank You.

Thank you SO, SO much! Fantastic work and a massive time saver!

Thank you Daniel. I have added code here so that you may also view custom timeframes: those other than minute or daily. Supported are: minute, hour, day, week, month, year. And you can specify how many. On display is the '15m'. This is a work in progress, so please feel free to critique the code especially for bad behavior.

-JJ

126
Click to load notebook preview

JJ, thanks! The time bar aggregation functions are great, this is very helpful. Selecting the right time-date range and scale is a recurring pain point. Once I get some free time I'd like to try to get another update out that integrates all of these contributions.

Glad you like it. You may take my examples and walk.

53
Click to load notebook preview

@Daniel Treiman, thanks for sharing, did you were able to plot the first section of the day? the indicator plotting is not showing at the beginning of the chart :(

@Erick Gomez It depends on if you have data from before that time. I got around that by giving talib more data then what I wanted to plot then truncating the data outside the plot.

upper, middle, lower = talib.BBANDS(last_hour['close_price'].as_matrix())
plot_candles(last_hour, title = '1 minute candles w/ Bollinger Bands', overlays = [upper, middle, lower])

VS

upper, middle, lower = talib.BBANDS(ym_minute_pricing['close_price'].as_matrix())
plot_candles(last_hour, title = '1 minute candles w/ Bollinger Bands', overlays = [upper[-60:], middle[-60:], lower[-60:]])

21
Click to load notebook preview