# Calculate probabilistic impact yearset#

This module generates a yearly impact `yimp`

object which contains probabilistic annual impacts for a specified amount of years (`sampled_years`

). The impact values are extracted from a given impact `imp`

object that contains impact values per event. The amount of `sampled_years`

can be specified as an integer or as a list of years to be sampled for. The amount of events per sampled year (`events_per_year`

) are determined with a Poisson distribution centered around n_events per year (`lam`

= sum(event_impacts.frequency). Then, the probabilistic events occurring in each sampled year are sampled uniformly from the input `imp`

object and summed up per year. Thus, the `yimp`

object contains the sum of sampled (event) impacts for each sampled year. In contrast to the expected annual impact (eai), an `yimp`

object contains an impact for EACH sampled year and this value differs among years. The number of events_per_year and the selected_events are saved in a sampling vector (`sampling_vect`

).

The function impact_yearsets performs all these computational steps, taking an `imp`

and the number of sampled_years (`sampled_years`

) as input. The output of the function is the `yimp`

object and the `sampling_vect`

.
Moreover, a `sampling_vect`

(generated in a previous run) can be provided as optional input and the user can define `lam`

and decide whether a correction factor shall be applied (the default is applying the correction factor).
Reapplying the same sampling_vect does not only allow to reproduce the generated `yimp`

, but also for a physically consistent way of sampling impacts caused by different hazards.
The correction factor that is applied when the optional input `correction_fac`

= True is a scaling of the computed `yimp`

that assures that the eai(`yimp`

) = eai(`imp`

).

To make the process more transparent, this tutorial shows the single computations that are performed when generating an `yimp`

object for a dummy event_impacts object.

```
import numpy as np
import climada.util.yearsets as yearsets
from climada.engine import Impact
# dummy event_impacts object containing 10 event_impacts with the values 10-110
# and the frequency 0.2 (Return period of 5 years)
imp = Impact()
imp.at_event = np.arange(10,110,10)
imp.frequency = np.array(np.ones(10)*0.2)
# the number of years to sample impacts for (length(yimp.at_event) = sampled_years)
sampled_years = 10
# sample number of events per sampled year
lam = np.sum(imp.frequency)
events_per_year = yearsets.sample_from_poisson(sampled_years, lam)
events_per_year
```

```
array([2, 2, 2, 0, 4, 5, 4, 2, 3, 1])
```

```
# generate the sampling vector
sampling_vect = yearsets.sample_events(events_per_year, imp.frequency)
sampling_vect
```

```
[array([8, 3]),
array([7, 0]),
array([4, 6]),
array([], dtype=int32),
array([5, 9, 1, 2]),
array([1, 6, 0, 7, 2]),
array([4, 9, 5, 8]),
array([9, 8]),
array([5, 3, 4]),
array([1])]
```

```
# calculate the impact per year
imp_per_year = yearsets.compute_imp_per_year(imp, sampling_vect)
imp_per_year
```

```
[130, 90, 120, 0, 210, 210, 300, 190, 150, 20]
```

```
# calculate the correction factor
correction_factor = yearsets.calculate_correction_fac(imp_per_year, imp)
correction_factor
```

```
0.7746478873239436
```

```
# compare the resulting yimp with our step-by-step computation without applying the correction factor:
yimp, sampling_vect = yearsets.impact_yearset(imp, sampled_years=list(range(1,11)), correction_fac=False)
print('The yimp.at_event values equal our step-by-step computed imp_per_year:')
print('yimp.at_event = ', yimp.at_event)
print('imp_per_year = ', imp_per_year)
```

```
The yimp.at_event values equal our step-by-step computed imp_per_year:
yimp.at_event = [90, 240, 150, 70, 40, 90, 60, 90, 170, 110]
imp_per_year = [130, 90, 120, 0, 210, 210, 300, 190, 150, 20]
```

```
# and here the same comparison with applying the correction factor (default settings):
yimp, sampling_vect = yearsets.impact_yearset(imp, sampled_years=list(range(1,11)))
print('The same can be shown for the case of applying the correction factor.'
'The yimp.at_event values equal our step-by-step computed imp_per year:')
print('yimp.at_event = ', yimp.at_event)
print('imp_per_year = ', imp_per_year/correction_factor)
```

```
The same can be shown for the case of applying the correction factor.The yimp.at_event values equal our step-by-step computed imp_per year:
yimp.at_event = [ 54.54545455 47.72727273 95.45454545 109.09090909 0.
40.90909091 27.27272727 0. 109.09090909 27.27272727]
imp_per_year = [167.81818182 116.18181818 154.90909091 0. 271.09090909
271.09090909 387.27272727 245.27272727 193.63636364 25.81818182]
```