Latest Entries »

Type of presentation: oral

 Darras L.1

 1Department of Geology, University of Leicester

Dental microwear-based inferences of diet are most often performed at the specific level. The ecosystem-dependent nature of inferred trophic palaeoecologies has to be considered if an already studied species is to be later used as a palaeoenvironmental proxy. Measures from modern populations collected and analysed over a short timespan provide an ecological snapshot and reference. Fossil “populations”, on the other hand, are accumulated through time and represent an average estimate of a species’ ecology. Recent works highlighted trophic diversity within a single species across different environments or localities. As the latest technological developments have greatly improved the accuracy and level of resolution of our palaeoecological inferences, the degree of ecological flexibility can be investigated before occurence-based extrapolation of food webs or palaeoenvironments.

Here I investigate trophic diversity in modern and fossil populations of fishes via dental microwear texture analysis, from the ordinal to the individual level. In particular, late Jurassic pycnodontiform fishes, expected to be specialised shell-crushers, exhibit a surprising ecological diversity at the ordinal level, narrowing down within the family Pycnodontidae. Reconstitutions of the interactions within palaeoecological communities that it allows are illustrated within the kimmeridgian pycnodonts from Dorset.

A look at some data

Here comes some more about using R, about teeth in fossil fish and more. As none of this has been published yet, the active scientists among you will understand why some information (specimen number, etc…) is not provided. On the other hand, we will be looking at actual real data, microtexture data from the teeth of a fossil fish. This is how sexy it actually looks when I get it:

Tooth Pos1 Pos2 Rank Par1 Par2 Par3 Par4 Par5 Par6 Par7 Par8
Tooth8 posterior inner

24

0.604

0.495

11.327

12.43

8.819

21.249

2.69E+06

0.48

Tooth8 anterior inner

23

0.431

0.473

6.763

1.882

1.488

3.37

1.85E+06

0.73

Tooth8 anterior inner

23

0.306

-0.196

8.157

2.112

2.283

4.395

2.32E+06

0.806

Tooth8 anterior outer

22

0.318

-0.71

16.741

4.555

4.979

9.535

3.41E+06

0.586

Tooth7 posterior inner

21

0.295

-1.452

9.657

1.378

2.381

3.759

2.15E+06

0.097

Tooth7 central central

20

0.249

-0.492

14.577

2.951

4.578

7.529

3.16E+06

0.745

Tooth7 anterior inner

19

0.222

-0.676

7.371

1.883

1.616

3.499

1.61E+06

0.752

Tooth6 posterior outer

18

0.506

-0.127

6.922

3.762

3.62

7.382

2.39E+06

0.723

Tooth6 posterior outer

18

0.416

2.006

21.118

5.462

3.661

9.122

2.82E+06

0.237

Tooth6 posterior inner

17

0.335

-0.155

9.519

2.801

3.192

5.992

1.81E+06

0.88

Tooth6 anterior inner

16

0.244

-0.103

4.857

2.737

1.922

4.66

1.79E+06

0.776

Tooth6 anterior outer

15

0.481

0.048

9.606

2.038

3.634

5.671

2.08E+06

0.814

Tooth4 posterior outer

14

0.269

0.145

5.837

2.586

0.925

3.511

2.47E+06

0.746

Tooth4 posterior inner

13

0.342

-0.057

5.235

2.44

1.09

3.53

2.28E+06

0.674

Tooth4 anterior inner

12

0.147

-0.552

5.111

0.687

1.311

1.997

1.03E+06

0.86

Tooth3 posterior outer

11

0.249

-0.79

7.007

1.277

3.059

4.335

2.10E+06

0.75

Tooth3 posterior inner

10

0.484

-1.233

13.272

2.867

4.424

7.291

1.62E+06

0.768

Tooth3 central central

9

0.362

-0.881

7.34

1.132

1.838

2.969

1.87E+06

0.787

Tooth3 anterior inner

8

0.293

-1.381

11.455

1.572

3.303

4.874

1.92E+06

0.624

Tooth2 posterior outer

7

0.646

-3.454

25.219

1.882

4.75

6.631

2.65E+06

0.436

Tooth2 posterior inner

6

0.3

-0.532

9.535

2.425

3.356

5.78

1.65E+06

0.745

Tooth2 central central

5

0.487

-0.681

6.548

2.25

3.906

6.157

1.71E+06

0.755

Tooth2 anterior inner

4

0.221

-0.214

5.203

1.404

1.801

3.205

1.54E+06

0.858

Tooth1 posterior outer

3

0.394

-0.042

11.118

4.264

2.561

6.825

1.83E+06

0.863

Tooth1 posterior inner

2

0.25

-0.795

9.868

1.921

2.775

4.696

2.08E+06

0.665

Tooth1 anterior inner

1

0.218

-0.087

11.446

2.482

2.121

4.603

1.28E+06

0.782

There already are a few modifications: Pos1 and Pos2 indicate where the data comes from on the tooth: the anterior, posterior or central part of the inner, outer or central rings of ornamentation. If you have a hard time picturing it, just imagine that a tooth from that fossil fish is similar to a simple target, bull’s eye kind of like, with one outer ring, one inner ring and a central point, and the data comes from top to bottom in the order: top outer ring, top inner ring, central point, bottom inner ring, bottom outer ring. I could not always get good data from everywhere, though, and sometimes I thought I had bad data so I sampled again, in the end I have two measurements for similarly placed areas. Oh, and we have several teeth along a tooth row so… stack them targets one atop another along the wall. And let’s stop mentioning targets, before I start getting confused as to what is the topic here. From the most anterior part to the most posterior, positions have been numbered in the “rank” column.

Just to let you know, I did not collect the data for the fun of it. Nor was it gathered in that manner for trivial reasons, no, we will be testing a hypothesis and further exploring the data here. The hypothesis being: “Microtextural data is similar at any position along the tooth row.” The alternative one: “Microtextural data does change with the sampling position.” Why test that? Well if only a part of the tooth is preserved undamaged, it would be useful to know whether it can be compared with the rest of our sample anyways. Otherwise, one would need to only compare similar positions between them, to compare like with like, also take good notes and be very careful when acquiring data.

