---
title: "Model Terms in iglm"
output:
  rmarkdown::html_vignette:
    toc: true
    toc_depth: 2
vignette: >
  %\VignetteIndexEntry{Model Terms in iglm}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
options(rmarkdown.html_vignette.check_title = FALSE)
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "100%",
  fig.width = 7,
  fig.height = 5
)
library(iglm)
```

## Overview

This vignette describes all model terms available in `iglm` (version 1.2.6) for specifying the sufficient statistics of joint network-attribute models. Terms are passed on the right-hand side of the `formula` argument in `iglm()` and govern how individual attributes and network connections jointly determine the log-linear probabilities of the model.

A model in `iglm` decomposes its sufficient statistics into two families:

- **Unit-level terms** $g_i(x_i, y_i)$: depend only on unit $i$'s own attributes.
- **Pair-level terms** $h_{i,j}(x, y, z)$: depend on the connection $z_{i,j}$ and the attributes of units $i$ and $j$ as well as the wider network.

The total sufficient statistic of the model is then
$$
S(x, y, z) = \sum_i g_i(x_i, y_i) + \sum_{i \ne j} h_{i,j}(x, y, z).
$$

---

## Key Definitions

Before stating all statistics, we introduce the formal notation and definitions used throughout this vignette:

- **Population and Dyads:**
  - $𝒫 = \{1, \ldots, N\}$ denotes the population of $N$ units.
  - $𝒟$ denotes the set of dyads (pairs of distinct units): $𝒟 = \{(i,j) : 1 \le i \neq j \le N\}$ for directed connections and $𝒟 = \{(i,j) : 1 \le i < j \le N\}$ for undirected connections.

- **Variables and Attributes:**
  - $x_i$: Exogenous (or secondary) predictor attribute of unit $i \in 𝒫$.
  - $y_i$: Endogenous outcome attribute of unit $i \in 𝒫$.
  - $z_{i,j} \in \{0, 1\}$: Binary connection indicator from unit $i$ to unit $j$ for $(i,j) \in 𝒟$, collected in the connection matrix $\mathbf{z}$.
  - $v_i$: Optional unit-level exogenous covariate.
  - $w_{i,j}$: Optional dyadic exogenous covariate.

- **Neighbourhoods and Local Structure:**
  - $𝒩_i \subset 𝒫$ denotes the local neighbourhood of unit $i$ (with $i \in 𝒩_i$).
  - $c_{i,j} \in \{0, 1\}$ is the neighbourhood overlap indicator, taking the value 1 if $𝒩_i \cap 𝒩_j \neq \emptyset$, and 0 otherwise.

- **Connections:** Different types of indicators for connections:
  - Overlapping: $u_{i,j} = c_{i,j} z_{i,j}$, a connection between units $i$ and $j$ where $𝒩_i \cap 𝒩_j \neq \emptyset$.
  - Non-overlapping: $k_{i,j} = (1-c_{i,j}) z_{i,j}$, a connection between units $i$ and $j$ where $𝒩_i \cap 𝒩_j = \emptyset$.
  - $e_{i,j}^{(\mathtt{s})}$ for $\mathtt{s} \in \{\mathtt{global}, \mathtt{local}, \mathtt{alocal}\}$ is defined by:
$$
e_{i,j}^{(\mathtt{s})} = \begin{cases} 
z_{i,j} & \text{if } \mathtt{s} = \mathtt{global}\\
u_{i,j} & \text{if } \mathtt{s} = \mathtt{local} \\
k_{i,j} & \text{if } \mathtt{s} = \mathtt{alocal}
\end{cases}
$$
    The mode parameter $\mathtt{s}$ is generally defined as $\mathtt{s} \in \{\mathtt{global}, \mathtt{local}, \mathtt{alocal}\}$, but note that for the terms `gwesp`, `gwdsp`, `gwodegree`, `gwidegree`, `edges_x_match`, and `edges_y_match` (defined in the summary table), only the options $\mathtt{s} \in \{\mathtt{global}, \mathtt{local}\}$ are implemented as their $\mathtt{alocal}$ version is not very useful.

- **Degree Statistics:** For unit $i \in 𝒫$ and mode $\mathtt{s} \in \{\mathtt{global}, \mathtt{local}\}$:
  - Out-degree: $\operatorname{deg}(i, \mathtt{s}) = \sum_{j \in 𝒫 \setminus \{i\}} e_{i,j}^{(\mathtt{s})}$ with $\operatorname{deg}(i) = \operatorname{deg}(i, \mathtt{global})$.
  - In-degree: $\operatorname{ideg}(i, \mathtt{s}) = \sum_{j \in 𝒫 \setminus \{i\}} e_{j,i}^{(\mathtt{s})}$ with $\operatorname{ideg}(i) = \operatorname{ideg}(i, \mathtt{global})$.

- **Common Partners (CP):** For a dyad $(i,j) \in 𝒟$ and mode $\mathtt{s} \in \{\mathtt{global}, \mathtt{local}\}$, the number of shared partners via distinct path structures is defined as:
  - Outgoing Two-Paths (OTP): $\operatorname{CP}(i, j, \mathtt{s}, \mathtt{OTP}) = \sum_{h \in 𝒫 \setminus \{i,j\}} e_{i,h}^{(\mathtt{s})}\, e_{h,j}^{(\mathtt{s})}$.
  - Incoming Shared Partners (ISP): $\operatorname{CP}(i, j, \mathtt{s}, \mathtt{ISP}) = \sum_{h \in 𝒫 \setminus \{i,j\}} e_{h,i}^{(\mathtt{s})}\, e_{h,j}^{(\mathtt{s})}$.
  - Outgoing Shared Partners (OSP): $\operatorname{CP}(i, j, \mathtt{s}, \mathtt{OSP}) = \sum_{h \in 𝒫 \setminus \{i,j\}} e_{i,h}^{(\mathtt{s})}\, e_{j,h}^{(\mathtt{s})}$.
  - Incoming Two-Paths (ITP): $\operatorname{CP}(i, j, \mathtt{s}, \mathtt{ITP}) = \sum_{h \in 𝒫 \setminus \{i,j\}} e_{h,i}^{(\mathtt{s})}\, e_{j,h}^{(\mathtt{s})}$.
  - Undirected Version: $\operatorname{CP}(i, j, \mathtt{s}) = \sum_{h \in 𝒫 \setminus \{i,j\}} e_{i,h}^{(\mathtt{s})}\, e_{h,j}^{(\mathtt{s})}$.

- **Miscellaneous:**
  - Geometrically-weighted weight: $w_k(\alpha) = \exp(\alpha) \left[ 1 - (1 - \exp(-\alpha))^k \right]$.
  - Indicator for directionality: $\mathbb{I}_U(\mathbf{z})$, taking the value 1 if connections in $\mathbf{z}$ are undirected, and 0 otherwise.
  - Indicator for transitive connection: $d_{i,j}(\mathbf{z}) = \mathbb{I}(\exists\, k \in 𝒩_i \cap 𝒩_j: z_{i,k} = z_{k,j} = 1)$.

The sections below and the summary table list all implemented terms as of `iglm` version 1.2.6 and will be extended in future releases.

---


## Category 1: Attribute Dependence Terms ($g_i$ Terms)

These terms capture how individual predictors $x_i$ (exogenous) and $y_i$ (endogenous) relate to each other, without reference to the network.

### `attribute_x` {#attribute_x}

**Description:** Intercept for the endogenous $x$-attribute.

$$
g_i(x_i, y_i) = x_i
$$

```r
formula <- object ~ attribute_x
```

---

### `attribute_y` {#attribute_y}

**Description:** Intercept for the endogenous $y$-attribute.

$$
g_i(x_i, y_i) = y_i
$$

```r
formula <- object ~ attribute_y
```

---

### `cov_x(data = v)` {#cov_x}

**Description:** Effect of a unit-level exogenous covariate $v_i$ on attribute $x_i$.

$$
g_i(x_i, y_i) = v_i\, x_i
$$

```r
formula <- object ~ cov_x(data = v)
```

---

### `cov_y(data = v)` {#cov_y}

**Description:** Effect of a unit-level exogenous covariate $v_i$ on attribute $y_i$.

$$
g_i(x_i, y_i) = v_i\, y_i
$$

```r
formula <- object ~ cov_y(data = v)
```

---

### `attribute_xy(mode = "global" | "local" | "alocal")` {#attribute_xy}

**Description:** Interaction between the two attributes $x_i$ and $y_i$, optionally mediated by the neighbourhood structure.

| Mode | Formula |
|------|---------|
| `global` | $x_i\, y_i$ |
| `local`  | \(x_i \sum_{j \in 𝒩_i} y_j + y_i \sum_{j \in 𝒩_i} x_j\) |
| `alocal` | \(x_i \sum_{j \notin 𝒩_i} y_j + y_i \sum_{j \notin 𝒩_i} x_j\) |

```r
formula <- object ~ attribute_xy(mode = "local")
```

---

## Category 2: Network Dependence Terms ($h_{i,j}$ Terms)

These terms capture how the network topology $z$ drives edge formation. All are pair-level statistics.

### `degrees` {#degrees}

**Description:** Node-level degree fixed effects. One parameter per unit, capturing heterogeneity in activity not explained by other terms. Estimation relies on an MM algorithm constraint.

```r
formula <- object ~ degrees
```

---

### `edges(mode = "global" | "local" | "alocal")` {#edges}

**Description:** Baseline propensity for a tie $z_{i,j}$ to form; the network analogue of an intercept.

$$
h_{i,j}(x, y, z) = e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ edges(mode = "global")
formula <- object ~ edges(mode = "local")
formula <- object ~ edges(mode = "alocal")
```

