R: Fit Fisher's Logseries and Preston's Lognormal Model to...

fisherfit {vegan} | R Documentation

## Fit Fisher's Logseries and Preston's Lognormal Model to Abundance Data

### Description

Function `fisherfit` fits Fisher's logseries to abundance data. Function `prestonfit` groups species frequencies into doubling octave classes and fits Preston's lognormal model, and function `prestondistr` fits the truncated lognormal model without pooling the data into octaves.

### Usage

    fisherfit(x, ...)
    prestonfit(x, tiesplit = TRUE, ...)
    prestondistr(x, truncate = -1, ...)
    ## S3 method for class 'prestonfit'
    plot(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue",
        line.col = "red", lwd = 2, ...)
    ## S3 method for class 'prestonfit'
    lines(x, line.col = "red", lwd = 2, ...)
    veiledspec(x, ...)
    as.fisher(x, ...)
    ## S3 method for class 'fisher'
    plot(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue",
                 kind = c("bar", "hiplot", "points", "lines"), add = FALSE, ...)
    as.preston(x, tiesplit = TRUE, ...)
    ## S3 method for class 'preston'
    plot(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", ...)
    ## S3 method for class 'preston'
    lines(x, xadjust = 0.5, ...)

### Arguments

`x` | Community data vector for fitting functions or their result object for `plot` functions.
`tiesplit` | Split frequencies 1, 2, 4, 8 etc between adjacent octaves.
`truncate` | Truncation point for log-Normal model, in log2 units. Default value -1 corresponds to the left border of zero Octave. The choice strongly influences the fitting results.
`xlab, ylab` | Labels for `x` and `y` axes.
`bar.col` | Colour of data bars.
`line.col` | Colour of fitted line.
`lwd` | Width of fitted line.
`kind` | Kind of plot to drawn: `"bar"` is similar bar plot as in `plot.fisherfit`, `"hiplot"` draws vertical lines as with `plot(..., type="h")`, and `"points"` and `"lines"` are obvious.
`add` | Add to an existing plot.
`xadjust` | Adjustment of horizontal positions in octaves.
`...` | Other parameters passed to functions. Ignored in `prestonfit` and `tiesplit` passed to `as.preston` in `prestondistr`.

### Details

In Fisher's logarithmic series the expected number of species f with n observed individuals is f_n = α x^n / n (Fisher et al. 1943). The estimation is possible only for genuine counts of individuals. The parameter α is used as a diversity index, and α and its standard error can be estimated with a separate function `fisher.alpha`. The parameter x is taken as a nuisance parameter which is not estimated separately but taken to be n/(n+α). Helper function `as.fisher` transforms abundance data into Fisher frequency table.

Preston (1948) was not satisfied with Fisher's model which seemed to imply infinite species richness, and postulated that rare species is a diminishing class and most species are in the middle of frequency scale. This was achieved by collapsing higher frequency classes into wider and wider “octaves” of doubling class limits: 1, 2, 3–4, 5–8, 9–16 etc. occurrences. It seems that Preston regarded frequencies 1, 2, 4, etc.. as “tied” between octaves (Williamson & Gaston 2005). This means that only half of the species with frequency 1 are shown in the lowest octave, and the rest are transferred to the second octave. Half of the species from the second octave are transferred to the higher one as well, but this is usually not as large a number of species. This practise makes data look more lognormal by reducing the usually high lowest octaves. This can be achieved by setting argument `tiesplit = TRUE`. With `tiesplit = FALSE` the frequencies are not split, but all ones are in the lowest octave, all twos in the second, etc. Williamson & Gaston (2005) discuss alternative definitions in detail, and they should be consulted for a critical review of log-Normal model.

Any logseries data will look like lognormal when plotted in Preston's way. The expected frequency f at abundance octave o is defined by f = S0 exp(-(log2(o)-mu)^2/2/sigma^2), where μ is the location of the mode and σ the width, both in log2 scale, and S0 is the expected number of species at mode. The lognormal model is usually truncated on the left so that some rare species are not observed. Function `prestonfit` fits the truncated lognormal model as a second degree log-polynomial to the octave pooled data using Poisson (when `tiesplit = FALSE`) or quasi-Poisson (when `tiesplit = TRUE`) error. Function `prestondistr` fits left-truncated Normal distribution to log2 transformed non-pooled observations with direct maximization of log-likelihood. Function `prestondistr` is modelled after function `fitdistr` which can be used for alternative distribution models.

The functions have common `print`, `plot` and `lines` methods. The `lines` function adds the fitted curve to the octave range with line segments showing the location of the mode and the width (sd) of the response. Function `as.preston` transforms abundance data to octaves. Argument `tiesplit` will not influence the fit in `prestondistr`, but it will influence the barplot of the octaves.

The total extrapolated richness from a fitted Preston model can be found with function `veiledspec`. The function accepts results both from `prestonfit` and from `prestondistr`. If `veiledspec` is called with a species count vector, it will internally use `prestonfit`. Function `specpool` provides alternative ways of estimating the number of unseen species. In fact, Preston's lognormal model seems to be truncated at both ends, and this may be the main reason why its result differ from lognormal models fitted in Rank–Abundance diagrams with functions `rad.lognormal`.

### Value

The function `prestonfit` returns an object with fitted `coefficients`, and with observed (`freq`) and fitted (`fitted`) frequencies, and a string describing the fitting `method`. Function `prestondistr` omits the entry `fitted`. The function `fisherfit` returns the result of `nlm`, where item `estimate` is α. The result object is amended with the `nuisance` parameter and item `fisher` for the observed data from `as.fisher`

### Author(s)

Bob O'Hara and Jari Oksanen.

### References

Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943). The relation between the number of species and the number of individuals in a random sample of animal population. Journal of Animal Ecology 12: 42–58.

Preston, F.W. (1948) The commonness and rarity of species. Ecology 29, 254–283.

Williamson, M. & Gaston, K.J. (2005). The lognormal distribution is not an appropriate null hypothesis for the species–abundance distribution. Journal of Animal Ecology 74, 409–422.

### See Also

`diversity`, `fisher.alpha`, `radfit`, `specpool`. Function `fitdistr` of MASS package was used as the model for `prestondistr`. Function `density` can be used for smoothed “non-parametric” estimation of responses, and `qqplot` is an alternative, traditional and more effective way of studying concordance of observed abundances to any distribution model.

### Examples

    data(BCI)
    mod <- fisherfit(BCI[5,])
    mod
    # prestonfit seems to need large samples
    mod.oct <- prestonfit(colSums(BCI))
    mod.ll <- prestondistr(colSums(BCI))
    mod.oct
    mod.ll
    plot(mod.oct)
    lines(mod.ll, line.col="blue3") # Different
    ## Smoothed density
    den <- density(log2(colSums(BCI)))
    lines(den$x, ncol(BCI)*den$y, lwd=2) # Fairly similar to mod.oct
    ## Extrapolated richness
    veiledspec(mod.oct)
    veiledspec(mod.ll)

[Package vegan version 2.4-3 Index]