Summary

This page presents a calculator for the aggregate suffering of a population of an animal species based on years until the animals reproduce and how many eggs are hatched from each reproducing mother. The main selling point of this approach is that it can consider the implications of high early infant mortality rates in a more accurate way than a simple calculation could.

As expected, I find that suffering is greater when organisms have shorter lifespans because there are more deaths per unit time. Suffering also increases as organisms lay more eggs, but depending on how the population size is measured, the increase in suffering with greater egg-laying can be much less than linear.

The model used in this piece is very simplified; for instance, it assumes that mothers lay eggs only once at some constant age and that all mothers surviving to that age lay eggs. It would be good to repeat this analysis with other models to see how robust the conclusions are.

Epigraphs

Williams points out that, in all the mammalian species that have so far been carefully studied, the rate at which their members engage in the killing of conspecifics is several thousand times greater than the highest homicide rate measured in any American city. This dark message about our furry friends is often resisted, and popular presentations of nature (in television documentaries, magazine articles, and popular books) often engage in self-censorship to avoid shocking the squeamish. Hobbes was right: life in the state of nature is nasty, brutish, and short, for virtually all nonhuman species. --Daniel Dennett, Darwin's Dangerous Idea: Evolution and the Meaning of Life, p. 478

Many [bird] chicks don’t survive their first year: Some starve to death, their carcasses decaying [...]. Some are preyed upon by hawks or crows or cats. Some are slain by their nestmates. --Washington Post

We've always said [predators] kill the old and the weak. But the fact is they kill the old and the weak, and very large number[s] of the young. --Bob Jamieson, wildlife ecologist

Motivation

When we think about the lives of wild animals, we often picture those members of a species who live to adulthood. This makes sense given that most humans live to adulthood. But for many species, most individuals die before maturity. Hence, when we're thinking about the extent of suffering in nature, in addition to counting the suffering of longer-lived individuals, we should also include the suffering of those who die young.

Ideally we'd like a mortality distribution that would show what fraction of individuals live to what ages. Then we could calculate a typical amount of suffering experienced by an individual living to a given age, and take a weighted average of those values based on what fraction of individuals live to each age.

When we get lucky, we can find life tables for a species, such as this one for a corn earworm. However, most of the time we only know more vague information, like the adult lifespan of the species and the average number of eggs laid by one mother. The piece provides a calculator that fits a mortality distribution based on lifespan and eggs-per-mother numbers in order to calculate a (very rough) estimate of aggregate suffering, counting both short-lived and long-lived individuals in a species. These numbers are obviously highly noisy, but they may at least provide rough relative comparisons among species.

Choosing a distribution

The first step is to decide on a parametric distribution for mortality, i.e., the probability density function for the ages at which individuals die. The simplest choice might be a uniform distribution, but this is pretty inaccurate for most species, where most individuals tend to die quite young. Another option is an exponential distribution. This would probably be a good fit for many species, but it doesn't work as well for some K-selected animals like humans, where mortality probability is actually higher at older ages than in youth.

For this analysis, I decided to use the Gompertz distribution, because it's standard for modeling human mortality, and under different choices of parameters, it has a similar shape as an exponential distribution. (You can see this from the top figure on the Wikipedia article for the Gompertz distribution.)

The general cumulative distribution function for the Gompertz distribution is, according to Wikipedia:

F(a; η, b) = 1 - exp(-η (eb a - 1)).

for a ≥ 0, where I've renamed Wikipedia's "x" variable as "a" to stand for "age". This function gives the fraction of starting individuals that are dead by age a. The survival function S(a; η, b) is just

S(a; η, b) := 1 - F(a; η, b) = exp(-η (eb a - 1)).

To get intuition for how the survival function S(a; η, b) behaves, here's an interactive graph of ita:

η b



As you can see from playing with the graph, we can get a broad range of shapes just by varying η and keeping b fixed. (This is why η is called the "shape parameter".) For example:

with values of η around 0.01, you can get a survival curve looking something like human mortality

with values of η around 1 or 10 or 100, you can get an increasingly sharp exponential-type decay.b

The "scale parameter" of the distribution is b; it controls how far out the distribution goes. Smaller values of b translate to longer average lifespans.

Simplifying assumptions about the population's dynamics