---

### `mutual(mode = "global" | "local" | "alocal")` {#mutual}

**Description:** Reciprocity in directed networks. Counts pairs where $i \to j$ and $j \to i$ both exist (counted once per unordered pair, hence the factor $1/2$).

$$
h_{i,j}(x, y, z) = \frac{e_{i,j}^{(\mathtt{s})}\, e_{j,i}^{(\mathtt{s})}}{2}
$$

Only valid for **directed** networks.

```r
formula <- object ~ mutual(mode = "global")
```

---

### `cov_z(data = w, mode = "global" | "local" | "alocal")` {#cov_z}

**Description:** Dyadic covariate — exogenous edge-level covariate $w_{i,j}$ influences tie formation.

$$
h_{i,j}(x, y, z) = w_{i,j}\, e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ cov_z(data = W, mode = "global")
```

---

### `cov_z_out(data = v, mode = "global" | "local" | "alocal")` {#cov_z_out}

**Description:** Sender covariate — exogenous nodal attribute $v_i$ influences the propensity to *send* a tie.

$$
h_{i,j}(x, y, z) = v_i\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ cov_z_out(data = v, mode = "global")
```

---

### `cov_z_in(data = v, mode = "global" | "local" | "alocal")` {#cov_z_in}

**Description:** Receiver covariate — exogenous nodal attribute $v_j$ influences the propensity to *receive* a tie.

