We have three data sources for this indicator:
Ellenberg indicator data
NiN generalized species lists for mountain ecosystems
ANO data
- geography
- locations
- species
ell.dat is a data frame with British Ellenberg species indicators. Literature reference:
Hill, M. O., Mountford, J. O., Roy, D. B., & Bunce, R. G. H. (1999). Ellenberg’s Indicator Values for British Plants. Institute of Terrestrial Ecology, Huntingdon, UK.
head(ell.dat)
## ord species L F R N S HM T K TRU
## 1 P Acaena novae-zelandiae 8 3 6 3 0 NA NA NA NA
## 2 P Acer campestre 5 5 7 6 0 NA NA NA NA
## 3 P Acer platanoides 4 5 7 7 0 NA NA NA NA
## 4 P Acer pseudoplatanus 4 5 6 6 0 NA NA NA NA
## 5 P Aceras anthropophorum 7 4 8 3 0 NA NA NA NA
## 6 P Achillea millefolium 7 5 6 4 1 NA NA NA NA
Eco_State.RData is an R-list containing the generalized species lists from NiN. References:
Halvorsen, R., Skarpaas, O., Bryn, A., Bratli, H., Erikstad, L., Simensen, T., & Lieungh, E. (2020). Towards a systematics of ecodiversity: The EcoSyst framework. Global Ecology and Biogeography, 29(11), 1887-1906. doi:10.1111/geb.13164
Halvorsen, R., Bryn, A., & Erikstad, L. (2015). NiNs systemkjerne – teori, prinsipper og inndelingskriterier. – Natur i Norge, Artikkel 1 (versjon 2.0.0)
str(Eco_State)
ANOpkt.geo is a data frame with geographical information for each ANO site and point
ANOpkt.geo[1:3,]
## X OBJECTID SSBID ANOID RSIZE ROW COL XCOOR YCOOR ANONUM PakkeNr
## 1 1 818 2.094001e+13 ANO0003 500 402 283 94250 6559750 3 5
## 2 2 601 2.343501e+13 ANO0006 500 901 1326 343750 7081250 6 5
## 3 3 751 2.114501e+13 ANO0007 500 443 146 114750 6491250 7 5
## OvervÃ.kingsÃ.r CountyNr MunicNr CountyName Region.x RegionNr Kommune_OLD
## 1 2019 9 4220 Aust-Agder nor S 4 938
## 2 2019 50 5038 Trøndelag nor C 2 1721
## 3 2019 9 4202 Aust-Agder nor S 4 904
## Kommune Fylke Region.y refs_blabar
## 1 BYGLAND Aust-Agder Sørlandet 12.5
## 2 VERDAL Nord-Trøndelag Midt-Norge 12.5
## 3 GRIMSTAD Aust-Agder Sørlandet 12.5
ANOpkt is a data frame with ecological information for each ANO-point (only showing the header here)
colnames(ANOpkt)
## [1] "Aar"
## [2] "ObjectID"
## [3] "GlobalID"
## [4] "ANO_flate_ID"
## [5] "ANO_punkt_ID"
## [6] "Hovedoekosystem_orig"
## [7] "Hovedoekosystem_rute"
## [8] "Hovedoekosystem_sirkel"
## [9] "Andel_hovedoekosystem_sirkel"
## [10] "Punktet_utilgjengelig"
## [11] "Begrunnelse_utilgjengelig"
## [12] "Hovedtype_rute"
## [13] "Hovedtype_rute_navn"
## [14] "Kartleggingsenhet_rute"
## [15] "Hovedtype_sirkel"
## [16] "Hovedtype_sirkel_navn"
## [17] "Kartleggingsenhet_sirkel"
## [18] "Andel_Kartleggingsenhet_sirkel"
## [19] "Groeftingsintensitet"
## [20] "Aktuell_bruksintensitet"
## [21] "Beitetrykk"
## [22] "Slaatteintensitet"
## [23] "Spor_etter_ferdsel_med_tunge_kjoeretoey"
## [24] "Spor_etter_slitasje_og_slitasjebetinget_erosjon"
## [25] "Kommentar_NiN"
## [26] "Arter_registrert"
## [27] "Arter_tilstede"
## [28] "Dekning_karplanter_totalt"
## [29] "Dekning_karplanter_feltsjikt"
## [30] "Dekning_moser"
## [31] "Dekning_torvmoser"
## [32] "Dekning_lav"
## [33] "Dekning_stroe"
## [34] "Dekning_bar_substrat"
## [35] "Dekning_grov_ved"
## [36] "Dekning_alger"
## [37] "Kommentar_ruten"
## [38] "Dekning_krypende_vier"
## [39] "Dekning_ikke_krypende_vier"
## [40] "Dekning_vedplanter_feltsjikt"
## [41] "Dekning_busk_busksjikt"
## [42] "Dekning_traer_tresjikt"
## [43] "Dekning_roesslyngskade"
## [44] "Dekning_problemarter"
## [45] "Dekning_fremmedarter"
## [46] "Kommentar_sirkel"
## [47] "CreationDate"
## [48] "Creator"
## [49] "EditDate"
## [50] "Editor"
sp is a data frame with plant species information (occurrence and abundance) for each ANO-point
sp[1:3,]
## Aar ObjectID GlobalID
## 1 2020 1 2c8884e3-192e-42bf-9627-f0f27b1f9135
## 2 2020 2 665f55e2-4efe-496b-a292-73101afd37c8
## 3 2020 3 d78897b8-b550-4cdf-9f9d-d0e9deb8def0
## Navn Dekning..
## 1 blåbær_vaccinium_myrtillus 27
## 2 maiblom_maianthemum_bifolium 3
## 3 skogstjerne_lysimachia_europaea 2
## ParentGlobalID CreationDate
## 1 b89694ab-9a06-4648-9b7e-7ebd320c8adb 17.06.2020 08:08
## 2 b89694ab-9a06-4648-9b7e-7ebd320c8adb 17.06.2020 08:08
## 3 b89694ab-9a06-4648-9b7e-7ebd320c8adb 17.06.2020 08:08
## Creator EditDate Editor
## 1 heimyk_miljodirektoratet 17.06.2020 08:08 heimyk_miljodirektoratet
## 2 heimyk_miljodirektoratet 17.06.2020 08:08 heimyk_miljodirektoratet
## 3 heimyk_miljodirektoratet 17.06.2020 08:08 heimyk_miljodirektoratet
After some merging and data wrangling we arrive at: (i) NiN species lists for mountains matched with Heat-requirement values (Note that the abundance values in the NiN species lists are maximum abundance). From here we can build the reference.
mount.dat.cov[1:3,]
## sp T14-C1 T14-C2 T3-C3C6 T3-C9C12 T3-C2C5 T3-C8C11 T3-C1a
## 1 Abietinella abietina 0 0 0 0.03125 0 0.375 0
## 2 Acer platanoides 0 0 0 0.00000 0 0.000 0
## 3 Achillea millefolium 0 0 0 0.00000 0 0.000 0
## T3-C1b T3-C4 T3-C7 T3-C10 T3-C13 T3-C14 T7-C1 T7-C2 T7-C3 T7-C6 T7-C8
## 1 0 0 0.03125 0.03125 0 0 0 0 0 0 0
## 2 0 0 0.00000 0.00000 0 0 0 0 0 0 0
## 3 0 0 0.00000 0.00000 0 0 0 0 0 0 0
## T7-C12 T7-C13C14 T7-C4 T7-C7C9 T7-C5 T7-C10 T22-C1C3a T22-C1C3b T22-C2C4 L N
## 1 0 0 0 0 0 0 0 0 0 8 2
## 2 0 0 0 0 0 0 0 0 0 4 7
## 3 0 0 0 0 0 0 0 0 0 7 4
…and at (ii) Species data from the ANO monitoring program matched with Heat-requirement values
sp[1:3,]
## ParentGlobalID Species Aar ObjectID
## 1 0007ef7c-b13d-4950-b8ad-9fdadbea6311 Vaccinium myrtillus 2021 15468
## 2 0007ef7c-b13d-4950-b8ad-9fdadbea6311 Festuca ovina 2021 15470
## 3 0007ef7c-b13d-4950-b8ad-9fdadbea6311 Diphasiastrum alpinum 2021 15469
## GlobalID Navn Dekning
## 1 fb262080-b939-4edb-b92a-092242f20265 blåbær_vaccinium_myrtillus 26
## 2 8652575b-66ab-4e8c-9677-6b075b7ec976 sauesvingel_festuca_ovina 1
## 3 6280b435-7ce5-43ba-a547-18cbdd97fa73 fjelljamne_diphasiastrum_alpinum 4
## CreationDate Creator EditDate
## 1 15.08.2021 10:03 wenfje_miljodirektoratet 15.08.2021 10:03
## 2 15.08.2021 10:03 wenfje_miljodirektoratet 15.08.2021 10:03
## 3 15.08.2021 10:03 wenfje_miljodirektoratet 15.08.2021 10:03
## Editor L N Hovedoekosystem_rute Hovedtype_rute
## 1 wenfje_miljodirektoratet 6 2 fjell T3
## 2 wenfje_miljodirektoratet 7 2 fjell T3
## 3 wenfje_miljodirektoratet 7 2 fjell T3
## Kartleggingsenhet_rute
## 1 T3-C-6
## 2 T3-C-6
## 3 T3-C-6
The reference condition is defined by a distribution of species indicator values (for mountain ecosystems these are Ellenberg L & N) for each basic ecosystem type (grunntype) in NiN. To get such indicator distributions we bootstrap the generalized species lists underlying the NiN-ecosystem-type-categorization on the grunntype-level and calculate a community weighted mean of Ellenberg L & N for each bootstrap in each generalized species list. That way we generate a reference distribution for each grunntype in NiN that is connected to an underlying generalized species list.
# function to calculate community weighted means of selected indicator values (ind)
# for species lists (sp) with given abundances (on a scale from 0 to 6) in one or more 'sites' (abun)
# with a given number of iterations (iter),
# with species given a certain minimum abundance occurring in all bootstraps (obl), and
# with a given resampling ratio of the original species list (rat)
# in every bootstrap iteration the abundance of the sampled species can be
# randomly changed by +/-1 if wished (var.abun)
indBoot <- function(sp,abun,ind,iter,obl,rat=2/3,var.abun=F) {
ind.b <- matrix(nrow=iter,ncol=length(colnames(abun)))
colnames(ind.b) <- colnames(abun)
ind.b <- as.data.frame(ind.b)
ind <- as.data.frame(ind)
ind.list <- as.list(1:length(colnames(ind)))
names(ind.list) <- colnames(ind)
for (k in 1:length(colnames(ind)) )
{ ind.list[[k]] <- ind.b }
for (j in 1:length(colnames(abun)) ) {
dat <- cbind(sp,abun[,j],ind)
dat <- dat[dat[,2]>0,] # only species that are present in the ecoystem
dat <- dat[!is.na(dat[,3]),] # only species that have Ellenberg values
for (i in 1:iter) {
speciesSample <- sample(dat$sp[dat[,2] < obl], size=round( (length(dat$sp)-length(dat$sp[dat[,2] > (obl-1)])) *rat,0), replace=F)
dat.b <- rbind(dat[dat[,2] > (obl-1),],
dat[match(speciesSample,dat$sp),]
)
if (var.abun==T) {
for (l in 1: nrow(dat.b)) { dat.b[l,2] <- dat.b[l,2] + sample(c(-1,0,1),size=1) }
dat.b[!is.na(dat.b[,2]) & dat.b[,2]==(0),2] <- 1
dat.b[!is.na(dat.b[,2]) & dat.b[,2]==7,2] <- 6
}
for (k in 1:length(colnames(ind))) {
if ( nrow(dat.b)>2 ) {
ind.b <- sum(dat.b[!is.na(dat.b[,2+k]),2] * dat.b[!is.na(dat.b[,2+k]),2+k] , na.rm=T) / sum(dat.b[!is.na(dat.b[,2+k]),2],na.rm=T)
ind.list[[k]][i,j] <- ind.b
} else {ind.list[[k]][i,j] <- NA}
}
print(paste(i,"",j))
}
}
return(ind.list)
}
#### running bootstraps ####
mount.ind.list <- indBoot(sp=mount.dat[,1],abun=mount.dat[,2:28],ind=mount.dat[,29:30],
iter=10000,obl=6,rat=1/3,var.abun=T)
mount.ind.list.cov <- indBoot(sp=mount.dat.cov[,1],abun=mount.dat.cov[,2:28],ind=mount.dat.cov[,29:30],
iter=10000,obl=6,rat=1/3,var.abun=T)
### fixing NaN's
for (i in 1:length(mount.ind.list) ) {
for (j in 1:ncol(mount.ind.list[[i]]) ) {
v <- mount.ind.list[[i]][,j]
v[is.nan(v)] <- NA
mount.ind.list[[i]][,j] <- v
}
}
for (i in 1:length(mount.ind.list.cov) ) {
for (j in 1:ncol(mount.ind.list.cov[[i]]) ) {
v <- mount.ind.list.cov[[i]][,j]
v[is.nan(v)] <- NA
mount.ind.list.cov[[i]][,j] <- v
}
}
Next we derive the limit and reference values from the bootstrapped distribution. e.g. upper and lower limit values = 2.5 & 97.5% percentiles, reference value = median, minimum & maximum value given by the minimum and maximum values of the Ellenberg scale (1 & 9).
summary(mount.cov.ref)
## N1 N2 hoved grunn county region Ind
## fjell:148 fjell:148 NA:148 T14 : 4 all:148 all:148 EllL1:37
## T14-C-1: 4 EllL2:37
## T14-C-2: 4 EllN1:37
## T22 : 4 EllN2:37
## T22-C-1: 4
## T22-C-2: 4
## (Other):124
## Rv Gv maxmin
## Min. :1.250 Min. :-7.429 Min. :1
## 1st Qu.:2.012 1st Qu.:-2.082 1st Qu.:1
## Median :4.831 Median : 4.181 Median :5
## Mean :4.495 Mean : 4.524 Mean :5
## 3rd Qu.:6.875 3rd Qu.:10.435 3rd Qu.:9
## Max. :7.442 Max. :18.867 Max. :9
##
We calculate the relative cumulative cover for species at and above the heat requirement threshold for the ANO data and evaluate these against their respective reference values (i.e. scaling according to reference value=1, limit value=0.6, and maximum value=0) This is just technical, so we don’t show the code.
Here’s the result
## EllL1 EllL2 EllN1 EllN2
## Min. :0.8632 Min. :0.8848 Min. :0.0000 Min. :0.7286
## 1st Qu.:0.9773 1st Qu.:0.9619 1st Qu.:0.9488 1st Qu.:0.9515
## Median :0.9893 Median :0.9753 Median :0.9642 Median :0.9731
## Mean :0.9811 Mean :0.9718 Mean :0.9555 Mean :0.9614
## 3rd Qu.:0.9943 3rd Qu.:0.9872 3rd Qu.:0.9793 3rd Qu.:0.9881
## Max. :0.9998 Max. :1.0000 Max. :0.9998 Max. :0.9999
## NA's :1591 NA's :484 NA's :650 NA's :1425
And here’s the result as violin plots by main ecosystem types
T3 = mountain heat, leeside, & tundra (fjellhei, leeside & tundra)
T14 = ridge (rabbe)
T7 = snowbed (snøleie)
T22 = grassy mountain heath & tundra (fjellgrashei & grastundra)
## Warning: position_dodge requires non-overlapping x intervals
## Warning: position_dodge requires non-overlapping x intervals
## Warning: position_dodge requires non-overlapping x intervals
## Warning: position_dodge requires non-overlapping x intervals
Ellenberg L shows most deviations from the reference value (index = 1) towards the higher limit value, Ellenberg N shows most deviations from the reference value towards the lower limit value (see N in the respective plot headers). However, the deviations are largely small and within the limits for good ecological condition (0.6 - 1).
Klikk here to see the next step in the analysis, aggregation and standardization of the indicator data set.