Profile picture
BOU
, 126 tweets, 94 min read Read on Twitter
Hi everyone! Time for another #ORNITHOLODAY!

My name is Brandon Edwards (@bedwards144), and I'll be tweeting to you LIVE from Guelph, ON Canada today. I plan to focus on the role of computer science (I'll call it #CompSci today) in #ornithology.

First, a bit about me!
I'm currently a 4th year BSc student at the University of Guelph (@uofg) in Guelph, ON. I initially started out in the school's Bachelor of Computing: Computer Science program, and actually was in that program for about 3 years before I switched to Mathematics! #ornitholoday
Before university, I had taken a year off after high school. During that time, I picked up the hobby of photographing birds, mainly just ones at bird feeders. It wasn't until I photographed this Red-bellied Woodpecker that I fell in love with birds and #ornithology! #ornitholoday
I initially struggled to see how I could combine #CompSci with #ornithology, which was quickly developing as a strong interest as well. I worried that I would end up having to choose just one. Not the case though, as we'll see later! #ornitholoday #CompSciBirding
Throughout university thus far, I've been lucky enough to be able to assist with research and perform my own original research since my first year here, thanks to the amazing support of my advisors. I'll get to introducing them shortly! #ornitholoday #CompSciBirding
That said, I think how I'm going to format the day is to tweet in the chronology of my time in University up until, well, today!

I think (I hope) that will best showcase my path to discovering the amazing world of #CompSciBirding, and will let you discover it too! #ornitholoday
Quick aside, & maybe it goes without saying, but I am FULLY willing to answer questions throughout the day, so fire away! Many times, questions can turn into really interesting discussions that may spark brilliant ideas on both sides, so have at it! #ornitholoday #CompSciBirding
Alright enough about me! Let's dive into talking about some stuff about #ornithology and #CompSci!

#ornitholoday #CompSciBirding
Actually that's a bit of a lie. To start, we're going to have to talk about fish for a bit!

Now, I'm sure you know what side I'm on in the great #FishVsBirds debate on Twitter, but I won't open that can of worms today! 🤐

#ornitholoday #CompSciBirding
Back in my first year, I reached out to @DrDanielGillis inquiring if he'd ever consider hiring a first-year student as a research assistant. One of his fields of research was ecological modelling, so that piqued my interest quite a bit.

#ornitholoday #CompSciBirding
I was hired onto his research team that was in the middle of developing an efficient type of simulation model for use with risk assessment of Lake Huron lake whitefish (Coregonus clupeaformis).

Enter: the Environmental Agent-based Model (eABM).

#ornitholoday #CompSciBirding
Before looking at eABMs, let's look at traditional Agent-based Models (ABMs). I'll highlight the usefulness of ABMs, but I want to hone in on some of the major disadvantages to ABMs, and how eABMs attempt to solve some of those problems.

#ornitholoday #CompSciBirding
In ecology, traditional ABMs are a useful tool for risk assessment. In particular, they are useful for modelling the interactions between, say, a species of animal with its environment.

#ornitholoday #CompSciBirding
In an ABM, we want to try to simulate some part of the life history of an animal species. That could be something on the small scale of a single breeding season to a larger scale of generations.

#ornitholoday #CompSciBirding
In order to create these simulations, we have to find a way to boil the entire life history of an animal species (maybe more if you are simulating >1 species) into some computer code. Time for some #CompSci!

#ornitholoday #CompSciBirding
A small exercise I like to go through to explain ABMs to people is to "create" an ABM for humans! In ABMs, each individual is considered an "agent". So what would one with humans look like?

#ornitholoday #CompSciBirding
Let's create a pretend "agent" and populate it with some information. We'll use me as an example!

We can assign an ID to the agent to reference it throughout the simulation, and perhaps some other useful information such as location and age.

#ornitholoday #CompSciBirding
Now that we have our first agent in the simulation, we need to do something with it! I think this is the more difficult part of creating ABMs as it (should) combine empirical information about your species into code.

#ornitholoday #CompSciBirding
In my simple example, let's consider some basic biological functions. In particular, lets look at eating! In a human, we can consider one's "energy" to deplete through time, and this energy is restored in part through eating. How can we code this?

#ornitholoday #CompSciBirding
Let's add on a new variable to our agent. We'll simply call it "energyLevel". We would typically start with some initial condition when we start the simulation, so we'll just say this human starts at 50% energy.

