Experiment overview

The aim of this experiment is to determine the effect of Syk inhibition or Mincle KO on the response to time arrested spores.

Mincle Signalling R406 inhibits Syk and therefore Card9 mediated Dectin-1/2/Mincle signalling

Methods

Flow notes

Staining and culture quality control

  • FSC/SSC plot
  • Example gating strategy
  • Cell numbers
  • Percent cell death (although may be tricky due to spore/cell FSC/SSC separation)
  • Recompensated in flowjo with Autospill.

Analysis of gMFI

Begin by importing the gMFI table exported from flowjo.

#Import the dataset
df <- read_csv("C:/Users/gv272/University of Exeter/Cook, Peter - Projects/E01 Immune cells/E01 D and A/E01_021/George analysis/E01_021 gMFI.csv")

Set up the dataframe so it can easily be analysed.

The first line of code turns the data from a wide format, where gMFI values for 1 sample are found on the same row, to a long format, where there is only 1 gMFI value per row with an extra column stating the corresponding marker.

The Marker and Condition columns are then converted to factors and the order of the levels specified. This is useful as the graphs will then display the levels in this order.

Finally, the Mouse column is originally stored as a numeric value. Converting to a factor will allow us to plot the values from different mice as shapes.

dfw <- df %>%
  pivot_longer(cols=c(2:5), names_to="Marker", values_to="gMFI")

dfw$Marker <- factor(dfw$Marker, levels = c("CD40", "CD86", 
                                            "PDL2", "MHCII"))

dfw$Condition <- factor(dfw$Condition, levels=c("Media", "0h", "4h-", "4h+", 
                                                "DZym", "Zym", "LPS"))

dfw$Mouse <- as.factor(dfw$Mouse)

Filter the FMOs, only include DMSO or Syk and remove mouse 4 (low number of cells)

dfw_syk <- dfw %>%
  filter(FMO=="N") %>%
  filter(Group=="DMSO" | Group=="Syk") %>%
  filter(Mouse != 4)

We are now ready to plot! There is quite a lot going on here, however, the basics aren’t too difficult. This is uing the ggplot package.

ggplot(dfw_syk, 
       aes(x=Condition, 
           y= gMFI/1000)) +
  ggbeeswarm::geom_beeswarm(aes(group=Group, 
                                colour=Group, 
                                shape=Mouse), 
                            dodge.width = 0.8, 
                            size=1.5, 
                            show.legend = T) +
  stat_summary(aes(group=Group, 
                   color=Group),
               geom="bar",
               fun = mean,
               position = position_dodge2(preserve = 'single', width=0.8),
               fill="NA",
               size = 1, width = 0.8,
               show.legend = T) +
  ylab(expression(paste("gMFI x ", 10^3))) +
  scale_y_continuous(expand=c(0,0)) +
  facet_wrap(vars(Marker), nrow=1, scales = "free_y") +
  theme_prism(base_line_size=0.2)  +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +
  theme(legend.position = "bottom",
        text=element_text(face="plain"), 
        strip.text = element_text(face="bold"),
        axis.title.x=element_blank())

Let’s break down the code now:

  • ggplot(…) initialises a plot
  • dfw tells ggplot to use the dataframe from above
  • aes(x=Condition, y=gMFI/1000) tells ggplot to use the columns from dfw Condition as the x variable and gMFI/1000 as the y variable
  • ggbeeswarm is like a scatter plot (geom_point) but instead “dodges” values that are next to each other and more visible.
  • The aes command with group and colour set to “Group” column means that bars will be grouped together for either DMSO or Syk and will be coloured differently
    • shape=Mouse means each mouse will have a different symbol. This will allow us to see if there are trends for each mouse.
    • dodge.width sets how far the DMSO and syk points will be. This needs to match the below for stat_summary.
    • size=1.5 sets the thickness of points
  • stat_summary allows a bar chart to be displayed with a mean calculated.
    • aes for Group/Colour as above
    • geom=“bar” means it will create a bar chart
    • position = position_dodge2(…) separates out the DMSO and Syk columns so they are “dodged”.
    • fill=“NA” sets the columns to be unfilled.
    • size = 1 set thickness of the column borders
  • ylab(…) sets the title of the y axis. Note use of expression and paste to allow 10^3 to be superscript
  • scale_y_continuous(expand=c(0,0)) means there is no space between the bars and the x axis.
  • facet_wrap(vars(Marker), nrow=1, scales=“free_y”). This is a very important line of code. Facet wrap creates multiple plots - as the faceted variable is Marker, a plot is created for each marker - CD40, CD86, PDL2 and MHCII - and they are placed next to each other.
  • Theme:
    • theme_prism give a prism like look but the base line size is decrease to 0.2
    • axis.text.x sets the angle and position of the x labels.
    • legend.position sets the legend to on the bottom
    • text=element_text(face=“plain”) sets the text to be plain rather than bold
    • strip.text refers to the Markers - CD40, CD86 etc. These are set to bold.
    • axis.title.x = element_blank() removes the X title (which would be condition)

Thinking about plotting

One consideration is the Media/Spore stages have a much lower gMFI than Zym/DZym/LPS. We could generate two separate plots which would more clearly show the difference between 4h- spores and 4h+ spores.

First, let’s subset the dataframe into spore/strong stimuli conditions:

Spores <- c("Media", "0h", "4h-", "4h+")
Stimuli <- c("Media", "DZym", "Zym", "LPS")

dfw_spores <- dfw_syk[dfw_syk$Condition %in% Spores ,]
dfw_stim <- dfw_syk[dfw_syk$Condition %in% Stimuli ,]

Now we can plot these separately:

Inhibition of Syk decreases the response to all spore stages with CD40 and CD86 compared with DMSO treatment. Media+Syk does not activate DCs (unlike what Dan saw). CD40 is decreased with DZym under syk inhibition, but Zym and LPS do not affect. For CD86, DZym is strongly inhibited by Syk but it also decreases expression in response to Zym and LPS.

Mincle Knockdown

Now let’s select the data for the Mincle experiment.

dfw_mincle <- dfw %>%
  filter(FMO=="N") %>%
  filter(Group=="DMSO" | Group=="Mincle") %>%
  filter(Mouse != 4)

First, let’s subset the dataframe into spore/strong stimuli conditions:

Spores <- c("Media", "0h", "4h-", "4h+")
Stimuli <- c("Media", "DZym", "Zym", "LPS")

dfw_mincle_spores <- dfw_mincle[dfw_mincle$Condition %in% Spores ,]
dfw_mincle_stim <- dfw_mincle[dfw_mincle$Condition %in% Stimuli ,]

Now we can plot these separately:

There appears to be no difference in the response to the spore stages in WT or Mincle KO.

Replicate 1 for Mincle KO shows low CD40 activation for LPS - this is due to low cell numbers observed.

To do

  • Quality control for cells
    • Low FSC/SSC complicating spore removal
    • Setting extra cDC gate to remove CD24 low events that are contamating (these appear to be spores)
    • Number of cells per sample plot
    • Death
  • Calculate significance with t.test or one way ANOVA for Syk inhibitor experiment