$$
h_{i,j}(x, y, z) = v_j\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ cov_z_in(data = v, mode = "global")
```

---

### `isolates` {#isolates}

**Description:** Captures the proportion of units with no connections at all (total degree zero).

$$
h_{i,j}(x, y, z) = \mathbb{I}\!\left(\sum_{j \in 𝒫 \setminus \{i\}} z_{i,j} + z_{j,i} = 0\right)
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ isolates
```

---

### `nonisolates` {#nonisolates}

**Description:** Captures the proportion of units that have at least one connection.

$$
h_{i,j}(x, y, z) = \mathbb{I}\!\left(\sum_{j \in 𝒫 \setminus \{i\}} z_{i,j} + z_{j,i} \ne 0\right)
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ nonisolates
```

---

### `gwdegree(mode = "global" | "local", decay = α)` {#gwdegree}

**Description:** Geometrically Weighted Degree — captures the overall degree distribution with exponential decay parameter $\alpha$.

$$
h_{i,j}(x, y, z) = w_{\operatorname{deg}(i)}(\alpha) + w_{\operatorname{deg}(j)}(\alpha)
$$

Suitable for both directed and undirected networks. Only `mode %in% c("global", "local")` is available.

```r
formula <- object ~ gwdegree(mode = "global", decay = 0.5)
```

---

### `gwodegree(mode = "global" | "local", decay = α)` {#gwodegree}

**Description:** Geometrically Weighted Out-Degree — captures the out-degree distribution in directed networks.

$$
h_{i,j}(x, y, z) = w_{\operatorname{deg}(i,\,\mathtt{s})}(\alpha)
$$

Only valid for **directed** networks. Only `mode %in% c("global", "local")` is available.

```r
formula <- object ~ gwodegree(mode = "global", decay = 0.5)
```

---

### `gwidegree(mode = "global" | "local", decay = α)` {#gwidegree}

**Description:** Geometrically Weighted In-Degree — captures the in-degree distribution in directed networks.

$$
h_{i,j}(x, y, z) = w_{\operatorname{ideg}(i,\,\mathtt{s})}(\alpha)
$$

Only valid for **directed** networks. Only `mode %in% c("global", "local")` is available.

```r
formula <- object ~ gwidegree(mode = "global", decay = 0.5)
```

---

### `transitive` {#transitive}

**Description:** Transitivity indicator — rewards edges that close a locally transitive triple.

$$
h_{i,j}(x, y, z) = d_{i,j}(\mathbf{z})\, z_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ transitive
```