First let’s get the numbers: just copy the data frame above in anything that will allow you to save it and read it. For this example and because I write from a computer using the most widespread OS, I will use notepad to paste the copied data and save it in the R folder as “test.txt”. Then one just needs to set it as the working directory for the session. For me, the R folder is on the D:/ drive so in R I just set the directory as:

setwd(“D:/R”)

And I bring the data in, before checking it.

test<-read.table(“test.txt”,header=TRUE)

str(test)

We can now test the hypothesis in several ways. What I will use here is a standard analysis of variance. One could write a lot about the analysis of variance and the many precautionary steps one should take before using it, but this is a topic for another time. We will assume that there is no particular issue to apply it here. Analysis of variance, or anova, can be done in R using a command line such as:

aov(test$Par1~test$Tooth)

Which tells you a lot or pretty little, depending on how much you know about it. But it does not provide what we are interested in: a result telling us if the variance in the parameter 1 (Par1) can be explained by the fact that it comes from different teeth (“Tooth” factor). For that, we need to use the summary function

summary(aov(test$Par1~test$Tooth))

What have we got here? Similar information (degrees of freedom, sum of squares) and also the F-statistic, and the p-value. What the software does is that it compares the F-statistic calculated to that which you would expect if the factor Tooth had no influence on the data whatsoever. The p-value expresses broadly an estimate of the chances of making a mistake when considering that the factor explains the observed values. As a rule of thumb, usually a p-value below 0.05 or 0.01 is used to reject the null hypothesis (according to which the tested variable is not under the influence of the factor). Here you should have a P-value of 0.3333, henceforth, we cannot show that the tooth factor influences the data. Perhaps it does but because of bad luck our data does not show it, in that case we accept the null hypothesis since there is no support for the alternative one.

Then we can do the same test for all parameters, and also look at different factors if we want, don’t hesitate to give a try:

summary(aov(test$Par2~test$Tooth))

summary(aov(test$Par3~test$Tooth))

summary(aov(test$Par1~test$Pos1))

summary(aov(test$Par1~test$Pos2))

Typing it all is a bit tedious, though. One thing that can be done quite easily in R is to have the same commands done on similar series of data. We can do it with “for”. In fact we will use the for function to have the anovas (with the tooth factor) done for columns 5 to 12 (Par1 to Par8), just make sure that it makes sense, so “for any value of “i” in the series 5, 6, 7, 8, 9, 10, 11, 12, perform an anova testing whether the values in column number “i” can be explained by the tooth factor”. In R code this gives:

for(i in 5:12){summary(aov(test[,i]~test$Tooth))}

Surely you typed/entered it and saw nothing happen. The reason is that we asked the software to perform the analysis, not to print the results on the screen:

for(i in 5:12){print(summary(aov(test[,i]~test$Tooth)))}

All right, now we have the results but we do not know for which parameter. Luckily, we just need to have the software print that as well, before the test, i.e. we ask R to perform two tasks, just do it by adding “;” between the commands:

for(i in 5:12){print(colnames(test)[i]);print(summary(aov(test[,i]~test$Tooth)))}

Better, no? The “tooth” factor does not seem to have a significant influence on the data. Let’s see if another one has. Perhaps “Pos1” (position 1) would make sense: could areas from the posterior part of the tooth have a different microtexture than the ones from the anterior part?

for(i in 5:12){print(colnames(test)[i]);print(summary(aov(test[,i]~test$Pos1)))}

Still nothing. What about the actual position along the tooth row? We can do the test with the variable Rank, used as a poor surrogate for the “distance from the anterior part of the jaw”.

for(i in 5:12){print(colnames(test)[i]);print(summary(aov(test[,i]~test$Rank)))}

HAHA! The parameter 7 seems to vary with position along the jaw. That is a result, and as a matter of fact it can be biologically interesting, as it means that from anterior to posterior, the values we can expect to get for it are not identical, and since Par7 is expressing some aspect of the homogeneity of the texture, we can conclude that from anterior to posterior, the different areas are more (or less) heterogeneous in texture. We also know that this is not because the different teeth are worn in different ways. Well they are, but it is not which tooth is considered that explains the values of the data (before, it was assumed that each tooth had its own “microtexture signature”, i.e. that any point on the tooth was as good as another but that the teeth were different in respective signatures), rather the position of the sampled point matters. If you recall the previous entry about R, now is the time to make good use of it to look at the data. Apparently, values get higher as one gets farther from the anterior part of the jaw.

plot(Par7~Rank,data=test,pch=16)

Time to have fun! We can also have one symbol for each position (anterior, posterior, central) and one colour for each considered ring (inner, outer, central point). And do you remember the linear models and predictions as well? No reason not to make use of it. Before that, we will also separate the plot device into several ones in order to check on our progress:

par(mfrow=c(2,2))

plot(Par7~Rank,data=test,pch=c(15,16,17)[Pos1],col=c(“red”,”green”,”blue”)[Pos2],ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”)

Model1<-lm(Par7~Rank,data=test)

Pred1<-predict(Model1,se.fit=TRUE,interval=”confidence”)

par(new=TRUE,bty=”n”,xaxt=”n”,yaxt=”n”)

matplot(test$Rank,cbind(Pred1$fit),lty=c(1,3,3),type=”l”,col=”black”,lwd=2,ylim=c(min(test$Par7),max(test$Par7)),xlab=NA,ylab=NA)

You know what? I would rather have those three lines displayed as on line in the middle of an area, a bit transparent if at all possible. The line part is fairly simple if using what we just typed:

par(xaxt=”l”,yaxt=”l”)#this is just to have the axes drawn

plot(Par7~Rank,data=test,pch=c(15,16,17)[Pos1],col=c(“red”,”green”,”blue”)[Pos2],ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”)

par(new=TRUE,bty=”n”,xaxt=”n”,yaxt=”n”)#and here so as not to have new axes drawn

matplot(test$Rank,Pred1$fit[,1],pch=20,type=”p”,col=rgb(0.1,0.1,0.7,0.5,1),ylim=c(min(test$Par7),max(test$Par7)),xlab=NA,ylab=NA)

The way the colour is set here uses the function rgb (for “red”,”green”,”blue”), the first numbers stand for the values of red, green and blue respectively, the fourth one is for the opacity and the fifth one sets the maximum value for the first four. i.e. here we have a colour set as 10% of the maximum red, 10% maximum green, 70% maximum blue, half-transparent.