#ornitholoday #CompSciBirding
Through time, this energy level will drop at some rate. This rate is specified by the researcher creating the model, and can depend on what the human is doing (i.e. running vs. walking vs. sitting, etc). How can we gain this energy back? Eating!

#ornitholoday #CompSciBirding
Let's create a new function (our first function in our simulation, exciting stuff) called "eat()". Different foods will raise our energy levels in a different way, so we will account for that in our function.

#ornitholoday #CompSciBirding
Perhaps at this point you can see where this ABM stuff is going. To develop the model, we continually add on information about the agent and functionality to change the agent through space and time.

Now, some problems!

#ornitholoday #CompSciBirding
First, let's consider some implications of when we "continually add on information about the agent". Computers only have a finite amount of space to store short-term information (such as information about a model that's being run).

#ornitholoday #CompSciBirding
If I am continually adding in more information to a single agent, that's going to take up more space in the computer during a simulation.

This isn't SO bad when we're talking about just one agent. But that's super boring.

#ornitholoday #CompSciBirding
In my example with humans, we wouldn't simulate just one human.

We may want to simulate a city; say, the City of Guelph. So, instead of 1 agent, we are looking at *checks census information* 131,794 agents. That'll take up a LOT of space!

#ornitholoday #CompSciBirding
So, one of the forefront problems with traditional ABMs is the computational expense when we're considering the space that one simulation would take up. But, let's crank this simulation up a couple more levels.

#ornitholoday #CompSciBirding
A common interest for ABM use is to consider the change in the agents over time. In my example, I may be interested in how the population of a city changes over a 20 year period.

#ornitholoday #CompSciBirding
,But I may be interested in seeing these changes on a week-to-week basis. So in my simulation, I will be performing functions on 131,794 agents 52 times per simulated year for 20 years.

That's a total of 137,065,760 "computations" per simulation.

#ornitholoday #CompSciBirding
I say "computations", because each computation is going to involve updating information about the agent, including energy level, location, age, and whatever else you are looking to simulate.

#ornitholoday #CompSciBirding
Depending on the complexity of the model, these functions can take a long time to complete. Now, "a long time to complete" in terms of computers these days could be something on the scale of 1/200th of a second per computation.

#ornitholoday #CompSciBirding
However, if we are looking at 137,065,760 computations each taking 1/200th of a second, we're looking at close to 8 DAYS to complete just ONE simulation! Since these models are stochastic, we want WAY more than one model run.

#ornitholoday #CompSciBirding
Conclusion: Traditional ABMs can be super useful, but major problems include a HUGE computational expense when considering both space and time.

So, this is where the environmental agent-based model (eABM) comes into play!

#ornitholoday #CompSciBirding
Quick side note before jumping to eABMs. This is a very good paper that outlines a standard protocol for describing and development agent-based models. Useful if you want to learn more of the math side of things! sciencedirect.com/science/articl…

#ornitholoday #CompSciBirding
As I mentioned before, we have to talk about fish for a bit before getting to birds. Our first implementation of an eABM was for creating a simulation of Lake Huron lake whitefish. But here's where I am going to change things up a bit!

#ornitholoday #CompSciBirding
In environmental agent-based models, rather than treat the ANIMAL as the agent, we're going to consider the ENVIRONMENT as the agent. Perhaps a bit counter-intuitive, especially considering we want to simulate animals.

But hear me out!

#ornitholoday #CompSciBirding
Let's consider the habitat of Lake Huron. If we wanted to somehow treat the environment as a bunch of agents, a good first step would be break up the environment into discrete "chunks", say, 1km X 1km.

#ornitholoday #CompSciBirding
Now we have a bunch of agents!

As we did before, we can start populating these agents with information that may or may not change through time. Let's start with depth. Assign each agent a value between 0-6 depending on its depth.

#ornitholoday #CompSciBirding
We can start adding other information to our environment agents. In this image, we've set some agents to be "spawning grounds" (dark blue), a single agent to be a point mortality (light blue), and some agents to be a longer-term threat (tan).

#ornitholoday #CompSciBirding
Now we have to add our species of interest! In this case, we'll look at Lake Whitefish. Since we already have our agents set, it's as simple as adding in numbers to each agent to correspond with the number of fish in that agent.