For this calculator, I assume a population where births can happen at any time throughout the year, as is the case with humans and perhaps animals in tropic climates. This is definitely not true for animals in cooler climates with frozen winters, but you might be able to modify some parameters to make this calculator roughly work for those cases as well.

I assume that when people speak about the "size of the population", they're counting all individuals within the species that are at least some minimum age A min —say, 0.05 years. (Note that all times are measured in years throughout this piece.) This helps exclude, e.g., eggs that are just hatching. If the population is aquatic and is sampled using a net with some mesh size, then the sample will tend to retrieve exactly those individuals that are above some size cutoff, which could be roughly correlated to some age cutoff.

I assume that there's an exact age A r when females lay eggs, and they lay their whole life supply of E eggs at that time. Females who die before then lay no eggs. This assumption is untrue for many animals, but we can try to shoehorn multiple birth events into the assumption of one birth event. For example, for contemporary humans in wealthy countries, we could pretend that a female has 2.1 children (E = 2.1) at exactly 28 years of age (A r = 28).c

I also assume that all females reaching age A r reproduce. This is again untrue, and one extension of this calculator could be to add a parameter for the fraction of females of age A r who actually reproduce.

I assume that eggs hatch immediately after being laid.

I ignore any potential suffering by non-hatching eggs in this analysis and only count the welfare of individuals with age after hatching greater than 0.

Fitting the distribution

Choosing η

Species where mothers leave large numbers of hatching eggs E (tens or hundreds) on average tend to be more "r-selected". These organisms typically have Type III survivorship curves. Big η values capture this shape best. η values beyond ~10 or so look fairly similar in shape, so the exact value doesn't matter that much, but higher η values become slightly more steep as far as the initial drop-off of population after individuals emerge from eggs.

η values around ~0.01 are probably more appropriate for highly "K-selected" animals like large mammals. These animals tend to have E values around, say, 2-5.d

We want a function η(E) that roughly gives us an appropriate value of η based on E. We want η(2) to be around 0.01, η(10) to be around (say) ~1, and η(100) to be some big number. (For η above like 10 or 50 or so, the shape of the survival curve remains basically constant.) One function that fits the bill is η(E) = E2/100. There's nothing special about this choice, but it's a hacky way to roughly get the kind of curve I want. That said, in the calculator, I allow you to specify any formula for η of the form x Ey + z for constants x, y, and z.

Following is an example of an actual survivorship curve fitted with a Gompertz distribution. This curve is actually more concave down than I would have expected relative to the number of offspring medflies lay (~300 per female per lifetime). I wonder if this trend is true for other insects as well.



Choosing b

In a stable population, if a mother creates E hatching eggs, on average exactly two of those hatchlings will survive to maturity and reproduce. In my framework, this means all but 2/E of the individuals have died by age A r . That is:

S(A r ; η, b) = 2/E.

exp(-η (eb A r - 1)) = 2/E.

-η (eb A r - 1) = ln(2/E).

η (eb A r - 1) = ln(E/2).

eb A r - 1 = ln(E/2) / η.

eb A r = 1 + ln(E/2) / η.

b A r = ln( 1 + ln(E/2) / η ).

b = ln( 1 + ln(E/2) / η ) / A r .

Factoring in population size

Population distribution is proportional to survivorship distribution

The survivorship function S(a) tells us, given an age, what fraction of individuals born are still alive by that age. For the following discussion, I want a function N(a) that tells us, given an age, the number density of individuals currently alive who have that age. The distribution of individuals by age is sometimes called the "age structure" of the population, although often it's broken up into separate male and female graphs, whereas I intend N(a) to be the sum of males and females together.

Basically, N is a cross-sectional view of the population's age structure (one snapshot in time), while S is what one would see from a cohort study of age structure (following a given set of born individuals over time until they all die).

Let the population size be P. It turns out that in a stationary population, for all a ≥ 0, N(a) = P S(a) / (∫ 0 ∞ S(x) dx), i.e., N is the population size times a normalized version of S.

Proof:

Let S(a) be the survivorship curve as a function of age a. Let N t (a) be the time-t distribution function of ages a in the population. That is, ∫ r s N t (a) da is the number of individuals in the population between age r and age s at time t.