---

### `gwesp_symm(mode = "global" | "local", decay = α)` {#gwesp_symm}

**Description:** Geometrically Weighted Edgewise Shared Partners (undirected) — the classic GWESP statistic for undirected networks.

$$
h_{i,j}(x, y, z) = e_{i,j}^{(\mathtt{s})}\, w_{\operatorname{CP}(i,j,\mathtt{s})}(\alpha)
$$

Suitable for undirected networks only.

```r
formula <- object ~ gwesp_symm(mode = "global", decay = 0.5)
```

---

### `gwesp(mode = "global" | "local", type = "OTP" | "ISP" | "OSP" | "ITP", decay = α)` {#gwesp}

**Description:** Geometrically Weighted Edgewise Shared Partners (directed) — conditions shared partners on a specific path type.

$$
h_{i,j}(x, y, z) = e_{i,j}^{(\mathtt{s})}\, w_{\operatorname{CP}(i,j,\mathtt{s},\mathtt{type})}(\alpha)
$$

Only valid for **directed** networks. Only `mode %in% c("global", "local")` is available.

```r
formula <- object ~ gwesp(mode = "global", type = "OTP", decay = 0.5)
```

---

### `gwdsp_symm(mode = "local", decay = α)` {#gwdsp_symm}

**Description:** Geometrically Weighted Dyadwise Shared Partners (undirected) — models triadic potential irrespective of the closing edge.

$$
h_{i,j}(x, y, z) = w_{\operatorname{CP}(i,j,\mathtt{local})}(\alpha)
$$

Suitable for undirected networks only.

```r
formula <- object ~ gwdsp_symm(mode = "local", decay = 0.5)
```

---

### `gwdsp(mode = "global" | "local", type = "OTP" | "ISP" | "OSP" | "ITP", decay = α)` {#gwdsp}

**Description:** Geometrically Weighted Dyadwise Shared Partners (directed) — models directed triadic potential irrespective of the closing edge.

