####################################################################################
# SUPPLEMENTARY R CODE
# The evolution of host-symbiont dependence
# Fisher RM, Henry LM, Cornwallis CK, Kiers ET & West SA
####################################################################################

# PHYLOGENIES
# read in symbiont phylogeny
symbiont <- read.nexus("symbiont.nex")
# read in host phylogeny
host <- read.nexus("host.nex")

# DATA
symbiontdata <-read.csv("/Users/robertafisher/Desktop/Symbiosis/symbiontdataset.csv")
hostdata <- read.csv("/Users/robertafisher/Desktop/Symbiosis/hostdataset.csv")

####################################################################################
# ANALYSIS 1
####################################################################################

# subset the data
symbiontdata <- subset(symbiontdata, transmissioncat!='NA' & animal!='NA' & repromanipulate=='no' & type!='NA' & route!='NA')
hostdata <- subset(hostdata, transmissioncat!='NA' & animal!='NA' & repromanipulate=='no' & type!='NA' & route!='NA')

# Multiresponse model with symbiont phylogeny
prior1a <- list(R = list(R1=list(V=diag(2), nu=1.002)), G = list(G1=list(V=diag(2), nu=1.002),
                                                                 G2=list(V=diag(2), nu=1.002),
                                                                 G3=list(V=diag(2), nu=1.002)))

model1a <- MCMCglmm(cbind(genomespecific, fitnessdrop) ~ trait:transmissioncat-1 + trait:type + trait:route,
                    family = c("gaussian", "gaussian"), pedigree=symbiont, 
                    random = ~us(trait):animal + idh(trait):study + idh(trait):symbiont, 
                    rcov = ~us(trait):units,
                    mev = 1/symbiontdata$N2,
                    nitt=5500000, burnin=500000, thin=5000,
                    prior = prior1a, data = symbiontdata, verbose=FALSE)
summary(model1a)
#estimating difference in response variables (can do the same for fitness drop)
posterior.mode(model1a$Sol[,'traitgenomespecific:transmissioncatHT']-model1a$Sol[,'traitgenomespecific:transmissioncatVT'])
HPDinterval(model1a$Sol[,'traitgenomespecific:transmissioncatHT']-model1a$Sol[,'traitgenomespecific:transmissioncatVT'])
#Equivalent of p value
table(model1a$Sol[,'traitgenomespecific:transmissioncatHT']<model1a$Sol[,'traitgenomespecific:transmissioncatVT'])/1000


# Multiresponse model with host phylogeny
prior1b <- list(R = list(R1=list(V=diag(2), nu=1.002)), G = list(G1=list(V=diag(2), nu=1.002),
                                                                 G2=list(V=diag(2), nu=1.002),
                                                                 G3=list(V=diag(2), nu=1.002)))

model1b <- MCMCglmm(cbind(genomespecific, fitnessdrop) ~ trait:transmissioncat-1 + trait:type + trait:route,
                   family = c("gaussian", "gaussian"), pedigree=host, 
                   random = ~us(trait):animal + idh(trait):study + idh(trait):host, 
                   rcov = ~us(trait):units,
                   mev = 1/hostdata$N2,
                   nitt=5500000, burnin=500000, thin=5000,
                   prior = prior1b, data = hostdata, verbose=FALSE)
summary(model1b)

####################################################################################
# ANALYSIS 2 
####################################################################################

# Multiresponse model with transmission specific correlations between genome size and fitness drop with symbiont phylogeny
# prior
prior2a <- list(R = list(R =list(V=diag(2), nu=1.002)), G = list(G1=list(V=diag(2), nu=1.002),
                                                                 G2=list(V=diag(2), nu=1.002),
                                                                 G3=list(V=diag(2), nu=1.002),
                                                                 G4=list(V=diag(2), nu=1.002)))

# model
model2a <- MCMCglmm(cbind(genomespecific, fitnessdrop) ~ trait:transmissioncat-1 + trait:route + trait:type,
                     family = c("gaussian", "gaussian"), pedigree=symbiont, 
                     random = ~us(at.level(transmissioncat,'HT'):trait):animal +
                       us(at.level(transmissioncat,'VT'):trait):animal +
                       idh(trait):study + idh(trait):symbiont, 
                       mev = 1/symbiontdata$N2
                     rcov = ~us(trait):units,
                     nitt=5500000, burnin=500000, thin=5000,
                     prior = prior2a, data = symbiontdata, verbose=FALSE)
summary(model2a)
# phylogenetic correlation between the levels
table(model2a$VCV[,'at.level(transmissioncat, "HT"):traitfitnessdrop:at.level(transmissioncat, "HT"):traitgenomespecific.animal']
      >model2a$VCV[,'at.level(transmissioncat, "VT"):traitfitnessdrop:at.level(transmissioncat, "VT"):traitgenomespecific.animal'])/1000
posterior.mode(model2a$VCV[,'at.level(transmissioncat, "HT"):traitfitnessdrop:at.level(transmissioncat, "HT"):traitgenomespecific.animal'])
HPDinterval(model2a$VCV[,'at.level(transmissioncat, "HT"):traitfitnessdrop:at.level(transmissioncat, "HT"):traitgenomespecific.animal'])

# Multiresponse model with transmission specific correlations between genome size and fitness drop with host phylogeny
prior2b <- list(R = list(R =list(V=diag(2), nu=1.002)), G = list(G1=list(V=diag(2), nu=1.002),
                                                                 G2=list(V=diag(2), nu=1.002),
                                                                 G3=list(V=diag(2), nu=1.002),
                                                                 G4=list(V=diag(2), nu=1.002)))

# model
model2b <- MCMCglmm(cbind(genomespecific, fitnessdrop) ~ trait:transmissioncat-1 + trait:route + trait:type,
                   family = c("gaussian", "gaussian"), pedigree=host, 
                   random = ~us(at.level(transmissioncat,'HT'):trait):animal +
                     us(at.level(transmissioncat,'VT'):trait):animal +
                     idh(trait):study +idh(trait):host, 
                   mev = 1/hostdata$N2
                   rcov = ~us(trait):units,
                   nitt=5500000, burnin=500000, thin=5000,
                   prior = prior2b, data = hostdata, verbose=FALSE)
summary(model2b)

