diff --git a/.gitignore b/.gitignore index f97a8fa..4fcac03 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ slides/.DS_Store slides/.ipynb_checkpoints/slides1-checkpoint.ipynb wc10/ +complex_workflow_files/ +simple_workflow_files/ +Current_Workshop.Rproj +template_spreadsheet.xlsx diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..eb25bc6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM rocker/binder:4.2.0 + +## Declares build arguments +ARG NB_USER +ARG NB_UID + +COPY --chown=${NB_USER} . ${HOME} + +ENV DEBIAN_FRONTEND=noninteractive +USER root +RUN echo "Checking for 'apt.txt'..." \ + ; if test -f "apt.txt" ; then \ + apt-get update --fix-missing > /dev/null\ + && xargs -a apt.txt apt-get install --yes \ + && apt-get clean > /dev/null \ + && rm -rf /var/lib/apt/lists/* \ + ; fi +USER ${NB_USER} + +## Run an install.R script, if it exists. +RUN if [ -f install.R ]; then R --quiet -f install.R; fi diff --git a/NeotomaWorkshopAgenda.md b/NeotomaWorkshopAgenda.md deleted file mode 100644 index 39ea547..0000000 --- a/NeotomaWorkshopAgenda.md +++ /dev/null @@ -1,249 +0,0 @@ -# EPD Neotoma 2.0 R Workshop - Praha - -## Socorro Dominguez Vidaña, Simon Goring - -# Overview - -This workshop is designed to provide users of the Neotoma Database with an overview of the new neotoma2 R package, and its use in obtaining data from the Neotoma Paleoecology Database. - -At the end of this workshop, users will understand the following concepts: - -1. How data is structured within Neotoma and in the R package -2. How to search for data in space and time -3. How to extract summary objects from individual sites and collections of sites -4. How to manipulate data to add new chronologies - -Online resources for users include links embedded within the agenda, as well as: - -* Online, interactive slides (open the “Slides” folder): [https://bit.ly/EPDSlides](https://bit.ly/EPDSlides) -* An online version of RStudio built for this workshop: [https://bit.ly/EPDRstudio](https://bit.ly/EPDRstudio) -* The code repository for the workshop: [https://github.com/NeotomaDB/EPD_binder](https://github.com/NeotomaDB/EPD_binder) - -Install the R package: - -``` -install.packages('devtools') -devtools::install_github('NeotomaDB/neotoma2') -``` - -Neotoma maintains an online community on Slack that includes a channel for help using R and Neotoma (#it_r). Come join our community: [https://bit.ly/3PT8zuP](https://bit.ly/3PT8zuP) - -This allows us to better help you during the workshop and in the future. - -# Resources - -* The Neotoma Database Manual: [https://open.neotomadb.org/manual/](https://open.neotomadb.org/manual/) -* The `neotoma2` GitHub Repository: [https://github.com/neotomadb/neotoma2](https://github.com/neotomadb/neotoma2) - -# Agenda - -4 Hours (1pm - 4:50pm) - -
| Time - | -Topic - | -Overview - | -Link - | -
| 1:00 - 1:15pm - | -Introductions - | -Run through each individual’s profile quickly, say hi & introduce ourselves. - | -https://bit.ly/EPDIntros - | -
| 1:15 - 1:20pm - | -Why neotoma2 - | -Explaining why we’ve moved to a new package, rather than updating the `neotoma` R package. - | -https://docs.google.com/presentation/d/1UhIJ3HJskE9ymmFZ109ktsKKuqzW21JZc8fiWQLkyZw/edit?usp=sharing - | -
| 1:20 - 2:00pm - | -A simple workflow - | -https://open.neotomadb.org/EPD_binder/simple_workflow.html - | -|
| 1:20 - 1:30 - | -Simple Site Search - | -How to search for sites by space & name. - | -- | -
| 1:30 - 1:35 - | -Independent Searching - | -Individuals will use the geoJSON site to select an area, perform a search and plot the results. Paste the image on your personal slide. - | -- | -
| 1:35 - 1:40 - | -Quick Debrief - | -One or two people, what did you find? - | -- | -
| 1:40 - 1:50 - | -Searching for Datasets and Filtering - | -How to extract datasets by dataset type & see summary information about records. - | -- | -
| 1:50 - 2:00pm - | -Independent filtering - | -Users will filter by time, space &cetera. - | -- | -
| 2:05 - 2:10pm - | -Quick debrief - | -What do you need from Neotoma? - | -- | -
| 2:10 - 2:30pm - | -Samples & Stratigraphic plotting - | -How to pull them from sites/datasets. Key features, filtering. - | -Intro to taxonomic harmonization is in the simple_workflow.html - | -
| 2:30 - 3:00pm - | -Break - | -- | -- | -
| 3:00 - 3:20 - | -Spatial Analysis - | -Using climate data from WorldClim rasters, examine taxon distributions in climate space - | -- | -
| 3:20 - 3:30 - | -Independent Breakout 1 - | -See instructions in the slide - | -Link removed for online version. - | -
| 3:30 - 4:50 - | -Working with chronologies - | -https://open.neotomadb.org/EPD_binder/complex_workflow.html - | -|
| 3:30 - 3:40 - | -Welcome back & looking at chronologies/chroncontrols - | -- | -- | -
| 3:40 - 3:50 - | -Independent time - | -- | -- | -
| 3:50 - 4:00 - | -Building the Chronology - | -- | -- | -
| 4:00 - 4:10 - | -Adding the Chronology - | -- | -- | -
| 4:10 - 4:30 - | -Independent Breakout 2 - | -Groups of 3 – Work through some stuff - | -- | -
| 4:30 - 4:50 - | -Debrief - | -- | -- | -
There are three chronologies here, but for whatever reason we’ve decided not to use any of them. We want to build a new one with the function Bchronology() from the Bchron package. First we want to see what chroncontrols we have for the prior chronologies. We’re going to select the chronologies used for chronology 14591 as our template.
chroncontrolscontrols <- chroncontrols(stara) %>%
- dplyr::filter(chronologyid == 14591) %>%
- arrange(depth)
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-
-
-We can look at other tools to decided how we want to manage the chroncontrols, for example, saving them and editing them using Excel or another spreadsheet program. We could add a new date by adding a new row. In this example we’re just going to modify the existing ages to provide better constraints at the core top. We are setting the core top to 0 calibrated years BP, and assuming an uncertainty of 2 years, and a thickness of 1cm.
-To do these assignments we’re just directly modifying cells within the controls data.frame:
controls$chroncontrolage[1] <- 0
-controls$agelimityounger[1] <- -2
-controls$agelimitolder[1] <- 2
-controls$thickness[1] <- 1
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-
-
+We worked through the process for finding and downloading records
+using neotoma2 in the previous
+workshop. For this exercise we will be pulling European pollen
+records from Neotoma to build species distribution models (SDMs) for
+taxa at multiple time periods in the past.
To undertake this analysis we need to:
+There are a large number of records in Europe. Downloading this
+volume of data from Neotoma can take a long time (~2hrs total) and is
+computationally expensive for the database itself. We have already
+completed the data download saved it to our data folder. Under the
+results you can take a look at all the sites we downloaded. As with the
+previous example, we can use loc parameter along with WKT or
+geoJSON objects, and
+native sf objects.
europe <- '{"type": "Polygon",
+ "coordinates": [[
+ [ -32.13,66.46],
+ [-14.09,36.93],
+ [30.16,34.71],
+ [35.79,69.17],
+ [-32.13,66.46]]]}'
+europe_sf <- geojsonsf::geojson_sf(europe)
+
+## The following lines of code are commented out because
+# we've already run it for you to speed up the process.
+# Downloading large amounts of data can take a long time.
+#
+# europe_downloads <- neotoma2::get_datasets(loc = europe,
+# datasettype = "pollen",
+# all_data = TRUE) %>%
+# neotoma2::filter(!is.na(age_range_young)) %>%
+# get_downloads(all_data = TRUE)
+# europe_samples <- samples(europe_downloads)
+
+# saveRDS(europe_downloads, "data/europe_downloads.RDS")
+# saveRDS(europe_samples, "data/europe_samples.RDS")
+
+europe_downloads <- readRDS("data/europe_downloads.RDS")
+europe_samples <- readRDS("data/europe_samples.RDS")
Once our chroncontrols table is updated, we extract the depths and analysisunitids from the dataset samples(). Pulling in both depths and analysisunitids is important because a single collection unit may have multiple datasets, which may have non-overlapping depth sequences. So, when adding sample ages back to a record we use the analysisunitid to make sure we are providing the correct assignment since depth may be specific to a single dataset.
# Get a two column data.frame with columns depth and analysisunitid.
-# Sort the table by depth from top to bottom for "Bchronology"
-predictDepths <- samples(stara) %>%
- select(depth, analysisunitid) %>%
- unique() %>%
- arrange(depth)
-
-# Pass the values from `controls`. We're assuming the difference between
-# chroncontrolage and the agelimityounger is 1 SD.
-
-newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid)
-
-# Predict ages at each depth for which we have samples. Returns a matrix.
-newpredictions <- predict(newChron, predictDepths$depth)
-plot(newChron) +
- ggplot2::labs(
- xlab = "Age (cal years BP)",
- ylab = "Depth (cm)"
- )
-Age-depth model for Stará Boleslav, with probability distributions superimposed on the figure at each chronology control depth.
+chronology and contact objectsGiven the new chronology, we want to add it to the sites object so that it becomes the default for any calls to samples(). To create the metadata for the new chronology, we use set_chronology() using the properties from the chronology table in Neotoma:
creators <- c(set_contact(givennames = "Simon James",
- familyname = "Goring",
- ORCID = "0000-0002-2700-4605"),
- set_contact(givennames = "Socorro",
- familyname = "Dominguez Vidaña",
- ORCID = "0000-0002-7926-4935"))
-
-newChronStara <- set_chronology(agemodel = "Bchron model",
- contact = creators,
- isdefault = 1,
- ageboundolder = max(newpredictions),
- ageboundyounger = min(newpredictions),
- dateprepared = lubridate::today(),
- modelagetype = "Calibrated radiocarbon years BP",
- chronologyname = "Simon's example chronology",
- chroncontrols = controls)
-
-newChronStara$notes <- 'newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid,
- predictPositions = predictDepths)'
chronology to the collectionunitOnce we’ve created the chronology we need to apply it back to the collectionunit. We also need to add the predicted dates into the samples for each dataset associated with the collectionunit.
-So:
-stara that is accessible at stara[[1]]$collunits.add_chronology(), which takes the chronology object and a data.frame() of sample ages.samples object within the collectionunit.This is all bound up in the add_chronology() function, which takes the collectionunit, modifys it, and returns the newly updated collectionunit.
newSampleAges <- data.frame(predictDepths,
- age = colMeans(newpredictions),
- ageolder = colMeans(newpredictions) +
- apply(newpredictions, 2, sd),
- ageyounger = colMeans(newpredictions) -
- apply(newpredictions, 2, sd),
- agetype = "Calibrated radiocarbon years")
-
-stara[[1]]$collunits[[1]] <- add_chronology(stara[[1]]$collunits[[1]],
- newChronStara,
- newSampleAges)
-With this, we now have the updated collectionunit. Lets take a look at how this affects the age model overal. To pull the ages from the prior chronologies, we use the set_default() function to change the default chronology, and then extract ages, depths & analysisunits:
# The new chronology is currently the default chronology.
-newages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "new")
-
-stara[[1]]$collunits[[1]]$chronologies <- set_default(stara[[1]]$collunits[[1]]$chronologies,
- 14591)
-plotforages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "old") %>%
- bind_rows(newages)
-And we can look at the difference visually:
-ggplot(plotforages, aes(x = depth, y = age)) +
- geom_path(aes(color = agecat)) +
- theme_bw() +
- xlab("Depth (cm)") +
- ylab("Calibrated Years BP")
-Differences in age representation between chronologies between existing chronologies and the new Bchron chronology.
So we can see the impact of the new chronology on the age model for the record, and we can make choices as to which model we want to use going forward. We can use this approach to create multiple new chronologies for a single record, tuning parameters within Bchronology(), or using Bacon and different parameters. Because the chronology is an R object we can save the objects for use in future sessions, and associate them with existin records, or we can re-run the models again.
When we look at pollen data we are looking at counts of pollen data, +from a slide, for a particular analysis unit. Along with pollen there +can also be measurements of charcoal, records of algal cycts, and other +lab-based measurements. In addition, we often look only at terrestrial +pollen types, since they generally reflect regional vegetation, as +opposed to the pollen of aquatic types that would represent local site +conditions.
+Even though the datasets are pollen datasets, the
+europe_samples data.frame contains data for a
+number of different measured elements, including things like mandibles,
+scales and sporangia. In addition, these elements are measured using 43
+different measurement units (unique(europe_samples$units))
+across 46 ecological groups
+(unique(europe_samples$ecologicalgroup)) including diatoms,
+trees and shrubs, rotifers and insects.
We often use pollen proportions in our analysis, and for this we need
+to find out how many total pollen grains were counted in each sample. We
+also want to make sure we’re looking at a common set of taxa across all
+sites. In this case we will filter for trees and shrubs (ecological
+group TRSH) and upland herbs (ecological group
+UPHE). We will also look for pollen (element type
+pollen) that is measured using the Number of Identified
+Specimens (units NISP).
This makes the filtering rather straightforward:
+europe_cleaner <- europe_samples %>%
+ filter(units == 'NISP' &
+ elementtype == 'pollen' &
+ (ecologicalgroup %in% c('TRSH', 'UPHE')))
+This initial filtering removes about 8.5^{5} rows from our original +dataset.
+For the purposes of this analysis we will only be focusing on +building models for Corylus, Fagus and +Picea.
+Before we can start looking at our focal species we need to do some +work with our sample table so that we have all the information we want. +We need to do three things at this step: filtering the data to only +include our focal taxa, doing taxon harmonization on our focal taxa, and +calculating the pollen percent for each focal taxa for each pollen +sample.
+Note: Our taxon harmonization here is very simple and more +thought should be put into taxon harmonization.
+Our first task is to make a table that we will join with our samples +table that tells us the total number of pollen per sample which we will +use in our pollen percentage calculations. There are many decisions you +can make at this step depending on your research question but here we +are going to calculate pollen percent based on the total number of +trees, shrubs, and herbaceous groups (ecologicalgroup = TRSH and UPHE). +This is common for may studies that focus on these ecological groups but +know that you can choose other combinations and this will effect how you +interpret your results.
+Then we can combine taxon filtering and harmonization and pollen +percent calculation all in one segment of code. Here we are selecting +the taxa Fagus, Picea, and Corylus and +harmonizing all variations of those taxa to the genus level. We can use +the code below to look at the diversity of identifiers for these three +taxa:
+europe_cleaner %>%
+ filter(stringr::str_detect(variablename, "Fagus|Corylus|Picea")) %>%
+ select(variablename) %>% distinct()
+For our purposes it will be enough to simply standardize all taxa +identified as some form of Picea to Picea, and the +same for the Corylus and Fagus types. This then lets +us right some fairly clean code as follows:
+europe_cleaner <- europe_cleaner %>%
+ mutate(variablename = replace(variablename,
+ stringr::str_detect(variablename, "Fagus"),
+ "Fagus"),
+ variablename = replace(variablename,
+ stringr::str_detect(variablename, "Picea"),
+ "Picea"),
+ variablename = replace(variablename,
+ stringr::str_detect(variablename, "Corylus"),
+ "Corylus")) %>%
+ group_by(datasetid, age, variablename, units, ecologicalgroup, sitename, lat, long) %>%
+ summarise(value = sum(value)) %>% as.data.frame()
+We have to summarise at the end to make sure that counts
+of taxon name variants within a single sample get lumped together
+properly. Once we’ve run this code, we can test out the earlier code
+block to see if we are now down to three distinct taxa (and we ought to
+be).
Note: We’re using as.data.frame() here
+to speed up operations below. Leaving this object as a
+grouped_df seem to seriously impact performance.
The age ranges for these records may be broad. Some European records
+go back over 100,000 years before present, and some samples (and
+datasets) appear to have no chronologies. We can check the ages using
+the columns age, ageolder and
+ageyounger. Note that many chronologies have been entered
+without uncertainty measures, in which case ageolder and
+ageyounger would be unreported. Otherwise these values
+represent ±1 standard deviation.
We will be building our SDMs for three critical time periods in the +time since the last glaciation:
+| time period | +age range (ybp) | +label | +
|---|---|---|
| Modern | +-76 - 150 | +Modern |
+
| Younger Dryas | +11,700 - 12,900 | +YD |
+
| Last Glacial Maximum | +> 21,000 | +LGM |
+
To prepare the data for analysis we will create a new column using
+mutate, based on our time bins, and filter out any records
+that are not within our defined periods of study:
europe_ready <- europe_cleaner %>%
+ mutate(timebins = case_when(age >= -72 & age <= 150 ~ "Modern",
+ age >= 11700 & age <= 12900 ~ "YD",
+ age >= 20000 & age <= 22000 ~ "LGM",
+ .default = NA)) %>%
+ filter(!is.na(timebins)) %>%
+ as.data.frame()
+Our data is now ready for further analysis. We’ve cleaned the +taxonomy for our three focal taxa, ensured all data are of a similar +type and measured with similar units, and we’ve made sure that our time +bins are clearly defined.
+Note: We do not attempt to update age-depth models and we +filter out all samples that do not have age estimates when some of them +may be able to be included under closer inspection. Additionally, we do +not take into account time uncertainty which is another aspect that +should be considered when filtering by time.
+From here we need to calculate the pollen sum for each sample in our
+set of samples. This means that we will get the total number of pollen
+grains counted for e.g., Kansjön at depth 445cm in the core. We can
+calculate both the pollen sum and the proportion at the same time by
+using group_by() and ungroup() to first sum
+the value fields (the counts) and then calculate the
+proportion from our new totalpollen field:
europe_subset <- europe_ready %>%
+ group_by(datasetid, age, sitename, lat, long, timebins) %>%
+ mutate(totalpollen = sum(value)) %>%
+ ungroup() %>%
+ mutate(polprop = round(value / totalpollen, 2)) %>% #calculates pollen proportion of total pollen counted per sample
+ mutate(presence = case_when(polprop > .01 ~ 1,
+ .default = 0)) %>% #calculates presence of a taxa when it has >1% pollen proportion
+ as.data.frame()
+There is no climate data associated with pollen data downloaded from +Neotoma but you can utilize climate data that is available online to +intersect with the locations of pollen samples. For this we will be +using climate data from Paleoclim which compiles climate +data from present to the Pliocene from various sources. We will be using +their modern and LGM climate data from CHELSA and Younger Dryas climate +data from Fordham +et al., 2017.
+# europe_clim_mod <- paleoclim("cur", "5m", region = terra::ext(europe_sf))
+# europe_clim_yd <- paleoclim("yds", "5m", region = terra::ext(europe_sf))
+# europe_clim_lgm <- paleoclim("lgm", "5m", region = terra::ext(europe_sf))
+#
+# saveRDS(europe_clim_mod, "data/europe_clim_mod.RDS")
+# saveRDS(europe_clim_yd, "data/europe_clim_yd.RDS")
+# saveRDS(europe_clim_lgm, "data/europe_clim_lgm.RDS")
+
+europe_clim_mod <- readRDS("data/europe_clim_mod.RDS")
+europe_clim_yd <- readRDS("data/europe_clim_yd.RDS")
+europe_clim_lgm <- readRDS("data/europe_clim_lgm.RDS")
+Now that we have cleaned taxa data and have loaded in climate data we +can extract environmental variables for each pollen sample based on the +lat/long of the collection unit. Below is a function that will extract +the 19 biocliamte +variables from the climate rasters.
+#First lets save the projection information from our climate data to use later when creating our species points data
+proj_data <- crs(europe_clim_mod)
+
+extract_clims <- function(taxa_data, clim_data, time_text, taxa_text, projection = proj_data) {
+ time_cut <- dplyr::filter(taxa_data, timebins == time_text)
+ time_sf <- st_as_sf(time_cut, coords = c("long", "lat"), crs = projection)
+ time_sf_vect <- vect(time_sf$geometry)
+ time_sf_clims <- terra::extract(clim_data, time_sf_vect)
+ time_sf_full <- cbind(time_sf, time_sf_clims)
+ dplyr::filter(time_sf_full, variablename == taxa_text)
+
+}
+
+## Fagus
+fagus_mod <- extract_clims(taxa_data = europe_subset, clim_data = europe_clim_mod,
+ time_text = "Modern", taxa_text = "Fagus", projection = proj_data)
+fagus_yd <- extract_clims(taxa_data = europe_subset, clim_data = europe_clim_yd,
+ time_text = "YD", taxa_text = "Fagus", projection = proj_data)
+fagus_lgm <- extract_clims(taxa_data = europe_subset, clim_data = europe_clim_lgm,
+ time_text = "LGM", taxa_text = "Fagus", projection = proj_data)
+For our first exercise we will be exploring how pollen data can be +used to predict suitable climates for taxa under current conditions. For +this first example we will compare two models, one which uses pollen +proportion as input to predict pollen abundance and another which uses +the presence only data to predict likelihood of occurrence using a +binomial distribution.
+# Create a GLM using pollen proportion data using the gaussian distribution
+fagus_mod_glm <- glm(polprop ~ bio_1 + bio_12, data = fagus_mod, family = gaussian)
+fagus_mod_glm_predict <- predict(c(europe_clim_mod[["bio_1"]], europe_clim_mod[["bio_12"]]), fagus_mod_glm)
+
+# Create a GLM using presence only data using the binomial distribution
+fagus_mod_glm_pres <- glm(presence ~ bio_1 + bio_12, data = fagus_mod, family = binomial)
+fagus_mod_glm_pres_predict <- predict(c(europe_clim_mod[["bio_1"]], europe_clim_mod[["bio_12"]]), fagus_mod_glm_pres)
+##
+## Call:
+## glm(formula = polprop ~ bio_1 + bio_12, family = gaussian, data = fagus_mod)
+##
+## Deviance Residuals:
+## Min 1Q Median 3Q Max
+## -0.08151 -0.04467 -0.02841 0.00523 0.74912
+##
+## Coefficients:
+## Estimate Std. Error t value Pr(>|t|)
+## (Intercept) 4.194e-02 6.265e-03 6.695 2.49e-11 ***
+## bio_1 2.308e-04 3.975e-05 5.805 7.02e-09 ***
+## bio_12 -6.408e-06 4.578e-06 -1.400 0.162
+## ---
+## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+##
+## (Dispersion parameter for gaussian family taken to be 0.006979544)
+##
+## Null deviance: 25.072 on 3553 degrees of freedom
+## Residual deviance: 24.784 on 3551 degrees of freedom
+## (36 observations deleted due to missingness)
+## AIC: -7554
+##
+## Number of Fisher Scoring iterations: 2
+##
+## Call:
+## glm(formula = presence ~ bio_1 + bio_12, family = binomial, data = fagus_mod)
+##
+## Deviance Residuals:
+## Min 1Q Median 3Q Max
+## -1.7273 -1.1892 0.9065 1.0850 1.8865
+##
+## Coefficients:
+## Estimate Std. Error z value Pr(>|z|)
+## (Intercept) -1.5376294 0.1610772 -9.546 < 2e-16 ***
+## bio_1 0.0129774 0.0010411 12.465 < 2e-16 ***
+## bio_12 0.0007488 0.0001145 6.540 6.15e-11 ***
+## ---
+## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+##
+## (Dispersion parameter for binomial family taken to be 1)
+##
+## Null deviance: 4901.5 on 3553 degrees of freedom
+## Residual deviance: 4718.6 on 3551 degrees of freedom
+## (36 observations deleted due to missingness)
+## AIC: 4724.6
+##
+## Number of Fisher Scoring iterations: 4
+Using the example above create your own model of modern species +presence either using one of our other taxa (Corylus or +Picea), You can also experiment with using different +combinations of environmental variables (we have all 19 bioclimatic +variables) or even use a different model type!
+When you are finished you can share your results by pasting a +screenshot of a figure to our presentation +on the Exercise 1 slides.
+Now lets take a look at how we can utilize the power of +paleoecological data to create and/or validate distribution models. Here +we will use the same model created above for Fagus presence during +modern times and hindcast it using the climate data from the LGM. We +will then create a new model using the pollon proportion data of pollen +at the LGM and predict species presence at the LGM. We can then compare +the two models. Although we are not doing this formally here you can +also use taxa pollen presence in the past to formally validate models +created with modern species-environment relationships.
+# Create a GLM using pollen proportion data using the gaussian distribution
+fagus_modtolgm_glm_predict <- predict(c(europe_clim_lgm[["bio_1"]], europe_clim_lgm[["bio_12"]]), fagus_mod_glm)
+
+# Create a GLM using presence only data using the binomial distribution
+fagus_lgm_glm <- glm(polprop ~ bio_1 + bio_12, data = fagus_lgm, family = gaussian)
+fagus_lgmtolgm_glm_predict <- predict(c(europe_clim_lgm[["bio_1"]], europe_clim_lgm[["bio_12"]]), fagus_lgm_glm)
+##
+## Call:
+## glm(formula = polprop ~ bio_1 + bio_12, family = gaussian, data = fagus_lgm)
+##
+## Deviance Residuals:
+## Min 1Q Median 3Q Max
+## -0.005231 -0.004475 -0.002870 0.004769 0.014769
+##
+## Coefficients:
+## Estimate Std. Error t value Pr(>|t|)
+## (Intercept) 5.194e-03 4.493e-03 1.156 0.260
+## bio_1 3.298e-05 4.919e-05 0.670 0.509
+## bio_12 -3.253e-06 4.512e-06 -0.721 0.478
+##
+## (Dispersion parameter for gaussian family taken to be 3.50448e-05)
+##
+## Null deviance: 0.00083462 on 25 degrees of freedom
+## Residual deviance: 0.00080603 on 23 degrees of freedom
+## (17 observations deleted due to missingness)
+## AIC: -188.13
+##
+## Number of Fisher Scoring iterations: 2
+Using the example above create your own model of pollen proportions +of one of our other taxa (Corylus or Picea) in one of +our past time periods (Younger Dryas and Last Glacial Maximum). You can +also experiment with using different combinations of environmental +variables (we have all 19 bioclimatic variables) or even use a different +model type!
+When you are finished you can share your results by pasting a +screenshot of a figure to our presentation +on the Exercise 2 slides.
+Now that we have walked through getting your data from the Neotoma +Paleoecology Database, correlating pollen samples with environmental +variables, and explored a few ways that you can use the data you can now +experiment with out types of questions we can answer with this data:
+Now it is your turn to come up with a question that can be answered +by our data and create code to answer your question. When you are +finished you can share your results by pasting a screenshot of a figure +to our presentation +on the Exercise 3 slides.
From this notebook we have learned how to:
get_downloads())chronologies() and associated chronological controls (using chroncontrols())set_chronology())add_chronology())set_default())This approach is focused on a single record, but much of what is done here can be extended to multiple records using functions. We hope it’s been helpful!
+This approach is very simple workflow for taking records from many +sites and combining them into species distribution models to compare +species distributions at different periods of time.
+These packages may be helpful to you for future paleoecological +analysis:
+RFossilpoll +- package to help streamline the data downloading and filtering of +paleoecological data from Neotoma and other resources
R-Ratepol - +package to calculate rate of change from community time series +data
rpaleoclim - package to +facilitate direct download of high resolution paleo-climate +data

+
+##
+
+### Your Task
+Using the example above create your own model of modern species presence either using one of our other taxa (*Corylus* or *Picea*), You can also experiment with using different combinations of environmental variables (we have all 19 bioclimatic variables) or even use a different model type!
+
+When you are finished you can share your results by pasting a screenshot of a figure to our [presentation](https://docs.google.com/presentation/d/1Fwp5yMAvIdgYpiC04xhgV7OQZ-olZIcUiGnLfyLPUt4/edit?usp=sharing) on the Exercise 1 slides.
+
+## Exercise 2 - Hindcasting Species Presence {.tabset}
+
+Now lets take a look at how we can utilize the power of paleoecological data to create and/or validate distribution models. Here we will use the same model created above for Fagus presence during modern times and hindcast it using the climate data from the LGM. We will then create a new model using the pollon proportion data of pollen at the LGM and predict species presence at the LGM. We can then compare the two models. Although we are not doing this formally here you can also use taxa pollen presence in the past to formally validate models created with modern species-environment relationships.
+
+### Code
```r
-ggplot(plotforages, aes(x = depth, y = age)) +
- geom_path(aes(color = agecat)) +
- theme_bw() +
- xlab("Depth (cm)") +
- ylab("Calibrated Years BP")
+# Create a GLM using pollen proportion data using the gaussian distribution
+fagus_modtolgm_glm_predict <- predict(c(europe_clim_lgm[["bio_1"]], europe_clim_lgm[["bio_12"]]), fagus_mod_glm)
+
+# Create a GLM using presence only data using the binomial distribution
+fagus_lgm_glm <- glm(polprop ~ bio_1 + bio_12, data = fagus_lgm, family = gaussian)
+fagus_lgmtolgm_glm_predict <- predict(c(europe_clim_lgm[["bio_1"]], europe_clim_lgm[["bio_12"]]), fagus_lgm_glm)
+```
+
+### LGM Model Fit
+
+```
+##
+## Call:
+## glm(formula = polprop ~ bio_1 + bio_12, family = gaussian, data = fagus_lgm)
+##
+## Deviance Residuals:
+## Min 1Q Median 3Q Max
+## -0.005231 -0.004475 -0.002870 0.004769 0.014769
+##
+## Coefficients:
+## Estimate Std. Error t value Pr(>|t|)
+## (Intercept) 5.194e-03 4.493e-03 1.156 0.260
+## bio_1 3.298e-05 4.919e-05 0.670 0.509
+## bio_12 -3.253e-06 4.512e-06 -0.721 0.478
+##
+## (Dispersion parameter for gaussian family taken to be 3.50448e-05)
+##
+## Null deviance: 0.00083462 on 25 degrees of freedom
+## Residual deviance: 0.00080603 on 23 degrees of freedom
+## (17 observations deleted due to missingness)
+## AIC: -188.13
+##
+## Number of Fisher Scoring iterations: 2
```
-
+### Maps
+
-So we can see the impact of the new chronology on the age model for the record, and we can make choices as to which model we want to use going forward. We can use this approach to create multiple new chronologies for a single record, tuning parameters within `Bchronology()`, or using Bacon and different parameters. Because the `chronology` is an R object we can save the objects for use in future sessions, and associate them with existin records, or we can re-run the models again.
+##
+
+### Your Task
+Using the example above create your own model of pollen proportions of one of our other taxa (*Corylus* or *Picea*) in one of our past time periods (Younger Dryas and Last Glacial Maximum). You can also experiment with using different combinations of environmental variables (we have all 19 bioclimatic variables) or even use a different model type!
+
+When you are finished you can share your results by pasting a screenshot of a figure to our [presentation](https://docs.google.com/presentation/d/1Fwp5yMAvIdgYpiC04xhgV7OQZ-olZIcUiGnLfyLPUt4/edit?usp=sharing) on the Exercise 2 slides.
+
+
+## Exercise 3 - Choose your own adventure!
+
+Now that we have walked through getting your data from the Neotoma Paleoecology Database, correlating pollen samples with environmental variables, and explored a few ways that you can use the data you can now experiment with out types of questions we can answer with this data:
+
+* Do SDMs created for past climates accurately predict where species are today?
+* Do pollen percent or presence of taxa occupy different portions of climate space through time?
+* Many more!
+
+Now it is your turn to come up with a question that can be answered by our data and create code to answer your question. When you are finished you can share your results by pasting a screenshot of a figure to our [presentation](https://docs.google.com/presentation/d/1Fwp5yMAvIdgYpiC04xhgV7OQZ-olZIcUiGnLfyLPUt4/edit?usp=sharing) on the Exercise 3 slides.
## Summary
From this notebook we have learned how to:
-1. Download a single record (the Stara record using `get_downloads()`)
-2. Examining the chronologies for the record (using `chronologies()` and associated chronological controls (using `chroncontrols()`)
-3. Creating a new chronology for the record (using `set_chronology()`)
-4. Adding the chronology to the record (using `add_chronology()`)
-5. Switching between default chronologies (using `set_default()`)
+1. Downloading pollen records from multiple sites
+2. Filtering for specific taxa and taxonomic harmonization
+3. Filtering and binning for specific time periods
+4. Linking to environmental data
+5. Performing simple SDMs for different time periods
+
+This approach is very simple workflow for taking records from many sites and combining them into species distribution models to compare species distributions at different periods of time.
+
+### Other Helpful R Packages
+
+These packages may be helpful to you for future paleoecological analysis:
+
+* [RFossilpoll](https://hope-uib-bio.github.io/FOSSILPOL-website/) - package to help streamline the data downloading and filtering of paleoecological data from Neotoma and other resources
+
+* [R-Ratepol](https://hope-uib-bio.github.io/R-Ratepol-package/) - package to calculate rate of change from community time series data
-This approach is focused on a single record, but much of what is done here can be extended to multiple records using functions. We hope it's been helpful!
+* [rpaleoclim](http://www.paleoclim.org/) - package to facilitate direct download of high resolution paleo-climate data
diff --git a/complex_workflow_ES.Rmd b/complex_workflow_ES.Rmd
deleted file mode 100644
index 4b6abe5..0000000
--- a/complex_workflow_ES.Rmd
+++ /dev/null
@@ -1,222 +0,0 @@
----
-title: "Un flujo de trabajo no tan simple"
-author: "Simon Goring, Socorro Dominguez Vidaña"
-date: "`r Sys.Date()`"
-output:
- html_document:
- code_folding: show
- fig_caption: yes
- keep_md: yes
- self_contained: yes
- theme: readable
- toc: yes
- toc_float: yes
- css: "text.css"
- pdf_document:
- pandoc_args: "-V geometry:vmargin=1in -V geometry:hmargin=1in"
-dev: svg
-highlight: tango
----
-
-## Construyendo nuevas cronologías
-
-En este documento de RMarkdown, vamos a analizar el proceso de:
-
-1. Descargar un único registro
-2. Examinar las cronologías para ese registro y sus controles cronológicos asociados
-3. Crear una nueva cronología para ese registro
-4. Agregar la cronología al registro
-5. Alternar entre cronologías predeterminadas
-
-Este enfoque es utilizado para un único registro, pero mucho de lo que se hace en este documento puede ser extendido a múltiples registros si creamos funciones.
-
-## Cargando las librerías
-
-Para este documento vamos a necesitar cuatro paquetes, `neotoma2`, `dplyr`, `ggplot2` y `Bchron`. Vamos a cargar un registro de la base de datos Neotoma, crear una cronología nueva para el registro y luego agregar dicha cronología al registro.
-
-Usaremos el paquete `pacman` (asi que en realidad, necesitamos cinco paquetes), para cargar e instalar automáticamente las librerías necesarias.
-
-```{r setup}
-pacman::p_load(neotoma2, dplyr, ggplot2, Bchron)
-```
-
-## Cargando los conjuntos de datos
-
-En el [taller anterior](https://open.neotomadb.org/EPD_binder/simple_workflow.html) trabajamos el proceso de búsqueda y descarga de registros utilizando `neotoma2`. Asumiendo que encontramos un registro que fuera de nuestro interés, podemos extraer toda su información utilizando su identificador `datasetid`. En este caso, el conjunto de datos es para el sitio [Stará Boleslav](https://data.neotomadb.org/24238). Comencemos extrayendo el registro y utilizando la función auxiliar `chronologies()` para ver qeu cronologías están asociadas a este registro:
-
-```{r getStara, message = FALSE}
-stara <- get_downloads(24238)
-stara_chron <- chronologies(stara)
-
-stara_chron %>% as.data.frame() %>%
- DT::datatable(data = .,
- options = list(scrollX = "100%"))
-```
-
-Podemos ver que hay tres cronologías asociadas aquí. Supongamos que por alguna razón decidimos que no queremos utilizar estas cronologías y queremos crear una nueva cronología con la función `Bchronology()` del [paquete `Bchron`](https://cran.r-project.org/web/packages/Bchron/vignettes/Bchron.html). Primero queremos ver que controles cronológicos tenemos para nuestras cronologías anteriores. Vamos a utilizar las cronologías en la cronología `14591` como nuestra plantilla.
-
-### Extrayendo los controles `chroncontrols`
-
-```{r buildChronControl, message = FALSE}
-controls <- chroncontrols(stara) %>%
- dplyr::filter(chronologyid == 14591) %>%
- arrange(depth)
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-```
-
-Podemos observar otras herramientas para decidir cómo queremos administrar el control cronológico, por ejemplo, guardarlo y editarlo usando Excel u otro programa de hoja de cálculo. Podríamos agregar una nueva fecha agregando un nuevo renglón En este ejemplo, solo vamos a modificar las edades existentes para proporcionar mejores restricciones en la parte superior del núcleo. Estamos configurando la parte superior del núcleo a *0 años BP calibrados*, y asumiendo una incertidumbre de 2 años y un grosor de 1 cm.
-
-Para realizar estos cambios, modificaremos directamente las celdas del marco de datos (`data.frame`) `controls`:
-
-```{r modifyControls, message = FALSE}
-controls$chroncontrolage[1] <- 0
-controls$agelimityounger[1] <- -2
-controls$agelimitolder[1] <- 2
-controls$thickness[1] <- 1
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-```
-
-### Extrayendo la profundidad y los identificadores de unidad de análisis
-
-Una vez que nuestra tabla de `chroncontrols` ha sido actualizada, extraemos las profundidades `depth` y las unidades de análisis `analysisunitid` del marco de datos `samples()`. Es importante Extraer ambos campos `depth` y `analysisunitid` porque cada unidad de colecta puede tener varios conjuntos de datos que pueden tener secuencias de profundidad que no se superponen. Es por esto que, cuando volvemos a agregar edades de muestra a un registro, utilizamos `analysisunitid` para asegurarnos de que estamos proporcionando la asignación correcta - ya que la profundidad puede ser específica de un único conjunto de datos.
-
-```{r predictDepths, message = FALSE, results="hide"}
-# Get a two column data.frame with columns depth and analysisunitid.
-# Sort the table by depth from top to bottom for "Bchronology"
-predictDepths <- samples(stara) %>%
- select(depth, analysisunitid) %>%
- unique() %>%
- arrange(depth)
-
-# Pass the values from `controls`. We're assuming the difference between
-# chroncontrolage and the agelimityounger is 1 SD.
-
-newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid)
-
-# Predict ages at each depth for which we have samples. Returns a matrix.
-newpredictions <- predict(newChron, predictDepths$depth)
-```
-
-```{r chronologyPlot, fig.cap="Age-depth model for Stará Boleslav, with probability distributions superimposed on the figure at each chronology control depth."}
-plot(newChron) +
- ggplot2::labs(
- xlab = "Age (cal years BP)",
- ylab = "Depth (cm)"
- )
-```
-
-### Creando la nueva cronología `chronology` y objetos de contacto `contact`
-
-Dada la nueva cronología, queremos agregarla de regreso al objeto `sites` para que esta sea considerada la cronología predeterminada para las muestras obtenidas cuando usemos `samples()`. Para crear metadatos con la nueva cronología, utilizamos `set_chronology()` con las propiedades de [la tabla `chronology` en Neotoma](https://open.neotomadb.org/dbschema/tables/chronologies.html):
-
-```{r createChronology, message = FALSE}
-
-creators <- c(set_contact(givennames = "Simon James",
- familyname = "Goring",
- ORCID = "0000-0002-2700-4605"),
- set_contact(givennames = "Socorro",
- familyname = "Dominguez Vidaña",
- ORCID = "0000-0002-7926-4935"))
-
-newChronStara <- set_chronology(agemodel = "Bchron model",
- contact = creators,
- isdefault = 1,
- ageboundolder = max(newpredictions),
- ageboundyounger = min(newpredictions),
- dateprepared = lubridate::today(),
- modelagetype = "Calibrated radiocarbon years BP",
- chronologyname = "Simon's example chronology",
- chroncontrols = controls)
-
-newChronStara$notes <- 'newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid,
- predictPositions = predictDepths)'
-```
-
-### Agregando la cronología `chronology` a la unidad de colecta `collectionunit`
-
-Una vez que hemos creado la cronología, tenemos que regresarla a la unidad de colecta. También tenemos que agregar las fechas previstas en las muestras para cada conjunto de datos asociadas con la unidad de colecta.
-
-Entonces:
-
-1. tenemos una unidad de colecta en `stara` a la que podemos acceder usando `stara[[1]]$collunits`.
-2. Tenemos la función `add_chronology()`, que recibe un objeto de tipo cronología y un marco de datos `data.frame()` con muestras de edades.
-3. Las fechas previstas asociadas a la nueva cronología tienen que ser transferidas a cada objeto`samples` existentes en la unidad de colecta `collectionunit`.
-
-Todo esto está incluido en la función `add_chronology()`, que recibe la unidad de colecta `collectionunit`, la modifica y regresa el objeto `collectionunit` actualizado.
-
-```{r addChronology, message = FALSE}
-newSampleAges <- data.frame(predictDepths,
- age = colMeans(newpredictions),
- ageolder = colMeans(newpredictions) +
- apply(newpredictions, 2, sd),
- ageyounger = colMeans(newpredictions) -
- apply(newpredictions, 2, sd),
- agetype = "Calibrated radiocarbon years")
-
-stara[[1]]$collunits[[1]] <- add_chronology(stara[[1]]$collunits[[1]],
- newChronStara,
- newSampleAges)
-```
-
-Ahora tenemos la unidad de colecta actualizada. Observemos como afecta este cambio al modelo de edades en general. Para extraer las cronologías previas, usamos la función `set_default()` par cambiar la cronología predeterminada y así poder extraer las edades, profundidades y unidades de colecta:
-
-```{r getAgesfromChronologies}
-# The new chronology is currently the default chronology.
-newages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "new")
-
-stara[[1]]$collunits[[1]]$chronologies <- set_default(stara[[1]]$collunits[[1]]$chronologies,
- 14591)
-plotforages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "old") %>%
- bind_rows(newages)
-
-```
-
-También podemos observar las diferencias visualmente:
-
-```{r plotAgeDifferences, fig.cap="Differences in age representation between chronologies between existing chronologies and the new Bchron chronology."}
-ggplot(plotforages, aes(x = depth, y = age)) +
- geom_path(aes(color = agecat)) +
- theme_bw() +
- xlab("Depth (cm)") +
- ylab("Calibrated Years BP")
-```
-
-Podemos ver entonces, el impacto de la nueva cronología en el modelo de tiempo para el registro, y tambièn podemos hacer selecciones para saber que modelo queremos usar para el futuro. Podemos utilizar este enfoque para crear varias nuevas cronologías para un único registro modificando los parámetros dentro de `Bchronology()`, o usando Bacon y diferentes parámetros. Dado que la cronología `chronology` es un objeto de R, podemos guardar el objeto para usarlo en el futuro y asociarlo con registros existentes o podemos volver a generar los modelos una vez mas.
-
-## Resumen
-
-En este cuaderno hemos aprendido a:
-
-1. Descargar un único registro (el registro Stara con la función `get_downloads()`)
-2. Examinar las cronologías del registro (usando `chronologies()` y los controles cronológicos asociados (usando `chroncontrols()`)
-3. Crear una nueva cronología para el registro (usando `set_chronology()`)
-4. Agregar la cronología al registro (usando `add_chronology()`)
-5. Alternar entre cronologías predeterminadas (usando `set_default()`)
-
-Este análisis está enfocado a un único registro, sin embargo se puede extender a mútiples registros usando funciones. Esperemos sea de utilidad para sus investigaciones!
\ No newline at end of file
diff --git a/complex_workflow_ES.html b/complex_workflow_ES.html
deleted file mode 100644
index 9409afd..0000000
--- a/complex_workflow_ES.html
+++ /dev/null
@@ -1,4662 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-En este documento de RMarkdown, vamos a analizar el proceso de:
-Este enfoque es utilizado para un único registro, pero mucho de lo -que se hace en este documento puede ser extendido a múltiples registros -si creamos funciones.
-Para este documento vamos a necesitar cuatro paquetes,
-neotoma2, dplyr, ggplot2 y
-Bchron. Vamos a cargar un registro de la base de datos
-Neotoma, crear una cronología nueva para el registro y luego agregar
-dicha cronología al registro.
Usaremos el paquete pacman (asi que en realidad,
-necesitamos cinco paquetes), para cargar e instalar automáticamente las
-librerías necesarias.
pacman::p_load(neotoma2, dplyr, ggplot2, Bchron)
-En el taller
-anterior trabajamos el proceso de búsqueda y descarga de registros
-utilizando neotoma2. Asumiendo que encontramos un registro
-que fuera de nuestro interés, podemos extraer toda su información
-utilizando su identificador datasetid. En este caso, el
-conjunto de datos es para el sitio Stará Boleslav. Comencemos
-extrayendo el registro y utilizando la función auxiliar
-chronologies() para ver qeu cronologías están asociadas a
-este registro:
stara <- get_downloads(24238)
-## .
-stara_chron <- chronologies(stara)
-
-stara_chron %>% as.data.frame() %>%
- DT::datatable(data = .,
- options = list(scrollX = "100%"))
-
-
-Podemos ver que hay tres cronologías asociadas aquí. Supongamos que
-por alguna razón decidimos que no queremos utilizar estas cronologías y
-queremos crear una nueva cronología con la función
-Bchronology() del paquete
-Bchron. Primero queremos ver que controles cronológicos
-tenemos para nuestras cronologías anteriores. Vamos a utilizar las
-cronologías en la cronología 14591 como nuestra
-plantilla.
chroncontrolscontrols <- chroncontrols(stara) %>%
- dplyr::filter(chronologyid == 14591) %>%
- arrange(depth)
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-
-
-Podemos observar otras herramientas para decidir cómo queremos -administrar el control cronológico, por ejemplo, guardarlo y editarlo -usando Excel u otro programa de hoja de cálculo. Podríamos agregar una -nueva fecha agregando un nuevo renglón En este ejemplo, solo vamos a -modificar las edades existentes para proporcionar mejores restricciones -en la parte superior del núcleo. Estamos configurando la parte superior -del núcleo a 0 años BP calibrados, y asumiendo una -incertidumbre de 2 años y un grosor de 1 cm.
-Para realizar estos cambios, modificaremos directamente las celdas
-del marco de datos (data.frame) controls:
controls$chroncontrolage[1] <- 0
-controls$agelimityounger[1] <- -2
-controls$agelimitolder[1] <- 2
-controls$thickness[1] <- 1
-
-controls %>% DT::datatable(data = .,
- options = list(scrollX = "100%"))
-
-
-Una vez que nuestra tabla de chroncontrols ha sido
-actualizada, extraemos las profundidades depth y las
-unidades de análisis analysisunitid del marco de datos
-samples(). Es importante Extraer ambos campos
-depth y analysisunitid porque cada unidad de
-colecta puede tener varios conjuntos de datos que pueden tener
-secuencias de profundidad que no se superponen. Es por esto que, cuando
-volvemos a agregar edades de muestra a un registro, utilizamos
-analysisunitid para asegurarnos de que estamos
-proporcionando la asignación correcta - ya que la profundidad puede ser
-específica de un único conjunto de datos.
# Get a two column data.frame with columns depth and analysisunitid.
-# Sort the table by depth from top to bottom for "Bchronology"
-predictDepths <- samples(stara) %>%
- select(depth, analysisunitid) %>%
- unique() %>%
- arrange(depth)
-
-# Pass the values from `controls`. We're assuming the difference between
-# chroncontrolage and the agelimityounger is 1 SD.
-
-newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid)
-
-# Predict ages at each depth for which we have samples. Returns a matrix.
-newpredictions <- predict(newChron, predictDepths$depth)
-plot(newChron) +
- ggplot2::labs(
- xlab = "Age (cal years BP)",
- ylab = "Depth (cm)"
- )
-Age-depth model for Stará Boleslav, with probability -distributions superimposed on the figure at each chronology control -depth.
-chronology y objetos de
-contacto contactDada la nueva cronología, queremos agregarla de regreso al objeto
-sites para que esta sea considerada la cronología
-predeterminada para las muestras obtenidas cuando usemos
-samples(). Para crear metadatos con la nueva cronología,
-utilizamos set_chronology() con las propiedades de la
-tabla chronology en Neotoma:
creators <- c(set_contact(givennames = "Simon James",
- familyname = "Goring",
- ORCID = "0000-0002-2700-4605"),
- set_contact(givennames = "Socorro",
- familyname = "Dominguez Vidaña",
- ORCID = "0000-0002-7926-4935"))
-
-newChronStara <- set_chronology(agemodel = "Bchron model",
- contact = creators,
- isdefault = 1,
- ageboundolder = max(newpredictions),
- ageboundyounger = min(newpredictions),
- dateprepared = lubridate::today(),
- modelagetype = "Calibrated radiocarbon years BP",
- chronologyname = "Simon's example chronology",
- chroncontrols = controls)
-
-newChronStara$notes <- 'newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,
- ageSds = abs(controls$agelimityounger -
- controls$chroncontrolage),
- calCurves = c("normal", rep("intcal20", 4)),
- positionThicknesses = controls$thickness,
- positions = controls$depth,
- allowOutside = TRUE,
- ids = controls$chroncontrolid,
- predictPositions = predictDepths)'
-chronology a la unidad de
-colecta collectionunitUna vez que hemos creado la cronología, tenemos que regresarla a la -unidad de colecta. También tenemos que agregar las fechas previstas en -las muestras para cada conjunto de datos asociadas con la unidad de -colecta.
-Entonces:
-stara a la que podemos
-acceder usando stara[[1]]$collunits.add_chronology(), que recibe un
-objeto de tipo cronología y un marco de datos data.frame()
-con muestras de edades.samples existentes en la unidad
-de colecta collectionunit.Todo esto está incluido en la función add_chronology(),
-que recibe la unidad de colecta collectionunit, la modifica
-y regresa el objeto collectionunit actualizado.
newSampleAges <- data.frame(predictDepths,
- age = colMeans(newpredictions),
- ageolder = colMeans(newpredictions) +
- apply(newpredictions, 2, sd),
- ageyounger = colMeans(newpredictions) -
- apply(newpredictions, 2, sd),
- agetype = "Calibrated radiocarbon years")
-
-stara[[1]]$collunits[[1]] <- add_chronology(stara[[1]]$collunits[[1]],
- newChronStara,
- newSampleAges)
-Ahora tenemos la unidad de colecta actualizada. Observemos como
-afecta este cambio al modelo de edades en general. Para extraer las
-cronologías previas, usamos la función set_default() par
-cambiar la cronología predeterminada y así poder extraer las edades,
-profundidades y unidades de colecta:
# The new chronology is currently the default chronology.
-newages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "new")
-
-stara[[1]]$collunits[[1]]$chronologies <- set_default(stara[[1]]$collunits[[1]]$chronologies,
- 14591)
-plotforages <- samples(stara) %>%
- select(depth, analysisunitid, age) %>%
- unique() %>%
- arrange(depth) %>%
- mutate(agecat = "old") %>%
- bind_rows(newages)
-También podemos observar las diferencias visualmente:
-ggplot(plotforages, aes(x = depth, y = age)) +
- geom_path(aes(color = agecat)) +
- theme_bw() +
- xlab("Depth (cm)") +
- ylab("Calibrated Years BP")
-Differences in age representation between -chronologies between existing chronologies and the new Bchron -chronology.
-Podemos ver entonces, el impacto de la nueva cronología en el modelo
-de tiempo para el registro, y tambièn podemos hacer selecciones para
-saber que modelo queremos usar para el futuro. Podemos utilizar este
-enfoque para crear varias nuevas cronologías para un único registro
-modificando los parámetros dentro de Bchronology(), o
-usando Bacon y diferentes parámetros. Dado que la cronología
-chronology es un objeto de R, podemos guardar el objeto
-para usarlo en el futuro y asociarlo con registros existentes o podemos
-volver a generar los modelos una vez mas.
En este cuaderno hemos aprendido a:
-get_downloads())chronologies() y los controles cronológicos asociados
-(usando chroncontrols())set_chronology())add_chronology())set_default())Este análisis está enfocado a un único registro, sin embargo se puede -extender a mútiples registros usando funciones. Esperemos sea de -utilidad para sus investigaciones!
-loc=c()The neotoma package used a bounding box for locations,
-structured as a vector of latitude and longitude values:
+
The original neotoma package used a bounding box for
+locations, structured as a vector of latitude and longitude values:
c(xmin, ymin, xmax, ymax). The neotoma2 R
package supports both this simple bounding box, but also more complex
spatial objects, using the sf package.
@@ -8495,160 +8618,186 @@
loc=c()loc parameter works with the simple
vector, WKT, geoJSON objects and native
-sf objects in R. Note however that the
-neotoma2 package is a wrapper for a simple API call using a
-URL (api.neotomadb.org), and URL
-strings can only be 1028 characters long, so the API cannot accept very
-long/complex spatial objects.
-Looking for sites using a location. We’re putting three
-representations of the Czech Republic here as part of a list with three
-elements, a geoJSON, WKT and bounding box representation. We’ve also
-transformed the cz$geoJSON element to an object for the
-sf package. Any of these four spatial representations work
-with the neotoma2 package.
cz <- list(geoJSON = '{"type": "Polygon",
- "coordinates": [[
- [12.40, 50.14],
- [14.10, 48.64],
- [16.95, 48.66],
- [18.91, 49.61],
- [15.24, 50.99],
- [12.40, 50.14]]]}',
- WKT = 'POLYGON ((12.4 50.14,
- 14.1 48.64,
- 16.95 48.66,
- 18.91 49.61,
- 15.24 50.99,
- 12.4 50.14))',
- bbox = c(12.4, 48.64, 18.91, 50.99))
-
-cz$sf <- geojsonsf::geojson_sf(cz$geoJSON)[[1]]
-
-cz_sites <- neotoma2::get_sites(loc = cz$geoJSON, all_data = TRUE)
-## Your search returned 89 objects.
+sf objects in R.
+As an example of searching for sites using a location, we’ve created
+a rough representation of Denmark as a polygon. To work with this
+spatial object in R we also transformed the geoJSON element
+to an object for the sf package. There are many other tools
+to work with spatial objects in R. Regardless of how you get the data
+into R, neotoma2 works with almost all objects in the
+sf package.
geoJSON <- '{"coordinates": [[
+ [7.92, 55.02],
+ [12.42, 54.42],
+ [12.86, 55.98],
+ [12.41, 56.44],
+ [10.63, 57.96],
+ [7.74, 57.48],
+ [ 7.70, 57.09],
+ [7.92, 55.02]
+ ]],
+ "type": "Polygon"}'
+
+denmark_sf <- geojsonsf::geojson_sf(geoJSON)
+
+# Note here we use the `all_data` flag to capture all the sites within the polygon.
+# We're using `all_data` here because we know that the site information is relatively small
+# for denmark. If we were working in a new area or with a new search we would limit the
+# search size.
+denmark_sites <- neotoma2::get_sites(loc = denmark_sf, all_data = TRUE)
You can always simply plot() the sites
objects, but you will lose some of the geographic context. The
plotLeaflet() function returns a leaflet()
map, and allows you to further customize it, or add additional spatial
-data (like our original bounding polygon, cz$sf, which
+data (like our original bounding polygon, sa_sf, which
works directly with the R leaflet package):
neotoma2::plotLeaflet(cz_sites) %>%
+Note the use of the %>% pipe here. If you are not
+familiar with this symbol, check our “Piping in
+R” section of the Appendix.
+neotoma2::plotLeaflet(denmark_sites) %>%
leaflet::addPolygons(map = .,
- data = cz$sf,
+ data = denmark_sf,
color = "green")
Neotoma R Package UML diagram.
-If we look at the UML
-diagram for the objects in the neotoma2 R package we
-can see that there are a set of functions that can operate on
-sites. As we add to sites objects, using
-get_datasets() or get_downloads(), we are able
-to use more of these helper functions. As it is, we can take advantage
-of sunctions like summary() to get a more complete sense of
-the types of data we have as part of this set of sites. The following
-code gives the summary table. We do some R magic here to change the way
-the data is displayed (turning it into a datatable()
+
site Object HelpersIf we look at the data
+structure diagram for the objects in the neotoma2 R
+package we can see that there are a set of functions that can operate on
+sites. As we retrieve more information for
+sites objects, using get_datasets() or
+get_downloads(), we are able to use more of these helper
+functions.
As it is, we can take advantage of functions like
+summary() to get a more complete sense of the types of data
+we have in denmark_sites. The following code gives the
+summary table. We do some R magic here to change the way the data is
+displayed (turning it into a DT::datatable()
object), but the main piece is the summary() call.
neotoma2::summary(cz_sites)
+# Give information about the sites themselves, site names &cetera.
+neotoma2::summary(denmark_sites)
+# Give the unique identifiers for sites, collection units and datasets found at those sites.
+neotoma2::getids(denmark_sites)
We can see that there are no chronologies associated with the
-site objects. This is because, at present, we have not
-pulled in the dataset information we need. All we know from
-get_sites() are the kinds of datasets we have.
In this document we list only the first 10 records (there are more,
+you can use length(datasets(denmark_sites)) to see how many
+datasets you’ve got). We can see that there are no chronologies
+associated with the site objects. This is because, at
+present, we have not pulled in the dataset information we
+need. In Neotoma, a chronology is associated with a collection unit (and
+that metadata is pulled by get_datasets() or
+get_downloads()). All we know from get_sites()
+are the kinds of datasets we have and the location of the sites that
+contain the datasets.
We know that collection units and datasets are contained within +
get_datasets()Within Neotoma, collection units and datasets are contained within
sites. Similarly, a sites object contains
collectionunits which contain datasets. From
-the table above we can see that some of the sites we’ve looked at
-contain pollen records. That said, we only have the sites,
-it’s just that (for convenience) the sites API returns some
-information about datasets so to make it easier to navigate the
-records.
table(summary(denmark_sites)$types) to
+see the different datasettypes and their counts.
With a sites object we can directly call
-get_datasets(), to pull in more metadata about the
-datasets. At any time we can use datasets() to get more
+get_datasets() to pull in more metadata about the datasets.
+The get_datasets() method also supports any of the search
+terms listed above in the Site Search
+section. At any time we can use datasets() to get more
information about any datasets that a sites object may
-contain. Compare the output of datasets(cz_sites) to the
-output of a similar call using the following:
datasets(denmark_sites) to
+the output of a similar call using the following:
cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
+# This may be slow, because there's a lot of sites!
+# denmark_datasets <- neotoma2::get_datasets(denmark_sites, all_data = TRUE)
-datasets(cz_datasets)
+denmark_datasets <- neotoma2::get_datasets(loc = denmark_sf, datasettype = "pollen", all_data = TRUE)
+
+datasets(denmark_datasets)
You can see that this provides information only about the specific
+dataset, not the site! For a more complete record we can join site
+information from summary() to dataset information using
+datasets() using the getids() function which
+links sites, and all the collection units and datasets they contain.
filter() RecordsIf we choose to pull in information about only a single dataset type,
or if there is additional filtering we want to do before we download the
data, we can use the filter() function. For example, if we
-only want pollen records, and want records with known chronologies, we
-can filter:
datasettype and by the presence of an
+age_range_young, which would indicate that there is a
+chronology that defines bounds for ages within the record.
cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
+denmark_records <- denmark_datasets %>%
+ neotoma2::filter(!is.na(age_range_young))
+
+neotoma2::summary(denmark_records)
-neotoma2::summary(cz_pollen)
+# We've removed records, so the new object should be shorter than the original.
+length(denmark_records) < length(denmark_datasets)
We can see now that the data table looks different, and there are -fewer total sites.
+ + +We can see now that the data table looks different (comparing it to +the table above), and there are fewer total +sites. Again, there is no explicit chronology for these records, we need +to pull down the complete download for these records, but we begin to +get a sense of what kind of data we have.
sample() data.Because sample data adds a lot of overhead (for the Czech pollen
-data, the object that includes the dataset with samples is 20 times
-larger than the dataset alone), we try to call
-get_downloads() after we’ve done our preliminary filtering.
-After get_datasets() you have enough information to filter
-based on location, time bounds and dataset type. When we move to
-get_download() we can do more fine-tuned filtering at the
-analysis unit or taxon level.
sample() dataBecause sample data adds a lot of overhead (for this pollen data, the
+object that includes the dataset with samples is 20 times larger than
+the dataset alone), we try to call
+get_downloads() only after we’ve done our preliminary
+filtering. After get_datasets() you have enough information
+to filter based on location, time bounds and dataset type. When we move
+to get_download() we can do more fine-tuned filtering at
+the analysis unit or taxon level.
The following call can take some time, but we’ve frozen the object as an RDS data file. You can run this command on your own, and let it run for a bit, or you can just load the object in.
## This line is commented out because we've already run it for you.
-## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)
-cz_dl <- readRDS('data/czDownload.RDS')
+## denmark_dl <- denmark_records %>% get_downloads(all_data = TRUE)
+## saveRDS(denmark_dl, "data/dkDownload.RDS")
+denmark_dl <- readRDS("data/dkDownload.RDS")
Once we’ve downloaded, we now have information for each site about all the associated collection units, the datasets, and, for each -dataset, all the samples associated with the datasets. To extract all -the samples we can call:
-allSamp <- samples(cz_dl)
-When we’ve done this, we get a data.frame that is 130889
+dataset, all the samples associated with the datasets. To extract
+samples all downloads we can call:
allSamp <- samples(denmark_dl)
+When we’ve done this, we get a data.frame that is 10055
rows long and 37 columns wide. The reason the table is so wide is that
we are returning data in a long format. Each row
contains all the information you should need to properly interpret
@@ -8658,12 +8807,12 @@
sample() data.For some dataset types, or analyses some of these columns may not be +## [21] "thickness" "samplename" "datasetid" "database" +## [25] "datasettype" "age_range_old" "age_range_young" "datasetnotes" +## [29] "siteid" "sitename" "lat" "long" +## [33] "area" "sitenotes" "description" "elev" +## [37] "collunitid" +
For some dataset types or analyses, some of these columns may not be
needed, however, for other dataset types they may be critically
important. To allow the neotoma2 package to be as useful as
possible for the community we’ve included as many as we can.
sample() data.If you want to know what taxa we have in the record you can use the
helper function taxa() on the sites object. The
-taxa() function gives us, not only the unique taxa, but two
-additional columns, sites and samples that
+taxa() function gives us not only the unique taxa, but two
+additional columns – sites and samples – that
tell us how many sites the taxa appear in, and how many samples the taxa
appear in, to help us better understand how common individual taxa
are.
neotomatx <- neotoma2::taxa(cz_dl)
+neotomatx <- neotoma2::taxa(denmark_dl)
The taxonid values can be linked to the
-taxonid column in the samples(). This allows
-us to build taxon harmonization tables if we choose to. You may also
-note that the taxonname is in the field
-variablename. Individual sample counts are reported in
-Neotoma as variables.
+
Taxonomies in Neotoma are not as straightforward as we might expect. +Taxonomic identification in paleoecology can be complex, impacted by the +morphology of the object we are trying to identify, the condition of the +palynomorph, the expertise of the analyst, and many other conditions. +You can read more about concepts of taxonomy within Neotoma in the +Neotoma Manual’s section +on Taxonomic concepts.
+We use the unique identifiers (e.g., taxonid,
+siteid, analysisunitid) throughout the
+package, since they help us to link between records. The
+taxonid values returned by the taxa() call can
+be linked to the taxonid column in the
+samples() table. This allows us to build taxon
+harmonization tables if we choose to. You may also note that the
+taxonname is in the field variablename.
+Individual sample counts are reported in Neotoma as variables.
A “variable” may be either a species, something like laboratory
measurements, or a non-organic proxy, like charcoal or XRF measurements,
and includes the units of measurement and the value.
Lets say we want all samples from which Plantago taxa have
-been reported to be grouped together into one pseudo-taxon called
-Plantago. There are several ways of doing this, either directly
-by exporting the file and editing each individual cell, or by creating
-an external “harmonization” table (which we did in the prior
-neotoma package).
Programmatically, we can harmonize taxon by taxon using matching and
-transformation. We’re using dplyr type coding here to
-mutate() the column variablename so that any
-time we detect (str_detect()) a variablename
-that starts with Plantago (the .* represents a
-wildcard for any character [.], zero or more times
-[*]) we replace() it with the character string
-"Plantago". Note that this changes Plantago in the
-allSamp object, but if we were to call
-samples() again, the taxonomy would return to its original
-form.
We’re going to filter the ecological groups to include only -UPHE (upleand/heath) and TRSH (trees and shrubs). More -information about ecological groups is available from the Neotoma Online Manual.
-allSamp <- allSamp %>%
- dplyr::filter(ecologicalgroup %in% c("UPHE", "TRSH")) %>%
- mutate(variablename = replace(variablename,
- stringr::str_detect(variablename, "Plantago.*"),
- "Plantago"))
-There were originally 15 different taxa identified as being within -the genus Plantago (including Plantago, Plantago -major, and Plantago alpina-type). The above code reduces -them all to a single taxonomic group Plantago.
-If we want to have an artifact of our choices, we can use an external -table. For example, a table of pairs (what we want changed, and the name -we want it replaced with) can be generated, and it can include regular -expressions (if we choose):
+Let’s say we want all samples from which Poaceae (grass) +taxa have been reported to be grouped together into one pseudo-taxon +called Poaceae-undiff. NOTE, this is may not +be an ecologically useful grouping, but is used here for +illustration.
+There are several ways of grouping taxa, either directly by exporting
+the file and editing each individual cell, or by creating an external
+“harmonization” table (which we did in the prior neotoma
+package). First, lets look for how many different ways Poaceae
+appears in these records. We can use the function
+str_detect() from the stringr package to look
+for patterns, and then return either TRUE or
+FALSE when the string is detected:
## # A tibble: 4 × 11
+## # Groups: units, context, element, taxonid, symmetry, taxongroup,
+## # elementtype, variablename, ecologicalgroup [4]
+## units context element taxonid symmetry taxongroup elementtype variablename
+## <chr> <chr> <chr> <int> <lgl> <chr> <chr> <chr>
+## 1 NISP <NA> pollen 125 NA Vascular plan… pollen Poaceae und…
+## 2 NISP <NA> pollen 417 NA Vascular plan… pollen Poaceae
+## 3 NISP <NA> pollen 2113 NA Vascular plan… pollen Poaceae (>4…
+## 4 NISP <NA> pollen 33543 NA Vascular plan… pollen Poaceae und…
+## # ℹ 3 more variables: ecologicalgroup <chr>, samples <int>, sites <int>
+We can harmonize taxon by taxon a number of different ways. One way
+would be to get every instance of a Poaceae taxon and just
+change them directly. Here we are taking the column
+variablename from the allSamp object (this is
+where the count data is). The square brackets are telling us which rows
+we’re changing, here only rows where we detect "Poaceae" in
+the variable name. For each of those rows, in that column, we assign the
+value "Poaceae undiff":
There were originally 4 different taxa identified as being within the +genus Poaceae (including Poaceae., Poaceae (>40 +µm), and Poaceae undiff. (<40 µm)). The above code +reduces them all to a single taxonomic group Poaceae +undiff.
+Note that this changes Poaceae in the allSamp
+object only, not in any of the downloaded objects. If we were
+to call samples() again, the taxonomy would return to its
+original form.
A second way to harmonize taxa is to use an external table, which is +especially useful if we want to have an artifact of our choices. For +example, a table of pairs (what we want changed, and the name we want it +replaced with) can be generated, and it can include regular expressions +(if we choose):
| Abies.* | -Abies | +Poaceae.* | +Poaceae-undiff |
| Vaccinium.* | -Ericaceae | +Picea.* | +Picea-undiff |
| Typha.* | -Aquatic | +Plantago.* | +Plantago-undiff |
| Nymphaea | -Aquatic | +Quercus.* | +Quercus-undiff |
| … | @@ -8764,244 +8935,217 @@
We can get the list of original names directly from the
-taxa() call, applied to a sites object, and
-then export it using write.csv().
taxaplots <- taxa(cz_dl)
+taxa() call, applied to a sites object that
+contains samples, and then export it using write.csv().
+taxaplots <- taxa(denmark_dl)
# Save the taxon list to file so we can edit it subsequently.
readr::write_csv(taxaplots, "data/mytaxontable.csv")
The taxa function returns all our taxonomic information,
+and it provides some additional information, the columns
+samples and sites which record the number of
+samples across all datasets that contain the taxon, and the number of
+sites with the taxon. The plot below shows the relationship between
+samples and sites, which we would expect to be somewhat skewed, as it
+is.
This is effectively a rarefaction curve, the more sites a taxon is +found at, the more samples it is found at.
+taxaplots <- taxa(denmark_dl)
+ggplot(data = taxaplots, aes(x = sites, y = samples)) +
+ geom_point() +
+ stat_smooth(method = 'glm',
+ method.args = list(family = 'poisson')) +
+ xlab("Number of Sites") +
+ ylab("Number of Samples") +
+ theme_bw()
+Figure. A plot of the number of -sites a taxon appears in, against the number of samples a taxon appears -in.
+The plot is mostly for illustration, but we can see, as a sanity -check, that the relationship is as we’d expect.
-You can then export either one of these tables and add a column with
-the counts, you could also add extra contextual information, such as the
-ecologicalgroup or taxongroup to help you out.
-Once you’ve cleaned up the translation table you can load it in, and
-then apply the transformation:
The plot (above) is mostly for illustration, but we can see, as a +sanity check, that the relationship is as we’d expect. Here, each point +represents a separate taxon, roughly, so there is a large density of +points (taxa) that plot in the lower left section of the figure, and +fewer points in the upper right. This means that there are a large +number of taxa that are rarely present and then several that are quite +common.
+Exporting the taxon table to a csv file allows us to
+edit the table, filtering and selecting taxa based on contextual
+information, such as the ecologicalgroup or
+taxongroup to help you out. Once you’ve cleaned up the
+translation table you can load it in (try to save it under a different
+file name!), and then apply the transformation:
translation <- readr::read_csv("data/taxontable.csv")
-
-
-You can see we’ve changed some of the taxon names in the taxon table
-(don’t look too far, I just did this as an example). To replace the
-names in the samples() output, we’ll join the two tables
-using an inner_join() (meaning the
+
I did a bunch of work here. . . Then we read it in.
+ + +You can see we’ve changed some of the taxon names in the taxon table.
+To replace the names in the samples() output, we’ll join
+the two tables using an inner_join() (meaning the
variablename must appear in both tables for the result to
be included), and then we’re going to select only those elements of the
-sample tables that are relevant to our later analysis:
allSamp <- samples(cz_dl)
+sample tables that are relevant to our later analysis, using the
+harmonizedname column as our new name for the taxa:
+allSamp <- samples(denmark_dl)
allSamp <- allSamp %>%
inner_join(translation, by = c("variablename" = "variablename")) %>%
- dplyr::select(!c("variablename", "sites", "samples")) %>%
- group_by(siteid, sitename, replacement,
+ dplyr::select(!c("variablename")) %>%
+ group_by(siteid, sitename, harmonizedname,
sampleid, units, age,
agetype, depth, datasetid,
long, lat) %>%
summarise(value = sum(value), .groups='keep')
-
-
+
+
+We now have a cleaner set of taxon names compared to the original
+table, both because of harmonization, and because we cleared out many of
+the non-TRSH (trees and shrubs) taxa from the
+harmonization table. Plotting the same set of taxa with the new
+harmonized names results in this plot:
+
+
+Figure. The same
+site/sample plot as above, with with the new harmonized taxonomy. Note
+that the distribution of points along the curve is smoother, as we
+remove some of the taxonomic issues.
+
To plot at strategraphic diargram we are only interested in one site +and in one dataset. By looking at the summary of downloads we can see +that Lake Solsø has two collection units that both have a pollen record. +Lets look at the SOLSOE81 collection unit, which is the second download. +To get the samples from just that one collection unit by specifying that +you want only the samples from the second download.
We can use packages like rioja to do stratigraphic
plotting for a single record, but first we need to do some different
data management. Although we could do harmonization again we’re going to
-simply take the top ten most common taxa at a single site and plot them
-in a stratigraphic diagram.
We’re using the arrange() call to sort by the number of
-times that the taxon appears within the core. This way we can take out
-samples and select the taxa that appear in the first ten rows of the
-plottingTaxa data.frame.
# Get a particular site, select only taxa identified from pollen (and only trees/shrubs)
-plottingSite <- cz_dl[[1]]
-
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(samples)) %>%
- head(n = 10)
-
-# Clean up. Select only pollen measured using NISP.
-# We repeat the filters for pollen & ecological group on the samples
-shortSamples <- samples(plottingSite) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- filter(units == "NISP")
-
-# Transform to proportion values.
-onesite <- shortSamples %>%
- group_by(age) %>%
- mutate(pollencount = sum(value, na.rm = TRUE)) %>%
- group_by(variablename) %>%
- mutate(prop = value / pollencount) %>%
- arrange(desc(age))
-
-# Spread the data to a "wide" table, with taxa as column headings.
-widetable <- onesite %>%
- dplyr::select(age, variablename, prop) %>%
- mutate(prop = as.numeric(prop))
-
-counts <- tidyr::pivot_wider(widetable,
- id_cols = age,
- names_from = variablename,
- values_from = prop,
- values_fill = 0)
-This appears to be a fairly long set of commands, but the code is -pretty straightforward, and it provides you with significant control +simply take the taxa at a single site and plot them in a stratigraphic +diagram. However, if you would like to plot multiple sites and you want +them to have harmonized taxa we have provided examples on how to do +both.
+# Get a particular site, in this case we are simply subsetting the
+# `denmark_dl` object to get Lake Solsø:
+plottingSite <- denmark_dl[[2]]
+
+# Select only pollen measured using NISP and convert to a "wide"
+# table, using proportions. The first column will be "age".
+# This turns our "long" table into a "wide" table:
+counts <- plottingSite %>%
+ samples() %>%
+ toWide(ecologicalgroup = c("TRSH"),
+ unit = c("NISP"),
+ elementtypes = c("pollen"),
+ groupby = "age",
+ operation = "prop") %>%
+ arrange(age)
+
+counts <- counts[, colSums(counts > 0.01, na.rm = TRUE) > 5]
+# Get a particular site, in this case we are simply subsetting the
+# `denmark_dl` object to get Lake Solsø:
+plottingSite <- denmark_dl[[2]]
+
+# Select only pollen measured using NISP and convert to a "wide"
+# table, using proportions. The first column will be "age".
+# This turns our "long" table into a "wide" table:
+counts_harmonized <- plottingSite %>%
+ samples() %>%
+ toWide(ecologicalgroup = c("TRSH"),
+ unit = c("NISP"),
+ elementtypes = c("pollen"),
+ groupby = "age",
+ operation = "prop") %>%
+ arrange(age) %>%
+ pivot_longer(-age) %>%
+ inner_join(translation, by = c("name" = "variablename")) %>%
+ dplyr::select(!c("name", taxonid)) %>%
+ group_by(harmonizedname, age) %>%
+ summarise(value = sum(value), .groups='keep')%>%
+ pivot_wider(names_from = harmonizedname, values_from = value)
+
+counts_harmonized <- counts_harmonized[, colSums(counts_harmonized > 0.01, na.rm = TRUE) > 5]
+Hopefully the code is pretty straightforward. The
+toWide() function provides you with significant control
over the taxa, units and other elements of your data before you get them
into the wide matrix (depth by taxon) that
most statistical tools such as the vegan package or
rioja use.
To plot we can use rioja’s strat.plot(),
-sorting the taxa using weighted averaging scores
-(wa.order). I’ve also added a CONISS plot to the edge of
-the the plot, to show how the new wide data frame works with
-distance metric funcitons.
clust <- rioja::chclust(dist(sqrt(counts)),
+To plot the data we can use rioja’s
+strat.plot(), sorting the taxa using weighted averaging
+scores (wa.order). I’ve also added a CONISS plot to the
+edge of the the plot, to show how the new wide data frame works
+with distance metric funcitons.
+
+Raw Taxon
+# Perform constrained clustering:
+clust <- rioja::chclust(dist(sqrt(counts)),
method = "coniss")
+# Plot the stratigraphic plot, converting proportions to percentages:
plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,
- title = cz_dl[[1]]$sitename,
+ title = denmark_dl[[1]]$sitename,
ylabel = "Calibrated Years BP",
- xlabel = "Pollen (%)",
+ xlabel = "Pollen (% of Trees and Shrubs)",
+ srt.xlabel = 70,
y.rev = TRUE,
clust = clust,
- wa.order = "topleft", scale.percent = TRUE)
+ wa.order = "topleft",
+ scale.percent = TRUE)
rioja::addClustZone(plot, clust, 4, col = "red")
-
+
-
-Change in Time Across Sites
-We now have site information across the Czech Republic, with samples,
-and with taxon names. I’m interested in looking at the distributions of
-taxa across time, their presence/absence. I’m going to pick the top 20
-taxa (based on the number of times they appear in the records) and look
-at their distributions in time:
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(sites)) %>%
- head(n = 20)
-
-taxabyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by(variablename, "age" = round(age * 2, -3) / 2) %>%
- summarise(n = length(unique(siteid)), .groups = 'keep')
-
-samplesbyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by("age" = round(age * 2, -3) / 2) %>%
- summarise(samples = length(unique(siteid)), .groups = 'keep')
-
-groupbyage <- taxabyage %>%
- inner_join(samplesbyage, by = "age") %>%
- mutate(proportion = n / samples)
-
-ggplot(groupbyage, aes(x = age, y = proportion)) +
- geom_point() +
- geom_smooth(method = 'gam',
- method.args = list(family = 'binomial')) +
- facet_wrap(~variablename) +
- coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +
- scale_x_reverse(breaks = c(10000, 20000)) +
- xlab("Proportion of Sites with Taxon") +
- theme_bw()
-
-We can see clear patterns of change, and the smooths are modeled
-using Generalized Additive Models (GAMs) in R, so we can have more or
-less control over the actual modeling using the gam or
-mgcv packages. Depending on how we divide the data we can
-also look at shifts in altitude, latitude or longitude to better
-understand how species distributions and abundances changed over time in
-this region.
+
+With Harmonization
+# Perform constrained clustering:
+clust <- rioja::chclust(dist(sqrt(counts_harmonized)),
+ method = "coniss")
+
+# Plot the stratigraphic plot, converting proportions to percentages:
+plot <- rioja::strat.plot(counts_harmonized[,-1] * 100, yvar = counts_harmonized$age,
+ title = denmark_dl[[1]]$sitename,
+ ylabel = "Calibrated Years BP",
+ xlabel = "Pollen (% of Trees and Shrubs)",
+ srt.xlabel = 70,
+ y.rev = TRUE,
+ clust = clust,
+ wa.order = "topleft",
+ scale.percent = TRUE)
+
+rioja::addClustZone(plot, clust, 4, col = "red")
+
-
-Distributions in Climate (July max temperature) from Rasters
-We are often interested in the interaction between taxa and climate,
-assuming that time is a proxy for changing environments. The development
-of large-scale global datasets for climate has made it relatively
-straightforward to access data from the cloud in raster format. R
-provides a number of tools (in the sf and
-raster packages) for managing spatial data, and providing
-support for spatial analysis of data.
-The first step is taking our sample data and turning it into a
-spatial object using the sf package in R:
-modern <- samples(cz_dl) %>%
- filter(age < 50) %>%
- filter(ecologicalgroup == "TRSH" & elementtype == "pollen" & units == "NISP")
-
-spatial <- sf::st_as_sf(modern,
- coords = c("long", "lat"),
- crs = "+proj=longlat +datum=WGS84")
-The data is effectively the same, sf makes an object
-called spatial that is a data.frame with all
-the information from samples(), and a column
-(geometry) that contains the spatial data.
-We can use the getData()
-function in the raster package to get climate data from
-WorldClim. The operations that follow here can be applied to any sort of
-raster data, provided it is loaded into R as a raster
-object.
-Here we pull in the raster data, at a 10 minute resolution for the
-\(T_{max}\) variable, maximum monthly
-temperature. The raster itself has 12 layers, one for each month. With
-the extract() function we just get information for the
-seventh month, July.
-worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)
-spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]
-This adds a column to the data.frame
-spatial, that contains the maximum July temperature for
-each taxon at each site (all taxa at a site will share the same value).
-We’ve already filtered to all UPHE taxa, but that still leaves us with 1
-distinct names for the taxa. We’re going to use dplyr’s
-mutate() function to extract just the genus:
-spatial <- spatial %>%
- mutate(variablename = stringr::str_replace(variablename, "[[:punct:]]", " ")) %>%
- mutate(variablename = stringr::word(variablename, 1)) %>%
- group_by(variablename, siteid) %>%
- summarise(tmax7 = max(tmax7), .groups = "keep") %>%
- group_by(variablename) %>%
- filter(n() > 3)
-
-Setting the Background
-We want to get the background distribution of July temperatures in
-the Czech Republic, to plot our taxon distributions against by taking
-the maximum value of the temperature, however, since all values at the
-site are the same (because we used a spatial overlay) the maximum is the
-same as the actual July temperature at the site.
-maxsamp <- spatial %>%
- dplyr::group_by(siteid) %>%
- dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')
-Now we’re going to plot it out, using facet_wrap() to
-plot each taxon in its own panel:
-ggplot() +
- geom_density(data = spatial,
- aes(x = round(tmax7 / 10, 0)), col = 2) +
- facet_wrap(~variablename) +
- geom_density(data = maxsamp, aes(x = tmax7 / 10)) +
- xlab("Maximum July Temperature") +
- ylab("Kernel Density")
-
+
+
@@ -9014,6 +9158,71 @@ Conclusion
templates for your own future work, or as a building block for something
new and cool!
+
+Appendix Sections
+
+Installing packages on your own
+We use several packages in this document, including
+leaflet, sf and others. We load the packages
+using the pacman package, which will automatically install
+the packages if they do not currently exist in your set of packages.
+options(warn = -1)
+pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, terra, DT, readr, stringr, rioja)
+Note that R is sensitive to the order in which packages are loaded.
+Using neotoma2:: tells R explicitly that you want to use
+the neotoma2 package to run a particular function. So, for
+a function like filter(), which exists in other packages
+such as dplyr, you may see an error that looks like:
+Error in UseMethod("filter") :
+ no applicable method for 'filter' applied to an object of class "sites"
+In that case it’s likely that the wrong package is trying to run
+filter(), and so explicitly adding dplyr:: or
+neotoma2:: in front of the function name (i.e.,
+neotoma2::filter())is good practice.
+
+
+Piping in R
+Piping is a technique that simplifies the process of chaining
+multiple operations on a data object. It involves using either of these
+operators: |> or %>%. |>
+is a base R operator while %>% comes from the
+tidyverse ecosystem in R. In neotoma2 we use
+%>%.
+The pipe operator works as a real-life pipe, which carries water from
+one location to another. In programming, the output of the function on
+the left-hand side of the pipe is taken as the initial argument for the
+function on the right-hand side of the pipe. It helps by making code
+easier to write and read. Additionally, it reduces the number of
+intermediate objects created during data processing, which can make code
+more memory-efficient and faster.
+Without using pipes you can use the neotoma2 R package
+to retrieve a site and then plot it by doing:
+# Retrieve the site
+plot_site <- neotoma2::get_sites(sitename = "%ø%")
+# Plot the site
+neotoma2::plotLeaflet(object = plot_site)
+This would create a variable plot_site that we will not
+need any more, but it was necessary so that we could pass it to the
+plotLeaflet function.
+With the pipe (%>%) we do not need to create the
+variable, we can just rewrite our code. Notice that
+plotLeaflet() doesn’t need the object argument
+because the response of get_sites(sitename = "%ø%") gets
+passed directly into the function.
+
+2.2.3.1. Code
+# get_sites and pipe. The `object` parameter for plotLeaflet will be the
+# result of the `get_sites()` function.
+get_sites(sitename = "%ø%") %>%
+ plotLeaflet()
+
+
+2.2.3.2. Result
+
+
+
+
+
diff --git a/simple_workflow.md b/simple_workflow.md
index 7975a2f..e7aea4f 100644
--- a/simple_workflow.md
+++ b/simple_workflow.md
@@ -1,7 +1,29 @@
---
title: "A Simple Workflow"
-author: "Simon Goring, Socorro Dominguez Vidaña"
-date: "2022-09-20"
+author:
+ - name: "Nora Schlenker"
+ institute: [uwiscgeog]
+ correspondence: false
+ email: nschlenker@wisc.edu
+ orcid_id: 0000-0002-3693-5946
+ - name: "Simon Goring"
+ institute: [uwiscgeog,uwiscdsi]
+ correspondence: true
+ email: goring@wisc.edu
+ orcid_id: 0000-0002-2700-4605
+ - name: "Socorro Dominguez Vidaña"
+ institute: [rhtdata]
+ correspondence: false
+ email: s.dominguez@ht-data.com
+ orcid_id: 0000-0002-7926-4935
+institute:
+ - htdata:
+ name: "HT Data"
+ - uwiscgeog:
+ name: "University of Wisconsin -- Madison: Department of Geography"
+ - uwiscdsi:
+ name: "University of Wisconsin -- Data Science Institute"
+date: "2024-05-31"
output:
html_document:
code_folding: show
@@ -14,46 +36,100 @@ output:
css: "text.css"
pdf_document:
pandoc_args: "-V geometry:vmargin=1in -V geometry:hmargin=1in"
+csl: 'https://bit.ly/3khj0ZL'
---
+
+
## Introduction
-This document is intended to act as a primer for the use of the new Neotoma R package, `neotoma2`. [The `neotoma2` package](https://github.com/NeotomaDB/neotoma2) is available from GitHub and can be installed in R using the `devtools` package by using:
+This document is intended to act as a primer for the use of the new Neotoma R package, `neotoma2` and is the companion to the [*Introduction to Neotoma* presentation](https://docs.google.com/presentation/d/1Fwp5yMAvIdgYpiC04xhgV7OQZ-olZIcUiGnLfyLPUt4/edit?usp=sharing). Some users may be working with this document as part of a workshop for which there is a Binder instance. The Binder instance will run RStudio in your browser, with all the required packages installed.
+
+If you are using this workflow on its own, or want to use the package directly, [the `neotoma2` package](https://github.com/NeotomaDB/neotoma2) is available on CRAN by running:
```r
-devtools::install_github('NeotomaDB/neotoma2')
+install.packages('neotoma2')
library(neotoma2)
```
+Your version should be at or above 0.0.1.
+
+This workshop will also require other packages. To maintain the flow of this document we've placed instructions at the end of the document in the section labelled "[Installing packages on your own](#localinstall)". Please install these packages, and make sure they are at the lastest version.
+
+## Learning Goals
+
In this tutorial you will learn how to:
-* Search for sites using site names and geographic parameters
-* Filter results using temporal and spatial parameters
-* Obtain sample information for the selected datasets
-* Perform basic analysis including the use of climate data from rasters
+1. [Site Searches](#3-site-searches): Search for sites using site names and geographic parameters.
+2. [Filter Results](#33-filter-records-tabset): Filter results using temporal and spatial parameters.
+3. [Explore Data](#34-pulling-in-sample-data): Obtain sample information for the selected datasets.
+4. [Visualize Data](#4-simple-analytics): Perform basic Stratigraphic Plotting
-### Accessing and Manipulating Data with `neotoma2`
+## Background
-For this workbook we use several packages, including `leaflet`, `sf` and others. We load the packages using the `pacman` package, which will automatically install the packages if they do not currently exist in your set of packages.
+### Getting Help with Neotoma
+If you're planning on working with Neotoma, please join us on [Slack](https://join.slack.com/t/neotomadb/shared_invite/zt-cvsv53ep-wjGeCTkq7IhP6eUNA9NxYQ) where we manage a channel specifically for questions about the R package (the *#it_r* channel, or *#it_r_es* for R help in Spanish and *#it_r_jp* in Japanese). You may also wish to join the Neotoma community through our Google Groups mailing lists; please [see the information on our website](https://www.neotomadb.org/about/join-the-neotoma-community) to be added.
-```r
-options(warn = -1)
-pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, raster, DT)
-```
+### Understanding Data Structures in Neotoma
-Note that R is sensitive to the order in which packages are loaded. Using `neotoma2::` tells R explicitly that you want to use the `neotoma2` package to run a particular function. So, for a function like `filter()`, which exists in other packages such as `dplyr`, you may see an error that looks like:
+Data in the Neotoma database itself is structured as a set of linked relationships to express different elements of paleoecological analysis:
-```bash
-Error in UseMethod("filter") :
- no applicable method for 'filter' applied to an object of class "sites"
-```
+* space and time
+ * Where is a sample located in latitude and longitude?
+ * Where is a sample along a depth profile?
+ * What is the estimated age of that sample?
+ * What is the recorded age of elements within or adjacent to the sample?
+* observations
+ * What is being counted or measured?
+ * What units are being used?
+ * Who observed it?
+* scientific methods
+ * What statistical model was used to calculate age?
+ * What uncertainty terms are used in describing an observation?
+* conceptual data models
+ * How do observations in one sample relate to other samples within the same collection?
+ * How does an observation of a fossil relate to extant or extinct relatives?
-In that case it's likely that the wrong package is trying to run `filter()`, and so explicitly adding `dplyr::` or `neotoma2::` in front of the function name (i.e., `neotoma2::filter()`)is good practice.
+These relationships can be complex because paleoecology is a broad and evolving discipline. As such, the database itself is highly structured, and normalized, to allow new relationships and facts to be added, while maintaining a stable central data model. If you want to better understand concepts within the database, you can read the [Neotoma Database Manual](https://open.neotomadb.org/manual), or take a look at [the database schema itself](https://open.neotomadb.org/dbschema).
-### Getting Help with Neotoma
+In this workshop we want to highlight two key structural concepts:
+
+ 1. The way data is structured conceptually within Neotoma (Sites, Collection Units and Datasets).
+ 2. The way that this structure is adapted within the `neotoma2` R package.
+
+#### Data Structure in the Neotoma Database
+
+{width=50%}
+
+Data in Neotoma is associated with **sites** -- specific locations with latitude and longitude coordinates.
+
+Within a **site**, there may be one or more [**collection units**](https://open.neotomadb.org/manual/dataset-collection-related-tables-1.html#CollectionUnits) -- locations at which samples are physically collected within the site:
+
+* an archaeological **site** may have one or more **collection units**, pits within a broader dig site
+* a pollen sampling **site** on a lake may have multiple **collection units** -- core sites within the lake basin.
+* A bog sample **site** may have multiple **collection units** -- a transect of surface samples within the bog.
+
+Collection units may have higher resolution GPS locations than the site location, but are considered to be part of the broader site.
+
+Data within a **collection unit** is collected at various [**analysis units**](https://open.neotomadb.org/manual/sample-related-tables-1.html#AnalysisUnits).
-If you're planning on working with Neotoma, please join us on [Slack](https://join.slack.com/t/neotomadb/shared_invite/zt-cvsv53ep-wjGeCTkq7IhP6eUNA9NxYQ) where we manage a channel specifically for questions about the R package. You may also wish to join our Google Groups mailing list, please [contact us](mailto:neotoma-contact@googlegroups.com) to be added.
+* All sediment at 10cm depth in the depth profile of a cutbank (the collection unit) along an oxbow lake (the site) is one analysis unit.
+* All material in a single surface sample (the collection unit) from a bog (the site) is an analysis unit.
+* All fossil remains in a buried layer from a bone pile (the collection unit) in a cave (the site) is an analysis unit.
+
+Any data sampled within an analysis unit is grouped by the dataset type (charcoal, diatom, dinoflagellate, etc.) and aggregated into a [**sample**](https://open.neotomadb.org/manual/sample-related-tables-1.html#Samples). The set of samples for a collection unit of a particular dataset type is then assigned to a [**dataset**](https://open.neotomadb.org/manual/dataset-collection-related-tables-1.html#Datasets).
+
+* A sample would be all diatoms (the dataset type) extracted from sediment at 12cm (the analysis unit) in a core (the collection unit) obtained from a lake (the site).
+* A sample would be the record of a single mammoth bone (sample and analysis unit, dataset type is vertebrate fauna) embeded in a riverbank (here the site, and collection unit).
+
+#### Data Structures in `neotoma2` {#222-data-structures-in-neotoma2}
+
+
+
+If we look at the [UML diagram](https://en.wikipedia.org/wiki/Unified_Modeling_Language) for the objects in the `neotoma2` R package we can see that the data structure generally mimics the structure within the database itself. As we will see in the [Site Searches section](#3-site-searches), we can search for these objects, and begin to manipulate them (in the [Simple Analysis section](#4-simple-analytics)).
+
+It is important to note: *within the `neotoma2` R package, most objects are `sites` objects, they just contain more or less data*. There are a set of functions that can operate on `sites`. As we add to `sites` objects, using `get_datasets()` or `get_downloads()`, we are able to use more of these helper functions.
## Site Searches
@@ -61,78 +137,88 @@ If you're planning on working with Neotoma, please join us on [Slack](https://jo
There are several ways to find sites in `neotoma2`, but we think of `sites` as being spatial objects primarily. They have names, locations, and are found within the context of geopolitical units, but within the API and the package, the site itself does not have associated information about taxa, dataset types or ages. It is simply the container into which we add that information. So, when we search for sites we can search by:
- * siteid
- * sitename
- * location
- * altitude (maximum and minimum)
- * geopolitical unit
+| Parameter | Description |
+| --------- | ----------- |
+| sitename | A valid site name (case insensitive) using `%` as a wildcard. |
+| siteid | A unique numeric site id from the Neotoma Database |
+| loc | A bounding box vector, geoJSON or WKT string. |
+| altmin | Lower altitude bound for sites. |
+| altmax | Upper altitude bound for site locations. |
+| database | The constituent database from which the records are pulled. |
+| datasettype | The kind of dataset (see `get_tables(datasettypes)`) |
+| datasetid | Unique numeric dataset identifier in Neotoma |
+| doi | A valid dataset DOI in Neotoma |
+| gpid | A unique numeric identifier, or text string identifying a geopolitical unit in Neotoma |
+| keywords | Unique sample keywords for records in Neotoma. |
+| contacts | A name or numeric id for individuals associuated with sites. |
+| taxa | Unique numeric identifiers or taxon names associated with sites. |
+
+All sites in Neotoma contain one or more datasets. It's worth noting that the results of these search parameters may be slightly unexpected. For example, searching for sites by sitename, latitude, or altitude will return all of the datasets for the particular site. Searching for terms such as datasettype, datasetid or taxa will return the site, but the only datasets returned will be those matching the dataset-specific search terms. We'll see this later.
-#### Site names: `sitename="%Lait%"` {.tabset}
+#### Site names: `sitename="%ø%"` {.tabset}
-We may know exactly what site we're looking for ("Lac Mouton"), or have an approximate guess for the site name (for example, we know it's something like "Lait Lake", or "Lac du Lait", but we're not sure how it was entered specifically).
+We may know exactly what site we're looking for ("Lake Solsø"), or have an approximate guess for the site name (for example, we know it's something like "Solsø", but we're not sure how it was entered specifically), or we may want to search all sites that have a specific term, for example, *ø*.
-We use the general format: `get_sites(sitename="XXXXX")` for searching by name.
+We use the general format: `get_sites(sitename="%ø%")` for searching by name.
-PostgreSQL (and the API) uses the percent sign as a wildcard. So `"%Lait%"` would pick up ["Lac du Lait"](https://data.neotomadb.org/4180) for us (and would pick up "Lake Lait" and "This Old **Lait**y Hei-dee-ho Bog" if they existed). Note that the search query is also case insensitive, so you could simply write `"%lait%"`.
+PostgreSQL (and the API) uses the percent sign as a wildcard. So `"%ø%"` would pick up ["Lake Solsø"](https://data.neotomadb.org/4445) for us (and picks up "Isbenttjønn" and "Lake Flåfattjønna"). Note that the search query is also case insensitive.
##### Code
```r
-spo_sites <- neotoma2::get_sites(sitename = "%Lait%")
-plotLeaflet(spo_sites)
+denmark_sites <- neotoma2::get_sites(sitename = "%ø%")
+plotLeaflet(denmark_sites)
```
##### Result
```{=html}
-
-
+
+
```
#### Location: `loc=c()` {.tabset}
-The `neotoma` package used a bounding box for locations, structured as a vector of latitude and longitude values: `c(xmin, ymin, xmax, ymax)`. The `neotoma2` R package supports both this simple bounding box, but also more complex spatial objects, using the [`sf` package](https://r-spatial.github.io/sf/). Using the `sf` package allows us to more easily work with raster and polygon data in R, and to select sites from more complex spatial objects. The `loc` parameter works with the simple vector, [WKT](https://arthur-e.github.io/Wicket/sandbox-gmaps3.html), [geoJSON](http://geojson.io/#map=2/20.0/0.0) objects and native `sf` objects in R. **Note however** that the `neotoma2` package is a wrapper for a simple API call using a URL ([api.neotomadb.org](https://api.neotomadb.org)), and URL strings can only be 1028 characters long, so the API cannot accept very long/complex spatial objects.
+The original `neotoma` package used a bounding box for locations, structured as a vector of latitude and longitude values: `c(xmin, ymin, xmax, ymax)`. The `neotoma2` R package supports both this simple bounding box, but also more complex spatial objects, using the [`sf` package](https://r-spatial.github.io/sf/). Using the `sf` package allows us to more easily work with raster and polygon data in R, and to select sites from more complex spatial objects. The `loc` parameter works with the simple vector, [WKT](https://arthur-e.github.io/Wicket/sandbox-gmaps3.html), [geoJSON](http://geojson.io/#map=2/20.0/0.0) objects and native `sf` objects in R.
-Looking for sites using a location. We're putting three representations of the Czech Republic here as part of a list with three elements, a geoJSON, WKT and bounding box representation. We've also transformed the `cz$geoJSON` element to an object for the `sf` package. Any of these four spatial representations work with the `neotoma2` package.
+As an example of searching for sites using a location, we've created a rough representation of Denmark as a polygon. To work with this spatial object in R we also transformed the `geoJSON` element to an object for the `sf` package. There are many other tools to work with spatial objects in R. Regardless of how you get the data into R, `neotoma2` works with almost all objects in the `sf` package.
```r
-cz <- list(geoJSON = '{"type": "Polygon",
- "coordinates": [[
- [12.40, 50.14],
- [14.10, 48.64],
- [16.95, 48.66],
- [18.91, 49.61],
- [15.24, 50.99],
- [12.40, 50.14]]]}',
- WKT = 'POLYGON ((12.4 50.14,
- 14.1 48.64,
- 16.95 48.66,
- 18.91 49.61,
- 15.24 50.99,
- 12.4 50.14))',
- bbox = c(12.4, 48.64, 18.91, 50.99))
+geoJSON <- '{"coordinates": [[
+ [7.92, 55.02],
+ [12.42, 54.42],
+ [12.86, 55.98],
+ [12.41, 56.44],
+ [10.63, 57.96],
+ [7.74, 57.48],
+ [ 7.70, 57.09],
+ [7.92, 55.02]
+ ]],
+ "type": "Polygon"}'
-cz$sf <- geojsonsf::geojson_sf(cz$geoJSON)[[1]]
+denmark_sf <- geojsonsf::geojson_sf(geoJSON)
-cz_sites <- neotoma2::get_sites(loc = cz$geoJSON, all_data = TRUE)
+# Note here we use the `all_data` flag to capture all the sites within the polygon.
+# We're using `all_data` here because we know that the site information is relatively small
+# for denmark. If we were working in a new area or with a new search we would limit the
+# search size.
+denmark_sites <- neotoma2::get_sites(loc = denmark_sf, all_data = TRUE)
```
-```
-## Your search returned 89 objects.
-```
-
-You can always simply `plot()` the `sites` objects, but you will lose some of the geographic context. The `plotLeaflet()` function returns a `leaflet()` map, and allows you to further customize it, or add additional spatial data (like our original bounding polygon, `cz$sf`, which works directly with the R `leaflet` package):
+You can always simply `plot()` the `sites` objects, but you will lose some of the geographic context. The `plotLeaflet()` function returns a `leaflet()` map, and allows you to further customize it, or add additional spatial data (like our original bounding polygon, `sa_sf`, which works directly with the R `leaflet` package):
##### Code
+Note the use of the `%>%` pipe here. If you are not familiar with this symbol, check our ["Piping in R" section](#piping-in-r) of the Appendix.
+
```r
-neotoma2::plotLeaflet(cz_sites) %>%
+neotoma2::plotLeaflet(denmark_sites) %>%
leaflet::addPolygons(map = .,
- data = cz$sf,
+ data = denmark_sf,
color = "green")
```
@@ -140,101 +226,113 @@ neotoma2::plotLeaflet(cz_sites) %>%
```{=html}
-
-
+
+
```
-#### Site Helpers {.tabset}
+#### `site` Object Helpers {.tabset}
-
+If we look at the [data structure diagram](#222-data-structures-in-neotoma2) for the objects in the `neotoma2` R package we can see that there are a set of functions that can operate on `sites`. As we retrieve more information for `sites` objects, using `get_datasets()` or `get_downloads()`, we are able to use more of these helper functions.
-If we look at the [UML diagram](https://en.wikipedia.org/wiki/Unified_Modeling_Language) for the objects in the `neotoma2` R package we can see that there are a set of functions that can operate on `sites`. As we add to `sites` objects, using `get_datasets()` or `get_downloads()`, we are able to use more of these helper functions. As it is, we can take advantage of sunctions like `summary()` to get a more complete sense of the types of data we have as part of this set of sites. The following code gives the summary table. We do some R magic here to change the way the data is displayed (turning it into a `datatable()` object), but the main piece is the `summary()` call.
+As it is, we can take advantage of functions like `summary()` to get a more complete sense of the types of data we have in `denmark_sites`. The following code gives the summary table. We do some R magic here to change the way the data is displayed (turning it into a [`DT::datatable()`](https://rstudio.github.io/DT/) object), but the main piece is the `summary()` call.
##### Code
```r
-neotoma2::summary(cz_sites)
+# Give information about the sites themselves, site names &cetera.
+neotoma2::summary(denmark_sites)
+# Give the unique identifiers for sites, collection units and datasets found at those sites.
+neotoma2::getids(denmark_sites)
```
##### Result
```{=html}
-
-
+
+
```
-We can see that there are no chronologies associated with the `site` objects. This is because, at present, we have not pulled in the `dataset` information we need. All we know from `get_sites()` are the kinds of datasets we have.
+In this document we list only the first 10 records (there are more, you can use `length(datasets(denmark_sites))` to see how many datasets you've got). We can see that there are no chronologies associated with the `site` objects. This is because, at present, we have not pulled in the `dataset` information we need. In Neotoma, a chronology is associated with a collection unit (and that metadata is pulled by `get_datasets()` or `get_downloads()`). All we know from `get_sites()` are the kinds of datasets we have and the location of the sites that contain the datasets.
-### Searching for datasets: {.tabset}
+### `get_datasets()` {.tabset}
-We know that collection units and datasets are contained within sites. Similarly, a `sites` object contains `collectionunits` which contain `datasets`. From the table above we can see that some of the sites we've looked at contain pollen records. That said, we only have the `sites`, it's just that (for convenience) the `sites` API returns some information about datasets so to make it easier to navigate the records.
+Within Neotoma, collection units and datasets are contained within sites. Similarly, a `sites` object contains `collectionunits` which contain `datasets`. From the table above (Result tab in Section 3.1.3.2) we can see that some of the sites we've looked at contain pollen records, some contain geochronologic data and some contain other dataset types. We could write something like this: `table(summary(denmark_sites)$types)` to see the different datasettypes and their counts.
-With a `sites` object we can directly call `get_datasets()`, to pull in more metadata about the datasets. At any time we can use `datasets()` to get more information about any datasets that a `sites` object may contain. Compare the output of `datasets(cz_sites)` to the output of a similar call using the following:
+With a `sites` object we can directly call `get_datasets()` to pull in more metadata about the datasets. The `get_datasets()` method also supports any of the search terms listed above in the [Site Search](#3-site-searches) section. At any time we can use `datasets()` to get more information about any datasets that a `sites` object may contain. Compare the output of `datasets(denmark_sites)` to the output of a similar call using the following:
#### Code
```r
-cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
+# This may be slow, because there's a lot of sites!
+# denmark_datasets <- neotoma2::get_datasets(denmark_sites, all_data = TRUE)
+
+denmark_datasets <- neotoma2::get_datasets(loc = denmark_sf, datasettype = "pollen", all_data = TRUE)
-datasets(cz_datasets)
+datasets(denmark_datasets)
```
#### Result
```{=html}
-
-
+
+
```
-### Filter Records {.tabset}
+You can see that this provides information only about the specific dataset, not the site! For a more complete record we can join site information from `summary()` to dataset information using `datasets()` using the `getids()` function which links sites, and all the collection units and datasets they contain.
+
+### `filter()` Records {.tabset}
-If we choose to pull in information about only a single dataset type, or if there is additional filtering we want to do before we download the data, we can use the `filter()` function. For example, if we only want pollen records, and want records with known chronologies, we can filter:
+If we choose to pull in information about only a single dataset type, or if there is additional filtering we want to do before we download the data, we can use the `filter()` function. For example, if we only want sedimentary pollen records (as opposed to pollen surface samples), and want records with known chronologies, we can filter by `datasettype` and by the presence of an `age_range_young`, which would indicate that there is a chronology that defines bounds for ages within the record.
#### Code
```r
-cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
+denmark_records <- denmark_datasets %>%
+ neotoma2::filter(!is.na(age_range_young))
-neotoma2::summary(cz_pollen)
+neotoma2::summary(denmark_records)
+
+# We've removed records, so the new object should be shorter than the original.
+length(denmark_records) < length(denmark_datasets)
```
#### Result
```{=html}
-
-
+
+
```
-We can see now that the data table looks different, and there are fewer total sites.
+We can see now that the data table looks different (comparing it to the [table above](#322-result)), and there are fewer total sites. Again, there is no explicit chronology for these records, we need to pull down the complete download for these records, but we begin to get a sense of what kind of data we have.
-### Pulling in `sample()` data.
+### Pulling in `sample()` data
-Because sample data adds a lot of overhead (for the Czech pollen data, the object that includes the dataset with samples is 20 times larger than the `dataset` alone), we try to call `get_downloads()` after we've done our preliminary filtering. After `get_datasets()` you have enough information to filter based on location, time bounds and dataset type. When we move to `get_download()` we can do more fine-tuned filtering at the analysis unit or taxon level.
+Because sample data adds a lot of overhead (for this pollen data, the object that includes the dataset with samples is 20 times larger than the `dataset` alone), we try to call `get_downloads()` only after we've done our preliminary filtering. After `get_datasets()` you have enough information to filter based on location, time bounds and dataset type. When we move to `get_download()` we can do more fine-tuned filtering at the analysis unit or taxon level.
The following call can take some time, but we've frozen the object as an RDS data file. You can run this command on your own, and let it run for a bit, or you can just load the object in.
```r
## This line is commented out because we've already run it for you.
-## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)
-cz_dl <- readRDS('data/czDownload.RDS')
+## denmark_dl <- denmark_records %>% get_downloads(all_data = TRUE)
+## saveRDS(denmark_dl, "data/dkDownload.RDS")
+denmark_dl <- readRDS("data/dkDownload.RDS")
```
-Once we've downloaded, we now have information for each site about all the associated collection units, the datasets, and, for each dataset, all the samples associated with the datasets. To extract all the samples we can call:
+Once we've downloaded, we now have information for each site about all the associated collection units, the datasets, and, for each dataset, all the samples associated with the datasets. To extract samples all downloads we can call:
```r
-allSamp <- samples(cz_dl)
+allSamp <- samples(denmark_dl)
```
-When we've done this, we get a `data.frame` that is 130889 rows long and 37 columns wide. The reason the table is so wide is that we are returning data in a **long** format. Each row contains all the information you should need to properly interpret it:
+When we've done this, we get a `data.frame` that is 10055 rows long and 37 columns wide. The reason the table is so wide is that we are returning data in a **long** format. Each row contains all the information you should need to properly interpret it:
```
@@ -243,109 +341,140 @@ When we've done this, we get a `data.frame` that is 130889 rows long and 37 colu
## [9] "context" "element" "taxonid" "symmetry"
## [13] "taxongroup" "elementtype" "variablename" "ecologicalgroup"
## [17] "analysisunitid" "sampleanalyst" "sampleid" "depth"
-## [21] "thickness" "samplename" "datasetid" "siteid"
-## [25] "sitename" "lat" "long" "area"
-## [29] "sitenotes" "description" "elev" "collunitid"
-## [33] "database" "datasettype" "age_range_old" "age_range_young"
-## [37] "datasetnotes"
+## [21] "thickness" "samplename" "datasetid" "database"
+## [25] "datasettype" "age_range_old" "age_range_young" "datasetnotes"
+## [29] "siteid" "sitename" "lat" "long"
+## [33] "area" "sitenotes" "description" "elev"
+## [37] "collunitid"
```
-For some dataset types, or analyses some of these columns may not be needed, however, for other dataset types they may be critically important. To allow the `neotoma2` package to be as useful as possible for the community we've included as many as we can.
+For some dataset types or analyses, some of these columns may not be needed, however, for other dataset types they may be critically important. To allow the `neotoma2` package to be as useful as possible for the community we've included as many as we can.
#### Extracting Taxa {.tabset}
-If you want to know what taxa we have in the record you can use the helper function `taxa()` on the sites object. The `taxa()` function gives us, not only the unique taxa, but two additional columns, `sites` and `samples` that tell us how many sites the taxa appear in, and how many samples the taxa appear in, to help us better understand how common individual taxa are.
+If you want to know what taxa we have in the record you can use the helper function `taxa()` on the sites object. The `taxa()` function gives us not only the unique taxa, but two additional columns -- `sites` and `samples` -- that tell us how many sites the taxa appear in, and how many samples the taxa appear in, to help us better understand how common individual taxa are.
##### Code
```r
-neotomatx <- neotoma2::taxa(cz_dl)
+neotomatx <- neotoma2::taxa(denmark_dl)
```
##### Results
```{=html}
-
-
+
+
```
-#### {-}
+#### Understanding Taxonomies in Neotoma {-}
-The `taxonid` values can be linked to the `taxonid` column in the `samples()`. This allows us to build taxon harmonization tables if we choose to. You may also note that the `taxonname` is in the field `variablename`. Individual sample counts are reported in Neotoma as [`variables`](https://open.neotomadb.org/manual/taxonomy-related-tables-1.html#Variables). A "variable" may be either a species, something like laboratory measurements, or a non-organic proxy, like charcoal or XRF measurements, and includes the units of measurement and the value.
+Taxonomies in Neotoma are not as straightforward as we might expect. Taxonomic identification in paleoecology can be complex, impacted by the morphology of the object we are trying to identify, the condition of the palynomorph, the expertise of the analyst, and many other conditions. You can read more about concepts of taxonomy within Neotoma in the Neotoma Manual's [section on Taxonomic concepts](https://open.neotomadb.org/manual/database-design-concepts.html#taxonomy-and-synonymy).
-#### Simple Harmonization {.tabset}
+We use the unique identifiers (*e.g.*, `taxonid`, `siteid`, `analysisunitid`) throughout the package, since they help us to link between records. The `taxonid` values returned by the `taxa()` call can be linked to the `taxonid` column in the `samples()` table. This allows us to build taxon harmonization tables if we choose to. You may also note that the `taxonname` is in the field `variablename`. Individual sample counts are reported in Neotoma as [`variables`](https://open.neotomadb.org/manual/taxonomy-related-tables-1.html#Variables). A "variable" may be either a species, something like laboratory measurements, or a non-organic proxy, like charcoal or XRF measurements, and includes the units of measurement and the value.
-Lets say we want all samples from which *Plantago* taxa have been reported to be grouped together into one pseudo-taxon called *Plantago*. There are several ways of doing this, either directly by exporting the file and editing each individual cell, or by creating an external "harmonization" table (which we did in the prior `neotoma` package).
+#### Simple Harmonization {.tabset}
-Programmatically, we can harmonize taxon by taxon using matching and transformation. We're using `dplyr` type coding here to `mutate()` the column `variablename` so that any time we detect (`str_detect()`) a `variablename` that starts with `Plantago` (the `.*` represents a wildcard for any character [`.`], zero or more times [`*`]) we `replace()` it with the character string `"Plantago"`. Note that this changes *Plantago* in the `allSamp` object, but if we were to call `samples()` again, the taxonomy would return to its original form.
+Let's say we want all samples from which *Poaceae* (grass) taxa have been reported to be grouped together into one pseudo-taxon called *Poaceae-undiff*. **NOTE**, this is may not be an ecologically useful grouping, but is used here for illustration.
-We're going to filter the ecological groups to include only *UPHE* (upleand/heath) and *TRSH* (trees and shrubs). More information about ecological groups is available from the [Neotoma Online Manual](https://open.neotomadb.org/manual).
+There are several ways of grouping taxa, either directly by exporting the file and editing each individual cell, or by creating an external "harmonization" table (which we did in the prior `neotoma` package). First, lets look for how many different ways *Poaceae* appears in these records. We can use the function `str_detect()` from the `stringr` package to look for patterns, and then return either `TRUE` or `FALSE` when the string is detected:
-```r
-allSamp <- allSamp %>%
- dplyr::filter(ecologicalgroup %in% c("UPHE", "TRSH")) %>%
- mutate(variablename = replace(variablename,
- stringr::str_detect(variablename, "Plantago.*"),
- "Plantago"))
```
+## # A tibble: 4 × 11
+## # Groups: units, context, element, taxonid, symmetry, taxongroup,
+## # elementtype, variablename, ecologicalgroup [4]
+## units context element taxonid symmetry taxongroup elementtype variablename
+##
+## 1 NISP pollen 125 NA Vascular plan… pollen Poaceae und…
+## 2 NISP pollen 417 NA Vascular plan… pollen Poaceae
+## 3 NISP pollen 2113 NA Vascular plan… pollen Poaceae (>4…
+## 4 NISP pollen 33543 NA Vascular plan… pollen Poaceae und…
+## # ℹ 3 more variables: ecologicalgroup , samples , sites
+```
+
+We can harmonize taxon by taxon a number of different ways. One way would be to get every instance of a *Poaceae* taxon and just change them directly. Here we are taking the column `variablename` from the `allSamp` object (this is where the count data is). The square brackets are telling us which rows we're changing, here only rows where we detect `"Poaceae"` in the variable name. For each of those rows, in that column, we assign the value `"Poaceae undiff"`:
-There were originally 15 different taxa identified as being within the genus *Plantago* (including *Plantago*, *Plantago major*, and *Plantago alpina-type*). The above code reduces them all to a single taxonomic group *Plantago*.
-If we want to have an artifact of our choices, we can use an external table. For example, a table of pairs (what we want changed, and the name we want it replaced with) can be generated, and it can include regular expressions (if we choose):
+
+There were originally 4 different taxa identified as being within the genus *Poaceae* (including *Poaceae*., *Poaceae (>40 µm)*, and *Poaceae undiff. (<40 µm)*). The above code reduces them all to a single taxonomic group *Poaceae undiff*.
+
+Note that this changes *Poaceae* in the `allSamp` object _only_, not in any of the downloaded objects. If we were to call `samples()` again, the taxonomy would return to its original form.
+
+A second way to harmonize taxa is to use an external table, which is especially useful if we want to have an artifact of our choices. For example, a table of pairs (what we want changed, and the name we want it replaced with) can be generated, and it can include regular expressions (if we choose):
| original | replacement |
| -------- | ----------- |
-| Abies.* | Abies |
-| Vaccinium.* | Ericaceae |
-| Typha.* | Aquatic |
-| Nymphaea | Aquatic |
+| Poaceae.* | Poaceae-undiff |
+| Picea.* | Picea-undiff |
+| Plantago.* | Plantago-undiff |
+| Quercus.* | Quercus-undiff |
| ... | ... |
-We can get the list of original names directly from the `taxa()` call, applied to a `sites` object, and then export it using `write.csv()`.
-
-##### Code
+We can get the list of original names directly from the `taxa()` call, applied to a `sites` object that contains samples, and then export it using `write.csv()`.
```r
-taxaplots <- taxa(cz_dl)
+taxaplots <- taxa(denmark_dl)
# Save the taxon list to file so we can edit it subsequently.
readr::write_csv(taxaplots, "data/mytaxontable.csv")
```
-##### Result
+#### Looking at the Taxonomic Structure {.tabset}
+
+The `taxa` function returns all our taxonomic information, and it provides some additional information, the columns `samples` and `sites` which record the number of samples across all datasets that contain the taxon, and the number of sites with the taxon. The plot below shows the relationship between samples and sites, which we would expect to be somewhat skewed, as it is.
-
+This is effectively a rarefaction curve, the more sites a taxon is found at, the more samples it is found at.
-#### {-}
+##### Code
-The plot is mostly for illustration, but we can see, as a sanity check, that the relationship is as we'd expect.
-You can then export either one of these tables and add a column with the counts, you could also add extra contextual information, such as the `ecologicalgroup` or `taxongroup` to help you out. Once you've cleaned up the translation table you can load it in, and then apply the transformation:
+```r
+taxaplots <- taxa(denmark_dl)
+ggplot(data = taxaplots, aes(x = sites, y = samples)) +
+ geom_point() +
+ stat_smooth(method = 'glm',
+ method.args = list(family = 'poisson')) +
+ xlab("Number of Sites") +
+ ylab("Number of Samples") +
+ theme_bw()
+```
+
+##### Result
+
+
+
+#### Editing the Taxonomy Table {-}
+
+The plot (above) is mostly for illustration, but we can see, as a sanity check, that the relationship is as we'd expect. Here, each point represents a separate taxon, roughly, so there is a large density of points (taxa) that plot in the lower left section of the figure, and fewer points in the upper right. This means that there are a large number of taxa that are rarely present and then several that are quite common.
+
+Exporting the taxon table to a `csv` file allows us to edit the table, filtering and selecting taxa based on contextual information, such as the `ecologicalgroup` or `taxongroup` to help you out. Once you've cleaned up the translation table you can load it in (try to save it under a different file name!), and then apply the transformation:
```r
translation <- readr::read_csv("data/taxontable.csv")
```
+I did a bunch of work here. . . Then we read it in.
+
```{=html}
-
-
+
+
```
-You can see we've changed some of the taxon names in the taxon table (don't look too far, I just did this as an example). To replace the names in the `samples()` output, we'll join the two tables using an `inner_join()` (meaning the `variablename` must appear in both tables for the result to be included), and then we're going to select only those elements of the sample tables that are relevant to our later analysis:
+You can see we've changed some of the taxon names in the taxon table. To replace the names in the `samples()` output, we'll join the two tables using an `inner_join()` (meaning the `variablename` must appear in both tables for the result to be included), and then we're going to select only those elements of the sample tables that are relevant to our later analysis, using the `harmonizedname` column as our new name for the taxa:
```r
-allSamp <- samples(cz_dl)
+allSamp <- samples(denmark_dl)
allSamp <- allSamp %>%
inner_join(translation, by = c("variablename" = "variablename")) %>%
- dplyr::select(!c("variablename", "sites", "samples")) %>%
- group_by(siteid, sitename, replacement,
+ dplyr::select(!c("variablename")) %>%
+ group_by(siteid, sitename, harmonizedname,
sampleid, units, age,
agetype, depth, datasetid,
long, lat) %>%
@@ -354,188 +483,185 @@ allSamp <- allSamp %>%
```{=html}
-
-
+
+
```
+We now have a cleaner set of taxon names compared to the original table, both because of harmonization, and because we cleared out many of the non-**TRSH** (trees and shrubs) taxa from the harmonization table. Plotting the same set of taxa with the new harmonized names results in this plot:
+
+
+
## Simple Analytics
-### Stratigraphic Plotting
+### Stratigraphic Plotting {.tabset}
-We can use packages like `rioja` to do stratigraphic plotting for a single record, but first we need to do some different data management. Although we could do harmonization again we're going to simply take the top ten most common taxa at a single site and plot them in a stratigraphic diagram.
+To plot at strategraphic diargram we are only interested in one site and in one dataset. By looking at the summary of downloads we can see that Lake Solsø has two collection units that both have a pollen record. Lets look at the SOLSOE81 collection unit, which is the second download. To get the samples from just that one collection unit by specifying that you want only the samples from the second download.
-We're using the `arrange()` call to sort by the number of times that the taxon appears within the core. This way we can take out samples and select the taxa that appear in the first ten rows of the `plottingTaxa` `data.frame`.
+We can use packages like `rioja` to do stratigraphic plotting for a single record, but first we need to do some different data management. Although we could do harmonization again we're going to simply take the taxa at a single site and plot them in a stratigraphic diagram. However, if you would like to plot multiple sites and you want them to have harmonized taxa we have provided examples on how to do both.
+#### Raw Taxon
```r
-# Get a particular site, select only taxa identified from pollen (and only trees/shrubs)
-plottingSite <- cz_dl[[1]]
+# Get a particular site, in this case we are simply subsetting the
+# `denmark_dl` object to get Lake Solsø:
+plottingSite <- denmark_dl[[2]]
+
+# Select only pollen measured using NISP and convert to a "wide"
+# table, using proportions. The first column will be "age".
+# This turns our "long" table into a "wide" table:
+counts <- plottingSite %>%
+ samples() %>%
+ toWide(ecologicalgroup = c("TRSH"),
+ unit = c("NISP"),
+ elementtypes = c("pollen"),
+ groupby = "age",
+ operation = "prop") %>%
+ arrange(age)
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(samples)) %>%
- head(n = 10)
+counts <- counts[, colSums(counts > 0.01, na.rm = TRUE) > 5]
+```
-# Clean up. Select only pollen measured using NISP.
-# We repeat the filters for pollen & ecological group on the samples
-shortSamples <- samples(plottingSite) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- filter(units == "NISP")
+#### With Harmonization
-# Transform to proportion values.
-onesite <- shortSamples %>%
- group_by(age) %>%
- mutate(pollencount = sum(value, na.rm = TRUE)) %>%
- group_by(variablename) %>%
- mutate(prop = value / pollencount) %>%
- arrange(desc(age))
+```r
+# Get a particular site, in this case we are simply subsetting the
+# `denmark_dl` object to get Lake Solsø:
+plottingSite <- denmark_dl[[2]]
-# Spread the data to a "wide" table, with taxa as column headings.
-widetable <- onesite %>%
- dplyr::select(age, variablename, prop) %>%
- mutate(prop = as.numeric(prop))
+# Select only pollen measured using NISP and convert to a "wide"
+# table, using proportions. The first column will be "age".
+# This turns our "long" table into a "wide" table:
+counts_harmonized <- plottingSite %>%
+ samples() %>%
+ toWide(ecologicalgroup = c("TRSH"),
+ unit = c("NISP"),
+ elementtypes = c("pollen"),
+ groupby = "age",
+ operation = "prop") %>%
+ arrange(age) %>%
+ pivot_longer(-age) %>%
+ inner_join(translation, by = c("name" = "variablename")) %>%
+ dplyr::select(!c("name", taxonid)) %>%
+ group_by(harmonizedname, age) %>%
+ summarise(value = sum(value), .groups='keep')%>%
+ pivot_wider(names_from = harmonizedname, values_from = value)
-counts <- tidyr::pivot_wider(widetable,
- id_cols = age,
- names_from = variablename,
- values_from = prop,
- values_fill = 0)
+counts_harmonized <- counts_harmonized[, colSums(counts_harmonized > 0.01, na.rm = TRUE) > 5]
```
-This appears to be a fairly long set of commands, but the code is pretty straightforward, and it provides you with significant control over the taxa, units and other elements of your data before you get them into the wide matrix (`depth` by `taxon`) that most statistical tools such as the `vegan` package or `rioja` use.
+### {.tabset}
+
+Hopefully the code is pretty straightforward. The `toWide()` function provides you with significant control over the taxa, units and other elements of your data before you get them into the wide matrix (`depth` by `taxon`) that most statistical tools such as the `vegan` package or `rioja` use.
+
+To plot the data we can use `rioja`'s `strat.plot()`, sorting the taxa using weighted averaging scores (`wa.order`). I've also added a CONISS plot to the edge of the the plot, to show how the new *wide* data frame works with distance metric funcitons.
-To plot we can use `rioja`'s `strat.plot()`, sorting the taxa using weighted averaging scores (`wa.order`). I've also added a CONISS plot to the edge of the the plot, to show how the new *wide* data frame works with distance metric funcitons.
+#### Raw Taxon
```r
+# Perform constrained clustering:
clust <- rioja::chclust(dist(sqrt(counts)),
method = "coniss")
+# Plot the stratigraphic plot, converting proportions to percentages:
plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,
- title = cz_dl[[1]]$sitename,
+ title = denmark_dl[[1]]$sitename,
ylabel = "Calibrated Years BP",
- xlabel = "Pollen (%)",
+ xlabel = "Pollen (% of Trees and Shrubs)",
+ srt.xlabel = 70,
y.rev = TRUE,
clust = clust,
- wa.order = "topleft", scale.percent = TRUE)
+ wa.order = "topleft",
+ scale.percent = TRUE)
rioja::addClustZone(plot, clust, 4, col = "red")
```
-
+
-### Change in Time Across Sites
+#### With Harmonization
-We now have site information across the Czech Republic, with samples, and with taxon names. I'm interested in looking at the distributions of taxa across time, their presence/absence. I'm going to pick the top 20 taxa (based on the number of times they appear in the records) and look at their distributions in time:
+```r
+# Perform constrained clustering:
+clust <- rioja::chclust(dist(sqrt(counts_harmonized)),
+ method = "coniss")
+# Plot the stratigraphic plot, converting proportions to percentages:
+plot <- rioja::strat.plot(counts_harmonized[,-1] * 100, yvar = counts_harmonized$age,
+ title = denmark_dl[[1]]$sitename,
+ ylabel = "Calibrated Years BP",
+ xlabel = "Pollen (% of Trees and Shrubs)",
+ srt.xlabel = 70,
+ y.rev = TRUE,
+ clust = clust,
+ wa.order = "topleft",
+ scale.percent = TRUE)
-```r
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(sites)) %>%
- head(n = 20)
-
-taxabyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by(variablename, "age" = round(age * 2, -3) / 2) %>%
- summarise(n = length(unique(siteid)), .groups = 'keep')
-
-samplesbyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by("age" = round(age * 2, -3) / 2) %>%
- summarise(samples = length(unique(siteid)), .groups = 'keep')
-
-groupbyage <- taxabyage %>%
- inner_join(samplesbyage, by = "age") %>%
- mutate(proportion = n / samples)
-
-ggplot(groupbyage, aes(x = age, y = proportion)) +
- geom_point() +
- geom_smooth(method = 'gam',
- method.args = list(family = 'binomial')) +
- facet_wrap(~variablename) +
- coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +
- scale_x_reverse(breaks = c(10000, 20000)) +
- xlab("Proportion of Sites with Taxon") +
- theme_bw()
+rioja::addClustZone(plot, clust, 4, col = "red")
```
-
+
-We can see clear patterns of change, and the smooths are modeled using Generalized Additive Models (GAMs) in R, so we can have more or less control over the actual modeling using the `gam` or `mgcv` packages. Depending on how we divide the data we can also look at shifts in altitude, latitude or longitude to better understand how species distributions and abundances changed over time in this region.
+###
-### Distributions in Climate (July max temperature) from Rasters
+## Conclusion
-We are often interested in the interaction between taxa and climate, assuming that time is a proxy for changing environments. The development of large-scale global datasets for climate has made it relatively straightforward to access data from the cloud in raster format. R provides a number of tools (in the `sf` and `raster` packages) for managing spatial data, and providing support for spatial analysis of data.
+So, we've done a lot in this example. We've (1) searched for sites using site names and geographic parameters, (2) filtered results using temporal and spatial parameters, (3) obtained sample information for the selected datasets and (4) performed basic analysis including the use of climate data from rasters. Hopefully you can use these examples as templates for your own future work, or as a building block for something new and cool!
-The first step is taking our sample data and turning it into a spatial object using the `sf` package in R:
+## Appendix Sections
+### Installing packages on your own {#localinstall}
+
+We use several packages in this document, including `leaflet`, `sf` and others. We load the packages using the `pacman` package, which will automatically install the packages if they do not currently exist in your set of packages.
-```r
-modern <- samples(cz_dl) %>%
- filter(age < 50) %>%
- filter(ecologicalgroup == "TRSH" & elementtype == "pollen" & units == "NISP")
-spatial <- sf::st_as_sf(modern,
- coords = c("long", "lat"),
- crs = "+proj=longlat +datum=WGS84")
+```r
+options(warn = -1)
+pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, terra, DT, readr, stringr, rioja)
```
-The data is effectively the same, `sf` makes an object called `spatial` that is a `data.frame` with all the information from `samples()`, and a column (`geometry`) that contains the spatial data.
+Note that R is sensitive to the order in which packages are loaded. Using `neotoma2::` tells R explicitly that you want to use the `neotoma2` package to run a particular function. So, for a function like `filter()`, which exists in other packages such as `dplyr`, you may see an error that looks like:
-We can use the [`getData()` function](https://www.rdocumentation.org/packages/raster/versions/3.5-15/topics/getData) in the `raster` package to get climate data from WorldClim. The operations that follow here can be applied to any sort of raster data, provided it is loaded into R as a `raster` object.
+```bash
+Error in UseMethod("filter") :
+ no applicable method for 'filter' applied to an object of class "sites"
+```
-Here we pull in the raster data, at a 10 minute resolution for the $T_{max}$ variable, maximum monthly temperature. The raster itself has 12 layers, one for each month. With the `extract()` function we just get information for the seventh month, July.
+In that case it's likely that the wrong package is trying to run `filter()`, and so explicitly adding `dplyr::` or `neotoma2::` in front of the function name (i.e., `neotoma2::filter()`)is good practice.
+### Piping in `R` {.tabset}
-```r
-worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)
-spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]
-```
+Piping is a technique that simplifies the process of chaining multiple operations on a data object. It involves using either of these operators: `|>` or `%>%`. `|>` is a base R operator while `%>%` comes from the `tidyverse` ecosystem in R. In `neotoma2` we use `%>%`.
-This adds a column to the `data.frame` `spatial`, that contains the maximum July temperature for each taxon at each site (all taxa at a site will share the same value). We've already filtered to all UPHE taxa, but that still leaves us with 1 distinct names for the taxa. We're going to use `dplyr`'s `mutate()` function to extract just the genus:
+The pipe operator works as a real-life pipe, which carries water from one location to another. In programming, the output of the function on the left-hand side of the pipe is taken as the initial argument for the function on the right-hand side of the pipe. It helps by making code easier to write and read. Additionally, it reduces the number of intermediate objects created during data processing, which can make code more memory-efficient and faster.
+Without using pipes you can use the `neotoma2` R package to retrieve a site and then plot it by doing:
```r
-spatial <- spatial %>%
- mutate(variablename = stringr::str_replace(variablename, "[[:punct:]]", " ")) %>%
- mutate(variablename = stringr::word(variablename, 1)) %>%
- group_by(variablename, siteid) %>%
- summarise(tmax7 = max(tmax7), .groups = "keep") %>%
- group_by(variablename) %>%
- filter(n() > 3)
+# Retrieve the site
+plot_site <- neotoma2::get_sites(sitename = "%ø%")
+# Plot the site
+neotoma2::plotLeaflet(object = plot_site)
```
-#### Setting the Background
-
-We want to get the background distribution of July temperatures in the Czech Republic, to plot our taxon distributions against by taking the maximum value of the temperature, however, since all values at the site are the same (because we used a spatial overlay) the maximum is the same as the actual July temperature at the site.
-
+This would create a variable `plot_site` that we will not need any more, but it was necessary so that we could pass it to the `plotLeaflet` function.
-```r
-maxsamp <- spatial %>%
- dplyr::group_by(siteid) %>%
- dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')
-```
+With the pipe (`%>%`) we do not need to create the variable, we can just rewrite our code. Notice that `plotLeaflet()` doesn't need the `object` argument because the response of `get_sites(sitename = "%ø%")` gets passed directly into the function.
-Now we're going to plot it out, using `facet_wrap()` to plot each taxon in its own panel:
+#### 2.2.3.1. Code
```r
-ggplot() +
- geom_density(data = spatial,
- aes(x = round(tmax7 / 10, 0)), col = 2) +
- facet_wrap(~variablename) +
- geom_density(data = maxsamp, aes(x = tmax7 / 10)) +
- xlab("Maximum July Temperature") +
- ylab("Kernel Density")
+# get_sites and pipe. The `object` parameter for plotLeaflet will be the
+# result of the `get_sites()` function.
+get_sites(sitename = "%ø%") %>%
+ plotLeaflet()
```
-
+#### 2.2.3.2. Result
-## Conclusion
-So, we've done a lot in this example. We've (1) searched for sites using site names and geographic parameters, (2) filtered results using temporal and spatial parameters, (3) obtained sample information for the selected datasets and (4) performed basic analysis including the use of climate data from rasters. Hopefully you can use these examples as templates for your own future work, or as a building block for something new and cool!
+```{=html}
+
+
+```
diff --git a/simple_workflow_ES.Rmd b/simple_workflow_ES.Rmd
deleted file mode 100644
index fed1d65..0000000
--- a/simple_workflow_ES.Rmd
+++ /dev/null
@@ -1,522 +0,0 @@
----
-title: "Flujo de Trabajo Simple"
-author: "Simon Goring, Socorro Dominguez Vidaña"
-date: "`r Sys.Date()`"
-output:
- html_document:
- code_folding: show
- fig_caption: yes
- keep_md: yes
- self_contained: yes
- theme: readable
- toc: yes
- toc_float: yes
- css: "text.css"
- pdf_document:
- pandoc_args: "-V geometry:vmargin=1in -V geometry:hmargin=1in"
----
-
-## Introducción
-
-El objetivo de este documento es mostrar como usar el nuevo paquete de R para la base de datos Neotoma, `neotoma2`.
-
-El [librería neotoma2](https://github.com/NeotomaDB/neotoma2) está disponible en GitHub y actualmente la documentación sólo está en inglés. Para instalar en R, se debe utilizar el paquete devtools de la siguiente forma:
-
-```r
-devtools::install_github('NeotomaDB/neotoma2')
-library(neotoma2)
-```
-
-En este tutorial, el usuario aprenderá a:
-
-* Buscar sitios a partir de nombres o parámetros geográficos
-* Filtrar resultados utilizando parametros temporales o espaciales
-* Obtener información de muestras para los grupos de datos seleccionados.
-* Desarrollar análisis que incluyan datos climatológicos de la libreria `rasters`.
-
-### Acceder y manipular información en `neotoma2`
-
-En este libro de trabajo utilizaremos diferentes librerias incluyendo `leaflet`, `sf` y otras. Para cargar las librerías utilizaremos el paquete `pacman`, que nos permite instalar automáticamente cualquier librería que no exista en nuestro sistema.
-
-```{r setup}
-options(warn = -1)
-pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, raster, DT)
-```
-
-Hay que recalcar que R es sensible al orden en que se cargan las librerías. Es por esto que utilizaremos la notación `neotoma2::` para comunicarle a R explícitamente que queremos usar la función del paquete `neotoma2`. Esto es importante porque hay funciones como `filter()` (filtrar) que existen en otros paquetes también como en el paquete `dplyr`. Si obtienes un error que se vea así:
-
-```bash
-Error in UseMethod("filter") :
- no applicable method for 'filter' applied to an object of class "sites"
-```
-
-Esto quiere decir que estamos tratando de ejecutar la función `filter()` con el paquete incorrecto.Por eso, agregar `dplyr::` o `neotoma2::` antes de la función (por ejemplo, `neotoma2::filter()`) es una buena práctica.
-
-### Acceder a la ayuda en Neotoma
-
-Si estás planeando trabajar con Neotoma, únete a nuestro grupo en [Slack](https://join.slack.com/t/neotomadb/shared_invite/zt-cvsv53ep-wjGeCTkq7IhP6eUNA9NxYQ) donde tenemos un canal específicamente para preguntas del paquete de R. También puedes unirte a nuestra lista de correos en nuestro Grupo de Google. [Contáctanos en: ](mailto:neotoma-contact@googlegroups.com) para ser agregado.
-
-## Búsqueda por Sitios
-
-### `get_sites()`
-
-Hay diferentes maneras de encontrar sitios en `neotoma2`. Debémos pensar en los `sitios` como objetos espaciales. Tienen nombre, ubicación y pueden ser encontrados bajo en contexto de unidades geopolíticas. Sin embargo, bajo el contexto de la API y del paquete de R, los sitios en sí mismos no contienen datos sobre la taxonomía, el grupo de datos o las edades. Simplemente es un contenedor al que le podemos agregar más información. Es así que cuando buscamos por sitio, lo hacemos usando los siguientes atributos (en inglés):
-
- * `siteid` - identificador del sitio
- * `sitename` - nombre del sitio
- * `location` - ubicación
- * `altitude` - altitud (máxima y mínima)
- * `gpid` - unidad geopolítica
-
-#### Nombre del sitio: `sitename="%Lait%"` {.tabset}
-
-Hay ocasiones en las que sabremos exactamente el nombre del sitio que estamos buscando ("Lac Mouton"), y habrà ocasiones en las que tendremos una idea aproximada sobre el nombre (por ejemplo, sabemos que el nombre es parecido a "Lait Lake", o "Lac du Lait", pero no estamos seguros de como fue ingresado a la base de datos).
-
-De forma general, utilizamos el formato: `get_sites(sitename="XXXXX")` para buscar un sitio por nombre.
-
-PostgreSQL (y la API) utilizan el signo de porcentaje como comodín. De esta forma, `"%Lait%"` seleccionará ["Lac du Lait"](https://data.neotomadb.org/4180) y en caso de existir, también seleccionaría "Lake Lait" y "El Viejo Pantano **Lait**". La búsqueda tampoco distingue entre mayúsculas y minúsculas, por lo que simplemente podría escribir `"%lait%"`.
-
-##### Código
-
-```{r sitename, eval=FALSE}
-spo_sites <- neotoma2::get_sites(sitename = "%Lait%")
-plotLeaflet(spo_sites)
-```
-
-##### Resultados
-
-```{r sitenamePlot, echo=FALSE}
-spo_sites <- neotoma2::get_sites(sitename = "%Lait%")
-plotLeaflet(spo_sites)
-```
-
-#### Ubicación: `loc=c()` {.tabset}
-
-El paquete `neotoma` utilizaba un cuadro delimitador para buscar por ubicación. El cuadro estaba estructurado como un vector con valores de latitud y longitud: `c(xmin, ymin, xmax, ymax)`. En `neotoma2` se puede utilizar esta misma caja delimitadora o podemos definir objetos espaciales más complejos con el [paquete `sf`](https://r-spatial.github.io/sf/). El paquete `sf` nos permite trabajar con datos ráster y polígonos en R, para seleccionar sitios existentes en objetos espaciales más complejos. El parametro `loc` trabaja con vectores simples, objetos [WKT](https://arthur-e.github.io/Wicket/sandbox-gmaps3.html), objetos [geoJSON](http://geojson.io/#map=2/20.0/0.0) y objectos `sf` en R. **Notar que** el paquete `neotoma2` es un función contenedora API que utiliza un URL ([api.neotomadb.org](https://api.neotomadb.org)). Los URL están limitados a tener 1028 caracteres por lo que el API no acepta llamadas demasiado largas.
-
-Buscar sitios utilizando una ubicación. En el siguiente código hay tres representaciones de la República Checa: geoJSON, WKT y con un cuadro delimitador. También hemos transformado el elemento `cz$geoJSON` a un objeto del paquete `sf`. Podemos utilizar cualquiera de estas cuatro representaciones para trabajar con el paquete `neotoma2`.
-
-```{r boundingBox}
-cz <- list(geoJSON = '{"type": "Polygon",
- "coordinates": [[
- [12.40, 50.14],
- [14.10, 48.64],
- [16.95, 48.66],
- [18.91, 49.61],
- [15.24, 50.99],
- [12.40, 50.14]]]}',
- WKT = 'POLYGON ((12.4 50.14,
- 14.1 48.64,
- 16.95 48.66,
- 18.91 49.61,
- 15.24 50.99,
- 12.4 50.14))',
- bbox = c(12.4, 48.64, 18.91, 50.99))
-
-cz$sf <- geojsonsf::geojson_sf(cz$geoJSON)[[1]]
-
-cz_sites <- neotoma2::get_sites(loc = cz$geoJSON, all_data = TRUE)
-```
-
-Puedes siempre hacer un gráfico de los `sites` obtenidos con `plot()`, pero los datos perderan el contexto geográfico. La función `plotLeaflet()` regresa un mapa de la librería `leaflet()` y permite mayor personalización o agregar datos espaciales adicionales (como nuestro cuadro delimitador, `cz$sf`, que funciona directamente con el paquete `leaflet`):
-
-##### Código
-
-```{r plotL, eval=FALSE}
-neotoma2::plotLeaflet(cz_sites) %>%
- leaflet::addPolygons(map = .,
- data = cz$sf,
- color = "green")
-```
-
-##### Resultados
-
-```{r plotLeaf, echo=FALSE}
-neotoma2::plotLeaflet(cz_sites) %>%
- leaflet::addPolygons(map = .,
- data = cz$sf,
- color = "green")
-```
-
-#### Auxiliares para objetos de tipo Sitios {.tabset}
-
-
-
-Si observamos al [diagrama UML](https://es.wikipedia.org/wiki/Lenguaje_unificado_de_modelado) para los objetos de `neotoma2` podemos ver que hay un conjunto de funciones qeu operan a nivel de `sites` (sitios). Conforme vamos agregando información a los objetos `sites` mediante las funciones `get_datasets()` o `get_downloads()`, podemos utilizar un mayor número de funciones auxiliares. Podemos así, tomar ventaja de funciones como `summary()` para tener un mejor entendimiento de los diferentes tipos de datos que tenemos en este conjunto de sitios. El código a continuación regresa la tabla de resumen. Hacemos después un poco de magia con R para cambiar el formato en que los datos están siendo representados (convirtiéndolo a un objeto `datatable()`), pero la pieza principal es la llamada a la función `summary()`.
-
-##### Código
-
-```{r summary_sites, eval=FALSE}
-neotoma2::summary(cz_sites)
-```
-
-##### Resultados
-
-```{r summarySitesTable, eval=TRUE, echo=FALSE}
-neotoma2::summary(cz_sites) %>%
- DT::datatable(data = ., rownames = FALSE,
- options = list(scrollX = "100%", dom = 't'))
-```
-
-Podemos ver que no hay cronologías asociadas con el objeto `sites`. Esto es porque, por el moemnto, no hemos extraído la información necesaria de los `dataset`. Todo lo que sabemos, tras la llamada `get_sites()` son los tipos de conjuntos de datos con los que contamos.
-
-### Búsqueda de conjuntos de datos (dataset): {.tabset}
-
-Sabemos que las unidades de colecta y los conjuntos de datos están contenidos en los sitios. Similarmente, un objeto de tipo `sites` contienen `collectionunits` que contienen `datasets`. En la tabla anterior podemos ver que algunos de los sitios contienen registros de polen. Dicho esto, solo tenemos la información de `sites`, pero por conveniencia, la API devuelve información adicional sobre los conjuntos de datos lo que nos permite navegar de manera más fácil los registros.
-
-Con un objeto `sites` podemos llamar directamente a la función `get_datasets()`, que nos permitirá extraer metadatos sobre los conjuntos de datos. Podemos utilizar la función `datasets()` en cualqueir momento para obtener más información de los conjuntos de datos que un objeto `sites` pueda contener. Comparemos la información impresa `datasets(cz_sites)` contra una llamada similar utilizando el siguiente código.
-
-#### Código
-
-```{r datasetsFromSites, eval=FALSE}
-cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
-
-datasets(cz_datasets)
-```
-
-#### Resultados
-
-```{r datasetsFromSitesResult, echo=FALSE, message=FALSE}
-cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
-datasets(cz_datasets) %>%
- as.data.frame() %>%
- DT::datatable(data = .,
- options = list(scrollX = "100%", dom = 't'))
-```
-
-### Filtrar Registros {.tabset}
-
-Si decidimos únicamente obtener registros de un sólo tipo de datos, o si requerimos de mayor filtración, debemos considerar filtrar antes de descargar todos los datos y muestras. Para ello, utilizaremos la función `filter()`. Por ejemplo, si requerimos únicamente los registros de polen con sus cronologías conocidas, podemos filtrar de la siguiente forma:
-
-#### Código
-
-```{r downloads, eval=FALSE}
-cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
-
-neotoma2::summary(cz_pollen)
-```
-
-#### Resultados
-
-```{r downloadsCódigo, echo = FALSE}
-cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
-
-neotoma2::summary(cz_pollen) %>% DT::datatable(data = .,
- options = list(scrollX = "100%", dom = 't'))
-```
-
-Podemos ver qeu la tabla de datos se ve diferente y que hay un número menor de sitios.
-
-### Obteniendo las muestras con `sample()`.
-
-Debido a que los datos de las muestras agregan mucha sobrecarga (para la República Checa, los datos de polen, el objeto que incluye toda la información de muestras es 20 veces mayor que el `dataset`), por eso llamamos la función `get_downloads()` después de haber hecho un filtrado preliminar. Después de `get_datasets()`, tenemos información sufciente para filtar basados en ubicación, límites de tiempo y tipo conjunto de datos. Cuando ejecutamos`get_downloads()` podemos hacer un filtrado más fino a nivel de unidad de análisis o nivel de taxón.
-
-El siguiente comando puede tomar algo de tiepo. Por eso, hemos guardado el resultado en un archivo RDS. Puedes intentar correr este comando por tu cuenta o puedes cargar el archivo RDS.
-
-```{r taxa}
-## This line is commented out because we've already run it for you.
-## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)
-cz_dl <- readRDS('data/czDownload.RDS')
-```
-
-Una vez que hemos hecho la descarga, ahora tenemos información de cada sitio asociado a las unidades de colecta, los tipos de conjunto de datos, y a todas las muestras asociadas a estos conjuntos. Para extraer toda las muestras, utilizamos la función `samples`:
-
-```{r allSamples}
-allSamp <- samples(cz_dl)
-```
-
-Una vez hecho esto, obtenemos un `data.frame` esto es una tabla con `r nrow(allSamp)` renglones y `r ncol(allSamp)` columnas. La razón de que esta tabla sea muy larga es porque estamos obteniendo los datos en un formato **largo**. Cada rengón contiene toda la información que se necesita para interpretarse correctamente:
-
-```{r colNamesAllSamp, echo = FALSE}
-colnames(allSamp)
-```
-
-Para algunos tipos de conjunto de datos o análisis específicos, algunas columnas podrán no ser necesarias. Sin embargo, para otros conjuntos de datos pueden ser críticamente importantes. Para permitir que el paquete `neotoma2` sea lo más útil posible para todos los usuarios, hemos incluido todas las columnas posibles.
-
-#### Extracción de taxones {.tabset}
-
-Si quieres saber que taxones existen en los registros, puedes utilizar la función `taxa()` en el objeto `sites`. La función `taxa()` regresa los taxones únicos junto con dos columnas adicionales `sites` y `samples` que indican en cuantos sitios y en cuantas muestras el taxón aparece, esto nos ayuda a comprender mejor que tan común es cada taxón individual.
-
-##### Código
-
-```{r taxa2, eval=FALSE}
-neotomatx <- neotoma2::taxa(cz_dl)
-```
-
-##### Resultados
-
-```{r taxaprint, echo=FALSE, message=FALSE}
-neotomatx <- neotoma2::taxa(cz_dl)
-
-neotoma2::taxa(cz_dl) %>%
- DT::datatable(data = head(neotomatx, n = 20), rownames = FALSE,
- options = list(scrollX = "100%", dom = 't'))
-```
-
-#### {-}
-
-Los valores obtenidos de `taxonid` pueden ser unidos a la columna `taxonid` de la tabla obtenida con `samples()`. Esto nos permite hacer tablas de armonización si así lo decidimos. También puedes notar que el nombre del taxón `taxonname` está en el campo `variablename`. Los recuentos de muestras individuales se reportan en Neotoma como [`variables`](https://open.neotomadb.org/manual/taxonomy-related-tables-1.html#Variables). Una "variable" puede ser una especie, una medida en el laboratorio, un proxy no orgánico, como carbón o medias XRF, e incluye las unidades de medición y su valor.
-
-#### Armonización simple {.tabset}
-
-Supongamos que queremos todas las muestras en las que los taxones *Plantago* han sido reportados y se desea agruparlos bajo un pseudo-taxon llamado *Plantago*. Hay varias formas de hacer esto, ya sae directamente exportando el archivo y editando cada celda individualemnte o creando una tabla externa de armonización (lo que se hacía en el paquete anterior `neotoma`).
-
-Programáticamente, podemos armonizar taxón por taxón aplicando comparaciones y transformaciones. Con la librería `dplyr` podemos utilizar `mutate()` para crear la columna `variablename` para que siempre que detecte (`str_detect()`) que el nombre de una variable `variablename` comienza con `Plantago` (el `.*` representa un comodín para cualquier caracter [`.`], cero o más veces [`*`]), podamos reemplazarlo `replace()` con el texto `"Plantago"`. Hay que observar que se cambiará *Plantago* en el objeto `allSamp`, pero podemos reestaurar la información volviendo a llamar`samples()` regresando las taxonomías a su forma original.
-
-Vamos a filtar los grupos ecológicos para incluir unicamente *UPHE* (altiplanicie/brezo) and *TRSH* (árboles y arbustos). Para más información de los grupos ecológicos consultar el [Manual en Línea Neotoma ](https://open.neotomadb.org/manual) (Disponible sólo en inglés).
-
-```{r simpleTaxonChange, eval=FALSE}
-allSamp <- allSamp %>%
- dplyr::filter(ecologicalgroup %in% c("UPHE", "TRSH")) %>%
- mutate(variablename = replace(variablename,
- stringr::str_detect(variablename, "Plantago.*"),
- "Plantago"))
-```
-
-Originalmente, había `r sum(stringr::str_detect(neotomatx$variablename, 'Plantago.*'))` taxones diferentes identificados con el género *Plantago* (incluyendo *Plantago*, *Plantago major*, y *Plantago alpina-type*). El código anterior reduce a todos a un único grupo taxonómico llamado *Plantago*.
-
-Si quisieramos tener un artefacto con nuestras selecciones, podemos usar una tabla exteerna. Por ejemplo, una tabla de pares (información que queremos cambiar y el nombre con el que queremos reemplazar) puede ser creada y puede incluir expresiones regulares (regex) si así lo deseamos:
-
-| original | reemplazo |
-| -------- | ----------- |
-| Abies.* | Abies |
-| Vaccinium.* | Ericaceae |
-| Typha.* | Aquatic |
-| Nymphaea | Aquatic |
-| ... | ... |
-
-Podemos obtener los nombres originales directamente de la función `taxa()`, aplicada a un objeto de tipo `sites` y exportarla con `write.csv()`.
-
-##### Código
-
-```{r countbySitesSamples, eval=FALSE}
-taxaplots <- taxa(cz_dl)
-# Save the taxon list to file so we can edit it subsequently.
-readr::write_csv(taxaplots, "data/mytaxontable.csv")
-```
-
-##### Resultados
-
-```{r PlotTaxonCounts, echo=FALSE, fig.cap="**Figure**. A plot of the number of sites a taxon appears in, against the number of samples a taxon appears in.", message=FALSE}
-taxaplots <- taxa(cz_dl)
-ggplot(data = taxaplots, aes(x = sites, y = samples)) +
- geom_point() +
- stat_smooth(method = 'glm',
- method.args = list(family = 'poisson')) +
- xlab("Number of Sites") +
- ylab("Number of Samples") +
- theme_bw()
-```
-
-#### {-}
-
-La gráfica es simplemente ilustrativa pero podemos verificar las relaciones existentes tal cual hubieramos esperado.
-
-Puedes después exportar una de estas tablas y agregar una columna con los recuentos; también se puede agregar información contextual extra tal como el grupo ecológico o el grupo de taxones para ayudarte. Una vez qeu la tabla de transición ha sido limpiada, puedes usarla y aplicar las transformaciones:
-
-```{r translationTable, message=FALSE, eval=FALSE}
-translation <- readr::read_csv("data/taxontable.csv")
-```
-
-```{r translationDisplay, message=FALSE, echo = FALSE}
-translation <- readr::read_csv("data/taxontable.csv")
-DT::datatable(translation, rownames = FALSE,
- options = list(scrollX = "100%", dom = 't'))
-
-```
-
-Puedes observar qeu hemos cambiado algunos de los nombres de los taxones en la tabla (no hay que ver más allá, esto es simplemente un ejemplo). Para reemplazar los nombres en la salida de `samples()`, tenemos que unir las dos tablas usando `inner_join()` (esto quiere decir que `variablename` debe aparecer en ambas tablas para que el resultado sea incluido), u luego seleccionaremos únicamente los elementos de la tabla de muestras que son relevantes para nuestro análisis:
-
-```{r joinTranslation, eval = FALSE}
-allSamp <- samples(cz_dl)
-
-allSamp <- allSamp %>%
- inner_join(translation, by = c("variablename" = "variablename")) %>%
- dplyr::select(!c("variablename", "sites", "samples")) %>%
- group_by(siteid, sitename, replacement,
- sampleid, units, age,
- agetype, depth, datasetid,
- long, lat) %>%
- summarise(value = sum(value), .groups='keep')
-```
-
-```{r harmonizationTableOut, message = FALSE, echo=FALSE}
-DT::datatable(head(allSamp, n = 50), rownames = FALSE,
- options = list(scrollX = "100%", dom = 't'))
-```
-
-## Análisis Simples
-
-### Trazado Estratigráfico
-
-Podemos utilizar paquetes como `rioja` para hacer trazados estratigráficos para un único registro. Pero primero tenemos que hacer un manejo de datos diferente. A pesar de que podríamos hacer armonización nuevamente, vamos a tomar los 10 taxones más comúnes en un sitio dado los trazaremos en un diagrama estratigráfico.
-
-Utilizaremos la función `arrange()` para ordenar confrome al número de veces que un taxón aparece en un núcleo. De esta forma, podemos tomar las muestras y seleccionar los taxones que aparecen en las diez primeras filas del marco de datos `plottingTaxa`.
-
-```{r stratiplot, message = FALSE}
-# Get a particular site, select only taxa identified from pollen (and only trees/shrubs)
-plottingSite <- cz_dl[[1]]
-
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(samples)) %>%
- head(n = 10)
-
-# Clean up. Select only pollen measured using NISP.
-# We repeat the filters for pollen & ecological group on the samples
-shortSamples <- samples(plottingSite) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- filter(units == "NISP")
-
-# Transform to proportion values.
-onesite <- shortSamples %>%
- group_by(age) %>%
- mutate(pollencount = sum(value, na.rm = TRUE)) %>%
- group_by(variablename) %>%
- mutate(prop = value / pollencount) %>%
- arrange(desc(age))
-
-# Spread the data to a "wide" table, with taxa as column headings.
-widetable <- onesite %>%
- dplyr::select(age, variablename, prop) %>%
- mutate(prop = as.numeric(prop))
-
-counts <- tidyr::pivot_wider(widetable,
- id_cols = age,
- names_from = variablename,
- values_from = prop,
- values_fill = 0)
-```
-
-Aparentemente, esto es una llamada compleja de comandos. Sin embargo, el código es bastante sencillo y brinda un control significativo sobre los taxones, unidades y otros elementos de tus datos antes de transformarlos en una matriz ancha (`depth` x `taxon`) que muchas herramientas estadísticas como los paquetes `vegan` o `rioja` usan.
-
-Para crear gráficas, podemos usar `strat.plot()` del paquete `rioja`, ordenar los taxones usando puntajes promedio ponderados (`wa.order`). También se ha agregado un gráfico CONISS al borde del gráfico, para mostrar cómo funciona el nuevo marco de datos amplio con funciones métricas de distancia.
-
-```{r plotStrigraph, message=FALSE, warning=FALSE}
-clust <- rioja::chclust(dist(sqrt(counts)),
- method = "coniss")
-
-plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,
- title = cz_dl[[1]]$sitename,
- ylabel = "Calibrated Years BP",
- xlabel = "Pollen (%)",
- y.rev = TRUE,
- clust = clust,
- wa.order = "topleft", scale.percent = TRUE)
-
-rioja::addClustZone(plot, clust, 4, col = "red")
-```
-
-### Cambio en el tiempo entre sitios
-
-Ahora tenemos información de sitios en toda la República Checa, con muestras y nombres de taxones. Para observar las distribuciones de taxones a lo largo del tiempo, su presencia/ausencia, seleccionaremos los 20 taxones principales (según la cantidad de veces que aparecen en los registros) y observaré sus distribuciones en el tiempo
-
-```{r summarizeByTime, message = FALSE}
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(sites)) %>%
- head(n = 20)
-
-taxabyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by(variablename, "age" = round(age * 2, -3) / 2) %>%
- summarise(n = length(unique(siteid)), .groups = 'keep')
-
-samplesbyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by("age" = round(age * 2, -3) / 2) %>%
- summarise(samples = length(unique(siteid)), .groups = 'keep')
-
-groupbyage <- taxabyage %>%
- inner_join(samplesbyage, by = "age") %>%
- mutate(proportion = n / samples)
-
-ggplot(groupbyage, aes(x = age, y = proportion)) +
- geom_point() +
- geom_smooth(method = 'gam',
- method.args = list(family = 'binomial')) +
- facet_wrap(~variablename) +
- coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +
- scale_x_reverse(breaks = c(10000, 20000)) +
- xlab("Proportion of Sites with Taxon") +
- theme_bw()
-```
-
-Podemos ver patrones de cambio claros, y los alizados se crean con modelos aditivos generalizados (GAM) en R, por lo que podemos tener control sobre el modelado real usando los paquetes `gam` o `mgcv`. Dependiendo de cómo dividamos los datos, también podemos observar los cambios de altitud, latitud o longitud para comprender mejor cómo cambiaron las distribuciones y abundancias de especies con el tiempo en esta región.
-
-### Distribuciones en el clima con ráster (Máximas temperaturas de julio)
-
-A menudo nos interesa la interacción entre los taxones y el clima, asumiendo que el tiempo es un indicador de los entornos cambiantes. El desarrollo de conjuntos de datos globales a gran escala para el clima ha hecho que sea relativamente sencillo acceder a los datos de la nube en formato raster. R proporciona una serie de herramientas (en los paquetes `sf` y `raster`) para administrar datos espaciales y brindar soporte para el análisis espacial de datos.
-
-El primer paso es tomar nuestros datos de muestra y convertirlos en un objeto espacial usando el paquete `sf` en R:
-
-```{r makeSamplesSpatial}
-modern <- samples(cz_dl) %>%
- filter(age < 50) %>%
- filter(ecologicalgroup == "TRSH" & elementtype == "pollen" & units == "NISP")
-
-spatial <- sf::st_as_sf(modern,
- coords = c("long", "lat"),
- crs = "+proj=longlat +datum=WGS84")
-```
-
-Los datos son los mismos, el paquete `sf` crea un objeto llamado `spatial` que es un marco de datos `data.frame`con toda la información extraída de `samples()`, y una columna (`geometry`) que contiene los datos espaciales.
-
-Podemos utilizar la funcion [`getData()`](https://www.rdocumentation.org/packages/raster/versions/3.5-15/topics/getData) del paquete `raster` para obtener datos de WorldClim. Las operaciones siguientes pueden ser aplicadas a cualquier tipo de datos raster, asumiendo que haya sido cargada en R como un objeto de tipo `raster`.
-
-A continuación extraeremos datos raster, a una resolucion de 10 minutos para la variable $T_{max}$, temperatura máxima mensual. El raster en sí mismo, tiene 12 capas, una para cada mes. Con la función `extract()` obtenemos la información sólamente para el séptimo mes, julio.
-
-```{r worldTmax}
-worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)
-spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]
-```
-
-Esto agrega una columna al marco de datos o `data.frame` `spatial`, que contiene la temperatura máxima de julio para cada taxón en cada sitio. (todos los taxónes en un sitio compartirán el mismo valor). Hemos filtrado anteriormente para obtener solo los taxones UPHE, pero eso aún nos deja con `r length(length(unique(spatial$variablename)))` distintos nombres para los taxones. Con la función de `dplyr` `mutate()` vamos a extraer únicamente el género:
-
-```{r toGenus}
-spatial <- spatial %>%
- mutate(variablename = stringr::str_replace(variablename, "[[:punct:]]", " ")) %>%
- mutate(variablename = stringr::word(variablename, 1)) %>%
- group_by(variablename, siteid) %>%
- summarise(tmax7 = max(tmax7), .groups = "keep") %>%
- group_by(variablename) %>%
- filter(n() > 3)
-```
-
-#### Ajustando el ambiente
-
-queremos obtener la distribución de fondo de las temperaturas de julio en la República Checa, para graficar las distribuciones de los taxones contra el valor máximo de temperatura. Sin embargo, como todos los valores en el sitio son el mismo (porque utilizamos una superposición espacial), el máximo es el mismo que la temperatura real de julio en el sitio.
-
-```{r topten}
-maxsamp <- spatial %>%
- dplyr::group_by(siteid) %>%
- dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')
-```
-
-Ahora, para graficarlo, utilizaremos `facet_wrap()` para graficar cada taxón en su propio panel:
-
-```{r ggplot}
-ggplot() +
- geom_density(data = spatial,
- aes(x = round(tmax7 / 10, 0)), col = 2) +
- facet_wrap(~variablename) +
- geom_density(data = maxsamp, aes(x = tmax7 / 10)) +
- xlab("Maximum July Temperature") +
- ylab("Kernel Density")
-```
-
-## Conclusión
-
-Hemos hecho mucho en este ejemplo.
-1) buscamos sitios utilizando nombres y parámetros geográficos.
-2) filtramos los resultados utilizando parametros temporales y espaciales
-3) obtuvimos información para conjuntos de datos seleccionados y
-4) realizamos análisis básicos con información ráster para clima
-
-Esperamos estos ejemplos puedan ser utilizados como plantillas para trabajo futuro o para hacer algo nuevo y divertido!
\ No newline at end of file
diff --git a/simple_workflow_ES.html b/simple_workflow_ES.html
deleted file mode 100644
index 74eff58..0000000
--- a/simple_workflow_ES.html
+++ /dev/null
@@ -1,9128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Flujo de Trabajo Simple
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Flujo de Trabajo Simple
-Simon Goring, Socorro Dominguez Vidaña
-2022-11-09
-
-
-
-
-
-Introducción
-El objetivo de este documento es mostrar como usar el nuevo paquete
-de R para la base de datos Neotoma, neotoma2.
-El librería
-neotoma2 está disponible en GitHub y actualmente la documentación
-sólo está en inglés. Para instalar en R, se debe utilizar el paquete
-devtools de la siguiente forma:
-devtools::install_github('NeotomaDB/neotoma2')
-library(neotoma2)
-En este tutorial, el usuario aprenderá a:
-
-- Buscar sitios a partir de nombres o parámetros geográficos
-- Filtrar resultados utilizando parametros temporales o
-espaciales
-- Obtener información de muestras para los grupos de datos
-seleccionados.
-- Desarrollar análisis que incluyan datos climatológicos de la
-libreria
rasters.
-
-
-Acceder y manipular información en neotoma2
-En este libro de trabajo utilizaremos diferentes librerias incluyendo
-leaflet, sf y otras. Para cargar las librerías
-utilizaremos el paquete pacman, que nos permite instalar
-automáticamente cualquier librería que no exista en nuestro sistema.
-options(warn = -1)
-pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, raster, DT)
-Hay que recalcar que R es sensible al orden en que se cargan las
-librerías. Es por esto que utilizaremos la notación
-neotoma2:: para comunicarle a R explícitamente que queremos
-usar la función del paquete neotoma2. Esto es importante
-porque hay funciones como filter() (filtrar) que existen en
-otros paquetes también como en el paquete dplyr. Si
-obtienes un error que se vea así:
-Error in UseMethod("filter") :
- no applicable method for 'filter' applied to an object of class "sites"
-Esto quiere decir que estamos tratando de ejecutar la función
-filter() con el paquete incorrecto.Por eso, agregar
-dplyr:: o neotoma2:: antes de la función (por
-ejemplo, neotoma2::filter()) es una buena práctica.
-
-
-Acceder a la ayuda en Neotoma
-Si estás planeando trabajar con Neotoma, únete a nuestro grupo en Slack
-donde tenemos un canal específicamente para preguntas del paquete de R.
-También puedes unirte a nuestra lista de correos en nuestro Grupo de
-Google. Contáctanos
-en: para ser agregado.
-
-
-
-Búsqueda por Sitios
-
-get_sites()
-Hay diferentes maneras de encontrar sitios en neotoma2.
-Debémos pensar en los sitios como objetos espaciales.
-Tienen nombre, ubicación y pueden ser encontrados bajo en contexto de
-unidades geopolíticas. Sin embargo, bajo el contexto de la API y del
-paquete de R, los sitios en sí mismos no contienen datos sobre la
-taxonomía, el grupo de datos o las edades. Simplemente es un contenedor
-al que le podemos agregar más información. Es así que cuando buscamos
-por sitio, lo hacemos usando los siguientes atributos (en inglés):
-
-siteid - identificador del sitio
-sitename - nombre del sitio
-location - ubicación
-altitude - altitud (máxima y mínima)
-gpid - unidad geopolítica
-
-
-Nombre del sitio: sitename="%Lait%"
-Hay ocasiones en las que sabremos exactamente el nombre del sitio que
-estamos buscando (“Lac Mouton”), y habrà ocasiones en las que tendremos
-una idea aproximada sobre el nombre (por ejemplo, sabemos que el nombre
-es parecido a “Lait Lake”, o “Lac du Lait”, pero no estamos seguros de
-como fue ingresado a la base de datos).
-De forma general, utilizamos el formato:
-get_sites(sitename="XXXXX") para buscar un sitio por
-nombre.
-PostgreSQL (y la API) utilizan el signo de porcentaje como comodín.
-De esta forma, "%Lait%" seleccionará “Lac du Lait” y en caso de
-existir, también seleccionaría “Lake Lait” y “El Viejo Pantano
-Lait”. La búsqueda tampoco distingue entre mayúsculas y
-minúsculas, por lo que simplemente podría escribir
-"%lait%".
-
-Código
-spo_sites <- neotoma2::get_sites(sitename = "%Lait%")
-plotLeaflet(spo_sites)
-
-
-Resultados
-
-
-
-
-
-Ubicación: loc=c()
-El paquete neotoma utilizaba un cuadro delimitador para
-buscar por ubicación. El cuadro estaba estructurado como un vector con
-valores de latitud y longitud: c(xmin, ymin, xmax, ymax).
-En neotoma2 se puede utilizar esta misma caja delimitadora
-o podemos definir objetos espaciales más complejos con el paquete sf. El
-paquete sf nos permite trabajar con datos ráster y
-polígonos en R, para seleccionar sitios existentes en objetos espaciales
-más complejos. El parametro loc trabaja con vectores
-simples, objetos WKT,
-objetos geoJSON y
-objectos sf en R. Notar que el paquete
-neotoma2 es un función contenedora API que utiliza un URL
-(api.neotomadb.org). Los URL
-están limitados a tener 1028 caracteres por lo que el API no acepta
-llamadas demasiado largas.
-Buscar sitios utilizando una ubicación. En el siguiente código hay
-tres representaciones de la República Checa: geoJSON, WKT y con un
-cuadro delimitador. También hemos transformado el elemento
-cz$geoJSON a un objeto del paquete sf. Podemos
-utilizar cualquiera de estas cuatro representaciones para trabajar con
-el paquete neotoma2.
-cz <- list(geoJSON = '{"type": "Polygon",
- "coordinates": [[
- [12.40, 50.14],
- [14.10, 48.64],
- [16.95, 48.66],
- [18.91, 49.61],
- [15.24, 50.99],
- [12.40, 50.14]]]}',
- WKT = 'POLYGON ((12.4 50.14,
- 14.1 48.64,
- 16.95 48.66,
- 18.91 49.61,
- 15.24 50.99,
- 12.4 50.14))',
- bbox = c(12.4, 48.64, 18.91, 50.99))
-
-cz$sf <- geojsonsf::geojson_sf(cz$geoJSON)[[1]]
-
-cz_sites <- neotoma2::get_sites(loc = cz$geoJSON, all_data = TRUE)
-Puedes siempre hacer un gráfico de los sites obtenidos
-con plot(), pero los datos perderan el contexto geográfico.
-La función plotLeaflet() regresa un mapa de la librería
-leaflet() y permite mayor personalización o agregar datos
-espaciales adicionales (como nuestro cuadro delimitador,
-cz$sf, que funciona directamente con el paquete
-leaflet):
-
-Código
-neotoma2::plotLeaflet(cz_sites) %>%
- leaflet::addPolygons(map = .,
- data = cz$sf,
- color = "green")
-
-
-Resultados
-
-
-
-
-
-Auxiliares para objetos de tipo Sitios
-
-
-Neotoma R diagrama UML.
-
-Si observamos al diagrama
-UML para los objetos de neotoma2 podemos ver que hay un
-conjunto de funciones qeu operan a nivel de sites (sitios).
-Conforme vamos agregando información a los objetos sites
-mediante las funciones get_datasets() o
-get_downloads(), podemos utilizar un mayor número de
-funciones auxiliares. Podemos así, tomar ventaja de funciones como
-summary() para tener un mejor entendimiento de los
-diferentes tipos de datos que tenemos en este conjunto de sitios. El
-código a continuación regresa la tabla de resumen. Hacemos después un
-poco de magia con R para cambiar el formato en que los datos están
-siendo representados (convirtiéndolo a un objeto
-datatable()), pero la pieza principal es la llamada a la
-función summary().
-
-Código
-neotoma2::summary(cz_sites)
-
-
-Resultados
-
-
-Podemos ver que no hay cronologías asociadas con el objeto
-sites. Esto es porque, por el moemnto, no hemos extraído la
-información necesaria de los dataset. Todo lo que sabemos,
-tras la llamada get_sites() son los tipos de conjuntos de
-datos con los que contamos.
-
-
-
-
-Búsqueda de conjuntos de datos (dataset):
-Sabemos que las unidades de colecta y los conjuntos de datos están
-contenidos en los sitios. Similarmente, un objeto de tipo
-sites contienen collectionunits que contienen
-datasets. En la tabla anterior podemos ver que algunos de
-los sitios contienen registros de polen. Dicho esto, solo tenemos la
-información de sites, pero por conveniencia, la API
-devuelve información adicional sobre los conjuntos de datos lo que nos
-permite navegar de manera más fácil los registros.
-Con un objeto sites podemos llamar directamente a la
-función get_datasets(), que nos permitirá extraer metadatos
-sobre los conjuntos de datos. Podemos utilizar la función
-datasets() en cualqueir momento para obtener más
-información de los conjuntos de datos que un objeto sites
-pueda contener. Comparemos la información impresa
-datasets(cz_sites) contra una llamada similar utilizando el
-siguiente código.
-
-Código
-cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
-
-datasets(cz_datasets)
-
-
-Resultados
-
-
-
-
-
-Filtrar Registros
-Si decidimos únicamente obtener registros de un sólo tipo de datos, o
-si requerimos de mayor filtración, debemos considerar filtrar antes de
-descargar todos los datos y muestras. Para ello, utilizaremos la función
-filter(). Por ejemplo, si requerimos únicamente los
-registros de polen con sus cronologías conocidas, podemos filtrar de la
-siguiente forma:
-
-Código
-cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
-
-neotoma2::summary(cz_pollen)
-
-
-Resultados
-
-
-Podemos ver qeu la tabla de datos se ve diferente y que hay un número
-menor de sitios.
-
-
-
-Obteniendo las muestras con sample().
-Debido a que los datos de las muestras agregan mucha sobrecarga (para
-la República Checa, los datos de polen, el objeto que incluye toda la
-información de muestras es 20 veces mayor que el dataset),
-por eso llamamos la función get_downloads() después de
-haber hecho un filtrado preliminar. Después de
-get_datasets(), tenemos información sufciente para filtar
-basados en ubicación, límites de tiempo y tipo conjunto de datos. Cuando
-ejecutamosget_downloads() podemos hacer un filtrado más
-fino a nivel de unidad de análisis o nivel de taxón.
-El siguiente comando puede tomar algo de tiepo. Por eso, hemos
-guardado el resultado en un archivo RDS. Puedes intentar correr este
-comando por tu cuenta o puedes cargar el archivo RDS.
-## This line is commented out because we've already run it for you.
-## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)
-cz_dl <- readRDS('data/czDownload.RDS')
-Una vez que hemos hecho la descarga, ahora tenemos información de
-cada sitio asociado a las unidades de colecta, los tipos de conjunto de
-datos, y a todas las muestras asociadas a estos conjuntos. Para extraer
-toda las muestras, utilizamos la función samples:
-allSamp <- samples(cz_dl)
-Una vez hecho esto, obtenemos un data.frame esto es una
-tabla con 130889 renglones y 37 columnas. La razón de que esta tabla sea
-muy larga es porque estamos obteniendo los datos en un formato
-largo. Cada rengón contiene toda la información que se
-necesita para interpretarse correctamente:
-## [1] "age" "agetype" "ageolder" "ageyounger"
-## [5] "chronologyid" "chronologyname" "units" "value"
-## [9] "context" "element" "taxonid" "symmetry"
-## [13] "taxongroup" "elementtype" "variablename" "ecologicalgroup"
-## [17] "analysisunitid" "sampleanalyst" "sampleid" "depth"
-## [21] "thickness" "samplename" "datasetid" "siteid"
-## [25] "sitename" "lat" "long" "area"
-## [29] "sitenotes" "description" "elev" "collunitid"
-## [33] "database" "datasettype" "age_range_old" "age_range_young"
-## [37] "datasetnotes"
-Para algunos tipos de conjunto de datos o análisis específicos,
-algunas columnas podrán no ser necesarias. Sin embargo, para otros
-conjuntos de datos pueden ser críticamente importantes. Para permitir
-que el paquete neotoma2 sea lo más útil posible para todos
-los usuarios, hemos incluido todas las columnas posibles.
-
-Extracción de taxones
-Si quieres saber que taxones existen en los registros, puedes
-utilizar la función taxa() en el objeto sites.
-La función taxa() regresa los taxones únicos junto con dos
-columnas adicionales sites y samples que
-indican en cuantos sitios y en cuantas muestras el taxón aparece, esto
-nos ayuda a comprender mejor que tan común es cada taxón individual.
-
-Código
-neotomatx <- neotoma2::taxa(cz_dl)
-
-
-Resultados
-
-
-
-
-
-
-Los valores obtenidos de taxonid pueden ser unidos a la
-columna taxonid de la tabla obtenida con
-samples(). Esto nos permite hacer tablas de armonización si
-así lo decidimos. También puedes notar que el nombre del taxón
-taxonname está en el campo variablename. Los
-recuentos de muestras individuales se reportan en Neotoma como variables.
-Una “variable” puede ser una especie, una medida en el laboratorio, un
-proxy no orgánico, como carbón o medias XRF, e incluye las unidades de
-medición y su valor.
-
-
-Armonización simple
-Supongamos que queremos todas las muestras en las que los taxones
-Plantago han sido reportados y se desea agruparlos bajo un
-pseudo-taxon llamado Plantago. Hay varias formas de hacer esto,
-ya sae directamente exportando el archivo y editando cada celda
-individualemnte o creando una tabla externa de armonización (lo que se
-hacía en el paquete anterior neotoma).
-Programáticamente, podemos armonizar taxón por taxón aplicando
-comparaciones y transformaciones. Con la librería dplyr
-podemos utilizar mutate() para crear la columna
-variablename para que siempre que detecte
-(str_detect()) que el nombre de una variable
-variablename comienza con Plantago (el
-.* representa un comodín para cualquier caracter
-[.], cero o más veces [*]), podamos
-reemplazarlo replace() con el texto
-"Plantago". Hay que observar que se cambiará
-Plantago en el objeto allSamp, pero podemos
-reestaurar la información volviendo a llamarsamples()
-regresando las taxonomías a su forma original.
-Vamos a filtar los grupos ecológicos para incluir unicamente
-UPHE (altiplanicie/brezo) and TRSH (árboles y
-arbustos). Para más información de los grupos ecológicos consultar el Manual en Línea Neotoma
-(Disponible sólo en inglés).
-allSamp <- allSamp %>%
- dplyr::filter(ecologicalgroup %in% c("UPHE", "TRSH")) %>%
- mutate(variablename = replace(variablename,
- stringr::str_detect(variablename, "Plantago.*"),
- "Plantago"))
-Originalmente, había 15 taxones diferentes identificados con el
-género Plantago (incluyendo Plantago, Plantago
-major, y Plantago alpina-type). El código anterior reduce
-a todos a un único grupo taxonómico llamado Plantago.
-Si quisieramos tener un artefacto con nuestras selecciones, podemos
-usar una tabla exteerna. Por ejemplo, una tabla de pares (información
-que queremos cambiar y el nombre con el que queremos reemplazar) puede
-ser creada y puede incluir expresiones regulares (regex) si así lo
-deseamos:
-
-
-
-original
-reemplazo
-
-
-
-
-Abies.*
-Abies
-
-
-Vaccinium.*
-Ericaceae
-
-
-Typha.*
-Aquatic
-
-
-Nymphaea
-Aquatic
-
-
-…
-…
-
-
-
-Podemos obtener los nombres originales directamente de la función
-taxa(), aplicada a un objeto de tipo sites y
-exportarla con write.csv().
-
-Código
-taxaplots <- taxa(cz_dl)
-# Save the taxon list to file so we can edit it subsequently.
-readr::write_csv(taxaplots, "data/mytaxontable.csv")
-
-
-Resultados
-
-
-Figure. A plot of the number of
-sites a taxon appears in, against the number of samples a taxon appears
-in.
-
-
-
-
-
-La gráfica es simplemente ilustrativa pero podemos verificar las
-relaciones existentes tal cual hubieramos esperado.
-Puedes después exportar una de estas tablas y agregar una columna con
-los recuentos; también se puede agregar información contextual extra tal
-como el grupo ecológico o el grupo de taxones para ayudarte. Una vez qeu
-la tabla de transición ha sido limpiada, puedes usarla y aplicar las
-transformaciones:
-translation <- readr::read_csv("data/taxontable.csv")
-
-
-Puedes observar qeu hemos cambiado algunos de los nombres de los
-taxones en la tabla (no hay que ver más allá, esto es simplemente un
-ejemplo). Para reemplazar los nombres en la salida de
-samples(), tenemos que unir las dos tablas usando
-inner_join() (esto quiere decir que
-variablename debe aparecer en ambas tablas para que el
-resultado sea incluido), u luego seleccionaremos únicamente los
-elementos de la tabla de muestras que son relevantes para nuestro
-análisis:
-allSamp <- samples(cz_dl)
-
-allSamp <- allSamp %>%
- inner_join(translation, by = c("variablename" = "variablename")) %>%
- dplyr::select(!c("variablename", "sites", "samples")) %>%
- group_by(siteid, sitename, replacement,
- sampleid, units, age,
- agetype, depth, datasetid,
- long, lat) %>%
- summarise(value = sum(value), .groups='keep')
-
-
-
-
-
-
-Análisis Simples
-
-Trazado Estratigráfico
-Podemos utilizar paquetes como rioja para hacer trazados
-estratigráficos para un único registro. Pero primero tenemos que hacer
-un manejo de datos diferente. A pesar de que podríamos hacer
-armonización nuevamente, vamos a tomar los 10 taxones más comúnes en un
-sitio dado los trazaremos en un diagrama estratigráfico.
-Utilizaremos la función arrange() para ordenar confrome
-al número de veces que un taxón aparece en un núcleo. De esta forma,
-podemos tomar las muestras y seleccionar los taxones que aparecen en las
-diez primeras filas del marco de datos plottingTaxa.
-# Get a particular site, select only taxa identified from pollen (and only trees/shrubs)
-plottingSite <- cz_dl[[1]]
-
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(samples)) %>%
- head(n = 10)
-
-# Clean up. Select only pollen measured using NISP.
-# We repeat the filters for pollen & ecological group on the samples
-shortSamples <- samples(plottingSite) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- filter(units == "NISP")
-
-# Transform to proportion values.
-onesite <- shortSamples %>%
- group_by(age) %>%
- mutate(pollencount = sum(value, na.rm = TRUE)) %>%
- group_by(variablename) %>%
- mutate(prop = value / pollencount) %>%
- arrange(desc(age))
-
-# Spread the data to a "wide" table, with taxa as column headings.
-widetable <- onesite %>%
- dplyr::select(age, variablename, prop) %>%
- mutate(prop = as.numeric(prop))
-
-counts <- tidyr::pivot_wider(widetable,
- id_cols = age,
- names_from = variablename,
- values_from = prop,
- values_fill = 0)
-Aparentemente, esto es una llamada compleja de comandos. Sin embargo,
-el código es bastante sencillo y brinda un control significativo sobre
-los taxones, unidades y otros elementos de tus datos antes de
-transformarlos en una matriz ancha (depth x
-taxon) que muchas herramientas estadísticas como los
-paquetes vegan o rioja usan.
-Para crear gráficas, podemos usar strat.plot() del
-paquete rioja, ordenar los taxones usando puntajes promedio
-ponderados (wa.order). También se ha agregado un gráfico
-CONISS al borde del gráfico, para mostrar cómo funciona el nuevo marco
-de datos amplio con funciones métricas de distancia.
-clust <- rioja::chclust(dist(sqrt(counts)),
- method = "coniss")
-
-plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,
- title = cz_dl[[1]]$sitename,
- ylabel = "Calibrated Years BP",
- xlabel = "Pollen (%)",
- y.rev = TRUE,
- clust = clust,
- wa.order = "topleft", scale.percent = TRUE)
-
-rioja::addClustZone(plot, clust, 4, col = "red")
-
-
-
-Cambio en el tiempo entre sitios
-Ahora tenemos información de sitios en toda la República Checa, con
-muestras y nombres de taxones. Para observar las distribuciones de
-taxones a lo largo del tiempo, su presencia/ausencia, seleccionaremos
-los 20 taxones principales (según la cantidad de veces que aparecen en
-los registros) y observaré sus distribuciones en el tiempo
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(sites)) %>%
- head(n = 20)
-
-taxabyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by(variablename, "age" = round(age * 2, -3) / 2) %>%
- summarise(n = length(unique(siteid)), .groups = 'keep')
-
-samplesbyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by("age" = round(age * 2, -3) / 2) %>%
- summarise(samples = length(unique(siteid)), .groups = 'keep')
-
-groupbyage <- taxabyage %>%
- inner_join(samplesbyage, by = "age") %>%
- mutate(proportion = n / samples)
-
-ggplot(groupbyage, aes(x = age, y = proportion)) +
- geom_point() +
- geom_smooth(method = 'gam',
- method.args = list(family = 'binomial')) +
- facet_wrap(~variablename) +
- coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +
- scale_x_reverse(breaks = c(10000, 20000)) +
- xlab("Proportion of Sites with Taxon") +
- theme_bw()
-
-Podemos ver patrones de cambio claros, y los alizados se crean con
-modelos aditivos generalizados (GAM) en R, por lo que podemos tener
-control sobre el modelado real usando los paquetes gam o
-mgcv. Dependiendo de cómo dividamos los datos, también
-podemos observar los cambios de altitud, latitud o longitud para
-comprender mejor cómo cambiaron las distribuciones y abundancias de
-especies con el tiempo en esta región.
-
-
-Distribuciones en el clima con ráster (Máximas temperaturas de
-julio)
-A menudo nos interesa la interacción entre los taxones y el clima,
-asumiendo que el tiempo es un indicador de los entornos cambiantes. El
-desarrollo de conjuntos de datos globales a gran escala para el clima ha
-hecho que sea relativamente sencillo acceder a los datos de la nube en
-formato raster. R proporciona una serie de herramientas (en los paquetes
-sf y raster) para administrar datos espaciales
-y brindar soporte para el análisis espacial de datos.
-El primer paso es tomar nuestros datos de muestra y convertirlos en
-un objeto espacial usando el paquete sf en R:
-modern <- samples(cz_dl) %>%
- filter(age < 50) %>%
- filter(ecologicalgroup == "TRSH" & elementtype == "pollen" & units == "NISP")
-
-spatial <- sf::st_as_sf(modern,
- coords = c("long", "lat"),
- crs = "+proj=longlat +datum=WGS84")
-Los datos son los mismos, el paquete sf crea un objeto
-llamado spatial que es un marco de datos
-data.framecon toda la información extraída de
-samples(), y una columna (geometry) que
-contiene los datos espaciales.
-Podemos utilizar la funcion getData()
-del paquete raster para obtener datos de WorldClim. Las
-operaciones siguientes pueden ser aplicadas a cualquier tipo de datos
-raster, asumiendo que haya sido cargada en R como un objeto de tipo
-raster.
-A continuación extraeremos datos raster, a una resolucion de 10
-minutos para la variable \(T_{max}\),
-temperatura máxima mensual. El raster en sí mismo, tiene 12 capas, una
-para cada mes. Con la función extract() obtenemos la
-información sólamente para el séptimo mes, julio.
-worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)
-spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]
-Esto agrega una columna al marco de datos o data.frame
-spatial, que contiene la temperatura máxima de julio para
-cada taxón en cada sitio. (todos los taxónes en un sitio compartirán el
-mismo valor). Hemos filtrado anteriormente para obtener solo los taxones
-UPHE, pero eso aún nos deja con 1 distintos nombres para los taxones.
-Con la función de dplyr mutate() vamos a
-extraer únicamente el género:
-spatial <- spatial %>%
- mutate(variablename = stringr::str_replace(variablename, "[[:punct:]]", " ")) %>%
- mutate(variablename = stringr::word(variablename, 1)) %>%
- group_by(variablename, siteid) %>%
- summarise(tmax7 = max(tmax7), .groups = "keep") %>%
- group_by(variablename) %>%
- filter(n() > 3)
-
-Ajustando el ambiente
-queremos obtener la distribución de fondo de las temperaturas de
-julio en la República Checa, para graficar las distribuciones de los
-taxones contra el valor máximo de temperatura. Sin embargo, como todos
-los valores en el sitio son el mismo (porque utilizamos una
-superposición espacial), el máximo es el mismo que la temperatura real
-de julio en el sitio.
-maxsamp <- spatial %>%
- dplyr::group_by(siteid) %>%
- dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')
-Ahora, para graficarlo, utilizaremos facet_wrap() para
-graficar cada taxón en su propio panel:
-ggplot() +
- geom_density(data = spatial,
- aes(x = round(tmax7 / 10, 0)), col = 2) +
- facet_wrap(~variablename) +
- geom_density(data = maxsamp, aes(x = tmax7 / 10)) +
- xlab("Maximum July Temperature") +
- ylab("Kernel Density")
-
-
-
-
-
-Conclusión
-Hemos hecho mucho en este ejemplo. 1) buscamos sitios utilizando
-nombres y parámetros geográficos. 2) filtramos los resultados utilizando
-parametros temporales y espaciales 3) obtuvimos información para
-conjuntos de datos seleccionados y 4) realizamos análisis básicos con
-información ráster para clima
-Esperamos estos ejemplos puedan ser utilizados como plantillas para
-trabajo futuro o para hacer algo nuevo y divertido!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simple_workflow_ES.md b/simple_workflow_ES.md
deleted file mode 100644
index 9c9f9f8..0000000
--- a/simple_workflow_ES.md
+++ /dev/null
@@ -1,545 +0,0 @@
----
-title: "Flujo de Trabajo Simple"
-author: "Simon Goring, Socorro Dominguez Vidaña"
-date: "2022-11-09"
-output:
- html_document:
- code_folding: show
- fig_caption: yes
- keep_md: yes
- self_contained: yes
- theme: readable
- toc: yes
- toc_float: yes
- css: "text.css"
- pdf_document:
- pandoc_args: "-V geometry:vmargin=1in -V geometry:hmargin=1in"
----
-
-## Introducción
-
-El objetivo de este documento es mostrar como usar el nuevo paquete de R para la base de datos Neotoma, `neotoma2`.
-
-El [librería neotoma2](https://github.com/NeotomaDB/neotoma2) está disponible en GitHub y actualmente la documentación sólo está en inglés. Para instalar en R, se debe utilizar el paquete devtools de la siguiente forma:
-
-```r
-devtools::install_github('NeotomaDB/neotoma2')
-library(neotoma2)
-```
-
-En este tutorial, el usuario aprenderá a:
-
-* Buscar sitios a partir de nombres o parámetros geográficos
-* Filtrar resultados utilizando parametros temporales o espaciales
-* Obtener información de muestras para los grupos de datos seleccionados.
-* Desarrollar análisis que incluyan datos climatológicos de la libreria `rasters`.
-
-### Acceder y manipular información en `neotoma2`
-
-En este libro de trabajo utilizaremos diferentes librerias incluyendo `leaflet`, `sf` y otras. Para cargar las librerías utilizaremos el paquete `pacman`, que nos permite instalar automáticamente cualquier librería que no exista en nuestro sistema.
-
-
-```r
-options(warn = -1)
-pacman::p_load(neotoma2, dplyr, ggplot2, sf, geojsonsf, leaflet, raster, DT)
-```
-
-Hay que recalcar que R es sensible al orden en que se cargan las librerías. Es por esto que utilizaremos la notación `neotoma2::` para comunicarle a R explícitamente que queremos usar la función del paquete `neotoma2`. Esto es importante porque hay funciones como `filter()` (filtrar) que existen en otros paquetes también como en el paquete `dplyr`. Si obtienes un error que se vea así:
-
-```bash
-Error in UseMethod("filter") :
- no applicable method for 'filter' applied to an object of class "sites"
-```
-
-Esto quiere decir que estamos tratando de ejecutar la función `filter()` con el paquete incorrecto.Por eso, agregar `dplyr::` o `neotoma2::` antes de la función (por ejemplo, `neotoma2::filter()`) es una buena práctica.
-
-### Acceder a la ayuda en Neotoma
-
-Si estás planeando trabajar con Neotoma, únete a nuestro grupo en [Slack](https://join.slack.com/t/neotomadb/shared_invite/zt-cvsv53ep-wjGeCTkq7IhP6eUNA9NxYQ) donde tenemos un canal específicamente para preguntas del paquete de R. También puedes unirte a nuestra lista de correos en nuestro Grupo de Google. [Contáctanos en: ](mailto:neotoma-contact@googlegroups.com) para ser agregado.
-
-## Búsqueda por Sitios
-
-### `get_sites()`
-
-Hay diferentes maneras de encontrar sitios en `neotoma2`. Debémos pensar en los `sitios` como objetos espaciales. Tienen nombre, ubicación y pueden ser encontrados bajo en contexto de unidades geopolíticas. Sin embargo, bajo el contexto de la API y del paquete de R, los sitios en sí mismos no contienen datos sobre la taxonomía, el grupo de datos o las edades. Simplemente es un contenedor al que le podemos agregar más información. Es así que cuando buscamos por sitio, lo hacemos usando los siguientes atributos (en inglés):
-
- * `siteid` - identificador del sitio
- * `sitename` - nombre del sitio
- * `location` - ubicación
- * `altitude` - altitud (máxima y mínima)
- * `gpid` - unidad geopolítica
-
-#### Nombre del sitio: `sitename="%Lait%"` {.tabset}
-
-Hay ocasiones en las que sabremos exactamente el nombre del sitio que estamos buscando ("Lac Mouton"), y habrà ocasiones en las que tendremos una idea aproximada sobre el nombre (por ejemplo, sabemos que el nombre es parecido a "Lait Lake", o "Lac du Lait", pero no estamos seguros de como fue ingresado a la base de datos).
-
-De forma general, utilizamos el formato: `get_sites(sitename="XXXXX")` para buscar un sitio por nombre.
-
-PostgreSQL (y la API) utilizan el signo de porcentaje como comodín. De esta forma, `"%Lait%"` seleccionará ["Lac du Lait"](https://data.neotomadb.org/4180) y en caso de existir, también seleccionaría "Lake Lait" y "El Viejo Pantano **Lait**". La búsqueda tampoco distingue entre mayúsculas y minúsculas, por lo que simplemente podría escribir `"%lait%"`.
-
-##### Código
-
-
-```r
-spo_sites <- neotoma2::get_sites(sitename = "%Lait%")
-plotLeaflet(spo_sites)
-```
-
-##### Resultados
-
-
-```{=html}
-
-
-```
-
-#### Ubicación: `loc=c()` {.tabset}
-
-El paquete `neotoma` utilizaba un cuadro delimitador para buscar por ubicación. El cuadro estaba estructurado como un vector con valores de latitud y longitud: `c(xmin, ymin, xmax, ymax)`. En `neotoma2` se puede utilizar esta misma caja delimitadora o podemos definir objetos espaciales más complejos con el [paquete `sf`](https://r-spatial.github.io/sf/). El paquete `sf` nos permite trabajar con datos ráster y polígonos en R, para seleccionar sitios existentes en objetos espaciales más complejos. El parametro `loc` trabaja con vectores simples, objetos [WKT](https://arthur-e.github.io/Wicket/sandbox-gmaps3.html), objetos [geoJSON](http://geojson.io/#map=2/20.0/0.0) y objectos `sf` en R. **Notar que** el paquete `neotoma2` es un función contenedora API que utiliza un URL ([api.neotomadb.org](https://api.neotomadb.org)). Los URL están limitados a tener 1028 caracteres por lo que el API no acepta llamadas demasiado largas.
-
-Buscar sitios utilizando una ubicación. En el siguiente código hay tres representaciones de la República Checa: geoJSON, WKT y con un cuadro delimitador. También hemos transformado el elemento `cz$geoJSON` a un objeto del paquete `sf`. Podemos utilizar cualquiera de estas cuatro representaciones para trabajar con el paquete `neotoma2`.
-
-
-```r
-cz <- list(geoJSON = '{"type": "Polygon",
- "coordinates": [[
- [12.40, 50.14],
- [14.10, 48.64],
- [16.95, 48.66],
- [18.91, 49.61],
- [15.24, 50.99],
- [12.40, 50.14]]]}',
- WKT = 'POLYGON ((12.4 50.14,
- 14.1 48.64,
- 16.95 48.66,
- 18.91 49.61,
- 15.24 50.99,
- 12.4 50.14))',
- bbox = c(12.4, 48.64, 18.91, 50.99))
-
-cz$sf <- geojsonsf::geojson_sf(cz$geoJSON)[[1]]
-
-cz_sites <- neotoma2::get_sites(loc = cz$geoJSON, all_data = TRUE)
-```
-
-Puedes siempre hacer un gráfico de los `sites` obtenidos con `plot()`, pero los datos perderan el contexto geográfico. La función `plotLeaflet()` regresa un mapa de la librería `leaflet()` y permite mayor personalización o agregar datos espaciales adicionales (como nuestro cuadro delimitador, `cz$sf`, que funciona directamente con el paquete `leaflet`):
-
-##### Código
-
-
-```r
-neotoma2::plotLeaflet(cz_sites) %>%
- leaflet::addPolygons(map = .,
- data = cz$sf,
- color = "green")
-```
-
-##### Resultados
-
-
-```{=html}
-
-
-```
-
-#### Auxiliares para objetos de tipo Sitios {.tabset}
-
-
-
-Si observamos al [diagrama UML](https://es.wikipedia.org/wiki/Lenguaje_unificado_de_modelado) para los objetos de `neotoma2` podemos ver que hay un conjunto de funciones qeu operan a nivel de `sites` (sitios). Conforme vamos agregando información a los objetos `sites` mediante las funciones `get_datasets()` o `get_downloads()`, podemos utilizar un mayor número de funciones auxiliares. Podemos así, tomar ventaja de funciones como `summary()` para tener un mejor entendimiento de los diferentes tipos de datos que tenemos en este conjunto de sitios. El código a continuación regresa la tabla de resumen. Hacemos después un poco de magia con R para cambiar el formato en que los datos están siendo representados (convirtiéndolo a un objeto `datatable()`), pero la pieza principal es la llamada a la función `summary()`.
-
-##### Código
-
-
-```r
-neotoma2::summary(cz_sites)
-```
-
-##### Resultados
-
-
-```{=html}
-
-
-```
-
-Podemos ver que no hay cronologías asociadas con el objeto `sites`. Esto es porque, por el moemnto, no hemos extraído la información necesaria de los `dataset`. Todo lo que sabemos, tras la llamada `get_sites()` son los tipos de conjuntos de datos con los que contamos.
-
-### Búsqueda de conjuntos de datos (dataset): {.tabset}
-
-Sabemos que las unidades de colecta y los conjuntos de datos están contenidos en los sitios. Similarmente, un objeto de tipo `sites` contienen `collectionunits` que contienen `datasets`. En la tabla anterior podemos ver que algunos de los sitios contienen registros de polen. Dicho esto, solo tenemos la información de `sites`, pero por conveniencia, la API devuelve información adicional sobre los conjuntos de datos lo que nos permite navegar de manera más fácil los registros.
-
-Con un objeto `sites` podemos llamar directamente a la función `get_datasets()`, que nos permitirá extraer metadatos sobre los conjuntos de datos. Podemos utilizar la función `datasets()` en cualqueir momento para obtener más información de los conjuntos de datos que un objeto `sites` pueda contener. Comparemos la información impresa `datasets(cz_sites)` contra una llamada similar utilizando el siguiente código.
-
-#### Código
-
-
-```r
-cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE)
-
-datasets(cz_datasets)
-```
-
-#### Resultados
-
-
-```{=html}
-
-
-```
-
-### Filtrar Registros {.tabset}
-
-Si decidimos únicamente obtener registros de un sólo tipo de datos, o si requerimos de mayor filtración, debemos considerar filtrar antes de descargar todos los datos y muestras. Para ello, utilizaremos la función `filter()`. Por ejemplo, si requerimos únicamente los registros de polen con sus cronologías conocidas, podemos filtrar de la siguiente forma:
-
-#### Código
-
-
-```r
-cz_pollen <- cz_datasets %>%
- neotoma2::filter(datasettype == "pollen" & !is.na(age_range_young))
-
-neotoma2::summary(cz_pollen)
-```
-
-#### Resultados
-
-
-```{=html}
-
-
-```
-
-Podemos ver qeu la tabla de datos se ve diferente y que hay un número menor de sitios.
-
-### Obteniendo las muestras con `sample()`.
-
-Debido a que los datos de las muestras agregan mucha sobrecarga (para la República Checa, los datos de polen, el objeto que incluye toda la información de muestras es 20 veces mayor que el `dataset`), por eso llamamos la función `get_downloads()` después de haber hecho un filtrado preliminar. Después de `get_datasets()`, tenemos información sufciente para filtar basados en ubicación, límites de tiempo y tipo conjunto de datos. Cuando ejecutamos`get_downloads()` podemos hacer un filtrado más fino a nivel de unidad de análisis o nivel de taxón.
-
-El siguiente comando puede tomar algo de tiepo. Por eso, hemos guardado el resultado en un archivo RDS. Puedes intentar correr este comando por tu cuenta o puedes cargar el archivo RDS.
-
-
-```r
-## This line is commented out because we've already run it for you.
-## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)
-cz_dl <- readRDS('data/czDownload.RDS')
-```
-
-Una vez que hemos hecho la descarga, ahora tenemos información de cada sitio asociado a las unidades de colecta, los tipos de conjunto de datos, y a todas las muestras asociadas a estos conjuntos. Para extraer toda las muestras, utilizamos la función `samples`:
-
-
-```r
-allSamp <- samples(cz_dl)
-```
-
-Una vez hecho esto, obtenemos un `data.frame` esto es una tabla con 130889 renglones y 37 columnas. La razón de que esta tabla sea muy larga es porque estamos obteniendo los datos en un formato **largo**. Cada rengón contiene toda la información que se necesita para interpretarse correctamente:
-
-
-```
-## [1] "age" "agetype" "ageolder" "ageyounger"
-## [5] "chronologyid" "chronologyname" "units" "value"
-## [9] "context" "element" "taxonid" "symmetry"
-## [13] "taxongroup" "elementtype" "variablename" "ecologicalgroup"
-## [17] "analysisunitid" "sampleanalyst" "sampleid" "depth"
-## [21] "thickness" "samplename" "datasetid" "siteid"
-## [25] "sitename" "lat" "long" "area"
-## [29] "sitenotes" "description" "elev" "collunitid"
-## [33] "database" "datasettype" "age_range_old" "age_range_young"
-## [37] "datasetnotes"
-```
-
-Para algunos tipos de conjunto de datos o análisis específicos, algunas columnas podrán no ser necesarias. Sin embargo, para otros conjuntos de datos pueden ser críticamente importantes. Para permitir que el paquete `neotoma2` sea lo más útil posible para todos los usuarios, hemos incluido todas las columnas posibles.
-
-#### Extracción de taxones {.tabset}
-
-Si quieres saber que taxones existen en los registros, puedes utilizar la función `taxa()` en el objeto `sites`. La función `taxa()` regresa los taxones únicos junto con dos columnas adicionales `sites` y `samples` que indican en cuantos sitios y en cuantas muestras el taxón aparece, esto nos ayuda a comprender mejor que tan común es cada taxón individual.
-
-##### Código
-
-
-```r
-neotomatx <- neotoma2::taxa(cz_dl)
-```
-
-##### Resultados
-
-
-```{=html}
-
-
-```
-
-#### {-}
-
-Los valores obtenidos de `taxonid` pueden ser unidos a la columna `taxonid` de la tabla obtenida con `samples()`. Esto nos permite hacer tablas de armonización si así lo decidimos. También puedes notar que el nombre del taxón `taxonname` está en el campo `variablename`. Los recuentos de muestras individuales se reportan en Neotoma como [`variables`](https://open.neotomadb.org/manual/taxonomy-related-tables-1.html#Variables). Una "variable" puede ser una especie, una medida en el laboratorio, un proxy no orgánico, como carbón o medias XRF, e incluye las unidades de medición y su valor.
-
-#### Armonización simple {.tabset}
-
-Supongamos que queremos todas las muestras en las que los taxones *Plantago* han sido reportados y se desea agruparlos bajo un pseudo-taxon llamado *Plantago*. Hay varias formas de hacer esto, ya sae directamente exportando el archivo y editando cada celda individualemnte o creando una tabla externa de armonización (lo que se hacía en el paquete anterior `neotoma`).
-
-Programáticamente, podemos armonizar taxón por taxón aplicando comparaciones y transformaciones. Con la librería `dplyr` podemos utilizar `mutate()` para crear la columna `variablename` para que siempre que detecte (`str_detect()`) que el nombre de una variable `variablename` comienza con `Plantago` (el `.*` representa un comodín para cualquier caracter [`.`], cero o más veces [`*`]), podamos reemplazarlo `replace()` con el texto `"Plantago"`. Hay que observar que se cambiará *Plantago* en el objeto `allSamp`, pero podemos reestaurar la información volviendo a llamar`samples()` regresando las taxonomías a su forma original.
-
-Vamos a filtar los grupos ecológicos para incluir unicamente *UPHE* (altiplanicie/brezo) and *TRSH* (árboles y arbustos). Para más información de los grupos ecológicos consultar el [Manual en Línea Neotoma ](https://open.neotomadb.org/manual) (Disponible sólo en inglés).
-
-
-```r
-allSamp <- allSamp %>%
- dplyr::filter(ecologicalgroup %in% c("UPHE", "TRSH")) %>%
- mutate(variablename = replace(variablename,
- stringr::str_detect(variablename, "Plantago.*"),
- "Plantago"))
-```
-
-Originalmente, había 15 taxones diferentes identificados con el género *Plantago* (incluyendo *Plantago*, *Plantago major*, y *Plantago alpina-type*). El código anterior reduce a todos a un único grupo taxonómico llamado *Plantago*.
-
-Si quisieramos tener un artefacto con nuestras selecciones, podemos usar una tabla exteerna. Por ejemplo, una tabla de pares (información que queremos cambiar y el nombre con el que queremos reemplazar) puede ser creada y puede incluir expresiones regulares (regex) si así lo deseamos:
-
-| original | reemplazo |
-| -------- | ----------- |
-| Abies.* | Abies |
-| Vaccinium.* | Ericaceae |
-| Typha.* | Aquatic |
-| Nymphaea | Aquatic |
-| ... | ... |
-
-Podemos obtener los nombres originales directamente de la función `taxa()`, aplicada a un objeto de tipo `sites` y exportarla con `write.csv()`.
-
-##### Código
-
-
-```r
-taxaplots <- taxa(cz_dl)
-# Save the taxon list to file so we can edit it subsequently.
-readr::write_csv(taxaplots, "data/mytaxontable.csv")
-```
-
-##### Resultados
-
-
-
-#### {-}
-
-La gráfica es simplemente ilustrativa pero podemos verificar las relaciones existentes tal cual hubieramos esperado.
-
-Puedes después exportar una de estas tablas y agregar una columna con los recuentos; también se puede agregar información contextual extra tal como el grupo ecológico o el grupo de taxones para ayudarte. Una vez qeu la tabla de transición ha sido limpiada, puedes usarla y aplicar las transformaciones:
-
-
-```r
-translation <- readr::read_csv("data/taxontable.csv")
-```
-
-
-```{=html}
-
-
-```
-
-Puedes observar qeu hemos cambiado algunos de los nombres de los taxones en la tabla (no hay que ver más allá, esto es simplemente un ejemplo). Para reemplazar los nombres en la salida de `samples()`, tenemos que unir las dos tablas usando `inner_join()` (esto quiere decir que `variablename` debe aparecer en ambas tablas para que el resultado sea incluido), u luego seleccionaremos únicamente los elementos de la tabla de muestras que son relevantes para nuestro análisis:
-
-
-```r
-allSamp <- samples(cz_dl)
-
-allSamp <- allSamp %>%
- inner_join(translation, by = c("variablename" = "variablename")) %>%
- dplyr::select(!c("variablename", "sites", "samples")) %>%
- group_by(siteid, sitename, replacement,
- sampleid, units, age,
- agetype, depth, datasetid,
- long, lat) %>%
- summarise(value = sum(value), .groups='keep')
-```
-
-
-```{=html}
-
-
-```
-
-## Análisis Simples
-
-### Trazado Estratigráfico
-
-Podemos utilizar paquetes como `rioja` para hacer trazados estratigráficos para un único registro. Pero primero tenemos que hacer un manejo de datos diferente. A pesar de que podríamos hacer armonización nuevamente, vamos a tomar los 10 taxones más comúnes en un sitio dado los trazaremos en un diagrama estratigráfico.
-
-Utilizaremos la función `arrange()` para ordenar confrome al número de veces que un taxón aparece en un núcleo. De esta forma, podemos tomar las muestras y seleccionar los taxones que aparecen en las diez primeras filas del marco de datos `plottingTaxa`.
-
-
-```r
-# Get a particular site, select only taxa identified from pollen (and only trees/shrubs)
-plottingSite <- cz_dl[[1]]
-
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(samples)) %>%
- head(n = 10)
-
-# Clean up. Select only pollen measured using NISP.
-# We repeat the filters for pollen & ecological group on the samples
-shortSamples <- samples(plottingSite) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- filter(units == "NISP")
-
-# Transform to proportion values.
-onesite <- shortSamples %>%
- group_by(age) %>%
- mutate(pollencount = sum(value, na.rm = TRUE)) %>%
- group_by(variablename) %>%
- mutate(prop = value / pollencount) %>%
- arrange(desc(age))
-
-# Spread the data to a "wide" table, with taxa as column headings.
-widetable <- onesite %>%
- dplyr::select(age, variablename, prop) %>%
- mutate(prop = as.numeric(prop))
-
-counts <- tidyr::pivot_wider(widetable,
- id_cols = age,
- names_from = variablename,
- values_from = prop,
- values_fill = 0)
-```
-
-Aparentemente, esto es una llamada compleja de comandos. Sin embargo, el código es bastante sencillo y brinda un control significativo sobre los taxones, unidades y otros elementos de tus datos antes de transformarlos en una matriz ancha (`depth` x `taxon`) que muchas herramientas estadísticas como los paquetes `vegan` o `rioja` usan.
-
-Para crear gráficas, podemos usar `strat.plot()` del paquete `rioja`, ordenar los taxones usando puntajes promedio ponderados (`wa.order`). También se ha agregado un gráfico CONISS al borde del gráfico, para mostrar cómo funciona el nuevo marco de datos amplio con funciones métricas de distancia.
-
-
-```r
-clust <- rioja::chclust(dist(sqrt(counts)),
- method = "coniss")
-
-plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,
- title = cz_dl[[1]]$sitename,
- ylabel = "Calibrated Years BP",
- xlabel = "Pollen (%)",
- y.rev = TRUE,
- clust = clust,
- wa.order = "topleft", scale.percent = TRUE)
-
-rioja::addClustZone(plot, clust, 4, col = "red")
-```
-
-
-
-### Cambio en el tiempo entre sitios
-
-Ahora tenemos información de sitios en toda la República Checa, con muestras y nombres de taxones. Para observar las distribuciones de taxones a lo largo del tiempo, su presencia/ausencia, seleccionaremos los 20 taxones principales (según la cantidad de veces que aparecen en los registros) y observaré sus distribuciones en el tiempo
-
-
-```r
-plottingTaxa <- taxa(plottingSite) %>%
- filter(ecologicalgroup %in% c("TRSH")) %>%
- filter(elementtype == "pollen") %>%
- arrange(desc(sites)) %>%
- head(n = 20)
-
-taxabyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by(variablename, "age" = round(age * 2, -3) / 2) %>%
- summarise(n = length(unique(siteid)), .groups = 'keep')
-
-samplesbyage <- samples(cz_dl) %>%
- filter(variablename %in% plottingTaxa$variablename) %>%
- group_by("age" = round(age * 2, -3) / 2) %>%
- summarise(samples = length(unique(siteid)), .groups = 'keep')
-
-groupbyage <- taxabyage %>%
- inner_join(samplesbyage, by = "age") %>%
- mutate(proportion = n / samples)
-
-ggplot(groupbyage, aes(x = age, y = proportion)) +
- geom_point() +
- geom_smooth(method = 'gam',
- method.args = list(family = 'binomial')) +
- facet_wrap(~variablename) +
- coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +
- scale_x_reverse(breaks = c(10000, 20000)) +
- xlab("Proportion of Sites with Taxon") +
- theme_bw()
-```
-
-
-
-Podemos ver patrones de cambio claros, y los alizados se crean con modelos aditivos generalizados (GAM) en R, por lo que podemos tener control sobre el modelado real usando los paquetes `gam` o `mgcv`. Dependiendo de cómo dividamos los datos, también podemos observar los cambios de altitud, latitud o longitud para comprender mejor cómo cambiaron las distribuciones y abundancias de especies con el tiempo en esta región.
-
-### Distribuciones en el clima con ráster (Máximas temperaturas de julio)
-
-A menudo nos interesa la interacción entre los taxones y el clima, asumiendo que el tiempo es un indicador de los entornos cambiantes. El desarrollo de conjuntos de datos globales a gran escala para el clima ha hecho que sea relativamente sencillo acceder a los datos de la nube en formato raster. R proporciona una serie de herramientas (en los paquetes `sf` y `raster`) para administrar datos espaciales y brindar soporte para el análisis espacial de datos.
-
-El primer paso es tomar nuestros datos de muestra y convertirlos en un objeto espacial usando el paquete `sf` en R:
-
-
-```r
-modern <- samples(cz_dl) %>%
- filter(age < 50) %>%
- filter(ecologicalgroup == "TRSH" & elementtype == "pollen" & units == "NISP")
-
-spatial <- sf::st_as_sf(modern,
- coords = c("long", "lat"),
- crs = "+proj=longlat +datum=WGS84")
-```
-
-Los datos son los mismos, el paquete `sf` crea un objeto llamado `spatial` que es un marco de datos `data.frame`con toda la información extraída de `samples()`, y una columna (`geometry`) que contiene los datos espaciales.
-
-Podemos utilizar la funcion [`getData()`](https://www.rdocumentation.org/packages/raster/versions/3.5-15/topics/getData) del paquete `raster` para obtener datos de WorldClim. Las operaciones siguientes pueden ser aplicadas a cualquier tipo de datos raster, asumiendo que haya sido cargada en R como un objeto de tipo `raster`.
-
-A continuación extraeremos datos raster, a una resolucion de 10 minutos para la variable $T_{max}$, temperatura máxima mensual. El raster en sí mismo, tiene 12 capas, una para cada mes. Con la función `extract()` obtenemos la información sólamente para el séptimo mes, julio.
-
-
-```r
-worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)
-spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]
-```
-
-Esto agrega una columna al marco de datos o `data.frame` `spatial`, que contiene la temperatura máxima de julio para cada taxón en cada sitio. (todos los taxónes en un sitio compartirán el mismo valor). Hemos filtrado anteriormente para obtener solo los taxones UPHE, pero eso aún nos deja con 1 distintos nombres para los taxones. Con la función de `dplyr` `mutate()` vamos a extraer únicamente el género:
-
-
-```r
-spatial <- spatial %>%
- mutate(variablename = stringr::str_replace(variablename, "[[:punct:]]", " ")) %>%
- mutate(variablename = stringr::word(variablename, 1)) %>%
- group_by(variablename, siteid) %>%
- summarise(tmax7 = max(tmax7), .groups = "keep") %>%
- group_by(variablename) %>%
- filter(n() > 3)
-```
-
-#### Ajustando el ambiente
-
-queremos obtener la distribución de fondo de las temperaturas de julio en la República Checa, para graficar las distribuciones de los taxones contra el valor máximo de temperatura. Sin embargo, como todos los valores en el sitio son el mismo (porque utilizamos una superposición espacial), el máximo es el mismo que la temperatura real de julio en el sitio.
-
-
-```r
-maxsamp <- spatial %>%
- dplyr::group_by(siteid) %>%
- dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')
-```
-
-Ahora, para graficarlo, utilizaremos `facet_wrap()` para graficar cada taxón en su propio panel:
-
-
-```r
-ggplot() +
- geom_density(data = spatial,
- aes(x = round(tmax7 / 10, 0)), col = 2) +
- facet_wrap(~variablename) +
- geom_density(data = maxsamp, aes(x = tmax7 / 10)) +
- xlab("Maximum July Temperature") +
- ylab("Kernel Density")
-```
-
-
-
-## Conclusión
-
-Hemos hecho mucho en este ejemplo.
-1) buscamos sitios utilizando nombres y parámetros geográficos.
-2) filtramos los resultados utilizando parametros temporales y espaciales
-3) obtuvimos información para conjuntos de datos seleccionados y
-4) realizamos análisis básicos con información ráster para clima
-
-Esperamos estos ejemplos puedan ser utilizados como plantillas para trabajo futuro o para hacer algo nuevo y divertido!
diff --git a/slides/data/.~lock.taxontable.csv# b/slides/data/.~lock.taxontable.csv#
deleted file mode 100644
index f8e1941..0000000
--- a/slides/data/.~lock.taxontable.csv#
+++ /dev/null
@@ -1 +0,0 @@
-Simon Goring,simon,partyLaptop,24.05.2022 11:51,file:///home/simon/.config/libreoffice/4;
\ No newline at end of file
diff --git a/slides/data/czDownload.RDS b/slides/data/czDownload.RDS
deleted file mode 100644
index f132104..0000000
Binary files a/slides/data/czDownload.RDS and /dev/null differ
diff --git a/slides/data/mytaxontable.csv b/slides/data/mytaxontable.csv
deleted file mode 100644
index 6726e69..0000000
--- a/slides/data/mytaxontable.csv
+++ /dev/null
@@ -1,1230 +0,0 @@
-units,context,element,taxonid,symmetry,taxongroup,elementtype,variablename,ecologicalgroup,sites,samples
-grains/tablet,NA,concentration,930,NA,Laboratory analyses,concentration,Lycopodium tablets,LABO,3,130
-grains/tablet,NA,concentration,932,NA,Laboratory analyses,concentration,Lycopodium spike,LABO,1,80
-ml,NA,volume,276,NA,Laboratory analyses,volume,Sample quantity,LABO,6,368
-NISP,anachronic,pollen/spore,2644,NA,Unidentified palynomorphs,pollen/spore,Unknown (Tertiary),ANAC,4,137
-NISP,anachronic,spore,544,NA,Unidentified palynomorphs,spore,Unknown (Cretaceous),ANAC,1,6
-NISP,anachronic,spore,2644,NA,Unidentified palynomorphs,spore,Unknown (Tertiary),ANAC,2,16
-NISP,NA,ascospore,1489,NA,Fungi,ascospore,Sporormiella,FUNG,1,27
-NISP,NA,ascospore,2193,NA,Fungi,ascospore,Gelasinospora,FUNG,6,19
-NISP,NA,ascospore,3698,NA,Fungi,ascospore,Microthyrium,FUNG,30,223
-NISP,NA,ascospore,5128,NA,Fungi,ascospore,Gelasinospora undiff.,FUNG,1,1
-NISP,NA,ascospore,5129,NA,Fungi,ascospore,Gelasinospora reticulispora,FUNG,1,5
-NISP,NA,ascospore,5407,NA,Fungi,ascospore,Helicoma,FUNG,3,17
-NISP,NA,ascospore,5413,NA,Fungi,ascospore,Anthostomella fuegiana,FUNG,1,1
-NISP,NA,ascospore,5414,NA,Fungi,ascospore,Gaeumannomyces cf. G. caricis,FUNG,6,131
-NISP,NA,ascospore,5415,NA,Fungi,ascospore,Diporotheca,FUNG,6,50
-NISP,NA,ascospore,5584,NA,Fungi,ascospore,Helicoön pluriseptatum,FUNG,5,155
-NISP,NA,ascospore,9988,NA,Fungi,ascospore,Gaeumannomyces,FUNG,4,55
-NISP,NA,ascospore,10006,NA,Fungi,ascospore,Ascomycota,FUNG,4,53
-NISP,NA,ascospore,27614,NA,Fungi,ascospore,Ustulina deusta,FUNG,4,83
-NISP,NA,ascospore,29431,NA,Fungi,ascospore,Geoglossum sphagnophilum,FUNG,1,1
-NISP,NA,ascospore,29637,NA,Fungi,ascospore,Ascospora,FUNG,1,7
-NISP,NA,ascospore,30552,NA,Fungi,ascospore,Lasiosphaeria-type,FUNG,1,8
-NISP,NA,ascospore,30600,NA,Fungi,ascospore,Coniochaeta xylariispora,FUNG,2,56
-NISP,NA,ascospore,30758,NA,Fungi,ascospore,"Gelasinospora (type 1, HdV)",FUNG,1,13
-NISP,NA,ascospore,30984,NA,Fungi,ascospore,Actinopeltis undiff.,FUNG,2,7
-NISP,NA,ascospore,32493,NA,Fungi,ascospore,"Geoglossum sphagnophilum/Trichoglossum hirsutum (type 77A/77B, HdV)",FUNG,1,3
-NISP,NA,ascospore,32539,NA,Fungi,ascospore,Chaetomium undiff.,FUNG,1,1
-NISP,NA,ascospore,32597,NA,Fungi,ascospore,Coniochaeta cf. C. ligniaria,FUNG,1,90
-NISP,NA,ascospore,32863,NA,Fungi,ascospore,Gaeumannomyces undiff.,FUNG,1,12
-NISP,NA,ascospore,33090,NA,Fungi,ascospore,Lasiosphaeria cf. L. caudata,FUNG,1,63
-NISP,NA,ascospore,33091,NA,Fungi,ascospore,Lasiosphaeria sp.,FUNG,1,2
-NISP,NA,ascospore,33251,NA,Fungi,ascospore,Microthyrium microscopicum,FUNG,4,18
-NISP,NA,ascospore,33252,NA,Fungi,ascospore,Microthyrium undiff.,FUNG,2,32
-NISP,NA,ascospore,33524,NA,Fungi,ascospore,Pleospora undiff.,FUNG,1,42
-NISP,NA,ascospore,34608,NA,Fungi,ascospore,"Fungi (type 19, HdV)",FUNG,2,4
-NISP,NA,ascospore,34626,NA,Fungi,ascospore,"Fungi (type 47, HdV)",FUNG,1,1
-NISP,NA,ascospore,34636,NA,Fungi,ascospore,"cf. Trichoglossum hirsutum (type 77B, HdV)",FUNG,1,98
-NISP,NA,ascospore,37395,NA,Fungi,ascospore,"Cercophora sp. (type 112, HdV)",FUNG,1,12
-NISP,NA,ascospore,37396,NA,Fungi,ascospore,"Podospora-type (type 368, HdV)",FUNG,1,1
-NISP,NA,ascospore,37397,NA,Fungi,ascospore,"Chaetomium sp. (type 7A, HdV)",FUNG,1,7
-NISP,NA,ascospore,38489,NA,Fungi,ascospore,Tetraploa scheueri,FUNG,1,2
-NISP,NA,ascospore,41786,NA,Fungi,ascospore,"Caryospora sp. (type 1001, HdV)",FUNG,1,1
-NISP,NA,ascospore,41792,NA,Fungi,ascospore,"Gelasinospora (type 1A, HdV)",FUNG,1,5
-NISP,NA,ascospore,41793,NA,Fungi,ascospore,"Gelasinospora (type 1B, HdV)",FUNG,1,1
-NISP,NA,cell,5126,NA,Algae,cell,Staurastrum,ALGA,6,38
-NISP,NA,cell,5409,NA,Algae,cell,Arthrodesmus,ALGA,1,4
-NISP,NA,cell,5412,NA,Algae,cell,Penium,ALGA,1,2
-NISP,NA,cell,5422,NA,Algae,cell,Closterium,ALGA,2,3
-NISP,NA,cell,5423,NA,Algae,cell,Closterium undiff.,ALGA,1,2
-NISP,NA,cell,21590,NA,Algae,cell,Desmidiales,ALGA,1,1
-NISP,NA,cell cluster,30735,NA,Fungi,cell cluster,"Fungi (type 200, HdV)",FUNG,1,21
-NISP,NA,cell cluster,34624,NA,Fungi,cell cluster,"Fungi (type 24, HdV)",FUNG,1,52
-NISP,NA,cell cluster,35283,NA,Fungi,cell cluster,Asterosporium,FUNG,1,1
-NISP,NA,chlamydospore,34404,NA,Fungi,chlamydospore,"Fungi (type 11, HdV)",FUNG,1,3
-NISP,NA,claw,14069,NA,Arthropods undiff.,claw,Araneae,ARTH,1,1
-NISP,NA,coccon,34569,NA,Flatworms,coccon,"Platyhelminthes (type 353B, HdV)",FLWO,1,60
-NISP,NA,coccon,34625,NA,Flatworms,coccon,"Platyhelminthes (type 353A, HdV)",FLWO,1,23
-NISP,NA,colony,202,NA,Algae,colony,Pediastrum,ALGA,9,58
-NISP,NA,colony,326,NA,Algae,colony,Botryococcus,ALGA,22,475
-NISP,NA,colony,685,NA,Algae,colony,Pediastrum angulosum,ALGA,5,36
-NISP,NA,colony,689,NA,Algae,colony,Pediastrum braunii,ALGA,1,4
-NISP,NA,colony,690,NA,Algae,colony,Pediastrum duplex,ALGA,10,165
-NISP,NA,colony,1212,NA,Algae,colony,Pediastrum undiff.,ALGA,3,41
-NISP,NA,colony,2818,NA,Algae,colony,Botryococcus braunii,ALGA,11,148
-NISP,NA,colony,5041,NA,Algae,colony,Botryococcus pila,ALGA,3,18
-NISP,NA,colony,5045,NA,Algae,colony,Pediastrum duplex var. rugulosum,ALGA,8,211
-NISP,NA,colony,5047,NA,Algae,colony,Pediastrum angulosum var. asperum,ALGA,2,2
-NISP,NA,colony,5059,NA,Algae,colony,Pediastrum muticum var. scutum,ALGA,2,4
-NISP,NA,colony,5060,NA,Algae,colony,Pediastrum angulosum var. angulosum,ALGA,3,69
-NISP,NA,colony,5061,NA,Algae,colony,Pediastrum duplex var. duplex,ALGA,1,1
-NISP,NA,colony,5137,NA,Algae,colony,Coelastrum reticulatum,ALGA,1,1
-NISP,NA,colony,21584,NA,Algae,colony,Hydrodictyon,ALGA,1,1
-NISP,NA,colony,31324,NA,Algae,colony,Botryococcus sp.,ALGA,3,21
-NISP,NA,colony,31325,NA,Algae,colony,Botryococcus neglectus,ALGA,3,7
-NISP,NA,colony,32495,NA,Algae,colony,Pediastrum orientale,ALGA,1,37
-NISP,NA,colony,33383,NA,Algae,colony,Pseudopediastrum boryanum,ALGA,13,208
-NISP,NA,colony,33384,NA,Algae,colony,Pseudopediastrum kawraiskyi,ALGA,6,36
-NISP,NA,colony,33386,NA,Algae,colony,Parapediastrum biradiatum,ALGA,1,1
-NISP,NA,colony,33387,NA,Algae,colony,Pseudopediastrum boryanum var. longicorne,ALGA,9,253
-NISP,NA,colony,33391,NA,Algae,colony,Pseudopediastrum boryanum var. boryanum,ALGA,5,58
-NISP,NA,colony,33392,NA,Algae,colony,Pseudopediastrum boryanum var. boryanum sensu lato,ALGA,5,211
-NISP,NA,colony,33393,NA,Algae,colony,Pseudopediastrum brevicorne,ALGA,3,6
-NISP,NA,colony,33394,NA,Algae,colony,Pseudopediastrum integrum,ALGA,11,297
-NISP,NA,colony,33395,NA,Algae,colony,Pseudopediastrum boryanum var. cornutum,ALGA,8,150
-NISP,NA,colony,33398,NA,Algae,colony,Monactinus simplex,ALGA,4,29
-NISP,NA,colony,33400,NA,Algae,colony,Stauridium tetras,ALGA,2,14
-NISP,NA,colony,33421,NA,Algae,colony,Monactinus simplex var. echinulatum,ALGA,2,32
-NISP,NA,colony,33423,NA,Algae,colony,Monactinus simplex var. simplex,ALGA,2,47
-NISP,NA,conidiophore,41701,NA,Fungi,conidiophore,"Fungi (type 96B, HdV)",FUNG,1,30
-NISP,NA,conidium,32487,NA,Fungi,conidium,"Trichocladium opacum (type 10, HdV)",FUNG,2,14
-NISP,NA,conidium,34381,NA,Fungi,conidium,"Xylomyces chlamydosporis/X. aquaticus (type 201, HdV)",FUNG,3,17
-NISP,NA,conidium,34635,NA,Fungi,conidium,"cf. Trichocladium opacum (type 10, HdV)",FUNG,1,49
-NISP,NA,cyst,628,NA,Dinoflagellates,cyst,Dinoflagellata undiff.,DINO,1,9
-NISP,NA,cyst,778,NA,Dinoflagellates,cyst,Dinoflagellata,DINO,3,34
-NISP,NA,egg,33211,NA,Animals undiff.,egg,Macrobiotus,ANIM,1,2
-NISP,NA,egg,33213,NA,Animals undiff.,egg,Macrobiotus cf. M. echinogenitus,ANIM,1,2
-NISP,NA,egg,41789,NA,Arthropods undiff.,egg,"Acrotritia ardua (type 106, HdV)",ACAR,1,1
-NISP,NA,filament/cell,34924,NA,Algae,filament/cell,"Mougeotia cf. M. gracillima (type 61, HdV)",ALGA,1,4
-NISP,NA,fragment,1062,NA,Charcoal,fragment,Charcoal,CHAR,2,140
-NISP,NA,fruit body,34565,NA,Fungi,fruit body,"Fungi (type 8A, HdV)",FUNG,2,32
-NISP,NA,fruit body,39286,NA,Fungi,fruit body,"?Microthyrium (type 8, HdV)",FUNG,1,15
-NISP,NA,fruit body/ascospore,34320,NA,Fungi,fruit body/ascospore,"Fungi (type 8E, HdV)",FUNG,1,4
-NISP,NA,fruit body/ascospore,34565,NA,Fungi,fruit body/ascospore,"Fungi (type 8A, HdV)",FUNG,1,14
-NISP,NA,fruit body/ascospore,34566,NA,Fungi,fruit body/ascospore,"Fungi (type 8D, HdV)",FUNG,1,21
-NISP,NA,head capsule,41781,NA,Insects,head capsule,"Glyptotendipes pallens group (type 509, HdV)",DIPT,1,2
-NISP,NA,hyphae,37335,NA,Fungi,hyphae,"Fungi (type 408, HdV)",FUNG,1,4
-NISP,NA,hyphae,41791,NA,Fungi,hyphae,"Fungi (type 54B, HdV)",FUNG,1,5
-NISP,NA,invertebrate undiff.,38585,NA,Animals undiff.,invertebrate undiff.,"Tardigrada (type 902, HdV)",ANIM,1,1
-NISP,NA,invertebrate undiff.,41704,NA,Arthropods undiff.,invertebrate undiff.,"Oribatida (type 396, HdV)",ACAR,1,2
-NISP,NA,labium,18678,NA,Insects,labium,Chironomidae,DIPT,2,4
-NISP,NA,leaf spine,894,NA,Vascular plants,leaf spine,Ceratophyllum,AQVP,5,128
-NISP,NA,lorica,1198,NA,Rotifers,lorica,Habrotrocha angusticollis,ROTI,11,200
-NISP,NA,lorica,5242,NA,Rotifers,lorica,Habrotrocha,ROTI,1,8
-NISP,NA,lorica,30744,NA,Rotifers,lorica,"Habrotrocha angusticollis (type 37, HdV)",ROTI,1,34
-NISP,NA,lorica,31741,NA,Rotifers,lorica,Filinia longiseta,ROTI,1,22
-NISP,NA,lorica,33836,NA,Rotifers,lorica,Rotifera undiff.,ROTI,1,6
-NISP,NA,mandible/claw,5417,NA,Crustaceans undiff.,mandible/claw,Cladocera,CLAD,1,5
-NISP,NA,non-pollen palynomorph,38627,NA,Testate amoebae,non-pollen palynomorph,"Archerella flavum (type 31A, HdV)",TEAM,1,26
-NISP,NA,oocyte,27726,NA,Flatworms,oocyte,Gyratrix hermaphroditus,FLWO,6,66
-NISP,NA,oocyte,27732,NA,Flatworms,oocyte,Microdalyellia armigera,FLWO,6,140
-NISP,NA,ovum,33206,NA,Animals undiff.,ovum,Tardigrada,ANIM,2,13
-NISP,NA,ovum,33837,NA,Animals undiff.,ovum,Rotifera/Tardigrada,ANIM,1,1
-NISP,NA,palynomorph,1198,NA,Rotifers,palynomorph,Habrotrocha angusticollis,ROTI,3,51
-NISP,NA,palynomorph,1202,NA,Bryophytes,palynomorph,"Bryophyta (type 354, HdV)",UPBR,2,4
-NISP,NA,palynomorph,1488,NA,Algae,palynomorph,Spirogyra,ALGA,6,72
-NISP,NA,palynomorph,1704,NA,Algae,palynomorph,Zygnemataceae,ALGA,2,21
-NISP,NA,palynomorph,1761,NA,Algae,palynomorph,Zygnemataceae undiff.,ALGA,1,40
-NISP,NA,palynomorph,2054,NA,Algae,palynomorph,Algae,ALGA,7,18
-NISP,NA,palynomorph,3091,NA,Algae,palynomorph,Zygnema,ALGA,3,20
-NISP,NA,palynomorph,5123,NA,Algae,palynomorph,Mougeotia,ALGA,12,188
-NISP,NA,palynomorph,5124,NA,Algae,palynomorph,Mougeotia undiff.,ALGA,2,2
-NISP,NA,palynomorph,5137,NA,Algae,palynomorph,Coelastrum reticulatum,ALGA,4,49
-NISP,NA,palynomorph,5138,NA,Algae,palynomorph,Scenedesmus,ALGA,11,225
-NISP,NA,palynomorph,5139,NA,Algae,palynomorph,Scenedesmus undiff.,ALGA,2,7
-NISP,NA,palynomorph,5140,NA,Algae,palynomorph,Tetraëdron minimum,ALGA,9,138
-NISP,NA,palynomorph,5142,NA,Algae,palynomorph,Tetraëdron,ALGA,7,137
-NISP,NA,palynomorph,5144,NA,Algae,palynomorph,Trochiscia undiff.,ALGA,1,5
-NISP,NA,palynomorph,5387,NA,Algae,palynomorph,Desmidiaceae,ALGA,3,48
-NISP,NA,palynomorph,5390,NA,Algae,palynomorph,Spirogyra-type,ALGA,3,5
-NISP,NA,palynomorph,5391,NA,Algae,palynomorph,Zygnema-type,ALGA,5,25
-NISP,NA,palynomorph,5411,NA,Algae,palynomorph,cf. Penium,ALGA,1,2
-NISP,NA,palynomorph,5418,NA,Flatworms,palynomorph,Rhabdocoela,FLWO,3,71
-NISP,NA,palynomorph,5424,NA,Algae,palynomorph,Staurastrum undiff.,ALGA,1,1
-NISP,NA,palynomorph,5551,NA,Algae,palynomorph,Mougeotia-type,ALGA,1,1
-NISP,NA,palynomorph,5553,NA,Algae,palynomorph,Rivularia,ALGA,1,7
-NISP,NA,palynomorph,27724,NA,Nematodes,palynomorph,Ascaris,NEMA,3,13
-NISP,NA,palynomorph,29123,NA,Algae,palynomorph,Transeauina,ALGA,1,1
-NISP,NA,palynomorph,29124,NA,Algae,palynomorph,Transeauina undiff.,ALGA,3,8
-NISP,NA,palynomorph,30748,NA,Algae,palynomorph,"Algae? (type 225, HdV)",ALGA,1,1
-NISP,NA,palynomorph,31202,NA,Nematodes,palynomorph,Ascaris lumbricoides,NEMA,1,2
-NISP,NA,palynomorph,32028,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 41, HdV)",UNID,2,17
-NISP,NA,palynomorph,32548,NA,Algae,palynomorph,Chlamydomonadaceae,ALGA,1,2
-NISP,NA,palynomorph,32851,NA,Unidentified palynomorphs,palynomorph,Fungi-type,UNID,1,8
-NISP,NA,palynomorph,33034,NA,Algae,palynomorph,Chrysophyceae,ALGA,1,1
-NISP,NA,palynomorph,34077,NA,Animals undiff.,palynomorph,Tardigrada undiff.,ANIM,1,3
-NISP,NA,palynomorph,34130,NA,Nematodes,palynomorph,Trichuris trichiura,NEMA,2,6
-NISP,NA,palynomorph,34236,NA,Animals undiff.,palynomorph,Vermes,ANIM,1,1
-NISP,NA,palynomorph,34410,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 224, HdV)",UNID,1,4
-NISP,NA,palynomorph,34411,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 366, HdV)",UNID,1,6
-NISP,NA,palynomorph,34563,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 33, HdV)",UNID,2,19
-NISP,NA,palynomorph,34567,NA,Fungi,palynomorph,"Fungi (type 73, HdV)",FUNG,1,1
-NISP,NA,palynomorph,34568,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 91, HdV)",UNID,2,9
-NISP,NA,palynomorph,34569,NA,Flatworms,palynomorph,"Platyhelminthes (type 353B, HdV)",FLWO,1,33
-NISP,NA,palynomorph,34606,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 38, HdV)",UNID,2,2
-NISP,NA,palynomorph,34607,NA,Fungi,palynomorph,"Anthostomella cf. A. fuegiana (type 4, HdV)",FUNG,1,5
-NISP,NA,palynomorph,34622,NA,Fungi,palynomorph,"cf. Persiciospora (type 124, HdV)",FUNG,1,1
-NISP,NA,palynomorph,34629,NA,Fungi,palynomorph,"Fungi (type 64, HdV)",FUNG,1,52
-NISP,NA,palynomorph,34630,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 74, HdV)",UNID,1,2
-NISP,NA,palynomorph,34632,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 86, HdV)",UNID,2,2
-NISP,NA,palynomorph,37350,NA,Algae,palynomorph,Sigmopollis,ALGA,1,2
-NISP,NA,palynomorph,37368,NA,Unidentified palynomorphs,palynomorph,"Unknown (type 160, HdV)",UNID,1,5
-NISP,NA,palynomorph,38547,NA,Flatworms,palynomorph,"Rhabdocoela (type 353, HdV)",FLWO,1,10
-NISP,NA,peridinoid cyst,778,NA,Dinoflagellates,peridinoid cyst,Dinoflagellata,DINO,1,54
-NISP,NA,pollen,1,NA,Vascular plants,pollen,Abies,TRSH,72,1822
-NISP,NA,pollen,11,NA,Vascular plants,pollen,Aesculus,TRSH,2,3
-NISP,NA,pollen,12,NA,Vascular plants,pollen,Allium,UPHE,3,46
-NISP,NA,pollen,14,NA,Vascular plants,pollen,Alnus viridis-type,TRSH,1,5
-NISP,NA,pollen,15,NA,Vascular plants,pollen,Alnus undiff.,TRSH,1,130
-NISP,NA,pollen,16,NA,Vascular plants,pollen,Ambrosia-type,UPHE,5,26
-NISP,NA,pollen,24,NA,Vascular plants,pollen,Armeria,UPHE,4,11
-NISP,NA,pollen,25,NA,Vascular plants,pollen,Artemisia,UPHE,87,3419
-NISP,NA,pollen,29,NA,Vascular plants,pollen,Betula,TRSH,83,3727
-NISP,NA,pollen,31,NA,Vascular plants,pollen,Bidens-type,UPHE,3,3
-NISP,NA,pollen,32,NA,Vascular plants,pollen,Boraginaceae,UPHE,12,37
-NISP,NA,pollen,39,NA,Vascular plants,pollen,Callitriche,AQVP,2,11
-NISP,NA,pollen,40,NA,Vascular plants,pollen,Caltha,AQVP,4,25
-NISP,NA,pollen,44,NA,Vascular plants,pollen,Carya,TRSH,4,37
-NISP,NA,pollen,45,NA,Vascular plants,pollen,Caryophyllaceae,UPHE,28,288
-NISP,NA,pollen,47,NA,Vascular plants,pollen,Castanea,TRSH,4,18
-NISP,NA,pollen,67,NA,Vascular plants,pollen,Corylus,TRSH,68,2273
-NISP,NA,pollen,69,NA,Vascular plants,pollen,Crataegus-type,TRSH,2,7
-NISP,NA,pollen,70,NA,Vascular plants,pollen,Brassicaceae undiff.,UPHE,1,22
-NISP,NA,pollen,72,NA,Vascular plants,pollen,Cupressaceae,TRSH,2,11
-NISP,NA,pollen,73,NA,Vascular plants,pollen,Cuscuta,UPHE,8,64
-NISP,NA,pollen,74,NA,Vascular plants,pollen,Cyperaceae,UPHE,84,3751
-NISP,NA,pollen,81,NA,Vascular plants,pollen,Drosera,AQVP,15,20
-NISP,NA,pollen,82,NA,Vascular plants,pollen,Dryas-type,UPHE,1,1
-NISP,NA,pollen,86,NA,Vascular plants,pollen,Empetrum,TRSH,3,5
-NISP,NA,pollen,90,NA,Vascular plants,pollen,Epilobium,UPHE,42,150
-NISP,NA,pollen,92,NA,Vascular plants,pollen,Ericaceae,TRSH,21,202
-NISP,NA,pollen,103,NA,Vascular plants,pollen,Euonymus,TRSH,12,28
-NISP,NA,pollen,104,NA,Vascular plants,pollen,Euphorbia,UPHE,13,18
-NISP,NA,pollen,106,NA,Vascular plants,pollen,Fagopyrum,UPHE,23,46
-NISP,NA,pollen,107,NA,Vascular plants,pollen,Fagus,TRSH,75,2328
-NISP,NA,pollen,116,NA,Vascular plants,pollen,Galium,UPHE,14,218
-NISP,NA,pollen,119,NA,Vascular plants,pollen,Gentianaceae,UPHE,6,15
-NISP,NA,pollen,120,NA,Vascular plants,pollen,Geranium,UPHE,32,79
-NISP,NA,pollen,121,NA,Vascular plants,pollen,Geum-type,UPHE,10,31
-NISP,NA,pollen,129,NA,Vascular plants,pollen,Hippuris vulgaris,AQVP,2,3
-NISP,NA,pollen,132,NA,Vascular plants,pollen,Hypericum,UPHE,27,143
-NISP,NA,pollen,135,NA,Vascular plants,pollen,Ilex,TRSH,2,15
-NISP,NA,pollen,136,NA,Vascular plants,pollen,Impatiens,UPHE,10,17
-NISP,NA,pollen,153,NA,Vascular plants,pollen,Larix,TRSH,30,99
-NISP,NA,pollen,155,NA,Vascular plants,pollen,Rhododendron subsect. Ledum,TRSH,3,12
-NISP,NA,pollen,157,NA,Vascular plants,pollen,Fabaceae undiff.,UPHE,1,5
-NISP,NA,pollen,159,NA,Vascular plants,pollen,Lemnoideae,AQVP,1,12
-NISP,NA,pollen,160,NA,Vascular plants,pollen,Cichorioideae,UPHE,81,1869
-NISP,NA,pollen,162,NA,Vascular plants,pollen,Liquidambar,TRSH,1,3
-NISP,NA,pollen,164,NA,Vascular plants,pollen,Lonicera,TRSH,13,29
-NISP,NA,pollen,176,NA,Vascular plants,pollen,Lycopus-type,UPHE,11,66
-NISP,NA,pollen,180,NA,Vascular plants,pollen,Malvaceae,UPHE,6,14
-NISP,NA,pollen,182,NA,Vascular plants,pollen,Menyanthes trifoliata,AQVP,33,264
-NISP,NA,pollen,188,NA,Vascular plants,pollen,Myriophyllum,AQVP,2,2
-NISP,NA,pollen,190,NA,Vascular plants,pollen,Nuphar,AQVP,15,110
-NISP,NA,pollen,192,NA,Vascular plants,pollen,Nymphaea,AQVP,14,135
-NISP,NA,pollen,193,NA,Vascular plants,pollen,Nyssa,TRSH,2,15
-NISP,NA,pollen,200,NA,Vascular plants,pollen,Parnassia,UPHE,4,11
-NISP,NA,pollen,210,NA,Vascular plants,pollen,Picea,TRSH,74,2576
-NISP,NA,pollen,212,NA,Vascular plants,pollen,Pinus subg. Pinus,TRSH,3,210
-NISP,NA,pollen,219,NA,Vascular plants,pollen,Plantago major,UPHE,20,203
-NISP,NA,pollen,220,NA,Vascular plants,pollen,Plantago lanceolata,UPHE,68,1352
-NISP,NA,pollen,221,NA,Vascular plants,pollen,Plantago media,UPHE,17,330
-NISP,NA,pollen,222,NA,Vascular plants,pollen,Platanus,TRSH,1,1
-NISP,NA,pollen,225,NA,Vascular plants,pollen,Polygonaceae undiff.,UPHE,1,2
-NISP,NA,pollen,230,NA,Vascular plants,pollen,Persicaria amphibia,UPHE,8,11
-NISP,NA,pollen,231,NA,Vascular plants,pollen,Polygonum aviculare-type,UPHE,8,57
-NISP,NA,pollen,242,NA,Vascular plants,pollen,Potentilla-type,UPHE,27,496
-NISP,NA,pollen,244,NA,Vascular plants,pollen,Primulaceae,UPHE,2,3
-NISP,NA,pollen,245,NA,Vascular plants,pollen,Prunus-type,TRSH,13,52
-NISP,NA,pollen,251,NA,Vascular plants,pollen,Quercus,TRSH,85,3128
-NISP,NA,pollen,252,NA,Vascular plants,pollen,Ranunculaceae undiff.,UPHE,4,129
-NISP,NA,pollen,256,NA,Vascular plants,pollen,Rhamnaceae,TRSH,1,1
-NISP,NA,pollen,259,NA,Vascular plants,pollen,Rhododendron,TRSH,1,1
-NISP,NA,pollen,262,NA,Vascular plants,pollen,Ribes,TRSH,16,57
-NISP,NA,pollen,267,NA,Vascular plants,pollen,Rubus,TRSH,12,37
-NISP,NA,pollen,268,NA,Vascular plants,pollen,Rumex,UPHE,36,610
-NISP,NA,pollen,270,NA,Vascular plants,pollen,Sagittaria,AQVP,4,5
-NISP,NA,pollen,271,NA,Vascular plants,pollen,Salix,TRSH,86,2878
-NISP,NA,pollen,275,NA,Vascular plants,pollen,Sambucus,TRSH,13,31
-NISP,NA,pollen,282,NA,Vascular plants,pollen,Saxifragaceae,UPHE,13,42
-NISP,NA,pollen,283,NA,Vascular plants,pollen,Scheuchzeria palustris,AQVP,6,30
-NISP,NA,pollen,284,NA,Vascular plants,pollen,Scrophulariaceae,UPHE,14,40
-NISP,NA,pollen,285,NA,Vascular plants,pollen,Sedum,UPHE,13,43
-NISP,NA,pollen,293,NA,Vascular plants,pollen,Sparganium-type,AQVP,8,181
-NISP,NA,pollen,297,NA,Vascular plants,pollen,Symplocos,TRSH,1,1
-NISP,NA,pollen,299,NA,Vascular plants,pollen,Taxus,TRSH,1,2
-NISP,NA,pollen,300,NA,Vascular plants,pollen,Thalictrum,UPHE,75,1446
-NISP,NA,pollen,302,NA,Vascular plants,pollen,Tilia,TRSH,79,2445
-NISP,NA,pollen,306,NA,Vascular plants,pollen,Tsuga,TRSH,4,21
-NISP,NA,pollen,307,NA,Vascular plants,pollen,Asteroideae undiff.,UPHE,2,43
-NISP,NA,pollen,309,NA,Vascular plants,pollen,Typha latifolia,AQVP,41,378
-NISP,NA,pollen,310,NA,Vascular plants,pollen,Ulmus,TRSH,85,2862
-NISP,NA,pollen,311,NA,Vascular plants,pollen,Apiaceae,UPHE,70,1767
-NISP,NA,pollen,316,NA,Vascular plants,pollen,Utricularia,AQVP,17,65
-NISP,NA,pollen,317,NA,Vascular plants,pollen,Vaccinium,TRSH,22,304
-NISP,NA,pollen,318,NA,Vascular plants,pollen,Valeriana,UPHE,30,170
-NISP,NA,pollen,319,NA,Vascular plants,pollen,Viburnum undiff.,TRSH,1,2
-NISP,NA,pollen,320,NA,Vascular plants,pollen,Vitis,TRSH,9,13
-NISP,NA,pollen,322,NA,Vascular plants,pollen,Xanthium,UPHE,3,10
-NISP,NA,pollen,323,NA,Vascular plants,pollen,Zea mays,UPHE,5,7
-NISP,NA,pollen,330,NA,Vascular plants,pollen,Alnus,TRSH,79,3219
-NISP,NA,pollen,332,NA,Vascular plants,pollen,Viola,UPHE,13,27
-NISP,NA,pollen,336,NA,Vascular plants,pollen,Lythrum,UPHE,19,87
-NISP,NA,pollen,338,NA,Vascular plants,pollen,Acer,TRSH,78,1157
-NISP,NA,pollen,341,NA,Vascular plants,pollen,Liliaceae,UPHE,25,85
-NISP,NA,pollen,345,NA,Vascular plants,pollen,Ambrosia,UPHE,5,6
-NISP,NA,pollen,346,NA,Vascular plants,pollen,Fabaceae,UPHE,51,350
-NISP,NA,pollen,349,NA,Vascular plants,pollen,Bidens,UPHE,12,83
-NISP,NA,pollen,350,NA,Vascular plants,pollen,Ranunculaceae,UPHE,57,1409
-NISP,NA,pollen,351,NA,Vascular plants,pollen,Campanulaceae,UPHE,5,10
-NISP,NA,pollen,353,NA,Vascular plants,pollen,Alnus viridis,TRSH,8,190
-NISP,NA,pollen,355,NA,Vascular plants,pollen,Rosaceae undiff.,UPHE,3,45
-NISP,NA,pollen,361,NA,Vascular plants,pollen,Cornus,TRSH,8,9
-NISP,NA,pollen,363,NA,Vascular plants,pollen,Juniperus-type,TRSH,1,12
-NISP,NA,pollen,366,NA,Vascular plants,pollen,Ephedra,TRSH,6,21
-NISP,NA,pollen,369,NA,Vascular plants,pollen,Fraxinus,TRSH,68,1293
-NISP,NA,pollen,372,NA,Vascular plants,pollen,Juglans,TRSH,57,194
-NISP,NA,pollen,373,NA,Vascular plants,pollen,Larix/Pseudotsuga,TRSH,1,1
-NISP,NA,pollen,379,NA,Vascular plants,pollen,Myrica-type,TRSH,1,6
-NISP,NA,pollen,384,NA,Vascular plants,pollen,Ostrya-type,TRSH,1,1
-NISP,NA,pollen,385,NA,Vascular plants,pollen,Pinus,TRSH,77,3518
-NISP,NA,pollen,389,NA,Vascular plants,pollen,Populus,TRSH,44,473
-NISP,NA,pollen,391,NA,Vascular plants,pollen,Amaranthaceae,UPHE,85,1977
-NISP,NA,pollen,397,NA,Vascular plants,pollen,Viburnum,TRSH,10,27
-NISP,NA,pollen,409,NA,Vascular plants,pollen,Asteraceae,UPHE,13,134
-NISP,NA,pollen,414,NA,Vascular plants,pollen,Avena-type,UPHE,23,325
-NISP,NA,pollen,416,NA,Vascular plants,pollen,Poaceae (Cerealia),UPHE,14,129
-NISP,NA,pollen,417,NA,Vascular plants,pollen,Poaceae,UPHE,86,3892
-NISP,NA,pollen,418,NA,Vascular plants,pollen,Asteroideae,UPHE,65,1119
-NISP,NA,pollen,419,NA,Vascular plants,pollen,Brassica,UPHE,1,30
-NISP,NA,pollen,420,NA,Vascular plants,pollen,Brassicaceae,UPHE,65,1163
-NISP,NA,pollen,425,NA,Vascular plants,pollen,Humulus,UPHE,7,16
-NISP,NA,pollen,426,NA,Vascular plants,pollen,Cannabis sativa,UPHE,7,95
-NISP,NA,pollen,427,NA,Vascular plants,pollen,Poaceae (Cerealia) undiff.,UPHE,20,239
-NISP,NA,pollen,445,NA,Vascular plants,pollen,Onagraceae,UPHE,1,1
-NISP,NA,pollen,448,NA,Vascular plants,pollen,Gentiana,UPHE,10,39
-NISP,NA,pollen,460,NA,Vascular plants,pollen,Lamiaceae,UPHE,40,422
-NISP,NA,pollen,468,NA,Vascular plants,pollen,Lysimachia thyrsiflora,UPHE,1,1
-NISP,NA,pollen,470,NA,Vascular plants,pollen,Oenothera,UPHE,1,1
-NISP,NA,pollen,473,NA,Vascular plants,pollen,Orchidaceae,UPHE,2,2
-NISP,NA,pollen,476,NA,Vascular plants,pollen,Pedicularis,UPHE,19,30
-NISP,NA,pollen,480,NA,Vascular plants,pollen,Plantago,UPHE,3,7
-NISP,NA,pollen,483,NA,Vascular plants,pollen,Rosaceae,UPHE,65,787
-NISP,NA,pollen,484,NA,Vascular plants,pollen,Primula,UPHE,4,11
-NISP,NA,pollen,487,NA,Vascular plants,pollen,Saxifraga,UPHE,3,6
-NISP,NA,pollen,488,NA,Vascular plants,pollen,Secale-type,UPHE,16,136
-NISP,NA,pollen,491,NA,Vascular plants,pollen,Stachys-type,UPHE,4,10
-NISP,NA,pollen,495,NA,Vascular plants,pollen,Trifolium pratense,UPHE,6,20
-NISP,NA,pollen,496,NA,Vascular plants,pollen,Trifolium repens-type,UPHE,11,29
-NISP,NA,pollen,497,NA,Vascular plants,pollen,Triticum-type,UPHE,27,225
-NISP,NA,pollen,498,NA,Vascular plants,pollen,Urtica,UPHE,71,1140
-NISP,NA,pollen,513,NA,Vascular plants,pollen,Alisma,AQVP,13,51
-NISP,NA,pollen,514,NA,Vascular plants,pollen,Hydrocotyle,AQVP,1,1
-NISP,NA,pollen,515,NA,Vascular plants,pollen,Lemna,AQVP,4,17
-NISP,NA,pollen,517,NA,Vascular plants,pollen,Potamogeton,AQVP,36,460
-NISP,NA,pollen,522,NA,Vascular plants,pollen,Engelhardia-type,TRSH,2,19
-NISP,NA,pollen,539,NA,Vascular plants,pollen,Lysimachia,UPHE,30,152
-NISP,NA,pollen,540,NA,Vascular plants,pollen,Polygonum,UPHE,1,1
-NISP,NA,pollen,543,NA,Vascular plants,pollen,Solanaceae,UPHE,1,2
-NISP,NA,pollen,545,NA,Vascular plants,pollen,Stellaria,UPHE,2,10
-NISP,NA,pollen,549,NA,Vascular plants,pollen,Ranunculus,UPHE,1,24
-NISP,NA,pollen,557,NA,Vascular plants,pollen,Allium-type,UPHE,4,6
-NISP,NA,pollen,562,NA,Vascular plants,pollen,Andromeda,TRSH,1,1
-NISP,NA,pollen,564,NA,Vascular plants,pollen,Andromeda polifolia,TRSH,1,3
-NISP,NA,pollen,568,NA,Vascular plants,pollen,Arctostaphylos uva-ursi,TRSH,1,5
-NISP,NA,pollen,582,NA,Vascular plants,pollen,Butomus umbellatus,AQVP,1,1
-NISP,NA,pollen,585,NA,Vascular plants,pollen,Caltha-type,UPHE,45,365
-NISP,NA,pollen,586,NA,Vascular plants,pollen,Campanula-type,UPHE,7,19
-NISP,NA,pollen,592,NA,Vascular plants,pollen,Centaurea,UPHE,11,35
-NISP,NA,pollen,612,NA,Vascular plants,pollen,Drosera rotundifolia-type,AQVP,1,4
-NISP,NA,pollen,616,NA,Vascular plants,pollen,Elymus-type,UPHE,1,2
-NISP,NA,pollen,636,NA,Vascular plants,pollen,Linum,UPHE,3,6
-NISP,NA,pollen,654,NA,Vascular plants,pollen,Lycopus,UPHE,9,27
-NISP,NA,pollen,655,NA,Vascular plants,pollen,Lythrum salicaria,UPHE,9,48
-NISP,NA,pollen,656,NA,Vascular plants,pollen,Mentha-type,UPHE,24,253
-NISP,NA,pollen,667,NA,Vascular plants,pollen,Myriophyllum alterniflorum,AQVP,17,87
-NISP,NA,pollen,684,NA,Vascular plants,pollen,Papaveraceae,UPHE,10,26
-NISP,NA,pollen,694,NA,Vascular plants,pollen,Euphorbiaceae,UPHE,1,3
-NISP,NA,pollen,698,NA,Vascular plants,pollen,Plantaginaceae,UPHE,3,12
-NISP,NA,pollen,699,NA,Vascular plants,pollen,Plantago lanceolata-type,UPHE,18,203
-NISP,NA,pollen,702,NA,Vascular plants,pollen,Polygonaceae,UPHE,3,5
-NISP,NA,pollen,703,NA,Vascular plants,pollen,Bistorta officinalis-type,UPHE,25,139
-NISP,NA,pollen,714,NA,Vascular plants,pollen,Prunella-type,UPHE,1,1
-NISP,NA,pollen,715,NA,Vascular plants,pollen,Prunus,TRSH,6,19
-NISP,NA,pollen,721,NA,Vascular plants,pollen,Pyrola,UPHE,1,1
-NISP,NA,pollen,733,NA,Vascular plants,pollen,Rubiaceae,TRSH,56,1248
-NISP,NA,pollen,734,NA,Vascular plants,pollen,Rubus chamaemorus,TRSH,1,7
-NISP,NA,pollen,735,NA,Vascular plants,pollen,Rumex-type,UPHE,2,3
-NISP,NA,pollen,736,NA,Vascular plants,pollen,Rumex acetosa-type,UPHE,41,874
-NISP,NA,pollen,739,NA,Vascular plants,pollen,Salix herbacea-type,TRSH,2,20
-NISP,NA,pollen,747,NA,Vascular plants,pollen,Saxifraga oppositifolia-type,UPHE,4,11
-NISP,NA,pollen,748,NA,Vascular plants,pollen,Micranthes stellaris-type,UPHE,5,14
-NISP,NA,pollen,751,NA,Vascular plants,pollen,Typha,AQVP,1,2
-NISP,NA,pollen,752,NA,Vascular plants,pollen,Typha angustifolia,AQVP,8,42
-NISP,NA,pollen,762,NA,Vascular plants,pollen,Trifolium-type,UPHE,22,178
-NISP,NA,pollen,767,NA,Vascular plants,pollen,Vaccinium oxycoccos,TRSH,5,37
-NISP,NA,pollen,785,NA,Vascular plants,pollen,Rhamnus,TRSH,11,39
-NISP,NA,pollen,794,NA,Vascular plants,pollen,Viburnum opulus,TRSH,5,29
-NISP,NA,pollen,795,NA,Vascular plants,pollen,Viburnum opulus-type,TRSH,1,4
-NISP,NA,pollen,797,NA,Vascular plants,pollen,Xanthium-type,UPHE,1,26
-NISP,NA,pollen,798,NA,Vascular plants,pollen,Polemonium,UPHE,9,15
-NISP,NA,pollen,806,NA,Vascular plants,pollen,Humulus/Cannabis,UPHE,32,497
-NISP,NA,pollen,808,NA,Vascular plants,pollen,Vicia-type,UPHE,24,115
-NISP,NA,pollen,810,NA,Vascular plants,pollen,Potamogeton-type,AQVP,12,163
-NISP,NA,pollen,813,NA,Vascular plants,pollen,Campanula,UPHE,45,239
-NISP,NA,pollen,815,NA,Vascular plants,pollen,Ranunculus-type,UPHE,31,417
-NISP,NA,pollen,820,NA,Vascular plants,pollen,Achillea-type,UPHE,15,216
-NISP,NA,pollen,821,NA,Vascular plants,pollen,Circaea,UPHE,9,13
-NISP,NA,pollen,825,NA,Vascular plants,pollen,Potentilla,UPHE,9,132
-NISP,NA,pollen,838,NA,Vascular plants,pollen,Plantago major-type,UPHE,13,119
-NISP,NA,pollen,841,NA,Vascular plants,pollen,Stellaria-type,UPHE,2,4
-NISP,NA,pollen,842,NA,Vascular plants,pollen,Ononis-type,UPHE,1,1
-NISP,NA,pollen,843,NA,Vascular plants,pollen,Rosa,TRSH,6,24
-NISP,NA,pollen,846,NA,Vascular plants,pollen,Melampyrum-type,UPHE,1,2
-NISP,NA,pollen,848,NA,Vascular plants,pollen,Ericales,TRSH,3,207
-NISP,NA,pollen,849,NA,Vascular plants,pollen,Ericales undiff.,TRSH,1,118
-NISP,NA,pollen,858,NA,Vascular plants,pollen,Ligustrum,TRSH,5,27
-NISP,NA,pollen,881,NA,Vascular plants,pollen,Hydrocotyle-type,AQVP,1,1
-NISP,NA,pollen,884,NA,Vascular plants,pollen,Persicaria maculosa-type,UPHE,27,69
-NISP,NA,pollen,886,NA,Vascular plants,pollen,Senecio,UPHE,1,1
-NISP,NA,pollen,888,NA,Vascular plants,pollen,Persicaria amphibia-type,UPHE,2,5
-NISP,NA,pollen,894,NA,Vascular plants,pollen,Ceratophyllum,AQVP,1,2
-NISP,NA,pollen,904,NA,Vascular plants,pollen,Rumex undiff.,UPHE,4,35
-NISP,NA,pollen,908,NA,Vascular plants,pollen,Sparganium,AQVP,12,111
-NISP,NA,pollen,909,NA,Vascular plants,pollen,Ericaceae undiff.,TRSH,7,44
-NISP,NA,pollen,912,NA,Vascular plants,pollen,Saxifragaceae undiff.,UPHE,1,3
-NISP,NA,pollen,936,NA,Vascular plants,pollen,Oxalis,UPHE,9,13
-NISP,NA,pollen,947,NA,Vascular plants,pollen,Polygonum aviculare,UPHE,56,402
-NISP,NA,pollen,967,NA,Vascular plants,pollen,Secale,UPHE,35,467
-NISP,NA,pollen,968,NA,Vascular plants,pollen,Triglochin,AQVP,3,12
-NISP,NA,pollen,969,NA,Vascular plants,pollen,Triticum,UPHE,27,291
-NISP,NA,pollen,983,NA,Vascular plants,pollen,Juniperus,TRSH,56,862
-NISP,NA,pollen,988,NA,Vascular plants,pollen,Persicaria maculosa,UPHE,13,38
-NISP,NA,pollen,989,NA,Vascular plants,pollen,cf. Pedicularis,UPHE,2,10
-NISP,NA,pollen,994,NA,Vascular plants,pollen,Arenaria,UPHE,6,8
-NISP,NA,pollen,996,NA,Vascular plants,pollen,Ranunculus acris-type,UPHE,20,445
-NISP,NA,pollen,997,NA,Vascular plants,pollen,Melampyrum,UPHE,54,445
-NISP,NA,pollen,999,NA,Vascular plants,pollen,Cerastium-type,UPHE,5,29
-NISP,NA,pollen,1012,NA,Vascular plants,pollen,Bupleurum,UPHE,5,11
-NISP,NA,pollen,1013,NA,Vascular plants,pollen,Caryophyllaceae undiff.,UPHE,1,30
-NISP,NA,pollen,1024,NA,Vascular plants,pollen,Gentianella,UPHE,2,2
-NISP,NA,pollen,1026,NA,Vascular plants,pollen,Empetrum-type,TRSH,6,50
-NISP,NA,pollen,1050,NA,Vascular plants,pollen,Pinguicula,UPHE,3,4
-NISP,NA,pollen,1069,NA,Vascular plants,pollen,Papaver,UPHE,6,14
-NISP,NA,pollen,1072,NA,Vascular plants,pollen,Polygala,UPHE,6,7
-NISP,NA,pollen,1073,NA,Vascular plants,pollen,Jasione,UPHE,5,8
-NISP,NA,pollen,1078,NA,Vascular plants,pollen,Trifolium,UPHE,6,13
-NISP,NA,pollen,1081,NA,Vascular plants,pollen,Plantaginaceae undiff.,UPHE,1,27
-NISP,NA,pollen,1086,NA,Vascular plants,pollen,Cardamine-type,UPHE,19,151
-NISP,NA,pollen,1087,NA,Vascular plants,pollen,Rumex obtusifolius-type,UPHE,4,12
-NISP,NA,pollen,1094,NA,Vascular plants,pollen,Convolvulus-type,UPHE,1,1
-NISP,NA,pollen,1121,NA,Vascular plants,pollen,Typha angustifolia-type,AQVP,1,2
-NISP,NA,pollen,1142,NA,Vascular plants,pollen,Anemone,UPHE,1,2
-NISP,NA,pollen,1143,NA,Vascular plants,pollen,Aconitum,UPHE,11,76
-NISP,NA,pollen,1161,NA,Vascular plants,pollen,Anemone-type,UPHE,19,89
-NISP,NA,pollen,1163,NA,Vascular plants,pollen,Astragalus-type,UPHE,6,15
-NISP,NA,pollen,1166,NA,Vascular plants,pollen,Hedysarum-type,UPHE,1,2
-NISP,NA,pollen,1172,NA,Vascular plants,pollen,Apiaceae undiff.,UPHE,15,331
-NISP,NA,pollen,1173,NA,Vascular plants,pollen,Vaccinium-type,TRSH,37,362
-NISP,NA,pollen,1178,NA,Vascular plants,pollen,Geraniaceae,UPHE,1,2
-NISP,NA,pollen,1184,NA,Vascular plants,pollen,Bistorta officinalis,UPHE,23,121
-NISP,NA,pollen,1211,NA,Vascular plants,pollen,Myriophyllum undiff.,AQVP,2,2
-NISP,NA,pollen,1222,NA,Vascular plants,pollen,Saxifraga undiff.,UPHE,2,2
-NISP,NA,pollen,1253,NA,Vascular plants,pollen,Cirsium,UPHE,12,52
-NISP,NA,pollen,1260,NA,Vascular plants,pollen,Helianthemum,UPHE,42,308
-NISP,NA,pollen,1262,NA,Vascular plants,pollen,Solanum,UPHE,1,1
-NISP,NA,pollen,1266,NA,Vascular plants,pollen,Euphorbia-type,UPHE,1,5
-NISP,NA,pollen,1267,NA,Vascular plants,pollen,Bupleurum-type,UPHE,5,8
-NISP,NA,pollen,1268,NA,Vascular plants,pollen,Typha latifolia-type,AQVP,13,254
-NISP,NA,pollen,1287,NA,Vascular plants,pollen,Pinus sylvestris,TRSH,3,99
-NISP,NA,pollen,1288,NA,Vascular plants,pollen,Picea abies,TRSH,23,1005
-NISP,NA,pollen,1297,NA,Vascular plants,pollen,Carex,UPHE,1,7
-NISP,NA,pollen,1299,NA,Vascular plants,pollen,Alnus glutinosa,TRSH,1,20
-NISP,NA,pollen,1301,NA,Vascular plants,pollen,Sanguisorba officinalis,UPHE,50,183
-NISP,NA,pollen,1306,NA,Vascular plants,pollen,Hippophaë rhamnoides,TRSH,10,43
-NISP,NA,pollen,1308,NA,Vascular plants,pollen,Echinops,UPHE,1,2
-NISP,NA,pollen,1310,NA,Vascular plants,pollen,Myriophyllum spicatum,AQVP,24,225
-NISP,NA,pollen,1311,NA,Vascular plants,pollen,Myriophyllum verticillatum,AQVP,16,126
-NISP,NA,pollen,1315,NA,Vascular plants,pollen,Sorbus aucuparia,TRSH,2,7
-NISP,NA,pollen,1316,NA,Vascular plants,pollen,Corylus avellana,TRSH,26,1107
-NISP,NA,pollen,1319,NA,Vascular plants,pollen,Carpinus betulus,TRSH,26,620
-NISP,NA,pollen,1320,NA,Vascular plants,pollen,Fagus sylvatica,TRSH,11,438
-NISP,NA,pollen,1321,NA,Vascular plants,pollen,Vitis vinifera,TRSH,2,3
-NISP,NA,pollen,1324,NA,Vascular plants,pollen,Fagopyrum esculentum,UPHE,1,3
-NISP,NA,pollen,1325,NA,Vascular plants,pollen,Scabiosa,UPHE,9,12
-NISP,NA,pollen,1326,NA,Vascular plants,pollen,Knautia arvensis,UPHE,2,5
-NISP,NA,pollen,1334,NA,Vascular plants,pollen,Viscum,TRSH,47,164
-NISP,NA,pollen,1335,NA,Vascular plants,pollen,Humulus lupulus,UPHE,5,80
-NISP,NA,pollen,1336,NA,Vascular plants,pollen,Centaurea cyanus,UPHE,62,432
-NISP,NA,pollen,1339,NA,Vascular plants,pollen,Salvia,UPHE,1,1
-NISP,NA,pollen,1340,NA,Vascular plants,pollen,Dipsacoideae,UPHE,3,4
-NISP,NA,pollen,1341,NA,Vascular plants,pollen,Dipsacus,UPHE,3,5
-NISP,NA,pollen,1392,NA,Vascular plants,pollen,Centaurea undiff.,UPHE,7,13
-NISP,NA,pollen,1403,NA,Vascular plants,pollen,Hystrix,UPHE,2,9
-NISP,NA,pollen,1416,NA,Vascular plants,pollen,Galium-type,UPHE,31,572
-NISP,NA,pollen,1428,NA,Vascular plants,pollen,Filipendula,UPHE,81,2359
-NISP,NA,pollen,1429,NA,Vascular plants,pollen,Carpinus,TRSH,65,1148
-NISP,NA,pollen,1430,NA,Vascular plants,pollen,Crataegus,TRSH,1,1
-NISP,NA,pollen,1434,NA,Vascular plants,pollen,Tofieldia,UPHE,1,1
-NISP,NA,pollen,1435,NA,Vascular plants,pollen,Sorbus,TRSH,24,81
-NISP,NA,pollen,1501,NA,Vascular plants,pollen,Convolvulus,UPHE,7,22
-NISP,NA,pollen,1505,NA,Vascular plants,pollen,Carpinus-type,TRSH,1,130
-NISP,NA,pollen,1514,NA,Vascular plants,pollen,Persicaria cf. P. lapathifolia,UPHE,1,1
-NISP,NA,pollen,1517,NA,Vascular plants,pollen,Calystegia,UPHE,7,14
-NISP,NA,pollen,1530,NA,Vascular plants,pollen,Cerastium,UPHE,3,12
-NISP,NA,pollen,1532,NA,Vascular plants,pollen,Rumex acetosella-type,UPHE,9,172
-NISP,NA,pollen,1576,NA,Vascular plants,pollen,Impatiens noli-tangere,UPHE,1,5
-NISP,NA,pollen,1580,NA,Vascular plants,pollen,Acacia,TRSH,1,1
-NISP,NA,pollen,1710,NA,Vascular plants,pollen,Juglandaceae,TRSH,2,13
-NISP,NA,pollen,1751,NA,Vascular plants,pollen,Thalictrum-type,UPHE,3,4
-NISP,NA,pollen,1764,NA,Vascular plants,pollen,Apium,UPHE,1,1
-NISP,NA,pollen,1779,NA,Vascular plants,pollen,Eryngium-type,UPHE,1,1
-NISP,NA,pollen,1876,NA,Vascular plants,pollen,Vicia/Lathyrus,UPHE,1,11
-NISP,NA,pollen,1915,NA,Vascular plants,pollen,Senecio-type,UPHE,12,38
-NISP,NA,pollen,1931,NA,Vascular plants,pollen,Liliaceae-type,UPHE,2,4
-NISP,NA,pollen,1932,NA,Vascular plants,pollen,Iris,UPHE,2,3
-NISP,NA,pollen,1947,NA,Vascular plants,pollen,Poaceae (Cerealia-type),UPHE,16,148
-NISP,NA,pollen,2127,NA,Vascular plants,pollen,Lathyrus-type,UPHE,11,14
-NISP,NA,pollen,2129,NA,Vascular plants,pollen,Lotus-type,UPHE,32,162
-NISP,NA,pollen,2131,NA,Vascular plants,pollen,Monocotyledoneae,SEED,8,41
-NISP,NA,pollen,2160,NA,Vascular plants,pollen,Geum,UPHE,11,23
-NISP,NA,pollen,2196,NA,Vascular plants,pollen,Epilobium-type,UPHE,3,9
-NISP,NA,pollen,2210,NA,Vascular plants,pollen,Viburnum cf. V. opulus,TRSH,1,1
-NISP,NA,pollen,2224,NA,Vascular plants,pollen,Myriophyllum verticillatum-type,AQVP,6,112
-NISP,NA,pollen,2228,NA,Vascular plants,pollen,Trientalis,UPHE,1,1
-NISP,NA,pollen,2248,NA,Vascular plants,pollen,Cardamine,UPHE,2,46
-NISP,NA,pollen,2249,NA,Vascular plants,pollen,Cedrus,TRSH,1,2
-NISP,NA,pollen,2286,NA,Vascular plants,pollen,Mentha,UPHE,7,39
-NISP,NA,pollen,2306,NA,Vascular plants,pollen,Silene,UPHE,3,7
-NISP,NA,pollen,2311,NA,Vascular plants,pollen,Valeriana officinalis,UPHE,20,96
-NISP,NA,pollen,2319,NA,Vascular plants,pollen,Saxifraga oppositifolia,UPHE,1,2
-NISP,NA,pollen,2322,NA,Vascular plants,pollen,Frangula alnus,TRSH,38,327
-NISP,NA,pollen,2337,NA,Vascular plants,pollen,Myriophyllum spicatum-type,AQVP,1,1
-NISP,NA,pollen,2338,NA,Vascular plants,pollen,Olea,TRSH,2,5
-NISP,NA,pollen,2339,NA,Vascular plants,pollen,Oleaceae,TRSH,1,1
-NISP,NA,pollen,2460,NA,Vascular plants,pollen,Carduus,UPHE,12,44
-NISP,NA,pollen,2476,NA,Vascular plants,pollen,Lobelia,UPHE,2,2
-NISP,NA,pollen,2481,NA,Vascular plants,pollen,Anagallis-type,UPHE,1,1
-NISP,NA,pollen,2483,NA,Vascular plants,pollen,Alchemilla,UPHE,5,23
-NISP,NA,pollen,2519,NA,Vascular plants,pollen,Clematis,UPHE,1,3
-NISP,NA,pollen,2533,NA,Vascular plants,pollen,Gentiana undiff.,UPHE,1,9
-NISP,NA,pollen,2536,NA,Vascular plants,pollen,Gentiana pneumonanthe-type,UPHE,5,8
-NISP,NA,pollen,2537,NA,Vascular plants,pollen,Heracleum,UPHE,6,40
-NISP,NA,pollen,2549,NA,Vascular plants,pollen,Dianthus-type,UPHE,4,25
-NISP,NA,pollen,2561,NA,Vascular plants,pollen,Gentiana-type,UPHE,3,3
-NISP,NA,pollen,2566,NA,Vascular plants,pollen,Montia,UPHE,4,6
-NISP,NA,pollen,2572,NA,Vascular plants,pollen,Typha angustifolia/Sparganium,AQVP,33,358
-NISP,NA,pollen,2590,NA,Vascular plants,pollen,Myosotis,UPHE,3,3
-NISP,NA,pollen,2657,NA,Vascular plants,pollen,Castanea sativa,TRSH,1,1
-NISP,NA,pollen,2667,NA,Vascular plants,pollen,Pterocarya,TRSH,3,12
-NISP,NA,pollen,2677,NA,Vascular plants,pollen,Hippophaë,TRSH,7,20
-NISP,NA,pollen,2680,NA,Vascular plants,pollen,Daphne,TRSH,3,8
-NISP,NA,pollen,2684,NA,Vascular plants,pollen,Hedera,TRSH,24,49
-NISP,NA,pollen,2685,NA,Vascular plants,pollen,Knautia,UPHE,21,33
-NISP,NA,pollen,2690,NA,Vascular plants,pollen,Trapa,AQVP,1,3
-NISP,NA,pollen,2759,NA,Vascular plants,pollen,Euphrasia,UPHE,2,2
-NISP,NA,pollen,2795,NA,Vascular plants,pollen,Veronica,UPHE,9,42
-NISP,NA,pollen,2801,NA,Vascular plants,pollen,Sequoia,TRSH,1,4
-NISP,NA,pollen,2828,NA,Vascular plants,pollen,Echium,UPHE,18,40
-NISP,NA,pollen,2894,NA,Vascular plants,pollen,Stachys,UPHE,5,12
-NISP,NA,pollen,2895,NA,Vascular plants,pollen,Valerianella,UPHE,2,6
-NISP,NA,pollen,2897,NA,Vascular plants,pollen,Calluna vulgaris,TRSH,57,895
-NISP,NA,pollen,2901,NA,Vascular plants,pollen,Drosera rotundifolia,AQVP,6,16
-NISP,NA,pollen,2902,NA,Vascular plants,pollen,Drosera intermedia,AQVP,1,5
-NISP,NA,pollen,2904,NA,Vascular plants,pollen,Lotus,UPHE,1,6
-NISP,NA,pollen,2905,NA,Vascular plants,pollen,Plantago major/P. media,UPHE,48,452
-NISP,NA,pollen,2906,NA,Vascular plants,pollen,Scleranthus perennis,UPHE,1,2
-NISP,NA,pollen,2907,NA,Vascular plants,pollen,Scleranthus,UPHE,4,10
-NISP,NA,pollen,2908,NA,Vascular plants,pollen,Scleranthus-type,UPHE,5,11
-NISP,NA,pollen,2909,NA,Vascular plants,pollen,Stellaria holostea,UPHE,3,6
-NISP,NA,pollen,2910,NA,Vascular plants,pollen,Succisa,UPHE,15,40
-NISP,NA,pollen,2911,NA,Vascular plants,pollen,Symphytum,UPHE,21,43
-NISP,NA,pollen,2912,NA,Vascular plants,pollen,Symphytum-type,UPHE,2,4
-NISP,NA,pollen,2915,NA,Vascular plants,pollen,Astragalus alpinus-type,UPHE,1,1
-NISP,NA,pollen,2918,NA,Vascular plants,pollen,Cirsium-type,UPHE,41,416
-NISP,NA,pollen,2919,NA,Vascular plants,pollen,Elatine,AQVP,7,13
-NISP,NA,pollen,2925,NA,Vascular plants,pollen,Frangula,TRSH,27,188
-NISP,NA,pollen,2927,NA,Vascular plants,pollen,Mercurialis,UPHE,8,14
-NISP,NA,pollen,2930,NA,Vascular plants,pollen,Rhinanthus,UPHE,9,51
-NISP,NA,pollen,2931,NA,Vascular plants,pollen,Rhinanthus-type,UPHE,2,5
-NISP,NA,pollen,2932,NA,Vascular plants,pollen,Spergula,UPHE,2,8
-NISP,NA,pollen,2934,NA,Vascular plants,pollen,Spergula-type,UPHE,1,1
-NISP,NA,pollen,2935,NA,Vascular plants,pollen,Spergularia-type,UPHE,1,1
-NISP,NA,pollen,2938,NA,Vascular plants,pollen,Vicia,UPHE,1,10
-NISP,NA,pollen,2948,NA,Vascular plants,pollen,Brassicaceae-type,UPHE,6,153
-NISP,NA,pollen,3052,NA,Vascular plants,pollen,Eryngium,UPHE,2,31
-NISP,NA,pollen,3124,NA,Vascular plants,pollen,Ranunculus aquatilis-type,AQVP,1,3
-NISP,NA,pollen,3171,NA,Vascular plants,pollen,Persicaria lapathifolia,UPHE,1,1
-NISP,NA,pollen,3172,NA,Vascular plants,pollen,Rumex acetosella,UPHE,20,252
-NISP,NA,pollen,3180,NA,Vascular plants,pollen,Erodium,UPHE,4,5
-NISP,NA,pollen,3208,NA,Vascular plants,pollen,Betula nana,TRSH,8,177
-NISP,NA,pollen,3408,NA,Vascular plants,pollen,Teucrium,UPHE,3,16
-NISP,NA,pollen,3411,NA,Vascular plants,pollen,Ulex-type,TRSH,1,1
-NISP,NA,pollen,3417,NA,Vascular plants,pollen,Glaucium,UPHE,2,7
-NISP,NA,pollen,3418,NA,Vascular plants,pollen,Plantago media-type,UPHE,3,6
-NISP,NA,pollen,3421,NA,Vascular plants,pollen,Ephedra distachya,TRSH,10,35
-NISP,NA,pollen,3422,NA,Vascular plants,pollen,Ephedra fragilis,TRSH,4,25
-NISP,NA,pollen,3423,NA,Vascular plants,pollen,Gypsophila-type,UPHE,4,40
-NISP,NA,pollen,3426,NA,Vascular plants,pollen,Pinus cembra,TRSH,6,85
-NISP,NA,pollen,3428,NA,Vascular plants,pollen,Sagina-type,UPHE,2,2
-NISP,NA,pollen,3430,NA,Vascular plants,pollen,Veronica-type,UPHE,4,23
-NISP,NA,pollen,3432,NA,Vascular plants,pollen,Fallopia convolvulus,UPHE,3,3
-NISP,NA,pollen,3434,NA,Vascular plants,pollen,Nymphaea alba,AQVP,2,62
-NISP,NA,pollen,3437,NA,Vascular plants,pollen,Alisma plantago-aquatica,AQVP,1,8
-NISP,NA,pollen,3438,NA,Vascular plants,pollen,Anthemis-type,UPHE,13,331
-NISP,NA,pollen,3439,NA,Vascular plants,pollen,Aster-type,UPHE,9,152
-NISP,NA,pollen,3440,NA,Vascular plants,pollen,Centaurea jacea,UPHE,11,57
-NISP,NA,pollen,3441,NA,Vascular plants,pollen,Centaurea scabiosa,UPHE,22,74
-NISP,NA,pollen,3444,NA,Vascular plants,pollen,Epipactis,UPHE,1,1
-NISP,NA,pollen,3445,NA,Vascular plants,pollen,Rumex subg. Rumex,UPHE,2,2
-NISP,NA,pollen,3446,NA,Vascular plants,pollen,Galeopsis,UPHE,1,2
-NISP,NA,pollen,3447,NA,Vascular plants,pollen,Galeopsis-type,UPHE,2,2
-NISP,NA,pollen,3449,NA,Vascular plants,pollen,Genista-type,TRSH,7,19
-NISP,NA,pollen,3450,NA,Vascular plants,pollen,Lamium-type,UPHE,21,85
-NISP,NA,pollen,3455,NA,Vascular plants,pollen,Sorbus-type,TRSH,8,80
-NISP,NA,pollen,3462,NA,Vascular plants,pollen,Betula pubescens,TRSH,1,29
-NISP,NA,pollen,3465,NA,Vascular plants,pollen,Echium vulgare,UPHE,2,3
-NISP,NA,pollen,3472,NA,Vascular plants,pollen,Tilia cordata,TRSH,9,144
-NISP,NA,pollen,3473,NA,Vascular plants,pollen,Tilia platyphyllos,TRSH,10,106
-NISP,NA,pollen,3561,NA,Vascular plants,pollen,Aconitum-type,UPHE,1,3
-NISP,NA,pollen,3566,NA,Vascular plants,pollen,Centaurea cyanus-type,UPHE,7,35
-NISP,NA,pollen,3567,NA,Vascular plants,pollen,Centaurea scabiosa-type,UPHE,7,14
-NISP,NA,pollen,3570,NA,Vascular plants,pollen,Cornus sanguinea,TRSH,17,50
-NISP,NA,pollen,3572,NA,Vascular plants,pollen,Ephedra distachya-type,TRSH,9,30
-NISP,NA,pollen,3578,NA,Vascular plants,pollen,Ephedra fragilis-type,TRSH,10,37
-NISP,NA,pollen,3579,NA,Vascular plants,pollen,Fraxinus excelsior,TRSH,14,484
-NISP,NA,pollen,3580,NA,Vascular plants,pollen,Fraxinus ornus,TRSH,1,1
-NISP,NA,pollen,3581,NA,Vascular plants,pollen,Helleborus,UPHE,1,1
-NISP,NA,pollen,3582,NA,Vascular plants,pollen,Hypericum perforatum-type,UPHE,3,50
-NISP,NA,pollen,3583,NA,Vascular plants,pollen,Loranthus,TRSH,8,18
-NISP,NA,pollen,3584,NA,Vascular plants,pollen,Matricaria-type,UPHE,1,20
-NISP,NA,pollen,3591,NA,Vascular plants,pollen,Plantago maritima-type,UPHE,3,12
-NISP,NA,pollen,3597,NA,Vascular plants,pollen,Sambucus nigra-type,TRSH,10,63
-NISP,NA,pollen,3600,NA,Vascular plants,pollen,Solanum dulcamara,UPHE,9,57
-NISP,NA,pollen,3625,NA,Vascular plants,pollen,Gentianaceae undiff.,UPHE,1,1
-NISP,NA,pollen,3641,NA,Vascular plants,pollen,Platycarya,TRSH,1,1
-NISP,NA,pollen,3643,NA,Vascular plants,pollen,Betula nana-type,TRSH,1,42
-NISP,NA,pollen,3644,NA,Vascular plants,pollen,Abies alba,TRSH,23,836
-NISP,NA,pollen,3645,NA,Vascular plants,pollen,Barbarea-type,UPHE,17,186
-NISP,NA,pollen,3689,NA,Vascular plants,pollen,Cardamine pratensis-type,UPHE,13,163
-NISP,NA,pollen,3690,NA,Vascular plants,pollen,Chrysosplenium,UPHE,20,88
-NISP,NA,pollen,3691,NA,Vascular plants,pollen,Ephedra foeminea-type,TRSH,3,6
-NISP,NA,pollen,3693,NA,Vascular plants,pollen,Larix decidua,TRSH,2,3
-NISP,NA,pollen,3696,NA,Vascular plants,pollen,Lysimachia vulgaris-type,UPHE,19,142
-NISP,NA,pollen,3697,NA,Vascular plants,pollen,Lysimachia vulgaris,UPHE,7,21
-NISP,NA,pollen,3699,NA,Vascular plants,pollen,Parnassia palustris,UPHE,16,37
-NISP,NA,pollen,3700,NA,Vascular plants,pollen,Petasites-type,UPHE,13,185
-NISP,NA,pollen,3701,NA,Vascular plants,pollen,Pleurospermum,UPHE,2,2
-NISP,NA,pollen,3702,NA,Vascular plants,pollen,Ranunculus arvensis-type,UPHE,1,16
-NISP,NA,pollen,3703,NA,Vascular plants,pollen,Silene-type,UPHE,23,126
-NISP,NA,pollen,3704,NA,Vascular plants,pollen,Trifolium pratense-type,UPHE,22,85
-NISP,NA,pollen,3705,NA,Vascular plants,pollen,Hordeum-type,UPHE,7,74
-NISP,NA,pollen,3737,NA,Vascular plants,pollen,Achillea,UPHE,1,1
-NISP,NA,pollen,3749,NA,Vascular plants,pollen,Agrimonia,UPHE,1,1
-NISP,NA,pollen,3757,NA,Vascular plants,pollen,Alchemilla-type,UPHE,4,56
-NISP,NA,pollen,3770,NA,Vascular plants,pollen,Alnus glutinosa-type,TRSH,5,172
-NISP,NA,pollen,3771,NA,Vascular plants,pollen,Alnus glutinosa/A. incana,TRSH,1,94
-NISP,NA,pollen,3773,NA,Vascular plants,pollen,Anagallis arvensis-type,UPHE,2,7
-NISP,NA,pollen,3774,NA,Vascular plants,pollen,Anagallis tenella-type,UPHE,1,1
-NISP,NA,pollen,3777,NA,Vascular plants,pollen,Anagallis arvensis,UPHE,1,2
-NISP,NA,pollen,3778,NA,Vascular plants,pollen,Anagallis,UPHE,2,3
-NISP,NA,pollen,3785,NA,Vascular plants,pollen,Anthericum,UPHE,3,6
-NISP,NA,pollen,3787,NA,Vascular plants,pollen,Anthericum-type,UPHE,1,4
-NISP,NA,pollen,3790,NA,Vascular plants,pollen,Anchusa/Pulmonaria,UPHE,1,1
-NISP,NA,pollen,3791,NA,Vascular plants,pollen,Pulmonaria,UPHE,1,1
-NISP,NA,pollen,3792,NA,Vascular plants,pollen,Pulmonaria-type,UPHE,6,9
-NISP,NA,pollen,3801,NA,Vascular plants,pollen,Anthriscus caucalis,UPHE,1,1
-NISP,NA,pollen,3802,NA,Vascular plants,pollen,Anthriscus sylvestris-type,UPHE,4,24
-NISP,NA,pollen,3803,NA,Vascular plants,pollen,Anthriscus-type,UPHE,1,1
-NISP,NA,pollen,3804,NA,Vascular plants,pollen,Anthriscus sylvestris,UPHE,1,8
-NISP,NA,pollen,3805,NA,Vascular plants,pollen,Anthyllis,UPHE,2,4
-NISP,NA,pollen,3814,NA,Vascular plants,pollen,Silene dioica-type,UPHE,8,18
-NISP,NA,pollen,3815,NA,Vascular plants,pollen,Silene vulgaris-type,UPHE,8,19
-NISP,NA,pollen,3832,NA,Vascular plants,pollen,Apium-type,UPHE,1,30
-NISP,NA,pollen,3833,NA,Vascular plants,pollen,Apium inundatum-type,UPHE,1,1
-NISP,NA,pollen,3837,NA,Vascular plants,pollen,Arctium,UPHE,1,1
-NISP,NA,pollen,3846,NA,Vascular plants,pollen,Cirsium/Carduus,UPHE,4,49
-NISP,NA,pollen,3849,NA,Vascular plants,pollen,Arctous alpina,TRSH,1,1
-NISP,NA,pollen,3852,NA,Vascular plants,pollen,Arctostaphylos uva-ursi-type,TRSH,1,1
-NISP,NA,pollen,3853,NA,Vascular plants,pollen,Armeria maritima-type,UPHE,1,1
-NISP,NA,pollen,3855,NA,Vascular plants,pollen,Armeria maritima (type B),UPHE,2,3
-NISP,NA,pollen,3857,NA,Vascular plants,pollen,Armeria maritima (type A),UPHE,2,3
-NISP,NA,pollen,3881,NA,Vascular plants,pollen,Aruncus,UPHE,1,1
-NISP,NA,pollen,3897,NA,Vascular plants,pollen,Astragalus danicus-type,UPHE,3,8
-NISP,NA,pollen,3901,NA,Vascular plants,pollen,Vicia cracca-type,UPHE,1,1
-NISP,NA,pollen,3917,NA,Vascular plants,pollen,Avena/Triticum-type,UPHE,1,2
-NISP,NA,pollen,3923,NA,Vascular plants,pollen,Hordeum,UPHE,1,3
-NISP,NA,pollen,3926,NA,Vascular plants,pollen,Secale cereale,UPHE,32,408
-NISP,NA,pollen,3950,NA,Vascular plants,pollen,Fallopia convolvulus-type,UPHE,3,3
-NISP,NA,pollen,3952,NA,Vascular plants,pollen,Fallopia convolvulus/F. dumetorum,UPHE,1,9
-NISP,NA,pollen,3967,NA,Vascular plants,pollen,Bupleurum falcatum-type,UPHE,1,2
-NISP,NA,pollen,3969,NA,Vascular plants,pollen,Butomus-type,AQVP,1,2
-NISP,NA,pollen,3970,NA,Vascular plants,pollen,Butomus,AQVP,6,37
-NISP,NA,pollen,3974,NA,Vascular plants,pollen,Caltha palustris-type,AQVP,1,1
-NISP,NA,pollen,3982,NA,Vascular plants,pollen,Campanula rapunculoides,UPHE,1,3
-NISP,NA,pollen,3988,NA,Vascular plants,pollen,Scilla-type,UPHE,1,1
-NISP,NA,pollen,3996,NA,Vascular plants,pollen,Castanea-type,TRSH,3,15
-NISP,NA,pollen,4001,NA,Vascular plants,pollen,Centaurea jacea-type,UPHE,31,136
-NISP,NA,pollen,4003,NA,Vascular plants,pollen,Centaurea montana-type,UPHE,1,1
-NISP,NA,pollen,4005,NA,Vascular plants,pollen,Centaurea nigra-type,UPHE,2,2
-NISP,NA,pollen,4034,NA,Vascular plants,pollen,Cerastium fontanum-type,UPHE,1,7
-NISP,NA,pollen,4047,NA,Vascular plants,pollen,Dryas octopetala,UPHE,3,15
-NISP,NA,pollen,4053,NA,Vascular plants,pollen,Rumex acetosa,UPHE,10,86
-NISP,NA,pollen,4054,NA,Vascular plants,pollen,Rumex aquaticus-type,UPHE,1,3
-NISP,NA,pollen,4059,NA,Vascular plants,pollen,Rumex obtusifolius,UPHE,3,6
-NISP,NA,pollen,4071,NA,Vascular plants,pollen,Rumex maritimus-type,UPHE,1,1
-NISP,NA,pollen,4076,NA,Vascular plants,pollen,cf. Papaver,UPHE,1,10
-NISP,NA,pollen,4079,NA,Vascular plants,pollen,Papaver rhoeas-type,UPHE,2,3
-NISP,NA,pollen,4085,NA,Vascular plants,pollen,Pedicularis palustris-type,UPHE,1,1
-NISP,NA,pollen,4092,NA,Vascular plants,pollen,Rhinanthus/Veronica,UPHE,1,6
-NISP,NA,pollen,4093,NA,Vascular plants,pollen,Veronica beccabunga-type,AQVP,2,4
-NISP,NA,pollen,4094,NA,Vascular plants,pollen,Veronica beccabunga,AQVP,1,8
-NISP,NA,pollen,4098,NA,Vascular plants,pollen,Saussurea-type,UPHE,1,1
-NISP,NA,pollen,4102,NA,Vascular plants,pollen,Sedum-type,UPHE,2,2
-NISP,NA,pollen,4117,NA,Vascular plants,pollen,Digitalis purpurea-type,UPHE,1,1
-NISP,NA,pollen,4122,NA,Vascular plants,pollen,cf. Lobelia,UPHE,1,1
-NISP,NA,pollen,4123,NA,Vascular plants,pollen,Scrophularia-type,UPHE,3,7
-NISP,NA,pollen,4125,NA,Vascular plants,pollen,Scrophularia,UPHE,3,8
-NISP,NA,pollen,4130,NA,Vascular plants,pollen,Chrysosplenium-type,UPHE,4,24
-NISP,NA,pollen,4133,NA,Vascular plants,pollen,Cicuta virosa,UPHE,2,11
-NISP,NA,pollen,4136,NA,Vascular plants,pollen,Convolvulus arvensis,UPHE,9,46
-NISP,NA,pollen,4153,NA,Vascular plants,pollen,Helianthemum nummularium-type,UPHE,1,3
-NISP,NA,pollen,4157,NA,Vascular plants,pollen,Helianthemum oelandicum subsp. alpestris-type,UPHE,1,1
-NISP,NA,pollen,4162,NA,Vascular plants,pollen,Cladium mariscus,AQVP,2,7
-NISP,NA,pollen,4172,NA,Vascular plants,pollen,Convallaria,UPHE,1,1
-NISP,NA,pollen,4175,NA,Vascular plants,pollen,Cornus suecica,TRSH,1,1
-NISP,NA,pollen,4178,NA,Vascular plants,pollen,Cornus mas,TRSH,10,72
-NISP,NA,pollen,4200,NA,Vascular plants,pollen,Cuscuta europaea-type,UPHE,2,31
-NISP,NA,pollen,4221,NA,Vascular plants,pollen,Daucus-type,UPHE,11,320
-NISP,NA,pollen,4222,NA,Vascular plants,pollen,Daucus carota,UPHE,1,1
-NISP,NA,pollen,4223,NA,Vascular plants,pollen,Daucus,UPHE,1,1
-NISP,NA,pollen,4226,NA,Vascular plants,pollen,Dianthus,UPHE,3,3
-NISP,NA,pollen,4238,NA,Vascular plants,pollen,Echium-type,UPHE,2,2
-NISP,NA,pollen,4260,NA,Vascular plants,pollen,Erica ciliaris-type,TRSH,1,2
-NISP,NA,pollen,4266,NA,Vascular plants,pollen,Ephedra foeminea,TRSH,1,1
-NISP,NA,pollen,4270,NA,Vascular plants,pollen,Ephedra cf. E. foeminea,TRSH,3,7
-NISP,NA,pollen,4273,NA,Vascular plants,pollen,Ephedra cf. E. fragilis,TRSH,1,1
-NISP,NA,pollen,4274,NA,Vascular plants,pollen,Ephedra cf. E. distachya,TRSH,1,7
-NISP,NA,pollen,4279,NA,Vascular plants,pollen,Eriophorum,AQVP,1,1
-NISP,NA,pollen,4282,NA,Vascular plants,pollen,Euonymus europaeus,TRSH,1,5
-NISP,NA,pollen,4286,NA,Vascular plants,pollen,Euphrasia-type,UPHE,2,3
-NISP,NA,pollen,4287,NA,Vascular plants,pollen,Fagopyrum-type,UPHE,4,12
-NISP,NA,pollen,4316,NA,Vascular plants,pollen,Genista,TRSH,1,2
-NISP,NA,pollen,4330,NA,Vascular plants,pollen,Gentiana cruciata-type,UPHE,1,1
-NISP,NA,pollen,4336,NA,Vascular plants,pollen,Gentianella campestris-type,UPHE,4,10
-NISP,NA,pollen,4341,NA,Vascular plants,pollen,Geranium-type,UPHE,1,9
-NISP,NA,pollen,4358,NA,Vascular plants,pollen,Gnaphalium-type,UPHE,11,82
-NISP,NA,pollen,4359,NA,Vascular plants,pollen,Gypsophila,UPHE,5,16
-NISP,NA,pollen,4361,NA,Vascular plants,pollen,Gypsophila repens-type,UPHE,4,26
-NISP,NA,pollen,4366,NA,Vascular plants,pollen,Gypsophila repens,UPHE,1,1
-NISP,NA,pollen,4367,NA,Vascular plants,pollen,Hedera helix,TRSH,26,128
-NISP,NA,pollen,4373,NA,Vascular plants,pollen,Heracleum-type,UPHE,6,25
-NISP,NA,pollen,4374,NA,Vascular plants,pollen,Heracleum sphondylium,UPHE,2,6
-NISP,NA,pollen,4377,NA,Vascular plants,pollen,Herniaria,UPHE,1,1
-NISP,NA,pollen,4378,NA,Vascular plants,pollen,Herniaria-type,UPHE,2,2
-NISP,NA,pollen,4389,NA,Vascular plants,pollen,Hottonia palustris,AQVP,1,5
-NISP,NA,pollen,4392,NA,Vascular plants,pollen,Samolus valerandi,AQVP,1,1
-NISP,NA,pollen,4395,NA,Vascular plants,pollen,Hydrocotyle vulgaris,AQVP,1,5
-NISP,NA,pollen,4409,NA,Vascular plants,pollen,Iris pseudacorus-type,UPHE,2,3
-NISP,NA,pollen,4410,NA,Vascular plants,pollen,Iris-type,UPHE,3,11
-NISP,NA,pollen,4411,NA,Vascular plants,pollen,Iris pseudacorus,UPHE,1,1
-NISP,NA,pollen,4412,NA,Vascular plants,pollen,Jasione montana,UPHE,8,11
-NISP,NA,pollen,4414,NA,Vascular plants,pollen,Jasione-type,UPHE,1,2
-NISP,NA,pollen,4416,NA,Vascular plants,pollen,Juniperus communis,TRSH,1,4
-NISP,NA,pollen,4421,NA,Vascular plants,pollen,Succisa pratensis,UPHE,8,9
-NISP,NA,pollen,4422,NA,Vascular plants,pollen,Succisa-type,UPHE,1,2
-NISP,NA,pollen,4430,NA,Vascular plants,pollen,Larix-type,TRSH,1,10
-NISP,NA,pollen,4431,NA,Vascular plants,pollen,Rhododendron tomentosum,TRSH,4,30
-NISP,NA,pollen,4448,NA,Vascular plants,pollen,Linum catharticum,UPHE,12,22
-NISP,NA,pollen,4449,NA,Vascular plants,pollen,Linum catharticum-type,UPHE,1,2
-NISP,NA,pollen,4451,NA,Vascular plants,pollen,Linum usitatissimum-type,UPHE,3,6
-NISP,NA,pollen,4455,NA,Vascular plants,pollen,Linum flavum,UPHE,1,2
-NISP,NA,pollen,4457,NA,Vascular plants,pollen,Linum austriacum-type,UPHE,2,2
-NISP,NA,pollen,4459,NA,Vascular plants,pollen,Listera-type,UPHE,2,12
-NISP,NA,pollen,4462,NA,Vascular plants,pollen,Lithospermum officinale,UPHE,1,2
-NISP,NA,pollen,4464,NA,Vascular plants,pollen,Lonicera periclymenum,TRSH,2,2
-NISP,NA,pollen,4469,NA,Vascular plants,pollen,Lonicera xylosteum,TRSH,3,3
-NISP,NA,pollen,4474,NA,Vascular plants,pollen,Loranthus europaeus,TRSH,2,2
-NISP,NA,pollen,4477,NA,Vascular plants,pollen,Lotus cf. L. corniculatus,UPHE,1,1
-NISP,NA,pollen,4488,NA,Vascular plants,pollen,Lysimachia nemorum,UPHE,1,3
-NISP,NA,pollen,4489,NA,Vascular plants,pollen,Lysimachia-type,UPHE,9,62
-NISP,NA,pollen,4490,NA,Vascular plants,pollen,Lysimachia cf. L. vulgaris,UPHE,1,1
-NISP,NA,pollen,4492,NA,Vascular plants,pollen,Lysimachia nemorum-type,UPHE,1,1
-NISP,NA,pollen,4494,NA,Vascular plants,pollen,Lythrum portula-type,UPHE,3,5
-NISP,NA,pollen,4497,NA,Vascular plants,pollen,Lythrum-type,UPHE,1,20
-NISP,NA,pollen,4502,NA,Vascular plants,pollen,Maianthemum bifolium,UPHE,1,4
-NISP,NA,pollen,4505,NA,Vascular plants,pollen,Malus,TRSH,2,2
-NISP,NA,pollen,4506,NA,Vascular plants,pollen,Malus-type,TRSH,1,3
-NISP,NA,pollen,4520,NA,Vascular plants,pollen,Malva-type,UPHE,1,2
-NISP,NA,pollen,4521,NA,Vascular plants,pollen,Marrubium,UPHE,1,1
-NISP,NA,pollen,4530,NA,Vascular plants,pollen,Menyanthes trifoliata-type,AQVP,2,3
-NISP,NA,pollen,4536,NA,Vascular plants,pollen,Mercurialis perennis-type,UPHE,2,3
-NISP,NA,pollen,4546,NA,Vascular plants,pollen,Muscari,UPHE,1,1
-NISP,NA,pollen,4548,NA,Vascular plants,pollen,Myosotis arvensis-type,UPHE,1,2
-NISP,NA,pollen,4550,NA,Vascular plants,pollen,Myricaria germanica,TRSH,1,1
-NISP,NA,pollen,4553,NA,Vascular plants,pollen,Myriophyllum cf. M. spicatum,AQVP,1,19
-NISP,NA,pollen,4554,NA,Vascular plants,pollen,Myriophyllum cf. M. verticillatum,AQVP,1,2
-NISP,NA,pollen,4570,NA,Vascular plants,pollen,Nymphaea cf. N. candida,AQVP,1,61
-NISP,NA,pollen,4573,NA,Vascular plants,pollen,Nymphaea alba-type,AQVP,1,5
-NISP,NA,pollen,4578,NA,Vascular plants,pollen,Odontites,UPHE,2,4
-NISP,NA,pollen,4580,NA,Vascular plants,pollen,Odontites-type,UPHE,3,66
-NISP,NA,pollen,4585,NA,Vascular plants,pollen,Onobrychis,UPHE,4,25
-NISP,NA,pollen,4588,NA,Vascular plants,pollen,Ononis,UPHE,1,1
-NISP,NA,pollen,4591,NA,Vascular plants,pollen,Ornithogalum-type,UPHE,1,5
-NISP,NA,pollen,4599,NA,Vascular plants,pollen,Phragmites,AQVP,2,22
-NISP,NA,pollen,4600,NA,Vascular plants,pollen,Phragmites-type,AQVP,5,219
-NISP,NA,pollen,4602,NA,Vascular plants,pollen,Phragmites australis,AQVP,2,11
-NISP,NA,pollen,4608,NA,Vascular plants,pollen,Pimpinella major-type,UPHE,12,136
-NISP,NA,pollen,4611,NA,Vascular plants,pollen,Pimpinella anisum,UPHE,1,1
-NISP,NA,pollen,4615,NA,Vascular plants,pollen,Pinus subg. Strobus-type,TRSH,1,27
-NISP,NA,pollen,4620,NA,Vascular plants,pollen,Pinus sylvestris-type,TRSH,2,80
-NISP,NA,pollen,4626,NA,Vascular plants,pollen,Pinus cembra-type,TRSH,3,9
-NISP,NA,pollen,4633,NA,Vascular plants,pollen,Pisum sativum,UPHE,4,21
-NISP,NA,pollen,4635,NA,Vascular plants,pollen,Plantago coronopus,UPHE,2,2
-NISP,NA,pollen,4639,NA,Vascular plants,pollen,Plantago alpina-type,UPHE,3,22
-NISP,NA,pollen,4642,NA,Vascular plants,pollen,Plantago atrata-type,UPHE,1,1
-NISP,NA,pollen,4647,NA,Vascular plants,pollen,Plantago alpina,UPHE,6,26
-NISP,NA,pollen,4663,NA,Vascular plants,pollen,Pleurospermum austriacum,UPHE,13,22
-NISP,NA,pollen,4664,NA,Vascular plants,pollen,Pleurospermum austriacum-type,UPHE,1,2
-NISP,NA,pollen,4666,NA,Vascular plants,pollen,Polemonium caeruleum,UPHE,5,10
-NISP,NA,pollen,4704,NA,Vascular plants,pollen,Primula farinosa-type,UPHE,1,2
-NISP,NA,pollen,4708,NA,Vascular plants,pollen,Primula veris-type,UPHE,4,12
-NISP,NA,pollen,4712,NA,Vascular plants,pollen,Pterocarya fraxinifolia,TRSH,1,2
-NISP,NA,pollen,4716,NA,Vascular plants,pollen,Quercus coccifera,TRSH,2,24
-NISP,NA,pollen,4729,NA,Vascular plants,pollen,Ranunculus flammula-type,UPHE,1,9
-NISP,NA,pollen,4736,NA,Vascular plants,pollen,Ranunculus arvensis,UPHE,4,4
-NISP,NA,pollen,4747,NA,Vascular plants,pollen,Reseda,UPHE,1,2
-NISP,NA,pollen,4748,NA,Vascular plants,pollen,Reseda lutea-type,UPHE,1,1
-NISP,NA,pollen,4758,NA,Vascular plants,pollen,Ribes alpinum,TRSH,1,2
-NISP,NA,pollen,4759,NA,Vascular plants,pollen,Rosa-type,UPHE,1,3
-NISP,NA,pollen,4770,NA,Vascular plants,pollen,Sagina,UPHE,3,4
-NISP,NA,pollen,4782,NA,Vascular plants,pollen,Sambucus ebulus,TRSH,5,10
-NISP,NA,pollen,4783,NA,Vascular plants,pollen,Sambucus nigra,TRSH,18,121
-NISP,NA,pollen,4784,NA,Vascular plants,pollen,Sambucus racemosa,TRSH,12,30
-NISP,NA,pollen,4786,NA,Vascular plants,pollen,Sambucus cf. S. nigra,TRSH,6,40
-NISP,NA,pollen,4789,NA,Vascular plants,pollen,Sambucus cf. S. ebulus,TRSH,1,1
-NISP,NA,pollen,4790,NA,Vascular plants,pollen,Sambucus cf. S. racemosa,TRSH,4,10
-NISP,NA,pollen,4796,NA,Vascular plants,pollen,Sanguisorba minor-type,UPHE,1,5
-NISP,NA,pollen,4803,NA,Vascular plants,pollen,Saxifraga granulata-type,UPHE,3,7
-NISP,NA,pollen,4805,NA,Vascular plants,pollen,Saxifraga hirculus-type,UPHE,1,3
-NISP,NA,pollen,4809,NA,Vascular plants,pollen,Micranthes stellaris,UPHE,2,15
-NISP,NA,pollen,4814,NA,Vascular plants,pollen,Saxifraga granulata,UPHE,1,5
-NISP,NA,pollen,4818,NA,Vascular plants,pollen,Saxifraga aizoides-type,UPHE,2,2
-NISP,NA,pollen,4827,NA,Vascular plants,pollen,Scabiosa columbaria-type,UPHE,1,1
-NISP,NA,pollen,4836,NA,Vascular plants,pollen,Sciadopitys,TRSH,2,18
-NISP,NA,pollen,4845,NA,Vascular plants,pollen,Scleranthus annuus,UPHE,3,6
-NISP,NA,pollen,4853,NA,Vascular plants,pollen,Serratula-type,UPHE,1,1
-NISP,NA,pollen,4854,NA,Vascular plants,pollen,Serratula,UPHE,1,4
-NISP,NA,pollen,4856,NA,Vascular plants,pollen,Sinapis-type,UPHE,1,2
-NISP,NA,pollen,4860,NA,Vascular plants,pollen,Solanum cf. S. nigrum,UPHE,1,1
-NISP,NA,pollen,4862,NA,Vascular plants,pollen,Solanum nigrum,UPHE,1,3
-NISP,NA,pollen,4863,NA,Vascular plants,pollen,Solanum nigrum-type,UPHE,6,14
-NISP,NA,pollen,4865,NA,Vascular plants,pollen,Stratiotes aloides,AQVP,3,3
-NISP,NA,pollen,4870,NA,Vascular plants,pollen,Taxus baccata,TRSH,2,10
-NISP,NA,pollen,4877,NA,Vascular plants,pollen,Thesium,UPHE,4,11
-NISP,NA,pollen,4884,NA,Vascular plants,pollen,Tilia undiff.,TRSH,4,50
-NISP,NA,pollen,4891,NA,Vascular plants,pollen,Sparganium erectum,AQVP,2,19
-NISP,NA,pollen,4906,NA,Vascular plants,pollen,Trapa natans,AQVP,3,28
-NISP,NA,pollen,4907,NA,Vascular plants,pollen,Trientalis europaea,UPHE,2,3
-NISP,NA,pollen,4922,NA,Vascular plants,pollen,Trollius,UPHE,5,16
-NISP,NA,pollen,4923,NA,Vascular plants,pollen,Trollius europaeus,UPHE,11,27
-NISP,NA,pollen,4925,NA,Vascular plants,pollen,Trollius-type,UPHE,1,1
-NISP,NA,pollen,4933,NA,Vascular plants,pollen,Ulmus/Zelkova,TRSH,1,3
-NISP,NA,pollen,4955,NA,Vascular plants,pollen,Valeriana dioica,UPHE,1,2
-NISP,NA,pollen,4956,NA,Vascular plants,pollen,Valeriana officinalis-type,UPHE,8,28
-NISP,NA,pollen,4959,NA,Vascular plants,pollen,Valeriana cf. V. dioica,UPHE,1,2
-NISP,NA,pollen,4961,NA,Vascular plants,pollen,Valeriana dioica-type,UPHE,8,24
-NISP,NA,pollen,4964,NA,Vascular plants,pollen,Verbascum,UPHE,9,18
-NISP,NA,pollen,4968,NA,Vascular plants,pollen,Viburnum lantana,TRSH,2,4
-NISP,NA,pollen,4973,NA,Vascular plants,pollen,Viola palustris-type,AQVP,5,10
-NISP,NA,pollen,4975,NA,Vascular plants,pollen,Viola tricolor,UPHE,1,1
-NISP,NA,pollen,4976,NA,Vascular plants,pollen,Viola palustris,AQVP,5,10
-NISP,NA,pollen,5066,NA,Vascular plants,pollen,cf. Lamiaceae,UPHE,1,19
-NISP,NA,pollen,5073,NA,Vascular plants,pollen,Scutellaria,UPHE,1,3
-NISP,NA,pollen,5090,NA,Vascular plants,pollen,Glyceria-type,UPHE,5,21
-NISP,NA,pollen,5092,NA,Vascular plants,pollen,Sanicula europaea,UPHE,1,1
-NISP,NA,pollen,5094,NA,Vascular plants,pollen,Sanicula-type,UPHE,1,1
-NISP,NA,pollen,5146,NA,Vascular plants,pollen,Anemone nemorosa-type,UPHE,15,108
-NISP,NA,pollen,5150,NA,Vascular plants,pollen,Veratrum-type,UPHE,2,18
-NISP,NA,pollen,5151,NA,Vascular plants,pollen,Veratrum,UPHE,5,9
-NISP,NA,pollen,5152,NA,Vascular plants,pollen,Veratrum album,UPHE,1,1
-NISP,NA,pollen,5191,NA,Vascular plants,pollen,Oenanthe-type,AQVP,1,1
-NISP,NA,pollen,5192,NA,Vascular plants,pollen,Oenanthe,AQVP,4,16
-NISP,NA,pollen,5223,NA,Vascular plants,pollen,Chelidonium,UPHE,3,6
-NISP,NA,pollen,5224,NA,Vascular plants,pollen,Chelidonium majus,UPHE,1,2
-NISP,NA,pollen,5225,NA,Vascular plants,pollen,Polygonatum,UPHE,2,2
-NISP,NA,pollen,5232,NA,Vascular plants,pollen,Peucedanum palustre-type,UPHE,1,25
-NISP,NA,pollen,5233,NA,Vascular plants,pollen,Peucedanum-type,UPHE,12,207
-NISP,NA,pollen,5234,NA,Vascular plants,pollen,Peucedanum,UPHE,1,16
-NISP,NA,pollen,5257,NA,Vascular plants,pollen,Hyoscyamus,UPHE,1,6
-NISP,NA,pollen,5299,NA,Vascular plants,pollen,Cerinthe,UPHE,2,3
-NISP,NA,pollen,5300,NA,Vascular plants,pollen,Cerinthe minor,UPHE,1,1
-NISP,NA,pollen,5310,NA,Vascular plants,pollen,Androsace-type,UPHE,1,1
-NISP,NA,pollen,5315,NA,Vascular plants,pollen,Crupina,UPHE,1,1
-NISP,NA,pollen,5316,NA,Vascular plants,pollen,Phyteuma-type,UPHE,1,4
-NISP,NA,pollen,5342,NA,Vascular plants,pollen,Astrantia-type,UPHE,4,8
-NISP,NA,pollen,5353,NA,Vascular plants,pollen,Swertia perennis,UPHE,2,2
-NISP,NA,pollen,5357,NA,Vascular plants,pollen,Agrostemma githago,UPHE,10,29
-NISP,NA,pollen,5360,NA,Vascular plants,pollen,Petasites,UPHE,3,52
-NISP,NA,pollen,5375,NA,Vascular plants,pollen,Chaerophyllum,UPHE,1,1
-NISP,NA,pollen,5410,NA,Vascular plants,pollen,Succisella,UPHE,1,1
-NISP,NA,pollen,5465,NA,Vascular plants,pollen,Lamiaceae (tricolpate),UPHE,1,17
-NISP,NA,pollen,5496,NA,Vascular plants,pollen,Laserpitium,UPHE,1,2
-NISP,NA,pollen,5614,NA,Vascular plants,pollen,Betula pubescens-type,TRSH,2,80
-NISP,NA,pollen,5621,NA,Vascular plants,pollen,Chaerophyllum hirsutum-type,UPHE,6,45
-NISP,NA,pollen,5633,NA,Vascular plants,pollen,Falcaria vulgaris,UPHE,1,1
-NISP,NA,pollen,5639,NA,Vascular plants,pollen,Heliotropium europaeum,UPHE,1,9
-NISP,NA,pollen,5642,NA,Vascular plants,pollen,Ludwigia palustris,AQVP,1,3
-NISP,NA,pollen,5674,NA,Vascular plants,pollen,Phyteuma,UPHE,6,11
-NISP,NA,pollen,5750,NA,Vascular plants,pollen,Ailanthus,TRSH,2,10
-NISP,NA,pollen,5804,NA,Vascular plants,pollen,Plantago major/P. media-type,UPHE,8,50
-NISP,NA,pollen,5812,NA,Vascular plants,pollen,Rumex acetosa/R. acetosella,UPHE,1,29
-NISP,NA,pollen,5823,NA,Vascular plants,pollen,Cannabis-type,UPHE,11,180
-NISP,NA,pollen,9125,NA,Vascular plants,pollen,Vaccinioideae,TRSH,11,95
-NISP,NA,pollen,9505,NA,Vascular plants,pollen,Menyanthes,AQVP,7,32
-NISP,NA,pollen,9515,NA,Vascular plants,pollen,Persicaria,UPHE,1,2
-NISP,NA,pollen,9517,NA,Vascular plants,pollen,Bistorta,UPHE,3,10
-NISP,NA,pollen,9530,NA,Vascular plants,pollen,Scheuchzeria,AQVP,6,32
-NISP,NA,pollen,9690,NA,Vascular plants,pollen,Faboideae,UPHE,3,5
-NISP,NA,pollen,9722,NA,Vascular plants,pollen,Calla,AQVP,1,3
-NISP,NA,pollen,9773,NA,Vascular plants,pollen,Calluna,TRSH,27,356
-NISP,NA,pollen,9774,NA,Vascular plants,pollen,Typhaceae,AQVP,1,1
-NISP,NA,pollen,14859,NA,Vascular plants,pollen,Chamaenerion angustifolium,UPHE,12,28
-NISP,NA,pollen,14919,NA,Vascular plants,pollen,Centaurea stoebe,UPHE,1,3
-NISP,NA,pollen,15536,NA,Vascular plants,pollen,Prunus sp.,TRSH,1,1
-NISP,NA,pollen,21606,NA,Vascular plants,pollen,Potamogeton natans-type,AQVP,1,3
-NISP,NA,pollen,21608,NA,Vascular plants,pollen,Potentilla/Comarum,UPHE,9,105
-NISP,NA,pollen,22545,NA,Vascular plants,pollen,Cryptomeria,TRSH,1,3
-NISP,NA,pollen,23835,NA,Vascular plants,pollen,Pinus sp.,TRSH,1,15
-NISP,NA,pollen,24669,NA,Vascular plants,pollen,Parnassia-type,UPHE,1,1
-NISP,NA,pollen,25843,NA,Vascular plants,pollen,Polygonum sp.,UPHE,3,26
-NISP,NA,pollen,25878,NA,Vascular plants,pollen,Anemone sect. Pulsatilla,UPHE,5,13
-NISP,NA,pollen,25879,NA,Vascular plants,pollen,Anemone sect. Hepatica-type,UPHE,1,1
-NISP,NA,pollen,27457,NA,Vascular plants,pollen,Oxyria-type,UPHE,2,15
-NISP,NA,pollen,27573,NA,Vascular plants,pollen,Ranunculus sect. Batrachium,AQVP,13,155
-NISP,NA,pollen,27585,NA,Vascular plants,pollen,Arnica montana,UPHE,1,2
-NISP,NA,pollen,27587,NA,Vascular plants,pollen,Silenoideae-type,UPHE,12,82
-NISP,NA,pollen,27588,NA,Vascular plants,pollen,Cerastium arvense-type,UPHE,6,18
-NISP,NA,pollen,27589,NA,Vascular plants,pollen,Cerastium cerastoides-type,UPHE,6,27
-NISP,NA,pollen,27595,NA,Vascular plants,pollen,Medicago falcata-type,UPHE,1,3
-NISP,NA,pollen,27596,NA,Vascular plants,pollen,Minuartia-type,UPHE,4,7
-NISP,NA,pollen,27605,NA,Vascular plants,pollen,Seseli-type,UPHE,1,1
-NISP,NA,pollen,27606,NA,Vascular plants,pollen,Soldanella,UPHE,1,1
-NISP,NA,pollen,27625,NA,Vascular plants,pollen,Rhus-type,TRSH,1,3
-NISP,NA,pollen,27639,NA,Vascular plants,pollen,Chamaenerion angustifolium-type,UPHE,1,2
-NISP,NA,pollen,27650,NA,Vascular plants,pollen,Sium latifolium-type,UPHE,1,2
-NISP,NA,pollen,27661,NA,Vascular plants,pollen,Humulus/Cannabis-type,UPHE,6,40
-NISP,NA,pollen,27662,NA,Vascular plants,pollen,Bruckenthalia-type,TRSH,1,5
-NISP,NA,pollen,27718,NA,Vascular plants,pollen,Consolida-type,UPHE,6,32
-NISP,NA,pollen,27719,NA,Vascular plants,pollen,Cuscuta epithymum,UPHE,1,10
-NISP,NA,pollen,27948,NA,Vascular plants,pollen,Comarum,AQVP,18,337
-NISP,NA,pollen,27949,NA,Vascular plants,pollen,Comarum palustre,AQVP,2,20
-NISP,NA,pollen,27951,NA,Vascular plants,pollen,Comarum-type,UPHE,4,36
-NISP,NA,pollen,27966,NA,Vascular plants,pollen,Chamaenerion,UPHE,6,42
-NISP,NA,pollen,29439,NA,Vascular plants,pollen,Sagittaria-type,AQVP,1,1
-NISP,NA,pollen,29810,NA,Vascular plants,pollen,Orlaya grandiflora,UPHE,1,1
-NISP,NA,pollen,30385,NA,Vascular plants,pollen,Plantago sp.,UPHE,2,3
-NISP,NA,pollen,30933,NA,Vascular plants,pollen,Actaea spicata,UPHE,2,3
-NISP,NA,pollen,30937,NA,Vascular plants,pollen,Adonis annua-type,UPHE,1,5
-NISP,NA,pollen,30938,NA,Vascular plants,pollen,Adonis aestivalis-type,UPHE,1,3
-NISP,NA,pollen,30939,NA,Vascular plants,pollen,Adonis aestivalis/A. flammea,UPHE,1,5
-NISP,NA,pollen,30941,NA,Vascular plants,pollen,Aethusa cynapium,UPHE,1,1
-NISP,NA,pollen,30978,NA,Vascular plants,pollen,Androsace elongata-type,UPHE,2,11
-NISP,NA,pollen,31001,NA,Vascular plants,pollen,Anemone nemorosa group,UPHE,1,1
-NISP,NA,pollen,31031,NA,Vascular plants,pollen,Aphanes,UPHE,1,1
-NISP,NA,pollen,31050,NA,Vascular plants,pollen,Arenaria serpyllifolia-type,UPHE,1,1
-NISP,NA,pollen,31234,NA,Vascular plants,pollen,Astragalus exscapus,UPHE,1,2
-NISP,NA,pollen,31235,NA,Vascular plants,pollen,Astrantia major,UPHE,1,1
-NISP,NA,pollen,31264,NA,Vascular plants,pollen,Bambusa-type,UPHE,1,2
-NISP,NA,pollen,31266,NA,Vascular plants,pollen,Ranunculus sect. Batrachium-type,UPHE,4,17
-NISP,NA,pollen,31300,NA,Vascular plants,pollen,Bryonia alba/Helianthemum,UPHE,1,27
-NISP,NA,pollen,31405,NA,Vascular plants,pollen,Campanula/Phyteuma,UPHE,1,3
-NISP,NA,pollen,31465,NA,Vascular plants,pollen,Carum carvi,UPHE,1,1
-NISP,NA,pollen,31468,NA,Vascular plants,pollen,Sileneae,UPHE,28,275
-NISP,NA,pollen,31492,NA,Vascular plants,pollen,Cedrus-type,TRSH,1,1
-NISP,NA,pollen,31494,NA,Vascular plants,pollen,Centaurea alpina-type,UPHE,1,3
-NISP,NA,pollen,31500,NA,Vascular plants,pollen,Centaurea stoebe-type,UPHE,2,7
-NISP,NA,pollen,31509,NA,Vascular plants,pollen,Centaurea jacea/C. stoebe,UPHE,1,14
-NISP,NA,pollen,31515,NA,Vascular plants,pollen,Centaurea sp.,UPHE,1,2
-NISP,NA,pollen,31534,NA,Vascular plants,pollen,Poaceae (Cerealia) excluding Secale,UPHE,1,26
-NISP,NA,pollen,31622,NA,Vascular plants,pollen,Chaerophyllum hirsutum,UPHE,2,5
-NISP,NA,pollen,31744,NA,Vascular plants,pollen,cf. Helianthemum,UPHE,1,1
-NISP,NA,pollen,31875,NA,Vascular plants,pollen,Illecebrum verticillatum,UPHE,1,1
-NISP,NA,pollen,31999,NA,Vascular plants,pollen,Falcaria-type,UPHE,1,3
-NISP,NA,pollen,32003,NA,Vascular plants,pollen,Laserpitium latifolium-type,UPHE,1,1
-NISP,NA,pollen,32275,NA,Vascular plants,pollen,Silene flos-cuculi,UPHE,8,65
-NISP,NA,pollen,32277,NA,Vascular plants,pollen,Silene viscaria-type,UPHE,1,1
-NISP,NA,pollen,32447,NA,Vascular plants,pollen,Silene vulgaris,UPHE,1,1
-NISP,NA,pollen,32529,NA,Vascular plants,pollen,Microrrhinum minus,UPHE,1,1
-NISP,NA,pollen,32543,NA,Vascular plants,pollen,Onopordum,UPHE,1,3
-NISP,NA,pollen,32591,NA,Vascular plants,pollen,Potentilla/Comarum-type,UPHE,11,85
-NISP,NA,pollen,32595,NA,Vascular plants,pollen,Coniferae-type,TRSH,1,8
-NISP,NA,pollen,32600,NA,Vascular plants,pollen,Consolida regalis,UPHE,1,2
-NISP,NA,pollen,32610,NA,Vascular plants,pollen,Coronilla undiff.,UPHE,1,1
-NISP,NA,pollen,32687,NA,Vascular plants,pollen,Descurainia sophia,UPHE,1,1
-NISP,NA,pollen,32738,NA,Vascular plants,pollen,Empetrum nigrum-type,TRSH,1,89
-NISP,NA,pollen,32772,NA,Vascular plants,pollen,Eranthis hyemalis-type,UPHE,1,1
-NISP,NA,pollen,32834,NA,Vascular plants,pollen,Filipendula ulmaria/F. vulgaris,UPHE,1,18
-NISP,NA,pollen,32850,NA,Vascular plants,pollen,Fumaria-type,UPHE,1,2
-NISP,NA,pollen,32872,NA,Vascular plants,pollen,Galeopsis/Ballota-type,UPHE,1,4
-NISP,NA,pollen,32917,NA,Vascular plants,pollen,Glaucium corniculatum,UPHE,1,1
-NISP,NA,pollen,32924,NA,Vascular plants,pollen,Gratiola officinalis,UPHE,1,1
-NISP,NA,pollen,32965,NA,Vascular plants,pollen,Anemone hepatica,UPHE,1,1
-NISP,NA,pollen,33022,NA,Vascular plants,pollen,Hypericum perforatum/H. androsaemum-type,UPHE,1,23
-NISP,NA,pollen,33042,NA,Vascular plants,pollen,Impatiens parviflora,UPHE,1,12
-NISP,NA,pollen,33057,NA,Vascular plants,pollen,Juglandaceae-type,TRSH,1,6
-NISP,NA,pollen,33069,NA,Vascular plants,pollen,Knautia arvensis-type,UPHE,3,6
-NISP,NA,pollen,33079,NA,Vascular plants,pollen,Lamium album-type,UPHE,1,2
-NISP,NA,pollen,33098,NA,Vascular plants,pollen,Vicia/Lathyrus-type,UPHE,1,3
-NISP,NA,pollen,33166,NA,Vascular plants,pollen,Listera ovata,UPHE,1,1
-NISP,NA,pollen,33237,NA,Vascular plants,pollen,Magnolia-type,TRSH,1,3
-NISP,NA,pollen,33239,NA,Vascular plants,pollen,Malus undiff.,TRSH,1,1
-NISP,NA,pollen,33295,NA,Vascular plants,pollen,Myriophyllum heterophyllum,AQVP,3,44
-NISP,NA,pollen,33318,NA,Vascular plants,pollen,Nymphaea undiff.,AQVP,1,3
-NISP,NA,pollen,33320,NA,Vascular plants,pollen,Normapolles,TRSH,1,1
-NISP,NA,pollen,33322,NA,Vascular plants,pollen,Nymphoides peltata-type,AQVP,1,1
-NISP,NA,pollen,33346,NA,Vascular plants,pollen,Ornithogalum umbellatum-type,UPHE,1,1
-NISP,NA,pollen,33362,NA,Vascular plants,pollen,Papaver somniferum,UPHE,1,4
-NISP,NA,pollen,33479,NA,Vascular plants,pollen,Pimpinella major,UPHE,1,11
-NISP,NA,pollen,33481,NA,Vascular plants,pollen,Pimpinella major/P. saxifraga,UPHE,1,4
-NISP,NA,pollen,33541,NA,Vascular plants,pollen,Poaceae (Cerealia-type excluding Secale),UPHE,2,77
-NISP,NA,pollen,33545,NA,Vascular plants,pollen,Podocarpus-type,TRSH,1,3
-NISP,NA,pollen,33583,NA,Vascular plants,pollen,Koenigia alpina,UPHE,1,2
-NISP,NA,pollen,33633,NA,Vascular plants,pollen,Potentilla/Fragaria,UPHE,1,6
-NISP,NA,pollen,33641,NA,Vascular plants,pollen,Primula clusiana-type,UPHE,1,1
-NISP,NA,pollen,33679,NA,Vascular plants,pollen,Quercus pubescens,TRSH,1,14
-NISP,NA,pollen,33799,NA,Vascular plants,pollen,Ribes uva-crispa,TRSH,1,1
-NISP,NA,pollen,33823,NA,Vascular plants,pollen,Poterium sanguisorba,UPHE,12,14
-NISP,NA,pollen,33824,NA,Vascular plants,pollen,Poterium sanguisorba subsp. sanguisorba,UPHE,2,5
-NISP,NA,pollen,33850,NA,Vascular plants,pollen,Rumex cf. R. alpinus,UPHE,1,1
-NISP,NA,pollen,33859,NA,Vascular plants,pollen,Rumex/Oxyria-type,UPHE,1,1
-NISP,NA,pollen,33877,NA,Vascular plants,pollen,Sagina procumbens-type,UPHE,1,1
-NISP,NA,pollen,33892,NA,Vascular plants,pollen,Sambucus nigra/S. racemosa,TRSH,1,4
-NISP,NA,pollen,33934,NA,Vascular plants,pollen,Scabiosa columbaria subsp. pratensis-type,UPHE,1,2
-NISP,NA,pollen,33948,NA,Vascular plants,pollen,Scandix pecten-veneris/Caucalis platycarpos,UPHE,1,1
-NISP,NA,pollen,33957,NA,Vascular plants,pollen,Sciadopitys-type,TRSH,1,3
-NISP,NA,pollen,33958,NA,Vascular plants,pollen,Scleranthus annuus-type,UPHE,2,3
-NISP,NA,pollen,33959,NA,Vascular plants,pollen,Scleranthus cf. S. annuus,UPHE,1,2
-NISP,NA,pollen,33960,NA,Vascular plants,pollen,Scleranthus cf. S. perennis,UPHE,1,2
-NISP,NA,pollen,33961,NA,Vascular plants,pollen,Scleranthus perennis-type,UPHE,1,1
-NISP,NA,pollen,33980,NA,Vascular plants,pollen,Securigera varia,UPHE,1,1
-NISP,NA,pollen,34005,NA,Vascular plants,pollen,Silene latifolia,UPHE,1,1
-NISP,NA,pollen,34035,NA,Vascular plants,pollen,Sorbus aria-type,TRSH,1,2
-NISP,NA,pollen,34036,NA,Vascular plants,pollen,Sorbus torminalis,TRSH,2,2
-NISP,NA,pollen,34037,NA,Vascular plants,pollen,Sorbus group,TRSH,1,2
-NISP,NA,pollen,34042,NA,Vascular plants,pollen,Typha angustifolia/Sparganium-type,AQVP,10,50
-NISP,NA,pollen,34073,NA,Vascular plants,pollen,Symphytum cf. S. officinale,UPHE,1,7
-NISP,NA,pollen,34082,NA,Vascular plants,pollen,Pinus (Tertiary),TRSH,1,1
-NISP,NA,pollen,34103,NA,Vascular plants,pollen,Thesium-type,UPHE,1,1
-NISP,NA,pollen,34162,NA,Vascular plants,pollen,Tsuga diversifolia-type,TRSH,1,1
-NISP,NA,pollen,34163,NA,Vascular plants,pollen,Tsuga-type,TRSH,1,7
-NISP,NA,pollen,34171,NA,Vascular plants,pollen,Turgenia latifolia,UPHE,1,1
-NISP,NA,pollen,34185,NA,Vascular plants,pollen,Umbilicus rupestris-type,UPHE,1,3
-NISP,NA,pollen,34220,NA,Vascular plants,pollen,Valeriana cf. V. officinalis,UPHE,3,16
-NISP,NA,pollen,34247,NA,Vascular plants,pollen,Viola canina-type,UPHE,1,1
-NISP,NA,pollen,34674,NA,Vascular plants,pollen,Anthemis arvensis-type,UPHE,1,16
-NISP,NA,pollen,38081,NA,Vascular plants,pollen,Silene-type undiff.,UPHE,1,1
-NISP,NA,pollen,39196,NA,Vascular plants,pollen,Lotus pedunculatus,UPHE,4,18
-NISP,NA,pollen,41052,NA,Vascular plants,pollen,cf. Androsace,UPHE,1,2
-NISP,NA,pollen,41697,NA,Vascular plants,pollen,Adenostyles alliariae,UPHE,1,1
-NISP,NA,pollen,41698,NA,Vascular plants,pollen,Petasites hybridus-type,UPHE,1,2
-NISP,NA,pollen,41699,NA,Vascular plants,pollen,Ranunculus acris/R. flammula/R. sceleratus group,UPHE,1,16
-NISP,NA,pollen,41700,NA,Vascular plants,pollen,Senecio/Aster,UPHE,1,10
-NISP,NA,pollen,41790,NA,Vascular plants,pollen,"Juncus sp. (type 2.2, MI)",AQVP,1,1
-NISP,NA,pollen/spore,312,NA,Unidentified palynomorphs,pollen/spore,Indeterminable,UNID,1,26
-NISP,NA,pollen/spore,313,NA,Unidentified palynomorphs,pollen/spore,Unknown,UNID,23,667
-NISP,NA,pollen/spore,905,NA,Unidentified palynomorphs,pollen/spore,Indeterminable undiff.,UNID,1,51
-NISP,NA,pollen/spore,3713,NA,Unidentified palynomorphs,pollen/spore,Varia,UNID,57,2165
-NISP,NA,"postabdomen, male",38571,NA,Crustaceans undiff.,"postabdomen, male","Alona rustica (type 72, HdV)",CLAD,1,1
-NISP,NA,spermatophore,2186,NA,Crustaceans undiff.,spermatophore,Copepoda,COPE,8,64
-NISP,NA,spicule,5133,NA,Sponges,spicule,Porifera,SPNG,1,1
-NISP,NA,spore,26,NA,Vascular plants,spore,Athyrium,VACR,2,36
-NISP,NA,spore,33,NA,Vascular plants,spore,Botrychium,VACR,44,231
-NISP,NA,spore,83,NA,Vascular plants,spore,Dryopteris-type,VACR,20,744
-NISP,NA,spore,91,NA,Vascular plants,spore,Equisetum,VACR,74,1686
-NISP,NA,spore,115,NA,Fungi,spore,Fungi undiff.,FUNG,3,60
-NISP,NA,spore,139,NA,Vascular plants,spore,Isoëtes,AQVP,1,1
-NISP,NA,spore,166,NA,Vascular plants,spore,Lycopodiaceae undiff.,VACR,2,3
-NISP,NA,spore,167,NA,Vascular plants,spore,Diphasiastrum alpinum,VACR,1,30
-NISP,NA,spore,168,NA,Vascular plants,spore,Lycopodium annotinum,VACR,56,370
-NISP,NA,spore,170,NA,Vascular plants,spore,Lycopodium clavatum,VACR,44,178
-NISP,NA,spore,172,NA,Vascular plants,spore,Lycopodiella inundata,VACR,4,6
-NISP,NA,spore,175,NA,Vascular plants,spore,Huperzia selago,VACR,7,19
-NISP,NA,spore,184,NA,Unidentified palynomorphs,spore,Unknown (monolete) undiff.,UNID,5,150
-NISP,NA,spore,234,NA,Vascular plants,spore,Polypodiaceae,VACR,42,1022
-NISP,NA,spore,286,NA,Vascular plants,spore,Selaginella,VACR,3,5
-NISP,NA,spore,294,NA,Bryophytes,spore,Sphagnum,AQBR,77,2145
-NISP,NA,spore,305,NA,Unidentified palynomorphs,spore,Unknown (trilete) undiff.,UNID,7,60
-NISP,NA,spore,313,NA,Unidentified palynomorphs,spore,Unknown,UNID,4,74
-NISP,NA,spore,339,NA,Unidentified palynomorphs,spore,Unknown (trilete),UNID,1,5
-NISP,NA,spore,348,NA,Unidentified palynomorphs,spore,Unknown (monolete),UNID,14,628
-NISP,NA,spore,508,NA,Vascular plants,spore,Ophioglossum,VACR,13,28
-NISP,NA,spore,535,NA,Fungi,spore,Fungi,FUNG,6,116
-NISP,NA,spore,573,NA,Vascular plants,spore,Athyrium filix-femina,VACR,6,20
-NISP,NA,spore,604,NA,Vascular plants,spore,Cystopteris,VACR,1,2
-NISP,NA,spore,613,NA,Vascular plants,spore,Dryopteris,VACR,2,67
-NISP,NA,spore,648,NA,Vascular plants,spore,Diphasiastrum complanatum,VACR,1,2
-NISP,NA,spore,649,NA,Vascular plants,spore,Diphasiastrum alpinum-type,VACR,1,7
-NISP,NA,spore,650,NA,Vascular plants,spore,Lycopodium annotinum-type,VACR,5,23
-NISP,NA,spore,677,NA,Vascular plants,spore,Pteridophyta,VACR,3,81
-NISP,NA,spore,720,NA,Vascular plants,spore,Pteridium aquilinum,VACR,46,517
-NISP,NA,spore,750,NA,Vascular plants,spore,Selaginella selaginoides,VACR,19,73
-NISP,NA,spore,807,NA,Vascular plants,spore,Pteridium,VACR,22,85
-NISP,NA,spore,834,NA,Vascular plants,spore,Dryopteris carthusiana-type,VACR,1,2
-NISP,NA,spore,835,NA,Vascular plants,spore,Polypodium,VACR,15,430
-NISP,NA,spore,1109,NA,Fungi,spore,Tilletia sphagni,FUNG,12,92
-NISP,NA,spore,1125,NA,Vascular plants,spore,Lycopodium clavatum-type,VACR,3,11
-NISP,NA,spore,1164,NA,Bryophytes,spore,Bryales,UPBR,40,614
-NISP,NA,spore,1167,NA,Bryophytes,spore,Marchantiophyta,UPBR,3,8
-NISP,NA,spore,1168,NA,Bryophytes,spore,Bryophyta,UPBR,10,203
-NISP,NA,spore,1180,NA,Vascular plants,spore,Lycopodiaceae,VACR,12,95
-NISP,NA,spore,1331,NA,Vascular plants,spore,Ophioglossum vulgatum,VACR,2,3
-NISP,NA,spore,1343,NA,Bryophytes,spore,Riccia,AQBR,3,3
-NISP,NA,spore,1344,NA,Bryophytes,spore,Anthoceros,UPBR,5,17
-NISP,NA,spore,1345,NA,Vascular plants,spore,Dryopteris filix-mas-type,VACR,4,8
-NISP,NA,spore,1348,NA,Vascular plants,spore,Asplenium,VACR,1,1
-NISP,NA,spore,1370,NA,Vascular plants,spore,Thelypteris palustris,VACR,7,60
-NISP,NA,spore,1489,NA,Fungi,spore,Sporormiella,FUNG,1,8
-NISP,NA,spore,1490,NA,Fungi,spore,Thecaphora,FUNG,4,18
-NISP,NA,spore,1615,NA,Vascular plants,spore,Hymenophyllum,VACR,1,3
-NISP,NA,spore,1801,NA,Bryophytes,spore,Anthoceros laevis,UPBR,5,12
-NISP,NA,spore,1807,NA,Vascular plants,spore,"Pteridophyta (monolete, verrucate)",VACR,2,8
-NISP,NA,spore,1890,NA,Vascular plants,spore,Asplenium-type,VACR,1,1
-NISP,NA,spore,2194,NA,Fungi,spore,cf. Entophlyctis lobata,FUNG,3,47
-NISP,NA,spore,2223,NA,Vascular plants,spore,Lycopodiaceae cf. Diphasiastrum complanatum,VACR,1,2
-NISP,NA,spore,2301,NA,Vascular plants,spore,Polypodium vulgare,VACR,30,151
-NISP,NA,spore,2343,NA,Unidentified palynomorphs,spore,"Unknown (monolete, psilate)",UNID,2,178
-NISP,NA,spore,2613,NA,Vascular plants,spore,Isoëtes lacustris,AQVP,1,2
-NISP,NA,spore,2621,NA,Vascular plants,spore,Athyrium-type,VACR,1,1
-NISP,NA,spore,2675,NA,Vascular plants,spore,Blechnum,VACR,2,2
-NISP,NA,spore,3429,NA,Vascular plants,spore,Thelypteris,VACR,1,3
-NISP,NA,spore,3698,NA,Fungi,spore,Microthyrium,FUNG,2,23
-NISP,NA,spore,5004,NA,Vascular plants,spore,Gymnocarpium dryopteris,VACR,8,47
-NISP,NA,spore,5011,NA,Vascular plants,spore,Lycopodium,VACR,4,8
-NISP,NA,spore,5013,NA,Vascular plants,spore,Lycopodium undiff.,VACR,1,1
-NISP,NA,spore,5021,NA,Vascular plants,spore,Pilularia,VACR,1,2
-NISP,NA,spore,5030,NA,Vascular plants,spore,Pteridophyta (monolete) undiff.,VACR,5,255
-NISP,NA,spore,5035,NA,Vascular plants,spore,Phegopteris connectilis,VACR,1,1
-NISP,NA,spore,5173,NA,Bryophytes,spore,cf. Riccia,AQBR,1,2
-NISP,NA,spore,5174,NA,Bryophytes,spore,Anthoceros laevis-type,UPBR,1,1
-NISP,NA,spore,5393,NA,Fungi,spore,Entophlyctis lobata,FUNG,8,59
-NISP,NA,spore,5415,NA,Fungi,spore,Diporotheca,FUNG,2,18
-NISP,NA,spore,5470,NA,Fungi,spore,Glomus,FUNG,2,13
-NISP,NA,spore,5546,NA,Fungi,spore,Microthyrium-type,FUNG,1,7
-NISP,NA,spore,5547,NA,Fungi,spore,Sordariaceae,FUNG,1,26
-NISP,NA,spore,5559,NA,Vascular plants,spore,Dryopteris dilatata-type,VACR,2,2
-NISP,NA,spore,5584,NA,Fungi,spore,Helicoön pluriseptatum,FUNG,3,41
-NISP,NA,spore,5778,NA,Vascular plants,spore,"Polypodiophyta (monolete, psilate)",VACR,1,35
-NISP,NA,spore,9571,NA,Vascular plants,spore,Phegopteris,VACR,2,2
-NISP,NA,spore,9775,NA,Vascular plants,spore,Equisetaceae,VACR,1,1
-NISP,NA,spore,15671,NA,Unidentified palynomorphs,spore,Unknown (pre-Quaternary),ANAC,2,25
-NISP,NA,spore,23125,NA,Fungi,spore,Meliola,FUNG,1,2
-NISP,NA,spore,25917,NA,Fungi,spore,Neurospora,FUNG,1,1
-NISP,NA,spore,25930,NA,Fungi,spore,Xylariaceae,FUNG,1,4
-NISP,NA,spore,27614,NA,Fungi,spore,Ustulina deusta,FUNG,1,11
-NISP,NA,spore,29001,NA,Vascular plants,spore,"Polypodiophyta (monolete, verrucate)",VACR,1,2
-NISP,NA,spore,29431,NA,Fungi,spore,Geoglossum sphagnophilum,FUNG,1,15
-NISP,NA,spore,30734,NA,Fungi,spore,"Sordaria-type (type 55A, HdV)",FUNG,3,8
-NISP,NA,spore,30735,NA,Fungi,spore,"Fungi (type 200, HdV)",FUNG,1,9
-NISP,NA,spore,30936,NA,Vascular plants,spore,Adiantum capillus-veneris,VACR,2,2
-NISP,NA,spore,31093,NA,Bryophytes,spore,Anthoceros punctatus-type,UPBR,1,1
-NISP,NA,spore,31373,NA,Fungi,spore,Byssothecium circinans,FUNG,3,20
-NISP,NA,spore,31714,NA,Vascular plants,spore,cf. Diphasiastrum-type,VACR,1,1
-NISP,NA,spore,32560,NA,Vascular plants,spore,Cicatricosporites australiensis,PTER,1,1
-NISP,NA,spore,32597,NA,Fungi,spore,Coniochaeta cf. C. ligniaria,FUNG,1,13
-NISP,NA,spore,32745,NA,Bryophytes,spore,Encalypta-type,UPBR,1,1
-NISP,NA,spore,32932,NA,Fungi,spore,Glomus cf. G. fasciculatum,FUNG,1,19
-NISP,NA,spore,33986,NA,Vascular plants,spore,Selaginellaceae,VACR,1,1
-NISP,NA,spore,34305,NA,Unidentified palynomorphs,spore,"Unknown (type 181, HdV)",UNID,1,4
-NISP,NA,spore,34311,NA,Fungi,spore,"Fungi (type 18, HdV)",FUNG,3,47
-NISP,NA,spore,34317,NA,Fungi,spore,"Byssothecium circinans (type 16C, HdV)",FUNG,3,38
-NISP,NA,spore,34318,NA,Fungi,spore,"Fungi (type 17, HdV)",FUNG,2,11
-NISP,NA,spore,34319,NA,Fungi,spore,"Fungi (type 3A, HdV)",FUNG,4,80
-NISP,NA,spore,34320,NA,Fungi,spore,"Fungi (type 8E, HdV)",FUNG,2,47
-NISP,NA,spore,34321,NA,Fungi,spore,"Fungi (type 83, HdV)",FUNG,3,79
-NISP,NA,spore,34322,NA,Fungi,spore,"Fungi (type 90, HdV)",FUNG,4,141
-NISP,NA,spore,34323,NA,Fungi,spore,"Fungi (type 571, HdV)",FUNG,2,2
-NISP,NA,spore,34324,NA,Fungi,spore,"cf. Endophragmia (type 572, HdV)",FUNG,2,18
-NISP,NA,spore,34385,NA,Fungi,spore,"Fungi (type 23, HdV)",FUNG,2,5
-NISP,NA,spore,34413,NA,Bryophytes,spore,Aspiromitus punctatus,UPBR,13,38
-NISP,NA,spore,34567,NA,Fungi,spore,"Fungi (type 73, HdV)",FUNG,1,10
-NISP,NA,spore,34623,NA,Fungi,spore,"Byssothecium circinans (type 16B, HdV)",FUNG,1,1
-NISP,NA,spore,34627,NA,Fungi,spore,"Fungi (type 53, HdV)",FUNG,1,34
-NISP,NA,spore,34628,NA,Fungi,spore,"Sordariaceae/Sordaria (type 55B, HdV)",FUNG,1,2
-NISP,NA,spore,34631,NA,Fungi,spore,"Geoglossum sphagnophilum (type 77A, HdV)",FUNG,2,21
-NISP,NA,spore,34634,NA,Fungi,spore,"cf. Spadicoides bina (type 98, HdV)",FUNG,1,1
-NISP,NA,spore,34771,NA,Fungi,spore,Delitschia,FUNG,1,1
-NISP,NA,spore,34842,NA,Fungi,spore,"Fungi (type 65, HdV)",FUNG,1,1
-NISP,NA,spore,34868,NA,Fungi,spore,"Brachysporium obovatum/B. bloxami/Bactrodesmium betulicola (type 359, HdV)",FUNG,1,2
-NISP,NA,spore,34871,NA,Fungi,spore,"Helicosporium/Helicoön pluriseptatum (type 30, HdV)",FUNG,1,20
-NISP,NA,spore,34881,NA,Fungi,spore,"Fungi (type 173, HdV)",FUNG,1,1
-NISP,NA,spore,34917,NA,Fungi,spore,"Fungi (type 20, HdV)",FUNG,2,4
-NISP,NA,spore,37337,NA,Fungi,spore,"Fungi (type 729, HdV)",FUNG,1,7
-NISP,NA,spore,37341,NA,Fungi,spore,"Podospora sp./Zopfiella sp. (type 466, HdV)",FUNG,1,6
-NISP,NA,spore,37343,NA,Fungi,spore,Fungi (type 778. HdV),FUNG,1,1
-NISP,NA,spore,37357,NA,Fungi,spore,"Brachysporium pendulisporum (type 360, HdV)",FUNG,1,1
-NISP,NA,spore,37359,NA,Fungi,spore,"Byssothecium circinans (type 16A, HdV)",FUNG,1,3
-NISP,NA,spore,37394,NA,Fungi,spore,"Sporormiella (type 113, HdV)",FUNG,1,10
-NISP,NA,spore,37551,NA,Fungi,spore,"cf. Actinopeltis (type 8C, HdV)",FUNG,1,12
-NISP,NA,spore,38263,NA,Algae,spore,"Algae (type 209, HdV)",ALGA,1,1
-NISP,NA,spore,38524,NA,Fungi,spore,"Ustulina deusta (type 44, HdV)",FUNG,1,23
-NISP,NA,spore,38542,NA,Fungi,spore,"Tilletia sphagni (type 27, HdV)",FUNG,1,28
-NISP,NA,spore,38559,NA,Fungi,spore,"Pleospora sp. (type 3B, HdV)",FUNG,1,2
-NISP,NA,spore,38563,NA,Fungi,spore,"Lasiosphaeria sp. (type 63C, HdV)",FUNG,1,2
-NISP,NA,spore,38575,NA,Fungi,spore,Entorrhiza sp. (type HdV-527),FUNG,1,3
-NISP,NA,spore,38580,NA,Fungi,spore,"Fungi (type 123, HdV)",FUNG,1,2
-NISP,NA,spore,38584,NA,Unidentified palynomorphs,spore,"Unknown (type 708, HdV)",UNID,1,8
-NISP,NA,spore,38620,NA,Fungi,spore,"Clasterosporium caricinum (type 126, HdV)",FUNG,1,37
-NISP,NA,spore,38621,NA,Fungi,spore,"Coniochaeta ligniaria (type 172, HdV)",FUNG,1,9
-NISP,NA,spore,38626,NA,Fungi,spore,"cf. Richonia variospora (type 140, HdV)",FUNG,2,15
-NISP,NA,spore,41780,NA,Fungi,spore,"Fungi (type 404, HdV)",FUNG,1,1
-NISP,NA,spore,41792,NA,Fungi,spore,"Gelasinospora (type 1A, HdV)",FUNG,1,5
-NISP,NA,spore,41793,NA,Fungi,spore,"Gelasinospora (type 1B, HdV)",FUNG,1,1
-NISP,NA,sporocarp,9995,NA,Fungi,sporocarp,Microthyriaceae,FUNG,7,78
-NISP,NA,stomate,210,NA,Vascular plants,stomate,Picea,TRSH,4,34
-NISP,NA,stomate,385,NA,Vascular plants,stomate,Pinus,TRSH,2,30
-NISP,NA,test,559,NA,Testate amoebae,test,Amphitrema,TEAM,5,119
-NISP,NA,test,561,NA,Testate amoebae,test,Amphitrema wrightianum,TEAM,5,18
-NISP,NA,test,570,NA,Testate amoebae,test,Assulina,TEAM,6,30
-NISP,NA,test,571,NA,Testate amoebae,test,Assulina muscorum,TEAM,7,189
-NISP,NA,test,572,NA,Testate amoebae,test,Assulina seminulum,TEAM,3,51
-NISP,NA,test,608,NA,Testate amoebae,test,Difflugia,TEAM,1,2
-NISP,NA,test,619,NA,Testate amoebae,test,Euglypha,TEAM,8,66
-NISP,NA,test,626,NA,Testate amoebae,test,Hyalosphenia papilio,TEAM,1,2
-NISP,NA,test,1189,NA,Testate amoebae,test,Arcella,TEAM,14,79
-NISP,NA,test,1191,NA,Testate amoebae,test,Centropyxis,TEAM,1,2
-NISP,NA,test,1194,NA,Testate amoebae,test,Hyalosphenia subflava,TEAM,5,12
-NISP,NA,test,1195,NA,Testate amoebae,test,Nebela,TEAM,5,8
-NISP,NA,test,1223,NA,Testate amoebae,test,Amphitrema undiff.,TEAM,1,1
-NISP,NA,test,2187,NA,Testate amoebae,test,Centropyxis aculeata,TEAM,1,1
-NISP,NA,test,2190,NA,Testate amoebae,test,Arcella discoides,TEAM,2,6
-NISP,NA,test,5389,NA,Testate amoebae,test,Rhizopoda undiff.,TEAM,5,31
-NISP,NA,test,5405,NA,Testate amoebae,test,Nebela undiff.,TEAM,1,1
-NISP,NA,test,5567,NA,Testate amoebae,test,Nebela parvula,TEAM,1,1
-NISP,NA,test,28043,NA,Testate amoebae,test,Archerella flavum,TEAM,20,190
-NISP,NA,test,30985,NA,Testate amoebae,test,Amphitrema sp.,TEAM,1,2
-NISP,NA,test,31199,NA,Testate amoebae,test,Arcella cf. A. megastoma,TEAM,1,2
-NISP,NA,test,31200,NA,Testate amoebae,test,Arcella sp.,TEAM,2,5
-NISP,NA,test,31208,NA,Testate amoebae,test,Assulina sp.,TEAM,2,31
-NISP,NA,test,32184,NA,Testate amoebae,test,Rhizopoda,TEAM,4,26
-NISP,NA,test,33663,NA,Testate amoebae,test,Pyxidicula,TEAM,1,2
-NISP,NA,trichoblast,673,NA,Vascular plants,trichoblast,Nymphaeaceae,AQVP,5,86
-NISP,NA,unspecified,18282,NA,Insects,unspecified,Lepidoptera,LEPI,1,1
-NISP,NA,valve,5397,NA,Diatoms,valve,Pinnularia,DIAT,1,2
-NISP,NA,valve,27180,NA,Diatoms,valve,Eunotia sp.,DIAT,1,1
-NISP,NA,zygospore,1488,NA,Algae,zygospore,Spirogyra,ALGA,1,9
-NISP,NA,zygospore,1704,NA,Algae,zygospore,Zygnemataceae,ALGA,1,1
-NISP,NA,zygospore,30518,NA,Algae,zygospore,Spirogyra cf. S. scrobiculata,ALGA,1,3
-NISP,NA,zygospore/aplanospore,41702,NA,Algae,zygospore/aplanospore,"Transeauina (type 214, HdV)",ALGA,1,1
-number,NA,<20 µm,1062,NA,Charcoal,<20 µm,Charcoal,CHAR,1,80
-number,NA,>100 µm,1062,NA,Charcoal,>100 µm,Charcoal,CHAR,1,80
-number,NA,>50 µm,1062,NA,Charcoal,>50 µm,Charcoal,CHAR,1,80
-number,NA,20-50 µm,1062,NA,Charcoal,20-50 µm,Charcoal,CHAR,1,80
-number,NA,batch number,930,NA,Laboratory analyses,batch number,Lycopodium tablets,LABO,1,80
-number,NA,counted,932,NA,Laboratory analyses,counted,Lycopodium spike,LABO,8,546
-number,NA,fragment,1062,NA,Charcoal,fragment,Charcoal,CHAR,2,96
-number,NA,quantity added,930,NA,Laboratory analyses,quantity added,Lycopodium tablets,LABO,5,315
-number,NA,quantity added,932,NA,Laboratory analyses,quantity added,Lycopodium spike,LABO,1,53
-number×1000,NA,fragment,1062,NA,Charcoal,fragment,Charcoal,CHAR,5,311
diff --git a/slides/data/taxontable.csv b/slides/data/taxontable.csv
deleted file mode 100644
index 1e8b2b5..0000000
--- a/slides/data/taxontable.csv
+++ /dev/null
@@ -1,1196 +0,0 @@
-variablename,sites,samples,replacement
-"?Microthyrium (type 8, HdV)",1,15,Other
-Abies,72,1822,Abies
-Abies alba,23,836,Abies
-Acacia,1,1,Acacia
-Acer,78,1157,Acer
-Achillea,1,1,Achillea
-Achillea-type,15,216,Achillea
-Aconitum,11,76,Aconitum
-Aconitum-type,1,3,Aconitum
-"Acrotritia ardua (type 106, HdV)",1,1,Other
-Actaea spicata,2,3,Actaea
-Actinopeltis undiff.,2,7,Other
-Adenostyles alliariae,1,1,Other
-Adiantum capillus-veneris,2,2,Other
-Adonis aestivalis-type,1,3,Adonis
-Adonis aestivalis/A. flammea,1,5,Adonis
-Adonis annua-type,1,5,Adonis
-Aesculus,2,3,Aesculus
-Aethusa cynapium,1,1,Other
-Agrimonia,1,1,Agrimonia
-Agrostemma githago,10,29,Agrostemma githago
-Ailanthus,2,10,Ailanthus
-Alchemilla,5,23,Alchemilla
-Alchemilla-type,4,56,Alchemilla
-Algae,7,18,Algae
-"Algae (type 209, HdV)",1,1,Algae
-"Algae? (type 225, HdV)",1,1,Algae
-Alisma,13,51,Alisma
-Alisma plantago-aquatica,1,8,Alisma
-Allium,3,46,Allium
-Allium-type,4,6,Allium
-Alnus,79,3219,Alnus
-Alnus glutinosa,1,20,Alnus
-Alnus glutinosa-type,5,172,Alnus
-Alnus glutinosa/A. incana,1,94,Alnus
-Alnus undiff.,1,130,Alnus
-Alnus viridis,8,190,Alnus
-Alnus viridis-type,1,5,Alnus
-"Alona rustica (type 72, HdV)",1,1,Other
-Amaranthaceae,85,1977,Amaranthaceae
-Ambrosia,5,6,Ambrosia
-Ambrosia-type,5,26,Ambrosia
-Amphitrema,5,119,Amphitrema
-Amphitrema sp.,1,2,Amphitrema
-Amphitrema undiff.,1,1,Amphitrema
-Amphitrema wrightianum,5,18,Amphitrema
-Anagallis,2,3,Anagallis
-Anagallis arvensis,1,2,Anagallis
-Anagallis arvensis-type,2,7,Anagallis
-Anagallis tenella-type,1,1,Anagallis
-Anagallis-type,1,1,Anagallis
-Anchusa/Pulmonaria,1,1,Other
-Andromeda,1,1,Other
-Andromeda polifolia,1,3,Other
-Androsace elongata-type,2,11,Other
-Androsace-type,1,1,Other
-Anemone,1,2,Anemone
-Anemone hepatica,1,1,Anemone
-Anemone nemorosa group,1,1,Anemone
-Anemone nemorosa-type,15,108,Anemone
-Anemone sect. Hepatica-type,1,1,Anemone
-Anemone sect. Pulsatilla,5,13,Anemone
-Anemone-type,19,89,Anemone
-Anthemis arvensis-type,1,16,Anthemis
-Anthemis-type,13,331,Anthemis
-Anthericum,3,6,Anthericum
-Anthericum-type,1,4,Anthericum
-Anthoceros,5,17,Anthoceros
-Anthoceros laevis,5,12,Anthoceros
-Anthoceros laevis-type,1,1,Anthoceros
-Anthoceros punctatus-type,1,1,Anthoceros
-"Anthostomella cf. A. fuegiana (type 4, HdV)",1,5,Fungi
-Anthostomella fuegiana,1,1,Fungi
-Anthriscus caucalis,1,1,Anthriscus caucalis
-Anthriscus sylvestris,1,8,Anthriscus sylvestris
-Anthriscus sylvestris-type,4,24,Anthriscus sylvestris-type
-Anthriscus-type,1,1,Anthriscus-type
-Anthyllis,2,4,Anthyllis
-Aphanes,1,1,Aphanes
-Apiaceae,70,1767,Apiaceae
-Apiaceae undiff.,15,331,Apiaceae undiff.
-Apium,1,1,Apium
-Apium inundatum-type,1,1,Apium inundatum-type
-Apium-type,1,30,Apium-type
-Araneae,1,1,Araneae
-Arcella,14,79,Arcella
-Arcella cf. A. megastoma,1,2,Arcella cf. A. megastoma
-Arcella discoides,2,6,Arcella discoides
-Arcella sp.,2,5,Arcella sp.
-Archerella flavum,20,190,Fungi
-"Archerella flavum (type 31A, HdV)",1,26,Fungi
-Arctium,1,1,Arctium
-Arctostaphylos uva-ursi,1,5,Arctostaphylos uva-ursi
-Arctostaphylos uva-ursi-type,1,1,Arctostaphylos uva-ursi-type
-Arctous alpina,1,1,Arctous alpina
-Arenaria,6,8,Arenaria
-Arenaria serpyllifolia-type,1,1,Arenaria serpyllifolia-type
-Armeria,4,11,Armeria
-Armeria maritima (type A),2,3,Armeria
-Armeria maritima (type B),2,3,Armeria
-Armeria maritima-type,1,1,Armeria
-Arnica montana,1,2,Arnica montana
-Artemisia,87,3419,Artemisia
-Arthrodesmus,1,4,Arthrodesmus
-Aruncus,1,1,Aruncus
-Ascaris,3,13,Ascaris
-Ascaris lumbricoides,1,2,Ascaris lumbricoides
-Ascomycota,4,53,Ascomycota
-Ascospora,1,7,Ascospora
-Aspiromitus punctatus,13,38,Aspiromitus punctatus
-Asplenium,1,1,Asplenium
-Asplenium-type,1,1,Asplenium-type
-Assulina,6,30,Assulina
-Assulina muscorum,7,189,Assulina muscorum
-Assulina seminulum,3,51,Assulina seminulum
-Assulina sp.,2,31,Assulina sp.
-Aster-type,9,152,Aster-type
-Asteraceae,13,134,Asteraceae
-Asteroideae,65,1119,Asteroideae
-Asteroideae undiff.,2,43,Asteroideae undiff.
-Asterosporium,1,1,Asterosporium
-Astragalus alpinus-type,1,1,Astragalus alpinus-type
-Astragalus danicus-type,3,8,Astragalus danicus-type
-Astragalus exscapus,1,2,Astragalus exscapus
-Astragalus-type,6,15,Astragalus-type
-Astrantia major,1,1,Astrantia major
-Astrantia-type,4,8,Astrantia-type
-Athyrium,2,36,Athyrium
-Athyrium filix-femina,6,20,Athyrium filix-femina
-Athyrium-type,1,1,Athyrium-type
-Avena-type,23,325,Avena-type
-Avena/Triticum-type,1,2,Avena/Triticum-type
-Bambusa-type,1,2,Bambusa-type
-Barbarea-type,17,186,Barbarea-type
-Betula,83,3727,Betula
-Betula nana,8,177,Betula
-Betula nana-type,1,42,Betula
-Betula pubescens,1,29,Betula
-Betula pubescens-type,2,80,Betula
-Bidens,12,83,Bidens
-Bidens-type,3,3,Bidens-type
-Bistorta,3,10,Bistorta
-Bistorta officinalis,23,121,Bistorta officinalis
-Bistorta officinalis-type,25,139,Bistorta officinalis-type
-Blechnum,2,2,Blechnum
-Boraginaceae,12,37,Boraginaceae
-Botrychium,44,231,Botrychium
-Botryococcus,22,475,Botryococcus
-Botryococcus braunii,11,148,Botryococcus braunii
-Botryococcus neglectus,3,7,Botryococcus neglectus
-Botryococcus pila,3,18,Botryococcus pila
-Botryococcus sp.,3,21,Botryococcus sp.
-"Brachysporium obovatum/B. bloxami/Bactrodesmium betulicola (type 359, HdV)",1,2,"Brachysporium obovatum/B. bloxami/Bactrodesmium betulicola (type 359, HdV)"
-"Brachysporium pendulisporum (type 360, HdV)",1,1,"Brachysporium pendulisporum (type 360, HdV)"
-Brassica,1,30,Brassica
-Brassicaceae,65,1163,Brassicaceae
-Brassicaceae undiff.,1,22,Brassicaceae undiff.
-Brassicaceae-type,6,153,Brassicaceae-type
-Bruckenthalia-type,1,5,Bruckenthalia-type
-Bryales,40,614,Bryales
-Bryonia alba/Helianthemum,1,27,Bryonia alba/Helianthemum
-Bryophyta,10,203,Bryophyta
-"Bryophyta (type 354, HdV)",2,4,"Bryophyta (type 354, HdV)"
-Bupleurum,5,11,Bupleurum
-Bupleurum falcatum-type,1,2,Bupleurum falcatum-type
-Bupleurum-type,5,8,Bupleurum-type
-Butomus,6,37,Butomus
-Butomus umbellatus,1,1,Butomus umbellatus
-Butomus-type,1,2,Butomus-type
-Byssothecium circinans,3,20,Byssothecium circinans
-"Byssothecium circinans (type 16A, HdV)",1,3,"Byssothecium circinans (type 16A, HdV)"
-"Byssothecium circinans (type 16B, HdV)",1,1,"Byssothecium circinans (type 16B, HdV)"
-"Byssothecium circinans (type 16C, HdV)",3,38,"Byssothecium circinans (type 16C, HdV)"
-Calla,1,3,Calla
-Callitriche,2,11,Callitriche
-Calluna,27,356,Calluna
-Calluna vulgaris,57,895,Calluna vulgaris
-Caltha,4,25,Caltha
-Caltha palustris-type,1,1,Caltha palustris-type
-Caltha-type,45,365,Caltha-type
-Calystegia,7,14,Calystegia
-Campanula,45,239,Campanula
-Campanula rapunculoides,1,3,Campanula rapunculoides
-Campanula-type,7,19,Campanula-type
-Campanula/Phyteuma,1,3,Campanula/Phyteuma
-Campanulaceae,5,10,Campanulaceae
-Cannabis sativa,7,95,Cannabis sativa
-Cannabis-type,11,180,Cannabis-type
-Cardamine,2,46,Cardamine
-Cardamine pratensis-type,13,163,Cardamine pratensis-type
-Cardamine-type,19,151,Cardamine-type
-Carduus,12,44,Carduus
-Carex,1,7,Carex
-Carpinus,65,1148,Carpinus
-Carpinus betulus,26,620,Carpinus
-Carpinus-type,1,130,Carpinus
-Carum carvi,1,1,Carum carvi
-Carya,4,37,Carya
-Caryophyllaceae,28,288,Caryophyllaceae
-Caryophyllaceae undiff.,1,30,Caryophyllaceae undiff.
-"Caryospora sp. (type 1001, HdV)",1,1,"Caryospora sp. (type 1001, HdV)"
-Castanea,4,18,Castanea
-Castanea sativa,1,1,Castanea sativa
-Castanea-type,3,15,Castanea-type
-Cedrus,1,2,Cedrus
-Cedrus-type,1,1,Cedrus-type
-Centaurea,11,35,Centaurea
-Centaurea alpina-type,1,3,Centaurea
-Centaurea cyanus,62,432,Centaurea
-Centaurea cyanus-type,7,35,Centaurea
-Centaurea jacea,11,57,Centaurea
-Centaurea jacea-type,31,136,Centaurea
-Centaurea jacea/C. stoebe,1,14,Centaurea
-Centaurea montana-type,1,1,Centaurea
-Centaurea nigra-type,2,2,Centaurea
-Centaurea scabiosa,22,74,Centaurea
-Centaurea scabiosa-type,7,14,Centaurea
-Centaurea sp.,1,2,Centaurea
-Centaurea stoebe,1,3,Centaurea
-Centaurea stoebe-type,2,7,Centaurea
-Centaurea undiff.,7,13,Centaurea
-Centropyxis,1,2,Centropyxis
-Centropyxis aculeata,1,1,Centropyxis aculeata
-Cerastium,3,12,Cerastium
-Cerastium arvense-type,6,18,Cerastium arvense-type
-Cerastium cerastoides-type,6,27,Cerastium cerastoides-type
-Cerastium fontanum-type,1,7,Cerastium fontanum-type
-Cerastium-type,5,29,Cerastium-type
-Ceratophyllum,6,130,Ceratophyllum
-"Cercophora sp. (type 112, HdV)",1,12,"Cercophora sp. (type 112, HdV)"
-Cerinthe,2,3,Cerinthe
-Cerinthe minor,1,1,Cerinthe minor
-"cf. Actinopeltis (type 8C, HdV)",1,12,"cf. Actinopeltis (type 8C, HdV)"
-cf. Androsace,1,2,cf. Androsace
-cf. Diphasiastrum-type,1,1,cf. Diphasiastrum-type
-"cf. Endophragmia (type 572, HdV)",2,18,"cf. Endophragmia (type 572, HdV)"
-cf. Entophlyctis lobata,3,47,cf. Entophlyctis lobata
-cf. Helianthemum,1,1,cf. Helianthemum
-cf. Lamiaceae,1,19,cf. Lamiaceae
-cf. Lobelia,1,1,cf. Lobelia
-cf. Papaver,1,10,cf. Papaver
-cf. Pedicularis,2,10,cf. Pedicularis
-cf. Penium,1,2,cf. Penium
-"cf. Persiciospora (type 124, HdV)",1,1,"cf. Persiciospora (type 124, HdV)"
-cf. Riccia,1,2,cf. Riccia
-"cf. Richonia variospora (type 140, HdV)",2,15,"cf. Richonia variospora (type 140, HdV)"
-"cf. Spadicoides bina (type 98, HdV)",1,1,"cf. Spadicoides bina (type 98, HdV)"
-"cf. Trichocladium opacum (type 10, HdV)",1,49,"cf. Trichocladium opacum (type 10, HdV)"
-"cf. Trichoglossum hirsutum (type 77B, HdV)",1,98,"cf. Trichoglossum hirsutum (type 77B, HdV)"
-Chaerophyllum,1,1,Chaerophyllum
-Chaerophyllum hirsutum,2,5,Chaerophyllum hirsutum
-Chaerophyllum hirsutum-type,6,45,Chaerophyllum hirsutum-type
-"Chaetomium sp. (type 7A, HdV)",1,7,"Chaetomium sp. (type 7A, HdV)"
-Chaetomium undiff.,1,1,Chaetomium undiff.
-Chamaenerion,6,42,Chamaenerion
-Chamaenerion angustifolium,12,28,Chamaenerion angustifolium
-Chamaenerion angustifolium-type,1,2,Chamaenerion angustifolium-type
-Charcoal,9,867,Charcoal
-Chelidonium,3,6,Chelidonium
-Chelidonium majus,1,2,Chelidonium majus
-Chironomidae,2,4,Chironomidae
-Chlamydomonadaceae,1,2,Chlamydomonadaceae
-Chrysophyceae,1,1,Chrysophyceae
-Chrysosplenium,20,88,Chrysosplenium
-Chrysosplenium-type,4,24,Chrysosplenium-type
-Cicatricosporites australiensis,1,1,Cicatricosporites australiensis
-Cichorioideae,81,1869,Cichorioideae
-Cicuta virosa,2,11,Cicuta virosa
-Circaea,9,13,Circaea
-Cirsium,12,52,Cirsium
-Cirsium-type,41,416,Cirsium-type
-Cirsium/Carduus,4,49,Cirsium/Carduus
-Cladium mariscus,2,7,Cladium mariscus
-Cladocera,1,5,Cladocera
-"Clasterosporium caricinum (type 126, HdV)",1,37,"Clasterosporium caricinum (type 126, HdV)"
-Clematis,1,3,Clematis
-Closterium,2,3,Closterium
-Closterium undiff.,1,2,Closterium undiff.
-Coelastrum reticulatum,5,50,Coelastrum reticulatum
-Comarum,18,337,Comarum
-Comarum palustre,2,20,Comarum palustre
-Comarum-type,4,36,Comarum-type
-Coniferae-type,1,8,Coniferae-type
-Coniochaeta cf. C. ligniaria,2,103,Coniochaeta cf. C. ligniaria
-"Coniochaeta ligniaria (type 172, HdV)",1,9,"Coniochaeta ligniaria (type 172, HdV)"
-Coniochaeta xylariispora,2,56,Coniochaeta xylariispora
-Consolida regalis,1,2,Consolida regalis
-Consolida-type,6,32,Consolida-type
-Convallaria,1,1,Convallaria
-Convolvulus,7,22,Convolvulus
-Convolvulus arvensis,9,46,Convolvulus arvensis
-Convolvulus-type,1,1,Convolvulus-type
-Copepoda,8,64,Copepoda
-Cornus,8,9,Cornus
-Cornus mas,10,72,Cornus
-Cornus sanguinea,17,50,Cornus
-Cornus suecica,1,1,Cornus
-Coronilla undiff.,1,1,Coronilla undiff.
-Corylus,68,2273,Corylus
-Corylus avellana,26,1107,Corylus avellana
-Crataegus,1,1,Crataegus
-Crataegus-type,2,7,Crataegus-type
-Crupina,1,1,Crupina
-Cryptomeria,1,3,Cryptomeria
-Cupressaceae,2,11,Cupressaceae
-Cuscuta,8,64,Cuscuta
-Cuscuta epithymum,1,10,Cuscuta epithymum
-Cuscuta europaea-type,2,31,Cuscuta europaea-type
-Cyperaceae,84,3751,Cyperaceae
-Cystopteris,1,2,Cystopteris
-Daphne,3,8,Daphne
-Daucus,1,1,Daucus
-Daucus carota,1,1,Daucus carota
-Daucus-type,11,320,Daucus-type
-Delitschia,1,1,Delitschia
-Descurainia sophia,1,1,Descurainia sophia
-Desmidiaceae,3,48,Desmidiaceae
-Desmidiales,1,1,Desmidiales
-Dianthus,3,3,Dianthus
-Dianthus-type,4,25,Dianthus-type
-Difflugia,1,2,Difflugia
-Digitalis purpurea-type,1,1,Digitalis purpurea-type
-Dinoflagellata,4,88,Dinoflagellata
-Dinoflagellata undiff.,1,9,Dinoflagellata undiff.
-Diphasiastrum alpinum,1,30,Diphasiastrum alpinum
-Diphasiastrum alpinum-type,1,7,Diphasiastrum alpinum-type
-Diphasiastrum complanatum,1,2,Diphasiastrum complanatum
-Diporotheca,8,68,Diporotheca
-Dipsacoideae,3,4,Dipsacoideae
-Dipsacus,3,5,Dipsacus
-Drosera,15,20,Drosera
-Drosera intermedia,1,5,Drosera intermedia
-Drosera rotundifolia,6,16,Drosera rotundifolia
-Drosera rotundifolia-type,1,4,Drosera rotundifolia-type
-Dryas octopetala,3,15,Dryas octopetala
-Dryas-type,1,1,Dryas-type
-Dryopteris,2,67,Dryopteris
-Dryopteris carthusiana-type,1,2,Dryopteris carthusiana-type
-Dryopteris dilatata-type,2,2,Dryopteris dilatata-type
-Dryopteris filix-mas-type,4,8,Dryopteris filix-mas-type
-Dryopteris-type,20,744,Dryopteris-type
-Echinops,1,2,Echinops
-Echium,18,40,Echium
-Echium vulgare,2,3,Echium vulgare
-Echium-type,2,2,Echium-type
-Elatine,7,13,Elatine
-Elymus-type,1,2,Elymus-type
-Empetrum,3,5,Empetrum
-Empetrum nigrum-type,1,89,Empetrum nigrum-type
-Empetrum-type,6,50,Empetrum-type
-Encalypta-type,1,1,Encalypta-type
-Engelhardia-type,2,19,Engelhardia-type
-Entophlyctis lobata,8,59,Entophlyctis lobata
-Entorrhiza sp. (type HdV-527),1,3,Entorrhiza sp. (type HdV-527)
-Ephedra,6,21,Ephedra
-Ephedra cf. E. distachya,1,7,Ephedra cf. E. distachya
-Ephedra cf. E. foeminea,3,7,Ephedra cf. E. foeminea
-Ephedra cf. E. fragilis,1,1,Ephedra cf. E. fragilis
-Ephedra distachya,10,35,Ephedra distachya
-Ephedra distachya-type,9,30,Ephedra distachya-type
-Ephedra foeminea,1,1,Ephedra foeminea
-Ephedra foeminea-type,3,6,Ephedra foeminea-type
-Ephedra fragilis,4,25,Ephedra fragilis
-Ephedra fragilis-type,10,37,Ephedra fragilis-type
-Epilobium,42,150,Epilobium
-Epilobium-type,3,9,Epilobium-type
-Epipactis,1,1,Epipactis
-Equisetaceae,1,1,Equisetaceae
-Equisetum,74,1686,Equisetum
-Eranthis hyemalis-type,1,1,Eranthis hyemalis-type
-Erica ciliaris-type,1,2,Erica ciliaris-type
-Ericaceae,21,202,Ericaceae
-Ericaceae undiff.,7,44,Ericaceae undiff.
-Ericales,3,207,Ericales
-Ericales undiff.,1,118,Ericales undiff.
-Eriophorum,1,1,Eriophorum
-Erodium,4,5,Erodium
-Eryngium,2,31,Eryngium
-Eryngium-type,1,1,Eryngium-type
-Euglypha,8,66,Euglypha
-Eunotia sp.,1,1,Eunotia sp.
-Euonymus,12,28,Euonymus
-Euonymus europaeus,1,5,Euonymus europaeus
-Euphorbia,13,18,Euphorbia
-Euphorbia-type,1,5,Euphorbia-type
-Euphorbiaceae,1,3,Euphorbiaceae
-Euphrasia,2,2,Euphrasia
-Euphrasia-type,2,3,Euphrasia-type
-Fabaceae,51,350,Fabaceae
-Fabaceae undiff.,1,5,Fabaceae undiff.
-Faboideae,3,5,Faboideae
-Fagopyrum,23,46,Fagopyrum
-Fagopyrum esculentum,1,3,Fagopyrum esculentum
-Fagopyrum-type,4,12,Fagopyrum-type
-Fagus,75,2328,Fagus
-Fagus sylvatica,11,438,Fagus sylvatica
-Falcaria vulgaris,1,1,Falcaria vulgaris
-Falcaria-type,1,3,Falcaria-type
-Fallopia convolvulus,3,3,Fallopia convolvulus
-Fallopia convolvulus-type,3,3,Fallopia convolvulus-type
-Fallopia convolvulus/F. dumetorum,1,9,Fallopia convolvulus/F. dumetorum
-Filinia longiseta,1,22,Filinia longiseta
-Filipendula,81,2359,Filipendula
-Filipendula ulmaria/F. vulgaris,1,18,Filipendula ulmaria/F. vulgaris
-Frangula,27,188,Frangula
-Frangula alnus,38,327,Frangula alnus
-Fraxinus,68,1293,Fraxinus
-Fraxinus excelsior,14,484,Fraxinus excelsior
-Fraxinus ornus,1,1,Fraxinus ornus
-Fumaria-type,1,2,Fumaria-type
-Fungi,6,116,Fungi
-"Fungi (type 11, HdV)",1,3,"Fungi (type 11, HdV)"
-"Fungi (type 123, HdV)",1,2,"Fungi (type 123, HdV)"
-"Fungi (type 17, HdV)",2,11,"Fungi (type 17, HdV)"
-"Fungi (type 173, HdV)",1,1,Fungi
-"Fungi (type 18, HdV)",3,47,"Fungi (type 18, HdV)"
-"Fungi (type 19, HdV)",2,4,"Fungi (type 19, HdV)"
-"Fungi (type 20, HdV)",2,4,"Fungi (type 20, HdV)"
-"Fungi (type 200, HdV)",2,30,"Fungi (type 200, HdV)"
-"Fungi (type 23, HdV)",2,5,"Fungi (type 23, HdV)"
-"Fungi (type 24, HdV)",1,52,"Fungi (type 24, HdV)"
-"Fungi (type 3A, HdV)",4,80,"Fungi (type 3A, HdV)"
-"Fungi (type 404, HdV)",1,1,Fungi
-"Fungi (type 408, HdV)",1,4,"Fungi (type 408, HdV)"
-"Fungi (type 47, HdV)",1,1,Fungi
-"Fungi (type 53, HdV)",1,34,"Fungi (type 53, HdV)"
-"Fungi (type 54B, HdV)",1,5,"Fungi (type 54B, HdV)"
-"Fungi (type 571, HdV)",2,2,"Fungi (type 571, HdV)"
-"Fungi (type 64, HdV)",1,52,"Fungi (type 64, HdV)"
-"Fungi (type 65, HdV)",1,1,Fungi
-"Fungi (type 729, HdV)",1,7,"Fungi (type 729, HdV)"
-"Fungi (type 73, HdV)",2,11,"Fungi (type 73, HdV)"
-Fungi (type 778. HdV),1,1,Fungi
-"Fungi (type 83, HdV)",3,79,"Fungi (type 83, HdV)"
-"Fungi (type 8A, HdV)",3,46,"Fungi (type 8A, HdV)"
-"Fungi (type 8D, HdV)",1,21,"Fungi (type 8D, HdV)"
-"Fungi (type 8E, HdV)",3,51,"Fungi (type 8E, HdV)"
-"Fungi (type 90, HdV)",4,141,"Fungi (type 90, HdV)"
-"Fungi (type 96B, HdV)",1,30,"Fungi (type 96B, HdV)"
-Fungi undiff.,3,60,Fungi undiff.
-Fungi-type,1,8,Fungi-type
-Gaeumannomyces,4,55,Gaeumannomyces
-Gaeumannomyces cf. G. caricis,6,131,Gaeumannomyces cf. G. caricis
-Gaeumannomyces undiff.,1,12,Gaeumannomyces undiff.
-Galeopsis,1,2,Galeopsis
-Galeopsis-type,2,2,Galeopsis-type
-Galeopsis/Ballota-type,1,4,Galeopsis/Ballota-type
-Galium,14,218,Galium
-Galium-type,31,572,Galium-type
-Gelasinospora,6,19,Gelasinospora
-"Gelasinospora (type 1, HdV)",1,13,"Gelasinospora (type 1, HdV)"
-"Gelasinospora (type 1A, HdV)",1,10,"Gelasinospora (type 1A, HdV)"
-"Gelasinospora (type 1B, HdV)",1,2,"Gelasinospora (type 1B, HdV)"
-Gelasinospora reticulispora,1,5,Gelasinospora reticulispora
-Gelasinospora undiff.,1,1,Gelasinospora undiff.
-Genista,1,2,Genista
-Genista-type,7,19,Genista-type
-Gentiana,10,39,Gentiana
-Gentiana cruciata-type,1,1,Gentiana cruciata-type
-Gentiana pneumonanthe-type,5,8,Gentiana pneumonanthe-type
-Gentiana undiff.,1,9,Gentiana undiff.
-Gentiana-type,3,3,Gentiana-type
-Gentianaceae,6,15,Gentianaceae
-Gentianaceae undiff.,1,1,Gentianaceae undiff.
-Gentianella,2,2,Gentianella
-Gentianella campestris-type,4,10,Gentianella campestris-type
-Geoglossum sphagnophilum,2,16,Geoglossum sphagnophilum
-"Geoglossum sphagnophilum (type 77A, HdV)",2,21,"Geoglossum sphagnophilum (type 77A, HdV)"
-"Geoglossum sphagnophilum/Trichoglossum hirsutum (type 77A/77B, HdV)",1,3,"Geoglossum sphagnophilum/Trichoglossum hirsutum (type 77A/77B, HdV)"
-Geraniaceae,1,2,Geraniaceae
-Geranium,32,79,Geranium
-Geranium-type,1,9,Geranium-type
-Geum,11,23,Geum
-Geum-type,10,31,Geum-type
-Glaucium,2,7,Glaucium
-Glaucium corniculatum,1,1,Glaucium corniculatum
-Glomus,2,13,Glomus
-Glomus cf. G. fasciculatum,1,19,Glomus cf. G. fasciculatum
-Glyceria-type,5,21,Glyceria-type
-"Glyptotendipes pallens group (type 509, HdV)",1,2,"Glyptotendipes pallens group (type 509, HdV)"
-Gnaphalium-type,11,82,Gnaphalium-type
-Gratiola officinalis,1,1,Gratiola officinalis
-Gymnocarpium dryopteris,8,47,Gymnocarpium dryopteris
-Gypsophila,5,16,Gypsophila
-Gypsophila repens,1,1,Gypsophila repens
-Gypsophila repens-type,4,26,Gypsophila repens-type
-Gypsophila-type,4,40,Gypsophila-type
-Gyratrix hermaphroditus,6,66,Gyratrix hermaphroditus
-Habrotrocha,1,8,Habrotrocha
-Habrotrocha angusticollis,14,251,Habrotrocha angusticollis
-"Habrotrocha angusticollis (type 37, HdV)",1,34,"Habrotrocha angusticollis (type 37, HdV)"
-Hedera,24,49,Hedera
-Hedera helix,26,128,Hedera helix
-Hedysarum-type,1,2,Hedysarum-type
-Helianthemum,42,308,Helianthemum
-Helianthemum nummularium-type,1,3,Helianthemum nummularium-type
-Helianthemum oelandicum subsp. alpestris-type,1,1,Helianthemum oelandicum subsp. alpestris-type
-Helicoma,3,17,Helicoma
-Helicoön pluriseptatum,8,196,Helicoön pluriseptatum
-"Helicosporium/Helicoön pluriseptatum (type 30, HdV)",1,20,"Helicosporium/Helicoön pluriseptatum (type 30, HdV)"
-Heliotropium europaeum,1,9,Heliotropium europaeum
-Helleborus,1,1,Helleborus
-Heracleum,6,40,Heracleum
-Heracleum sphondylium,2,6,Heracleum sphondylium
-Heracleum-type,6,25,Heracleum-type
-Herniaria,1,1,Herniaria
-Herniaria-type,2,2,Herniaria-type
-Hippophaë,7,20,Hippophaë
-Hippophaë rhamnoides,10,43,Hippophaë rhamnoides
-Hippuris vulgaris,2,3,Hippuris vulgaris
-Hordeum,1,3,Hordeum
-Hordeum-type,7,74,Hordeum-type
-Hottonia palustris,1,5,Hottonia palustris
-Humulus,7,16,Humulus
-Humulus lupulus,5,80,Humulus lupulus
-Humulus/Cannabis,32,497,Humulus/Cannabis
-Humulus/Cannabis-type,6,40,Humulus/Cannabis-type
-Huperzia selago,7,19,Huperzia selago
-Hyalosphenia papilio,1,2,Hyalosphenia papilio
-Hyalosphenia subflava,5,12,Hyalosphenia subflava
-Hydrocotyle,1,1,Hydrocotyle
-Hydrocotyle vulgaris,1,5,Hydrocotyle vulgaris
-Hydrocotyle-type,1,1,Hydrocotyle-type
-Hydrodictyon,1,1,Hydrodictyon
-Hymenophyllum,1,3,Hymenophyllum
-Hyoscyamus,1,6,Hyoscyamus
-Hypericum,27,143,Hypericum
-Hypericum perforatum-type,3,50,Hypericum perforatum-type
-Hypericum perforatum/H. androsaemum-type,1,23,Hypericum perforatum/H. androsaemum-type
-Hystrix,2,9,Hystrix
-Ilex,2,15,Ilex
-Illecebrum verticillatum,1,1,Illecebrum verticillatum
-Impatiens,10,17,Impatiens
-Impatiens noli-tangere,1,5,Impatiens noli-tangere
-Impatiens parviflora,1,12,Impatiens parviflora
-Indeterminable,1,26,Indeterminable
-Indeterminable undiff.,1,51,Indeterminable undiff.
-Iris,2,3,Iris
-Iris pseudacorus,1,1,Iris pseudacorus
-Iris pseudacorus-type,2,3,Iris pseudacorus-type
-Iris-type,3,11,Iris-type
-Isoëtes,1,1,Isoëtes
-Isoëtes lacustris,1,2,Isoëtes lacustris
-Jasione,5,8,Jasione
-Jasione montana,8,11,Jasione montana
-Jasione-type,1,2,Jasione-type
-Juglandaceae,2,13,Juglandaceae
-Juglandaceae-type,1,6,Juglandaceae-type
-Juglans,57,194,Juglans
-"Juncus sp. (type 2.2, MI)",1,1,"Juncus sp. (type 2.2, MI)"
-Juniperus,56,862,Juniperus
-Juniperus communis,1,4,Juniperus communis
-Juniperus-type,1,12,Juniperus-type
-Knautia,21,33,Knautia
-Knautia arvensis,2,5,Knautia arvensis
-Knautia arvensis-type,3,6,Knautia arvensis-type
-Koenigia alpina,1,2,Koenigia alpina
-Lamiaceae,40,422,Lamiaceae
-Lamiaceae (tricolpate),1,17,Lamiaceae (tricolpate)
-Lamium album-type,1,2,Lamium album-type
-Lamium-type,21,85,Lamium-type
-Larix,30,99,Larix
-Larix decidua,2,3,Larix decidua
-Larix-type,1,10,Larix-type
-Larix/Pseudotsuga,1,1,Larix/Pseudotsuga
-Laserpitium,1,2,Laserpitium
-Laserpitium latifolium-type,1,1,Laserpitium latifolium-type
-Lasiosphaeria cf. L. caudata,1,63,Lasiosphaeria cf. L. caudata
-Lasiosphaeria sp.,1,2,Lasiosphaeria sp.
-"Lasiosphaeria sp. (type 63C, HdV)",1,2,"Lasiosphaeria sp. (type 63C, HdV)"
-Lasiosphaeria-type,1,8,Lasiosphaeria-type
-Lathyrus-type,11,14,Lathyrus-type
-Lemna,4,17,Lemna
-Lemnoideae,1,12,Lemnoideae
-Lepidoptera,1,1,Lepidoptera
-Ligustrum,5,27,Ligustrum
-Liliaceae,25,85,Liliaceae
-Liliaceae-type,2,4,Liliaceae-type
-Linum,3,6,Linum
-Linum austriacum-type,2,2,Linum austriacum-type
-Linum catharticum,12,22,Linum catharticum
-Linum catharticum-type,1,2,Linum catharticum-type
-Linum flavum,1,2,Linum flavum
-Linum usitatissimum-type,3,6,Linum usitatissimum-type
-Liquidambar,1,3,Liquidambar
-Listera ovata,1,1,Listera ovata
-Listera-type,2,12,Listera-type
-Lithospermum officinale,1,2,Lithospermum officinale
-Lobelia,2,2,Lobelia
-Lonicera,13,29,Lonicera
-Lonicera periclymenum,2,2,Lonicera periclymenum
-Lonicera xylosteum,3,3,Lonicera xylosteum
-Loranthus,8,18,Loranthus
-Loranthus europaeus,2,2,Loranthus europaeus
-Lotus,1,6,Lotus
-Lotus cf. L. corniculatus,1,1,Lotus cf. L. corniculatus
-Lotus pedunculatus,4,18,Lotus pedunculatus
-Lotus-type,32,162,Lotus-type
-Ludwigia palustris,1,3,Ludwigia palustris
-Lycopodiaceae,12,95,Lycopodiaceae
-Lycopodiaceae cf. Diphasiastrum complanatum,1,2,Lycopodiaceae cf. Diphasiastrum complanatum
-Lycopodiaceae undiff.,2,3,Lycopodiaceae undiff.
-Lycopodiella inundata,4,6,Lycopodiella inundata
-Lycopodium,4,8,Lycopodium
-Lycopodium annotinum,56,370,Lycopodium annotinum
-Lycopodium annotinum-type,5,23,Lycopodium annotinum-type
-Lycopodium clavatum,44,178,Lycopodium clavatum
-Lycopodium clavatum-type,3,11,Lycopodium clavatum-type
-Lycopodium spike,8,679,Lycopodium spike
-Lycopodium tablets,5,525,Lycopodium tablets
-Lycopodium undiff.,1,1,Lycopodium undiff.
-Lycopus,9,27,Lycopus
-Lycopus-type,11,66,Lycopus-type
-Lysimachia,30,152,Lysimachia
-Lysimachia cf. L. vulgaris,1,1,Lysimachia cf. L. vulgaris
-Lysimachia nemorum,1,3,Lysimachia nemorum
-Lysimachia nemorum-type,1,1,Lysimachia nemorum-type
-Lysimachia thyrsiflora,1,1,Lysimachia thyrsiflora
-Lysimachia vulgaris,7,21,Lysimachia vulgaris
-Lysimachia vulgaris-type,19,142,Lysimachia vulgaris-type
-Lysimachia-type,9,62,Lysimachia-type
-Lythrum,19,87,Lythrum
-Lythrum portula-type,3,5,Lythrum portula-type
-Lythrum salicaria,9,48,Lythrum salicaria
-Lythrum-type,1,20,Lythrum-type
-Macrobiotus,1,2,Macrobiotus
-Macrobiotus cf. M. echinogenitus,1,2,Macrobiotus cf. M. echinogenitus
-Magnolia-type,1,3,Magnolia-type
-Maianthemum bifolium,1,4,Maianthemum bifolium
-Malus,2,2,Malus
-Malus undiff.,1,1,Malus undiff.
-Malus-type,1,3,Malus-type
-Malva-type,1,2,Malva-type
-Malvaceae,6,14,Malvaceae
-Marchantiophyta,3,8,Marchantiophyta
-Marrubium,1,1,Marrubium
-Matricaria-type,1,20,Matricaria-type
-Medicago falcata-type,1,3,Medicago falcata-type
-Melampyrum,54,445,Melampyrum
-Melampyrum-type,1,2,Melampyrum-type
-Meliola,1,2,Meliola
-Mentha,7,39,Mentha
-Mentha-type,24,253,Mentha-type
-Menyanthes,7,32,Menyanthes
-Menyanthes trifoliata,33,264,Menyanthes trifoliata
-Menyanthes trifoliata-type,2,3,Menyanthes trifoliata-type
-Mercurialis,8,14,Mercurialis
-Mercurialis perennis-type,2,3,Mercurialis perennis-type
-Micranthes stellaris,2,15,Micranthes stellaris
-Micranthes stellaris-type,5,14,Micranthes stellaris-type
-Microdalyellia armigera,6,140,Microdalyellia armigera
-Microrrhinum minus,1,1,Microrrhinum minus
-Microthyriaceae,7,78,Microthyriaceae
-Microthyrium,32,246,Microthyrium
-Microthyrium microscopicum,4,18,Microthyrium microscopicum
-Microthyrium undiff.,2,32,Microthyrium undiff.
-Microthyrium-type,1,7,Microthyrium-type
-Minuartia-type,4,7,Minuartia-type
-Monactinus simplex,4,29,Monactinus simplex
-Monactinus simplex var. echinulatum,2,32,Monactinus simplex var. echinulatum
-Monactinus simplex var. simplex,2,47,Monactinus simplex var. simplex
-Monocotyledoneae,8,41,Monocotyledoneae
-Montia,4,6,Montia
-Mougeotia,12,188,Mougeotia
-"Mougeotia cf. M. gracillima (type 61, HdV)",1,4,"Mougeotia cf. M. gracillima (type 61, HdV)"
-Mougeotia undiff.,2,2,Mougeotia undiff.
-Mougeotia-type,1,1,Mougeotia-type
-Muscari,1,1,Muscari
-Myosotis,3,3,Myosotis
-Myosotis arvensis-type,1,2,Myosotis arvensis-type
-Myrica-type,1,6,Myrica-type
-Myricaria germanica,1,1,Myricaria germanica
-Myriophyllum,2,2,Myriophyllum
-Myriophyllum alterniflorum,17,87,Myriophyllum alterniflorum
-Myriophyllum cf. M. spicatum,1,19,Myriophyllum cf. M. spicatum
-Myriophyllum cf. M. verticillatum,1,2,Myriophyllum cf. M. verticillatum
-Myriophyllum heterophyllum,3,44,Myriophyllum heterophyllum
-Myriophyllum spicatum,24,225,Myriophyllum spicatum
-Myriophyllum spicatum-type,1,1,Myriophyllum spicatum-type
-Myriophyllum undiff.,2,2,Myriophyllum undiff.
-Myriophyllum verticillatum,16,126,Myriophyllum verticillatum
-Myriophyllum verticillatum-type,6,112,Myriophyllum verticillatum-type
-Nebela,5,8,Nebela
-Nebela parvula,1,1,Nebela parvula
-Nebela undiff.,1,1,Nebela undiff.
-Neurospora,1,1,Neurospora
-Normapolles,1,1,Normapolles
-Nuphar,15,110,Nuphar
-Nymphaea,14,135,Nymphaea
-Nymphaea alba,2,62,Nymphaea alba
-Nymphaea alba-type,1,5,Nymphaea alba-type
-Nymphaea cf. N. candida,1,61,Nymphaea cf. N. candida
-Nymphaea undiff.,1,3,Nymphaea undiff.
-Nymphaeaceae,5,86,Nymphaeaceae
-Nymphoides peltata-type,1,1,Nymphoides peltata-type
-Nyssa,2,15,Nyssa
-Odontites,2,4,Odontites
-Odontites-type,3,66,Odontites-type
-Oenanthe,4,16,Oenanthe
-Oenanthe-type,1,1,Oenanthe-type
-Oenothera,1,1,Oenothera
-Olea,2,5,Olea
-Oleaceae,1,1,Oleaceae
-Onagraceae,1,1,Onagraceae
-Onobrychis,4,25,Onobrychis
-Ononis,1,1,Ononis
-Ononis-type,1,1,Ononis-type
-Onopordum,1,3,Onopordum
-Ophioglossum,13,28,Ophioglossum
-Ophioglossum vulgatum,2,3,Ophioglossum vulgatum
-Orchidaceae,2,2,Orchidaceae
-"Oribatida (type 396, HdV)",1,2,"Oribatida (type 396, HdV)"
-Orlaya grandiflora,1,1,Orlaya grandiflora
-Ornithogalum umbellatum-type,1,1,Ornithogalum umbellatum-type
-Ornithogalum-type,1,5,Ornithogalum-type
-Ostrya-type,1,1,Ostrya-type
-Oxalis,9,13,Oxalis
-Oxyria-type,2,15,Oxyria-type
-Papaver,6,14,Papaver
-Papaver rhoeas-type,2,3,Papaver rhoeas-type
-Papaver somniferum,1,4,Papaver somniferum
-Papaveraceae,10,26,Papaveraceae
-Parapediastrum biradiatum,1,1,Parapediastrum biradiatum
-Parnassia,4,11,Parnassia
-Parnassia palustris,16,37,Parnassia palustris
-Parnassia-type,1,1,Parnassia-type
-Pediastrum,9,58,Pediastrum
-Pediastrum angulosum,5,36,Pediastrum angulosum
-Pediastrum angulosum var. angulosum,3,69,Pediastrum angulosum var. angulosum
-Pediastrum angulosum var. asperum,2,2,Pediastrum angulosum var. asperum
-Pediastrum braunii,1,4,Pediastrum braunii
-Pediastrum duplex,10,165,Pediastrum duplex
-Pediastrum duplex var. duplex,1,1,Pediastrum duplex var. duplex
-Pediastrum duplex var. rugulosum,8,211,Pediastrum duplex var. rugulosum
-Pediastrum muticum var. scutum,2,4,Pediastrum muticum var. scutum
-Pediastrum orientale,1,37,Pediastrum orientale
-Pediastrum undiff.,3,41,Pediastrum undiff.
-Pedicularis,19,30,Pedicularis
-Pedicularis palustris-type,1,1,Pedicularis palustris-type
-Penium,1,2,Penium
-Persicaria,1,2,Persicaria
-Persicaria amphibia,8,11,Persicaria amphibia
-Persicaria amphibia-type,2,5,Persicaria amphibia-type
-Persicaria cf. P. lapathifolia,1,1,Persicaria cf. P. lapathifolia
-Persicaria lapathifolia,1,1,Persicaria lapathifolia
-Persicaria maculosa,13,38,Persicaria maculosa
-Persicaria maculosa-type,27,69,Persicaria maculosa-type
-Petasites,3,52,Petasites
-Petasites hybridus-type,1,2,Petasites hybridus-type
-Petasites-type,13,185,Petasites-type
-Peucedanum,1,16,Peucedanum
-Peucedanum palustre-type,1,25,Peucedanum palustre-type
-Peucedanum-type,12,207,Peucedanum-type
-Phegopteris,2,2,Phegopteris
-Phegopteris connectilis,1,1,Phegopteris connectilis
-Phragmites,2,22,Phragmites
-Phragmites australis,2,11,Phragmites australis
-Phragmites-type,5,219,Phragmites-type
-Phyteuma,6,11,Phyteuma
-Phyteuma-type,1,4,Phyteuma-type
-Picea,74,2610,Picea
-Picea abies,23,1005,Picea abies
-Pilularia,1,2,Pilularia
-Pimpinella anisum,1,1,Pimpinella anisum
-Pimpinella major,1,11,Pimpinella major
-Pimpinella major-type,12,136,Pimpinella major-type
-Pimpinella major/P. saxifraga,1,4,Pimpinella major/P. saxifraga
-Pinguicula,3,4,Pinguicula
-Pinnularia,1,2,Pinnularia
-Pinus,77,3548,Pinus
-Pinus (Tertiary),1,1,Pinus (Tertiary)
-Pinus cembra,6,85,Pinus cembra
-Pinus cembra-type,3,9,Pinus cembra-type
-Pinus sp.,1,15,Pinus sp.
-Pinus subg. Pinus,3,210,Pinus subg. Pinus
-Pinus subg. Strobus-type,1,27,Pinus subg. Strobus-type
-Pinus sylvestris,3,99,Pinus sylvestris
-Pinus sylvestris-type,2,80,Pinus sylvestris-type
-Pisum sativum,4,21,Pisum sativum
-Plantaginaceae,3,12,Plantaginaceae
-Plantaginaceae undiff.,1,27,Plantaginaceae undiff.
-Plantago,3,7,Plantago
-Plantago alpina,6,26,Plantago alpina
-Plantago alpina-type,3,22,Plantago alpina-type
-Plantago atrata-type,1,1,Plantago atrata-type
-Plantago coronopus,2,2,Plantago coronopus
-Plantago lanceolata,68,1352,Plantago lanceolata
-Plantago lanceolata-type,18,203,Plantago lanceolata-type
-Plantago major,20,203,Plantago major
-Plantago major-type,13,119,Plantago major-type
-Plantago major/P. media,48,452,Plantago major/P. media
-Plantago major/P. media-type,8,50,Plantago major/P. media-type
-Plantago maritima-type,3,12,Plantago maritima-type
-Plantago media,17,330,Plantago media
-Plantago media-type,3,6,Plantago media-type
-Plantago sp.,2,3,Plantago sp.
-Platanus,1,1,Platanus
-Platycarya,1,1,Platycarya
-"Platyhelminthes (type 353A, HdV)",1,23,"Platyhelminthes (type 353A, HdV)"
-"Platyhelminthes (type 353B, HdV)",2,93,"Platyhelminthes (type 353B, HdV)"
-"Pleospora sp. (type 3B, HdV)",1,2,"Pleospora sp. (type 3B, HdV)"
-Pleospora undiff.,1,42,Pleospora undiff.
-Pleurospermum,2,2,Pleurospermum
-Pleurospermum austriacum,13,22,Pleurospermum austriacum
-Pleurospermum austriacum-type,1,2,Pleurospermum austriacum-type
-Poaceae,86,3892,Poaceae
-Poaceae (Cerealia-type excluding Secale),2,77,Poaceae (Cerealia-type excluding Secale)
-Poaceae (Cerealia-type),16,148,Poaceae (Cerealia-type)
-Poaceae (Cerealia),14,129,Poaceae (Cerealia)
-Poaceae (Cerealia) excluding Secale,1,26,Poaceae (Cerealia) excluding Secale
-Poaceae (Cerealia) undiff.,20,239,Poaceae (Cerealia) undiff.
-Podocarpus-type,1,3,Podocarpus-type
-"Podospora sp./Zopfiella sp. (type 466, HdV)",1,6,"Podospora sp./Zopfiella sp. (type 466, HdV)"
-"Podospora-type (type 368, HdV)",1,1,"Podospora-type (type 368, HdV)"
-Polemonium,9,15,Polemonium
-Polemonium caeruleum,5,10,Polemonium caeruleum
-Polygala,6,7,Polygala
-Polygonaceae,3,5,Polygonaceae
-Polygonaceae undiff.,1,2,Polygonaceae undiff.
-Polygonatum,2,2,Polygonatum
-Polygonum,1,1,Polygonum
-Polygonum aviculare,56,402,Polygonum aviculare
-Polygonum aviculare-type,8,57,Polygonum aviculare-type
-Polygonum sp.,3,26,Polygonum sp.
-Polypodiaceae,42,1022,Polypodiaceae
-"Polypodiophyta (monolete, psilate)",1,35,"Polypodiophyta (monolete, psilate)"
-"Polypodiophyta (monolete, verrucate)",1,2,"Polypodiophyta (monolete, verrucate)"
-Polypodium,15,430,Polypodium
-Polypodium vulgare,30,151,Polypodium vulgare
-Populus,44,473,Populus
-Porifera,1,1,Porifera
-Potamogeton,36,460,Potamogeton
-Potamogeton natans-type,1,3,Potamogeton natans-type
-Potamogeton-type,12,163,Potamogeton-type
-Potentilla,9,132,Potentilla
-Potentilla-type,27,496,Potentilla-type
-Potentilla/Comarum,9,105,Potentilla/Comarum
-Potentilla/Comarum-type,11,85,Potentilla/Comarum-type
-Potentilla/Fragaria,1,6,Potentilla/Fragaria
-Poterium sanguisorba,12,14,Poterium sanguisorba
-Poterium sanguisorba subsp. sanguisorba,2,5,Poterium sanguisorba subsp. sanguisorba
-Primula,4,11,Primula
-Primula clusiana-type,1,1,Primula clusiana-type
-Primula farinosa-type,1,2,Primula farinosa-type
-Primula veris-type,4,12,Primula veris-type
-Primulaceae,2,3,Primulaceae
-Prunella-type,1,1,Prunella-type
-Prunus,6,19,Prunus
-Prunus sp.,1,1,Prunus sp.
-Prunus-type,13,52,Prunus-type
-Pseudopediastrum boryanum,13,208,Pseudopediastrum boryanum
-Pseudopediastrum boryanum var. boryanum,5,58,Pseudopediastrum boryanum var. boryanum
-Pseudopediastrum boryanum var. boryanum sensu lato,5,211,Pseudopediastrum boryanum var. boryanum sensu lato
-Pseudopediastrum boryanum var. cornutum,8,150,Pseudopediastrum boryanum var. cornutum
-Pseudopediastrum boryanum var. longicorne,9,253,Pseudopediastrum boryanum var. longicorne
-Pseudopediastrum brevicorne,3,6,Pseudopediastrum brevicorne
-Pseudopediastrum integrum,11,297,Pseudopediastrum integrum
-Pseudopediastrum kawraiskyi,6,36,Pseudopediastrum kawraiskyi
-Pteridium,22,85,Pteridium
-Pteridium aquilinum,46,517,Pteridium aquilinum
-Pteridophyta,3,81,Pteridophyta
-"Pteridophyta (monolete, verrucate)",2,8,"Pteridophyta (monolete, verrucate)"
-Pteridophyta (monolete) undiff.,5,255,Pteridophyta (monolete) undiff.
-Pterocarya,3,12,Pterocarya
-Pterocarya fraxinifolia,1,2,Pterocarya fraxinifolia
-Pulmonaria,1,1,Pulmonaria
-Pulmonaria-type,6,9,Pulmonaria-type
-Pyrola,1,1,Pyrola
-Pyxidicula,1,2,Pyxidicula
-Quercus,85,3128,Quercus
-Quercus coccifera,2,24,Quercus coccifera
-Quercus pubescens,1,14,Quercus pubescens
-Ranunculaceae,57,1409,Ranunculaceae
-Ranunculaceae undiff.,4,129,Ranunculaceae
-Ranunculus,1,24,Ranunculaceae
-Ranunculus acris-type,20,445,Ranunculaceae
-Ranunculus acris/R. flammula/R. sceleratus group,1,16,Ranunculaceae
-Ranunculus aquatilis-type,1,3,Ranunculaceae
-Ranunculus arvensis,4,4,Ranunculaceae
-Ranunculus arvensis-type,1,16,Ranunculaceae
-Ranunculus flammula-type,1,9,Ranunculaceae
-Ranunculus sect. Batrachium,13,155,Ranunculaceae
-Ranunculus sect. Batrachium-type,4,17,Ranunculaceae
-Ranunculus-type,31,417,Ranunculaceae
-Reseda,1,2,Reseda
-Reseda lutea-type,1,1,Reseda lutea-type
-Rhabdocoela,3,71,Rhabdocoela
-"Rhabdocoela (type 353, HdV)",1,10,"Rhabdocoela (type 353, HdV)"
-Rhamnaceae,1,1,Rhamnaceae
-Rhamnus,11,39,Rhamnus
-Rhinanthus,9,51,Rhinanthus
-Rhinanthus-type,2,5,Rhinanthus-type
-Rhinanthus/Veronica,1,6,Rhinanthus/Veronica
-Rhizopoda,4,26,Rhizopoda
-Rhizopoda undiff.,5,31,Rhizopoda undiff.
-Rhododendron,1,1,Rhododendron
-Rhododendron subsect. Ledum,3,12,Rhododendron subsect. Ledum
-Rhododendron tomentosum,4,30,Rhododendron tomentosum
-Rhus-type,1,3,Rhus-type
-Ribes,16,57,Ribes
-Ribes alpinum,1,2,Ribes
-Ribes uva-crispa,1,1,Ribes
-Riccia,3,3,Riccia
-Rivularia,1,7,Rivularia
-Rosa,6,24,Rosa
-Rosa-type,1,3,Rosa-type
-Rosaceae,65,787,Rosaceae
-Rosaceae undiff.,3,45,Rosaceae undiff.
-Rotifera undiff.,1,6,Rotifera undiff.
-Rotifera/Tardigrada,1,1,Rotifera/Tardigrada
-Rubiaceae,56,1248,Rubiaceae
-Rubus,12,37,Rubus
-Rubus chamaemorus,1,7,Rubus
-Rumex,36,610,Rumex
-Rumex acetosa,10,86,Rumex
-Rumex acetosa-type,41,874,Rumex
-Rumex acetosa/R. acetosella,1,29,Rumex
-Rumex acetosella,20,252,Rumex
-Rumex acetosella-type,9,172,Rumex
-Rumex aquaticus-type,1,3,Rumex
-Rumex cf. R. alpinus,1,1,Rumex
-Rumex maritimus-type,1,1,Rumex
-Rumex obtusifolius,3,6,Rumex
-Rumex obtusifolius-type,4,12,Rumex
-Rumex subg. Rumex,2,2,Rumex
-Rumex undiff.,4,35,Rumex
-Rumex-type,2,3,Rumex
-Rumex/Oxyria-type,1,1,Rumex
-Sagina,3,4,Sagina
-Sagina procumbens-type,1,1,Sagina procumbens-type
-Sagina-type,2,2,Sagina-type
-Sagittaria,4,5,Sagittaria
-Sagittaria-type,1,1,Sagittaria-type
-Salix,86,2878,Salix
-Salix herbacea-type,2,20,Salix herbacea-type
-Salvia,1,1,Salvia
-Sambucus,13,31,Sambucus
-Sambucus cf. S. ebulus,1,1,Sambucus
-Sambucus cf. S. nigra,6,40,Sambucus
-Sambucus cf. S. racemosa,4,10,Sambucus
-Sambucus ebulus,5,10,Sambucus
-Sambucus nigra,18,121,Sambucus
-Sambucus nigra-type,10,63,Sambucus
-Sambucus nigra/S. racemosa,1,4,Sambucus
-Sambucus racemosa,12,30,Sambucus
-Samolus valerandi,1,1,Samolus valerandi
-Sample quantity,6,368,Sample quantity
-Sanguisorba minor-type,1,5,Sanguisorba minor-type
-Sanguisorba officinalis,50,183,Sanguisorba officinalis
-Sanicula europaea,1,1,Sanicula europaea
-Sanicula-type,1,1,Sanicula-type
-Saussurea-type,1,1,Saussurea-type
-Saxifraga,3,6,Saxifraga
-Saxifraga aizoides-type,2,2,Saxifraga aizoides-type
-Saxifraga granulata,1,5,Saxifraga granulata
-Saxifraga granulata-type,3,7,Saxifraga granulata-type
-Saxifraga hirculus-type,1,3,Saxifraga hirculus-type
-Saxifraga oppositifolia,1,2,Saxifraga oppositifolia
-Saxifraga oppositifolia-type,4,11,Saxifraga oppositifolia-type
-Saxifraga undiff.,2,2,Saxifraga undiff.
-Saxifragaceae,13,42,Saxifragaceae
-Saxifragaceae undiff.,1,3,Saxifragaceae undiff.
-Scabiosa,9,12,Scabiosa
-Scabiosa columbaria subsp. pratensis-type,1,2,Scabiosa columbaria subsp. pratensis-type
-Scabiosa columbaria-type,1,1,Scabiosa columbaria-type
-Scandix pecten-veneris/Caucalis platycarpos,1,1,Scandix pecten-veneris/Caucalis platycarpos
-Scenedesmus,11,225,Scenedesmus
-Scenedesmus undiff.,2,7,Scenedesmus undiff.
-Scheuchzeria,6,32,Scheuchzeria
-Scheuchzeria palustris,6,30,Scheuchzeria palustris
-Sciadopitys,2,18,Sciadopitys
-Sciadopitys-type,1,3,Sciadopitys-type
-Scilla-type,1,1,Scilla-type
-Scleranthus,4,10,Scleranthus
-Scleranthus annuus,3,6,Scleranthus annuus
-Scleranthus annuus-type,2,3,Scleranthus annuus-type
-Scleranthus cf. S. annuus,1,2,Scleranthus cf. S. annuus
-Scleranthus cf. S. perennis,1,2,Scleranthus cf. S. perennis
-Scleranthus perennis,1,2,Scleranthus perennis
-Scleranthus perennis-type,1,1,Scleranthus perennis-type
-Scleranthus-type,5,11,Scleranthus-type
-Scrophularia,3,8,Scrophularia
-Scrophularia-type,3,7,Scrophularia-type
-Scrophulariaceae,14,40,Scrophulariaceae
-Scutellaria,1,3,Scutellaria
-Secale,35,467,Secale
-Secale cereale,32,408,Secale cereale
-Secale-type,16,136,Secale-type
-Securigera varia,1,1,Securigera varia
-Sedum,13,43,Sedum
-Sedum-type,2,2,Sedum-type
-Selaginella,3,5,Selaginella
-Selaginella selaginoides,19,73,Selaginella selaginoides
-Selaginellaceae,1,1,Selaginellaceae
-Senecio,1,1,Senecio
-Senecio-type,12,38,Senecio-type
-Senecio/Aster,1,10,Senecio/Aster
-Sequoia,1,4,Sequoia
-Serratula,1,4,Serratula
-Serratula-type,1,1,Serratula-type
-Seseli-type,1,1,Seseli-type
-Sigmopollis,1,2,Sigmopollis
-Silene,3,7,Silene
-Silene dioica-type,8,18,Silene dioica-type
-Silene flos-cuculi,8,65,Silene flos-cuculi
-Silene latifolia,1,1,Silene latifolia
-Silene viscaria-type,1,1,Silene viscaria-type
-Silene vulgaris,1,1,Silene vulgaris
-Silene vulgaris-type,8,19,Silene vulgaris-type
-Silene-type,23,126,Silene-type
-Silene-type undiff.,1,1,Silene-type undiff.
-Sileneae,28,275,Sileneae
-Silenoideae-type,12,82,Silenoideae-type
-Sinapis-type,1,2,Sinapis-type
-Sium latifolium-type,1,2,Sium latifolium-type
-Solanaceae,1,2,Solanaceae
-Solanum,1,1,Solanum
-Solanum cf. S. nigrum,1,1,Solanum cf. S. nigrum
-Solanum dulcamara,9,57,Solanum dulcamara
-Solanum nigrum,1,3,Solanum nigrum
-Solanum nigrum-type,6,14,Solanum nigrum-type
-Soldanella,1,1,Soldanella
-Sorbus,24,81,Sorbus
-Sorbus aria-type,1,2,Sorbus aria-type
-Sorbus aucuparia,2,7,Sorbus aucuparia
-Sorbus group,1,2,Sorbus group
-Sorbus torminalis,2,2,Sorbus torminalis
-Sorbus-type,8,80,Sorbus-type
-"Sordaria-type (type 55A, HdV)",3,8,"Sordaria-type (type 55A, HdV)"
-Sordariaceae,1,26,Sordariaceae
-"Sordariaceae/Sordaria (type 55B, HdV)",1,2,"Sordariaceae/Sordaria (type 55B, HdV)"
-Sparganium,12,111,Sparganium
-Sparganium erectum,2,19,Sparganium erectum
-Sparganium-type,8,181,Sparganium-type
-Spergula,2,8,Spergula
-Spergula-type,1,1,Spergula-type
-Spergularia-type,1,1,Spergularia-type
-Sphagnum,77,2145,Sphagnum
-Spirogyra,7,81,Spirogyra
-Spirogyra cf. S. scrobiculata,1,3,Spirogyra cf. S. scrobiculata
-Spirogyra-type,3,5,Spirogyra-type
-Sporormiella,2,35,Sporormiella
-"Sporormiella (type 113, HdV)",1,10,"Sporormiella (type 113, HdV)"
-Stachys,5,12,Stachys
-Stachys-type,4,10,Stachys-type
-Staurastrum,6,38,Staurastrum
-Staurastrum undiff.,1,1,Staurastrum undiff.
-Stauridium tetras,2,14,Stauridium tetras
-Stellaria,2,10,Stellaria
-Stellaria holostea,3,6,Stellaria holostea
-Stellaria-type,2,4,Stellaria-type
-Stratiotes aloides,3,3,Stratiotes aloides
-Succisa,15,40,Succisa
-Succisa pratensis,8,9,Succisa pratensis
-Succisa-type,1,2,Succisa-type
-Succisella,1,1,Succisella
-Swertia perennis,2,2,Swertia perennis
-Symphytum,21,43,Symphytum
-Symphytum cf. S. officinale,1,7,Symphytum cf. S. officinale
-Symphytum-type,2,4,Symphytum-type
-Symplocos,1,1,Symplocos
-Tardigrada,2,13,Tardigrada
-"Tardigrada (type 902, HdV)",1,1,"Tardigrada (type 902, HdV)"
-Tardigrada undiff.,1,3,Tardigrada undiff.
-Taxus,1,2,Taxus
-Taxus baccata,2,10,Taxus baccata
-Tetraëdron,7,137,Tetraëdron
-Tetraëdron minimum,9,138,Tetraëdron minimum
-Tetraploa scheueri,1,2,Tetraploa scheueri
-Teucrium,3,16,Teucrium
-Thalictrum,75,1446,Thalictrum
-Thalictrum-type,3,4,Thalictrum-type
-Thecaphora,4,18,Thecaphora
-Thelypteris,1,3,Thelypteris
-Thelypteris palustris,7,60,Thelypteris palustris
-Thesium,4,11,Thesium
-Thesium-type,1,1,Thesium-type
-Tilia,79,2445,Tilia
-Tilia cordata,9,144,Tilia cordata
-Tilia platyphyllos,10,106,Tilia platyphyllos
-Tilia undiff.,4,50,Tilia undiff.
-Tilletia sphagni,12,92,Tilletia sphagni
-"Tilletia sphagni (type 27, HdV)",1,28,"Tilletia sphagni (type 27, HdV)"
-Tofieldia,1,1,Tofieldia
-Transeauina,1,1,Transeauina
-"Transeauina (type 214, HdV)",1,1,"Transeauina (type 214, HdV)"
-Transeauina undiff.,3,8,Transeauina undiff.
-Trapa,1,3,Trapa
-Trapa natans,3,28,Trapa natans
-"Trichocladium opacum (type 10, HdV)",2,14,"Trichocladium opacum (type 10, HdV)"
-Trichuris trichiura,2,6,Trichuris trichiura
-Trientalis,1,1,Trientalis
-Trientalis europaea,2,3,Trientalis europaea
-Trifolium,6,13,Trifolium
-Trifolium pratense,6,20,Trifolium pratense
-Trifolium pratense-type,22,85,Trifolium pratense-type
-Trifolium repens-type,11,29,Trifolium repens-type
-Trifolium-type,22,178,Trifolium-type
-Triglochin,3,12,Triglochin
-Triticum,27,291,Triticum
-Triticum-type,27,225,Triticum-type
-Trochiscia undiff.,1,5,Trochiscia undiff.
-Trollius,5,16,Trollius
-Trollius europaeus,11,27,Trollius europaeus
-Trollius-type,1,1,Trollius-type
-Tsuga,4,21,Tsuga
-Tsuga diversifolia-type,1,1,Tsuga diversifolia-type
-Tsuga-type,1,7,Tsuga-type
-Turgenia latifolia,1,1,Turgenia latifolia
-Typha,1,2,Typha
-Typha angustifolia,8,42,Typha angustifolia
-Typha angustifolia-type,1,2,Typha angustifolia-type
-Typha angustifolia/Sparganium,33,358,Typha angustifolia/Sparganium
-Typha angustifolia/Sparganium-type,10,50,Typha angustifolia/Sparganium-type
-Typha latifolia,41,378,Typha latifolia
-Typha latifolia-type,13,254,Typha latifolia-type
-Typhaceae,1,1,Typhaceae
-Ulex-type,1,1,Ulex-type
-Ulmus,85,2862,Ulmus
-Ulmus/Zelkova,1,3,Ulmus/Zelkova
-Umbilicus rupestris-type,1,3,Umbilicus rupestris-type
-Unknown,24,741,Unknown
-Unknown (Cretaceous),1,6,Unknown (Cretaceous)
-"Unknown (monolete, psilate)",2,178,"Unknown (monolete, psilate)"
-Unknown (monolete),14,628,Unknown (monolete)
-Unknown (monolete) undiff.,5,150,Unknown (monolete) undiff.
-Unknown (pre-Quaternary),2,25,Unknown (pre-Quaternary)
-Unknown (Tertiary),5,153,Unknown (Tertiary)
-Unknown (trilete),1,5,Unknown (trilete)
-Unknown (trilete) undiff.,7,60,Unknown (trilete) undiff.
-"Unknown (type 160, HdV)",1,5,"Unknown (type 160, HdV)"
-"Unknown (type 181, HdV)",1,4,"Unknown (type 181, HdV)"
-"Unknown (type 224, HdV)",1,4,"Unknown (type 224, HdV)"
-"Unknown (type 33, HdV)",2,19,"Unknown (type 33, HdV)"
-"Unknown (type 366, HdV)",1,6,"Unknown (type 366, HdV)"
-"Unknown (type 38, HdV)",2,2,"Unknown (type 38, HdV)"
-"Unknown (type 41, HdV)",2,17,"Unknown (type 41, HdV)"
-"Unknown (type 708, HdV)",1,8,"Unknown (type 708, HdV)"
-"Unknown (type 74, HdV)",1,2,"Unknown (type 74, HdV)"
-"Unknown (type 86, HdV)",2,2,"Unknown (type 86, HdV)"
-"Unknown (type 91, HdV)",2,9,"Unknown (type 91, HdV)"
-Urtica,71,1140,Urtica
-Ustulina deusta,5,94,Ustulina deusta
-"Ustulina deusta (type 44, HdV)",1,23,"Ustulina deusta (type 44, HdV)"
-Utricularia,17,65,Utricularia
-Vaccinioideae,11,95,Vaccinioideae
-Vaccinium,22,304,Vaccinium
-Vaccinium oxycoccos,5,37,Vaccinium oxycoccos
-Vaccinium-type,37,362,Vaccinium-type
-Valeriana,30,170,Valeriana
-Valeriana cf. V. dioica,1,2,Valeriana cf. V. dioica
-Valeriana cf. V. officinalis,3,16,Valeriana cf. V. officinalis
-Valeriana dioica,1,2,Valeriana dioica
-Valeriana dioica-type,8,24,Valeriana dioica-type
-Valeriana officinalis,20,96,Valeriana officinalis
-Valeriana officinalis-type,8,28,Valeriana officinalis-type
-Valerianella,2,6,Valerianella
-Varia,57,2165,Varia
-Veratrum,5,9,Veratrum
-Veratrum album,1,1,Veratrum album
-Veratrum-type,2,18,Veratrum-type
-Verbascum,9,18,Verbascum
-Vermes,1,1,Vermes
-Veronica,9,42,Veronica
-Veronica beccabunga,1,8,Veronica beccabunga
-Veronica beccabunga-type,2,4,Veronica beccabunga-type
-Veronica-type,4,23,Veronica-type
-Viburnum,10,27,Viburnum
-Viburnum cf. V. opulus,1,1,Viburnum cf. V. opulus
-Viburnum lantana,2,4,Viburnum lantana
-Viburnum opulus,5,29,Viburnum opulus
-Viburnum opulus-type,1,4,Viburnum opulus-type
-Viburnum undiff.,1,2,Viburnum undiff.
-Vicia,1,10,Vicia
-Vicia cracca-type,1,1,Vicia cracca-type
-Vicia-type,24,115,Vicia-type
-Vicia/Lathyrus,1,11,Vicia/Lathyrus
-Vicia/Lathyrus-type,1,3,Vicia/Lathyrus-type
-Viola,13,27,Viola
-Viola canina-type,1,1,Viola canina-type
-Viola palustris,5,10,Viola palustris
-Viola palustris-type,5,10,Viola palustris-type
-Viola tricolor,1,1,Viola tricolor
-Viscum,47,164,Viscum
-Vitis,9,13,Vitis
-Vitis vinifera,2,3,Vitis vinifera
-Xanthium,3,10,Xanthium
-Xanthium-type,1,26,Xanthium-type
-Xylariaceae,1,4,Xylariaceae
-"Xylomyces chlamydosporis/X. aquaticus (type 201, HdV)",3,17,"Xylomyces chlamydosporis/X. aquaticus (type 201, HdV)"
-Zea mays,5,7,Zea mays
-Zygnema,3,20,Zygnema
-Zygnema-type,5,25,Zygnema-type
-Zygnemataceae,3,22,Zygnemataceae
-Zygnemataceae undiff.,1,40,Zygnemataceae undiff.
diff --git a/slides/img/dataset.png b/slides/img/dataset.png
deleted file mode 100644
index 6ebfc07..0000000
Binary files a/slides/img/dataset.png and /dev/null differ
diff --git a/slides/img/db.png b/slides/img/db.png
deleted file mode 100644
index 19a7b46..0000000
Binary files a/slides/img/db.png and /dev/null differ
diff --git a/slides/img/db_snap.png b/slides/img/db_snap.png
deleted file mode 100644
index d098830..0000000
Binary files a/slides/img/db_snap.png and /dev/null differ
diff --git a/slides/img/get_data.png b/slides/img/get_data.png
deleted file mode 100644
index 89006bc..0000000
Binary files a/slides/img/get_data.png and /dev/null differ
diff --git a/slides/img/icon.png b/slides/img/icon.png
deleted file mode 100644
index 87231d0..0000000
Binary files a/slides/img/icon.png and /dev/null differ
diff --git a/slides/img/logo.svg b/slides/img/logo.svg
deleted file mode 100644
index f7b9ba9..0000000
--- a/slides/img/logo.svg
+++ /dev/null
@@ -1,463 +0,0 @@
-
-
-
-
diff --git a/slides/img/r-pkg.png b/slides/img/r-pkg.png
deleted file mode 100644
index cbf3f12..0000000
Binary files a/slides/img/r-pkg.png and /dev/null differ
diff --git a/slides/img/s4.png b/slides/img/s4.png
deleted file mode 100644
index 864e182..0000000
Binary files a/slides/img/s4.png and /dev/null differ
diff --git a/slides/img/site.png b/slides/img/site.png
deleted file mode 100644
index 71ecadc..0000000
Binary files a/slides/img/site.png and /dev/null differ
diff --git a/slides/img/uw.png b/slides/img/uw.png
deleted file mode 100644
index 6593dee..0000000
Binary files a/slides/img/uw.png and /dev/null differ
diff --git a/slides/slides1.ipynb b/slides/slides1.ipynb
deleted file mode 100644
index eb16ecf..0000000
--- a/slides/slides1.ipynb
+++ /dev/null
@@ -1,322 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "cd7b2d21",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "\n",
- " \n",
- " Neotoma2 R\n",
- "
EPD Workshop\n",
- "
June 3nd, 2022\n",
- "
Prague, Czechia\n",
- "
\n",
- "
\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "bd25fc20",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Introductions!\n",
- "\n",
- "\n",
- "Introduce yourselves in the following link: \n",
- "[https://bit.ly/EPDIntros](https://bit.ly/EPDIntros)\n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "\n",
- "R in your Browser: \n",
- "[https://bit.ly/EPDRstudio](https://bit.ly/EPDRstudio)\n",
- "
\n",
- "
\n",
- "Clone the [Github repo](https://github.com/NeotomaDB/EPD_binder)\n",
- "
\n",
- "
\n",
- "Introduce yourselves in the following link: \n",
- "[https://bit.ly/EPDIntros](https://bit.ly/EPDIntros)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "91194717",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Slides\n",
- "\n",
- "- [https://bit.ly/3x5KVnh](https://bit.ly/3x5KVnh) **\n",
- "\n",
- "- [https://bit.ly/3GDIcok](https://bit.ly/3GDIcok)\n",
- "\n",
- "- [https://bit.ly/3a8hkRb](https://bit.ly/3a8hkRb)\n",
- "\n",
- "- [https://bit.ly/3NIZFOs](https://bit.ly/3NIZFOs)\n",
- "\n",
- "- [https://bit.ly/38WMUBk](https://bit.ly/38WMUBk)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "64b04e1b",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## The Database\n",
- " \n",
- "
\n",
- "
\n",
- "
\n",
- "\n",
- "The Neotoma Database contains all the data \n",
- " \n",
- "* Schema: https://open.neotomadb.org/dbschema \n",
- " \n",
- "* Manual: https://open.neotomadb.org/manual \n",
- "
\n",
- "
\n",
- "\n",
- " \n",
- "But we want to use it ourselves! \n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "21768fa5",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## How Do We Get Data?\n",
- "
\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "afdf28ef",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## How Do We Get Data ***(DB Snapshot)***\n",
- "\n",
- "
\n",
- "\n",
- "* Database snapshot:\n",
- "[https://neotomadb.org/snapshots](https://neotomadb.org/snapshots) \n",
- "\n",
- "* Using PostgreSQL RMDBS \n",
- " * Restore the Snapshot \n",
- " * Connect to the Database (pgAdmin, dBeaver, others) \n",
- "\n",
- "***or***\n",
- "\n",
- "* R/Python with the DB directly (RPostgreSQL, psycopg2)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a377c682",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## How Do We Get Data ***(API)***\n",
- "\n",
- "Using the Application Program Interface (API) \n",
- "[https://api.neotomadb.org](https://api.neotomadb.org) \n",
- "\n",
- "\n",
- "Structured (JSON) data, using URLs as “commands” for data: \n",
- "[https://api.neotomadb.org/v2.0/data/datasets/17473](https://api.neotomadb.org/v2.0/data/datasets/17473) \n",
- "\n",
- "\n",
- "Dataset information for Lake Allie, a Diatom Surface Sample \n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "ef1de7a8",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Where is the API used?\n",
- "\n",
- "* Tilia uses the [Tilia API](https://tilia.neotomadb.org) for data input & output. \n",
- " \n",
- " \n",
- "* Explorer uses the [Neotoma API](https://api.neotomadb.org) for data input. \n",
- " \n",
- " \n",
- "* The Landing Pages use the [Neotoma API](https://api.neotomadb.org) for page information. \n",
- "\n",
- "\n",
- "* The Neotoma “State of the Database” pages use the API (and SQL).\n",
- "\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "0c84f8bf",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## How Do We Get Data ***(R Package)***\n",
- "\n",
- "
\n",
- "\n",
- "Neotoma through the R package `neotoma2`\n",
- "\n",
- "* Pre-defined functions to access & manipulate data \n",
- "* Connect with other existing R packages \n",
- "\n",
- "To try `neotoma2` from Binder: [https://bit.ly/3FW0Qrh](https://bit.ly/3FW0Qrh)\n",
- "\n",
- "
\n",
- "To install, you need the `devtools` package as well.\n",
- "```\n",
- "install.packages('devtools')\n",
- "devtools::install_github('NeotomaDB/neotoma2')\n",
- "```\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c8b2cd31",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Sites\n",
- "[https://open.neotomadb.org/dbschema/tables/sites.html](https://open.neotomadb.org/dbschema/tables/sites.html)\n",
- "\n",
- "| | |\n",
- "|---|---|\n",
- "| |
|\n",
- "\n",
- "\n",
- "\n",
- "```\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f92a01e3",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Collection Units\n",
- "[https://open.neotomadb.org/dbschema/tables/collectionunits.html](https://open.neotomadb.org/dbschema/tables/collectionunits.html)\n",
- "\n",
- "| | |\n",
- "|---|---|\n",
- "| |
|\n",
- "\n",
- "\n",
- "\n",
- "```\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "2e9b83f1",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Datasets\n",
- "[https://open.neotomadb.org/dbschema/tables/datasets.html](https://open.neotomadb.org/dbschema/tables/datasets.html)\n",
- "\n",
- "| | |\n",
- "| --- | --- |\n",
- "| |
|\n",
- "\n",
- "\n",
- "```\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a03cf941",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## S4 Object Structure\n",
- "\n",
- "\n",
- "
"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "R",
- "language": "R",
- "name": "ir"
- },
- "language_info": {
- "codemirror_mode": "r",
- "file_extension": ".r",
- "mimetype": "text/x-r-source",
- "name": "R",
- "pygments_lexer": "r",
- "version": "4.1.3"
- },
- "rise": {
- "autolaunch": true,
- "height": "80%",
- "scroll": true,
- "theme": "serif",
- "width": "90%"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/slides/slides1.pdf b/slides/slides1.pdf
deleted file mode 100644
index b3311bd..0000000
Binary files a/slides/slides1.pdf and /dev/null differ
diff --git a/slides/slides2.ipynb b/slides/slides2.ipynb
deleted file mode 100644
index 353af16..0000000
--- a/slides/slides2.ipynb
+++ /dev/null
@@ -1,448 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "947545c8",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## A Simple Model Workflow\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "28c5b4c3",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "# Run this cell if you want to follow along \n",
- "options(warn = -1)\n",
- "suppressMessages(library(neotoma2))\n",
- "suppressMessages(library(sf))\n",
- "suppressMessages(library(geojsonsf))\n",
- "suppressMessages(library(dplyr))\n",
- "suppressMessages(library(ggplot2))\n",
- "suppressMessages(library(leaflet))"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "88f46549",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Goals\n",
- "\n",
- "1. Geographic search for sites\n",
- "2. Collect datasets\n",
- "3. Filter for time/space/etc.\n",
- "4. Get full download\n",
- "5. Analyze & plot\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "81b85773",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Search for Sites\n",
- "\n",
- "### `get_sites()`\n",
- "\n",
- "* Site names: `sitename=’Lait%’`\n",
- "* Location: `loc=c()`\n",
- "* Altitude: `altmin`, `altmax`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "9fc10cce",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "laitSites <- neotoma2::get_sites(sitename = \"%Lait%\")\n",
- "laitSites"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "57965dd9",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "neotoma2::plotLeaflet(laitSites)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "599b4806",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "### Location `loc=c()`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "a56790a0",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "czGeoJson <-'{\"type\": \"Polygon\",\n",
- " \"coordinates\": [[\n",
- " [12.40, 50.14],[14.10, 48.64],[16.95, 48.66],\n",
- " [18.91, 49.61],[15.24, 50.99],[12.40, 50.14]]]}'\n",
- "czGeoJson <- geojsonsf::geojson_sf(czGeoJson)\n",
- "cz_sites <- neotoma2::get_sites(loc = czGeoJson)\n",
- "neotoma2::plotLeaflet(cz_sites)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "e3c23b88",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "czWKT = 'POLYGON ((12.4 50.14, \n",
- " 14.1 48.64, \n",
- " 16.95 48.66, \n",
- " 18.91 49.61,\n",
- " 15.24 50.99,\n",
- " 12.4 50.14))'\n",
- "cz_sites <- neotoma2::get_sites(loc = czWKT)\n",
- "neotoma2::plotLeaflet(cz_sites)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "d1ef3a69",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "czBbox = c(12.4, 48.64, 18.91, 50.99)\n",
- "cz_sites <- neotoma2::get_sites(loc = czBbox)\n",
- "neotoma2::plotLeaflet(cz_sites)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "a8edaa96",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "neotoma2::plotLeaflet(cz_sites) %>% \n",
- "leaflet::addPolygons(map = ., \n",
- " data = czGeoJson, \n",
- " color = \"green\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4c828b7f",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Helper Functions\n",
- "\n",
- "### `summary()`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "6b1b2de7",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "neotoma2::summary(cz_sites) %>%\n",
- " DT::datatable(data = ., rownames = FALSE)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "7ce9e6a4",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Search for Datasets\n",
- "\n",
- "### `get_datasets()`\n",
- "\n",
- "* Datasettype: `datasettype=’Diatom surface sample’`\n",
- "* Location: `loc=c()`\n",
- "* Altitude: `altmin`, `altmax`\n",
- "\n",
- "### `datasets()`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "082c20ff",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "cz_datasets <- neotoma2::get_datasets(cz_sites, all_data = TRUE, verbose = FALSE)\n",
- "datasets(cz_datasets) %>% \n",
- " as.data.frame() %>% \n",
- " DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "efa137de",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "datasets(cz_sites) %>% \n",
- " as.data.frame() %>% \n",
- " DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a5e4d0de",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Helper Functions\n",
- "\n",
- "### `filter()`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "0ba7aa03",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "cz_pollen <- cz_datasets %>% \n",
- " neotoma2::filter(datasettype == \"pollen\")\n",
- "neotoma2::summary(cz_pollen) %>% DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c978a3cf",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "**Remember** that the order in which packages are loaded makes a difference. \n",
- "```python\n",
- "Error in UseMethod(\"filter\"): \n",
- " no applicable method for 'filter' applied to an object of class \"sites\"\n",
- "```\n",
- "\n",
- "The previous error message means that a different package is trying to run `filter()`"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "424b60b4",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Pulling the Data\n",
- "\n",
- "### `get_downloads()`\n",
- "\n",
- "* Done after the preliminary filtering"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "ef16f711",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "## This line is commented out because we've already run it for you.\n",
- "## cz_dl <- cz_pollen %>% get_downloads(all_data = TRUE)\n",
- "cz_dl <- readRDS('data/czDownload.RDS')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "2a2b189b",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "allSamp <- samples(cz_dl)\n",
- "head(allSamp, n = 2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "071553ee",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "names(allSamp)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "10fea6e3",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Extracting taxa\n",
- "\n",
- "### `taxa()`\n",
- "\n",
- "- Returns:\n",
- " * unique taxa\n",
- " * number of sites\n",
- " * number of samples\n",
- " \n",
- "- taxonid is in `samples()` too. This allows to build harmonization tables."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "901b4c66",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "neotomatx <- neotoma2::taxa(cz_dl) %>% \n",
- " unique()\n",
- "\n",
- "DT::datatable(data = head(neotomatx, n = 10), rownames = FALSE)"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "R",
- "language": "R",
- "name": "ir"
- },
- "language_info": {
- "codemirror_mode": "r",
- "file_extension": ".r",
- "mimetype": "text/x-r-source",
- "name": "R",
- "pygments_lexer": "r",
- "version": "4.1.3"
- },
- "rise": {
- "autolaunch": true,
- "height": "80%",
- "scroll": true,
- "theme": "serif",
- "width": "90%"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/slides/slides2.pdf b/slides/slides2.pdf
deleted file mode 100644
index 565cc1c..0000000
Binary files a/slides/slides2.pdf and /dev/null differ
diff --git a/slides/slides3.ipynb b/slides/slides3.ipynb
deleted file mode 100644
index cb07070..0000000
--- a/slides/slides3.ipynb
+++ /dev/null
@@ -1,229 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "4b262739",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Simple Harmonization"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "4b3de09f",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "# To follow along, run this cell first.\n",
- "\n",
- "options(warn = -1)\n",
- "suppressMessages(library(neotoma2))\n",
- "suppressMessages(library(sf))\n",
- "suppressMessages(library(geojsonsf))\n",
- "suppressMessages(library(dplyr))\n",
- "suppressMessages(library(ggplot2))\n",
- "suppressMessages(library(leaflet))\n",
- "options(dplyr.summarise.inform = FALSE)\n",
- "\n",
- "cz_dl <- readRDS('data/czDownload.RDS')\n",
- "allSamp <- samples(cz_dl)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "0c0e77e9",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "**Goal:** \n",
- "Group all samples from `Plantago taxa` into one pseudo-taxon called `Plantago`."
- ]
- },
- {
- "cell_type": "markdown",
- "id": "10fff5b4",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "**Methods:**\n",
- "\n",
- "Using `dplyr::mutate()`\n",
- "\n",
- "Whenever we detect (`str_detect()`) a variablename that starts with Plantago replace it with `\"Plantago\"`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "2f62579b",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "allSamp %>% \n",
- " dplyr::filter(stringr::str_detect(variablename, \"Plantago.*\")) %>%\n",
- " dplyr::select(variablename, ecologicalgroup)%>%\n",
- " dplyr::distinct()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "9a53ba77",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "allSamp <- allSamp %>% \n",
- " dplyr::filter(ecologicalgroup %in% c(\"UPHE\", \"TRSH\")) %>%\n",
- " mutate(variablename = replace(variablename, \n",
- " stringr::str_detect(variablename, \"Plantago.*\"), \n",
- " \"Plantago\"))\n",
- "\n",
- "head(allSamp, n =3)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "b0bd6a0b",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "allSamp %>% \n",
- " dplyr::filter(stringr::str_detect(variablename, \"Plantago.*\")) %>%\n",
- " dplyr::select(variablename, ecologicalgroup)%>%\n",
- " dplyr::distinct()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "035cffa2",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "taxaplots <- taxa(cz_dl)\n",
- "# Save the taxon list to file so we can edit it subsequently.\n",
- "readr::write_csv(taxaplots, \"data/mytaxontable.csv\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "5802d7a4",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "translation <- readr::read_csv(\"data/taxontable.csv\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "a7808982",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "allSamp <- samples(cz_dl)\n",
- "\n",
- "allSamp <- allSamp %>%\n",
- " inner_join(translation, by = c(\"variablename\" = \"variablename\")) %>% \n",
- " dplyr::select(!c(\"variablename\", \"sites\", \"samples\")) %>% \n",
- " group_by(siteid, sitename, replacement,\n",
- " sampleid, units, age,\n",
- " agetype, depth, datasetid,\n",
- " long, lat) %>%\n",
- " summarise(value = sum(value), .groups='keep')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "33655e25",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "DT::datatable(head(allSamp, n = 25), rownames = FALSE)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "be797690",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "We are going to show other harmonization techniques in following exercises."
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "R",
- "language": "R",
- "name": "ir"
- },
- "language_info": {
- "codemirror_mode": "r",
- "file_extension": ".r",
- "mimetype": "text/x-r-source",
- "name": "R",
- "pygments_lexer": "r",
- "version": "4.1.3"
- },
- "rise": {
- "autolaunch": true,
- "height": "80%",
- "scroll": true,
- "theme": "serif",
- "width": "90%"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/slides/slides3.pdf b/slides/slides3.pdf
deleted file mode 100644
index 657f4ce..0000000
Binary files a/slides/slides3.pdf and /dev/null differ
diff --git a/slides/slides4.ipynb b/slides/slides4.ipynb
deleted file mode 100644
index ff7591a..0000000
--- a/slides/slides4.ipynb
+++ /dev/null
@@ -1,408 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "4b3de09f",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "# Run this cell if you want to follow along \n",
- "options(warn = -1)\n",
- "suppressMessages(library(neotoma2))\n",
- "suppressMessages(library(sf))\n",
- "suppressMessages(library(geojsonsf))\n",
- "suppressMessages(library(dplyr))\n",
- "suppressMessages(library(ggplot2))\n",
- "suppressMessages(library(leaflet))\n",
- "suppressWarnings(library(dplyr))\n",
- "\n",
- "options(dplyr.summarise.inform = FALSE)\n",
- "\n",
- "cz_dl <- readRDS('data/czDownload.RDS')"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "b052d958",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Simple Analytics\n",
- "\n",
- "### Stratigraphic Plotting with `rioja`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "96dbe358",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [],
- "source": [
- "# Get 1 site only\n",
- "plottingSite <- cz_dl[[1]]\n",
- "\n",
- "# select only taxa identified from pollen (and only trees/shrubs)\n",
- "plottingTaxa <- taxa(plottingSite) %>%\n",
- " filter(ecologicalgroup %in% c(\"TRSH\")) %>%\n",
- " filter(elementtype == \"pollen\") %>%\n",
- " arrange(desc(samples)) %>% \n",
- " head(n = 10)\n",
- "\n",
- "DT::datatable(head(plottingTaxa, n =2))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "ea71e9d7",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "# Select only pollen measured using NISP.\n",
- "# We repeat the filters for pollen & ecological group on the samples\n",
- "shortSamples <- samples(plottingSite) %>% \n",
- " filter(variablename %in% plottingTaxa$variablename) %>% \n",
- " filter(ecologicalgroup %in% c(\"TRSH\")) %>%\n",
- " filter(elementtype == \"pollen\") %>%\n",
- " filter(units == \"NISP\")\n",
- "DT::datatable(head(shortSamples, n=2))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "99a1c6da",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "# Transform to proportion values.\n",
- "onesite <- shortSamples %>%\n",
- " group_by(age) %>%\n",
- " mutate(pollencount = sum(value, na.rm = TRUE)) %>%\n",
- " group_by(variablename) %>% \n",
- " mutate(prop = value / pollencount) %>% \n",
- " arrange(desc(age))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "1d0184fb",
- "metadata": {},
- "outputs": [],
- "source": [
- "# Spread the data to a \"wide\" table, with taxa as column headings.\n",
- "widetable <- onesite %>%\n",
- " dplyr::select(age, variablename, prop) %>% \n",
- " mutate(prop = as.numeric(prop))\n",
- "\n",
- "counts <- tidyr::pivot_wider(widetable,\n",
- " id_cols = age,\n",
- " names_from = variablename,\n",
- " values_from = prop,\n",
- " values_fill = 0)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "2f3ae40e",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "clust <- rioja::chclust(dist(sqrt(counts)),\n",
- " method = \"coniss\")\n",
- "\n",
- "plot <- rioja::strat.plot(counts[,-1] * 100, yvar = counts$age,\n",
- " title = cz_dl[[1]]$sitename,\n",
- " ylabel = \"Calibrated Years BP\",\n",
- " xlabel = \"Pollen (%)\",\n",
- " y.rev = TRUE,\n",
- " clust = clust,\n",
- " wa.order = \"topleft\", scale.percent = TRUE)\n",
- "\n",
- "rioja::addClustZone(plot, clust, 4, col = \"red\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "16a33b7d",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Change time across sites"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "cc8afc67",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "- We now have site information across the Czech Republic, with samples, and with taxon names. \n",
- "\n",
- "- Let's look at the distributions of taxa across time, simply their presence absence. \n",
- "\n",
- "- Pick the top 20 taxa (based on the number of times they appear in the records) and look at their distributions in time"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "ce65f4ac",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "plottingTaxa <- taxa(plottingSite) %>%\n",
- " filter(ecologicalgroup %in% c(\"TRSH\")) %>%\n",
- " filter(elementtype == \"pollen\") %>%\n",
- " arrange(desc(sites)) %>% \n",
- " head(n = 20)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "22bdb2cb",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "\n",
- "taxabyage <- samples(cz_dl) %>% \n",
- " filter(variablename %in% plottingTaxa$variablename) %>% \n",
- " group_by(variablename, \"age\" = round(age * 2, -3) / 2) %>% \n",
- " summarise(n = length(unique(siteid)), .groups = 'keep')\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "5060c22f",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "samplesbyage <- samples(cz_dl) %>% \n",
- " filter(variablename %in% plottingTaxa$variablename) %>% \n",
- " group_by(\"age\" = round(age * 2, -3) / 2) %>% \n",
- " summarise(samples = length(unique(siteid)), .groups = 'keep')\n",
- "\n",
- "groupbyage <- taxabyage %>%\n",
- " inner_join(samplesbyage, by = \"age\") %>% \n",
- " mutate(proportion = n / samples)\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "cf80987e",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "ggplot(groupbyage, aes(x = age, y = proportion)) +\n",
- " geom_point() +\n",
- " geom_smooth(method = 'gam', \n",
- " method.args = list(family = 'binomial')) +\n",
- " facet_wrap(~variablename) +\n",
- " coord_cartesian(xlim = c(20000, 0), ylim = c(0, 1)) +\n",
- " scale_x_reverse(breaks = c(10000, 20000)) +\n",
- " xlab(\"Proportion of Sites with Taxon\") +\n",
- " theme_bw()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "8bf6c759",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Distributions in Climate (July max temperature) from `rasters`"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "58d9114d",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "We are often interested in the interaction between taxa and climate, assuming that time is a proxy for changing environments. \n",
- "\n",
- "The development of large-scale global datasets for climate has made it relatively straightforward to access data from the cloud in raster format. \n",
- "\n",
- "R provides a number of tools (in the sf and raster packages) for managing spatial data, and providing support for spatial analysis of data."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "19f243f3",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "allSamp <- samples(cz_dl)\n",
- "\n",
- "modern <- samples(cz_dl) %>% \n",
- " filter(age < 50) %>% \n",
- " filter(ecologicalgroup == \"TRSH\" & elementtype == \"pollen\" & units == \"NISP\")\n",
- "\n",
- "spatial <- sf::st_as_sf(modern, \n",
- " coords = c(\"long\", \"lat\"),\n",
- " crs = \"+proj=longlat +datum=WGS84\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "9639cc25",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "worldTmax <- raster::getData('worldclim', var = 'tmax', res = 10)\n",
- "spatial$tmax7 <- raster::extract(worldTmax, spatial)[,7]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "a7ad9aca",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "spatial <- spatial %>%\n",
- " mutate(variablename = stringr::str_replace(variablename, \"[[:punct:]]\", \" \")) %>% \n",
- " mutate(variablename = stringr::word(variablename, 1)) %>% \n",
- " group_by(variablename, siteid) %>% \n",
- " summarise(tmax7 = max(tmax7), .groups = \"keep\") %>%\n",
- " group_by(variablename) %>% \n",
- " filter(n() > 3)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "6238aae2",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "maxsamp <- spatial %>% \n",
- " dplyr::group_by(siteid) %>% \n",
- " dplyr::summarise(tmax7 = max(tmax7), .groups = 'keep')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "15cf9e92",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "ggplot() +\n",
- " geom_density(data = spatial,\n",
- " aes(x = round(tmax7 / 10, 0)), col = 2) +\n",
- " facet_wrap(~variablename) +\n",
- " geom_density(data = maxsamp, aes(x = tmax7 / 10)) +\n",
- " xlab(\"Maximum July Temperature\") +\n",
- " ylab(\"Kernel Density\")"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "R",
- "language": "R",
- "name": "ir"
- },
- "language_info": {
- "codemirror_mode": "r",
- "file_extension": ".r",
- "mimetype": "text/x-r-source",
- "name": "R",
- "pygments_lexer": "r",
- "version": "4.1.3"
- },
- "rise": {
- "autolaunch": true,
- "height": "80%",
- "scroll": true,
- "theme": "serif",
- "width": "90%"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/slides/slides4.pdf b/slides/slides4.pdf
deleted file mode 100644
index 7353414..0000000
Binary files a/slides/slides4.pdf and /dev/null differ
diff --git a/slides/slides5.ipynb b/slides/slides5.ipynb
deleted file mode 100644
index 54cc029..0000000
--- a/slides/slides5.ipynb
+++ /dev/null
@@ -1,481 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "34117d15",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Advanced Analytics\n",
- "\n",
- "### Looking at Chronologies"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "20e359cb",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "# Run this cell if you want to follow along \n",
- "options(warn = -1)\n",
- "suppressMessages(library(neotoma2))\n",
- "suppressMessages(library(dplyr))\n",
- "suppressMessages(library(ggplot2))\n",
- "suppressMessages(library(Bchron))\n",
- "\n",
- "options(dplyr.summarise.inform = FALSE)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "79a9bbc3",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "stara <- get_downloads(24238)\n",
- "stara_chron <- chronologies(stara)\n",
- "\n",
- "stara_chron %>% as.data.frame() %>% \n",
- " DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4bf5c72e",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "**Observations** \n",
- "There are three chronologies here.\n",
- "\n",
- "**Objective** \n",
- "We want to build a new chronology with the function `Bchronology()` from the [`Bchron` package](https://cran.r-project.org/web/packages/Bchron/vignettes/Bchron.html). \n",
- "\n",
- "**How**\n",
- "- Extract the chroncontrols that we have for the prior chronologies. \n",
- "- We're going to select the chronologies used for chronology `14591` as our template. "
- ]
- },
- {
- "cell_type": "markdown",
- "id": "68734511",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Extract `chroncontrols`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "80c4d272",
- "metadata": {
- "scrolled": true,
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "controls <- chroncontrols(stara) %>% \n",
- " dplyr::filter(chronologyid == 14591) %>% \n",
- " arrange(depth)\n",
- "\n",
- "controls %>% DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "762501d2",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Let's modify directly the `controls` data.frame to provide better constraints at the core top. \n",
- "\n",
- "- Let's set the core top to 0 calibrated years BP;\n",
- "- assume an uncertainty of 2 years;\n",
- "- add a thickness of 1cm."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "26ffa6fb",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "controls$chroncontrolage[1] <- 0\n",
- "controls$agelimityounger[1] <- -2\n",
- "controls$agelimitolder[1] <- 2\n",
- "controls$thickness[1] <- 1\n",
- "\n",
- "controls %>% DT::datatable(data = .)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "08c795bd",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "### Extract Depth & Analysis Unit IDs"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "2e3d4c98",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Let's also get the `depth`s and `analysisunitid`s from the dataset `samples()`. \n",
- "\n",
- "**Why?** \n",
- "We need both `depth`s and `analysisunitid`s because a single collection unit may have multiple datasets, which may have non-overlapping depth sequences.\n",
- "\n",
- "By adding sample ages back to a record we use the `analysisunitid` to make sure we are providing the correct assignment since depth may be specific to a single dataset."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "d9fad350",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "# Get a two column data.frame with columns depth and analysisunitid.\n",
- "# Sort the table by depth from top to bottom for \"Bchronology\"\n",
- "predictDepths <- samples(stara) %>%\n",
- " select(depth, analysisunitid) %>% \n",
- " unique() %>% \n",
- " arrange(depth)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "3bd8bf34",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "# Pass the values from `controls`. We're assuming the difference between\n",
- "# chroncontrolage and the agelimityounger is 1 SD.\n",
- "\n",
- "newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,\n",
- " ageSds = abs(controls$agelimityounger - \n",
- " controls$chroncontrolage),\n",
- " calCurves = c(\"normal\", rep(\"intcal20\", 4)),\n",
- " positionThicknesses = controls$thickness,\n",
- " positions = controls$depth,\n",
- " allowOutside = TRUE,\n",
- " ids = controls$chroncontrolid)\n",
- "\n",
- "# Predict ages at each depth for which we have samples. Returns a matrix.\n",
- "newpredictions <- predict(newChron, predictDepths$depth)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "7feefaec",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "plot(newChron) +\n",
- " ggplot2::labs(\n",
- " xlab = \"Age (cal years BP)\",\n",
- " ylab = \"Depth (cm)\"\n",
- " )"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "aae077fc",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Creating the New `chronology` and `contact` objects"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "2169b1ca",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Once we have the new chronology, let's add it to the `sites` object \n",
- "Let's also make it the default chronology for any calls to `samples()`\n",
- "\n",
- "With `set_chronology()`, we create the metadata for the new chronology.\n",
- "\n",
- "Check the properties of chronologies using the [`chronology` table in Neotoma](https://open.neotomadb.org/dbschema/tables/chronologies.html)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "7df15fa5",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "creators <- c(set_contact(givennames = \"Simon James\",\n",
- " familyname = \"Goring\",\n",
- " ORCID = \"0000-0002-2700-4605\"),\n",
- " set_contact(givennames = \"Socorro\",\n",
- " familyname = \"Dominguez Vidaña\",\n",
- " ORCID = \"0000-0002-7926-4935\"))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "d2b65088",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "newChronStara <- set_chronology(agemodel = \"Bchron model\",\n",
- " contact = creators,\n",
- " isdefault = 1,\n",
- " ageboundolder = max(newpredictions),\n",
- " ageboundyounger = min(newpredictions),\n",
- " dateprepared = lubridate::today(),\n",
- " modelagetype = \"Calibrated radiocarbon years BP\",\n",
- " chronologyname = \"Simon's example chronology\",\n",
- " chroncontrols = controls)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "6e91910e",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "newChronStara$notes <- 'newChron <- Bchron::Bchronology(ages = controls$chroncontrolage,\n",
- " ageSds = abs(controls$agelimityounger - \n",
- " controls$chroncontrolage),\n",
- " calCurves = c(\"normal\", rep(\"intcal20\", 4)),\n",
- " positionThicknesses = controls$thickness,\n",
- " positions = controls$depth,\n",
- " allowOutside = TRUE,\n",
- " ids = controls$chroncontrolid,\n",
- " predictPositions = predictDepths)'"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "29189fbc",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Adding the `chronology` to the `collectionunit`"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "29c3431e",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "We now need to apply the chonology back into the `collectionunit`.\n",
- "\n",
- "We also need to add the predicted dates into the samples for each dataset associated with the collectionunit.\n",
- "\n",
- "So: \n",
- "\n",
- "1. we have a collectionunit in `stara` that is accessible at `stara[[1]]$collunits`.\n",
- "2. We can use the function `add_chronology()`, which takes the chronology object and a `data.frame()` of sample ages.\n",
- "3. The predicted dates associated with the new chronology need to be transferred to each `samples` object within the `collectionunit`.\n",
- "\n",
- "The `add_chronology()` function takes the `collectionunit`, modifies it, and returns the newly updated `collectionunit`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "ac1ae5eb",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "newSampleAges <- data.frame(predictDepths,\n",
- " age = colMeans(newpredictions),\n",
- " ageolder = colMeans(newpredictions) + \n",
- " apply(newpredictions, 2, sd),\n",
- " ageyounger = colMeans(newpredictions) - \n",
- " apply(newpredictions, 2, sd),\n",
- " agetype = \"Calibrated radiocarbon years\")\n",
- "\n",
- "# Updating the collection unit\n",
- "stara[[1]]$collunits[[1]] <- add_chronology(stara[[1]]$collunits[[1]], newChronStara, newSampleAges)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "00c9066b",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lets take a look at how the updated `collunit` affects the age model overall. \n",
- "\n",
- "To pull the ages from the prior chronologies, we use the `set_default()` function to change the default chronology, and then extract ages, depths & analysisunits:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "7179d693",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "newages <- samples(stara) %>%\n",
- " select(depth, analysisunitid, age) %>% \n",
- " unique() %>% \n",
- " arrange(depth) %>% \n",
- " mutate(agecat = \"new\")\n",
- "\n",
- "stara[[1]]$collunits[[1]]$chronologies <- set_default(stara[[1]]$collunits[[1]]$chronologies,\n",
- " 14591) \n",
- "plotforages <- samples(stara) %>%\n",
- " select(depth, analysisunitid, age) %>% \n",
- " unique() %>% \n",
- " arrange(depth) %>% \n",
- " mutate(agecat = \"old\") %>% \n",
- " bind_rows(newages)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "30672c06",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Differences"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "46bf02ec",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
- "ggplot(plotforages, aes(x = depth, y = age)) +\n",
- " geom_path(aes(color = agecat)) +\n",
- " theme_bw() +\n",
- " xlab(\"Depth (cm)\") +\n",
- " ylab(\"Calibrated Years BP\")"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "R",
- "language": "R",
- "name": "ir"
- },
- "language_info": {
- "codemirror_mode": "r",
- "file_extension": ".r",
- "mimetype": "text/x-r-source",
- "name": "R",
- "pygments_lexer": "r",
- "version": "4.1.3"
- },
- "rise": {
- "autolaunch": true,
- "height": "80%",
- "scroll": true,
- "theme": "serif",
- "width": "90%"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/text.css b/text.css
index b940980..bca57db 100644
--- a/text.css
+++ b/text.css
@@ -1,7 +1,7 @@
p { font-family: "Raleway";
color: rgba(0,0,0,0.8); }
-a { font-weight: 700;
+a { font-weight: 600;
color: rgba(59, 72, 202, 0.8); }
h1, h2, h3, h4, h5 { font-family: 'Raleway';
@@ -53,6 +53,16 @@ p.hangingindent:hover{
background:#dddddd
}
+div.figure {
+ padding-top: 20px;
+}
+
+p.caption {
+ font-family: "EB Garamond";
+ color:rgba(0,0,0,0.7);
+ font-size:90%;
+}
+
a:link { so-language: zxx }
summary {
@@ -67,6 +77,11 @@ td {
table {
padding-top: 0px;
padding-bottom: 10px;
+ font-size: 80%;
+}
+
+pre.r {
+ font-size: 80%;
}
div.resource-box {