$$
h_{i,j}(x, y, z) = w_{\operatorname{CP}(i,j,\mathtt{s},\mathtt{type})}(\alpha)
$$

Only valid for **directed** networks. Only `mode %in% c("global", "local")` is available.

```r
formula <- object ~ gwdsp(mode = "global", type = "OTP", decay = 0.5)
```

---

## Category 3: Joint Attribute/Network Dependence Terms ($h_{i,j}$ Terms)

These terms capture the interplay between nodal attributes and network position. They are the key building blocks for studying spillover effects.

### `attribute_xz(mode = "local")` {#attribute_xz}

**Description:** Additive effect of $x_i$ and $x_j$ on local edge formation.

$$
h_{i,j}(x, y, z) = (x_i + x_j)\, u_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ attribute_xz(mode = "local")
```

---

### `attribute_yz(mode = "local")` {#attribute_yz}

**Description:** Additive effect of $y_i$ and $y_j$ on local edge formation.

$$
h_{i,j}(x, y, z) = (y_i + y_j)\, u_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ attribute_yz(mode = "local")
```

---

### `edges_x_match(mode = "global" | "local")` {#edges_x_match}

**Description:** Homophily on $x$ — rewards edges between units with equal $x$-values.

$$
h_{i,j}(x, y, z) = \mathbb{I}(x_i = x_j)\, e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ edges_x_match(mode = "global")
```

---

### `edges_y_match(mode = "global" | "local")` {#edges_y_match}

**Description:** Homophily on $y$ — rewards edges between units with equal $y$-values.

$$
h_{i,j}(x, y, z) = \mathbb{I}(y_i = y_j)\, e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ edges_y_match(mode = "global")
```

---

### `outedges_x(mode = "global" | "local" | "alocal")` {#outedges_x}

**Description:** Effect of sender attribute $x_i$ on out-degree formation.

$$
h_{i,j}(x, y, z) = x_i\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ outedges_x(mode = "global")
```

---

### `inedges_x(mode = "global" | "local" | "alocal")` {#inedges_x}

**Description:** Effect of receiver attribute $x_j$ on in-degree reception.

$$
h_{i,j}(x, y, z) = x_j\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ inedges_x(mode = "global")
```

---

### `outedges_y(mode = "global" | "local" | "alocal")` {#outedges_y}

**Description:** Effect of sender attribute $y_i$ on out-degree formation.

$$
h_{i,j}(x, y, z) = y_i\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ outedges_y(mode = "global")
```

---

### `inedges_y(mode = "global" | "local" | "alocal")` {#inedges_y}

**Description:** Effect of receiver attribute $y_j$ on in-degree reception.

$$
h_{i,j}(x, y, z) = y_j\, e_{i,j}^{(\mathtt{s})}
$$

Only valid for **directed** networks.

```r
formula <- object ~ inedges_y(mode = "global")
```

---

### `spillover_xx(mode = "local")` {#spillover_xx}

**Description:** Symmetric $x$-to-$x$ spillover — the product $x_i x_j$ along local connections, capturing peer effects in the $x$ attribute.

$$
h_{i,j}(x, y, z) = x_i\, x_j\, u_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_xx(mode = "local")
```

---

### `spillover_xx_scaled(mode = "global" | "local")` {#spillover_xx_scaled}

**Description:** Degree-normalised $x$-to-$x$ spillover, accounting for the number of neighbours.

$$
h_{i,j}(x, y, z) = \left(\frac{x_i\, x_j}{\operatorname{deg}(i,\mathtt{s})} + \frac{x_j\, x_i}{\operatorname{deg}(j,\mathtt{s})}\,\mathbb{I}_U(\mathbf{z})\right) e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_xx_scaled(mode = "global")
```

---

### `spillover_yy(mode = "local")` {#spillover_yy}

**Description:** Symmetric $y$-to-$y$ spillover — the product $y_i y_j$ along local connections.

$$
h_{i,j}(x, y, z) = y_i\, y_j\, u_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_yy(mode = "local")
```

