Rfactor calculates rainfall erosivity from timestamped precipitation records.
The package implements a workflow for:
The package does not calculate the remaining USLE or RUSLE factors and does not perform spatial interpolation or mapping.
The rainfall-event and erosivity methods implemented in Rfactor were empirically compared with RIST 3.99.10 using controlled synthetic rainfall records and real precipitation records.
RIST (Rainfall Intensity Summarization Tool) is a rainfall-analysis program developed and distributed by the U.S. Department of Agriculture, Agricultural Research Service (USDA ARS). The official RIST software page is maintained by USDA ARS.
Unless explicitly stated otherwise, statements about RIST behaviour in this vignette refer specifically to the RIST 3.99.10 fixed-interval mode used during package validation. They should not be interpreted as claims about every RIST version or input mode.
For an individual rainfall event, Rfactor calculates EI30 as
[ EI_{30} = E I_{30}, ]
where:
Event EI30 therefore has units of
[ . ]
The rainfall-runoff erosivity factor used by USLE and RUSLE is a long-term climatic quantity derived from erosive rainfall events over an appropriate historical record.
rf_calculate_rfactor() does not automatically estimate that climatological long-term mean annual quantity. It sums contributing event EI30 values within a requested calendar month or year.
Consequently, a yearly result from rf_calculate_rfactor() is the erosivity calculated from the events available for that year.
Multi-year mean monthly or annual rainfall erosivity can subsequently be calculated from these period totals with rf_calculate_mean_rfactor().
The averaging operation does not determine whether the underlying rainfall record is climatologically complete or representative. A representative long-term R-factor therefore still requires an appropriate multi-year record and a separate assessment of completeness and representativeness.
Rainfall events are identified from observations containing positive rainfall.
For the fixed-interval behaviour validated against RIST 3.99.10, consecutive positive-rainfall observations belong to the same event when their elapsed separation is less than or equal to the configured storm-break duration.
A new event begins when
[ t > t_{}. ]
With the default
[ t_{} = 6 , ]
the rule is therefore:
Any positive rainfall observation resets the storm-break clock.
The storm-break duration is configurable through storm_break_hours.
RIST exposes a precipitation value associated with storm-break configuration. The Rfactor setting is named storm_break_precip_mm and defaults to 1.27 mm.
A dedicated synthetic experiment was performed to determine whether this value affected fixed-interval storm grouping.
The same rainfall input was processed using RIST storm-break precipitation values of:
[ 0, 0.20, 1.27, 2.00, 10.00 . ]
The experiment included:
All tested precipitation settings produced identical event grouping.
The six experimental cases produced seven events in total: the control case containing a gap greater than six hours split into two events, while every case containing intermediate positive rainfall remained one event.
The validated fixed-interval Rfactor algorithm therefore uses storm_break_hours for event separation and retains storm_break_precip_mm as RIST configuration metadata.
This conclusion is deliberately limited to the tested RIST 3.99.10 fixed-interval behaviour.
Rfactor does not require a rainfall source file to contain every expected time step.
This is important for historical pluviograph records and timestamped rainfall archives in which dry periods may be absent.
The input reader preserves the observations supplied by the user. It does not create a complete rainfall series over the whole period of record.
Event identification operates from the timestamps containing positive rainfall. Once an event has been identified, a regular time grid is reconstructed only between its first and last positive-rainfall observations.
Expected positions absent from the supplied source record are assigned zero recorded rainfall for the calculation.
This treatment preserves elapsed time for rolling-intensity and kinetic-energy calculations without generating long sequences of explicit zero-rainfall rows between independent events.
An inserted zero does not assert that the corresponding interval was actually observed and dry. It is the computational representation used for a timestamp position absent from the supplied record.
The package does not estimate missing precipitation and does not assess whether the rainfall archive is climatologically complete.
Completely absent months or years are not created or imputed.
rf_max_intensity() calculates continuous rolling maximum rainfall intensity.
For a requested duration (D),
[ I_D = P_{D,} , ]
where (P_{D,}) is the greatest precipitation depth found in a continuous rolling window of duration (D), expressed in minutes.
Windows are not restricted to fixed clock boundaries.
For example, a 30-minute rainfall period beginning at 12:20 is evaluated as a complete 30-minute window even though it crosses the conventional 12:30 clock boundary.
Partial rolling windows are permitted when an event is shorter than the requested duration.
For example, if 10 mm occurs during a 10-minute event, its 30-minute intensity is calculated as
[ I_{30} = 10 = 20 . ]
This behaviour was reproduced by RIST 3.99.10 during fixed-interval validation.
A requested rainfall-intensity duration must be an exact multiple of the rainfall observation interval.
Examples include:
| Source interval | Compatible commonly used durations |
|---|---|
| 1 min | 5, 10, 15, 20, 30, 60 min |
| 5 min | 5, 10, 15, 20, 30, 60 min |
| 10 min | 10, 20, 30, 60 min |
| 15 min | 15, 30, 60 min |
| 30 min | 30, 60 min |
EI30 requires a genuine 30-minute intensity. The rainfall interval must therefore divide 30 minutes exactly.
Data coarser than 30 minutes cannot resolve a genuine I30.
This also means that it would be incorrect to describe Rfactor as supporting every possible temporal resolution from 1 through 30 minutes. Validation was performed specifically at 1, 5, 10, 15, and 30 minutes.
For each fixed rainfall interval, precipitation depth is converted to rainfall intensity:
[ i_k = P_k , ]
where:
Unit rainfall energy (e_k) is calculated from the selected kinetic-energy equation in MJ/ha/mm.
Total event kinetic energy is
[ E = _k e_k P_k. ]
Rfactor provides three kinetic-energy equations.
The default equation is
[ e = 0.29 . ]
The equation identifier is:
"brown_foster_1987"The implemented equation is
[ e = 0.29 . ]
The equation identifier is:
"mcgregor_1995"The RIST 3.99.10 graphical interface displayed the exponential coefficient as 0.08 during validation. However, a dedicated numerical experiment at several rainfall intensities showed that RIST’s calculated energy values agreed with the 0.082 formulation used by Rfactor.
The package therefore uses 0.082.
For positive rainfall intensity, the implemented formulation is
[ e = 0.119 + 0.0873_{10}(i). ]
The equation identifier is:
"laws_parsons_1943"At zero rainfall intensity, the logarithmic expression is undefined. A zero-rainfall interval contributes no kinetic energy, so Rfactor assigns zero unit energy to that interval.
A dedicated RIST experiment included a constant rainfall intensity of 120 mm/h. RIST 3.99.10 applied the equation without a 76.2-mm/h upper intensity cap in that test.
Rfactor therefore does not impose such a cap.
Three synthetic 30-minute constant-intensity events were evaluated at:
All omission criteria were disabled so that the kinetic-energy calculation could be compared independently.
The selected results were:
| Equation | Intensity (mm/h) | Rfactor E (MJ/ha) | RIST E (MJ/ha) |
|---|---|---|---|
| Brown and Foster | 6 | 0.405951 | 0.406 |
| Brown and Foster | 60 | 8.388134 | 8.388 |
| Brown and Foster | 120 | 17.368946 | 17.369 |
| McGregor et al. | 6 | 0.487018 | 0.487 |
| McGregor et al. | 60 | 8.654278 | 8.654 |
| McGregor et al. | 120 | 17.399333 | 17.399 |
| Laws and Parsons | 6 | 0.560798 | 0.561 |
| Laws and Parsons | 60 | 8.226978 | 8.227 |
| Laws and Parsons | 120 | 18.030751 | 18.031 |
The 120-mm/h Laws–Parsons result was particularly important because it demonstrated empirically that the tested RIST calculation did not use the previously suspected 76.2-mm/h cap.
Rainfall-event omission is configurable.
The default precipitation condition is
[ P < 12.70 ]
and the default intensity condition is
[ I_{15} < 25.40 . ]
Both criteria are enabled by default and
omit_logic = "all"means that an event is omitted only when both enabled conditions are satisfied.
Thus, under the default configuration:
[ = (P < 12.70) (I_{15} < 25.40). ]
The inequalities are strict.
Consequently:
The package uses a small floating-point tolerance when making these strict comparisons so that numerical representation error near an exact threshold does not change event classification.
The two criteria can be independently enabled or disabled.
With
omit_logic = "any"an event is omitted when any enabled criterion is satisfied.
With only one criterion enabled, only that criterion is evaluated.
With
omit_precip = FALSE
omit_intensity = FALSEall identified rainfall events are retained.
For a disabled criterion, its corresponding condition column in the event output is NA, meaning that the condition was not evaluated.
The intensity omission duration can be selected from 5, 10, 15, 30, or 60 minutes, provided it is compatible with the rainfall temporal resolution and is included among the calculated intensity durations.
A dedicated edge-case experiment showed that RIST 3.99.10 assigned:
[ E = 0 ]
and
[ EI_{30} = 0 ]
to rainfall events represented by only one fixed-interval rainfall record.
Rfactor makes this behaviour optional.
The default is:
single_record_energy = "calculate"which applies the selected energy equation normally.
To reproduce the observed RIST 3.99.10 behaviour, use:
single_record_energy = "rist_zero"This is the principal reason that the complete set of Rfactor defaults should not be described as exactly identical to RIST defaults.
A synthetic continuous 1-minute rainfall record was constructed to test the principal methodological rules against RIST.
The cases included:
In the canonical comparison, Rfactor and RIST identified the same events and the same six erosive events.
For the complete synthetic comparison:
| Quantity | Rfactor | RIST |
|---|---|---|
| Number of identified events | 11 | 11 |
| Number of erosive events | 6 | 6 |
| All-event kinetic energy (MJ/ha) | 32.089914 | 32.089 |
| All-event EI30 | 1193.089094 | 1193.089 |
| Erosive-event kinetic energy (MJ/ha) | 24.751309 | 24.751 |
| Erosive-event EI30 | 1119.703043 | 1119.703 |
Differences shown here are consistent with the numerical precision reported in the RIST output.
A second synthetic experiment tested fixed rainfall intervals of:
[ 1, 5, 10, 15, 30 . ]
The same underlying 1-minute rainfall record was aggregated before being processed independently by Rfactor and RIST.
Two 60-minute events were used:
The variable event contained four consecutive 15-minute intensity periods of:
[ 12, 60, 24, 48 . ]
Temporal aggregation intentionally changed its I30.
For the variable event:
| Resolution | Precipitation (mm) | Energy (MJ/ha) | I30 (mm/h) | EI30 |
|---|---|---|---|---|
| 1 min | 36 | 9.335652 | 42 | 392.097396 |
| 5 min | 36 | 9.335652 | 42 | 392.097396 |
| 10 min | 36 | 9.289595 | 40 | 371.583812 |
| 15 min | 36 | 9.335652 | 42 | 392.097396 |
| 30 min | 36 | 9.197481 | 36 | 331.109327 |
This demonstrates that preserving total precipitation does not imply preserving erosivity. Temporal aggregation changes the intensity distribution and can therefore change both kinetic energy and EI30.
The 1-, 5-, and 30-minute cases agreed with RIST to the reported precision.
For the variable synthetic event, RIST 3.99.10 showed small additional differences at 10- and 15-minute resolution:
| Resolution | Rfactor precipitation (mm) | RIST precipitation (mm) | Rfactor I30 | RIST I30 | Rfactor EI30 | RIST EI30 |
|---|---|---|---|---|---|---|
| 10 min | 36.00 | 36.18 | 40.000 | 40.553 | 371.584 | 376.724 |
| 15 min | 36.00 | 36.13 | 42.000 | 42.503 | 392.097 | 396.796 |
Rfactor preserves the rainfall totals produced directly by aggregation of the synthetic source data. The package does not add precipitation in order to reproduce these RIST-specific differences.
The experiment therefore supports fixed-interval calculations at the tested resolutions while also documenting that exact numerical identity with RIST should not be assumed for every temporal resolution.
Synthetic experiments isolate individual algorithmic decisions, but the package was also tested with real precipitation archives from Meteo Romania (National Meteorological Administration).
The original Meteo Romania precipitation records are private and are not distributed with the package or public source repository.
Validation with available 1-minute Bucuresti-Filaret rainfall included complete and gapped portions of the 2025 record.
For May 2025:
A July-to-September subset contained 18 identified events, all of which were non-erosive under the configured criteria.
Across all available 2025 observations:
A small discrepancy occurred for one June event involving a short partial rolling window and RIST-reported rainfall precision. The Rfactor calculation retained the rainfall values represented by the source data rather than introducing a RIST-specific adjustment.
A historical sparse pluviograph record from Vladeasa 1800 was used to test the sparse-data workflow.
The source does not contain every one-minute timestamp. Long dry periods may be absent, while some explicit zero-rainfall observations are retained.
Rfactor identified:
Event dates, precipitation, rolling intensities, kinetic energy, EI30, and erosive classification agreed with the corresponding RIST comparison to the displayed precision.
Selected monthly erosivity totals were:
| Month | R |
|---|---|
| June | 321.48 |
| July | 211.45 |
| August | 293.88 |
| September | 84.26 |
These values agreed with the displayed RIST monthly event-EI30 totals.
This validation was particularly important because it demonstrated that the event-based reconstruction approach can operate on a sparse historical pluviograph archive without requiring the entire source period to be expanded to a minute-by-minute rainfall table.
rf_calculate_rfactor() uses all supplied event rows to establish which calendar periods are represented.
Only events satisfying
erosive == TRUEand having a non-missing EI30 value contribute to R and to n_events.
A represented month containing rainfall events but no contributing erosive events is returned as
R = 0
n_events = 0
A month or year containing no event rows at all is not generated.
Events are assigned to a calendar period according to event_start. An event crossing a month or year boundary is therefore assigned in full to the period in which it began.
rf_calculate_mean_rfactor() operates on monthly or yearly R-factor values, typically produced by rf_calculate_rfactor().
For yearly input, the multi-year mean is
[ {R} = _{y=1}^{n} R_y, ]
where (R_y) is an available yearly rainfall-erosivity value and (n) is the number of non-missing yearly values.
For monthly input, a separate mean is calculated for each calendar month:
[ {R}m = {y=1}^{n_m} R_{y,m}, ]
where (R_{y,m}) is the rainfall erosivity for calendar month (m) in year (y), and (n_m) is the number of non-missing values available for that month.
Missing R values are excluded from the calculation. Genuine zero values are retained because R = 0 represents an available period with no contributing erosive events.
For example,
year R
2020 800
2021 900
2022 NA
2023 700
2024 0
produces
mean_R = 600
n_years = 4
because the missing value is excluded but the genuine zero remains in the calculation.
For monthly input, n_years is calculated separately for each calendar month. Different months can therefore have different numbers of contributing years.
Completely absent years or month-year combinations are not generated or imputed. A represented calendar month for which all supplied R-factor values are missing is returned with mean_R = NA and n_years = 0.
The mean annual R-factor is calculated directly from yearly R-factor values. It is not calculated by summing the twelve multi-year monthly means. Summing monthly means can give a different result when data availability differs among calendar months.
The function performs arithmetic averaging only. It does not assess whether individual monthly or yearly values were derived from complete rainfall records and does not determine whether the resulting mean is climatologically representative.
These averaging rules are protected by the package test suite. They are not derived from, or intended to reproduce, a separate RIST averaging algorithm.
The validation performed for Rfactor provides empirical evidence that the implemented methods reproduce the intended rainfall-erosivity calculations and closely reproduce RIST 3.99.10 for the tested fixed-interval cases.
It does not establish that:
Scientific interpretation of the resulting erosivity values therefore remains dependent on the quality, temporal resolution, completeness, and representativeness of the rainfall observations supplied by the user.
The public source repository contains synthetic validation scripts and their generated comparison inputs under data-raw/.
These include dedicated experiments for:
The real Meteo Romania source precipitation files and their detailed real-data validation outputs are not distributed.
The package test suite additionally protects the numerical behaviour of the public functions, including strict omission boundaries, configurable storm-break duration, energy equations, temporal-resolution compatibility, sparse-event handling, period aggregation, and multi-year averaging rules.
Brown, L. C., and G. R. Foster. 1987. Storm erosivity using idealized intensity distributions. Transactions of the ASAE 30(2): 379-386. doi: 10.13031/2013.31957.
Laws, J. O., and D. A. Parsons. 1943. The relation of raindrop-size to intensity. Transactions, American Geophysical Union 24(2): 452-460. doi: 10.1029/TR024i002p00452.
McGregor, K. C., R. L. Bingner, A. J. Bowie, and G. R. Foster. 1995. Erosivity index values for northern Mississippi. Transactions of the ASAE 38(4): 1039-1047. doi: 10.13031/2013.27921.
Renard, K. G., G. R. Foster, G. A. Weesies, D. K. McCool, and D. C. Yoder, coordinators. 1997. Predicting Soil Erosion by Water: A Guide to Conservation Planning with the Revised Universal Soil Loss Equation (RUSLE). U.S. Department of Agriculture, Agriculture Handbook No. 703.
U.S. Department of Agriculture, Agricultural Research Service. RIST: Rainfall Intensity Summarization Tool. Available at: https://www.ars.usda.gov/southeast-area/oxford-ms/national-sedimentation-laboratory/watershed-physical-processes-research/research/rist/rist-rainfall-intensity-summarization-tool/.
U.S. Department of Agriculture, Agricultural Research Service. Using RIST to Convert Rainfall Records into Erosion Model Inputs. Available at: https://www.ars.usda.gov/southeast-area/oxford-ms/national-sedimentation-laboratory/water-quality-and-ecology-research/docs/using-rist-to-convert-rainfall-records-into-erosion-model-inputs/.
Wischmeier, W. H., and D. D. Smith. 1978. Predicting Rainfall Erosion Losses: A Guide to Conservation Planning. U.S. Department of Agriculture, Agriculture Handbook No. 537.