humpfit {vegan} | R Documentation

## No-interaction Model for Hump-backed Species Richness vs. Biomass

### Description

Function `humpfit` fits a no-interaction model for species richness vs. biomass data (Oksanen 1996). This is a null model that produces a hump-backed response as an artifact of plant size and density.

### Usage

    humpfit(mass, spno, family = poisson, start)
    ## S3 method for class 'humpfit':
    summary(object, ...)
    ## S3 method for class 'humpfit':
    predict(object, newdata = NULL, ...)
    ## S3 method for class 'humpfit':
    plot(x, xlab = "Biomass", ylab = "Species Richness", lwd = 2,
        l.col = "blue", p.col = 1, type = "b", ...)
    ## S3 method for class 'humpfit':
    points(x, ...)
    ## S3 method for class 'humpfit':
    lines(x, segments=101,  ...)
    ## S3 method for class 'humpfit':
    profile(fitted, parm = 1:3, alpha = 0.01, maxsteps = 20, del = zmax/5, ...)

### Arguments

`mass` | Biomass.
`spno` | Species richness.
`start` | Vector of starting values for all three parameters.
`family` | Family of error distribution. Any `family` can be used, but the link function is always Fisher's diversity model, and other `link` functions are silently ignored.
`x, object, fitted` | Result object of `humpfit`
`newdata` | Values of `mass` used in `predict`. The original data values are used if missing.
`xlab,ylab` | Axis labels in `plot`
`lwd` | Line width
`l.col, p.col` | Line and point colour in `plot`
`type` | Type of `plot`: `"p"` for observed points, `"l"` for fitted lines, `"b"` for both, and `"n"` for only setting axes.
`segments` | Number of segments used for fitted lines.
`parm` | Profiled parameters.
`alpha, maxsteps, del` | Parameters for profiling range and density.
`...` | Other parameters to functions.

### Details

The no-interaction model assumes that the humped species richness pattern along biomass gradient is an artifact of plant size and density (Oksanen 1996). For low-biomass sites, it assumes that plants have a fixed size, and biomass increases with increasing number of plants. When the sites becomes crowded, the number of plants and species richness reaches the maximum. Higher biomass is reached by increasing the plant size, and then the number of plants and species richness will decrease. At biomasses below the hump, plant number and biomass are linearly related, and above the hump, plant number is proportional to inverse squared biomass. The number of plants is related to the number of species by the relationship (`link` function) from Fisher's log-series (Fisher et al. 1943).

The parameters of the model are:

1. `hump`: the location of the hump on the biomass gradient.
2. `scale`: an arbitrary multiplier to translate the biomass into virtual number of plants.
3. `alpha`: Fisher's alpha to translate the virtual number of plants into number of species.

The parameters `scale` and `alpha` are intermingled and this function should not be used for estimating Fisher's alpha. Probably the only meaningful and interesting parameter is the location of the `hump`.

Function may be very difficult to fit and easily gets trapped into local solutions, or fails with non-Poisson families, and function `profile` should be used to inspect the fitted models. If you have loaded `package` MASS, you can use functions `plot.profile.glm`, `pairs.profile.glm` for graphical inspection of the profiles, and `confint.profile.glm` for the profile based confidence intervals.

The original model intended to show that there is no need to speculate about `competition' and `stress' (Al-Mufti et al. 1977), but humped response can be produced as an artifact of using fixed plot size for varying plant sizes and densities.

### Value

The function returns an object of class `"humpfit"` inheriting from class `"glm"`. The result object has specific `summary`, `predict`, `plot`, `points` and `lines` methods. In addition, it can be accessed by the following methods for `glm` objects: `AIC`, `extractAIC`, `deviance`, `coef`, `residuals.glm` (except `type = "partial"`), `fitted`, and perhaps some others. In addition, function `ellipse.glm` (package ellipse) can be used to draw approximate confidence ellipses for pairs of parameters, if the normal assumptions look appropriate.

### Note

The function is a replacement for the original `GLIM4` function at the archive of Journal of Ecology. There the function was represented as a mixed `glm` with one non-linear parameter (`hump`) and a special one-parameter link function from Fisher's log-series. The current function directly applies non-linear maximum likelihood fitting using function `nlm`. Some expected problems with the current approach are:

- The function is discontinuous at `hump` and may be difficult to optimize in some cases (the lines will always join, but the derivative jumps).
- The function does not try very hard to find sensible starting values and can fail. The user may supply starting values in argument `start` if fitting fails.
- The estimation is unconstrained, but both `scale` and `alpha` should always be positive. Perhaps they should be fitted as logarithmic. Fitting `Gamma` `family` models might become easier, too.

### Author(s)

Jari Oksanen

### References

Al-Mufti, M.M., Sykes, C.L, Furness, S.B., Grime, J.P & Band, S.R. (1977) A quantitative analysis of shoot phenology and dominance in herbaceous vegetation. Journal of Ecology 65,759–791.

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 of an animal population. Journal of Animal Ecology 12, 42–58.

Oksanen, J. (1996) Is the humped relationship between species richness and biomass an artefact due to plot size? Journal of Ecology 84, 293–295.

### See Also

`fisherfit`, `profile.glm`, `confint.glm`.

### Examples

    ##
    ## Data approximated from Al-Mufti et al. (1977)
    ##
    mass <- c(140,230,310,310,400,510,610,670,860,900,1050,1160,1900,2480)
    spno <- c(1,  4,  3,  9, 18, 30, 20, 14,  3,  2,  3,  2,  5,  2)
    sol <- humpfit(mass, spno)
    summary(sol) # Almost infinite alpha...
    plot(sol)
    # confint is in MASS, and impicitly calls profile.humpfit.
    # Parameter 3 (alpha) is too extreme for profile and confint, and we
    # must use only "hump" and "scale".
    library(MASS)
    plot(profile(sol, parm=1:2))
    confint(sol, parm=c(1,2))

[Package vegan version 1.8-6 Index]