---

### `spillover_yy_scaled(mode = "global" | "local")` {#spillover_yy_scaled}

**Description:** Degree-normalised $y$-to-$y$ spillover.

$$
h_{i,j}(x, y, z) = \left(\frac{y_i\, y_j}{\operatorname{deg}(i,\mathtt{s})} + \frac{y_j\, y_i}{\operatorname{deg}(j,\mathtt{s})}\,\mathbb{I}_U(\mathbf{z})\right) e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_yy_scaled(mode = "global")
```

---

### `spillover_xy(mode = "local")` {#spillover_xy}

**Description:** Symmetric cross-attribute spillover — $x_i \to y_j$ and $x_j \to y_i$ along local connections. For undirected networks both directions are summed.

$$
h_{i,j}(x, y, z) = x_i\, y_j\, u_{i,j} + x_j\, y_i\, u_{i,j}\, \mathbb{I}_U(\mathbf{z})
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_xy(mode = "local")
```

---

### `spillover_xy_scaled(mode = "global" | "local")` {#spillover_xy_scaled}

**Description:** Degree-normalised symmetric cross-attribute spillover ($x \to y$).

$$
h_{i,j}(x, y, z) = \left(\frac{x_i\, y_j}{\operatorname{deg}(i,\mathtt{s})} + \frac{x_j\, y_i}{\operatorname{deg}(j,\mathtt{s})}\,\mathbb{I}_U(\mathbf{z})\right) e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_xy_scaled(mode = "global")
```

---

### `spillover_yx(mode = "local")` {#spillover_yx}

**Description:** Directed cross-attribute spillover — $y_i \to x_j$ only (no symmetrisation). Only for directed networks.

$$
h_{i,j}(x, y, z) = y_i\, x_j\, u_{i,j}
$$

Only valid for **directed** networks.

```r
formula <- object ~ spillover_yx(mode = "local")
```

---

### `spillover_yx_scaled(mode = "global" | "local")` {#spillover_yx_scaled}

**Description:** Degree-normalised cross-attribute spillover ($y \to x$), with symmetrisation for undirected networks.

$$
h_{i,j}(x, y, z) = \left(\frac{y_i\, x_j}{\operatorname{deg}(i,\mathtt{s})} + \frac{y_j\, x_i}{\operatorname{deg}(j,\mathtt{s})}\,\mathbb{I}_U(\mathbf{z})\right) e_{i,j}^{(\mathtt{s})}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_yx_scaled(mode = "global")
```

---

### `spillover_yc(mode = "local", data = v)` {#spillover_yc}

**Description:** Interaction of endogenous attribute $y$ with exogenous covariate $v$ along overlapping connections, with symmetrisation for undirected networks.

$$
h_{i,j}(x, y, z) = c_{i,j}\bigl(v_j\, y_i + \mathbb{I}_U(\mathbf{z})\, v_i\, y_j\bigr)\, z_{i,j}
$$

Suitable for both directed and undirected networks.

```r
formula <- object ~ spillover_yc(data = v, mode = "local")
```

---

## Quick-Reference Table

The table below summarises all implemented terms, indicating which variables ($x$, $y$, $z$) they involve, and whether they support undirected networks.