You may notice that two points appear more opaque than others. Those are the positions for which two samples were taken, so two points are drawn one over another. We could manage to have only one point, but for the time being it is unnecessary hassle. The fun bit starts here, for we wish to display the confidence interval as an area. For that we will use the function polygon and a little trick. Polygon needs coordinates to display the shape correctly, so we can’t really just give values of X and Y for the upper and lower limits. See for yourselves:

par(xaxt=”l”,yaxt=”l”)

plot(Par7~Rank,data=test,pch=c(15,16,17)[Pos1],col=c(“red”,”green”,”blue”)[Pos2],ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”)

polygon(test$Rank,Pred1$fit[,2])

polygon(test$Rank,Pred1$fit[,3])

And just concatenating the two series of values won’t do, it would just give crossed lines as one goes from an extremity of the X axis to the other:

polygon(rep(test$Rank,2),c(Pred1$fit[,2], Pred1$fit[,3]))

In the end, I find it more convenient to have an object containing the values in the order. Since Rank is in decreasing order in the data frame, it will need sorting:

PolX<-c(sort(test$Rank,decreasing=FALSE),test$Rank)

That’s for the X part of the polygon, for the Y part, it is going to be tricky, since we have 26 values to sort but using the sort function may end up in mismatched results. Actually, here, with the values we have, it could work, but imagine that the slope of the line were not that steep, then sorting the values in increasing or decreasing order would not do. We cannot either use the values in the Rank variable as a factor to order values from 1 to 26 with a factor going from 1 to 24. But one could use a factor made from a sequence from 26 to 1, then the polygon should be fine:

PolY1<-as.numeric(c(Pred1$fit[,2][as.factor(seq(26,1))],Pred1$fit[,3]))

par(xaxt=”l”,yaxt=”l”)

plot(Par7~Rank,data=test,pch=c(15,16,17)[Pos1],col=c(“red”,”green”,”blue”)[Pos2],ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”)

polygon(x=PolX,y=PolY1)

And now to start colouring the polygon, without border, then we add the regression line:

par(xaxt=”l”,yaxt=”l”)

plot(Par7~Rank,data=test,pch=c(15,16,17)[Pos1],col=c(“red”,”green”,”blue”)[Pos2],ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”)

polygon(x=PolX,y=PolY1,border=NA,col=rgb(0.2,0.2,0.6,0.2,1))

par(new=TRUE,bty=”n”,xaxt=”n”,yaxt=”n”)#and here so as not to have new axes drawn

matplot(test$Rank,Pred1$fit[,1],pch=20,type=”p”,col=rgb(0.1,0.1,0.7,0.5,1),ylim=c(min(test$Par7),max(test$Par7)),xlab=NA,ylab=NA)

For further improvement we can also add an area showing the 99% confidence interval instead of the 95% or on top of it.

Pred2<-predict(Model1,se.fit=TRUE,interval=”confidence”,level=0.99)

PolY2<-as.numeric(c(Pred2$fit[,2][as.factor(seq(26,1))],Pred2$fit[,3]))

par(xaxt=”l”,yaxt=”l”)

plot(Par7~Rank,data=test,ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”,type=”n”)

polygon(x=PolX,y=PolY1,border=NA,col=rgb(0.2,0.2,0.6,0.2,1))

par(new=TRUE,bty=”n”,xaxt=”n”,yaxt=”n”)#and here so as not to have new axes drawn

matplot(test$Rank,Pred1$fit[,1],pch=20,type=”p”,col=rgb(0,0,0.7,0.5,1),ylim=c(min(test$Par7),max(test$Par7)),xlab=NA,ylab=NA)

polygon(x=PolX,y=PolY2,border=NA,col=rgb(0,0.6,0,0.2,1))

points(Par7~Rank,data=test,pch=c(21,22,23)[Pos1],bg=c(“red”,”green”,”blue”)[Pos2],col=”black”)

We have had our fair share of graphical fun, and looking at the graph you may have noticed something striking: the green points all seem to have lower values than the blue ones. This is something that was not tested for in the anovas from earlier (though you may have cleverly checked it for yourself). This shows how plotting the data with points and colours according to different factors can give you an idea of where the important information might be:

for(i in 5:12){print(colnames(test)[i]);print(summary(aov(test[,i]~test$Pos2)))}

As you can see, the values we get for the parameter 7 can be explained by the factor considered here. This factor distinguishes the outer, inner and central parts of the teeth. Now we know that the outside part of the tooth is not heterogeneous in the same way as the inner ring, and perhaps not the center part, though for it we have only three points, which is very low, so we will not draw conclusions for that bit. There are actually ways to highlight which categories are different one from another, but this is not our purpose here. Just know that we could explore the data so as to see if the data is under the influence of only the factor Pos2, the distance from the anterior or an interaction with other factors e.g.:

summary(aov(Par7~Pos2*Pos1,data=test)) #only Pos2 has an influence on the data

summary(aov(Par7~Pos2*Tooth,data=test)) #only Pos2 has an influence on the data

summary(aov(Par7~Pos2*Rank,data=test)) #Both Pos2 and Rank influence the data, though each in its own way (their interaction is not significant, btw this is an ancova, analysis of covariance, but more about that another time)

So there is no need to worry, what we have done so far is not useless or uninformative, there is just more to the data. Were the interaction significant, it could be justified to look at separate models, but here the two elements of importance (higher values away from the anterior extremity and higher values for the outer ring) are visible enough. We can conclude that for that one parameter there is ground to pay attention to where the data comes from along the jaw. All other parameters (examined here and many others) actually do not vary with the distance from the anterior extremity or the considered ring of the teeth. Why does the heterogeneity vary with which part of the ornamentation is sampled? I would suggest that the bundles formed of crystals of hydroxylapatite, the hard parts of the tooth enameloid or dentine, are not oriented in a similar way all over the tooth. Actually, in many fish species, they have a radiating pattern in the enameloid (just like rays around the sun on a child’s drawing), so they are oriented more parallel to the long axis of the jaw on the outer ring than on the inner one.

Just a potential explanation, associated with a pretty graph.

