Better posters are nice, but we need better poster session experiences

Fear and loathing in the conference centre lobby

Let me start from a negative place, because my attitude to poster sessions is negative. Poster sessions are neither good ways to communicate science, nor to network at conferences. Moreover, they are unpleasant.

The experience of going to a poster session, as an attendant or a presenter goes something like this: You have to stand in a crowded room that is too loud and try to either read technical language or hold a conversation in about a difficult topic. Even without anxiety, mobility, or hearing difficulties, a poster session is unlikely to be enjoyable or efficient.

Poster sessions are bad because of necessities of conference organisation. We want to invite many people, but we can’t fit in many talks; we get crowded poster sessions.

They are made worse by efforts to make them better, such as mandating presenters to stand by their posters, in some cases on pain of some sanction by the organisers, or to have the poster presenters act as dispensers of alcohol. If you need to threaten or drug people to participate in an activity, that might be a sign.

They are made not worse but a bit silly, by assertions that poster sessions are of utmost importance for conferencing. Merely stating that the poster session is vibrant and inspiring, or that you want to emphasise the poster as an important form of communication, sadly, does not make it so, if the poster sessions are still business as usual.

Mike Morrison’s ”Better Scientific Poster” design

As you can see above, my diagnosis of the poster session problem is part that you’re forced to read walls of text or listen to mini-lectures, and part that it happens in an overcrowded space. The walls of text and mini-lecture might be improved by poster design.

Enter the Better Scientific Poster. I suggest clicking on that link and looking at the poster templates directly. I waited too long to look at the actual template files, because I expected a bunch of confusing designer stuff. It’s not. They contain their own documentation and examples.

There is also a video on YouTube expanding on the thinking behind the design, but I think this conversation on the Everyting Hertz podcast is the best introduction, if you need an introduction beyond the template. The YouTube video doesn’t go into enough detail, and is also a bit outdated. The poster template has gone through improvements since.

If you want to hear the criticisms of the design, here’s a blog post summarising some of it. In short, it is unscientific and intellectually arrogant to put a take home message in too large a font, and it would be boring if all posters used the same template. Okay.

The caveats

I am not a designer, which should be abundantly clear to everyone. I don’t really know what good graphic design principles for a poster are.

There is also no way to satisfy everyone. Some people will think you’ve put too little on the poster unless it ”tells the full story” and a has self-contained description of the methods with all caveats. Some people, like me, will think you’ve put way too much on it long before that.

What I like, however, is that Morrison’s design is based on an analysis of the poster session experience that aligns with mine, and that it is based on a goal for the poster that makes sense. The features of the design flow from that goal. If you listen to the video or the Hertz episode: Morrison has thought about the purpose of the poster.

He’s not just expressing some wisdom his PhD supervisor told him in stern voice, or what his gut feeling tells him, which I suspect is the two sources that scientists’ advice on communication is usually based on. We all think that poster sessions are bad, because we’ve been to poster sessions. We usually don’t have thought-through ideas about what to do better.

Back to a place of negativity

For those reasons, I think the better poster is likely to be an improvement. I was surprised that I didn’t see it sweep through poster sessions at the conferences I went to last summer, but there were a few. I was going to try it for TAGGC 2020 (here is my poster aboutthe genetics of recombination rate in the pig), but that moved online, which made poster presentations a little different.

However, changing up poster layout can only get you so far. Unless someone has a stroke of genius to improve the poster viewing experience or change the economics of poster attendance, there no bright future for the poster session. Individually, the rational course of action isn’t to fiddle with the design and spend time to squeeze marginal improvements out of our posters. It is to spend as little time as possible on posters, ignoring our colleagues’ helpful advice on how to make them prettier and more scientific, and lowering our expectations.

Robertson on genetic correlation and loss of variation

It’s not too uncommon to see animal breeding papers citing a paper by Alan Robertson (1959) to support a genetic correlation of 0.8 as a cut-off point for what is a meaningful difference. What is that based on?

The paper is called ”The sampling variance of the genetic correlation coefficient” and, as the name suggests, it is about methods for estimating genetic correlations. It contains a section about the genetic correlation between environments as a way to measure gene-by-environment interaction. There, Robertson discusses experimental designs for detecting gene-by-environment interaction–that is, estimating whether a genetic correlation between different environments is less than one. He finds that you need much larger samples than for estimating heritabilities. It is in this context that the 0.8 number comes up. Here is the whole paragraph:

No interaction means a genetic correlation of unity. How much must the correlation fall before it has biological or agricultural importance? I would suggest that this figure is around 0.8 and that no experiment on genotype-environment interaction would have been worth doing unless it could have detected, as a significant deviation from unity, a genetic correlation of 0.6. In the first instance, I propose to argue from the standpoint of a standard error of 0.2 as an absolute minimum.

That is, in the context of trying to make study design recommendations for detecting genotype-by-environment interactions, Robertson suggests that a genetic correlation of 0.8 might be a meaningful difference from 1. The paper does not deal with designing breeding programs for multiple environments or the definition of traits, and it has no data on any of that. It seems to be a little bit like Fisher’s p < 0.05: Suggest a rule of thumb, and risk it having a life of its own in the future.

In the process of looking up this quote, I also found this little gem, from ”The effect of selection on the estimation of genetic parameters” (Robertson 1977). It talks about the problems that arise with estimating genetic parameters in populations under selection, when many quantitative genetic results, in one way or another, depend on random mating. Here is how it ends:

This perhaps points the moral of this paper. The individuals of one generation are the parents of the next — if they are accurately evaluated and selected in the first generation, the variation between families will be reduced in the next. You cannot have your cake and eat it.

Literature

Robertson, A. ”The sampling variance of the genetic correlation coefficient.” Biometrics 15.3 (1959): 469-485.

Robertson, A. ”The effect of selection on the estimation of genetic parameters.” Zeitschrift für Tierzüchtung und Züchtungsbiologie 94.1‐4 (1977): 131-135.

Using R: setting a colour scheme in ggplot2

Note to self: How to quickly set a colour scheme in ggplot2.

Imagine we have a series of plots that all need a uniform colour scale. The same category needs to have the same colour in all graphics, made possibly with different packages and by different people. Instead of hard-coding the colours and the order of categories, we can put them in a file, like so:

library(readr)
colours <- read_csv("scale_colours.csv")
# A tibble: 5 x 2
  name   colour 
      
1 blue   #d4b9da
2 red    #c994c7
3 purple #df65b0
4 green  #dd1c77
5 orange #980043

Now a plot with default colours, using some made-up data:

x <- 1:100

beta <- rnorm(5, 1, 0.5)

stroop <- data.frame(x,
                     sapply(beta, function(b) x * b + rnorm(100, 1, 10)))
colnames(stroop)[2:6] <- c("orange", "blue", "red", "purple", "green") 

data_long <- pivot_longer(stroop, -x)

plot_y <- qplot(x = x,
                y = value,
                colour = name,
                data = data_long) +
  theme_minimal() +
  theme(panel.grid = element_blank())

Now we can add the custom scale like this:

plot_y_colours <- plot_y + 
  scale_colour_manual(limits = colours$name,
                      values = colours$colour)


Virtual animal breeding journal club: ”An eQTL in the cystathionine beta synthase gene is linked to osteoporosis in laying hens”

The other day the International Virtual Animal Breeding Journal Club, organised by John Cole, had its second meeting. I presented a recent paper about using genetic mapping and gene expression to find a putative causative gene for a region associated with bone strength in layer chickens. This from colleauges I know and work with, but I wasn’t involved in this work myself.

Here is the paper:

De Koning, Dirk-Jan, et al. ”An eQTL in the cystathionine beta synthase gene is linked to osteoporosis in laying hens.” Genetics Selection Evolution 52.1 (2020): 1-17.

Here are my slides:

Ian Dunn and DJ de Koning were both on the call to answer some questions and give the authors’ perspective, which, again, I thought was very useful. I hope this becomes a recurring theme of the journal club.

I chose the paper because I think it’s a good example of the QTL–eQTL paradigm of causative gene identification. We got some discussion about that. Conclusions: You never really know whether an association with gene expression is causal or reactive, unless there’s some kind of experimental manipulation. We all want more annotation, more functional genomics and more genome sequences. I can’t argue with that.

Here is the a review of layer chicken bone biology referred to in the slides, if you want to look into that:

Whitehead, C. C. ”Overview of bone biology in the egg-laying hen.” Poultry science 83.2 (2004): 193-199.

