P2 NASA ARSET - Integration of Animal Tracking and Remote Sensing Data
The Story
Welcome to Part 2 of this biodiversity and spatial analytics series on the NASA Live Video Podcast: "NASA ARSET - Integration of Animal Tracking and Remote Sensing Data."Building upon the foundational concepts introduced in Part 1, this episode moves from theory to technical execution—focusing on the precise integration, alignment, and analytical workflows required to fuse animal telemetry with Earth observation datasets.
Through the framework of NASA’s Applied Remote Sensing Training (ARSET) program, we dive deep into the spatial and temporal matchmaking of GPS tracking points with dynamic satellite variables. We examine advanced methodologies, such as dynamic Brownian Bridge Movement Models (dBBMM) and Step-Selection Functions (SSF), and demonstrate how environmental covariates—including MODIS surface reflectances, Landsat land cover classifications, and ECOSTRESS evapotranspiration—are extracted along movement trajectories. Furthermore, we showcase open-source software tools and spatial analytics platforms (such as Movebank and Google Earth Engine) that enable ecologists to model habitat selection, assess anthropogenic impacts, and predict species responses to environmental change.
Whether you are a quantitative ecologist, a GIS professional, a conservation biologist, or a remote sensing specialist looking to master movement-environment analytical pipelines, this episode provides hands-on technical guidance. Subscribe to the NASA Live Video Podcast to stay at the absolute forefront of space exploration, remote sensing data integration, and cutting-edge earth science!
Speaker 1: Remote sensing.
Speaker 2: As I said, this is part two, the iteration of animal tracking and remote sensing data. And at the end of this part, the homework will become available on the training webpage, and you have until June 5th to submit the homework. Eventually, if you attended both parts and submitted the homework on time, you will get a certificate of completion by email.
Speaker 1: Here's us again. I'm Juan.
Speaker 2: I'm also here, as I said, with Sativa Cruz and Justin Frame from the NASA Ames Research Center, the Bay Area Environmental Research Institute. And as during part one, today we also have our invited speakers, Dr. Morgan Gilmore from NASA Ames and also Dr. Claire Terrelbaum from the USGS and the University of Georgia. For part two in particular, you will be able at the end of the session to identify the steps in the process for accessing animal tracking data in species distribution models to facilitate understanding of animal movements in relation to the environment.
Speaker 2: You'll also be able to identify steps in the process for accessing animal tracking data in step selection functions to facilitate an understanding of animal movements. to recognize key takeaways from examples from terrestrial applications that inform and characterize animal habitats, and also from marine applications that inform and characterize animal habitats. And as always, feel free to enter your questions as we go in this training and in the question box. And eventually, once the training ends, we'll go into the Q & A session.
Speaker 2: And if by any chance, because of time or mostly, we are not able to get to your particular question, no worries, because we'll try to include it in the Q & A document, which will eventually be posted on the training website about a week after the training.
Speaker 2: And with that, I will leave you now first with Morgan Gilmore, She's going to be doing, we'll be showing you an example of animal tracking and the use of NASA's remote sensing data, specifically for frigate birds. And then eventually Morgan will pass to Claire, and Claire will do another example, but on the terrestrial side. She will be talking about tracking deers. So Morgan, thank you. And Claire, thank you again for being here. And take it away, Morgan.
Speaker 3: Morgan Gilmore, Okay, thank you one hi i'm Morgan Gilmore i'm a research scientist at NASA Ames Research Center in the Bay area in California and. Morgan Gilmore, For our second session today i'm going to be talking about a case study in the marine environment with frigate birds at Palmyra atolls and applying species distribution models to those data.
Speaker 3: And so when you're starting to think about using remote sensing with tracking data, you want to consider a couple of things, including which environmental variables or environmental covariates you're going to use. And what I find most useful is to just run a literature search and see what other studies have done that have used remote sensing either with your study species or in your study region or for similar research questions that you might have. And they can point you to specific data sets or specific types of data sets that could be really useful.
Speaker 3: Because honestly, it's really overwhelming. There's a lot of remote sensing data sets out there. And so it's good to have some kind of plan going into it. Also, you need to consider the temporal resolution. Again, that is best suited for your study species in your site. Fine scale data that is provided hourly or daily sounds really great, but it's not always feasible or available in all regions. This is especially true in tropical regions where there's a lot of cloud cover. And also there are definitely seasons, as you can imagine, where cloud cover also affects remote sensing imagery.
Speaker 3: And you may also want to consider the scale of your variables. Some things might not change very much on an hourly basis anyway. For example, temperature in the water doesn't change very much on an hourly basis in general. And so these are just some things to think about as you're trying to select environmental covariates for your models. Something else that I recommend doing is to make sure you record the spatiotemporal resolution of the data set you end up working with so that you can report it later.
Speaker 3: It's really good to know You know that your data set has a quarter of degrees spatial resolution, and you're collecting it monthly or something. So just to quickly recap what Claire went through in the first session the other day, I'm going to be talking about species distribution models. And this is asking the question, how did the environment differ between where the animal did and did not go? And the ultimate result is a habitat suitability map, which I'll show you in a couple of slides. And the basic steps, so you have your animal tracking data, you define presence and absence points, so where the animal did and did not go.
Speaker 3: You have your environmental covariates, and then you put all of that into a binary model where your response variable is either presence or absence, and then your predictors are your environmental covariates. And so the tracking data set I'm going to be demoing with you today are from great frigatebirds at Palmyra Atoll. And so Palmyra Atoll is in the Central Pacific Ocean in that yellow box you can see in the middle there and the map on the bottom. And these data were collected in 2022 to 2023.
Speaker 3: We used GPS tags and we had seven birds. And you can actually go and download these data. So this data set is available in that bottom link there. And the original intent of collecting these data was to quantify frigatebird and other species movements within and outside the marine protected area around Palmyra Atoll. And those results were actually just published in a paper in Global Change Biology a couple weeks ago. And so there is a link to that paper there as well. And if you're not familiar with seabirds, frigabirds are seabirds, and so this means that they typically nest on islands but completely rely on the ocean for food.
Speaker 3: And so they have to leave the island every day and go and search for things like fish and squid, which they can then return to the nest to feed their chick. And so because they're repeatedly returning to the nest all the time, they're making what we call central place foraging trips, where they're tied to that one location but exploring the entire ocean around it. And so the species distribution model can help us answer the question, what's the ocean like where these birds are going? And so if you were to go to that website and download the Frigatebird data, it will look something very similar to this, where we just have a data frame, we've got a timestamp, you've got longitude, latitude, the tag ID, which is called tag local identifier, and the status that you would download.
Speaker 3: And then the island is Palmyra. And so I did some basic cleaning on this. I'm just going to show you these screenshots really quickly. One thing you can do to clean the data, as we mentioned the other day, is that you can apply a speed filter to it so that you can remove any points that are kind of wonky. And so for frigatebirds specifically, the literature, there's another paper that defines a good speed threshold for frigatebirds is 90 kilometers per hour. And so I applied that to the status sets.
Speaker 3: I used a package called TrackR, which, full disclosure, I am an author on, but there are many packages you can use to calculate speed pretty easily. The other thing that I did to this data set is, again, because frigatebirds are central place foragers, we are not interested in any locations that are at the island, and so I removed all points. that were within five kilometers of Palmyra and everything beyond that we're going to use in the analysis to specifically look at oceanographic habitat. And so then the next thing I want to do is plot it.
Speaker 3: And so these are what all the frigate bird data look like. You can see there's just this crazy massive points around the yellow star, which is Palmyra, and on the left there. But if you want to just look at one bird, for example, there are far fewer points for this particular bird. And you can see exactly where it went, which is pretty exciting.
Speaker 3: And so I'm going to show you two different ways that you can download environmental variables in the program R. The first is the R package ERDAP Extracto. And this works through an ERDAP server, which you can see stands for Environmental Research Division Data Access Program. But basically, it's just a standardized way that you can access lots of different data sets. And so this particular example works through the ERDAP provided by NOAA, but you can actually substitute other ERDAP platforms within the R package as well.
Speaker 3: And so what you're going to do to find a data set is you'll actually go to this website and you can search for data sets with the red, you can see the red circle in the search box and the image on the right. And as this example, I searched for chlorophyll and you can see that 171 data sets come up. So that's a lot of data. sets. And so again, this is where other studies and literature review would come in really handy. They help you kind of fine-tune your search and find a data set that matches your spatiotemporal needs.
Speaker 3: And so if you want to look at the different data sets, you can look at the background info here, kind of in the middle column, and that'll give you more specifics to help you choose that data set. Once you find a data set, you can also search for it within R with the info function. And if you were to use this info function, then it would just return the metadata for that. And so you can see in the dimensions here, that it shows you the time frame. So this data set runs from 2008 to 2025, so our data from 2022 fit well within that.
Speaker 3: We're looking at sea level things. Altitude doesn't matter. And then our latitude and longitude fit within these ranges as well. And you can see that the one variable available in this data set is chlorophyll, and it even gives you the units. And so this is all really important information to know so that you can report it later.
Speaker 3: And so the way that you would download these is first you would, what we're gonna do is we're going to download a grid of the data so that you can return to it later and I will show you what I mean by that. But first you have to figure out what the size and the extent of your grid is. And so right here I just need two data frames. One is just the min and the max, longitude and latitude of the frigate bird data called Frigate Bird Tracks. And you need that into a data frame called Extent to Download.
Speaker 3: And then I did the same thing with the dates of the data set. So we have a dates to download data frame. Step number three there says we want to put the data somewhere. So you just designate something, which I called out folder. And then you want to set the cache to make sure that the data go into that out folder. And moving from chlorophyll to sea surface temperature. This is another example. of how you would actually download it. So once you've defined your extent to download and dates to download, then it's actually pretty simple.
Speaker 3: So the R package has a function called rExtracto3D, and so that enables us to download a grid. And it might take a little while to download it, but then you have the data, which is great. And then there are options to plot it. And then if you are working within the tidyverse, you can actually turn it into a data frame with this function called tidygrid. I do want to make a note that sometimes if you're running to errors trying to download the data, you might need to uncomment this Z-chord argument.
Speaker 3: That just refers to altitude. And so some data sets have altitude where you just have to say 0, 0. I wouldn't worry about it. But sometimes if you have an error, then the Z-chord thing might be your way to fix it. And so if we were to download the sea surface temperature, you can plot it. And here is just a really basic map of the grid of sea surface temperature that we just downloaded. And so it's really great to plot things and just verify that the data exists and are in the grid that you want.
Speaker 3: And then the second package I wanted to share with you is a package called MarMap. And so this, again, relies on data from NOAA. And it specifically downloads bathymetry. And so bathymetry is really important for a lot of models that have looked at seabirds and other marine mammals, animals in the ocean environment. And so bathymetry is really handy. And so this draws directly from the NOAA ETAPO 2022 database. And there is a link to a citation for it right there. This also downloads the data as a grid.
Speaker 3: And here's just some notes. You want to make sure that you actually save the file so you're not repeatedly pulling data and tying up the NOAA server. And one thing that is really useful if you're working in the Pacific Ocean across the dateline, you want to make sure that you set anti-meridian equals true. And that makes the data way easier to work with across the dateline. And so if you were to, so once we have all of our environmental variables, then we want to actually, for the model, attach them to our tracking data set.
Speaker 3: And so I'm gonna cut to RStudio in a second here to show you what that would look like. But here's just some code to demonstrate how you would load your files into the R environment. They are NC files. which are pretty typical for a lot of environmental data. And so you would just use the package ncdf4 and use these ncopen and cget functions and then you would make it a raster. And so now I'm going to pause PowerPoint and then I'm going to switch to RStudio. Okay, so we are now in our studio and I'm going to show you how to attach the environmental variables to the tracking data set.
Speaker 3: I've actually got six scripts which I'm going to go through for the species distribution models and then these are all going to be available online. For each script, they're just numbered and they have a short description of what they do and then the packages that you need to run these different functions. I just showed you this code on the PowerPoint slide, but what you're going to do is you're going to read the files in the R, and you're going to just open them, and then you're going to create a raster.
Speaker 3: You can ignore that warning message. And so now we have a raster of chlorophyll data right here. And so what we're gonna do, and this is important because this is actually a step that I'm gonna refer to two more times throughout the species distribution model, but we're gonna make, we're essentially gonna attach the environmental variables to the FrigBird tracts with a for loop. And so to do that, we're going to create a data frame of all the dates in the chlorophyll file, and we're gonna loop through the dates attached it to the frigabird data.
Speaker 3: And so the way that this works is the chlorophyll raster, the chlorophyll is a raster and each raster layer is a different date. And so you can see if you just look at names of the chlorophyll file, then these different dates come up. And so we're working with a monthly data set. So you see that each one of these just represents one month. You can see that all the names of the raster layer start with X. And so we're gonna essentially cycle through all these X dates in the for loop. And so here we just create a data frame that has those dates and then we make a date time out of that.
Speaker 3: So we remove the X from that and then we are going to create a column called month date which just rounds it to us. one month, and that will match up with the frigatebird data. And so we make this data frame, and you can see that we have a column called X date, which is the name of the raster layer, and then we have the normal date time, and then we have something called month date, where June 15th, for example, is rounded to June 1st. And so then we have the frigatebird tracks, which are sampled at five-minute resolution, but we're just going to round all those to monthly.
Speaker 3: And so you could see that these here, 9.45, 9.50, 9.55, 10 o'clock, so that's a normal timestamp, but then all of those are just rounded to June 1st for the sake of being able to attach the chlorophyll data to these tracks. And so then what we're gonna do is we are going to make another data frame, or a vector rather, of just all the frigatebird dates which again are just going to be all these June 1st, July 1st, August 1st, etc. And then we're going to run this for loop and so this for loop actually takes a long time and so I'm not going to run it but I just wanted to show you what's happening.
Speaker 3: So for the entire all the all the frigatebird tracks they all have that monthly date and so we're going to loop through that. We're going to create one date, and we're gonna say, okay, let's make a data frame of all the figureboard tracks that have that one date. We're gonna make a spatial points data frame out of that because that plays well with this function here. And so really all the magic is happening right here. And it's just this raster, this function called extract from the package raster.
Speaker 3: And so we take all the dates that, For June 1st, for example, in the chlorophyll raster, and then we have the frigate bird spatial point data frame, which is just called PT in the loop. And then we attach all those to the frigate bird tracks. And that's all that the loop does. It just takes a really long time because there's 72,000 points. And so you're going to run that loop. It's going to work well. And then one thing I really want to stress is that when you're looking at your environmental variables, you want to make sure that there aren't a ton of NAs in your data.
Speaker 3: And so by running this loop, you can see that, or running this table function, you can see that there's 1,242 NAs out of over 72,000 points. And so that's only 1.7% of those points are NAs, and that's totally fine. I've heard different rules of thumb about this, but anything less than 10% is pretty good. And so we're with 1.7% of NAs here, we're really, it's great. And again, This might depend on your study system and whether there's a lot of cloud cover, etc. So just keep that in mind. And so we've attached all those.
Speaker 3: We're going to plot those really quickly just to see what this might look like and make sure that we have data. And so in the plot on the right here, because we're working with colorful data, we often take the log of it and we work with it in log form. And so you could see that for the most part, as expected, the pelagic areas around Palmyra are pretty low chlorophyll, but then you do have a couple of points that are yellow and green, which indicate that there's relatively higher chlorophyll in those places.
Speaker 3: And so this is just one forget-bird track where each point is colored by the chlorophyll. And so that worked. And so we're just going to get rid of a couple of objects here. And then I want to show you the MARMAC package really quickly. And so we downloaded the asymmetry data, and it's a CSV. And again, to work with the for loop I showed you above, we're just going to make it a raster. And so there's a couple of steps to do that using some functions within MarMAP. Again, you want to plot it and just make sure the data exists and are where you think they are.
Speaker 3: So here we are in the Pacific in the location where Palmyra is. That's great. We make it a raster. And then if you're working with bathymetry data in the ocean, you are not worried about anything that occurs on land. So any depth data that is greater than zero, we're just going to make it an A. And then we're going to use the same type of loop that I just showed you above to attach the bathymetry data. And so instead of looping through dates, we're just going to loop through each bird. And the reason for this is bathymetry data doesn't change and there's no date associated with it.
Speaker 3: And so I'm going to run this loop because it is really fast. And so there we... just ran all seven birds and 72,000 points, amazingly fast. And then again, we're going to see what kind of NAs we're working with. And we only have 239. So that's like, I think, 0.03%.
Speaker 4: Yeah.
Speaker 3: And so we meet that threshold pretty easily, too. And so next, we're going to just plot the data, just again, to make sure that everything worked out. And so with that same bird example, we've got along that bird's track, we have the different points colored by bathymetry. And so the shallower areas are the lighter colors and then the deeper areas are the darker colors. And so it looks like it worked, which is great. And so we're just going to get rid of some objects here. And then last, I can't stress this enough, especially if something takes a really long time, you should really save your data.
Speaker 3: And so my data is saved, but this is just a reminder to do that. I'm going to go back to PowerPoint now, and that means I'm going to stop sharing R. Okay, so next slide. Now we're ready to run the species distribution models. As we mentioned earlier, the basic steps are to simulate pseudo-absences, select the points where the animals did not go, We're going to run it through a model, and then we're going to assess the model. And we're going to do that by plotting and use some statistics and also just think about whether this makes sense within the context of your species and your study system.
Speaker 3: And so ultimately, we'll make a plot like the one on the right, which just gives a probability of high or low habitat suitability, which is colored by the yellow and the purple in this particular example here. And so to simulate the pseudo-absences, again, these are the points where the animal didn't go. And you can simulate them in a few different ways. So on the bottom, we have the original track. This is just an example. And the far left shows a handful of points where an animal could have traveled from our tracking data.
Speaker 3: One way to generate pseudo-absences is to just conduct background sampling. That's actually what we're going to do in the demo today. This just randomly samples points within that whole grid. Other ways you can do it include choosing the turning angles and the transit speeds and modeling those instead. Different ways to do that are random walks and then state space models, which use something very similar. And Claire is, I think, going to talk more about this idea in her self-function functions.
Speaker 3: And so there's different ways to do it. And again, you might need to research a little bit and see what works best for your data set. But I've tried lots of different ones. And for the frigatebirds, background sampling seems to work the best. And so then we're going to actually run the model. And again, you have quite a few options. And those familiar options, perhaps, are generalized linear models, generalized additive mixed models, the GLIMs and GAMs. And those both have their advantages. And again, it just depends on your data set that you are trying to model.
Speaker 3: There's also boosted regression trees, which are really similar to random forests, and they are essentially decision trees that are iterative. And so they run over and over again to improve the accuracy of the model. And so we're actually going to use boosted regression trees in the demo here. And that is, I've run all of these on the forget bird data set, and the boosted regression tree seems to work the best. And so now I'm going to show you the species distribution model and go back to R. Okay, so this is script number two, and this is to simulate the pseudo-absences.
Speaker 3: And one thing I want to point out here is that I did not write these functions. There is a really great paper, which we provide a link to in the resources slide at the end of today's session, by Elliot Hazen et al. from 2021. And he has a really great paper on pseudo-absences and that all comes with code that you can download from GitHub. And so I'm going to provide the functions that I used in this demo here as part of our sharing of the code. But you can actually go to GitHub and download all the code from that paper.
Speaker 3: So I just want to make sure that you know that. And so, in order to make the pseudo absences, what we're going to do is we're going to again randomly sample the background points and we're going to do it 10 times per bird just for the sake of saving time. We're going to use more for loops, but basically what you want to do is you want to assign a place where the pseudo absences are going to go and then
Speaker 3: In order to best work with the function, it's easier to change your column name. So just do this really quickly. So I have the frigabird tracks. I assign it to a new data frame called tags. And then I just rename the ID column as ID and the longitude and latitude is long and lat. And then the function requires that timestamp is called D time. So I just renamed that. And then depending on your data type, you may or may not need to include a location class. This is really important if you have data from Argos, but we just have GPS data, so my location class is just G. And so then you can see that that data frame just looks like that.
Speaker 3: And then we are going to run the, we're going to create these background points. with this function create background absence, and it's just done in a for loop, really simple. However, when I ran it, it took an hour and a half, so I'm not going to show that to you here, but it really is just a really simple for loop. And so what this does is it's going to create a CSV for each animal in your data set and where you identified your assigned your out directory. And so these CSVs are pretty similar to the tracking data.
Speaker 3: If we look at one example, you can see we have the D time, so the timestamp, and the lat and the long. And what is different here is that it has this new column called iteration. And so you could see that iteration, I told it to do it 10 times. And so it's creating 10 different background sampling points for each one point in the data set. So the size of your data set is gonna increase by an order of magnitude. And so then if we wanted to see what this looks like, We can see for the 10 iterations for this one example bird, but it might make this a little bigger.
Speaker 3: So, waiting for that to load.
Speaker 5: But the idea is that for each of these tenor iterations, there is a different set of randomly generated points relative to the one track that you can see in the red points here.
Speaker 3: And it may or may not load so you can see those individual points, because they're just kind of black masses right now. But anyway, this has generated different randomly sampled background points. And so that is the end of the pseudo absences. So we've created the pseudo absences. And then we're going to make the presence absence data set. So again, this uses a function called make data set. And what you're going to do is you're going to make sure that you have your tracking data. So the forget bird track.
Speaker 3: the original data set, and then as I mentioned earlier, you might need to rename the columns, and then to save time, I'm only running this for three birds. So you can see that we now have a data set that matches the, it's going to match the background points, so that iteration column I showed you in the previous slide, the previous section where one through 10 is the iteration for this is going to be zero. And then we have all of our environmental variables, which we added, which in this example are chlorophyll, sea surface temperature, and depth.
Speaker 3: And so then we're going to read in all the CSV files that I told you the pseudo absences generated. And we're just going to use this function to read those files and then just filter out those three birds. And then this is something I'm not gonna run, but this is what I mentioned earlier, where you have all these background points, but now you need to assign environmental variables to each point. And so you're gonna want to take your background points and then run it in that for loop I showed you in script number one.
Speaker 3: So we're gonna assume that that is already done. And then, I think, don't need to run this again. But ultimately, you would have a data set that is really similar. So you've got tag, you've got your time, your monthly date, lat long, and your different environmental variables. And as I mentioned at the beginning, we usually work with the log of chlorophyll. So I took the log of chlorophyll there. And then finally, we're going to run this really simple function called make data set. So you can see that
Speaker 3: the presence is just the frigatebird tracks with just the three birds. I called it frigatebird tracks three. And then the absence data are those background points. free bird background. And again, just for the three birds, that's just three. We make that and it's really quick. And then if we look at it, you can see now it's got this presence absence column, which is either going to be ones or zeros. And so those are going to ultimately be your response variables in the model, which we're going to run next.
Speaker 3: All right. So we are going back to our plots. So we now have this data set which includes all of our background sample points and all of our presence points for those three birds. And then the next step is going to require that this is a spatial features data frame. So we're just going to make it a spatial features data frame. And what that looks like is we now just have this new column called geometry. And that just means it's spatial features. I don't need to explain that right now. And so then, because we have all these presence and absence points, we are interested in whether they're actually different from each other with the different environmental variables.
Speaker 3: And so that'll help us think about our model. And so one way we can do that is to look at Bhattacharya's coefficient. And so this just looks at the statistical differences between the presence and the absence points. And so you can see here if you run this function with the depth, The value is 0.84, chlorophyll, the value is 0.83, and sea surface temperature, the value is 0.9, essentially. And so these are all great. As I have in the code here, if this is a scale that runs from 0 to 1, and so if you're closer to 0, that means that they're not that very different.
Speaker 3: But if the values are closer to 1, it means that they are different. And so these are all great values, 0.8s, 0.9s. indicating that we have data that are actually different from each other, and it should help our model run nicely. So we're just going to get rid of a couple of things. We're going to now run the model, which is the boosted regression tree, and so it uses this function vrt transform data frame that's out of the pseudo-absence paper code, and it's quite simple. Let me... Okay, let me just get rid of this bar.
Speaker 3: Okay. And so now we're gonna run the model and so in the previous script I said that we need a simple features data frame and so that is really important for this step right here. And so we already have the simple features data frame and we're going to put it within this GBM fixed function. And so what you're gonna do is you're gonna just like any other model, you're going to set your predictor variables, which is X. And so you have to go into your data frame and see what number column they are.
Speaker 3: And so in this particular data frame, columns 6, 7, and 8 are three environmental variables. And then you're going to set your response variable, which is Y, which is your presence-absence numbers. And that would be column number 5 in this particular example. And then. Using these other parameters, these are pretty standard. Using a learning rate of 0.005 and a number of trees is 2,000, I think are pretty standard parameters to include in these models. And so if you were to run this, it would look like that and just say it's fitting your model.
Speaker 3: This takes a little bit of time, but not a ton, but I'm not going to run it here. Make sure you save it, again, especially if it does take a lot of time for your particular data set. Now what we can do is we can actually look at how each predictor variable interacts with the response variable. So these are marginal effects plots for bathymetry, for chlorophyll, and then for sea surface temperatures. You can see that the distributions of the variables in response to the response variable are different here.
Speaker 3: And so you can think about what that means for your study system and your species. And then one other thing you can do when thinking about your variables is look at the relative influence of the JSON variables. And this summary GBM is really helpful. And it generates a plot. And it shows you actually, you can't see it in the window here, but bathymetry is actually this big blue top bar. And it is showing that bathymetry is actually the leading factor of this model compared with sea surface temperature and chlorophyll.
Speaker 3: And you can see that actually in this number here in the bottom of the script as well. So we just ran our model. Now what we're going to do is we're going to apply the model to a grid of unsampled area. And so this also uses code from the pseudoabsence paper. And so what you're gonna do is you're gonna make a sample grid. So you're just gonna take the min and the max of your data set just to create a grid and what that would look like. You just wanna, so you can see you just, we made a grid of the whole area that we've been sampling.
Speaker 3: You then wanna go back to that for loop again and attach your environmental variables to this new grid so that you can run the model on it. And then what we're gonna do
Speaker 3: is make sure you're working with log of chlorophyll. You may need to scale and center your variables depending on your data set, and that's something that you will need to explore with your own data. And then we would use this predict GBM function where we're using our background points, which is the pres abs grid, and our model, which is the BRT background, and we are trying to predict over in the grid. And so that would generate, that runs really quickly. And then that just generates a bunch of numbers, which we would then add back into our data set so that we can plot it.
Speaker 3: Again, you want to make sure you save. And then this is the moment we've all been waiting for. And this is a map of habitat suitability predicted over a larger grid than what our tracking data are on. And so you can see, as I showed you on the PowerPoint slide in the beginning, the areas of yellow are colored to indicate high habitat suitability and the darker areas are lower habitat suitability. So again, you want to look at this and understand whether it makes sense for your study species and your study region.
Speaker 3: And then finally, the last bit here, this is really quick, is to evaluate your model and so to do that we can look at explanatory power and so we can just run a pseudo r squared and so the for this particular example with just the three birds the r squared is about 0.4 and then other things you can do is calculate area under the receiver operating curve or AUC and also the true test statistic which is the TSS. Again you need it to be a simple features data frame to do that. And then we can calculate these variables with k-fold validation.
Speaker 3: And so this just means that it is taking your model and running it a bunch of times to get see if the model runs the same over and over again, essentially. And so we're not going to, that's what it would look like if it was running. And then you can see that it generates this table of area under the receiver curve, shoots that statistic, and then TPR, which I can't remember what it stands for, but we're not actually going to talk about that today. And then you can just take a mean of those tenant durations.
Speaker 3: You can see that the area under the receiver curve is 0.9, and the mean of the true test statistic is 0.64, essentially. And so with that, that's the end of my R demo. I'm going to stop sharing and go back to PowerPoint for one more slide. Okay, so back in PowerPoint, this is my last slide. something I didn't cover earlier in the PowerPoint, but I just want to reiterate. There's a lot of different ways to assess your model fit, and so you just want to make sure that you're evaluating these different aspects and parameters of your model and your data set to make sure that they make sense within the context of your study species and your study region.
Speaker 3: And so, as I showed you in R, evaluating model explanatory power with R squared is helpful. Area under the receiver curve, true test statistic, and different types of cross-validation are helpful to evaluate your model's predictive skills. And then as I showed you earlier, understanding how similar or different your presence and absence point environmental situations are can be done with Bhattacharya's coefficient. And then we can also look at the relative importance of your variables. As I showed you, bathymetry was driving most of my model with the three-figure birds.
Speaker 3: And so with that, I am done, and I will pass it off to Claire. OK, thank you, Morgan.
Speaker 4: Again, I'm Claire Teitelbaum. I'm an assistant unit leader at the U.S. Geological Survey Georgia Cooperative Fish and Wildlife Research Unit based at the University of Georgia. And in the second section, we're going to go through a similar but different workflow to run step selection functions using a terrestrial.
Speaker 3: Case study on red deer.
Speaker 4: We looked a little bit at this dataset in the first part of the training.
Speaker 3: This data.
Speaker 4: Is a data set of relocations of one tracked red deer in northern Germany. This data set is built into the AMTR package, which we're going to use extensively in this example. AMT stands for Animal Movement Tools, and this package contains a lot of convenience functions for cleaning animal telemetry data, visualizing it, and performing analyses, including home range analysis and step selection functions. These data that come with the package are pre-cleaned, so many of the steps that Morgan covered in the first half of today's training are going to be relevant to get to the point where we're starting with this dataset.
Speaker 4: As a reminder, step selection functions are conceptually pretty similar to species distribution models. But they use a specific way of defining presence and absence points by simulating alternative steps based on the actual step lengths and turning angles observed in the animal telemetry data.
Speaker 4: The step selection functions require regularly sampled data.
Speaker 3: They can be.
Speaker 4: Performed at a variety of temporal and spatial resolutions. and they can use data from either one or multiple individuals. And if data are available from multiple individuals, the data can be analyzed either separately to understand individual differences in habitat use and selection, or together to get inference at the population level. Although today we're just going to use an example from a single individual to sort of streamline the process. To put our animal tracking And remote sensing data together in this example, I want to first go through the process of downloading remote sensing data from the NASA Earth Data Platform.
Speaker 4: This is a really nice centralized location for a wide variety of remotely sensed and modeled data products, spatial data products, from a variety of different sources. These are not necessarily all NASA products. but most or all NASA data is migrating to the Earth data platform. So this is a nice place to start to try to find the remotely sensed data products that you're looking for.
Speaker 4: As Morgan mentioned, it's important to figure out before going to a platform like this what data products you might be looking for. In this example, we're going to focus on NDVI, a vegetation index, and land cover, because we know that both of these are likely to be important for when and where deer like to be. So to download data from NASA EarthData, you're first going to navigate to the EarthData search website, which will pull up a page that looks something like this.
Speaker 3: We can put.
Speaker 4: Search terms in the search box. So here I've searched for NDVI, the Normalized Difference Vegetation Index. And that pulls up in this middle panel a.
Speaker 3: List of products.
Speaker 4: In this case, this top product is the one that I was looking for. This is a 250 meter global product at 16 day temporal resolution. And you can see that this product has a temporal extent from the year 2000 to present, which if you were to download all of the data would be about 170,000 granules.
Speaker 3: A granule being an extent of space in a specific time period.
Speaker 4: And that is a lot of data. Our gear data goes from 2008 to 2009 and is only in Germany. So to avoid downloading this massive amount of data, it's also important to filter before downloading to the spatial and temporal extent that we're interested in. Filtering by the spatial extent can be done by uploading a shape file or by entering a bounding box rectangle, which is what I'm showing you here. So, for example, here we're looking for data between 54 and 55 degrees north and between 9 and 10 degrees west, which covers the study area of.
Speaker 3: The tracked deer.
Speaker 4: And again, we're going to look at data from March of 2008 to May of 2009. When we put in those filtering criteria, looking down at the bottom of the page, this download all button shows us that we have 27 granules now instead of 170,000. If you think about 16-day windows over a little over a year, that makes sense. It should be about 27 time windows. So it's nice to confirm before downloading that it seems like an appropriate amount of data. In the right side here, this is the map that you would see if you had gone through this filtering process.
Speaker 4: This inner rectangle is the bounding box that I entered, and the outer rectangle is the spatial extent of the granules that we're going to download. So here, these tiles of this NDVI data.
Speaker 3: Are much larger than the area of our study.
Speaker 4: If we click on the download button, you have a few options of how to download the data. I would recommend using these download files or.
Speaker 3: Download script options.
Speaker 4: The download script, in my opinion, is a great way to get started if you're not familiar with command line tools because it provides step-by-step instructions for downloading an executable file and then using it to automatically download all of these files onto your computer. The download files function, I mean tabs, is also a great way to do it by using the EarthData download tool, which is something you have to download in advance, but again, it's quite straightforward to use. Once these data are on your computer, it's important to note that it's likely they'll require some post-processing and it's always important to check the original documentation that accompanies these products.
Speaker 4: So, In this example, we're downloading 27 granules. In this case, that includes only one tile across space, but multiple dates or times. So we're going to have to deal with that when loading those data into R in order to extract them at the locations of our animal tracking data. These granules also might contain multiple layers. These might be multiple variables. So in this case, potentially multiple vegetation indices.
Speaker 3: As well as.
Speaker 4: Quality assurance or quality control layers that tell you about how reliable each of those data points might be. So this is a point where you can put your GIS skills to use. You might need to combine multiple spatial tiles using a mosaicing approach, stack multiple temporal tiles, or crop your data only to the needed area. And once again, it's important always to check the original documentation to understand what each layer that you're loading in means and whether you might, for example, need to rescale data before extracting it and using it so that it's on a realistic scale.
Speaker 4: We're going to move into R for a demo next. But first, I just want to go through the key steps of performing step selection analysis. So the first step is to clean telemetry data and then process it to regular steps, including identifying bursts. So these are gaps in the data that are longer than our expected step interval. In this case, the deer data that we're going to load in have already had these two steps done on it. The next step is to simulate alternative or control steps. These are these absence points in a species distribution model.
Speaker 4: And these simulations are based on models of distributions of step lengths and turning angles in the tracking data. We're then going to identify the spatial and temporal extent of the data and use that to download and process the desired environmental data, in this case from remote sensing. We then extract environmental data at the endpoints of each step. We can also do this at starting points and along the step trajectories, but it's important to note that the way that the control and the observed steps differ is by their endpoint.
Speaker 4: So the data at the step endpoints is usually the first place we're going to start to try to understand habitat selection. Once we have all of this information at the step endpoints, we perform conditional logistic regression to understand differences in habitat between used and available points, and then use the results of this model for inference and mapping. And the main output of a step selection function is called relative strength of selection, which is our way of understanding how animals are using different habitats.
Speaker 4: And we'll go into exactly what that means in a little more depth. Okay, so in this example, as I said, we're going to focus on the use of this AMT animal movement tools package, which is going to provide most of the functions we need for this analysis. So after loading all of our packages for analyzing and processing data, we're going to start by loading the deer data set.
Speaker 3: And taking a look at it.
Speaker 4: You can see in the console on the bottom of the screen that the DEER dataset includes X and Y coordinates, a timestamp, and a burst ID. If you looked further down this table, you would see that not everything is burst one. As we have gaps in the data, we get different bursts. You'll note that our X and Y coordinates are obviously projected. These are not geographic coordinates, not latitude and longitude.
Speaker 3: And if we look at.
Speaker 4: The help function for this data set, it tells us the coordinate reference system for the data. So we can use this to know where the deer are in space.
Speaker 4: It's always good to start by exploring and plotting our data. So as a first step, let's just plot the X and Y coordinates. We saw a much prettier version of this map on the PowerPoint earlier. But this can just start to give you an idea of sort of the spatial extent of the data. The AMT package also provides a nice function for summarizing the sampling rate of the data, so how long it is between relocations. This summary down here in the console at the bottom of the screen shows you that in general, points are six hours apart, but we have some time lags that are much larger than that.
Speaker 4: We can look at this in a different way as well as a histogram of the time lag between different points. And again, this is showing us that most points are about six hours apart, but there are a few that are up to 4,000 hours apart. The reason this is, if we just look at the distributions of timestamps in the data, is because we are missing.
Speaker 6: Data between about August of 2008 and January of 2009. So this data set is just missing the winter, and we're going to think about that a little bit more when analyzing our results. So after exploring the data, the next step is to simulate these alternative steps. Before doing that, what we need to do is turn these this series of locations into steps, a step being a movement from point A to point B. AMT provides this function called steps by burst, which will calculate step lengths and turning angles, as well as other metrics for each step.
Speaker 3: So if we.
Speaker 4: Run steps by burst on this data set, what we come out with has a lot more information than just the track that we originally looked at. What you can see is that instead of just X and Y, what we now have is X1, X2, Y1, and Y2. These being the X1, Y1 being the starting point of each step, and X2, Y2 being.
Speaker 3: The ending point of each step.
Speaker 4: It also tells us the step length, so how far the animal traveled during that six-hour window, and the turning angle, the angle between subsequent steps. And turning angle is missing for the first step because you need.
Speaker 3: At least two steps in order to calculate an angle.
Speaker 4: From these steps, we can then simulate our random steps. Again, AMT provides this random steps function. And if we look at the help function here, we see we can specify a few arguments, including the number of control steps, so the number of absences per presence, essentially, as well as distributions to be used for the step lengths and turning angles. So we're gonna start here just by using the default parameters.
Speaker 3: And when we look at.
Speaker 4: That dataset that we've created, you can see it looks really similar to to the steps dataset, but we've added a couple of new column names.
Speaker 3: And to look at those, we can do it this way.
Speaker 4: And most notably, what we have now is two additional columns in this dataset. One is called case and one is called step ID. So CASE tells us whether this is an observed or random step.
Speaker 3: So you can see there is.
Speaker 4: One observed step and then 10 following random steps because we simulated 10 control steps per actual step. And the step ID pairs each focal used step with the corresponding random step, starting with a step ID of.
Speaker 3: Three, four, and so on.
Speaker 4: We can also plot these data. AMT provides a nice default way of plotting them where our actual data are plotted in red, and then the random steps stemming from each of these actual data points is plotted with these gray dashed lines. Before we move on to the next step, I do want to point out that we can use some of these arguments in the random steps function.
Speaker 3: To sort of play with what the.
Speaker 4: Random steps might look like. So if, for example, instead of drawing step lengths from an exponential distribution, which is the default, we instead draw them from a uniform distribution, we can get a distribution of random steps that looks more like this. And you can see that on average, These random steps are much longer than the ones using the default parameters. This doesn't necessarily look realistic to me, so we're not going to use it, but it's important to know that you can play with these if the defaults don't look realistic for the species that you're working with.
Speaker 4: Our next steps here are to download and process our remotely sensed data. We're going to start just by pulling out the spatial and temporal extent that allowed us to go back into the EarthData platform and download our NDVI data, which we covered in the PowerPoint. So here I'm just going to tell you that I placed all of these data in a subfolder called.
Speaker 3: NDVI underscore MODIS.
Speaker 4: And so that's where we're going to start here. We can start just by loading in one of those files and taking a look at it. Here, we're loading this in as a spatial dataset and then converting it into a raster using the Terra package. If we do so,
Speaker 4: we can see that just this single file, so a single granule, contains 12 layers, and each of them has a different name. We want this first layer, which is our 16-day NDVI, but you can see that we also have EVI, the enhanced vegetation index, as well as a number of other variables available.
Speaker 3: Another thing to note, and this.
Speaker 4: Is available if you look at the documentation, is that each file name also contains the date associated with this granule. In this case, we're looking at the 65th day of the year of 2008. And we're going to use these dates in the names and extract them to assign a time period to each layer that we're going to create in our stacked raster.
Speaker 3: We can also just plot this layer.
Speaker 4: And so here you have a map of NDVI across this whole pixel, which includes our study area. You will notice that the scale is not what we would expect from NDVI, which should range between negative one and one. And we're going to rescale this data later on, again, following.
Speaker 6: The package documentation, which will give us the scale that we need to use.
Speaker 4: So skipping through all of this, which follows those processes of reading in all of the different time periods that we downloaded, assigning them dates, and then rescaling them. We, plotting that data, this is just gonna look like our rescaled version of what we just saw. And then I also did the same thing for A land cover data set also derived from data from the MODIS satellites to try and understand how deer are using land cover data.
Speaker 4: How deer are using different types of land cover. So putting that all together, we're going to have this raster stack called all veg, which I called all veg, all vegetation data. and this raster called all-LC, all land cover data. One important point before extracting our environmental data at our used and available telemetry points is that these two data sets need to be in the same projection in order for this extraction to work. So in this case, I'm reprojecting each of these rasters to the projection of the animal telemetry data.
Speaker 4: In general, it's probably easier to reproject points rather than reprojecting these spatial rasters because it doesn't require interpolation methods like these bilinear and nearest neighbor interpolation methods I'm using here. But I've given you these just as an example of how you might want to do that if you need to reproject a raster. If we then plot this reprojected vegetation data, again, it should look approximately the same. but we have some warping because we're now using a different projection.
Speaker 4: We can also crop our two data sets to the extent of our used and available tracking data just to make them smaller and a little easier to work with. So finally, we get to actually extract covariates at each of our used and available points. Again, AMT provides a very convenient function called extract covariance var time. And this is a really useful function because Morgan showed you the manual way to do this using a for loop. That's going to be really useful for a bunch of different data sets. But if your data are structured in the AMT format, this will automatically match the timestamp of your used and available points to the timestamp that we assigned to each of our raster layers.
Speaker 4: So here in this function, we're saying we want to extract data at each of our random and available, used and available points from this vegetation raster. We want the maximum lag between the timestamp of our telemetry data and the timestamp of the raster to be eight days. That's because we have this 16-day vegetation data, so everything should be within eight days of one of the vegetation layers. We want to extract it at the end point of each step, and then we want to name this covariate NDVI. We can do the same thing for, again, the land cover data and then put.
Speaker 3: Those two datasets together.
Speaker 4: If we just look at our new data frame we've created called deer ends, deer environment. We can see it has the same names as our original data set with the random steps, but has two additional names, NDVI and land.
Speaker 3: Cover, which we assigned.
Speaker 4: We can also, again, looking at the documentation for the Land cover layer create binary variables that define whether a location is forest or cropland based on whether the location is assigned to one of those land cover classes. I chose forests and croplands because we would expect red deer to be potentially using these two types of habitats. Okay, we're getting close to the end here. Our next step is to actually run our step selection analysis. Before doing so, of course, it's, again, important to examine the data.
Speaker 4: One important check is to see whether the variables that we're interested in might be collinear. So here I am plotting a box plot of NDVI versus forest. So on the left, zero non-forest habitats, and on the right, one forested habitats. And you see that there's certainly a relationship here where forested habitats tend to have higher NDVI than non-forested habitats. So for now, without doing any sort of statistical analysis, I'm going to leave forest out of the model just because it might be too collinear with NDVI.
Speaker 4: However, we don't see any strong relationship for croplands. Again, on the left, non-crop habitats, and on the right, crop habitats. we don't see a clear difference in NDVI between them. And again, as Morgan mentioned, it's always good to check to see if we have missing data.
Speaker 3: In this case, looking at.
Speaker 4: The proportion of NDVI or cropland values that are NA, we get zero in each case, so we don't have to worry about missing data here.
Speaker 3: Finally, we fit our step selection.
Speaker 4: Function using the fitclogit function in the AMT package. This formula here is very similar to what you would expect from a linear model. Here we have case. That's that binary true-false variable telling us whether this is an observed or a simulated step as a function of NDVI and crop cover. This part of the formula strata step ID tells us that we're comparing within step ID. Again, that's the conditional part of the conditional logistic regression. After running this model, we can look at a summary, which again looks pretty similar to what you might be familiar with from linear models if you have run those before.
Speaker 3: This gives us an estimate of a coefficient.
Speaker 4: The standard error of that coefficient, a Z value and a P value for each variable. In this case, because both coefficients are positive, this suggests that the deer are selecting four areas of higher NDVI and four areas of croplands. But if we take a quick look just at the P values, you see that that relationship is much more well supported for NDVI than for croplands.
Speaker 3: And we can visualize these results.
Speaker 4: Again, using a few functions from the AMT package, most notably this logRSS function, which will calculate the log relative strength of selection at a series of points, X1, relative to a reference location, X2. And we'll go into a little more detail about that reference location in a minute. But if we just quite simply plot that, you can see here in this plot on the right is the log relative strength of selection as a function of NDVI. And again, this positive slope of the line shows that our deer are more likely to use a given spatial location as the values of NDVI increase.
Speaker 4: We can also map those values across space using Again, the same log RSS function. And here's a plot of what that looks like. This looks very similar to the plot of NDVI across the study area because we have this linear relationship between the relative strength of selection and NDVI. And one quick check for how well we think this model is working is just to overlay our actual locations of the deer.
Speaker 3: Over this map. And you can see that these points are.
Speaker 4: Generally in areas of higher relative strength at selection in these yellow areas and generally not in the more blue areas. So we think this model is probably working pretty well, at least for how simple it is. This last section of code is just a way to make a slightly prettier version of the same plot. So keep this plot in mind and we're going to switch back to PowerPoint.
Speaker 6: We're back.
Speaker 3: Looks good.
Speaker 4: Okay, so in this last section, I just want to talk a little bit more about this relative strength of selection variable because it's not the most intuitively named, nor is it the most intuitive outcome of a model. It's nice when we have a habitat suitability or a species distribution model to be able to interpret the output as the probability of use. the probability that an animal will be in a given location. However, the relative strength of selection requires defining reference conditions. So, for example, how likely an animal is to use a given area relative to what is available.
Speaker 4: And the reason for that is because in our conditional logistic regression, the available habitat changes across space. If we simulate a step starting at a given location, the available habitat is going to differ from a step starting 10 kilometers away. And so that's why this relative strength of selection has the word relative in it and why we can't interpret.
Speaker 3: It directly as the probability of use.
Speaker 4: The technical definition of RSS is the average change in space use probability as we change a covariance of interest while averaging over possible values of other covariates. So, in this map on the right, we're plotting the log relative strength of selection. It's also common to exponentiate this and just plot the relative strength of selection. And in general, we could interpret this as negative values being less likely to be used relative to the average across the study area, and positive values being more likely to be used relative to the average values across the study area.
Speaker 4: And there's a lot of active research going on to be able to create these more intuitive probability of use metrics. And these are often based on simulation methods, for example, simulating animal movements starting at a given location over and over again to see where those animals go. We also have a bunch of resources and links available for you. You can check those out in the slide deck online. And with that, I'll hand it back to Juan.
Speaker 2: Well, thank you again, Morgan and Claire, for those examples. Thanks so much for presenting those to our audience. Here's a summary of part two. When integrating animal tracking and remote sensing data, it's very important to consider several factors. One of them is that the environmental variables that affect the presence or absence of the animal species of interest. And the other one is the spatial temporal resolution of the remote sensing data that you're planning to use. Species distribution models also help us understand the likelihood of the presence of a particular animal species depending on the habitat type, and the selection of a particular species distribution model will depend on the research question and the available data sets.
Speaker 2: As a reminder, there's one homework assignment that opens up today. You can access it through the training webpage, and you need to submit the answers through Google Forms. And you need to submit your homework by June 5th. And if you submitted your homework and you attended both parts of this webinar series, you will get a certificate of completion via email. And as I said, in part one, it usually takes about two months. to get the Celtifidio career completion because just the amount of participants that we usually have during this training series.
Speaker 2: Again, here's the contact info for Justin, Sativa, and myself, and also for Morgan and Claire.
Speaker 1: Also, feel free.
Speaker 2: To visit the ARCET website and to follow us on Twitter or X, and also to visit the ARCET YouTube page for additional trainings as well. And if you're an undergrad or recent grad, make sure that you visit the Develop webpage as well.
Speaker 1: And with that, thank.
Speaker 2: You so much for being with us during these two parts of this training series. And we're going to go now into the Q & A session.
Speaker 1: So I'll see you there.
Speaker 2: All right, let's go into the Q & A. I just want to confirm with our team that everyone can hear me here. And yeah, thanks, Brock, for sharing the screen.
Speaker 2: Let's go then to question number one immediately, because we have just a little bit of time today. And again, thanks, Morgan and Claire, for such a great demonstration. So let's go into question number one. I recently conducted my dissertation on emperor penguins in Antarctica. I used Sentinel and Landsat imagery simply because of their open access, but I was wondering if you know of any ways to access higher resolution imagery without such a massive financial strain.
Speaker 3: Yeah, that's a good question. So Some of the platforms that we discussed in this training, including NASA Earth data, can be a good place to start just to search for the available remote sensing layers. You can filter by spatial extent and resolution just to see what's available. And depending on your country or your funding source, there might be options for you to acquire commercial high-resolution satellite imagery.
Speaker 3: And we're not aware of all of these programs, but for example.
Speaker 4: If your research is funded by some U.S. government programs, NASA's Commercial Satellite Data Acquisition Program could be an option. There are probably other options available as well.
Speaker 1: Yeah, thanks, Claire.
Speaker 2: Yeah, that's particularly useful, especially if people are using or are looking for fairly high resolution, high spatial resolution data.
Speaker 1: Thanks. Okay.
Speaker 2: Number two, can you explain how you... Oh, I actually have the same question to Morgan. Can you explain how you captured the frigate birds and what type of sensors did you use and how many were installed?
Speaker 3: Yeah, that's a great question. Thanks for asking. So we captured frigatebirds by hand at their nests, and we did that very carefully so that we didn't disturb neighboring frigatebirds. Frigatebirds nest in colonies, so it's really important to be aware of your focal bird's nesting neighbors as well and their nesting content, so any eggs or chicks that might be in those nests. And so once we captured them, we used solar GPS tags. These particular tags for that particular project were from the company called EOBS, and they're out of Germany.
Speaker 3: And there are seven birds that ultimately contributed to the data set that I showed today. Cool.
Speaker 2: Okay, so here's number three. It's a question that actually came while Morgan was giving her demonstration, and I think Claire pretty much covered a lot of it. during hers later on, but just in case, what do you think about the AMT package of R, R better packages or just using AMT? Is the R script use available?
Speaker 3: Yeah.
Speaker 4: Yeah, so all those scripts that we went through in the demonstrations are available in the GitHub repository. The link is in this document as well as on the training webpage. The question about the AMT package, as I said during the training, it's a really useful package because it provides sort of a central location and a streamlined way of doing a lot of really common tasks. However, it's not comprehensive, so there are a lot of types of analyses that you might want to do that AMT doesn't provide functions for.
Speaker 4: A lot of the functions in AMT are also wrappers for other functions from other packages. And they're very good about citing what other packages those functions are from in the help functions. And so that could be a good place, a good jumping off point to try to learn about some of these other movement packages.
Speaker 1: Excellent.
Speaker 3: Thanks.
Speaker 1: Okay, question number four. Thanks, Brock.
Speaker 2: Do you have any recommendations for R packages that would be useful for process-only data with no pseudo-absences, especially using, for instance, using maximum entropy or other?
Speaker 1: And I believe.
Speaker 2: One of our teammates, I think it was Justin or someone else, put some info there on the MaxEnt fortune from the Dismo package, which is useful for presence-only data. And there's a manual for that in particular, so make sure that you, the person who asked this question, that goes in there and get more additional info. Okay, question number five.
Speaker 1: How can I.
Speaker 2: Include the altitude elevation data for my analysis? And for example, in a floodplain, some areas aren't available for terrestrial species due to the high water level.
Speaker 3: Yeah, that's a great question. And that's a great way to think about environmental data. And so those could just be like something like altitude or distance to water could just be an additional predictor in your model.
Speaker 1: All right. Okay.
Speaker 2: There are a couple here, one on DOAI. I don't know if, well, for the sake of time, let's go to question number eight instead. Again, we're going to cover your questions eventually in the final Q & A document, so no.
Speaker 1: Worries about that. Is there any problem having NAs in my data?
Speaker 2: And if there is, what should I do?
Speaker 3: Yeah, that's a great question. And there is no problem if you have NAs in your data. It's totally okay and it's totally expected because we don't have perfect data sets that cover the entire world. And so some regions might have a little bit more NAs than others. Like we mentioned earlier in the slides, if you have a lot of cloud cover in the tropics, for example, you're going to have NAs because the satellite image just shows clouds. And so if you do have a bunch of NAs, you can either just omit them.
Speaker 3: You might consider looking at another data source that maybe has left, so maybe looking at different data sets. And again, this is really helpful to go back to the literature and see what other data sets people have used that might be a little bit more useful than what you initially had planned to use in your particular project. And if you.
Speaker 3: Yeah, then if you know why the data are missing, then maybe you could actually add the values yourself.
Speaker 1: All right.
Speaker 2: Is there a reason why SP and raster are being used instead of SF and Terra for the loop to extract chlorophyll area or bathymetry?
Speaker 3: Yeah, no good reason other than those are the packages that I used when I wrote this code, but... SF and Terra are definitely newer packages that could definitely do the job as well. Cool.
Speaker 1: All right.
Speaker 2: In the workflow of importing and extracting remotely sensed data sets, projections were mentioned. At what point in the process do you recommend reprojecting data sets, and could you do that with the NetCDF file before extracting?
Speaker 3: Yeah, this is a great question, too, and I didn't really talk about it with the species distribution models, but the data that you download through IRDAP are typically just from latitude and longitude, and so you can definitely, there are functions in R to change the coordinate reference system, and usually, I know a raster has a function that's just called CRS, and then you can change the projection yourself, and so you could do something like the the Lambert equal area projection, which might be a little bit more helpful in some situations.
Speaker 3: But that depends on your data set and how big or small your data set might be. But this is definitely something that you can do within R, not so much on the net CDF file that you download.
Speaker 1: Okay.
Speaker 2: All right, number 11. How are boosted regression trees different from random forests?
Speaker 3: So these two methods are similar in the sense that they both use trees.
Speaker 4: But they combine the trees in different ways and fit them in a different order.
Speaker 7: So boosted regression trees use a linear combination of multiple trees to come up with a final model, whereas random forests use other methods, including voting methods. And so, the boosted regression tree method allows trees that don't fit as well to the data to receive lower weights in the final model, which usually improves model performance. And also, boosted regression trees are trained sequentially, so each tree attempts to correct errors that showed up in previous trees, but in random forest the trees are fit independently.
Speaker 7: The independent fitting means that random forests are often faster to fit because the trees can be fit simultaneously because they're independent, whereas in boosted regression trees, they need to be fit sequentially. On the other hand, boosted regression tree models tend to be more accurate and have higher performance, although this can depend on exactly the structures of your data.
Speaker 1: All right.
Speaker 2: Let's do two more and then And then we need to, just because of the time constraints, we need to end. But number 12, if you generate pseudo absences from random locations in an SDM, what makes it conceptually different from an SSF?
Speaker 4: Yeah, so a species distribution model is much more general than a step selection function. And in that sense, you could consider a step selection function more constrained than version of an SDM. So they are definitely very similar, but an SSF has a much more specific definition of what the pseudoabsences are.
Speaker 1: All right.
Speaker 2: And finally, what type of model, GL, MM, GAM, or booster regression tree is better in each context?
Speaker 3: Yeah, so this is a great question, and it really depends on your tracking data and the types of relationships that you might expect with the different environmental covariates. And so one good first step is to plot maybe just some of your data, your tracking data, against the different environmental variables. And so that will give you the shape of whether you think it might be a linear or nonlinear relationship. And then you can try running these different subset models just as an exploratory method on some of your data to see which models perform best.
Speaker 1: All right. Thanks. Thanks so much. Okay.
Speaker 2: So, again, we're going to go over the rest of the questions in the final Q & A document, so no worries if just for the sake of time we weren't able to cover yours. And it will become available on the training webpage within the next days or so.
Speaker 1: Again, thanks. Thank you so much, Claire.
Speaker 2: And Morgan, for all the immense help that you provided to the team on this webinar series. And as always, thanks to the behind-the-scenes team who are the geniuses that help us.
Speaker 1: Put all of this together.
Speaker 2: And of course, very importantly, thanks to all of our audience for being with us during this two-part training series. And we hope to have you here with us again in an upcoming RCEP webinar. So stay tuned for the next one. Visit the RCEP webpage where there's a list of the upcoming webinars in the next couple of months.
Speaker 1: All right.
Speaker 2: And with that, have a great rest.
Speaker 1: Of your day. And thank you so much for being here.
Podbean