#ornitholoday #CompSciBirding
Of course, we also want to consider the age of the fish. So, in each environment agent that contains fish, we would have a list with one column as, say, "age", and one column as "number of fish" (i.e. number of fish corresponding to that age).

#ornitholoday #CompSciBirding
So, after considering habitat type (by way of depth), spawning grounds, mortality, and number of fish per agent, we arrive at environment agents that look something like this, where a) is the entire habitat, and b) is the information at one agent.

#ornitholoday #CompSciBirding
We still write functions that simulate the movement, growth, and other life history information about fish. But rather than apply these functions to each fish in the simulation, we simply apply them to the environment agents that CONTAIN the fish.

#ornitholoday #CompSciBirding
And this is an important difference! Rather than performing computations on EACH agent in the simulation, we can skip over any environment agent that does not contain any fish.

#ornitholoday #CompSciBirding
So, we could have, say, 800,000 fish in our simulation ONLY residing in 10,000 or so 1km x 1km cells of Lake Huron, which means we're only performing computations on 10,000 agents rather than 800,000 agents. A HUGE difference!

#ornitholoday #CompSciBirding
And indeed it did make a difference in simulation times for the Lake Whitefish study. The traditional ABM took close to a week per simulation, whereas our eABM could finish in about 24-48 hours.

#ornitholoday #CompSciBirding
For a given simulation, we could save information about population from each time step. In our case, we looked at yearly population of adult (age 2+) lake whitefish. Here is an example of a simulation output for a 100 year simulation.

#ornitholoday #CompSciBirding
Since we have a spatially explicit model, with each agent simply telling us the number of fish there, we could capture "snapshots" in time of the dispersal of the fish and look at how they move given time of year, stressors, etc.

#ornitholoday #CompSciBirding
Indeed, we were able to show that the eABM is a useful and more efficient alternative to traditional ABMs, and we were able to show how it can be used for risk assessment of lake whitefish. See our paper about it here! ieeexplore.ieee.org/abstract/docum…

#ornitholoday #CompSciBirding
"Yo Brandon, I was wanting #ornithology and all I've gotten so far is fish! Bring on the birds already!!"

Gonna grab a quick bite to eat (my not-so-simulated energy levels are getting quite low), then I will (finally) move onto eABMs and birds!

#ornitholoday #CompSciBirding
While I'm away (maybe about 20 minutes or so), think about how an eABM might be applied toward a bird species of your choice! What would the environment look like? How would it be partitioned into enviro-agents? What functions would be needed?

#ornitholoday #CompSciBirding
I'm back!

Let's summarize what we've talked about so far!

Traditional agent-based models are a useful tool that can be used to simulate the dynamics of one or more animal species in their environment.

#ornitholoday #CompSciBirding
However, traditional ABMs tend to be computationally expensive, especially as we add more information about the population we are trying to simulate and the environment that it resides in.

#ornitholoday #CompSciBirding
eABMs seek to provide a more efficient solution such that we can get the same results as a traditional ABM but much more efficiently. We initially tested this on a population of Lake Huron lake whitefish with a great degree of success.

#ornitholoday #CompSciBirding
Now, what you've all been waiting for: BIRDS.

In the chronology of my time in University, this corresponds to my second year. At that point, I was getting rather comfortable with the methods of eABM, and I wanted to try to make my own.

#ornitholoday #CompSciBirding #ornithology
Around that same time (this was circa 2016/2017), I started looking into the issues that was happening at a particular tourist beach in southern Ontario called Sauble Beach.

#ornitholoday #CompSciBirding #ornithology
In particular, the issues affected an endangered species of shorebird, the Piping Plover (Charadrius melodus). Piping plovers started breeding at Sauble Beach in 2007 after a period of 30 years of not breeding at all in Ontario.

#ornitholoday #CompSciBirding #ornithology #GLPIPL
Since 2007, several breeding pairs of piping plovers have nested at Sauble Beach and other beaches throughout Southern Ontario.

#ornitholoday #CompSciBirding #ornithology #GLPIPL
Given the popularity of Sauble Beach throughout the months of June - August, it would be expected that piping plovers nesting on Sauble Beach may experience stressors from human activity.