par(bg=”transparent”,mfrow=c(1,1),xaxt=”l”,yaxt=”l”,fg=”navajowhite”,col.axis=”navajowhite”,col.main=”navajowhite”,col.lab=”navajowhite”,col.sub=”navajowhite”)

plot(Par7~Rank,data=test,ylim=c(min(test$Par7),max(test$Par7)),main=”Par7~distance from the anterior”,xlab=”Distance from the anterior”,bty=”l”,type=”n”)

polygon(x=PolX,y=PolY1,border=NA,col=rgb(0.4,0.4,0.9,0.5,1))

par(new=TRUE,bty=”n”,xaxt=”n”,yaxt=”n”)#and here so as not to have new axes drawn

matplot(test$Rank,Pred1$fit[,1],pch=20,type=”p”,col=”slateblue”,ylim=c(min(test$Par7),max(test$Par7)),xlab=NA,ylab=NA)

polygon(x=PolX,y=PolY2,border=NA,col=rgb(0,0.8,0,0.4,1))

points(Par7~Rank,data=test,pch=c(21,22,23)[Pos1],bg=c(“mistyrose”,”violet”,”orchid4″)[Pos2])

Some may have noticed a rather long “silent” interval in this blog. I was planning for more regular updates but much of what is yet to come might actually turn to be publication material, and as I am writing up my thesis right now, I am a little bit paranoid and do not wish to take risks.

So I thought that instead, we could have fun with numbers. I like to have fun with numbers. Many may have heard that mathematics are some sort of universal language. Like other languages, it is useful to learn it, and sometimes go back to the core basics of it. Maybe not the basics, but we can start looking at a few useful things.

From a methodological point of view, when one has data available, it is always sensible to search for patterns, links, variables that explain one another. e.g. if one can calculate values for a variable “b” after the values of a variable “a”, perhaps a causes b or b causes a, but more likely the same phenomenon influences values of both a and b. This can be helpful for c. What’s c? Well c is a third variable. We know that something influences b and c in such a way that one can calculate c after b. But what if we do not have values for b, just for a?

Sounds like a lot of theoretical gibberish, perhaps an example could be useful. Let’s imagine that we have two samples of fish, one is an ensemble of fossilised bones, the other one is an ensemble of modern members of the same order, a bit like two heavy metal bands would be part of the same genre, perhaps even one has descended/”been influenced” from/by the other: Let’s call the fossil species Niger sabbatum and the modern one Magnus magus.

Now, we want to know how hard a bite Niger sabbatum can have, in order to see if it could have crushed some large oysters or such stuff found in the same strata. But we have only fossil bones and a modern analogue at our disposal, for which we have measurements.

Now is the time for you to start to play with me. In order to do that, you will use R, an open-source number-crunching software more and more widely used in science, available from here: http://www.r-project.org/

You can just copy and paste the following commands or type them, as you wish. Just remember that R is case-sensitive. Plot and plot are not the same.

First we will have R generate fake measurements of the bite force of Magnus magus (the modern fish)

bite<-sort(rnorm(n=100,mean=6))

Here “bite” is an object in the virtual environment, it stores the data. “rnorm(n=100,mean=6)” is the command used to generate the data, it did generate 100 values, according to a “normal” law, with a mean of 6 and a standard deviation of 1 (that last parameter is the default for the function, so there is no need to write it. For more information about functions in R, just type “?” in front of the name of the function e.g. ?rnorm). Also “sort” means that the data has been sorted from the lowest to the highest value. “<-“ represents an arrow basically meaning that the object on the left stores what is on the right. Note that a function is always followed by brackets containing the parameters.

If you want to look at your data, type bite it will give you a list of 100 values. If for any reason you want to generate another set of values, just type the first line of code again. You could try changing the value for the mean or use a different standard deviation. Also, R makes some assumptions when reading the command lines, one is that you provide the parameters of the function in the default order for it. So typing rnorm(n=100,mean=6) or rnorm(100,6) is the same for R.

Now, we will generate a set of values representing a physical measurement, let’s say… the length of the dentary of our extant animals:

dlength<-sort(runif(100,min=2,max=6))

Note that it does follow a uniform distribution from 2 to 6, and is once again randomly generated and sorted.

What does it look like? Let’s see, what we have if we plot bite as a function of dlength, i.e. bite force as a function of dentary length. The function to type would be:

plot(bite~dlength)

 

note that we use “~” between the two arguments of the function, this in R is in fact considered as a single argument of type “formula”. You can get the same graph by précising both x and y as arguments: plot(y=bite,x=dlength) which, because of the order of the default arguments (x first), is different from plot(bite,dlength).

Since the data is randomly generated it is unlikely you have the same results as me, but there is no need to worry about it. It seems like there is some sort of rather good correlation between the two variables. We will use it as a simple linear model, that would be bite force = a*length of the dentary + b. Obviously, R will calculate a and b for us:

model1<-lm(bite~dlength)

And to check your model, just type model1. It will give you the intercept and the slope.

“Yes but excel also tells me if it is a good slope and…” You want more information about your model? Type summary(model1). If you want to add a “regression line” abline(model1).

This is just so primitive, when we can have that trend and a confidence interval containing 99% of the data predicted:

d1<-predict(model1,interval=”prediction”,level=0.99)

Here we asked R to predict, based on model1 a series of values representing the main trend in the data (where you could expect the points to plot if they followed the model perfectly) and also a 99% interval, which represents where 99% of the data actually would be, according to the parameters of the model. It represents the natural uncertainty in the data, i.e. the variability of our Magnus magus. R has even been kind enough to tell us that this is an estimate for the response of the model, not a representation of the observed variability.

You perhaps checked d1, it is just a matrix with 3 columns of 100 numbers. We will see that it is useful nonetheless. Let’s plot our data again, this time using complete circles. We can change the plotting symbols with the argument pch:

plot(bite~dlength,pch=16)

And now we will add the regression line and the representation of the uncertainty of predictions based on the model. We will use the function “matplot”, précising dlength as x and d1 as y. R will “understand” that the three series of numbers of d1 have to be plotted according to the same x values. We will also precise the type of representation of the data, here “l” for line, the line type lty, and the color (col) of the lines. We precise that we want the upper and lower interval lines plotted differently, so we provide a vector of values thanks to the function “c” (for “concatenate”). We also want them in different colors so we indicate it: one time in blue, two times in red (rep is for repeat, here: repeat “red” 2 times). Typing add=TRUE means that we want to add the lines to the current plot.

