## kernels.ODPBootstrapDiagonal


Next year's diagonal from an England-Verrall ODP residual bootstrap.


Usage

``` python
kernels.ODPBootstrapDiagonal(
    process="od_poisson", process_noise=True, resample_residuals=True
)
```


The generator behind R's `CDR.BootChainLadder`: resample DoF-adjusted Pearson residuals into a pseudo-triangle, refit the chain ladder on it, project the next diagonal off that refit and add over-dispersed Poisson process noise. The mechanics are `kernels/odp_bootstrap.py`, where they can be read against R's source; this class is the CDR-side wiring.

`process` is the noise law (`od_poisson` = `phi * Poisson(mu/phi)`, the England-Verrall construction `england_verrall_odp.predict` also draws, or `gamma`; both have mean `mu` and variance `phi * mu`). Note R's `BootChainLadder` defaults to `gamma`, so a like-for-like comparison with R needs `process="gamma"` set explicitly.

`resample_residuals` and `process_noise` are the two risk-source switches - R's `NYCost` arm is both on, its `NYParamDist` arm is `process_noise=False`, and the process-only arm R derives by subtraction is `resample_residuals=False`. Turning both off is refused: every draw would be identical, which is a degenerate answer rather than a meaningful with-and-without comparison.

**The family limit is real and is refused by name.** The ODP quasi-likelihood is defined on non-negative increments, so a cohort with a negative paid increment cannot be bootstrapped - about half the Schedule P mart, the same limitation `england_verrall_odp` carries. [check()](kernels.MackDiagonal.md#ibnr.kernels.MackDiagonal.check) raises there and says so, and points at the `mack` generator, which has no such restriction.


## Parameter Attributes


`process: str = ``"od_poisson"`  

`process_noise: bool = ``True`  

`resample_residuals: bool = ``True`  


## Methods

| Name | Description |
|----|----|
| [check()](#check) | Build the deterministic half of the bootstrap and discard it: it is |

------------------------------------------------------------------------


#### check()


Build the deterministic half of the bootstrap and discard it: it is


Usage

``` python
check(fit)
```


where the negative-increment refusal and the degrees-of-freedom check live, and both are cheap enough to pay twice.
