# Ecological Niche Factor Analysis

### Description

`enfa`

performs an Ecological Niche Factor Analysis.
`hist.enfa`

draws histograms of the row scores or of the initial
variables of the ENFA.

### Usage

1 2 3 4 |

### Arguments

`dudi` |
a duality diagram, object of class |

`pr` |
a vector giving the utilization weights associated to each unit |

`scannf` |
logical. Whether the eigenvalues barplot should be displayed |

`nf` |
an integer indicating the number of kept specialization axes |

`x` |
an object of class |

`scores` |
logical. If |

`type` |
what type of plot should be drawn. Possible types are: |

`adjust` |
if |

`Acol` |
if |

`Ucol` |
if |

`Aborder` |
color for the border of the histograms of the available pixels |

`Uborder` |
color for the border of the histograms of the used pixels |

`Alwd` |
if |

`Ulwd` |
if |

`...` |
further arguments passed to or from other methods |

### Details

The niche concept, as defined by Hutchinson (1957), considers the ecological niche of a species as an hypervolume in the multidimensional space defined by environmental variables, within which the populations of a species can persist. The Ecological Niche Factor Analysis (ENFA) has been developped by Hirzel et al. (2002) to analyse the position of the niche in the ecological space. Nicolas Perrin (1984) described the position of the niche in the n-dimensional space using two measures: the M-specialization (hereafter termed marginality) and the S-specialization (hereafter termed specialization). The marginality represents the squared distance of the niche barycentre from the mean available habitat. A large specialization corresponds to a narrow niche relative to the habitat conditions available to the species.

The ENFA first extracts an axis of marginality (vector from the average of available habitat conditions to the average used habitat conditions). Then the analysis extracts successives orthogonal axes (i.e. uncorrelated), which maximises the specialization of the species. The calculations used in the function are described in Hirzel et al. (2002).

The function `enfa`

can be used on both quantitative variables and
qualitative variables (though the interpretation of the results of the
ENFA for qualitative variables is still under research), provided that
the table containing the values of habitat variables (columns) for
each resource unit (rows) is correctly transformed
(e.g. column-centered and standardised for tables containing only
quantitative variables), and that appropriate column weights are given
(e.g. the sum of the weights for
the levels of a factor should be the same as the weight of one
quantitative variable). Therefore, the function `enfa`

requires
that a preliminary multivariate analysis is performed on the table
(using analysis of the family of duality diagram, e.g. principal
component analysis or Hill and Smith analysis). The object returned
by this preliminary analysis contains the appropriate weights and
transformation of the original data frame. For example,
the function `dudi.mix`

can be used first on the data.frame
containing the value of both quantitative (e.g. slope, elevation) and
qualitative habitat variables (e.g. vegetation) for each pixel of a
raster map. The result of this analysis can then be passed as argument
to the function `enfa`

(see examples below).

### Value

`enfa`

returns a list of class `enfa`

containing the
following components:

`call` |
original call. |

`tab` |
a data frame with n rows and p columns. |

`pr` |
a vector of length n containing the number of points in each pixel of the map. |

`nf` |
the number of kept specialization axes. |

`m` |
the marginality (squared length of the marginality vector). |

`s` |
a vector with all the eigenvalues of the analysis. |

`lw` |
row weights, a vector with n components. |

`li` |
row coordinates, data frame with n rows and nf columns. |

`cw` |
column weights, a vector with p components. |

`co` |
column coordinates, data frame with p rows and nf columns. |

`mar` |
coordinates of the marginality vector. |

### Author(s)

Mathieu Basille basille@ase-research.org

### References

Hutchinson, G.E. (1957) Concluding Remarks. *Cold Spring Harbor
Symposium on Quantitative Biology*, **22**: 415–427.

Perrin, N. (1984) Contribution a l'ecologie du genre Cepaea (Gastropoda) : Approche descriptive et experimentale de l'habitat et de la niche ecologique. These de Doctorat. Universite de Lausanne, Lausanne.

Hirzel, A.H., Hausser, J., Chessel, D. and Perrin, N. (2002)
Ecological-niche factor analysis: How to compute habitat-suitability
maps without absence data? *Ecology*, **83**, 2027–2036.

Basille, M., Calenge, C., Marboutin, E., Andersen, R. and Gaillard,
J.M. (2008) Assessing habitat selection using multivariate statistics:
Some refinements of the ecological-niche factor
analysis. *Ecological Modelling*, **211**, 233–240.

### See Also

`niche`

, `kselect`

for other types of
analysis of the niche, when several species are under studies,
and `scatter.enfa`

to have a
graphical display of objects of class
`enfa`

. See `madifa`

for another factorial analysis of
the ecological niche.

### Examples

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ```
data(lynxjura)
map <- lynxjura$map
## We keep only "wild" indices.
locs <- lynxjura$locs
locs <- locs[slot(locs, "data")[,2]!="D",]
hist(map, type = "l")
## The variable artif is far from symetric
## We perform a square root transformation
## of this variable
## We therefore normalize the variable 'artif'
slot(map,"data")[,4] <- sqrt(slot(map,"data")[,4])
hist(map, type = "l")
## We prepare the data for the ENFA
tab <- slot(map, "data")
pr <- slot(count.points(locs, map), "data")[,1]
## We then perform the PCA before the ENFA
pc <- dudi.pca(tab, scannf = FALSE)
## The object 'pc' contains the transformed table (i.e.
## centered so that all columns have a mean of 0
## and scaled so that all columns have a variance of 1
## 'pc' also contains the weights of the habitat variables,
## and the weights of the pixels in the analysis
(enfa1 <- enfa(pc, pr,
scannf = FALSE))
hist(enfa1)
hist(enfa1, scores = FALSE, type = "l")
## scatterplot
scatter(enfa1)
## randomization test
## Not run:
(renfa <- randtest(enfa1))
plot(renfa)
## End(Not run)
``` |