matplot(x=dlength,y=d1,lty=c(1,2,2),type=”l”,col=c(“blue”,rep(“red”,2)),add=TRUE)

Now we will bring the measurements from the fossils (Niger sabbatum) in the virtual environment:

dfossil<-sort(runif(50,min=6,max=10))

But if we want to make predictions based on such data, we need to comply with the requirements of the predict function: the new data must be a data frame with the same names for columns as the original data. So we will turn dfossil into a data frame with as.data.frame and name the single column of it “dlength” (R interprets anything between the the “” symbols as text).

dfossil<-as.data.frame(dfossil)

colnames(dfossil)<-”dlength”

We can then have the software predict hypothetical bite force values for the fossil, by providing the fossil measurements as new data to be used instead of the old data:

fossil.bite<-predict(model1,newdata=dfossil,interval=”prediction”,level=0.99)

Now, before we plot the results, we should have a look at it. Typing fossil.bite[,1] will give you the predicted values for the fossil bite force ([] when after an object allows you to get a part of the information, if the object has more than one dimension, you have to separate the dimensions with a “,”. Here we want all the values from the single column so [,1] gives us all the values of the column coming first, and since we did not indicate which rows had the interesting information, we get all of them. To get everything but a part of the data, you can use – in front of the number(s)). If you used similar values to mine, it will be way out of the plotting region of the graph we made earlier. So we will use a little trick to make sure we have all our values and estimates being plotted on our next graph. We will concatenate the measures and estimates in two objects and then plot the data between the minimal and maximal values for them, thus ensuring we get everything plotted.

lengths<-c(dlength,dfossil$dlength)

bites<-c(bite,fossil.bite[,1])

And we can now plot our data, just like before, but with the arguments ylim and xlim defining the limits of the plotting region as the minimal and maximal values of our variables or estimates (using the functions min and max). And we will add some text to the axes:

plot(bite~dlength,pch=16,xlim=c(min(lengths),max(lengths)),ylim=c(min(bites),max(bites)),xlab=”Dentary length (m)”,ylab=”Bite force (N)”)

matplot(dlength,d1,lty=c(1,2,2),type=”l”,add=TRUE,col=c(“blue”,rep(“red”,2)))

Let’s add the confidence interval for the predicted fossil’s bite force:

matplot(dfossil,fossil.bite[,-1],lty=rep(2,2),type=”l”,add=TRUE,col=rep(“violet”,2))

And to finish, we simply add the points of the predicted force and measured fossil dimensions:

points(fossil.bite[,1]~dfossil$dlength,pch=16,col=”blue”)

Pretty, isn’t it? Perhaps next time we will see how to even decorate it a bit more like that:

Copresented with Mark Purnell, Martin Rücklin, Philip C. Donoghue, Emily Rayfield, Zerina Johanson, Kate Trinajstic, Federica Marone and Marco Stampanoni

Representatives of the clade Gnathostomata include most modern vertebrates and form a major component of post-Silurian ecosystems. The morphology of their jaws shows a major diversification in the late Silurian and early Devonian followed by stable patterns of functional morphospace occupation. Recent work in modern ecosystems and organisms demonstrates however that morphology and ecology are not always tightly linked. Inferences of predator-prey dynamics in the fossil record could be undermined unless reliable predictors of trophic ecology are developed.

Placoderms were a major component of Devonian aquatic ecosystems. We apply modern microwear and microtexture analysis techniques to their jaws, and assess the power of the methods to answer questions of ecomorphology, ontogenetic shift in diet and predation-driven macroevolution events.

Occlusion in the statodont dentition of placoderms is maintained through wear of the feeding structures. This wear reveals dentine and bone and resets the microwear signature on a regular basis. Until recently, microwear on dentine was thought to be less useful than enamel, but microtextural analysis takes a very different approach and can yield ecological information. Microtextural analysis of dentine and bone along the jaws of placoderms allows us to test hypotheses of trophic diversity among these earliest gnathostomes.

Size matters 2

As I mentioned in the previous post, I will here share some knowledge of dental microwear. As a foreword,  “dens” is the latin for teeth (And please do not take offense if I mention it, I am not assuming that you are dens… eurh… lame enough joke) and dental is derived from it, with the meaning “pertaining to teeth”. It definitely does not sound very english, but is a bit nicer on the tongue and potentially less offensive than “toothic”. As for microwear, it has nothing to do with microwaves, save for most letters. You surely already understood that it is the wear that one can witness at a microscopic scale.

In “Size matters 1″ I mentioned when dental microwear was first used to compare different feeding habits in groups of animals. Walker and colleagues did not make a precise count of the observable scratches, pits, etc… at the surface of teeth, but already the idea of comparing the dimensions (length, width) and density of such features were mentioned, along with the fact that the microwear patterns did vary with seasons and available food, as seen in Procavia johnstoni.

Really, all that was needed then was a standard way to measure, record, compare dental microwear. Several teams got started on it, using images they got from scanning electron microscope or other high-magnification imaging techniques and measuring, first by hand, then on computer screens.

Microwear in several primates

The images can give you an idea of what it looks like. They are from a study by Merceron and colleagues (2005) looking at digitized photographs of dental surfaces in a range of primates in order to get an idea of the diet of a fossil primate (here: Ouranopithecus macedoniensis) and hence get a clue as to where it fits in the food chain of its past ecosytem. Several similar studies are out there applying that same protocol: use a modern analogue and apply it to the fossils.

I think it is worth mentioning that the amount of work prior to a wide application of the techique must have been tantalizing. Grab a mirror, and I recommend you don’t break it, not that I am superstitious, but it can cut pretty badly. Have a look into your mouth and at your teeth. See how complicated that is in reality? You have surely already learnt that there are several types of teeth: incisors, canines, premolars, molars. Look at them closely, keep in mind that we want to look at them at the microscopic scale, and you will see that they are not “that” simple. Molars especially are like a miniature landscape with valleys and mountains. Some people dedicated years taking high-magnification photographs of each and every tooth at all the different angles to look at each and every facet and count, measure (size matters, you see…), compare the microwear features in order to find where the next researchers to come would have to look to find the most accurate information pertaining to the diet of those animals. It knid of reminds you about that story of Thomas Edison finding several hundreds or thousands (depending on which/whose story you read/listen to) of ways to assemble a lightbulb that will not work, and a few (or a single) efficient one. But anyways, as one of my favourite vampires would say, “Where’s the fun without complications?!”.