If you want to follow the journal club, see the Google group and Twitter account for announcements.

Virtual animal breeding journal club: ”Structural equation models to disentangle the biological relationship between microbiota and complex traits …”

The other day was the first Virtual breeding and genetics journal club organised by John Cole. This was the first online journal club I’ve attended (shocking, given how many video calls I’ve been on for other sciencey reasons), so I thought I’d write a little about it: both the format and the paper. You can look the slide deck from the journal club here (pptx file).

The medium

We used Zoom, and that seemed to work, as I’m sure anything else would, if everyone just mute their microphone when they aren’t speaking. As John said, the key feature of Zoom seems to be the ability for the host to mute everyone else. During the call, I think we were at most 29 or so people, but only a handful spoke. It will probably get more intense with the turn taking if more people want to speak.

The format

John started the journal club with a code of conduct, which I expect helped to set what I felt was a good atmosphere. In most journal clubs I’ve been in, I feel like the atmosphere has been pretty good, but I think we’ve all heard stories about hyper-critical and hostile journal clubs, and that doesn’t sound particularly fun or useful. On that note, one of the authors, Oscar González-Recio, was on the call and answered some questions.

The paper

Saborío‐Montero, Alejandro, et al. ”Structural equation models to disentangle the biological relationship between microbiota and complex traits: Methane production in dairy cattle as a case of study.” Journal of Animal Breeding and Genetics 137.1 (2020): 36-48.

The authors measured methane emissions (by analysing breath with with an infrared gas monitor) and abundance of different microbes in the rumen (with Nanopore sequencing) from dairy cows. They genotyped the animals for relatedness.

They analysed the genetic relationship between breath methane and abundance of each taxon of microbe, individually, with either:

  • a bivariate animal model;
  • a structural equations model that allows for a causal effect of abundance on methane, capturing the assumption that the abundance of a taxon can affect the methane emission, but not the other way around.

They used them to estimate heritabilities of abundances and genetic correlations between methane and abundances, and in the case of the structural model: conditional on the assumed causal model, the effect of that taxon’s abundance on methane.

My thoughts

It’s cool how there’s a literature building up on genetic influences on the microbiome, with some consistency across studies. These intense high-tech studies on relatively few cattle might build up to finding new traits and proxies that can go into larger scale phenotyping for breeding.

As the title suggests, the paper advocates for using the structural equations model: ”Genetic correlation estimates revealed differences according to the usage of non‐recursive and recursive models, with a more biologically supported result for the recursive model estimation.” (Conclusions)

While I agree that a priori, it makes sense to assume a structural equations model with a causal structure, I don’t think the results provide much evidence that it’s better. The estimates of heritabilities and genetic correlations from the two models are near indistinguishable. Here is the key figure 4, comparing genetic correlation estimates:

saborio-montero-fig4

As you can see, there are a couple of examples of genetic correlations where the point estimate switches sign, and one of them (Succinivibrio sp.) where the credible intervals don’t overlap. ”Recursive” is the structural equations model. The error bars are 95% credible intervals. This is not strong evidence of anything; the authors are responsible about it and don’t go into interpreting this difference. But let us speculate! They write:

All genera in this case, excepting Succinivibrio sp. from the Proteobacteria phylum, resulted in overlapped genetic cor- relations between the non‐recursive bivariate model and the recursive model. However, high differences were observed. Succinivibrio sp. showed the largest disagreement changing from positively correlated (0.08) in the non‐recursive bivariate model to negatively correlated (−0.20) in the recursive model.

Succinivibrio are also the taxon with the estimated largest inhibitory effect on methane (from the structural equations model).

While some taxa, such as ciliate protozoa or Methanobrevibacter sp., increased the CH4 emissions …, others such as Succinivibrio sp. from Proteobacteria phylum decreased it

Looking at the paper that first described these bacteria (Bryan & Small 1955),  Succinivibrio were originally isolated from the cattle rumen, and their name is because ”they ferment glucose with the production of a large amount of succinic acid”. Bryant & Small made a fermentation experiment to see what came out, and it seems that the bacteria don’t produce methane:

succ_table2

This is also in line with a rRNA sequencing study of high and low methane emitting cows (Wallace & al 2015) that found lower Succinivibrio abundance in high methane emitters.