#ornitholoday #CompSciBirding #ornithology
And indeed, there have been issues between the municipal and provincial governments in this area. #ornitholoday #CompSciBirding #ornithology
bayshorebroadcasting.ca/news_item.php?…
So, we have that breeding piping plovers (and especially their young) have potentially a significant interaction between changes in their environment, particularly changes coming from humans.

#ornitholoday #CompSciBirding #ornithology
To me, this sounded like the PERFECT opportunity to apply what we've learned about eABMs to a scenario in the world of #ornithology. Piping plovers are a well-studied species, giving us good resources of life history to simulate.

#ornitholoday #CompSciBirding #GLPIPL
So let's build one! As with last time, we'll start with focusing on creating environment agents. We're going to focus on the stretch of Sauble Beach where the piping plovers have nested the most since 2007.

#ornitholoday #CompSciBirding #GLPIPL
I managed to get a hold of some yearly reports through @ploverlovers that allowed me to get a good idea of what the habitat types should be on the beach. I decided on a 1m X 1m resolution for each agent. Here's the digitization.
#ornitholoday #CompSciBirding #GLPIPL #ornithology
Notice that, in addition to information about the habitat itself, we can also add information about the "foraging quality". That is, piping plovers that forage at higher quality foraging habitats would gain more energy.

#ornitholoday #CompSciBirding #GLPIPL #ornithology
Last time, we simply looked at the number of fish per agent, and whether or not they died. With eABMs, however, you have flexibility in determining what "outcome variable" you want to track.

#ornitholoday #CompSciBirding #ornithology
So, rather than tracking just numbers (their numbers are so low on Sauble Beach that it would be fairly pointless), we could track weights of piping plover chicks through time.

#ornitholoday #CompSciBirding #ornithology
For our research purposes, it made sense to track a metric about the chicks. We wanted to see how increased anthropogenic activity might affect the growth of the chicks overtime.

#ornitholoday #CompSciBirding #ornithology
Some studies have been done that show piping plover chicks (and many other young of shorebird species), when in the presence of humans, tend to stay more time "on alert" rather than foraging and gaining energy.

#ornitholoday #CompSciBirding #ornithology
So with that in mind, we could add some more variables to our agents that include whether a human is there, whether piping plover chicks are there, etc. After all is said and done, we arrive at an enviro-agent that looks like this!

#ornitholoday #CompSciBirding #ornithology
As I mentioned, Sauble Beach is a rather popular tourist destination in the summer when the piping plovers are breeding. One way managers have thought to combat anthro effects is the use of nest exclosures.

#ornitholoday #CompSciBirding #ornithology
These nest exclosures act as a barrier around the nest such that humans cannot enter. It's thought that if a sort of "buffer space" is provided, the young piping plovers can have a space to feed without disturbance.

#ornitholoday #CompSciBirding #ornithology
So here's where we can start to design some experiements around our developed eABM! We, as the researchers, can control the probability of encountering a human at a given time.

#ornitholoday #CompSciBirding #ornithology
So we can experiment with varying levels of "anthro presence" to see how that affects growth rates of piping plovers.

#ornitholoday #CompSciBirding #ornithology
THEN, we could also investigate how a nest exclosure might help to mitigate the effects of anthropogenic disturbance on piping plovers.

#ornitholoday #CompSciBirding #ornithology
How would we simulate nest exclosures on an eABM? In our case, we can make it so that there is a 0% probability of encountering a human within R radius of the nest.

#ornitholoday #CompSciBirding #ornithology
So our experiments were as follows:
Experiment "0":

Simulate piping plover growth in a "perfect world" scenario. This gives us a baseline for which we can compare the effects of our other experiments.

#ornitholoday #CompSciBirding #ornithology
Experiment 1:

Run simulations with a probability of encountering a human at 20%, 40%, and 60% (20 simulations each).

#ornitholoday #CompSciBirding #ornithology
Experiment 2:

Run simulations with a probability of encountering a human at 20%, 40%, and 60% (20 simulations each), BUT add a nest exclosure.

#ornitholoday #CompSciBirding #ornithology
Experiment 0 actually served two purposes. 1) it allowed us to calibrate the model to actually match "real world" data, and 2) it gave us the baseline to compare to our other experiments.

#ornitholoday #CompSciBirding #ornithology
Now, calibrating the model to match real world data can be a bit subjective. A study by Martens and Goossen (2008) looked at the growth of piping plovers in Chaplin Lake, SK Canada.

