The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Let \(X_t\) be the reproductive record at periods \(t = 1, \dots, T\) and \(R_t\) the recruits scored at a subset of periods. The lag hypothesis, in the form a distributed-lag model (Koyck 1954) or antecedent-effect model estimates and in the form a projection matrix asserts, is that expected recruitment is a weighted sum of past reproduction,
\[ \mathbb{E}[R_t] \;=\; c \sum_{k=0}^{K} w_k \, X_{t - \ell_0 - k}, \qquad w_k \ge 0,\quad \sum_k w_k = 1 , \]
with \(c\) a scale, \(\ell_0\) the offset of the first bin (\(\ell_0 = 1\) is the projection-matrix
convention: the first bin is the census before the recruit census) and
\(w\) the lag profile. The
projection-matrix null is the special case \(w
= (1, 0, \dots, 0)\). convolve_lag() computes the
sum for a given \(w\);
lag_kernels() builds families of \(w\); the scale \(c\) never matters for what follows.
X <- lepanthes_census$inflorescences
convolve_lag(X, c(0, 0, 0, 0, 1), t_R = 3:12) # pure 24 to 30 month delay
#> [1] 509 509 509 509 218 216 237 225 142 185
convolve_lag(X, flat_kernel(4), t_R = 3:12) # equal weights
#> [1] 450.8 392.2 337.8 281.0 207.6 201.0 192.0 170.2 141.6 136.8Lags that fall before the first census are read as the first census’s
value (missing = "backfill"). This asserts that
reproduction before the record began was at the level first observed.
The alternative, zero-filling, asserts that no seed fell before the
record began, which turns every long pure delay into a prediction of no
recruits at the first censuses; that is an artefact of the record’s
start, not a property of the hypothesis, and the package does not offer
it.
Write the expected series as \(\mu = W X\) with \(W\) the \(n \times T\) matrix of weights. Each row of \(W\) is non-negative and sums to one, so each \(\mu_t\) is a weighted average of the \(X\) values in its window. The concentration indices used here, the Gini coefficient
\[ G(x) = \frac{2 \sum_{i=1}^{n} i\, x_{(i)}}{n \sum_i x_i} - \frac{n+1}{n}, \]
with \(x_{(i)}\) the values in increasing order, and the coefficient of variation \(\mathrm{CV}(x) = s_x / \bar x\), are both Schur-convex: they fall whenever a quantity is moved from a fuller period to an emptier one, and they are invariant to scale. By the Hardy, Littlewood and Pólya theorem (Hardy et al. 1952; Marshall et al. 2011, ch. 2), a vector obtained from another by a doubly stochastic matrix is majorized by it, and every Schur-convex index of the output is therefore no larger than that of the input. Over a full record, in which every \(X_t\) enters the same number of windows with the same total weight, \(W\) is doubly stochastic up to the boundary, and the most concentrated output available is the pure delay, which permutes the series without mixing it. Hence
\[ \text{concentration}\big(\mathbb{E}[R]\big) \;\le\; \text{concentration}(X), \]
with equality at a pure delay. Reproduction’s own concentration is
the ceiling. lag_ceiling() reports it as
theorem and confirms it by searching the kernel families on
exactly the periods at which recruits are scored; the searched maximum
can differ from the bound by a small amount in either direction because
of the boundary (backfilling) and because the scored periods are a
subset of the record.
ce <- lag_ceiling(lepanthes_census, reproduction = "inflorescences", K = 4,
kernels = lag_kernels(4, n_dirichlet = 2000, bin = 6, unit = "mo"))
ce$theorem; ce$ceiling; ce$best$label
#> gini cv
#> 0.2585397 0.5696392
#> gini cv
#> 0.253937 0.547403
#> [1] "pure delay 12-18 mo"The searched cloud shows the whole family sitting below the bound, with pure delays at its edge:
s <- ce$search
plot(s$gini, s$cv, pch = 16, cex = 0.5, col = ifelse(s$family == "pure delay", "#D55E00", "#56B4E9"),
xlab = "Gini of the expected series", ylab = "CV of the expected series",
xlim = c(0, 0.7), ylim = c(0, 1.5))
abline(v = ce$theorem["gini"], h = ce$theorem["cv"], lty = 2)
points(ce$obs["gini"], ce$obs["cv"], pch = 17, cex = 1.6)
legend("topleft", bty = "n", pch = c(16, 16, 17), col = c("#56B4E9", "#D55E00", "black"),
legend = c("searched kernels", "pure delays", "observed recruitment"))The bound is stated for the expectation. The observed series is a
count about that expectation, and counts are more concentrated than
their mean. The exceedance ce$exceedance is therefore a
description, not a test.
If \(X\) is nearly constant, \(W X\) is nearly constant for every \(W\), and the data carry almost no
information about \(w\). A
distributed-lag model fitted to such data returns its prior, however
long the series runs; the fitted profile in
lepanthes_profile is close to flat for that reason.
rain_expected() makes the point visually: profiles that
could not differ more give expected series that all but coincide.
To ask whether an exceedance of the ceiling by counts means anything,
take a mean that obeys the ceiling (the flat mean, or the best-kernel
mean rescaled to the observed total) and draw negative-binomial counts
about it with the observed variance-to-mean ratio \(v\), so that the size parameter is \(\phi = \mu / (v - 1)\). The probability
that the simulated series is at least as concentrated as the observed
one is what ceiling_calibration() reports. In the
Lepanthes record and in every invented record of
regimes, that probability is ordinary: pooled over units,
small clumped counts about a flat mean look episodic whatever the
mechanism.
The lag hypothesis is a statement about each unit. For unit \(p\) with recruit totals \(S_p = \sum_t R_{p,t}\), the null fixes
\[ \mu_{p,t} \;=\; S_p \,\frac{\sum_k w_k X_{p,\,t-\ell_0-k}}{\sum_{t'} \sum_k w_k X_{p,\,t'-\ell_0-k}}, \]
so that the shape of each unit’s expected series is its own lagged
reproduction and its scale is its own observed total. Nothing is fitted.
A unit with no lagged reproduction on record but with recruits is given
a flat expectation; a unit that never recruited contributes nothing.
expected_recruits() returns this matrix.
Clumping is estimated under that heterogeneous mean. For negative-binomial counts with means \(\mu_{p,t}\) and common size \(\phi\), \(\mathbb{E}[(R - \mu)^2] = \mathbb{E}[\mu] + \mathbb{E}[\mu^2]/\phi\), so
\[ \hat\phi \;=\; \frac{\overline{\mu^2}}{\overline{(R-\mu)^2} - \bar\mu} \]
over the units that recruited (phi_moment()). Estimating
\(\phi\) about a single pooled mean
instead attributes the between-unit spread of the means to clumping and
roughly halves \(\hat\phi\); the
companion paper reports both, with the single-mean value as a stress
test.
h <- host_matrices(lepanthes_hosts, unit = "host", reproduction = "inflorescences")
mu <- expected_recruits(h$R, h$X, w = c(0, 0, 0, 0, 1))
rowSums(mu)[1:5]; rowSums(h$R)[1:5] # scaled to each host's total
#> 209 229 231 234 235
#> 4 3 23 17 0
#> 209 229 231 234 235
#> 4 3 23 17 0
phi_moment(h$R, mu)
#> [1] 0.2753189host_matrices() is what the data-frame interface of
expected_recruits() and host_lag_test() calls;
a long tibble with unit, period,
reproduction and recruits columns can be
passed directly.
host_lag_test() then draws, for each profile,
nsim negative-binomial count matrices about \(\mu\) with size \(\hat\phi\), sums them over units to a
census series, and computes four statistics of that series: the number
of silent censuses (no recruit on any unit), the Gini and CV of the
census totals, and the largest total. The reported probability is the
fraction of draws at least as extreme as the observed record. Over
profiles, the verdict is the maximum of each probability, that is, the
best case the lag hypothesis can make for itself. The Gini and CV are
the pre-specified statistics of the paper; the silent-census count is
the most interpretable where a gate closes completely, and the largest
census the least sensitive.
A small verdict says that no delayed consequence of each unit’s own reproduction, of any profile over the horizon searched, produces a record as concentrated as the observed one: the timing of recruitment is not set by the timing of seed supply. It does not identify what sets it. An ordinary verdict says the record is consistent with a delay; it does not identify the delay, which under continuous reproduction cannot be recovered (Section 3). Where reproduction is seasonal the ceiling is high and the test is weak, as the invented records show; aseasonality is where it bites.
| Step | Function | Companion-paper phase |
|---|---|---|
| Concentration indices | rain_gini(), rain_cv(),
concentration() |
Table of series |
| Lag profiles | lag_kernels(), flat_kernel() |
9a, 9d |
| From a long data frame to series and matrices | series_from(), host_matrices() |
data preparation |
| Expected series | convolve_lag() |
9a, 9b |
| Ceiling and search | lag_ceiling() |
9a |
| Pooled calibration | ceiling_calibration() |
9b |
| Unit-level expectation and clumping | expected_recruits(), phi_moment() |
9d |
| Host-level test | host_lag_test() |
9d |
| Several units and several reproductive measures | lag_ceiling_by(), rain_indices() |
sensitivity analyses |
| Census schedule | rain_intervals() |
data preparation |
| Uncertainty on the exceedance | lag_ceiling_boot(),
lag_ceiling_bayesboot(), lag_ceiling_stan(),
ceiling_draws_table() |
intervals |
| Is a first sighting a recruit? | recruit_triage() |
recruit definition |
| Figures | rain_series(), rain_strip(),
rain_strips(), rain_units(),
rain_profiles(), rain_expected(),
rain_forest(), rain_sightings(),
plot() methods |
Figs 2, 3 and 5 |
Hardy, G. H., Littlewood, J. E. and Pólya, G. (1952) Inequalities, 2nd edn. Cambridge University Press, Cambridge.
Koyck, L. M. (1954) Distributed Lags and Investment Analysis. North-Holland, Amsterdam.
Marshall, A. W., Olkin, I. and Arnold, B. C. (2011) Inequalities: Theory of Majorization and Its Applications. Springer, New York.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.