(see update below!)

This is one of those science stories that the media love. A letter to the journal Current Biology suggesting that methane emissions of large sauropod dinosaurs may have had a large impact on the climate of the Mesozoic era. Or as a tabloid headline: ‘dinosaur farts caused climate change’ .

The authors took estimates for the number of sauropod dinosaurs in the Mesozoic era and an assumption about how much methane each dino produced to made a back of the envelope calculation of total methane production from sauropod dinosaurs. They calculated this to be approximately equivalent to the total amount of methane emitted today.

This is a cool idea, that a few species of gut bacteria can have an enormous impact on the entire earth system. The letter raises an interesting subject and doesn’t claim to be the be all and end all on the subject, but nevertheless I have a couple of issues with this work. Ordinarily I’d grumble and move on with my life, but I was having a day off with nothing better to do so decided to dig a little deeper.

My first grumble (which I’m sure many people share) is the assumption of how much methane each dinosaur produced.

We can’t get a precise figure for this since we don’t have any way of working out the gut microflora of these dinosaurs. So we have to make an assumption. This is tricky as different species vary drastically in their methane production. Ruminant animals like cows produce loads of methane, whereas non-ruminants produce less. Kangaroos apparently produce very little and who knows about other species groups.

The BBC, along with most of the other major news sources, made a cock-up in their reporting of this story and stated that the authors got their figure by “scaling up the digestive wind of cows”. Not quite, they realised that dinosaurs wouldn’t have been ruminants, so they used figures for non-ruminant herbivores. In fact the figure they used was from an experiment on rabbits and guinea pigs.

In other words they were assuming these sauropods to be the equivalent of 20-tonne guinea pigs roaming the Mesozoic landscape. This is likely to be more realistic than 20-tonne cows, but it isn’t great. What we’re looking for is a large herbivore that’s as similar as possible to a dinosaur. How about a giant tortoise?

This paper published in 2011 on the methane output of tortoises – giant and not so giant – gives the parameters necessary to make a methane calculation assuming 20-tonne tortoises (weirdly this is actually cited in the dino paper, yet they chose to use the guinea pig data, is there a good reason?).

All you need to do is take parameter **a** and multiply it by the body mass of the animal raised to the power **b**. So for a 20-tonne guinea pig that would be 0.18 * 20,000 ^ 0.97, giving you 2,674 litres of methane per day. For a tortoise it would be 0.014 * 20,000 ^ 1.03 or only 376 litres of methane per day. A big difference.

In fact if we plug this in to their formula to calculate the annual mass of methane produced we get the results in the figure below, based on Wilkinson et al.’s figure, but with our extra tortoise-sauropod calculation.

So this assumption has a massive impact on the results. If sauropod flatulence was more like that of tortoises than guinea pigs then their impact on climate is likely to have been much less. R code to do these calculations and produce this figure is given at the end of the post.

So that’s the first thing that bugged me about this article. The second is the lack of error bars on the figure. In order to come up with these estimates of methane production the authors took a load of ‘best guesses’ at the important parameters, like the total biomass of dinosaurs and how heavy each one was. They also used point estimates for the parameters **a** and **b** I mentioned above. All of these parameter estimates are uncertain and we should be able to translate our uncertainty in these parameters through to uncertainty in the final estimate. So that’s what we’ll do here.

To keep things simple we’ll just look at uncertainty in methane production of each animal and assume the estimates for the amount of vegetation and the number of brontosaurs it could support are fine.

We have a good measure of the uncertainty in parameters **a** and **b**, since they were calculated along with 95% confidence intervals; upper and lower bounds between which we can be 95% confident the real value lies. The parameter estimates and confidence intervals for ruminant mammals, non-ruminant mammals and tortoises are given in table 1 of the tortoise paper.

In order to feed these uncertainties through the equation and get our uncertainty in the methane estimate we can use a Monte Carlo simulation. This is basically just defining a probability distribution for each of these parameters, randomly drawing from them and thowing those numbers at the equation. We’ll then get a whole load of different estimates of dino methane production which will represent our uncertainty in the methane estimate.

Code to do this is at the bottom, and gives the figure below which includes 95% confidence intervals as error bars.

The take home message from this is that there’s massive uncertainty in how much methane the dinosaurs kicked out. Those bars would be even wider if we’d included uncertainty in the biomass of sauropods too, the estimates for that vary from 80 to 672 tonnes of sauropod per square kilometre!

As an aside, the lead author of the paper in question, Dave Wilkinson, was one of my lecturers during my undergraduate degree at Liverpool John Moores University (that’s right, the second best university in the city of Liverpool). He was a fantastic lecturer, capable of explaining tricky aspects of ecological theory to hordes of hungover undergraduates with tremendous enthusiasm. He also does a cracking impression of a plant trying to escape from a herbivore.

**Update 11/05/12:**

I sent Dave Wilkinson an email containing this post and asking about the assumptions in the model, here’s a summary of his reply:

…there are good reasons for guessing sauropods and other large herbivorous dinosaurs fall closer to mammals than modern reptiles in their methane output… Ecologically an African savannah feels closer to herds of sauropods than anything reptiles do today. Also the mammal regression equation correctly predicts the (limited – for good reason!) measurements of elephant methane production. This is nearest extant species in size to sauropods (so it’s not really just scaling up from small rodents).

…in my view the strongest argument for using the mammal equation is microbiological. Imagine being a methanogen inside a sauropod and ask yourself if your environment is more similar to mammal or modern reptile...Because of their huge size most physiologists who have thought about these things think that sauropods are inertial homeotherms. So you have a nice warm and constant thermal environment in which to work on all that lovely plant matter. That sounds much closer to mammals.

This seems like a good justification for their mammal assumption, although the giant tortoises in the tortoise methane paper would be homeothermic to some extent too (even if they are much smaller than elephants). Re. error bars:

…we were only asked for that graph ‘for illustrative purposes’ just before publication… So it was never really intended to be part of the ‘hard science’. However given all the uncertainties in our toy model we feel that ‘error bars’ would only give a false sense of accuracy – we have no idea of the size of most of the errors!

As I have said to many journalists the title of our paper starts with the word ‘Could’ not the word ‘Did’.

#function to calculate annual dino methane production #defaults reproduce Wilkinson et al. calculation farts<-function(a=0.18,b=0.97,BM=200000){ conv=0.717*10^-3 #methane L to kg conversion factor area=75*10^6 #area of vegetation days=365 #days in a year bronto=20000 #brontosaurus weight (kg) animals=BM/bronto #number of brontosaurs area*animals*days*conv*a*bronto^b/10^9#Tg per year } farts() #with Wilkinson et al.'s giant guinea pigs farts(0.014,1.03) #with giant tortoises #figure 1. Wilkinson's figure with added tortoises bar<-c(farts(0.014,1.03),farts(),75,200,550) names(bar)<-c("Tortoise\nSauropods","Guinea pig\nSauropods","Cows","Pre-industrial","Modern") par(mar=c(5,8,4,4)) barplot(bar,horiz=T,las=1, col=c(rep(colours()[385],2),rep(colours()[403],3)), border=NA,space=0.6, xlim=c(0,600),xlab="Methane (Tg per year)") #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #Monte Carlo simulation to get error bars #first an annoying fiddly bit: #the a and b parameter estimates were obtained by first log transforming the data #in order to draw these parameters from a normal distribution we need to first transform parameter a #we can then get the standard devation by dividing the 95% difference by 1.96 #(taking the average difference, since there are rounding errors) #parameter a; for non-ruminant mammals: log(0.181) #mean mean(log(0.181)-log(0.144),log(0.227)-log(0.181))/1.96 #sd #for tortoises: log(0.014) #mean mean(log(0.014)-log(0.009),log(0.023)-log(0.014))/1.96 #sd #for b we don't need to log transform, just get the standard deviation as above (0.97-0.92)/1.96 #non-ruminant sd (1.03-0.84)/1.96 #tortoise sd #now we can write functions to draw parameter values from these distributions: #'a' parameter for GP and tortoise GPa<-function(n){ exp(rnorm(n,-1.7093,0.1167))} Ta<-function(n){ exp(rnorm(n,-4.2687,0.2254))} #'b' parameter for GP and tortoise GPb<-function(n){rnorm(n,0.97,0.02551)} Tb<-function(n){rnorm(n,1.03,0.0969)} #and run 100,000 randomised simulations through the equation n<-100000 GPig<-farts(GPa(n),GPb(n)) Tort<-farts(Ta(n),Tb(n)) #now we can get median values and 95% confidence intervals around our estimates: GPig_q<-quantile(GPig,c(0.025,0.5,0.975)) Tort_q<-quantile(Tort,c(0.025,0.5,0.975)) #figure 2. like figure 1 but with error bars bar<-c(Tort_q[2],GPig_q[2],75,200,550) names(bar)<-c("Tortoise\nSauropods","Guinea pig\nSauropods","Cows","Pre-industrial","Modern") par(mar=c(5,8,4,4)) pts<-barplot(bar,horiz=T,las=1, col=c(rep(colours()[385],2),rep(colours()[403],3)), border=NA,space=0.6, xlim=c(0,1000),xlab="Methane (Tg per year)") #error bars arrows(Tort_q[1],pts[1],Tort_q[3],pts[1],angle=90,code=3,length=0.1,col=colours()[180]) arrows(GPig_q[1],pts[2],GPig_q[3],pts[2],angle=90,code=3,length=0.1,col=colours()[180]) lines(c(Tort_q[2],Tort_q[2]),c(pts[1]-0.5,pts[1]+0.5),col=colours()[180]) lines(c(GPig_q[2],GPig_q[2]),c(pts[2]-0.5,pts[2]+0.5),col=colours()[180])