#ornitholoday #CompSciBirding #ornithology
Chaplin Lake does not have nearly as much anthropogenic disturbance (often times none at all), so it was an excellent data set for us to use as real world data to base our perfect world scenario off.

#ornitholoday #CompSciBirding #ornithology
This plot shows 50 simulations of of eABM (and the calculated growth rate) compared to the empirical growth rate reported by Martens and Goossen. Not bad!

#ornitholoday #CompSciBirding #ornithology
Let's see how our other experiments looked. Experiment 1 looked at how increasing anthropogenic presence affected the growth rate of piping plovers. We tested at 20%, 40%, and 60% probability of encountering a human.

#ornitholoday #CompSciBirding #ornithology
Even at the 20% probability, the growth rate dropped significantly, and continued to drop as the probability of encountering a human increased.

#ornitholoday #CompSciBirding #ornithology
However, when we added in nest exclosures (as in Experiment 2), this difference in growth rate decreases!

#ornitholoday #CompSciBirding #ornithology
Comparing no exclosure vs. exclosure at each level shows this difference rather well. This boxplot shows the mean weights after 30 days for piping plover chicks.

#ornitholoday #CompSciBirding #ornithology
From this, we had 2 major results:

1) We showed that nest exclosures do, indeed, help to mitigate the effects of anthropogenic presence on piping plover hatchlings.
#ornitholoday #CompSciBirding #ornithology
2) In a broader sense, we were able to show that an eABM could be used in a different taxa than fish! The eABM was initially developed to be used with fish, but we were able to show that it could also be used in #ornithology
#ornitholoday #CompSciBirding
We have a paper written up and submitted on these results, and in it we make some recommendations of how this eABM can be further developed for use not just with piping plovers, but for potentially other animal species.

#ornitholoday #CompSciBirding #ornithology
I'm going to take a 20 or so minute break to give my eyes a rest (blue light = not good for eyes!), and when I get back I'll discuss some of these recommendations and potential use for other species of birds!

#ornitholoday #CompSciBirding #ornithology
Aaaaaand I'm back.

So, to summarize my last block of tweets: we were able to apply the concept of an eABM toward the field of #ornithology and create one for use with the piping plover.

#ornitholoday #CompSciBirding
We simulated the effects of human presence and nest exclosures on piping plover chick growth rate. We found (as expected) that increase human presence led to a decrease in growth rate. This decrease was mitigated with exclosures.

#ornitholoday #CompSciBirding #ornithology
So the last discussion I want to have before moving on to a different #CompSci-related project is potential future use for eABMs, both for piping plovers and beyond.

#ornitholoday #CompSciBirding #ornithology
At Sauble Beach, and many other beaches that experience human tourism, human-subsidized predation is also a common issue. What do we mean about human-subsidized predation?

#ornitholoday #CompSciBirding #ornithology
As the name implies, human-subsidized predation stems from increased predation due to effects of human presence. As an example: more humans-->more garbage cans on beach--> more raccoons-->more piping plover predators.

#ornitholoday #CompSciBirding #ornithology
It would be valuable to expand our current eABM implementation for piping plovers to include effects of predation (i.e. allow for chicks or eggs to die).

#ornitholoday #CompSciBirding #ornithology
From this, we could start looking at both growth per breeding season and population growth (or decline) over time.

#ornitholoday #CompSciBirding #ornithology
Additionally, it could be interesting to look at multiple beaches in one simulation, and connect migration from wintering grounds to any of these beaches.

#ornitholoday #CompSciBirding #ornithology
In any case, given how heavily managed piping plovers are in at least Ontario (and certainly elsewhere along their breeding grounds), the use of an eABM to help inform management decisions of this species appears to have good potential.

#ornitholoday #CompSciBirding #ornithology
Now, thinking at even more of a broader level: how do we allow other scientists a means to create their own eABM for their own research?

#ornitholoday #CompSciBirding #ornithology
The first eABM applied to the fish was created from scratch using the @JuliaLanguage, and the eABM applied to piping plovers was created from scratch using Python.

#ornitholoday #CompSciBirding #ornithology
In both cases, a background in computer science/software engineering was extremely valuable. However, it's certainly the case that not everyone who is interested in eABMs has a background in coding.

#ornitholoday #CompSciBirding #ornithology
So, over the last few months, we have started the develop the 'eABM' package for #rstats. Our goal with this package is to provide the "base" functionality for a general eABM.