And complications arise when you think things would get simple. True, the technique is being perfected for mammals, cute furry fluffy animals that do chew and rub teeth one against another, which means they have wear facets on their teeth: flat areas, even at the microscopic scale. And it is possible to take pictures of them fairly easily, provided the microscope is good enough. What it tells us about how and what animals eat and ate is actually impressive, it is possible to know what an animal was eating several million years ago, and if we know what an herbivore was eating, we know what kind of vegetation was around, so we have an idea of the environment and ecosystem, etc… One can use the technique along with others to draw a picture of the entire area as it was a long, long time ago in a galaxy not that far away. Sounds great, so let’s try to apply it to fish, to know how things were in the oceans as well!…

Would have been great if our little scaly friends did not have a few particularities:

  •  Polyphiodonty: Basically it means that they replace their teeth all through their life, not just once like humans.
  • Coniform teeth: Making things funnier: the new teeth are cone-shaped, without wear facets, so it is difficult to have a flat surface to measure the actual dimensions and orientation
  • Lack of or incomplete occlusion: They don’t really rub their teeth one against another, so we will not get a wear facet, no matter how long we give them

Nevertheless, by taking images of the teeth and focusing on the “flattest” observable area, researchers at the university of Leicester (UK) managed to get enough measurable information to discriminate between populations of sticklebacks, a group of fish that have been studied a lot because of their habit of evolving into “pointy” and “non-pointy” morphologies, the first one living at the top of the water column (the pelagic ones) and the later at the bottom (benthic). Simply put, fishes feeding closer to the bottom and the sediment there had a different microwear pattern than the ones feeding way above. Ok, nice, so now what? Being able to say that such group of animals was feeding close to the bottom of a alke for millions of years is interesting but it is not really revolutionnary. To be able to say that in that fish lineage, several times in the last million years populations of one type evolved into populations of the other type, in response to environmental change, is more interesting, but I would like to be able to tell more than that.

The big issue is that teeth from most animals are three-dimensional in shape, no matter how you look at them or at what scale. Wear facets of mammals are the exception. But now is the third millenium after an arbitrarily decided time, and we can study such 3D surfaces at the microscopic scale, surely, can’t we? Once again, trust the mammalogists, especially those working on primates and other Hominidae, to come up with a solution. Dental microwear texture analysis they call it. Looking at how rough or smooth, how directional, heterogeneous, etc… the surface of teeth is at the microscopic scale. Not only does it provide at least as much information as what is now “clasic microwear”, it also makes for nice pictures. Even better, since the data is in fact just a points cloud, a large number of XYZ coordinates, it can theoretically be electronically exported and shared around the world.

Scott et al. 2006

Example of pictures of dental microwear texture, from Scott et al., 2006.

Then came the time to try and apply it to something funnier: fish teeth! This is where the story of my work will start…

Size matters 1

Despite what seems to be an international saying, size matters. Just so much as dimension, scale, quantity and many other ways to use numbers in order to compare two or more things. If size did not matter, there would never have been any Eiffel tower, doppelsoldner or Carolus Magnus (Also known as Charlemagne, Charles the great, Karl der Grosse, so on so forth). I may not continue on the habit of humans to build bigger things, strike harder or possess more.
What does that “size matters” have to do with my work? As a matter of fact, it has to do with most of the scientific sphere, as many (most) among us come to conclusions thanks to measurements. Whether we try to measure the size of an expanding universe, the quantity of water to brew a great lager or the proportion of crushed food in the diet of a fish, we do it with measurements and we compare it with other (dis)similar measurements.

Now we get to an interesting point: comparing. Size matters, because we compare. That habit may be quite atavistic in nature, as I am keen to trust that our early ancestors did it regularly. Who would blame a nice, lovely, furry Morganucodon (let’s say it is a male, particularly furry, and ginger as well) to estimate the size of one of his comrades before trying to chase him out of his territory or operating a clever but efficiently hurried tactical retreat ? In a similar way, australopithecines who did throw rocks at saber-toothed tigers (such as Dinofelis that you might have seen on “walking with beasts”)surely had more success (and ensuing chances to reproduce) than those throwing harmless pebbles or trying to throw boulders they could barely lift off the ground.

Hence when the wise and civilised Homo sapiens comes to witness a feat in an animal which it can itself not expect to perform with such ease, it tries to understand it through comparison of measurements (this sentence is intended to keep away the knights of “ni”). The surprising efficiency of an atlantic wolffish (Anarhichas lupus) when crushing a crab can be explained by the proportionately heavier teeth in its jaw and stronger, bigger cheek muscles. If you cannot be bothered to go browse the web for a comparison, I would say that their dentition is to ours what an hydraulic press is to a kid’s plastic hammer (which produces an interesting noise once used, not that different from the wild sounds of the miniature giraffe) and their cheek muscles are like Conan to our inner Gandhi (for most of us).

Thus is wisdom registered: that big broad, heavy teeth can be used to crush hard food, and being cheeky can help as well. And the wisdom passes on by word of mouth, through scriptures or other more esoteric or technical means. We humans (I am here assuming that only mere humans will read this. If I stand corrected, please accept my apologies as I was unaware of the existence of any other reading-able entity at the time of writing) record a lot of things and call it culture. The thing with culture is that it provides another reference level with which to compare new discoveries. Here again size matters e.g.: “My fish is a bigger crusher than yours, it could crush a car!” Why would any fish want to crush a car remains up to speculation, but I suppose that if your groceries and yourself are inside it, a comparison with a tin can is in order.

Gyrodus cuvieri

Vomer (the "palate") of Gyrodus cuvieri

Finally, the main question: Is anatomy a reliable proxy to infer ecology in fossil organisms? Back to big, heavy, ”crushing” teeth in our cheeky fish. If one were to ever find fossils displaying such a molariform dentition, it is easy to jump to conclusions: Such animals were shell-crushers because they clearly were equipped for it. One example: Pycnodontiformes. The pycnodontiformes are a monophyletic group of morphologically distinctive neopterygian fishes (Kriwet & Schmitz, 2005) with such teeth (see pictures).