Suppose a tiny increment of time da elapses. For all a ≥ 0, we have

N t+da (a + da) = N t (a) * S(a + da)/S(a), (call this the "N equation")

because the N t (a) individuals that used to have age a now have age a + da, except for the fraction that died over the time interval da, and the fraction that didn't die over this time interval is the fraction surviving to age a + da, relative to the fraction that already survived to age a.

Since our population is stationary, we want to find a stationary population distribution, i.e., we want a single, t-independent function N(a) such that N(a) = N t (a) for all t and for all a. For such a function N, the N equation requires that

N(a + da) = N(a) * S(a + da)/S(a).

Clearly one such function is N(a) = k S(a) for all a and any constant k, so k S(a) is a stationary distribution.

Since ∫ r s N(a) da is the number of individuals in the population alive between ages r and s, ∫ 0 ∞ N(a) da must equal the population size, P. That means

∫ 0 ∞ k S(a) da = P, or

k = P / (∫ 0 ∞ S(a) da).

In the literature on discrete Markov chains, there's a theorem about a stationary distribution being unique under certain conditions. My setup here is continuous, but assuming that a similar theorem applies, and assuming the right conditions hold (do they?), we have that k S(a) is the unique stationary distribution. ■



Counting non-measured population members

Suppose we measure the population size of a species, finding that the number of individuals at least age A min is P meas . Since we didn't count individuals younger than A min years old, the actual population size P actual is slightly larger.

In particular,

P meas := ∫ A min ∞ N(a) da , while

P actual := ∫ 0 ∞ N(a) da .

Hence:

P actual = P meas * (∫ 0 ∞ N(a) da) / (∫ A min ∞ N(a) da) = P meas (∫ 0 ∞ S(a) da) / (∫ A min ∞ S(a) da).

Births per unit time

We can picture the population as is shown in the following diagram:



Because this is a survivorship graph, the number of individuals that die in a time interval is proportional to the difference in y values over that time interval. Since who will die at what age is deterministic, we can take a God's eye view and sort individuals along the "starting line" of the y axis such that they die at the right times. We can picture the individuals like water drops in a river that run over a curved cliff. If the stream is flowing in a stable way, then any given still-picture snapshot of the river will show the distribution of the population by survival age, which is a visual way to understand the "population distribution is proportional to survivorship distribution" theorem.

The individuals within the blue shaded region of the graph are precisely those that will reproduce within at most A r years from now. Let the fraction of individuals in this box be R. Then the rate of individuals achieving the age of reproduction per year is R P actual / A r . Since each reproduction event produces E/2 hatching eggs per parent (or E hatching eggs per mother), this implies that the rate of eggs hatching per year EPY is

EPY = E R P actual / (2 A r ).

To calculate R, we can divide the area of the blue shaded rectangle by the total area under the survivorship curve. The area of the rectangle is easy: length * width = (2/E) * A r . The area under the whole curve is

∫ 0 ∞ S(a) da = ∫ 0 ∞ exp(-η (eb a - 1)) da.

I don't know if this is possible to integrate analytically, so for this calculator, I'm integrating it numerically.

Suffering per birth

Now that we have an expression for the number of eggs of the species that are hatched per year, all we need to calculate total suffering per year is to estimate the average suffering that results from the individual that will be born from a given egg.

Suffering given lifespan

Newborn individuals are less complex and have less developed neural wiring than adults. To quantify this effect, define a function c(a) that describes how conscious an individual is at age a, relative to how conscious it would be as a mature adult. For convenience, let's take "mature adult" to mean a = A r . I assume that prior to maturity, c(a) has the form (a/A r )α for some α ≥ 0. After age A r , I assume that c(a) remains at 1. I think a good choice of α is around 1/2, which says that animals become more sentient quickly early in development and more slowly later in development. For example, if for a stone-age human, A r = 25 (say), then a child of age 6.25 years would be considered (6.25/25)0.5 = 1/2 as sentient as an adult. (Even this seems too uncharitable toward the child, but probably for other species, especially those that develop through many distinct stages like larva to pupa to adult, this sentience curve is more reasonable.) If you want no sentience distinctions among organisms by age, you can set α = 0.