| Term | $x$ | $y$ | $z$ | Undirected |
|:-----|:---:|:---:|:---:|:----------:|
| [`attribute_x`](#attribute_x) | ✓ | | | ✓ |
| [`attribute_y`](#attribute_y) | | ✓ | | ✓ |
| [`cov_x`](#cov_x) | ✓ | | | ✓ |
| [`cov_y`](#cov_y) | | ✓ | | ✓ |
| [`attribute_xy(mode = "s")`](#attribute_xy) | ✓ | ✓ | | ✓ |
| [`degrees`](#degrees) | | | ✓ | ✓ |
| [`edges(mode = "s")`](#edges) | | | ✓ | ✓ |
| [`mutual(mode = "s")`](#mutual) | | | ✓ | ✗ |
| [`cov_z(mode = "s")`](#cov_z) | | | ✓ | ✓ |
| [`cov_z_out(mode = "s")`](#cov_z_out) | | | ✓ | ✗ |
| [`cov_z_in(mode = "s")`](#cov_z_in) | | | ✓ | ✗ |
| [`isolates`](#isolates) | | | ✓ | ✓ |
| [`nonisolates`](#nonisolates) | | | ✓ | ✓ |
| [`gwdegree(mode = "global")`](#gwdegree) | | | ✓ | ✓ |
| [`gwodegree(mode = "s")`](#gwodegree) | | | ✓ | ✗ |
| [`gwidegree(mode = "s")`](#gwidegree) | | | ✓ | ✗ |
| [`transitive`](#transitive) | | | ✓ | ✓ |
| [`gwesp_symm(mode = "s")`](#gwesp_symm) | | | ✓ | ✓ |
| [`gwesp(mode = "s", type = "…")`](#gwesp) | | | ✓ | ✗ |
| [`gwdsp_symm(mode = "local")`](#gwdsp_symm) | | | ✓ | ✓ |
| [`gwdsp(mode = "s", type = "…")`](#gwdsp) | | | ✓ | ✗ |
| [`attribute_xz(mode = "local")`](#attribute_xz) | ✓ | | ✓ | ✓ |
| [`attribute_yz(mode = "local")`](#attribute_yz) | | ✓ | ✓ | ✓ |
| [`edges_x_match(mode = "s")`](#edges_x_match) | ✓ | | ✓ | ✓ |
| [`edges_y_match(mode = "s")`](#edges_y_match) | | ✓ | ✓ | ✓ |
| [`outedges_x(mode = "s")`](#outedges_x) | ✓ | | ✓ | ✗ |
| [`inedges_x(mode = "s")`](#inedges_x) | ✓ | | ✓ | ✗ |
| [`outedges_y(mode = "s")`](#outedges_y) | | ✓ | ✓ | ✗ |
| [`inedges_y(mode = "s")`](#inedges_y) | | ✓ | ✓ | ✗ |
| [`spillover_xx(mode = "local")`](#spillover_xx) | ✓ | | ✓ | ✓ |
| [`spillover_xx_scaled(mode = "s")`](#spillover_xx_scaled) | ✓ | | ✓ | ✓ |
| [`spillover_yy(mode = "local")`](#spillover_yy) | | ✓ | ✓ | ✓ |
| [`spillover_yy_scaled(mode = "s")`](#spillover_yy_scaled) | | ✓ | ✓ | ✓ |
| [`spillover_xy(mode = "local")`](#spillover_xy) | ✓ | ✓ | ✓ | ✓ |
| [`spillover_xy_scaled(mode = "s")`](#spillover_xy_scaled) | ✓ | ✓ | ✓ | ✓ |
| [`spillover_yx(mode = "local")`](#spillover_yx) | ✓ | ✓ | ✓ | ✗ |
| [`spillover_yx_scaled(mode = "s")`](#spillover_yx_scaled) | ✓ | ✓ | ✓ | ✓ |
| [`spillover_yc(mode = "local")`](#spillover_yc) | | ✓ | ✓ | ✓ |

---

## References

Fritz, C., Schweinberger, M., Bhadra, S., and D.R. Hunter (2025). A Regression Framework for Studying Relationships among Attributes under Network Interference. *Journal of the American Statistical Association*, to appear. <doi:10.1080/01621459.2025.2565851>

Schweinberger, M. and M.S. Handcock (2015). Local Dependence in Random Graph Models: Characterization, Properties, and Statistical Inference. *Journal of the Royal Statistical Society, Series B*, 7, 647–676.

Schweinberger, M. and J.R. Stewart (2020). Concentration and Consistency Results for Canonical and Curved Exponential-Family Models of Random Graphs. *The Annals of Statistics*, 48, 374–396.
