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.fisherfit(x, ...)
## S3 method for class 'fisherfit':
confint(object, parm, level = 0.95, ...)
## S3 method for class 'fisherfit':
profile(fitted, alpha = 0.01, maxsteps = 20, del = zmax/5,
...)
prestonfit(x, ...)
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, ...)plot functions.x and y axes.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 $\alpha$. The result object is amended with the
following items:as.fisher.nlm. The estimation is possible only for genuine
counts of individuals. The parameter $\alpha$ is used as a
diversity index, and $\alpha$ 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+\alpha)$. Helper
function as.fisher transforms abundance data into Fisher
frequency table. Function fisherfit estimates the standard error of
$\alpha$. However, the confidence limits cannot be directly
estimated from the standard errors, but you should use function
confint based on profile likelihood. Function confint
uses function confint.glm of the profile.fisherfit for the profile
likelihood. Function profile.fisherfit follows
profile.glm and finds the $\tau$ parameter or
signed square root of two times log-Likelihood profile. The profile can
be inspected with a plot function which shows the $\tau$
and a dotted line corresponding to the Normal assumption: if standard
errors can be directly used in Normal inference these two lines
are similar.
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. Any logseries data will look like
lognormal when plotted this way. The expected frequency $f$ at abundance
octave $o$ is defined by $f_o = S_0 \exp(-(\log_2(o) -
\mu)^2/2/\sigma^2)$, where
$\mu$ is the location of the mode and $\sigma$ the width, both
in $\log_2$ scale, and $S_0$ 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
error. Function prestondistr fits left-truncated Normal distribution to
$\log_2$ 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.
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.
Kempton, R.A. & Taylor, L.R. (1974). Log-series and log-normal parameters as diversity discriminators for Lepidoptera. Journal of Animal Ecology 43: 381--399.
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.
diversity, fisher.alpha,
radfit, specpool. Function
fitdistr of 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.data(BCI)
mod <- fisherfit(BCI[5,])
mod
plot(profile(mod))
confint(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)Run the code above in your browser using DataLab