Next, we need to describe the suffering that an individual experiences with a given lifetime of Y years. For simplicity, assume that the suffering (or, if you're a classical utilitarian, you can take this parameter to be happiness minus suffering) of the individual is a constant L units per year over time (relative to its maximal consciousness at each time point). And the pain of dying (such as by predation, disease, or starvation) is a constant amount D when it happens (again, relative to maximal consciousness at that time).

So, the total suffering TS of the individual is

TS(Y) = c(Y) D + ∫ 0 Y c(a) L da.

If Y ≤ A r , this equals

TS(Y) = (Y/A r )α D + ∫ 0 Y (a/A r )α L da

= (Y / A r )α D + (L / A r α) ∫ 0 Y aα da

= (Y / A r )α D + (L / A r α) (1/[1+α]) (Yα+1).

And if Y > A r :

TS(Y) = c(Y) D + ∫ 0 A r c(a) L da + ∫ A r Y c(a) L da

TS(Y) = D + (L / A r α) (1/[1+α]) (A r α+1) + L (Y - A r )

TS(Y) = D + (L A r /[1+α]) + L (Y - A r ).

Average suffering

Now that we have a function TS for the total suffering given a lifespan of Y, we need to take an expectation over the probability of having each given lifespan. We can do this using the probability density function f(a) of the Gompertz distribution, which according to Wikipedia is

f(a; η, b) = b η eb a eη exp(-η eb a).

Average suffering over all eggs is then

AS = ∫ 0 ∞ TS(a) f(a; η, b) da.

Once again, this is hopeless to evaluate analytically, so my calculator does so numerically.

Putting the pieces together

Given the above, total, population-wide suffering per year (PWSPY) is just the rate of egg production, EPY, times average suffering per egg, AS. Note that this is actually the quantity of future suffering produced by a year's worth of egg laying (i.e., the suffering those now-hatching individuals will experience over the entirety of their lives), but assuming a stable population, the amount of future suffering produced per year should equal the amount of suffering actually endured during a year. (If this weren't true, there would be either a surplus or deficit of suffering endured relative to suffering created, and since the population is stable, that surplus or deficit would be the same every year indefinitely, leading to an infinite mismatch between suffering created vs. suffering endured.)

Here's a simple example to make the point concrete. The following figure helps illustrate the text:



At the beginning of this year, there's a population with six individuals: four have age 0 years (two male, two female), and two have age 1 year (one male, one female). At the end of this year, two of those currently aged 0 will die, and both individuals currently aged 1 will die. Hence, total suffering this year is 6L+4D, since all six individuals live one year, and four die. (For simplicity, I'm here assuming that individuals don't become more sentient with age, i.e., that c(a) = 1 for all a.) A r = 2, and the female individual who will reach age 2 at the end of the year will lay E = 4 hatching eggs, i.e., EPY = 4. Once laid, two of those eggs will live for 1 year, and two will live for 2 years. TS for an offspring that will live 1 year is L+D, and TS for an offspring that will live 2 years is 2L+D. AS = [(L+D) + (2L+D)]/2 = 1.5L+D. So the total suffering that will eventually be endured by the offspring laid this year is EPY * AS = 4 * (1.5L+D) = 6L+4D. This is the same as the total suffering over the current year.

Calculator for total suffering per year

PWSPY is calculated below for some default parameter values.e The units of the calculated numbers are arbitrary, but comparisons across species are meaningful. Note that if you want to compare species with different degrees of sentience, you should multiply these numbers by degrees of sentience before comparing them.

Variable Symbol Value Average eggs laid per reproducing mother E laid Hatching rate: fraction of laid eggs that hatch hatch/laid Average eggs hatched per reproducing mother E = E laid * (hatch/laid) Age (in years) at which individuals lay eggs A r Age (in years) of individuals at which they begin getting counted in population measurements A min Measured population estimate (enter the order of magnitude) P meas 10^ Suffering (or happiness minus suffering) per year during life L Suffering while dying D Exponent for sentience as a function of age relative to reproducing age α Formula for η η(E) = x Ey + z * E^ + Shape parameter of the Gompertz distribution η Scale parameter of the Gompertz distribution b Actual population (including those too young to be noticed) P actual Fraction of currently living individuals who will reproduce in the future R Total eggs hatched per year EPY Average suffering per egg hatched AS Population-wide suffering per year PWSPY Suffering per organism in the measured population per year PWSPY/P meas