We may speculate that Succinivibrio species could be involved in diverting energy from methanogens, and thus reducing methane emissions. If that is true, then the structural equations model estimate (larger genetic negative correlation between Succinivibrio abundance and methane) might be better than one from the animal model.

Finally, while I’m on board with the a priori argument for using a structural equations model, as with other applications of causal modelling (gene networks, Mendelian randomisation etc), it might be dangerous to consider only parts of the system independently, where the microbes are likely to have causal effects on each other.

Literature

Saborío‐Montero, Alejandro, et al. ”Structural equation models to disentangle the biological relationship between microbiota and complex traits: Methane production in dairy cattle as a case of study.” Journal of Animal Breeding and Genetics 137.1 (2020): 36-48.

Wallace, R. John, et al. ”The rumen microbial metagenome associated with high methane production in cattle.” BMC genomics 16.1 (2015): 839.

Bryant, Marvin P., and Nola Small. ”Characteristics of two new genera of anaerobic curved rods isolated from the rumen of cattle.” Journal of bacteriology 72.1 (1956): 22.

Preprint: ”Genetics of recombination rate variation in the pig”

We have a new preprint posted, showing that recombination rate in the pig is lowly heritable and associated with alleles at RNF212.

We developed a new method to estimate recombinations in 150,000 pigs, and used that to estimate heritability and perform genome-wide association studies in 23,000.

Here is the preprint:

Johnsson M*, Whalen A*, Ros-Freixedes R, Gorjanc G, Chen C-Y, Herring WO, de Koning D-J, Hickey JM. (2020) Genetics of recombination rate variation in the pig. BioRxiv preprint. https://doi.org/10.1101/2020.03.17.995969 (* equal contribution)

Here is the abstract:

Background In this paper, we estimated recombination rate variation within the genome and between individuals in the pig for 150,000 pigs across nine genotyped pedigrees. We used this to estimate the heritability of recombination and perform a genome-wide association study of recombination in the pig.

Results Our results confirmed known features of the pig recombination landscape, including differences in chromosome length, and marked sex differences. The recombination landscape was repeatable between lines, but at the same time, the lines also showed differences in average genome-wide recombination rate. The heritability of genome-wide recombination was low but non-zero (on average 0.07 for females and 0.05 for males). We found three genomic regions associated with recombination rate, one of them harbouring the RNF212 gene, previously associated with recombination rate in several other species.

Conclusion Our results from the pig agree with the picture of recombination rate variation in vertebrates, with low but nonzero heritability, and a major locus that is homologous to one detected in several other species. This work also highlights the utility of using large-scale livestock data to understand biological processes.

Using R: simple Gantt chart with ggplot2

Jeremy Yoder’s code for a simple Gantt chart on the Molecular Ecologist blog uses geom_line and gather to prepare the data structure. I like using geom_linerange and a coord_flip, which lets you use start and end columns directly without pivoting.

Here is a very serious data frame of activities:

# A tibble: 6 x 4
  activity       category        start               end                
                                                  
1 Clean house    preparations    2020-07-01 00:00:00 2020-07-03 00:00:00
2 Pack bags      preparations    2020-07-05 10:00:00 2020-07-05 17:00:00
3 Run to train   travel          2020-07-05 17:00:00 2020-07-05 17:15:00
4 Sleep on train travel          2020-07-05 17:15:00 2020-07-06 08:00:00
5 Procrastinate  procrastination 2020-07-01 00:00:00 2020-07-05 00:00:00
6 Sleep          vacation        2020-07-06 08:00:00 2020-07-09 00:00:00

And here is the code:


library(ggplot2)
library(readr)

activities <- read_csv("activities.csv")

## Set factor level to order the activities on the plot
activities$activity <- factor(activities$activity,
                              levels = activities$activity[nrow(activities):1])
    
plot_gantt <- qplot(ymin = start,
                    ymax = end,
                    x = activity,
                    colour = category,
                    geom = "linerange",
                    data = activities,
                    size = I(5)) +
    scale_colour_manual(values = c("black", "grey", "purple", "yellow")) +
    coord_flip() +
    theme_bw() +
    theme(panel.grid = element_blank()) +
    xlab("") +
    ylab("") +
    ggtitle("Vacation planning")