#ornitholoday #CompSciBirding #ornithology
The difficulty is deciding what constitutes a "general eABM". We want the environment tailored to whatever species the researcher is studying, AND the rules surrounding the life history of the species will vary model-to-model.

#ornitholoday #CompSciBirding #ornithology
(Sorry for the delay, got distracted by first-of-year Turkey Vultures on campus!) #ornitholoday
What we're looking at doing is to provide a package where the user can load in a) a matrix of habitat types, perhaps created through something like ArcGIS, b) a set of "rules" for their species' life history, and c) initial conditions

#ornitholoday #CompSciBirding #ornithology
I'll be focusing on this at a more full-time basis this summer after winter classes end, and will be presenting some preliminary results at #AOS19AK in Alaska. So if you're going to be there, let's chat about it!

#ornitholoday #CompSciBirding #ornithology
Now, for this last hour or so of my #ornitholoday, I'm going to switch gears completely from eABMs and talk about some of the work I started doing this past summer with North American Breeding Bird Survey data!

#ornitholoday #CompSciBirding #ornithology
So, this summer, I was hired as a co-op student at the Canadian Wildlife Service in Ottawa, ON Canada. There, my main project was to help develop and test the use of a Generalized Additive Model for better BBS trend estimates.

#ornitholoday #CompSciBirding #ornithology
While I was there, however, I noticed that a lot of the code that they were using to run their analyses might make a very handy R package for other scientists to run their own BBS analyses.

#ornitholoday #CompSciBirding #ornithology
The BBS data is freely available from the United States Geological Survey website (pwrc.usgs.gov/bbs/) but there doesn't yet exist a simple way to download packaged data for quick analyses.

#ornitholoday #CompSciBirding #ornithology
So, we have the issue that we KNOW how the data are collected, and we can see the published trends released by USGS year to year, but there exists a "black box" in that we don't know how those trends are created.

Enter: #bbsBayes

#ornitholoday #CompSciBirding #ornithology
I, along with @AdamClarkSmith, started the development of the R package #bbsBayes this past summer. We had a few concrete goals that we wanted bbsBayes to achieve.
#ornitholoday #CompSciBirding #ornithology
1) We wanted to have a package that would provide a user an easy-to-use function that allows them to download tidied BBS data.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
2) We wanted to allow users to produce their own "correct" analyses that would match the trends produced by USGS and CWS.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
3) We wanted to give users the flexibility to modify preexisting Bayesian models to allow for different parameterization, or to allow for additional covariates.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
At this point in the game, we have managed to launch a few Beta releases of bbsBayes! Here's a link to the Github repository if you are interested in having a look: github.com/BrandonEdwards…

#ornitholoday #CompSciBirding #ornithology #bbsBayes
We have created functionality that allows users to download stop-level data via 'fetch_bbs_data()'. The user can stratify the data( 5 possible stratifications), and then prepare the data for use with JAGS modelling.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
Finally, we provide functions to actually run the JAGS models (via 'run_model()') and to do some analysis of the model output.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
This analysis includes calculating annual indices of the modelled species, creating trend plots, creating maps, and even dives a bit into model selection.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
Since it is still in beta testing, we are still ironing out some bugs in the code, but we are VERY excited with this package's potential, especially when it comes to giving other researchers tools for BBS analysis.

#ornitholoday #CompSciBirding #ornithology #bbsBayes
At our current timeline, we are looking to have a full v1.0.0 package published on CRAN by early-mid April, so look out for that! You can follow the updates from my personal Twitter account (@bedwards144).

#ornitholoday #CompSciBirding #ornithology #bbsBayes
Additionally, I am aiming to present this R package at the @SCO_SOC conference in Quebec City, QC Canada in August. So if you're going to be there, let's chat about it!!

#ornitholoday #CompSciBirding #ornithology #bbsBayes
Well folks, I think that's going to do it for me today! Thank you SO much for tuning in to my #ornitholoday! I hope you learned a bit about how #CompSci and #ornithology can really go hand-in-hand, and I hope I got you excited for some upcoming R packages.

Thanks so much!
[ADMIN] A huge thank you to Brandon for an engaging day of #rstats in #ornithology and and outstanding #ORNITHOLODAY.
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to BOU
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!