Sample suffering numbers by species

Following are some rough comparisons among species using the calculator. The numbers are mostly driven by differences in A r . These figures don't reflect per-species differences in brain complexity; to get the total amount of brain-complexity-weighted suffering of the species, you should multiply each of these numbers by (P meas of the species) * (brain complexity of the species).

Species E laid hatch/laid A r A min PWSPY/P meas elephantf mallard (Anas platyrhynchos) g h i j windowpane fish (Scophthalmus aquosus) k l m n southern green stink bug (Nezara viridula)o zooplankton (crustacean kinds) p q r s

Note that if you change L from its default value of -5 to, say, +5, then the above table will show that elephants and mallards have net positive lives, but windowpanes, stink bugs, and zooplankton still have net negative lives. This illustrates the basic argument for the predominance of suffering in nature: Most wild animals have many offspring with short lives, which means that in aggregate, the painfulness of their deaths can't be outweighed even by positive lives up to the point of death.

Also, the above calculations assume that the animals reproduce year-round. If this is not the case, you can make adjustments. For example: "Nezara viridula reproduces throughout the year in tropics. In temperate zones this species presents a reproductive winter diapause [...]". So for temperate climates, if the bugs are active, say, for half the year, you could multiply the calculated PWSPY/P meas number by 1/2. This correction alone is not sufficient to give fully accurate results because for species where winter interrupts breeding, the population is not stationary, whereas my model assumes a stationary population. But the numbers are probably not vastly far off.

How suffering varies with parameters

Reproducing age

This chart plots suffering per organism in the measured population per year for various values of reproducing age, with all other parameters having their default values as previously set:

As expected, the amount of suffering decreases (i.e., values become less negative) with increasing lifespan.

The curve has a similar (though not identical) shape as a plot of -1/A r . The main reason for this is the pain of death: Since death entails a given amount of pain, total pain per year from death will be (number of deaths per year)*(pain per death), and number of deaths per year is roughly related to 1/A r (since a doubled A r roughly translates to something like half as many eggs hatched per year, although the relationship isn't exact because the distribution of lifespans is complicated). If you set D to 0, you can see that the above graph becomes much more mild.

Eggs per reproducing mother

This chart plots suffering per organism in the measured population per year for various values of eggs per reproducing mother, with all other parameters having their default values as previously set:

You might have expected that suffering would grow almost linearly with numbers of eggs per mother because more eggs means more offspring dying young. However, recall that

EPY = R P actual E / (2A r ).

P actual depends on E, but it changes fairly slowly with changing E. So ignoring P actual , we have EPY ∝ R E. The reason this isn't proportional to just E is that R is a decreasing function of E. The intuition is that if E is bigger, then more of the organisms in a given population are non-reproducing, which means the fraction of individuals who will actually become parents is smaller, and this partly offsets E being bigger.

R only partly offsets E because when the population size is measured, I assume the scientists taking the measurements count individuals that both will and will not reproduce. If we were to only count reproducing individuals as part of P meas , then the graph would look mostly linear. Indeed, if you set A min = A r , that's what you see.

Another reason the curve doesn't slope down more dramatically is that average suffering per individual, AS, is a decreasing function of E. That's because when E is bigger, organisms on average die sooner (since the survivorship curve is steeper), so the suffering of any given organism is on average smaller due to its having (1) a shorter lifespan and (2) less sentience when it dies because it's less developed.

Gompertz shape parameter (η)

If you vary the formula for η in the above calculator, you can see that the final number is extremely insensitive to it. A value of η closer to 0 (meaning that more organisms live longer lives) increases suffering per individual (since an individual's life is longer) but decreases the fraction of reproducing individuals relative to the total population size, because when a population census is taken, there are more non-reproducing animals counted (i.e., the total area under the survivorship curve is bigger).

This would be less true if we didn't count as many young, non-reproducing individuals when making population estimates. Indeed, if you set A min closer to A r , the final calculated numbers become more sensitive to the η formula.

Acknowledgments

One of the inspirations for this piece was some data on insect lifespans sent to me by Carl Shulman.