# shrinkage::Link

Shrinkage for Rust · 0.3.0

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

```rust
pub trait Link
```

A differentiable, monotone link between a mean and a linear predictor. 

Implementations must keep the forward and inverse operations consistent on their domains. Derivatives are with respect to the predictor. Override the log-scale helpers when ordinary probabilities or derivatives lose tail bits. Runtime callbacks belong outside observation loops; Rust links use static dispatch and do not need to implement `Clone` or `Copy`. 

<a id="methods"></a>

## Methods

<a id="method-initial_predictor"></a>

### `initial_predictor`

```rust
fn initial_predictor(&self) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Supply a fallback predictor when family reference means are unavailable. 

<a id="method-initial_predictor-documentation-errors"></a>

#### Errors

Reject configurations without a finite initial predictor. 

<a id="method-inverse_link"></a>

### `inverse_link`

```rust
fn inverse_link(&self, eta: f64) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Transform a finite predictor to a mean. 

<a id="method-inverse_link-documentation-errors"></a>

#### Errors

Reject predictors outside the link domain or nonfinite arithmetic. 

<a id="method-inverse_link_derivative"></a>

### `inverse_link_derivative`

```rust
fn inverse_link_derivative(&self, eta: f64) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Evaluate `d mu / d eta`, retaining its sign even after underflow. 

<a id="method-inverse_link_derivative-documentation-errors"></a>

#### Errors

Reject invalid predictors or nonfinite arithmetic. 

<a id="method-link"></a>

### `link`

```rust
fn link(&self, mu: f64) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Transform a mean to a finite predictor. 

<a id="method-link-documentation-errors"></a>

#### Errors

Reject means outside the link domain or nonfinite arithmetic. 

<a id="method-link_from_log_probabilities"></a>

### `link_from_log_probabilities`

```rust
fn link_from_log_probabilities(
    &self,
    log_p: f64,
    _log_q: f64
) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Transform normalized log probabilities to a predictor. 

Override the default mean conversion to retain rare probability tails. 

<a id="method-link_from_log_probabilities-documentation-errors"></a>

#### Errors

Reject invalid means or a nonfinite predictor. 

<a id="method-log_abs_inverse_link_derivative"></a>

### `log_abs_inverse_link_derivative`

```rust
fn log_abs_inverse_link_derivative(&self, eta: f64) -> Result<f64, FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Return `log(abs(d mu / d eta))`; negative infinity represents zero. 

<a id="method-log_abs_inverse_link_derivative-documentation-errors"></a>

#### Errors

Reject invalid predictors or derivatives. 

<a id="method-log_probabilities"></a>

### `log_probabilities`

```rust
fn log_probabilities(&self, eta: f64) -> Result<(f64, f64), FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Return `log(mu)` and `log(1 - mu)` for binomial calculations. 

<a id="method-log_probabilities-documentation-errors"></a>

#### Errors

Reject predictors without an interior probability or finite log tails. 

<a id="method-valid_eta"></a>

### `valid_eta`

```rust
fn valid_eta(&self, eta: f64) -> bool
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Test the predictor domain without evaluating the loss. 

<a id="method-validate"></a>

### `validate`

```rust
fn validate(&self) -> Result<(), FitError>
```

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

Validate parameters independently of any predictor-domain check. 

<a id="method-validate-documentation-errors"></a>

#### Errors

Reject invalid link configuration. 

<a id="impl-ed555e85dea1b589538d12b0260fac1de0e1ec6a3a2ae34f615145d49e912eec"></a>

## [Implementation of Link](<b8cca71c162ec648303732b0a3d9f0a7d17daee56916c57ec982c034c675738f>)

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

```rust
impl Link for Identity
```

<a id="impl-2f04551a2514283083aa46de0bd5b7567d452acb7cb8a8fe1c16d2503d4ac24c"></a>

## [Implementation of Link](<b8cca71c162ec648303732b0a3d9f0a7d17daee56916c57ec982c034c675738f>)

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

```rust
impl Link for Logit
```

<a id="impl-eff19227ea9f7da4037b81acb44fb4b3c7a3a41469a83513d12ed1a85cc7dee1"></a>

## [Implementation of Link](<b8cca71c162ec648303732b0a3d9f0a7d17daee56916c57ec982c034c675738f>)

[Source](<https://github.com/jolars/shrinkage/blob/eeafe449edce19d3c552a03060f681ae3891af74/src/link.rs>)

```rust
impl Link for Probit
```