Eomesodon granulatus

Pre-articular of Eomesodon granulatus

It all sounds pretty logical until you actually look at more of the animals living around us, the most characteristic one might be the dog. Dogs have teeth adapted for hunting and eating other animals, the wondruous result of millions of years of evolution, inherited from wolves or other canidae, the whole story still being debated. Auuming that dogs are descended from wolves, they have been twisted afterwards by human selection, as viciously as the flesh of a Tremere at the hands of a Tzimisce, into a variety of shapes not really that of hunters, but they retained most of their meat-processing teeth and we feed them… a variety of strange things such as biscuits or even so-called “vegetarian dog food”. Far from the wild hare.
Farther from us, wild animals with an apparently specialised morphology often behave as generalists. This is called Liem’s paradox, but requires surely a complete separate post with examples. I will just say that in Florida, populations of the sheepshead seabream (Archosargus probatocephalus) are known to be anatomically identical and yet have significantly different feeding habits, grazing on algae on one side and crushing shelled invertebrates on the other. Guess what kind of teeth they have?

Jaws of Archosargus probatocephalus

Jaws from two different Archosargus probatocephalus. I swear they eat different stuff!

Exactly! They have such big teeth that make for a wonderful nutcracker, though Hoffmann, Dumas and Tchaikovsky unlikely ever considered any mention of it in their respective adaptations of the story (anybody keen to hear more of it can always listen to the suite arranged for organ here). But onto the main matter at fin (or lepidotrichia to be anato-geographically consistent): Liem’s paradox unparadoxically is seriously bugging our interpretation of the ecology of fossil organisms. Henceforth, anybody looking at trends in the fossil record in the hope of finding correlations between predators and prey (one of the most common type of macro-ecological study) should make an intensive use of “perhaps”, “may”, “could”, “supposedly” or start looking for another way to track predator-prey relationships, perhaps in another dimension.

I swore to myself I would not get started on the M or string theory, I will therefore stop this digression now and explain myself: Size matters, but dimension and scale do too and are closely associated with it. Simply looking with the naked eye may not provide much information about the diet of two apparently identical fishes whereas considering the result of processing different foods could be revealing much more. It is such an idea (though not linked in anyways to the ecology of fossil fish or Liem’s paradox) that led to the first studies linking dental microwear and diet. The study by Alan Walker, Hendrick H. Noeck and Linda Perez published in 1978 in Science was an early drop falling into an otherwise placid lake. The ripples of this study would later turn into major waves as they gained momentum, but looking at the published works in the late 70′s, early 80′s, their work must have been looked at as an interesting curiosity, little else. Their study on two sympatric (living in the same place) species of Hyrax showed that the grazers and browsers could be distinguished by their microwear. More about it on the magazine’s website.

Dental microwear is regarded as one of the most efficient tools to infer diets in fossil toothed organisms. This term encompasses all the minute scratches, pits, gouges, and other damage at a microscopic scale that do get recorded at the surface of teeth. Imagine yourself chewing leaves with some grit or dust on it: the surface of your teeth will get covered in scratches as you rub the lower and upper teeth one against another, one part of such wear because of the grit, the other one because of tooth-tooth contact. If on the other hand you were to repeatedly crush nuts, or fruits with tiny but very hard seeds, rather than rubbing your teeth against each other, you will bring them in contact to crush, and the most resilient part of the food will impact their surface quite literally, as pits will be produced.
We have here unlocked the access to another dimension of knowledge. Indeed, we need to look at teeth at a different scale at the risk of spreading myopia through the academic world, and we make our measurements in not so quite big a dimension as to show off with the “bigger, meaner, tougher than yours” stuff. Yet size matters, just so much as dimension, and scale, which we have dealt with, the size and quantity of scratches, gouges, pits, their length, width, depth, orientation, all of it, we can measure and compare.

Enter the world of dental microwear analysis, which will be the topic of “Size matters 2″

If you are interested:

  • The study comparing populations of Archosargus probatocephalus

Cutwa, M.M. & Turingan, R.G., 2000. Intralocality Variation in Feeding Biomechanics and Prey Use in Archosargus probatocephalus (Teleostei, Sparidae), with Implications for the Ecomorphology of Fishes. Environmental Biology of Fishes, 59(2). http://dx.doi.org/10.1023/A:1007679428331

  • The works by Walker, Noeck and Perez
Walker, A., Hoeck, H.N., & Perez, L., 1978. Microwear of mammalian teeth as an indicator of diet. Science, 201(4359). http://www.sciencemag.org/content/201/4359/908
  • The paper by Kriwet and Schmitz

Kriwet, J. & Schmitz, L., 2005. New insight into the distribution and palaeobiology of the pycnodont fish GyrodusActa Palaeontologica Polonica 50(1). http://www.app.pan.pl/article/item/app50-049.html

Where did it start?

I will here tell how I started being interested in dental microwear in fish, not how this field of study came to be.
I suppose you could say it all started back in 2007. I was at the time a trainee, as part of my masters course, in the Department of Geology at the University of Lille1, under supervision by Prof. Alain Blieck. My project was simple and rich of opportunities: prepare, describe, illustrate fossils found and donated to the department by Mr Christian Loones a local amateur palaeontologist.

BrachiopodsThe samples were coming from the Boulonnais area, from the quarries around Ferques, more precisely. If you are searching for fossils, though, I’d advise to go there only with the authorisation of the companies working the quarries, as this can be very dangerous. The place is particularly good if you are looking for crinoids or brachiopods.

Years of collecting had as a result an accumulation of odd bits and pieces of rock in the rock store of the geology building. And I started taking them out, extracting fossils from the limestone, mostly by plunging them into acid. The rocks were of Devonian age, mostly Givetian, but also Frasnian, and I found there plates of placoderms, teeth and scales of actinopterygians and one weird thing…

toothplate of Melanodus loonesi

It had one smooth and punctured side, the opposite one broken, revealing a bony-like structure. It was black, as most fossils of vertebrates in the palaeozoic limestone of the Boulonnais are, and was like nothing else one could have expected to find there. After discussing the matter with my supervisors (A. Blieck and C. Derycke) and reviewing litterature, one was forced to admit that we had the oldest known toothplate from an Holocephalan. Holocephalans, you may better know as ratfishes, are medium-sized chondrichthyans (cartilaginous fishes) with very broad toothplates, the result of the fusion of several teeth from a toothwhorl. They can be pretty ugly, but some are fairly nice-looking animals with the right light and orientation. Usually, fossil chondrichthyans from the Givetian look more like the Orodontid tooth here. So to to find a massive toothplate like that was shocking.

Orodontida indet.

Orodontida indet.

We described and named it, after checking that it was really from the strata the labels mentioned, something like two dozen times, with thin sections of what was left of the matrix it was found into, etc… Its name is Melanodus loonesi, meaning “the black tooth found by Mr Loones”: simple and efficient.

microwear(?) on Melanodus loonesi

Yet the best was still to come. For as I looked at it under the SEM (scanning electron microscope), minute scratches at the surface were easily spotted, all over the surface. As I had already read about dental microwear in mammals, I just thought (in french then): “Waow, this may actually help us tell what that animal was eating 380 million years ago!”

Far was I to suspect where this would lead me. At that time dental microwear in fish had only been studied by one group: a team of palaeontologists and biologists from Leicester, whose papers were published in the Journal of Animal Ecology and Science.
 
And a couple of years later, I was actually part of that team, working on a project that may or may not work, may or may not be applicable to the fossils, but was looking very promising.
 
I suppose that you have now had enough of my nostalgia and not enough of science. Next time I may explain a bit about what microwear is, how it can be studied.
 
To conclude, I’d like to say that the two pictures of Melanodus loonesi are coming from this paper.

PalAss annual meeting 2010, Ghent, December 2010

Co-presented with Purnell, Mark A. & Turingan, Ralph G.

See it on the Vlog

Palaeontological analyses of function are commonly underpinned by the assumption that an organism’s ecology and anatomy are closely correlated. However, analysis of extant animals reveals that morphologically specialised species often behave as generalists, especially with regard to feeding. Specialist trophic modes are adopted only during times of critical resource scarcity. This is known as Liem’s paradox. Sheepshead seabream (Archosargus probatocephalus) provide an example of this decoupled form and function: teeth and jaws are morphologically specialised for shell crushing, but populations vary greatly in the proportion of hard prey consumed, conditioned by local availability, yet display no clear morphological differences. We have investigated dietary preferences of sheepshead through quantitative microtextural analysis of high-resolution
three-dimensional data from their molariform teeth (which lack wear facets and distinct microwear features). ISO standard roughness parameters reveal differences in microwear linked to the degree of durophagy.
Applying the same methods to fossil pycnodont fishes indicates that their teeth were not used exclusively for shell-crushing, falsifying hypotheses that they were specialist shell-crushers. This supports the view that pycnodonts were ecologically diversified and adaptable, and confirms that Liem’s paradox must be considered in palaeontological analyses of function.

70th anniversary meeting of the Society of Vertebrate Paleontology (Pittsburgh), Society of Vertebrate Palaeontology, 13th October 2010

Co-presented with Purnell, Mark A. (University of Leicester, Geology), Hart, Paul J. B. (University of Leicester, Biology) and Turingan, Ralph G.(Florida institute of Technology, Biological sciences)

Recent work has shown that modern populations of fishes can differ significantly in their diet yet remain anatomically similar, raising concerns about the assumptions and reliability of functional morphology as a method for investigating diet in fossil fishes. Semi-automated quantification of tooth microwear can offer a solution, but in many cases, teeth are damaged to the point where individual microwear features (pits and scratches) cannot be recognized.
Here we use a new technique based on microtextural analysis of high-resolution three-dimensional data acquired with a focus variation microscope (Alicona IFM).
Data were collected from: molariform teeth of two populations of Archosargus probatocephalus (Teleostei, Sparidae) which differ in the degree to which they are durophagous; from Atlantic wolffish (Anarhichas lupus, Teleostei, Anarhichadidae) a specialised shell-crusher; and from pharyngeal teeth of populations of Astatoreochromis alluaudi (Teleostei, Cichlidae) with known diets. We then compared the results of microtextural analysis with data collected from teeth from the extinct pycnodontid fishes Gyrodus and Eomesodon, both assumed on the basis of tooth morphology to be specialised shell-crushers. This reveals that Gyrodus is unlikely to have been a specialised shell-crusher, and confirms that microtextural analysis provides a powerful test of hypotheses of diet in fossil organisms.

International Palaeontology Conference 3 (IPC3), 29th June 2010

Co-presented with Purnell, Mark A. (University of Leicester, Geology), Hart, Paul J. B. (University of Leicester, Biology) and Turingan, Ralph G.(Florida institute of Technology, Biological sciences)

Hypotheses of diet and feeding in fossil fishes rely heavily on anatomical comparison and mechanical modelling. However, recent evidence indicates that in some fishes, species level dietary specializations in feeding structures correlate poorly with diet, and that diet can differ between morphologically similar populations within a species. These observations undermine the assumptions of the functional morphology approach. Here we adopt an engineering approach to quantification of tooth microwear based on microtextural analysis of high-resolution three-dimensional data. Data were acquired with a focus variation microscope (Alicona IFM) and tooth surface roughness was quantified through several industry standard amplitude, volume and texture parameters. These data allow statistical comparison of textures developed on molariform teeth of extant herbivorous, durophagous and specialised shell-crushing populations of fishes (Archosargus probatocephalus and Anarhichas lupus, Teleostei), and comparison with teeth from fossil and modern fishes. Analysis of extant taxa reveals that dental microtextures reflect differences in diet both within and between-species. Results were validated through blind testing of data from pharyngeal jaw teeth of cichlids (Astatoreochromis alluaudi) with known diets. Application of microtextural analysis to molariform teeth from fossil pycnodontid fishes, assumed to be specialised shell-crushers, shows that previous dietary hypotheses, based primarily on functional morphology, are incorrect. Microtextural analysis therefore offer a new and powerful tool to test hypotheses of the diet in both extant and fossil organisms.

Follow

Get every new post delivered to your Inbox.