# Attach packages
knitr::opts_chunk$set(echo=TRUE)
library(knitr)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(tibble)
library(forcats)
library(stringr)
library(ggtree)
## ggtree v4.0.4 Learn more at https://yulab-smu.top/contribution-tree-data/
##
## Please cite:
##
## Shuangbin Xu, Lin Li, Xiao Luo, Meijun Chen, Wenli Tang, Li Zhan, Zehan
## Dai, Tommy T. Lam, Yi Guan, Guangchuang Yu. Ggtree: A serialized data
## object for visualization of a phylogenetic tree and annotation data.
## iMeta 2022, 1(4):e56. doi:10.1002/imt2.56
##
## Attaching package: 'ggtree'
## The following object is masked from 'package:tidyr':
##
## expand
library(ggtreeExtra)
## ggtreeExtra v1.20.1 Learn more at https://yulab-smu.top/contribution-tree-data/
##
## Please cite:
##
## S Xu, Z Dai, P Guo, X Fu, S Liu, L Zhou, W Tang, T Feng, M Chen, L
## Zhan, T Wu, E Hu, Y Jiang, X Bo, G Yu. ggtreeExtra: Compact
## visualization of richly annotated phylogenetic data. Molecular Biology
## and Evolution. 2021, 38(9):4039-4042. doi: 10.1093/molbev/msab166
library(ape)
##
## Attaching package: 'ape'
## The following object is masked from 'package:ggtree':
##
## rotate
## The following object is masked from 'package:dplyr':
##
## where
library(phangorn)
library(scales)
library(ggnewscale)
library(sf)
## Linking to GEOS 3.13.1, GDAL 3.11.4, PROJ 9.7.0; sf_use_s2() is TRUE
library(ggspatial)
library(purrr)
##
## Attaching package: 'purrr'
## The following object is masked from 'package:scales':
##
## discard
library(patchwork)
library(ComplexHeatmap)
## Loading required package: grid
## ========================================
## ComplexHeatmap version 2.26.1
## Bioconductor page: http://bioconductor.org/packages/ComplexHeatmap/
## Github page: https://github.com/jokergoo/ComplexHeatmap
## Documentation: http://jokergoo.github.io/ComplexHeatmap-reference
##
## If you use it in published research, please cite either one:
## - Gu, Z. Complex Heatmap Visualization. iMeta 2022.
## - Gu, Z. Complex heatmaps reveal patterns and correlations in multidimensional
## genomic data. Bioinformatics 2016.
##
##
## The new InteractiveComplexHeatmap package can directly export static
## complex heatmaps into an interactive Shiny app with zero effort. Have a try!
##
## This message can be suppressed by:
## suppressPackageStartupMessages(library(ComplexHeatmap))
## ========================================
library(circlize)
## ========================================
## circlize version 0.4.17
## CRAN page: https://cran.r-project.org/package=circlize
## Github page: https://github.com/jokergoo/circlize
## Documentation: https://jokergoo.github.io/circlize_book/book/
##
## If you use it in published research, please cite:
## Gu, Z. circlize implements and enhances circular visualization
## in R. Bioinformatics 2014.
##
## This message can be suppressed by:
## suppressPackageStartupMessages(library(circlize))
## ========================================
##
## Attaching package: 'circlize'
## The following object is masked from 'package:ape':
##
## degree
library(grid)
library(FSA)
## ## FSA v0.10.1. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
library(ggpubr)
## Registered S3 methods overwritten by 'car':
## method from
## hist.boot FSA
## confint.boot FSA
##
## Attaching package: 'ggpubr'
## The following object is masked from 'package:ape':
##
## rotate
## The following object is masked from 'package:ggtree':
##
## rotate
library(igraph)
##
## Attaching package: 'igraph'
## The following object is masked from 'package:circlize':
##
## degree
## The following objects are masked from 'package:purrr':
##
## compose, simplify
## The following object is masked from 'package:phangorn':
##
## diversity
## The following objects are masked from 'package:ape':
##
## degree, edges, mst, ring
## The following object is masked from 'package:tibble':
##
## as_data_frame
## The following object is masked from 'package:tidyr':
##
## crossing
## The following objects are masked from 'package:dplyr':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(ggraph)
# Import and tidy the participant data
# Import the data
part_data <- read.csv("Data/Participant_data.csv", na.strings = "")
# Set missing data to NA
part_data[part_data == 99 ] <- NA
# Tidy up categorical variables
part_data$sex <- as.factor(part_data$sex)
part_data$follow_up <- as.factor(part_data$follow_up)
part_data$where_defecate <- as.factor(part_data$where_defecate)
part_data <- part_data %>%
mutate(
where_defecate = case_when(
where_defecate %in% c("bush", "other") ~ "other",
TRUE ~ where_defecate
)
)
part_data$drinking_water_source <- as.factor(part_data$drinking_water_source)
# Re-name variables for colonisation in 2023 (baseline) and 2024 (follow-up)
names(part_data)[names(part_data) == "baseline_ESBL_E_coli"] <- "2023"
names(part_data)[names(part_data) == "fu_ESBL_E_coli"] <- "2024"
# Convert and label categories
part_data$district <- factor(part_data$district, levels = c(0, 1), labels = c('Nsanje', 'Mangochi'))
part_data$'2023' <- factor(part_data$'2023', levels = c(0, 1), labels = c('No', 'Yes'))
part_data$'2024' <- factor(part_data$'2024', levels = c(0, 1), labels = c('No', 'Yes'))
part_data$baseline_network_strain <- factor(part_data$baseline_network_strain, levels = c(0, 1), labels = c('No', 'Yes'))
part_data$fu_network_strain <- factor(part_data$fu_network_strain, levels = c(0, 1), labels = c('No', 'Yes'))
# Make variables for colonisation with non-network strains at each time point
part_data$baseline_non_network_strain <- ifelse(
part_data$`2023` == "No",
"No",
ifelse(
part_data$baseline_network_strain == "Yes",
"No",
"Yes"
)
)
part_data$fu_non_network_strain <- ifelse(
part_data$`2024` == "No",
"No",
ifelse(
part_data$fu_network_strain == "Yes",
"No",
"Yes"
)
)
# Age
summary(part_data$age_at_baseline)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.00 4.00 6.00 11.92 16.50 47.00
# Categorical summaries
categorical_vars <- c(
"sex",
"follow_up",
"where_defecate",
"drinking_water_source"
)
# Generate summary of categorical variables
lapply(categorical_vars, function(v) {
part_data %>%
count(.data[[v]]) %>%
mutate(percent = round(100 * n / sum(n), 1))
})
## [[1]]
## sex n percent
## 1 female 122 57.8
## 2 male 89 42.2
##
## [[2]]
## follow_up n percent
## 1 no 58 27.5
## 2 yes 153 72.5
##
## [[3]]
## where_defecate n percent
## 1 missing 1 0.5
## 2 other 28 13.3
## 3 toilet 182 86.3
##
## [[4]]
## drinking_water_source n percent
## 1 borehole 204 96.7
## 2 missing 1 0.5
## 3 unprotected_shallow_well_river_dam_lake 6 2.8
# Filter the data
part_data_mangochi <- part_data %>%
filter(district == "Mangochi")
# Age
summary(part_data_mangochi$age_at_baseline)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.0 4.0 6.0 10.2 12.0 47.0
# Generate summary of categorical variables
lapply(categorical_vars, function(v) {
part_data_mangochi %>%
count(.data[[v]]) %>%
mutate(percent = round(100 * n / sum(n), 1))
})
## [[1]]
## sex n percent
## 1 female 85 52.1
## 2 male 78 47.9
##
## [[2]]
## follow_up n percent
## 1 no 40 24.5
## 2 yes 123 75.5
##
## [[3]]
## where_defecate n percent
## 1 missing 1 0.6
## 2 other 22 13.5
## 3 toilet 140 85.9
##
## [[4]]
## drinking_water_source n percent
## 1 borehole 156 95.7
## 2 missing 1 0.6
## 3 unprotected_shallow_well_river_dam_lake 6 3.7
# Filter the data
part_data_nsanje <- part_data %>%
filter(district == "Nsanje")
# Age
summary(part_data_nsanje$age_at_baseline)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.00 7.00 14.00 17.77 26.25 46.00
# Generate summary of categorical variables
lapply(categorical_vars, function(v) {
part_data_nsanje %>%
count(.data[[v]]) %>%
mutate(percent = round(100 * n / sum(n), 1))
})
## [[1]]
## sex n percent
## 1 female 37 77.1
## 2 male 11 22.9
##
## [[2]]
## follow_up n percent
## 1 no 18 37.5
## 2 yes 30 62.5
##
## [[3]]
## where_defecate n percent
## 1 other 6 12.5
## 2 toilet 42 87.5
##
## [[4]]
## drinking_water_source n percent
## 1 borehole 48 100
# Age
wilcox.test(
age_at_baseline ~ district,
data = part_data %>% filter(district %in% c("Mangochi", "Nsanje"))
)
##
## Wilcoxon rank sum test with continuity correction
##
## data: age_at_baseline by district
## W = 5746, p-value = 7.286e-07
## alternative hypothesis: true location shift is not equal to 0
# Sex
sex_tab <- table(
part_data$sex,
part_data$district
)
fisher.test(sex_tab)
##
## Fisher's Exact Test for Count Data
##
## data: sex_tab
## p-value = 0.002559
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.413660 7.156798
## sample estimates:
## odds ratio
## 3.071026
# Follow-up
fu_tab <- table(
part_data$follow_up,
part_data$district
)
fisher.test(fu_tab)
##
## Fisher's Exact Test for Count Data
##
## data: fu_tab
## p-value = 0.09744
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.8679588 3.8373770
## sample estimates:
## odds ratio
## 1.839286
# Latrine
latrine_tab <- table(
part_data$where_defecate,
part_data$district
)
fisher.test(latrine_tab)
##
## Fisher's Exact Test for Count Data
##
## data: latrine_tab
## p-value = 1
## alternative hypothesis: two.sided
# Drinking water
water_tab <- table(
part_data$drinking_water_source,
part_data$district
)
fisher.test(water_tab)
##
## Fisher's Exact Test for Count Data
##
## data: water_tab
## p-value = 0.4904
## alternative hypothesis: two.sided
# Mutate data to show dynamics in participants followed-up
fu_part_data <- part_data %>%
filter(follow_up == "yes") %>%
mutate('change' = case_when(
`2023` == "No" & `2024` == "No" ~ "Stayed negative",
`2023` == "Yes" & `2024` == "Yes" ~ "Stayed positive",
`2023` == "No" & `2024` == "Yes" ~ "Became positive",
`2023` == "Yes" & `2024` == "No" ~ "Became negative"
))
# Set the levels for the change variable to the desired order
fu_part_data$change <- factor(fu_part_data$change,
levels = c("Stayed negative", "Became positive", "Became negative", "Stayed positive"))
# Summarise counts of participants for each type of change, and negate values for "negative" changes
summary_data <- fu_part_data %>%
count(change) %>%
mutate(n = ifelse(change %in% c("Stayed negative", "Became negative"), -n, n))
# Add the 'baseline' column based on the conditions
summary_data <- summary_data %>%
mutate(baseline = case_when(
change %in% c('Stayed negative', 'Became positive') ~ 'Negative',
change %in% c('Stayed positive', 'Became negative') ~ 'Positive'
))
# Create the plot
ESBL_dynamics <- ggplot(summary_data, aes(x = change, y = n)) +
geom_bar(stat = "identity", aes(fill = baseline), colour = "black", linewidth = 0.3, width = 0.7) +
scale_y_continuous(labels = abs) +
scale_fill_manual(values = c("Negative" = "cornflowerblue",
"Positive" = "firebrick")) +
labs(fill = "Baseline status") +
labs(x = "ESBL carriage dynamic",
y = "Number of participants") +
theme_minimal() +
theme(
axis.title.x = element_text(margin = margin(t = 10)), # Space above x-axis label
axis.title.y = element_text(margin = margin(r = 10)), # Space to the right of y-axis label
plot.margin = margin(r = 30) # Extra space on the right of the plot for legend
) +
geom_hline(yintercept = 0, linetype = "dashed")
# Save the plot
ggsave("Figures/ESBL_dynamics.png", ESBL_dynamics, height = 5, dpi = 600)
## Saving 7 x 5 in image
# Print the plot
print(ESBL_dynamics)
# Specify columns to look at prevalence in
cols <- c("2023", "2024", "baseline_network_strain", "baseline_non_network_strain", "fu_network_strain", "fu_non_network_strain")
# Calculate prevalences in 2023 and 2024 of colonisation, colonisation with a network strain, and colonisation with a non_network strain
prevalence <- sapply(part_data[cols], function(x) {
mean(x == "Yes", na.rm = TRUE)
})
print(prevalence)
## 2023 2024
## 0.3412322 0.5424837
## baseline_network_strain baseline_non_network_strain
## 0.1706161 0.1706161
## fu_network_strain fu_non_network_strain
## 0.2549020 0.2875817
# Calculate prevalences in participants followed-up
prevalence <- sapply(fu_part_data[cols], function(x) {
mean(x == "Yes", na.rm = TRUE)
})
print(prevalence)
## 2023 2024
## 0.3333333 0.5424837
## baseline_network_strain baseline_non_network_strain
## 0.1568627 0.1764706
## fu_network_strain fu_non_network_strain
## 0.2549020 0.2875817
# Check for significant rise in prevalence in colonisation follow-up participants using McNemar's test for paired data
colonisation_tab <- table(fu_part_data$'2023', fu_part_data$'2024')
mcnemar.test(colonisation_tab)
##
## McNemar's Chi-squared test with continuity correction
##
## data: colonisation_tab
## McNemar's chi-squared = 11.174, df = 1, p-value = 0.0008293
# Baseline prevalence
bl_prev_tab <- table(
part_data$"2023",
part_data$district
)
bl_prev_tab
##
## Nsanje Mangochi
## No 32 107
## Yes 16 56
chisq.test(bl_prev_tab, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: bl_prev_tab
## X-squared = 0.017246, df = 1, p-value = 0.8955
# Follow-up prevalence
fu_prev_tab <- table(
fu_part_data$"2024",
fu_part_data$district
)
fu_prev_tab
##
## Nsanje Mangochi
## No 12 58
## Yes 18 65
chisq.test(fu_prev_tab, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: fu_prev_tab
## X-squared = 0.49739, df = 1, p-value = 0.4806
# Define the variables of interest
vars <- c("2023", "2024")
# Initialize the summary dataframe
prevalence_summary <- data.frame(
Variable = vars,
Positive_Count = NA,
Total_N = NA,
Prevalence_Percent = NA,
CI_Lower = NA,
CI_Upper = NA
)
# Loop through variables and calculate values
for (i in seq_along(vars)) {
var <- vars[i]
x <- part_data[[var]]
pos <- sum(x %in% c("Yes"), na.rm = TRUE)
total <- sum(!is.na(x))
test <- prop.test(pos, total)
prevalence_summary$Positive_Count[i] <- pos
prevalence_summary$Total_N[i] <- total
prevalence_summary$Prevalence_Percent[i] <- round(100 * pos / total, 1)
prevalence_summary$CI_Lower[i] <- round(100 * test$conf.int[1], 1)
prevalence_summary$CI_Upper[i] <- round(100 * test$conf.int[2], 1)
}
# Print the table
print(prevalence_summary)
## Variable Positive_Count Total_N Prevalence_Percent CI_Lower CI_Upper
## 1 2023 72 211 34.1 27.8 41.0
## 2 2024 83 153 54.2 46.0 62.3
# Define the variables of interest
vars <- c("2023")
# Initialize the summary dataframe
prevalence_summary <- data.frame(
Variable = vars,
Positive_Count = NA,
Total_N = NA,
Prevalence_Percent = NA,
CI_Lower = NA,
CI_Upper = NA
)
# Loop through variables and calculate values
for (i in seq_along(vars)) {
var <- vars[i]
x <- fu_part_data[[var]]
pos <- sum(x %in% c("Yes"), na.rm = TRUE)
total <- sum(!is.na(x))
test <- prop.test(pos, total)
prevalence_summary$Positive_Count[i] <- pos
prevalence_summary$Total_N[i] <- total
prevalence_summary$Prevalence_Percent[i] <- round(100 * pos / total, 1)
prevalence_summary$CI_Lower[i] <- round(100 * test$conf.int[1], 1)
prevalence_summary$CI_Upper[i] <- round(100 * test$conf.int[2], 1)
}
# Print the table
print(prevalence_summary)
## Variable Positive_Count Total_N Prevalence_Percent CI_Lower CI_Upper
## 1 2023 51 153 33.3 26.1 41.5
# Define the variables of interest
vars <- c("2023", "2024")
# Initialize the summary dataframe
prevalence_summary <- data.frame(
Variable = vars,
Positive_Count = NA,
Total_N = NA,
Prevalence_Percent = NA,
CI_Lower = NA,
CI_Upper = NA
)
# Loop through variables and calculate values
for (i in seq_along(vars)) {
var <- vars[i]
x <- part_data_mangochi[[var]]
pos <- sum(x %in% c("Yes"), na.rm = TRUE)
total <- sum(!is.na(x))
test <- prop.test(pos, total)
prevalence_summary$Positive_Count[i] <- pos
prevalence_summary$Total_N[i] <- total
prevalence_summary$Prevalence_Percent[i] <- round(100 * pos / total, 1)
prevalence_summary$CI_Lower[i] <- round(100 * test$conf.int[1], 1)
prevalence_summary$CI_Upper[i] <- round(100 * test$conf.int[2], 1)
}
# Print the table
print(prevalence_summary)
## Variable Positive_Count Total_N Prevalence_Percent CI_Lower CI_Upper
## 1 2023 56 163 34.4 27.2 42.2
## 2 2024 65 123 52.8 43.7 61.8
# Define the variables of interest
vars <- c("2023", "2024")
# Initialize the summary dataframe
prevalence_summary <- data.frame(
Variable = vars,
Positive_Count = NA,
Total_N = NA,
Prevalence_Percent = NA,
CI_Lower = NA,
CI_Upper = NA
)
# Loop through variables and calculate values
for (i in seq_along(vars)) {
var <- vars[i]
x <- part_data_nsanje[[var]]
pos <- sum(x %in% c("Yes"), na.rm = TRUE)
total <- sum(!is.na(x))
test <- prop.test(pos, total)
prevalence_summary$Positive_Count[i] <- pos
prevalence_summary$Total_N[i] <- total
prevalence_summary$Prevalence_Percent[i] <- round(100 * pos / total, 1)
prevalence_summary$CI_Lower[i] <- round(100 * test$conf.int[1], 1)
prevalence_summary$CI_Upper[i] <- round(100 * test$conf.int[2], 1)
}
# Print the table
print(prevalence_summary)
## Variable Positive_Count Total_N Prevalence_Percent CI_Lower CI_Upper
## 1 2023 16 48 33.3 20.8 48.5
## 2 2024 18 30 60.0 40.8 76.8
# Import the isolate data
isolate_data_human <- read.csv("Data/Malawi_ESBL_E_coli_isolates.csv")
# Label and tidy ESBL isolate data from 2023
isolate_data_human$District <- as.factor(isolate_data_human$District)
isolate_data_human$Year <- as.factor(isolate_data_human$Year)
isolate_data_human$ST <- as.factor(isolate_data_human$ST)
isolate_data_human$popPUNK_cluster <- as.factor(isolate_data_human$popPUNK_cluster)
isolate_data_human$Phylogroup <- as.factor(isolate_data_human$Phylogroup)
isolate_data_human$fu_participant <- factor(isolate_data_human$fu_participant, levels = c(0, 1), labels = c('No', 'Yes'))
# Generate lineage column combining ST and popPUNK cluster
isolate_data_human$Lineage <- paste0("ST", isolate_data_human$ST, "_popPUNK", isolate_data_human$popPUNK_cluster)
isolate_data_human$Lineage <- as.factor(isolate_data_human$Lineage)
# Print a summary of the lineages
summary(isolate_data_human$Lineage)
## ST10_popPUNK5 ST10_popPUNK92 ST1015_popPUNK11
## 4 6 10
## ST10955_popPUNK1410 ST1139_popPUNK1409 ST1158_popPUNK453
## 1 2 1
## ST12714_popPUNK1408 ST131_popPUNK25 ST131_popPUNK4
## 2 10 9
## ST13823_popPUNK1407 ST1421_popPUNK62 ST1485_popPUNK135
## 8 1 1
## ST167_popPUNK5 ST1722_popPUNK190 ST189_popPUNK35
## 5 3 2
## ST206_popPUNK41_1328 ST2161_popPUNK133 ST2172_popPUNK271
## 14 1 1
## ST2852_popPUNK18 ST295_popPUNK107 ST315_popPUNK20
## 5 2 1
## ST349_popPUNK73 ST3580_popPUNK18 ST38_popPUNK20
## 1 5 23
## ST44_popPUNK223 ST443_popPUNK61 ST5614_popPUNK251
## 6 1 10
## ST58_popPUNK11 ST5909_popPUNK46 ST617_popPUNK60
## 8 3 2
## ST6359_popPUNK60 ST636_popPUNK140 ST648_popPUNK31
## 3 1 3
## ST73_popPUNK8 ST8025_popPUNK5
## 1 3
# STs belonging to more than one popPUNK cluster
ST_multiple_popPUNK <- isolate_data_human %>%
group_by(ST) %>%
summarise(n_popPUNK = n_distinct(popPUNK_cluster)) %>%
filter(n_popPUNK > 1)
ST_multiple_popPUNK
## # A tibble: 2 Ă— 2
## ST n_popPUNK
## <fct> <int>
## 1 10 2
## 2 131 2
# popPUNK clusters belonging to more than one ST
popPUNK_multiple_ST <- isolate_data_human %>%
group_by(popPUNK_cluster) %>%
summarise(n_ST = n_distinct(ST)) %>%
filter(n_ST > 1)
popPUNK_multiple_ST
## # A tibble: 5 Ă— 2
## popPUNK_cluster n_ST
## <fct> <int>
## 1 11 2
## 2 18 2
## 3 20 2
## 4 5 3
## 5 60 2
# Plot STs of all isolates
ST_plot <- ggplot(isolate_data_human, aes(x = fct_rev(fct_infreq(ST)), fill = Phylogroup)) +
geom_bar(color = "black", linewidth = 0.3) +
coord_flip() +
theme_bw() +
labs(x = "ST", y = "Number of Isolates") +
scale_fill_brewer(palette = "Set2")
# Save the plot
ggsave("Figures/ST_plot.png", ST_plot, width = 4, height = 5, dpi = 600)
# Print the plot
print(ST_plot)
# Add year breakdown to ST plot
# Define the number of isolates per year
isolate_totals <- c(`2023` = 76, `2024` = 83)
# Create a dataset of all possible combinations of ST and Year (2023, 2024)
all_st_year_combinations <- expand.grid(ST = unique(isolate_data_human$ST), Year = c(2023, 2024))
all_st_year_combinations$Year <- as.factor(all_st_year_combinations$Year)
# Summarize ST rates per 100 isolates per year
ST_summary_data <- isolate_data_human %>%
group_by(ST, Year) %>%
summarise(Count = n(), .groups = "drop") %>%
full_join(all_st_year_combinations, by = c("ST", "Year")) %>% # Ensure all ST-Year combinations exist
mutate(Count = replace_na(Count, 0)) %>% # Fill missing values with 0
mutate(rate_per_100 = (Count / isolate_totals[as.character(Year)]) * 100)
# Calculate total counts of each ST to enable plot ordering
ST_summary_data <- ST_summary_data %>%
group_by(ST) %>%
mutate(total_count = sum(Count)) %>%
ungroup()
# Reorder samples in highest to lowest total isolate count order to match the first ST plot
ST_summary_data <- ST_summary_data %>%
mutate(ST = fct_rev(fct_reorder(ST, total_count, .desc = TRUE)))
# Plot ST rates per 100 participants per year
ST_plot_years <- ggplot(ST_summary_data, aes(x = ST, y = rate_per_100, fill = factor(Year))) +
geom_bar(color = "black", linewidth = 0.3, stat = "identity", position = position_dodge(width = 0.8)) +
coord_flip() +
theme_bw() +
labs(x = "ST", y = "Percentage of isolates per year", fill = "Year")
# Save the plot
ggsave("Figures/ST_plot_years.png", ST_plot_years, width = 4, height = 5, dpi = 600)
# Print the plot
print(ST_plot_years)
# Fisher exact test with Monte Carlo simulation
st_year_tab <- xtabs(Count ~ ST + Year, data = ST_summary_data)
set.seed(1)
fisher.test(st_year_tab, simulate.p.value = TRUE, B = 1e4)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 10000 replicates)
##
## data: st_year_tab
## p-value = 9.999e-05
## alternative hypothesis: two.sided
# Import and clean ARG data
# Import data
ARGs <- read.csv("Data/ARGs.csv", check.names = FALSE)
# Remove '.fasta' from all entries in column 1
ARGs[, 1] <- gsub("\\.fasta", "", ARGs[, 1])
# Apply transformations to all columns except 'Isolate' names so ARGs are present (1) or absent (0)
ARGs[, -1] <- apply(ARGs[, -1], 2, function(x) {
ifelse(is.na(as.numeric(x)), 0, 1)
})
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
# Clean column names
colnames(ARGs) <- gsub("bla", "", colnames(ARGs)) # Remove 'bla'
colnames(ARGs) <- sapply(colnames(ARGs), function(x) {
paste0(toupper(substring(x, 1, 1)), substring(x, 2))
}) # Capitalize first letter
# Create a base name without suffixes for grouping
base_names <- sub("_.*", "", colnames(ARGs))
# Create a list of indices for columns to merge based on cleaned names
cols_to_merge_list <- split(seq_along(colnames(ARGs)), base_names)
# Track columns to delete after summing
cols_to_delete <- c()
# Sum values into the first column for each group and mark columns for deletion
for (col_indices in cols_to_merge_list) {
if (length(col_indices) > 1) {
# Sum values into the first column
summed_column <- rowSums(ARGs[, col_indices], na.rm = TRUE)
# Set to 1 if total is greater than 1
summed_column[summed_column > 1] <- 1
# Replace the first occurrence with the summed column
ARGs[, col_indices[1]] <- summed_column
# Mark all other columns except the first for deletion
cols_to_delete <- c(cols_to_delete, col_indices[-1])
}
}
# Delete the marked columns all at once after the loop
ARGs <- ARGs[, -cols_to_delete]
# Clean column names (remove everything after and including '_')
colnames(ARGs) <- gsub("_.*", "", colnames(ARGs))
# Mutate the data to have Isolate and ARG columns
ARGs_long <- ARGs %>%
pivot_longer(
cols = -Isolate,
names_to = "ARG",
values_to = "Presence"
)
# Filter for only relevant rows (where presence is 1)
ARGs_long <- ARGs_long %>%
dplyr::filter(Presence == 1) %>%
dplyr::select(-Presence)
# Print all unique AMR determinants in data set
(colnames(ARGs)[-1])
## [1] "ARR-3" "Aac(3)-IIa" "Aac(3)-IId" "Aac(3)-IVa"
## [5] "Aac(6')-Ib-cr" "AadA16" "AadA2" "AadA5"
## [9] "Ant(3'')-Ia" "Aph(3'')-Ib" "Aph(4)-Ia" "Aph(6)-Id"
## [13] "CTX-M-14" "CTX-M-14b" "CTX-M-15" "CTX-M-27"
## [17] "CTX-M-55" "CTX-M-65" "DHA-1" "OXA-1"
## [21] "TEM-141" "TEM-1B" "CatA1" "DfrA12"
## [25] "DfrA14" "DfrA17" "DfrA1" "DfrA27"
## [29] "DfrA5" "DfrA7" "DfrA8" "Erm(B)"
## [33] "FloR" "FosA3" "Mph(A)" "QepA1"
## [37] "QepA4" "QnrB1" "QnrB4" "QnrB6"
## [41] "QnrS1" "Sul1" "Sul2" "Tet(A)"
## [45] "Tet(B)" "Tet(D)"
# Define the AMR classes and their associated genes
aminoglycoside = "Aac|Aad|Ant|Aph"
beta_lactam_AmpC = "DHA"
beta_lactam_ESBL = "CTX"
beta_lactam_other = "OXA|TEM"
chloramphenicol = "Cat|FloR"
fosfomycin = "Fos"
macrolide = "Mph"
MDR = "Erm"
quinolone = "Qnr|Qep"
rifampicin = "ARR"
sulphonamide = "Sul"
tetracycline = "Tet"
trimethoprim = "Dfr"
# Calculate the absolute abundance (counting only where Presence is 1) and label ARG classes
ARG_abundance <- ARGs_long %>%
group_by(ARG) %>%
summarise(Count = n(), .groups = "drop") %>%
mutate(class = case_when(
str_detect(ARG, aminoglycoside) ~ "Aminoglycoside",
str_detect(ARG, beta_lactam_AmpC) ~ "Beta-lactam (AmpC)",
str_detect(ARG, beta_lactam_ESBL) ~ "Beta-lactam (ESBL)",
str_detect(ARG, beta_lactam_other) ~ "Beta-lactam (other)",
str_detect(ARG, chloramphenicol) ~ "Chloramphenicol",
str_detect(ARG, fosfomycin) ~ "Fosfomycin",
str_detect(ARG, macrolide) ~ "Macrolide",
str_detect(ARG, MDR) ~ "MDR",
str_detect(ARG, quinolone) ~ "Quinolone",
str_detect(ARG, rifampicin) ~ "Rifampicin",
str_detect(ARG, sulphonamide) ~ "Sulphonamide",
str_detect(ARG, tetracycline) ~ "Tetracycline",
str_detect(ARG, trimethoprim) ~ "Trimethoprim",
TRUE ~ NA_character_
))
# Reorder ARGs for plotting: first by class, then by count (highest to lowest)
ARG_abundance <- ARG_abundance %>%
arrange(class, desc(Count)) %>%
mutate(ARG = factor(ARG, levels = ARG))
# Reverse the order of classes and ARGs for top-to-bottom plotting
ARG_abundance <- ARG_abundance %>%
mutate(class = factor(class, levels = sort(unique(class)))) %>%
mutate(ARG = factor(ARG, levels = rev(ARG[order(ARG_abundance$class, -ARG_abundance$Count)])))
# Create the bar plot
AMR_plot <- ggplot(ARG_abundance, aes(y = ARG, x = Count, fill = class)) +
geom_bar(color = "black", linewidth = 0.3, stat = "identity") +
labs(y = "AMR Determinant", x = "Number of Isolates") +
theme_bw() +
guides(fill = guide_legend(title = "Class")) +
theme(axis.text.y = element_text(size = 10),
plot.background = element_rect(fill = "transparent", colour = NA),
legend.background = element_rect(fill = "transparent", colour = NA)
) +
scale_fill_manual(values=c("#1b9e77", "#fdbf6f", "#7570b3", "#d95f02",
"#66a61e", "#e6ab02", "#a6761d", "#e7298a",
"#1f78b4", "#b2df8a", "#fb9a99", "#666666",
"#cab2d6", "#ffff99"))
# Save the plot
ggsave("Figures/AMR_plot.png", AMR_plot, height = 7, width = 6, dpi = 600)
# Print the plot
print(AMR_plot)
# Add year breakdown in follow-up participants to ARG plot
# Add year to follow-up ARG data
ARGs <- ARGs %>%
mutate(Year = case_when(
grepl("^c", Isolate) ~ 2023,
grepl("^f", Isolate) ~ 2024,
TRUE ~ NA_real_
))
# Convert to long format
ARGs_fu_long <- ARGs %>%
pivot_longer(cols = -c(Isolate, Year), names_to = "ARG", values_to = "Presence")
# Summarize counts for each gene per year
ARG_summary_data <- ARGs_fu_long %>%
group_by(ARG, Year) %>%
summarize(Count = sum(Presence), .groups = "drop") %>%
mutate(rate_per_100 = (Count / isolate_totals[as.character(Year)]) * 100) %>%
mutate(class = case_when(
str_detect(ARG, aminoglycoside) ~ "Aminoglycoside",
str_detect(ARG, beta_lactam_AmpC) ~ "Beta-lactam (AmpC)",
str_detect(ARG, beta_lactam_ESBL) ~ "Beta-lactam (ESBL)",
str_detect(ARG, beta_lactam_other) ~ "Beta-lactam (other)",
str_detect(ARG, chloramphenicol) ~ "Chloramphenicol",
str_detect(ARG, fosfomycin) ~ "Fosfomycin",
str_detect(ARG, macrolide) ~ "Macrolide",
str_detect(ARG, MDR) ~ "MDR",
str_detect(ARG, quinolone) ~ "Quinolone",
str_detect(ARG, rifampicin) ~ "Rifampicin",
str_detect(ARG, sulphonamide) ~ "Sulphonamide",
str_detect(ARG, tetracycline) ~ "Tetracycline",
str_detect(ARG, trimethoprim) ~ "Trimethoprim",
TRUE ~ NA_character_
))
# Calculate total counts of each ARG to enable plot ordering
ARG_summary_data <- ARG_summary_data %>%
group_by(ARG) %>%
mutate(total_count = sum(Count)) %>%
ungroup() %>%
filter(total_count > 0)
# Reverse the order of classes and ARGs for top-to-bottom plotting
ARG_summary_data <- ARG_summary_data %>%
mutate(class = factor(class, levels = sort(unique(class)))) %>%
group_by(ARG) %>%
slice_max(total_count, n = 1) %>%
ungroup() %>%
arrange(class, desc(total_count)) %>%
mutate(ARG = factor(ARG, levels = rev(unique(ARG))))
# Plot ST rates per 100 participants per year
ARG_plot_years <- ggplot(ARG_summary_data, aes(x = ARG, y = rate_per_100, fill = factor(Year))) +
geom_bar(color = "black", linewidth = 0.3, stat = "identity", position = position_dodge(width = 0.8)) +
coord_flip() +
theme_bw() +
labs(x = "AMR Determinant", y = "Percentage of isolates per year", fill = "Year") +
theme(axis.text.y = element_text(size = 10)) # Adjust y-axis text size for better readability
# Save the plot
ggsave("Figures/ARG_plot_years.png", ARG_plot_years, height = 7, width = 6, dpi = 600)
# Print the plot
print(ARG_plot_years)
# Fisher exact test with Monte Carlo simulation
arg_year_tab <- xtabs(Count ~ ARG + Year, data = ARG_summary_data)
set.seed(1)
fisher.test(arg_year_tab, simulate.p.value = TRUE, B = 1e4)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 10000 replicates)
##
## data: arg_year_tab
## p-value = 9.999e-05
## alternative hypothesis: two.sided
# Import and can plasmid type data
# Import data
plasmids <- read.csv("Data/Plasmid_data.csv", check.names = FALSE)
# Remove '.fasta' from all entries in column 1
plasmids[, 1] <- gsub("\\.fasta", "", plasmids[, 1])
# Apply transformations to all columns except 'Isolate' names plasmids are present (1) or absent (0)
plasmids[, -1] <- apply(plasmids[, -1], 2, function(x) {
ifelse(is.na(as.numeric(x)), 0, 1)
})
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
# Create a base name without suffixes for grouping
base_names <- sub("_.*", "", colnames(plasmids))
# Create a list of indices for columns to merge based on cleaned names
cols_to_merge_list <- split(seq_along(colnames(plasmids)), base_names)
# Track columns to delete after summing
cols_to_delete <- c()
# Sum values into the first column for each group and mark columns for deletion
for (col_indices in cols_to_merge_list) {
if (length(col_indices) > 1) {
# Sum values into the first column
summed_column <- rowSums(plasmids[, col_indices], na.rm = TRUE)
# Set to 1 if total is greater than 1
summed_column[summed_column > 1] <- 1
# Replace the first occurrence with the summed column
plasmids[, col_indices[1]] <- summed_column
# Mark all other columns except the first for deletion
cols_to_delete <- c(cols_to_delete, col_indices[-1])
}
}
# Delete the marked columns all at once after the loop
plasmids <- plasmids[, -cols_to_delete]
# Clean column names (remove everything after and including '_')
colnames(plasmids) <- gsub("_.*", "", colnames(plasmids))
# Mutate the data to have Isolate and ARG columns
plasmids_long <- plasmids %>%
pivot_longer(
cols = -Isolate,
names_to = "Plasmid",
values_to = "Presence"
)
# filter for only relevant rows (where presence is 1)
plasmids_long <- plasmids_long %>%
dplyr::filter(Presence == 1) %>%
dplyr::select(-Presence)
# print all unique AMR determinants in data set
(colnames(plasmids)[-1])
## [1] "IncA/C2" "IncA/C" "IncB/O/K/Z" "IncFIA" "IncFIB"
## [6] "IncFIC" "IncFII" "IncHI1A" "IncHI1B" "IncHI2A"
## [11] "IncHI2" "IncI1" "IncI2" "IncIÎł" "IncX1"
## [16] "IncY"
# Calculate the absolute abundance (counting only where Presence is 1) of plasmids
plasmid_abundance <- plasmids_long %>%
group_by(Plasmid) %>%
summarise(Count = n(), .groups = "drop")
# Reorder plasmids based on Count
plasmid_abundance <- plasmid_abundance %>%
mutate(Plasmid = fct_reorder(Plasmid, Count))
# Create the plot
plasmid_plot <- ggplot(plasmid_abundance, aes(y = Plasmid, x = Count)) +
geom_bar(colour = "black", linewidth = 0.3, stat = "identity") +
labs(y = "Plasmid Replicon", x = "Number of Isolates") +
theme_bw() +
theme(axis.text.y = element_text(size = 10))
# Save the plot
ggsave("Figures/Plasmid_plot.png", plasmid_plot, height = 5, width = 4, dpi = 600)
# Print the plot
print(plasmid_plot)
# Import data
virulence <- read.csv("Data/virulence.csv", check.names = FALSE)
# Remove '.fasta' from all entries in column 1
virulence[, 1] <- gsub("\\.fasta", "", virulence[, 1])
# Apply transformations to all columns except 'Isolate' names so gene names are present (1) or absent (0)
virulence[, -1] <- apply(virulence[, -1], 2, function(x) {
ifelse(is.na(as.numeric(x)), 0, 1)
})
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
## Warning in ifelse(is.na(as.numeric(x)), 0, 1): NAs introduced by coercion
# Inspect data
virulence
## #FILE NUM_FOUND aap/aspU afaA afaB-I afaC-I afaD afaE-I afaE-V afaF-III
## 1 cM10a 1 0 0 0 0 0 0 0 0
## 2 cM12a 1 0 0 0 0 0 0 0 0
## 3 cM19a 1 0 0 0 0 0 0 0 0
## 4 cM20a 1 0 0 0 0 0 0 0 0
## 5 cM2a 1 0 0 0 0 0 0 0 0
## 6 cM34a 1 0 0 0 0 0 0 0 0
## 7 cM35a 1 0 0 0 0 0 0 0 0
## 8 cM3a 1 0 0 0 0 0 0 0 0
## 9 cM41a 1 0 0 0 0 0 0 0 0
## 10 cM42a 1 0 0 0 0 0 0 0 0
## 11 cM42b 1 0 0 0 0 0 0 0 0
## 12 cM44b 1 0 0 0 0 0 0 0 0
## 13 cM59a 1 0 0 0 0 0 0 0 0
## 14 cM59b 1 0 0 0 0 0 0 0 0
## 15 cM5a 1 0 0 0 0 0 0 0 0
## 16 cM7b 1 0 0 0 0 0 0 0 0
## 17 cM8a 1 0 0 0 0 0 0 0 0
## 18 cM9b 1 0 0 0 0 0 0 0 0
## 19 cS100a 1 0 0 0 0 0 0 0 0
## 20 cS103a 1 0 0 0 0 0 0 0 0
## 21 cS104a 1 0 0 0 0 0 0 0 0
## 22 cS107a 1 0 0 0 0 0 0 0 0
## 23 cS108a 1 0 0 0 0 0 0 0 0
## 24 cS109a 1 0 0 0 0 0 0 0 0
## 25 cS10a 1 0 0 0 0 0 0 0 0
## 26 cS113a 1 1 0 0 0 0 0 0 0
## 27 cS115a 1 0 0 0 0 0 0 0 0
## 28 cS116a 1 0 0 0 0 0 0 0 0
## 29 cS11a 1 0 0 0 0 0 0 0 0
## 30 cS129a 1 0 0 0 0 0 0 0 0
## 31 cS132a 1 1 0 0 0 1 0 0 1
## 32 cS142a 1 0 0 0 0 0 0 0 0
## 33 cS153a 1 1 0 0 0 0 0 0 0
## 34 cS157a 1 0 0 0 0 0 0 0 0
## 35 cS15a 1 0 0 0 0 0 0 0 0
## 36 cS162a 1 1 0 0 0 1 0 0 1
## 37 cS164a 1 0 0 0 0 0 0 0 0
## 38 cS165a 1 0 0 0 0 0 0 0 0
## 39 cS168a 1 0 1 1 1 1 0 0 0
## 40 cS172a 1 1 0 0 0 1 0 0 1
## 41 cS178a 1 1 0 0 0 1 0 0 1
## 42 cS184a 1 0 0 0 0 0 0 0 0
## 43 cS27b 1 0 0 0 0 0 0 0 0
## 44 cS28a 1 0 0 0 0 0 0 0 0
## 45 cS30a 1 0 0 0 0 0 0 0 0
## 46 cS33a 1 0 0 0 0 0 0 0 0
## 47 cS35a 1 0 0 0 0 0 0 0 0
## 48 cS37a 1 0 0 0 0 0 0 0 0
## 49 cS39c 1 0 0 0 0 0 0 0 0
## 50 cS45a 1 0 0 0 0 0 0 0 0
## 51 cS46a 1 0 0 0 0 0 0 0 0
## 52 cS4a 1 0 0 0 0 0 0 0 0
## 53 cS51a 1 1 0 0 0 1 0 0 1
## 54 cS53a 1 0 0 0 0 0 0 0 0
## 55 cS58a 1 0 0 0 0 0 0 0 0
## 56 cS60a 1 0 0 0 0 0 0 0 0
## 57 cS61a 1 0 0 0 0 0 0 0 0
## 58 cS63a 1 0 0 0 0 0 0 0 0
## 59 cS65a 1 0 0 0 0 0 0 0 0
## 60 cS66a 1 0 0 0 0 0 0 0 0
## 61 cS68a 1 0 0 0 0 0 0 0 0
## 62 cS6a 1 0 0 0 0 0 0 0 0
## 63 cS71a 1 0 0 0 0 0 0 0 0
## 64 cS71b 1 0 0 0 0 0 0 0 0
## 65 cS72c 1 1 0 0 0 1 0 0 1
## 66 cS76a 1 0 0 0 0 0 0 0 0
## 67 cS80a 1 0 1 1 1 1 0 0 0
## 68 cS83a 1 1 0 0 0 1 0 0 1
## 69 cS86a 1 0 0 1 1 0 0 1 0
## 70 cS86b 1 0 0 0 0 0 0 0 0
## 71 cS87a 1 0 0 0 0 0 0 0 0
## 72 cS88a 1 0 0 0 0 0 0 0 0
## 73 cS8b 1 0 0 0 0 0 0 0 0
## 74 cS91a 1 0 1 1 1 1 0 0 0
## 75 cS97a 1 0 0 0 0 0 0 0 0
## 76 cS99a 1 1 0 0 0 0 0 0 0
## 77 fM10a 1 0 0 0 0 0 0 0 0
## 78 fM16a 1 1 0 0 0 1 0 0 1
## 79 fM19a 1 0 0 0 0 0 0 0 0
## 80 fM21a 1 0 0 0 0 0 0 0 0
## 81 fM23b 1 0 0 0 0 0 0 0 0
## 82 fM24a 1 0 0 0 0 0 0 0 0
## 83 fM27b 1 0 0 0 0 0 0 0 0
## 84 fM29a 1 0 0 0 0 0 0 0 0
## 85 fM30a 1 0 1 1 1 0 0 0 0
## 86 fM31a 1 0 0 0 0 0 0 0 0
## 87 fM35a 1 0 0 0 0 0 0 0 0
## 88 fM40a 1 0 0 0 0 0 0 0 0
## 89 fM41b 1 0 0 0 0 0 0 0 0
## 90 fM48a 1 0 0 0 0 0 0 0 0
## 91 fM51a 1 0 0 0 0 0 0 0 0
## 92 fM54a 1 0 0 0 0 0 0 0 0
## 93 fM59a 1 0 0 0 0 0 0 0 0
## 94 fM60a 1 0 0 0 0 0 0 0 0
## 95 fS100a 1 0 0 0 0 0 0 0 0
## 96 fS101a 1 0 0 0 0 0 0 0 0
## 97 fS102a 1 0 0 0 0 0 0 0 0
## 98 fS10a 1 1 0 0 0 0 0 0 0
## 99 fS111a 1 0 0 0 0 0 0 0 0
## 100 fS117a 1 0 0 0 0 0 0 0 0
## 101 fS11a 1 1 0 0 0 0 0 0 0
## 102 fS121a 1 0 0 0 0 0 0 0 0
## 103 fS122a 1 0 1 1 1 1 1 0 0
## 104 fS128a 1 1 0 0 0 0 0 0 0
## 105 fS12a 1 1 0 0 0 0 0 0 0
## 106 fS133b 1 0 0 0 0 0 0 0 0
## 107 fS139a 1 0 0 0 0 0 0 0 0
## 108 fS13a 1 1 0 0 0 0 0 0 0
## 109 fS143a 1 0 0 0 0 0 0 0 0
## 110 fS144a 1 0 0 0 0 0 0 0 0
## 111 fS146a 1 0 0 0 0 0 0 0 0
## 112 fS148a 1 0 0 0 0 0 0 0 0
## 113 fS149a 1 0 0 0 0 0 0 0 0
## 114 fS14a 1 0 0 0 0 0 0 0 0
## 115 fS155a 1 0 0 0 0 0 0 0 0
## 116 fS157a 1 0 0 0 0 0 0 0 0
## 117 fS158a 1 0 0 0 0 0 0 0 0
## 118 fS159a 1 0 0 0 0 0 0 0 0
## 119 fS165a 1 0 0 0 0 0 0 0 0
## 120 fS170a 1 0 0 0 0 0 0 0 0
## 121 fS171a 1 0 0 0 0 0 0 0 0
## 122 fS174a 1 0 0 0 0 0 0 0 0
## 123 fS177a 1 0 0 0 0 0 0 0 0
## 124 fS190a 1 0 0 0 0 0 0 0 0
## 125 fS191a 1 0 0 1 1 0 0 0 0
## 126 fS24a 1 1 0 0 0 0 0 0 0
## 127 fS25a 1 0 0 0 0 0 0 0 0
## 128 fS34a 1 0 0 0 0 0 0 0 0
## 129 fS35a 1 0 0 0 0 0 0 0 0
## 130 fS37a 1 1 0 0 0 0 0 0 0
## 131 fS39a 1 1 0 0 0 0 0 0 0
## 132 fS41a 1 1 0 0 0 0 0 0 0
## 133 fS42a 1 0 0 0 0 0 0 0 0
## 134 fS46a 1 1 0 0 0 0 0 0 0
## 135 fS4a 1 0 0 0 0 0 0 0 0
## 136 fS50a 1 0 0 1 1 0 0 0 0
## 137 fS54a 1 0 0 1 1 0 0 0 0
## 138 fS56a 1 0 0 0 0 0 0 0 0
## 139 fS58a 1 0 0 0 0 0 0 0 0
## 140 fS62a 1 1 0 0 0 0 0 0 0
## 141 fS63b 1 1 0 0 0 0 0 0 0
## 142 fS64a 1 1 0 0 0 0 0 0 0
## 143 fS6a 1 0 0 0 0 0 0 0 0
## 144 fS70a 1 0 0 0 0 0 0 0 0
## 145 fS72b 1 0 0 1 1 0 0 0 0
## 146 fS73a 1 0 0 1 1 0 0 0 0
## 147 fS74a 1 1 0 0 0 0 0 0 0
## 148 fS79a 1 0 0 1 1 0 0 0 0
## 149 fS80a 1 0 0 0 0 0 0 0 0
## 150 fS81a 1 0 0 1 1 0 0 0 0
## 151 fS83a 1 0 1 1 1 1 1 0 0
## 152 fS84a 1 0 0 0 0 0 0 0 0
## 153 fS85a 1 0 1 1 1 1 0 0 0
## 154 fS86a 1 0 1 1 1 1 0 0 0
## 155 fS92a 1 0 0 0 0 0 0 0 0
## 156 fS93a 1 1 0 0 0 0 0 0 0
## 157 fS95a 1 0 0 0 0 0 0 0 0
## 158 fS97a 1 1 0 0 0 0 0 0 0
## 159 fS99a 1 1 0 0 0 0 0 0 0
## afaF-VII agg3A agg3B agg3C agg3D aggB aggC aggD aslA astA cesAB cesD cesD2
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 1 0 0 0 0
## 3 0 0 0 0 0 0 0 0 1 0 0 0 0
## 4 0 0 0 0 0 0 0 0 1 0 0 0 0
## 5 0 0 0 0 0 0 0 0 1 0 0 0 0
## 6 0 0 0 0 0 0 0 0 1 0 0 0 0
## 7 0 0 0 0 0 0 0 0 1 0 0 0 0
## 8 0 0 0 0 0 0 0 0 1 0 0 0 0
## 9 0 0 0 0 0 0 0 0 1 0 0 0 0
## 10 0 0 0 0 0 0 0 0 1 0 0 0 0
## 11 0 0 0 0 0 0 0 0 1 0 0 0 0
## 12 0 0 0 0 0 0 0 0 1 0 0 0 0
## 13 0 0 0 0 0 0 0 0 1 0 0 0 0
## 14 0 0 0 0 0 0 0 0 1 0 0 0 0
## 15 0 0 0 0 0 0 0 0 1 0 0 0 0
## 16 0 0 0 0 0 0 0 0 1 0 0 0 0
## 17 0 0 0 0 0 0 0 0 1 0 0 0 0
## 18 0 0 0 0 0 0 0 0 1 0 0 0 0
## 19 1 0 0 0 0 0 0 0 1 1 0 0 0
## 20 0 0 0 0 0 0 0 0 1 1 0 0 0
## 21 0 0 0 0 0 0 0 0 1 0 0 0 0
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 1 0 0 0 0
## 26 0 0 0 0 0 1 1 1 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0 1 1 0 0 0
## 29 0 0 0 0 0 0 0 0 1 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 0 0 0 0 0 1 0 0 0 0
## 32 0 0 0 0 0 0 0 0 0 0 0 0 0
## 33 0 0 0 0 0 0 0 0 1 1 0 0 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 0
## 35 0 0 0 0 0 0 0 0 1 1 0 0 0
## 36 0 0 0 0 0 0 0 0 1 0 0 0 0
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 0 0 0 0 0 1 0 0 0 0
## 39 0 0 0 0 0 0 0 0 1 0 0 0 0
## 40 0 0 0 0 0 0 0 0 1 0 0 0 0
## 41 0 0 0 0 0 0 0 0 1 0 0 0 0
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 1 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 0 0 0 0 0 0 1 0 0 0 0
## 48 0 0 0 0 0 0 0 0 0 0 0 0 0
## 49 0 0 0 0 0 0 0 0 1 0 0 0 0
## 50 0 0 0 0 0 0 0 0 1 0 0 0 0
## 51 0 0 0 0 0 0 0 0 1 0 1 1 1
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 0 0 0 0 0 1 0 0 0 0
## 54 0 0 0 0 0 0 0 0 1 0 0 0 0
## 55 1 0 0 0 0 0 0 0 1 1 0 0 0
## 56 0 0 0 0 0 0 0 0 1 0 0 0 0
## 57 0 0 0 0 0 0 0 0 1 0 0 0 0
## 58 0 0 0 0 0 0 0 0 1 0 0 0 0
## 59 0 0 0 0 0 0 0 0 1 0 0 0 0
## 60 0 0 0 0 0 0 0 0 1 0 0 0 0
## 61 0 0 0 0 0 0 0 0 1 0 0 0 0
## 62 0 0 0 0 0 0 0 0 0 0 0 0 0
## 63 1 0 0 0 0 0 0 0 1 1 0 0 0
## 64 0 0 0 0 0 0 0 0 1 0 1 1 1
## 65 0 0 0 0 0 0 0 0 1 0 0 0 0
## 66 0 0 0 0 0 0 0 0 1 0 0 0 0
## 67 0 0 0 0 0 0 0 0 1 0 0 0 0
## 68 0 0 0 0 0 0 0 0 1 0 0 0 0
## 69 0 0 0 0 0 0 0 0 1 0 0 0 0
## 70 0 0 0 0 0 0 0 0 1 0 0 0 0
## 71 0 0 0 0 0 0 0 0 1 0 0 0 0
## 72 0 0 0 0 0 0 0 0 1 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 0
## 74 0 0 0 0 0 0 0 0 1 0 0 0 0
## 75 0 0 0 0 0 0 0 0 0 0 0 0 0
## 76 0 0 0 0 0 1 1 1 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 1 0 0 0 0
## 78 0 0 0 0 0 0 0 0 1 0 0 0 0
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 1 0 0 0 0
## 81 0 0 0 0 0 0 0 0 1 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 1 0 0 0 0
## 84 0 0 0 0 0 0 0 0 0 0 1 1 1
## 85 0 0 0 0 0 0 0 0 1 0 0 0 0
## 86 0 0 0 0 0 0 0 0 1 0 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 0 0 0 0 0 0 0 0 1 0 0 0 0
## 89 0 0 0 0 0 0 0 0 1 0 0 0 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 1 0 0 0 0
## 93 0 0 0 0 0 0 0 0 1 0 0 0 0
## 94 0 0 0 0 0 0 0 0 1 0 0 0 0
## 95 0 0 0 0 0 0 0 0 0 0 1 1 1
## 96 0 0 0 0 0 0 0 0 1 0 0 0 0
## 97 0 0 0 0 0 0 0 0 1 0 0 0 0
## 98 0 0 1 1 1 0 0 0 1 0 0 0 0
## 99 0 0 0 0 0 0 0 0 1 0 0 0 0
## 100 0 0 0 0 0 0 0 0 1 1 0 0 0
## 101 0 0 1 1 1 0 0 0 1 0 0 0 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 0 0 0 0 0 1 0 0 0 0
## 104 0 0 0 0 0 1 1 1 1 0 0 0 0
## 105 0 0 1 1 1 0 0 0 1 0 0 0 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 1 0 0 0 0
## 108 0 0 1 1 1 0 0 0 1 0 0 0 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 0
## 111 0 0 0 0 0 0 0 0 0 0 0 0 0
## 112 0 0 0 0 0 0 0 0 1 0 0 0 0
## 113 0 0 0 0 0 0 0 0 1 0 0 0 0
## 114 0 0 0 0 0 0 0 0 0 0 1 1 1
## 115 0 0 0 0 0 0 0 0 0 0 1 1 1
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 1 0 0 0 0
## 118 0 0 0 0 0 0 0 0 1 0 0 0 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 0 0 0 0 0 0 0 0 0 0 1 1 1
## 123 0 0 0 0 0 0 0 0 0 0 1 1 1
## 124 0 0 0 0 0 0 0 0 1 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 0
## 126 0 1 1 1 1 0 0 0 0 0 0 0 0
## 127 0 0 0 0 0 0 0 0 0 0 1 1 1
## 128 0 0 0 0 0 0 0 0 0 0 0 0 0
## 129 0 0 0 0 0 0 0 0 1 0 0 0 0
## 130 0 0 1 1 1 0 0 0 1 0 0 0 0
## 131 0 0 1 1 1 0 0 0 1 0 0 0 0
## 132 0 0 1 1 1 0 0 0 1 0 0 0 0
## 133 0 0 0 0 0 0 0 0 1 0 0 0 0
## 134 0 0 1 1 1 0 0 0 1 0 0 0 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 0
## 136 0 0 0 0 0 0 0 0 0 0 0 0 0
## 137 0 0 0 0 0 0 0 0 0 0 0 0 0
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 1 1 1 0 0 0 1 0 0 0 0
## 141 0 0 1 1 1 0 0 0 1 0 0 0 0
## 142 0 0 1 1 1 0 0 0 1 0 0 0 0
## 143 0 0 0 0 0 0 0 0 1 0 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 0
## 145 0 0 0 0 0 0 0 0 0 0 0 0 0
## 146 0 0 0 0 0 0 0 0 0 0 0 0 0
## 147 0 0 1 1 1 0 0 0 1 0 0 0 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 0
## 149 0 0 0 0 0 0 0 0 0 0 1 1 1
## 150 0 0 0 0 0 0 0 0 0 0 0 0 0
## 151 0 0 0 0 0 0 0 0 1 0 0 0 0
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 0 0 0 0 0 1 0 0 0 0
## 154 0 0 0 0 0 0 0 0 1 0 0 0 0
## 155 0 0 0 0 0 0 0 0 1 0 0 0 0
## 156 0 0 1 1 1 0 0 0 1 0 0 0 0
## 157 0 0 0 0 0 0 0 0 0 0 1 1 1
## 158 0 0 1 1 1 0 0 0 1 0 0 0 0
## 159 0 0 1 1 1 0 0 0 1 0 0 0 0
## cesL cesT chuA chuS chuT chuU chuV chuW chuX chuY cif cnf1 daaF draA draB
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 7 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0
## 10 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0
## 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 20 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 21 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0
## 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 33 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 35 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 36 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0
## 39 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 40 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 41 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 50 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 51 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 54 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 57 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 58 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 64 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0
## 65 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 67 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 68 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 69 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 70 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 74 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 78 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 84 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 85 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0
## 86 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 89 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 95 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 96 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0
## 97 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0
## 98 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 101 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 1 1 1 1 1 0 1 0 0 1 0 0
## 104 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 105 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 108 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 114 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 115 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 118 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 123 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 127 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 130 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 131 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 132 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 136 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 137 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 141 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 142 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 145 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 146 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 147 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 149 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 150 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
## 151 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 154 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0
## 155 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
## 156 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 157 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 158 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## 159 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0
## draC draD draE2 draP eae eltA eltB entA entB entC entD entE entF entS escC
## 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 2 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 3 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 4 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 5 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 6 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 7 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 8 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 9 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 10 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 11 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 12 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 13 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 14 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 15 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 16 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 17 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 18 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 19 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 20 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 21 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 22 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 23 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 24 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 25 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 26 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 27 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 28 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 29 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 30 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 31 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 32 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 33 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 34 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 35 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 36 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 37 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 38 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 39 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 40 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 41 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 42 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 43 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 44 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 45 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 46 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 47 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 48 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 49 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 50 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 51 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
## 52 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 53 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 54 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 55 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 56 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 57 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 58 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 59 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 60 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 61 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 62 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 63 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 64 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
## 65 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 66 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 67 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 68 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 69 0 1 0 1 0 0 0 1 1 1 1 1 1 1 0
## 70 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 71 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 72 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 73 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 74 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 75 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 76 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 77 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 78 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 79 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 80 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 81 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 82 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 83 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 84 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 85 0 1 0 1 0 0 0 1 1 1 1 1 1 1 0
## 86 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 87 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 88 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 89 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 90 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 91 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 92 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 93 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 94 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 95 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 96 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 97 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 98 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 99 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 100 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 101 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 102 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 103 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 104 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 105 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 106 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 107 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 108 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 109 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0
## 110 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 111 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 112 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 113 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 114 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 115 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 116 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 117 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 118 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 119 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 120 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 121 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 122 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 123 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 124 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 125 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 126 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 127 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 128 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 129 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 130 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 131 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 132 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 133 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 134 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 135 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 136 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 137 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 138 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 139 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 140 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 141 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 142 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 143 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 144 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 145 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 146 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 147 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 148 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 149 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 150 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
## 151 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 152 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 153 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 154 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0
## 155 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 156 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 157 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1
## 158 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## 159 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
## escD escE escF escG escI escJ escL escN escO escP escR escS escT escU escV
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 51 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 64 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
## 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 69 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 74 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 84 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 86 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 89 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 95 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 105 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 114 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 115 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 118 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 123 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 127 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 132 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 137 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 142 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 149 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 151 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 157 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 158 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## espA espB espD espG espJ espL1 espL4 espM2 espR1 espR3 espW espX1 espX2
## 1 0 0 0 0 0 1 0 0 1 0 0 1 0
## 2 0 0 0 0 0 0 0 0 1 0 0 1 0
## 3 0 0 0 0 0 0 0 0 1 0 0 1 0
## 4 0 0 0 0 0 0 0 0 1 0 0 1 0
## 5 0 0 0 0 0 0 0 0 1 0 0 1 0
## 6 0 0 0 0 0 1 1 0 1 0 0 0 0
## 7 0 0 0 0 0 0 0 0 0 0 0 0 0
## 8 0 0 0 0 0 0 0 0 1 0 0 1 0
## 9 0 0 0 0 0 1 0 0 1 0 0 1 0
## 10 0 0 0 0 0 1 0 0 1 0 0 1 0
## 11 0 0 0 0 0 1 1 0 1 0 0 0 0
## 12 0 0 0 0 0 0 0 0 1 0 0 1 0
## 13 0 0 0 0 0 1 1 0 1 0 0 1 0
## 14 0 0 0 0 0 0 0 0 1 0 0 1 0
## 15 0 0 0 0 0 0 0 0 1 0 0 1 0
## 16 0 0 0 0 0 0 0 0 1 0 0 1 0
## 17 0 0 0 0 0 1 1 0 1 0 0 0 0
## 18 0 0 0 0 0 1 1 0 1 0 0 0 0
## 19 0 0 0 0 0 1 1 0 1 0 0 1 0
## 20 0 0 0 0 0 0 0 0 0 0 0 0 0
## 21 0 0 0 0 0 0 0 0 0 0 0 0 0
## 22 0 0 0 0 0 1 0 0 1 0 0 1 0
## 23 0 0 0 0 0 1 0 0 1 0 0 1 0
## 24 0 0 0 0 0 1 0 0 1 0 0 1 0
## 25 0 0 0 0 0 1 1 0 1 0 0 1 0
## 26 0 0 0 0 0 1 0 0 1 0 0 0 0
## 27 0 0 0 0 0 1 0 0 1 0 0 1 0
## 28 0 0 0 0 0 1 0 0 1 0 0 0 0
## 29 0 0 0 0 0 1 1 0 1 0 0 1 0
## 30 0 0 0 0 0 1 0 0 1 0 0 1 0
## 31 0 0 0 0 0 1 1 0 1 0 0 1 0
## 32 0 0 0 0 0 1 0 0 1 0 0 1 0
## 33 0 0 0 0 0 1 1 0 1 0 0 1 1
## 34 0 0 0 0 0 1 0 0 1 0 0 1 0
## 35 0 0 0 0 0 0 0 0 0 0 0 0 0
## 36 0 0 0 0 0 1 1 0 1 0 0 1 0
## 37 0 0 0 0 0 1 0 0 1 0 0 1 0
## 38 0 0 0 0 0 1 0 0 1 0 0 0 0
## 39 0 0 0 0 0 0 0 0 0 0 0 0 0
## 40 0 0 0 0 0 1 1 0 1 0 0 1 0
## 41 0 0 0 0 0 1 1 0 1 0 0 1 0
## 42 0 0 0 0 0 1 0 0 1 0 0 1 0
## 43 0 0 0 0 0 1 0 0 1 0 0 1 0
## 44 0 0 0 0 0 0 0 0 1 0 0 1 0
## 45 0 0 0 0 0 1 0 0 1 0 0 1 0
## 46 0 0 0 0 0 1 0 0 1 0 0 1 0
## 47 0 0 0 0 0 0 0 0 0 0 0 0 0
## 48 0 0 0 0 0 1 0 0 1 0 0 1 0
## 49 0 0 0 0 0 1 1 0 1 0 0 1 0
## 50 0 0 0 0 0 0 0 0 0 0 0 0 0
## 51 0 0 0 1 1 1 0 1 1 0 0 0 0
## 52 0 0 0 0 0 1 0 0 1 0 0 1 0
## 53 0 0 0 0 0 1 1 0 1 0 0 1 0
## 54 0 0 0 0 0 0 0 0 0 0 0 0 0
## 55 0 0 0 0 0 1 1 0 1 0 0 1 0
## 56 0 0 0 0 0 1 1 0 1 0 0 1 0
## 57 0 0 0 0 0 0 0 0 0 0 0 0 0
## 58 0 0 0 0 0 0 0 0 0 0 0 0 0
## 59 0 0 0 0 0 1 1 0 1 0 0 1 0
## 60 0 0 0 0 0 1 1 0 1 0 0 1 0
## 61 0 0 0 0 0 1 1 0 1 0 0 1 0
## 62 0 0 0 0 0 1 0 0 1 0 0 1 0
## 63 0 0 0 0 0 1 1 0 1 0 0 1 0
## 64 0 0 0 1 1 1 0 1 1 0 0 0 0
## 65 0 0 0 0 0 1 1 0 1 0 0 1 0
## 66 0 0 0 0 0 1 1 0 1 0 0 1 0
## 67 0 0 0 0 0 0 0 0 0 0 0 0 0
## 68 0 0 0 0 0 1 1 0 1 0 0 1 0
## 69 0 0 0 0 0 0 0 0 0 0 0 0 0
## 70 0 0 0 0 0 0 0 0 0 0 0 0 0
## 71 0 0 0 0 0 0 0 0 1 0 0 1 0
## 72 0 0 0 0 0 0 0 0 1 0 0 1 0
## 73 0 0 0 0 0 1 0 0 1 0 0 1 0
## 74 0 0 0 0 0 0 0 0 0 0 0 0 0
## 75 0 0 0 0 0 1 0 0 1 0 0 1 0
## 76 0 0 0 0 0 1 0 0 1 0 0 0 0
## 77 0 0 0 0 0 1 1 0 1 0 0 1 0
## 78 0 0 0 0 0 1 1 0 1 0 0 1 0
## 79 0 0 0 0 0 1 0 0 1 0 0 1 0
## 80 0 0 0 0 0 1 1 0 1 0 0 1 0
## 81 0 0 0 0 0 0 0 0 1 0 0 1 0
## 82 0 0 0 0 0 0 0 0 1 0 0 1 0
## 83 0 0 0 0 0 1 1 0 1 0 0 1 0
## 84 0 1 1 1 0 1 0 0 1 0 0 1 0
## 85 0 0 0 0 0 1 0 0 1 0 0 0 0
## 86 0 0 0 0 0 1 1 0 1 0 0 1 0
## 87 0 0 0 0 0 1 0 0 1 0 0 1 0
## 88 0 0 0 0 0 0 0 0 0 0 0 0 0
## 89 0 0 0 0 0 0 0 0 0 0 0 0 0
## 90 0 0 0 0 0 1 0 0 1 0 0 1 0
## 91 0 0 0 0 0 1 0 0 1 0 0 1 0
## 92 0 0 0 0 0 0 0 0 1 0 0 1 0
## 93 0 0 0 0 0 1 1 0 1 0 0 1 0
## 94 0 0 0 0 0 1 1 0 1 0 0 1 0
## 95 1 1 1 1 0 1 0 0 1 1 0 1 0
## 96 0 0 0 0 0 1 1 0 1 0 0 1 0
## 97 0 0 0 0 0 1 0 0 1 0 0 1 0
## 98 0 0 0 0 0 1 1 0 1 0 0 1 0
## 99 0 0 0 0 0 1 1 0 1 0 0 1 0
## 100 0 0 0 0 0 0 0 0 0 0 0 0 0
## 101 0 0 0 0 0 1 1 0 1 0 0 1 0
## 102 0 0 0 0 0 1 0 0 1 0 0 1 0
## 103 0 0 0 0 0 1 0 0 1 0 0 1 0
## 104 0 0 0 0 0 1 1 0 1 0 0 1 0
## 105 0 0 0 0 0 1 1 0 1 0 0 1 0
## 106 0 0 0 0 0 1 0 0 1 0 0 1 0
## 107 0 0 0 0 0 1 1 0 1 0 0 1 0
## 108 0 0 0 0 0 1 1 0 1 0 0 1 0
## 109 0 0 0 0 0 1 0 0 1 0 0 1 0
## 110 0 0 0 0 0 1 0 0 1 0 0 1 0
## 111 0 0 0 0 0 1 0 0 1 0 0 1 0
## 112 0 0 0 0 0 1 1 0 1 0 0 1 0
## 113 0 0 0 0 0 1 1 0 1 0 0 1 0
## 114 1 1 1 1 0 1 0 0 1 1 0 1 0
## 115 1 1 1 1 0 1 0 0 1 1 0 1 0
## 116 0 0 0 0 0 1 0 0 1 0 0 1 0
## 117 0 0 0 0 0 1 1 0 1 0 0 0 0
## 118 0 0 0 0 0 1 1 0 1 0 0 0 0
## 119 0 0 0 0 0 1 0 0 1 0 0 1 0
## 120 0 0 0 0 0 1 0 0 1 0 0 1 0
## 121 0 0 0 0 0 1 0 0 1 0 0 1 0
## 122 1 1 1 1 0 1 0 0 1 1 0 1 0
## 123 1 1 1 1 0 1 0 0 1 1 0 1 0
## 124 0 0 0 0 0 1 1 0 1 0 0 1 0
## 125 0 0 0 0 0 1 0 0 1 0 0 1 0
## 126 0 0 0 0 0 1 0 0 1 0 0 1 0
## 127 1 1 1 1 0 1 0 1 1 1 1 1 0
## 128 0 0 0 0 0 1 0 0 1 0 0 1 0
## 129 0 0 0 0 0 1 1 0 1 0 0 1 0
## 130 0 0 0 0 0 1 1 0 1 0 0 1 0
## 131 0 0 0 0 0 1 1 0 1 0 0 1 0
## 132 0 0 0 0 0 1 1 0 1 0 0 1 0
## 133 0 0 0 0 0 1 1 0 1 0 0 1 0
## 134 0 0 0 0 0 1 1 0 1 0 0 1 0
## 135 0 0 0 0 0 1 0 0 1 0 0 1 0
## 136 0 0 0 0 0 1 0 0 1 0 0 1 0
## 137 0 0 0 0 0 1 0 0 1 0 0 1 0
## 138 0 0 0 0 0 1 0 0 1 0 0 1 0
## 139 0 0 0 0 0 1 0 0 1 0 0 1 0
## 140 0 0 0 0 0 1 1 0 1 0 0 1 0
## 141 0 0 0 0 0 1 1 0 1 0 0 1 0
## 142 0 0 0 0 0 1 1 0 1 0 0 1 0
## 143 0 0 0 0 0 1 1 0 1 0 0 1 0
## 144 0 0 0 0 0 1 0 0 1 0 0 1 0
## 145 0 0 0 0 0 1 0 0 1 0 0 1 0
## 146 0 0 0 0 0 1 0 0 1 0 0 1 0
## 147 0 0 0 0 0 1 1 0 1 0 0 1 0
## 148 0 0 0 0 0 1 0 0 1 0 0 1 0
## 149 1 1 1 1 0 1 0 1 1 1 1 1 0
## 150 0 0 0 0 0 1 0 0 1 0 0 1 0
## 151 0 0 0 0 0 0 0 0 0 0 0 0 0
## 152 0 0 0 0 0 1 0 0 1 0 0 1 0
## 153 0 0 0 0 0 0 0 0 0 0 0 0 0
## 154 0 0 0 0 0 0 0 0 0 0 0 0 0
## 155 0 0 0 0 0 0 0 0 0 0 0 0 0
## 156 0 0 0 0 0 1 1 0 1 0 0 1 0
## 157 1 1 1 1 0 1 0 1 1 1 1 1 0
## 158 0 0 0 0 0 1 1 0 1 0 0 1 0
## 159 0 0 0 0 0 1 1 0 1 0 0 1 0
## espX4 espX5 espY1 espY2 espY3 espY4 etgA etpB faeD faeE faeF faeJ fdeC fepA
## 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1
## 2 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 3 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 4 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 5 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 6 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 7 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 8 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 9 1 0 1 1 0 0 0 0 0 0 0 0 1 1
## 10 1 0 1 1 0 0 0 0 0 0 0 0 1 1
## 11 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 12 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 13 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 14 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 15 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 16 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 17 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 18 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 19 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 20 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 21 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 22 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 23 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 24 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 25 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 26 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 27 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 28 1 0 0 1 0 0 0 0 0 0 0 0 1 1
## 29 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 30 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 31 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 32 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 33 1 1 0 0 1 1 0 0 0 0 0 0 1 1
## 34 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 35 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 36 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 37 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 38 1 0 0 1 0 0 0 0 0 0 0 0 1 1
## 39 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 40 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 41 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 42 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 43 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 44 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 45 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 46 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 47 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 48 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 49 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 50 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 51 1 1 0 0 0 0 1 0 0 0 0 0 1 1
## 52 0 1 0 0 0 0 0 0 0 0 0 0 1 1
## 53 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 54 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 55 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 56 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 57 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 58 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 59 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 60 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 61 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 62 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 63 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 64 1 1 0 0 0 0 1 0 0 0 0 0 1 1
## 65 1 1 1 1 1 1 0 0 1 1 1 1 1 1
## 66 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 67 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 68 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 69 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 70 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 71 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 72 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 73 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 74 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 75 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 76 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 77 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 78 1 1 1 1 1 1 0 0 0 1 1 1 1 1
## 79 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 80 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 81 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 82 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 83 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 84 1 1 0 0 0 0 1 0 0 0 0 0 1 1
## 85 1 0 0 1 0 0 0 0 0 0 0 0 1 1
## 86 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 87 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 88 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 89 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 90 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 91 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 92 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 93 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 94 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 95 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 96 1 1 0 0 1 1 0 0 0 0 0 0 1 1
## 97 1 0 1 1 0 0 0 0 0 0 0 0 1 1
## 98 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 99 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 100 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 101 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 102 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 103 1 0 1 1 0 0 0 0 0 0 0 0 1 1
## 104 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 105 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 106 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 107 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 108 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 109 1 1 0 0 0 0 0 1 0 0 0 0 1 1
## 110 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 111 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 112 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 113 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 114 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 115 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 116 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 117 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 118 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 119 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 120 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 121 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 122 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 123 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 124 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 125 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 126 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 127 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 128 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 129 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 130 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 131 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 132 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 133 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 134 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 135 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 136 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 137 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 138 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 139 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 140 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 141 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 142 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 143 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 144 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 145 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 146 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 147 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 148 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 149 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 150 1 1 0 0 0 0 0 0 0 0 0 0 1 1
## 151 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 152 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## 153 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 154 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 155 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## 156 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 157 1 1 0 0 0 0 1 0 0 0 0 0 0 1
## 158 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## 159 1 1 1 1 1 1 0 0 0 0 0 0 1 1
## fepB fepC fepD fepG fes fimA fimB fimC fimD fimE fimF fimG fimH fimI focA
## 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 2 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 3 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 4 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 5 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 6 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 8 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 9 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 10 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 11 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 12 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 13 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 14 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 15 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 16 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 17 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 18 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 20 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 21 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 22 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 23 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 24 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 25 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 26 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 27 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 28 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 29 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 30 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 31 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 32 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 34 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 35 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 36 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 37 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 38 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 39 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 40 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 41 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 42 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 43 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 44 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 45 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 46 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 47 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 48 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 49 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 50 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 51 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 52 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0
## 53 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 54 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 55 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 56 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 57 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 58 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 59 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 60 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 61 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 62 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 63 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 64 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 65 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 66 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 67 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 68 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 69 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 70 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 71 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 72 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 73 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 74 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 75 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 76 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 77 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 78 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 79 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 80 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 81 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 82 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0
## 83 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 84 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 85 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 86 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 87 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 88 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 89 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 90 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 91 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 92 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0
## 93 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 94 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 95 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 96 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 97 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 98 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 99 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 100 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 101 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 102 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 103 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 104 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 105 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 106 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 107 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 108 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 109 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 110 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 111 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 112 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 113 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 114 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 115 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 116 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 117 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 118 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 119 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 120 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 122 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 123 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 124 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 125 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 126 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 127 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 128 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 129 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 130 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 131 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 132 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 133 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
## 134 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 135 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 136 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 137 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 138 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 139 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 140 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 141 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 142 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 143 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 144 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 145 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 146 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 147 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 148 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 149 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 150 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 151 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 152 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 153 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 154 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 155 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
## 156 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 157 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0
## 158 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## 159 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
## focC focD focG fyuA gspC gspD gspE gspF gspG gspH gspI gspJ gspK gspL gspM
## 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 10 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 18 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 19 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 20 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 21 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 22 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 23 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 24 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 25 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 26 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 27 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 28 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 29 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 30 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 31 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 32 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 33 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 34 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 35 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 36 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 37 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 38 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 39 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 40 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 41 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 42 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 43 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 46 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 47 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1
## 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 49 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 50 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 51 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 52 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 53 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 54 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 55 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 56 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 57 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 58 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 59 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 60 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 61 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 62 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 63 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 64 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 65 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 66 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 67 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 68 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 69 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 70 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 74 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 75 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 76 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 77 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 78 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 79 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 80 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
## 83 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
## 84 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 85 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 86 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 87 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 88 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 89 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 90 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 91 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
## 94 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
## 95 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 96 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 97 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 98 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 101 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 102 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 103 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1
## 104 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 105 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 106 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 107 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 108 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 109 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 110 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 111 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 112 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 113 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 114 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 115 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 116 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 117 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 118 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 119 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 120 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 121 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 122 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 123 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 124 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 125 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 126 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 127 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 128 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 129 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 130 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 131 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 132 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 135 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 136 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 137 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 140 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 141 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 142 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 143 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## 144 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 145 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 146 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 147 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 148 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 149 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 150 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 151 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 154 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 155 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 156 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 157 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
## 158 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## 159 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## gtrA hlyA hlyB hlyC hlyD iroB iroC iroD iroE iroN irp1 irp2 iucA iucB iucC
## 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 7 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 10 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 11 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 18 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 19 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 20 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 21 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 32 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 35 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 36 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 39 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 40 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 41 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 48 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 49 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 50 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 51 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 54 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 55 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 56 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 57 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 58 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 59 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 60 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 61 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 62 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 63 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 64 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
## 65 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 66 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 67 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 68 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 69 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 70 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 74 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 75 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 78 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 84 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 86 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1
## 89 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 96 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 97 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1
## 98 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 101 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 104 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 105 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 108 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 111 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 112 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 113 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 118 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 128 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 129 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 130 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 131 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 132 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 136 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 137 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 141 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 142 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 143 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 145 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 146 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 147 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 149 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 150 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
## 151 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 154 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 155 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
## 156 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 158 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## 159 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## iucD iutA kpsD kpsM kpsT map nleA nleA/espI nleB2 nleG7' nleH1 ompA papB
## 1 1 0 0 0 0 0 0 0 0 0 0 1 0
## 2 0 0 0 0 0 0 0 0 0 0 0 1 0
## 3 0 0 0 0 0 0 0 0 0 0 0 1 0
## 4 0 0 0 0 0 0 0 0 0 0 0 1 0
## 5 0 0 0 0 0 0 0 0 0 0 0 1 0
## 6 1 1 0 0 0 0 0 0 0 0 0 1 0
## 7 1 0 1 1 0 0 0 0 0 0 0 1 0
## 8 0 0 0 0 0 0 0 0 0 0 0 1 0
## 9 1 0 1 1 0 0 0 0 0 0 0 1 1
## 10 1 0 1 1 0 0 0 0 0 0 0 1 1
## 11 1 1 0 0 0 0 0 0 0 0 0 1 0
## 12 0 0 0 0 0 0 0 0 0 0 0 1 0
## 13 0 0 0 0 0 0 0 0 0 0 0 1 0
## 14 0 0 0 0 0 0 0 0 0 0 0 1 0
## 15 0 0 0 0 0 0 0 0 0 0 0 1 0
## 16 0 0 0 0 0 0 0 0 0 0 0 1 0
## 17 1 1 0 0 0 0 0 0 0 0 0 1 0
## 18 1 1 0 0 0 0 0 0 0 0 0 1 0
## 19 1 0 0 0 0 0 0 0 0 0 0 1 0
## 20 1 0 1 1 0 0 0 0 0 0 0 1 1
## 21 1 0 1 1 0 0 0 0 0 0 0 1 1
## 22 0 0 0 0 0 0 0 0 0 0 0 1 0
## 23 0 0 0 0 0 0 0 0 0 0 0 1 0
## 24 0 0 0 0 0 0 0 0 0 0 0 1 0
## 25 0 0 0 0 0 0 0 0 0 0 0 1 0
## 26 0 0 0 0 0 0 0 0 0 0 0 1 0
## 27 0 0 0 0 0 0 0 0 0 0 0 1 0
## 28 0 0 1 0 0 0 0 0 0 0 0 1 0
## 29 0 0 0 0 0 0 0 0 0 0 0 1 0
## 30 0 0 0 0 0 0 0 0 0 0 0 1 0
## 31 0 0 1 1 0 0 0 0 0 0 0 1 0
## 32 1 1 0 0 0 0 0 0 0 0 0 1 0
## 33 0 0 1 1 0 0 0 0 0 0 0 1 0
## 34 1 1 0 0 0 0 0 0 0 0 0 1 0
## 35 1 0 1 1 0 0 0 0 0 0 0 1 1
## 36 0 0 1 1 0 0 0 0 0 0 0 1 0
## 37 0 0 0 0 0 0 0 0 0 0 0 1 0
## 38 0 0 1 0 0 0 0 0 0 0 0 1 0
## 39 1 0 1 1 0 0 0 0 0 0 0 1 0
## 40 0 0 1 1 0 0 0 0 0 0 0 1 0
## 41 0 0 1 1 0 0 0 0 0 0 0 1 0
## 42 0 0 0 0 0 0 0 0 0 0 0 1 0
## 43 0 0 0 0 0 0 0 0 0 0 0 1 0
## 44 0 0 0 0 0 0 0 0 0 0 0 1 0
## 45 0 0 0 0 0 0 0 0 0 0 0 1 0
## 46 0 0 0 0 0 0 0 0 0 0 0 1 0
## 47 1 0 1 1 0 0 0 0 0 0 0 1 1
## 48 1 1 0 0 0 0 0 0 0 0 0 1 0
## 49 1 0 0 0 0 0 0 0 0 0 0 1 0
## 50 1 0 1 1 0 0 0 0 0 0 0 1 0
## 51 0 0 0 0 0 0 1 1 1 0 1 1 0
## 52 0 0 0 0 0 0 0 0 0 0 0 1 0
## 53 0 0 1 1 0 0 0 0 0 0 0 1 0
## 54 1 0 1 1 0 0 0 0 0 0 0 1 1
## 55 1 0 0 0 0 0 0 0 0 0 0 1 0
## 56 1 0 0 0 0 0 0 0 0 0 0 1 0
## 57 1 0 1 1 0 0 0 0 0 0 0 1 1
## 58 1 0 1 1 0 0 0 0 0 0 0 1 1
## 59 1 0 0 0 0 0 0 0 0 0 0 1 0
## 60 1 0 0 0 0 0 0 0 0 0 0 1 0
## 61 1 0 0 0 0 0 0 0 0 0 0 1 0
## 62 1 1 0 0 0 0 0 0 0 0 0 1 0
## 63 1 0 0 0 0 0 0 0 0 0 0 1 0
## 64 0 0 0 0 0 0 1 1 1 0 1 1 0
## 65 0 0 1 1 0 0 0 0 0 0 0 1 0
## 66 1 0 0 0 0 0 0 0 0 0 0 1 0
## 67 1 0 1 1 0 0 0 0 0 0 0 1 0
## 68 0 0 1 1 0 0 0 0 0 0 0 1 0
## 69 1 0 1 0 0 0 0 0 0 0 0 1 0
## 70 1 0 1 1 0 0 0 0 0 0 0 1 1
## 71 0 0 0 0 0 0 0 0 0 0 0 1 0
## 72 0 0 0 0 0 0 0 0 0 0 0 1 0
## 73 1 1 0 0 0 0 0 0 0 0 0 1 0
## 74 1 0 1 1 0 0 0 0 0 0 0 1 0
## 75 1 1 0 0 0 0 0 0 0 0 0 1 0
## 76 0 0 0 0 0 0 0 0 0 0 0 1 0
## 77 0 0 0 0 0 0 0 0 0 0 0 1 0
## 78 0 0 1 1 0 0 0 0 0 0 0 1 0
## 79 0 0 0 0 0 0 0 0 0 0 0 1 0
## 80 0 0 0 0 0 0 0 0 0 0 0 1 0
## 81 0 0 0 0 0 0 0 0 0 0 0 1 0
## 82 0 0 0 0 0 0 0 0 0 0 0 1 0
## 83 0 0 0 0 0 0 0 0 0 0 0 1 0
## 84 0 0 0 0 0 0 0 0 0 0 0 1 0
## 85 0 0 1 0 0 0 0 0 0 0 0 1 0
## 86 0 0 0 0 0 0 0 0 0 0 0 1 0
## 87 0 0 0 0 0 0 0 0 0 0 0 1 0
## 88 1 0 1 1 0 0 0 0 0 0 0 1 0
## 89 1 0 1 1 0 0 0 0 0 0 0 1 0
## 90 0 0 0 0 0 0 0 0 0 0 0 1 0
## 91 0 0 0 0 0 0 0 0 0 0 0 1 0
## 92 0 0 0 0 0 0 0 0 0 0 0 1 0
## 93 0 0 0 0 0 0 0 0 0 0 0 1 0
## 94 0 0 0 0 0 0 0 0 0 0 0 1 0
## 95 0 0 0 0 0 1 0 0 0 1 0 1 0
## 96 1 0 1 1 1 0 0 0 0 0 0 1 0
## 97 1 0 1 1 0 0 0 0 0 0 0 1 1
## 98 0 0 1 1 0 0 0 0 0 0 0 1 0
## 99 0 0 0 0 0 0 0 0 0 0 0 1 0
## 100 1 0 1 1 0 0 0 0 0 0 0 1 1
## 101 0 0 1 1 0 0 0 0 0 0 0 1 0
## 102 0 0 0 0 0 0 0 0 0 0 0 1 0
## 103 1 0 1 1 0 0 0 0 0 0 0 1 0
## 104 0 0 1 1 0 0 0 0 0 0 0 1 0
## 105 0 0 1 1 0 0 0 0 0 0 0 1 0
## 106 0 0 0 0 0 0 0 0 0 0 0 1 0
## 107 0 0 0 0 0 0 0 0 0 0 0 1 0
## 108 0 0 1 1 0 0 0 0 0 0 0 1 0
## 109 0 0 0 0 0 0 0 0 0 0 0 1 0
## 110 1 1 0 0 0 0 0 0 0 0 0 1 0
## 111 1 1 0 0 0 0 0 0 0 0 0 1 0
## 112 1 0 0 0 0 0 0 0 0 0 0 1 0
## 113 0 0 0 0 0 0 0 0 0 0 0 1 0
## 114 0 0 0 0 0 1 0 0 0 1 0 1 0
## 115 0 0 0 0 0 1 0 0 0 0 0 1 0
## 116 0 0 0 0 0 0 0 0 0 0 0 1 0
## 117 1 1 0 0 0 0 0 0 0 0 0 1 0
## 118 1 1 0 0 0 0 0 0 0 0 0 1 0
## 119 0 0 0 0 0 0 0 0 0 0 0 1 0
## 120 0 0 0 0 0 0 0 0 0 0 0 1 0
## 121 0 0 0 0 0 0 0 0 0 0 0 1 0
## 122 0 0 0 0 0 1 0 0 0 1 0 1 0
## 123 0 0 0 0 0 1 0 0 0 1 0 1 0
## 124 0 0 0 0 0 0 0 0 0 0 0 1 0
## 125 1 0 0 0 0 0 0 0 0 0 0 1 0
## 126 0 0 0 0 0 0 0 0 0 0 0 1 0
## 127 0 0 0 0 0 0 0 0 0 1 0 1 0
## 128 1 1 0 0 0 0 0 0 0 0 0 1 0
## 129 0 0 0 0 0 0 0 0 0 0 0 1 0
## 130 0 0 1 1 0 0 0 0 0 0 0 1 0
## 131 0 0 1 1 0 0 0 0 0 0 0 1 0
## 132 0 0 1 1 0 0 0 0 0 0 0 1 0
## 133 0 0 0 0 0 0 0 0 0 0 0 1 0
## 134 0 0 1 1 0 0 0 0 0 0 0 1 0
## 135 1 1 0 0 0 0 0 0 0 0 0 1 0
## 136 1 0 0 0 0 0 0 0 0 0 0 1 0
## 137 1 0 0 0 0 0 0 0 0 0 0 1 0
## 138 0 0 0 0 0 0 0 0 0 0 0 1 0
## 139 0 0 0 0 0 0 0 0 0 0 0 1 0
## 140 0 0 1 1 0 0 0 0 0 0 0 1 0
## 141 0 0 1 1 0 0 0 0 0 0 0 1 0
## 142 0 0 1 1 0 0 0 0 0 0 0 1 0
## 143 0 0 0 0 0 0 0 0 0 0 0 1 0
## 144 1 1 0 0 0 0 0 0 0 0 0 1 0
## 145 1 0 0 0 0 0 0 0 0 0 0 1 0
## 146 1 0 0 0 0 0 0 0 0 0 0 1 0
## 147 0 0 1 1 0 0 0 0 0 0 0 1 0
## 148 1 0 0 0 0 0 0 0 0 0 0 1 0
## 149 0 0 0 0 0 0 0 0 0 1 0 1 0
## 150 1 0 0 0 0 0 0 0 0 0 0 1 0
## 151 1 0 1 1 0 0 0 0 0 0 0 1 1
## 152 0 0 0 0 0 0 0 0 0 0 0 1 0
## 153 1 0 1 1 0 0 0 0 0 0 0 1 1
## 154 1 0 1 1 0 0 0 0 0 0 0 1 1
## 155 1 0 1 1 0 0 0 0 0 0 0 1 1
## 156 0 0 1 1 0 0 0 0 0 0 0 1 0
## 157 0 0 0 0 0 0 0 0 0 1 0 1 0
## 158 0 0 1 1 0 0 0 0 0 0 0 1 0
## 159 0 0 1 1 0 0 0 0 0 0 0 1 0
## papC papD papE papF papG papH papI papJ papK papX pet pic sat senB sepD
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 7 1 1 0 1 1 1 0 1 1 1 0 1 1 0 0
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 10 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 11 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 18 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 20 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 21 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 35 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 36 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 39 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 40 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 41 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 50 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0
## 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 54 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0
## 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 57 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0
## 58 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0
## 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 65 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 67 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 68 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 69 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 70 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 74 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 76 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 78 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 84 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
## 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 86 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0
## 89 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 97 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## 98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0
## 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 105 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 118 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 132 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 137 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 142 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 149 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 151 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 154 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0
## 155 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0
## 156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## 158 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## sepL sepQ/escQ sepZ/espZ sfaB sfaC sfaD sfaG sfaY shuA shuS shuT shuX sigA
## 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 0 0 0
## 7 0 0 0 1 1 1 1 1 0 0 0 0 0
## 8 0 0 0 0 0 0 0 0 0 0 0 0 0
## 9 0 0 0 0 0 0 0 0 1 0 0 1 0
## 10 0 0 0 0 0 0 0 0 1 0 0 1 0
## 11 0 0 0 0 0 0 0 0 0 0 0 0 0
## 12 0 0 0 0 0 0 0 0 0 0 0 0 0
## 13 0 0 0 0 0 0 0 0 0 0 0 0 0
## 14 0 0 0 0 0 0 0 0 0 0 0 0 0
## 15 0 0 0 0 0 0 0 0 0 0 0 0 0
## 16 0 0 0 0 0 0 0 0 0 0 0 0 0
## 17 0 0 0 0 0 0 0 0 0 0 0 0 0
## 18 0 0 0 0 0 0 0 0 0 0 0 0 0
## 19 0 0 0 0 0 0 0 0 0 0 0 0 0
## 20 0 0 0 0 0 0 0 0 0 0 0 0 0
## 21 0 0 0 0 0 0 0 0 0 0 0 0 0
## 22 0 0 0 0 0 0 0 0 0 0 0 0 0
## 23 0 0 0 0 0 0 0 0 0 0 0 0 0
## 24 0 0 0 0 0 0 0 0 0 0 0 0 0
## 25 0 0 0 0 0 0 0 0 0 0 0 0 0
## 26 0 0 0 0 0 0 0 0 0 0 0 0 0
## 27 0 0 0 0 0 0 0 0 0 0 0 0 0
## 28 0 0 0 0 0 0 0 0 1 0 0 0 0
## 29 0 0 0 0 0 0 0 0 0 0 0 0 0
## 30 0 0 0 0 0 0 0 0 0 0 0 0 0
## 31 0 0 0 0 0 0 0 0 1 0 1 1 0
## 32 0 0 0 0 0 0 0 0 0 0 0 0 1
## 33 0 0 0 0 0 0 0 0 1 1 1 1 0
## 34 0 0 0 0 0 0 0 0 0 0 0 0 1
## 35 0 0 0 0 0 0 0 0 0 0 0 0 0
## 36 0 0 0 0 0 0 0 0 1 0 1 1 0
## 37 0 0 0 0 0 0 0 0 0 0 0 0 0
## 38 0 0 0 0 0 0 0 0 1 0 0 0 0
## 39 0 0 0 0 0 0 0 0 0 0 0 0 0
## 40 0 0 0 0 0 0 0 0 1 0 1 1 0
## 41 0 0 0 0 0 0 0 0 1 0 1 1 0
## 42 0 0 0 0 0 0 0 0 0 0 0 0 0
## 43 0 0 0 0 0 0 0 0 0 0 0 0 0
## 44 0 0 0 0 0 0 0 0 0 0 0 0 0
## 45 0 0 0 0 0 0 0 0 0 0 0 0 0
## 46 0 0 0 0 0 0 0 0 0 0 0 0 0
## 47 0 0 0 0 0 0 0 0 0 0 0 0 0
## 48 0 0 0 0 0 0 0 0 0 0 0 0 1
## 49 0 0 0 0 0 0 0 0 0 0 0 0 0
## 50 0 0 0 0 0 0 0 0 0 0 0 0 0
## 51 1 0 0 0 0 0 0 0 0 0 0 0 0
## 52 0 0 0 0 0 0 0 0 0 0 0 0 0
## 53 0 0 0 0 0 0 0 0 1 0 1 1 0
## 54 0 0 0 0 0 0 0 0 0 0 0 0 0
## 55 0 0 0 0 0 0 0 0 0 0 0 0 0
## 56 0 0 0 0 0 0 0 0 0 0 0 0 0
## 57 0 0 0 0 0 0 0 0 0 0 0 0 0
## 58 0 0 0 0 0 0 0 0 0 0 0 0 0
## 59 0 0 0 0 0 0 0 0 0 0 0 0 0
## 60 0 0 0 0 0 0 0 0 0 0 0 0 0
## 61 0 0 0 0 0 0 0 0 0 0 0 0 0
## 62 0 0 0 0 0 0 0 0 0 0 0 0 1
## 63 0 0 0 0 0 0 0 0 0 0 0 0 0
## 64 1 0 0 0 0 0 0 0 0 0 0 0 0
## 65 0 0 0 0 0 0 0 0 1 0 1 1 0
## 66 0 0 0 0 0 0 0 0 0 0 0 0 0
## 67 0 0 0 0 0 0 0 0 0 0 0 0 0
## 68 0 0 0 0 0 0 0 0 1 0 1 1 0
## 69 0 0 0 0 0 0 0 0 0 0 0 0 0
## 70 0 0 0 0 0 0 0 0 0 0 0 0 0
## 71 0 0 0 0 0 0 0 0 0 0 0 0 0
## 72 0 0 0 0 0 0 0 0 0 0 0 0 0
## 73 0 0 0 0 0 0 0 0 0 0 0 0 1
## 74 0 0 0 0 0 0 0 0 0 0 0 0 0
## 75 0 0 0 0 0 0 0 0 0 0 0 0 1
## 76 0 0 0 0 0 0 0 0 0 0 0 0 0
## 77 0 0 0 0 0 0 0 0 0 0 0 0 0
## 78 0 0 0 0 0 0 0 0 1 0 1 1 0
## 79 0 0 0 0 0 0 0 0 0 0 0 0 0
## 80 0 0 0 0 0 0 0 0 0 0 0 0 0
## 81 0 0 0 0 0 0 0 0 0 0 0 0 0
## 82 0 0 0 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 0 0 0 0 0 0 0
## 84 1 1 0 0 0 0 0 0 0 0 0 0 0
## 85 0 0 0 0 0 0 0 0 1 0 0 0 0
## 86 0 0 0 0 0 0 0 0 0 0 0 0 0
## 87 0 0 0 0 0 0 0 0 0 0 0 0 0
## 88 0 0 0 0 0 0 0 0 0 0 0 0 0
## 89 0 0 0 0 0 0 0 0 0 0 0 0 0
## 90 0 0 0 0 0 0 0 0 0 0 0 0 0
## 91 0 0 0 0 0 0 0 0 0 0 0 0 0
## 92 0 0 0 0 0 0 0 0 0 0 0 0 0
## 93 0 0 0 0 0 0 0 0 0 0 0 0 0
## 94 0 0 0 0 0 0 0 0 0 0 0 0 0
## 95 1 1 1 0 0 0 0 0 0 0 0 0 0
## 96 0 0 0 0 0 0 0 0 1 1 1 1 0
## 97 0 0 0 0 0 0 0 0 1 0 0 1 0
## 98 0 0 0 0 0 0 0 0 1 0 1 1 0
## 99 0 0 0 0 0 0 0 0 0 0 0 0 0
## 100 0 0 0 0 0 0 0 0 0 0 0 0 0
## 101 0 0 0 0 0 0 0 0 1 0 1 1 0
## 102 0 0 0 0 0 0 0 0 0 0 0 0 0
## 103 0 0 0 0 0 0 0 0 1 0 0 1 0
## 104 0 0 0 0 0 0 0 0 1 0 1 1 0
## 105 0 0 0 0 0 0 0 0 1 0 1 1 0
## 106 0 0 0 0 0 0 0 0 0 0 0 0 0
## 107 0 0 0 0 0 0 0 0 0 0 0 0 0
## 108 0 0 0 0 0 0 0 0 1 0 1 1 0
## 109 0 0 0 0 0 0 0 0 0 0 0 0 0
## 110 0 0 0 0 0 0 0 0 0 0 0 0 1
## 111 0 0 0 0 0 0 0 0 0 0 0 0 1
## 112 0 0 0 0 0 0 0 0 0 0 0 0 0
## 113 0 0 0 0 0 0 0 0 0 0 0 0 0
## 114 1 1 1 0 0 0 0 0 0 0 0 0 0
## 115 1 1 1 0 0 0 0 0 0 0 0 0 0
## 116 0 0 0 0 0 0 0 0 0 0 0 0 0
## 117 0 0 0 0 0 0 0 0 0 0 0 0 0
## 118 0 0 0 0 0 0 0 0 0 0 0 0 0
## 119 0 0 0 0 0 0 0 0 0 0 0 0 0
## 120 0 0 0 0 0 0 0 0 0 0 0 0 0
## 121 0 0 0 0 0 0 0 0 0 0 0 0 0
## 122 1 1 1 0 0 0 0 0 0 0 0 0 0
## 123 1 1 1 0 0 0 0 0 0 0 0 0 0
## 124 0 0 0 0 0 0 0 0 0 0 0 0 0
## 125 0 0 0 0 0 0 0 0 0 0 0 0 0
## 126 0 0 0 0 0 0 0 0 0 0 0 0 0
## 127 1 1 1 0 0 0 0 0 0 0 0 0 0
## 128 0 0 0 0 0 0 0 0 0 0 0 0 1
## 129 0 0 0 0 0 0 0 0 0 0 0 0 0
## 130 0 0 0 0 0 0 0 0 1 0 1 1 0
## 131 0 0 0 0 0 0 0 0 1 0 1 1 0
## 132 0 0 0 0 0 0 0 0 1 0 1 1 0
## 133 0 0 0 0 0 0 0 0 0 0 0 0 0
## 134 0 0 0 0 0 0 0 0 1 0 1 1 0
## 135 0 0 0 0 0 0 0 0 0 0 0 0 1
## 136 0 0 0 0 0 0 0 0 0 0 0 0 0
## 137 0 0 0 0 0 0 0 0 0 0 0 0 0
## 138 0 0 0 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 0 0 0 0 0 0 0
## 140 0 0 0 0 0 0 0 0 1 0 1 1 0
## 141 0 0 0 0 0 0 0 0 1 0 1 1 0
## 142 0 0 0 0 0 0 0 0 1 0 1 1 0
## 143 0 0 0 0 0 0 0 0 0 0 0 0 0
## 144 0 0 0 0 0 0 0 0 0 0 0 0 1
## 145 0 0 0 0 0 0 0 0 0 0 0 0 0
## 146 0 0 0 0 0 0 0 0 0 0 0 0 0
## 147 0 0 0 0 0 0 0 0 1 0 1 1 0
## 148 0 0 0 0 0 0 0 0 0 0 0 0 0
## 149 1 1 1 0 0 0 0 0 0 0 0 0 0
## 150 0 0 0 0 0 0 0 0 0 0 0 0 0
## 151 0 0 0 0 0 0 0 0 0 0 0 0 0
## 152 0 0 0 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 0 0 0 0 0 0 0 0 0 0
## 154 0 0 0 0 0 0 0 0 0 0 0 0 0
## 155 0 0 0 0 0 0 0 0 0 0 0 0 0
## 156 0 0 0 0 0 0 0 0 1 0 1 1 0
## 157 1 1 1 0 0 0 0 0 0 0 0 0 0
## 158 0 0 0 0 0 0 0 0 1 0 1 1 0
## 159 0 0 0 0 0 0 0 0 1 0 1 1 0
## tcpC tir vat yagV/ecpE yagW/ecpD yagX/ecpC yagY/ecpB yagZ/ecpA ybtA ybtE
## 1 0 0 0 1 1 1 1 1 1 1
## 2 0 0 0 1 1 1 1 1 0 0
## 3 0 0 0 1 1 1 1 1 0 0
## 4 0 0 0 1 1 1 1 1 0 0
## 5 0 0 0 1 1 1 1 1 0 0
## 6 0 0 0 1 1 1 1 1 1 1
## 7 1 0 1 1 1 1 1 1 1 1
## 8 0 0 0 1 1 1 1 1 0 0
## 9 0 0 0 1 1 1 1 1 1 1
## 10 0 0 0 1 1 1 1 1 1 1
## 11 0 0 0 1 1 1 1 1 1 1
## 12 0 0 0 1 1 1 1 1 0 0
## 13 0 0 0 1 1 1 1 1 0 0
## 14 0 0 0 1 1 1 1 1 0 0
## 15 0 0 0 1 1 1 1 1 0 0
## 16 0 0 0 1 1 1 1 1 0 0
## 17 0 0 0 1 1 1 1 1 1 1
## 18 0 0 0 1 1 1 1 1 1 1
## 19 0 0 0 1 1 1 1 1 1 1
## 20 0 0 0 1 1 1 1 1 1 1
## 21 0 0 0 1 1 1 1 1 1 1
## 22 0 0 0 1 1 1 1 1 0 0
## 23 0 0 0 1 1 1 1 1 0 0
## 24 0 0 0 1 1 1 1 1 0 0
## 25 0 0 0 1 1 1 1 1 0 0
## 26 0 0 0 1 1 1 1 1 0 0
## 27 0 0 0 1 1 1 1 1 0 0
## 28 0 0 0 1 1 1 1 1 0 0
## 29 0 0 0 1 1 1 1 1 0 0
## 30 0 0 0 1 1 1 1 1 0 0
## 31 0 0 0 1 1 1 1 1 1 1
## 32 0 0 0 1 1 1 1 1 0 0
## 33 0 0 0 1 1 1 1 1 0 0
## 34 0 0 0 1 1 1 1 1 0 0
## 35 0 0 0 1 1 1 1 1 1 1
## 36 0 0 0 1 1 1 1 1 1 1
## 37 0 0 0 1 1 1 1 1 0 0
## 38 0 0 0 1 1 1 1 1 0 0
## 39 0 0 0 1 1 1 1 1 1 1
## 40 0 0 0 1 1 1 1 1 1 1
## 41 0 0 0 1 1 1 1 1 1 1
## 42 0 0 0 1 1 1 1 1 0 0
## 43 0 0 0 1 1 1 1 1 0 0
## 44 0 0 0 1 1 1 1 1 0 0
## 45 0 0 0 1 1 1 1 1 0 0
## 46 0 0 0 1 1 1 1 1 0 0
## 47 0 0 0 1 1 1 1 1 1 1
## 48 0 0 0 1 1 1 1 1 0 0
## 49 0 0 0 1 1 1 1 1 1 1
## 50 0 0 0 1 1 1 1 1 1 1
## 51 0 0 0 1 1 1 1 1 1 1
## 52 0 0 0 1 1 1 1 1 0 0
## 53 0 0 0 1 1 1 1 1 1 1
## 54 0 0 0 1 1 1 1 1 1 1
## 55 0 0 0 1 1 1 1 1 1 1
## 56 0 0 0 1 1 1 1 1 1 1
## 57 0 0 0 1 1 1 1 1 1 1
## 58 0 0 0 1 1 1 1 1 1 1
## 59 0 0 0 1 1 1 1 1 1 1
## 60 0 0 0 1 1 1 1 1 1 1
## 61 0 0 0 1 1 1 1 1 1 1
## 62 0 0 0 1 1 1 1 1 0 0
## 63 0 0 0 1 1 1 1 1 1 1
## 64 0 0 0 1 1 1 1 1 1 1
## 65 0 0 0 1 1 1 1 1 1 1
## 66 0 0 0 1 1 1 1 1 1 1
## 67 0 0 0 1 1 1 1 1 1 1
## 68 0 0 0 1 1 1 1 1 1 1
## 69 1 0 1 1 1 1 1 1 1 1
## 70 0 0 0 1 1 1 1 1 1 1
## 71 0 0 0 1 1 1 1 1 0 0
## 72 0 0 0 1 1 1 1 1 0 0
## 73 0 0 0 1 1 1 1 1 0 0
## 74 0 0 0 1 1 1 1 1 1 1
## 75 0 0 0 1 1 1 1 1 0 0
## 76 0 0 0 1 1 1 1 1 0 0
## 77 0 0 0 1 1 1 1 1 0 0
## 78 0 0 0 1 1 1 1 1 1 1
## 79 0 0 0 1 1 1 1 1 0 0
## 80 0 0 0 1 1 1 1 1 0 0
## 81 0 0 0 1 1 1 1 1 0 0
## 82 0 0 0 0 0 0 0 0 0 0
## 83 0 0 0 1 1 1 1 1 0 0
## 84 0 0 0 1 1 1 1 1 0 0
## 85 0 0 0 1 1 1 1 1 0 0
## 86 0 0 0 1 1 1 1 1 1 1
## 87 0 0 0 1 1 1 1 1 0 0
## 88 0 0 0 1 1 1 1 1 1 1
## 89 0 0 0 1 1 1 1 1 1 1
## 90 0 0 0 1 1 1 1 1 0 0
## 91 0 0 0 1 1 1 1 1 0 0
## 92 0 0 0 1 1 1 1 1 0 0
## 93 0 0 0 1 1 1 1 1 0 0
## 94 0 0 0 1 1 1 1 1 0 0
## 95 0 1 0 0 0 0 0 0 0 0
## 96 0 0 0 1 1 1 1 1 0 0
## 97 0 0 0 1 1 1 1 1 0 0
## 98 0 0 0 1 1 1 1 1 1 1
## 99 0 0 0 1 1 1 1 1 0 0
## 100 0 0 0 1 1 1 1 1 1 1
## 101 0 0 0 1 1 1 1 1 1 1
## 102 0 0 0 1 1 1 1 1 0 0
## 103 0 0 0 1 1 1 1 1 1 1
## 104 0 0 0 1 1 1 1 1 1 1
## 105 0 0 0 1 1 1 1 1 1 1
## 106 0 0 0 1 1 1 1 1 0 0
## 107 0 0 0 1 1 1 1 1 1 1
## 108 0 0 0 1 1 1 1 1 1 1
## 109 0 0 0 1 1 1 1 1 0 0
## 110 0 0 0 1 1 1 1 1 0 0
## 111 0 0 0 1 1 1 1 1 0 0
## 112 0 0 0 1 1 1 1 1 1 1
## 113 0 0 0 1 1 1 1 1 1 1
## 114 0 1 0 0 0 0 0 0 0 0
## 115 0 1 0 0 0 0 0 0 0 0
## 116 0 0 0 1 1 1 1 1 0 0
## 117 0 0 0 1 1 1 1 1 1 1
## 118 0 0 0 1 1 1 1 1 1 1
## 119 0 0 0 1 1 1 1 1 0 0
## 120 0 0 0 1 1 1 1 1 0 0
## 121 0 0 0 1 1 1 1 1 0 0
## 122 0 1 0 0 0 0 0 0 0 0
## 123 0 1 0 0 0 0 0 0 0 0
## 124 0 0 0 1 1 1 1 1 0 0
## 125 0 0 0 1 1 1 1 1 0 0
## 126 0 0 0 1 1 1 1 1 0 0
## 127 0 1 0 0 0 0 0 0 0 0
## 128 0 0 0 1 1 1 1 1 0 0
## 129 0 0 0 0 0 0 0 0 1 1
## 130 0 0 0 1 1 1 1 1 1 1
## 131 0 0 0 1 1 1 1 1 1 1
## 132 0 0 0 1 1 1 1 1 1 1
## 133 0 0 0 1 1 1 1 1 0 0
## 134 0 0 0 1 1 1 1 1 1 1
## 135 0 0 0 1 1 1 1 1 0 0
## 136 0 0 0 1 1 1 1 1 0 0
## 137 0 0 0 1 1 1 1 1 0 0
## 138 0 0 0 0 0 0 0 0 0 0
## 139 0 0 0 1 1 1 1 1 0 0
## 140 0 0 0 1 1 1 1 1 1 1
## 141 0 0 0 1 1 1 1 1 1 1
## 142 0 0 0 1 1 1 1 1 1 1
## 143 0 0 0 1 1 1 1 1 1 1
## 144 0 0 0 1 1 1 1 1 0 0
## 145 0 0 0 1 1 1 1 1 0 0
## 146 0 0 0 1 1 1 1 1 0 0
## 147 0 0 0 1 1 1 1 1 1 1
## 148 0 0 0 1 1 1 1 1 0 0
## 149 0 1 0 0 0 0 0 0 0 0
## 150 0 0 0 1 1 1 1 1 0 0
## 151 0 0 0 1 1 1 1 1 1 1
## 152 0 0 0 0 0 0 0 0 0 0
## 153 0 0 0 1 1 1 1 1 1 1
## 154 0 0 0 1 1 1 1 1 1 1
## 155 0 0 0 1 1 1 1 1 1 1
## 156 0 0 0 1 1 1 1 1 1 1
## 157 0 1 0 0 0 0 0 0 0 0
## 158 0 0 0 1 1 1 1 1 1 1
## 159 0 0 0 1 1 1 1 1 1 1
## ybtP ybtQ ybtS ybtT ybtU ybtX ykgK/ecpR
## 1 1 1 1 1 1 1 1
## 2 0 0 0 0 0 0 1
## 3 0 0 0 0 0 0 1
## 4 0 0 0 0 0 0 1
## 5 0 0 0 0 0 0 1
## 6 1 1 1 1 1 1 1
## 7 1 1 1 1 1 1 1
## 8 0 0 0 0 0 0 1
## 9 1 1 1 1 1 1 1
## 10 1 1 1 1 1 1 1
## 11 1 1 1 1 1 1 1
## 12 0 0 0 0 0 0 1
## 13 0 0 0 0 0 0 1
## 14 0 0 0 0 0 0 1
## 15 0 0 0 0 0 0 1
## 16 0 0 0 0 0 0 1
## 17 1 1 1 1 1 1 1
## 18 1 1 1 1 1 1 1
## 19 1 1 1 1 1 1 1
## 20 1 1 1 1 1 1 1
## 21 1 1 1 1 1 1 1
## 22 0 0 0 0 0 0 1
## 23 0 0 0 0 0 0 1
## 24 0 0 0 0 0 0 1
## 25 0 0 0 0 0 0 1
## 26 0 0 0 0 0 0 1
## 27 0 0 0 0 0 0 1
## 28 0 0 0 0 0 0 1
## 29 0 0 0 0 0 0 1
## 30 0 0 0 0 0 0 1
## 31 1 1 1 1 1 1 1
## 32 0 0 0 0 0 0 1
## 33 0 0 0 0 0 0 1
## 34 0 0 0 0 0 0 1
## 35 1 1 1 1 1 1 1
## 36 1 1 1 1 1 1 1
## 37 0 0 0 0 0 0 1
## 38 0 0 0 0 0 0 1
## 39 1 1 1 1 1 1 1
## 40 1 1 1 1 1 1 1
## 41 1 1 1 1 1 1 1
## 42 0 0 0 0 0 0 1
## 43 0 0 0 0 0 0 1
## 44 0 0 0 0 0 0 1
## 45 0 0 0 0 0 0 1
## 46 0 0 0 0 0 0 1
## 47 1 1 1 1 1 1 1
## 48 0 0 0 0 0 0 1
## 49 1 1 1 1 1 1 1
## 50 1 1 1 1 1 1 1
## 51 1 1 1 1 1 1 1
## 52 0 0 0 0 0 0 1
## 53 1 1 1 1 1 1 1
## 54 1 1 1 1 1 1 1
## 55 1 1 1 1 1 1 1
## 56 1 1 1 1 1 1 1
## 57 1 1 1 1 1 1 1
## 58 1 1 1 1 1 1 1
## 59 1 1 1 1 1 1 1
## 60 1 1 1 1 1 1 1
## 61 1 1 1 1 1 1 1
## 62 0 0 0 0 0 0 1
## 63 1 1 1 1 1 1 1
## 64 1 1 1 1 1 1 1
## 65 1 1 1 1 1 1 1
## 66 1 1 1 1 1 1 1
## 67 1 1 1 1 1 1 1
## 68 1 1 1 1 1 1 1
## 69 1 1 1 1 1 1 1
## 70 1 1 1 1 1 1 1
## 71 0 0 0 0 0 0 1
## 72 0 0 0 0 0 0 1
## 73 0 0 0 0 0 0 1
## 74 1 1 1 1 1 1 1
## 75 0 0 0 0 0 0 1
## 76 0 0 0 0 0 0 1
## 77 0 0 0 0 0 0 1
## 78 1 1 1 1 1 1 1
## 79 0 0 0 0 0 0 1
## 80 0 0 0 0 0 0 1
## 81 0 0 0 0 0 0 1
## 82 0 0 0 0 0 0 0
## 83 0 0 0 0 0 0 1
## 84 0 0 0 0 0 0 1
## 85 0 0 0 0 0 0 1
## 86 1 1 1 1 1 1 1
## 87 0 0 0 0 0 0 1
## 88 1 1 1 1 1 1 1
## 89 1 1 1 1 1 1 1
## 90 0 0 0 0 0 0 1
## 91 0 0 0 0 0 0 1
## 92 0 0 0 0 0 0 1
## 93 0 0 0 0 0 0 1
## 94 0 0 0 0 0 0 1
## 95 0 0 0 0 0 0 0
## 96 0 0 0 0 0 0 1
## 97 0 0 0 0 0 0 1
## 98 1 1 1 1 1 1 1
## 99 0 0 0 0 0 0 1
## 100 1 1 1 1 1 1 1
## 101 1 1 1 1 1 1 1
## 102 0 0 0 0 0 0 1
## 103 1 1 1 1 1 1 1
## 104 1 1 1 1 1 1 1
## 105 1 1 1 1 1 1 1
## 106 0 0 0 0 0 0 1
## 107 1 1 1 1 1 1 1
## 108 1 1 1 1 1 1 1
## 109 0 0 0 0 0 0 1
## 110 0 0 0 0 0 0 1
## 111 0 0 0 0 0 0 1
## 112 1 1 1 1 1 1 1
## 113 1 1 1 1 1 1 1
## 114 0 0 0 0 0 0 0
## 115 0 0 0 0 0 0 0
## 116 0 0 0 0 0 0 1
## 117 1 1 1 1 1 1 1
## 118 1 1 1 1 1 1 1
## 119 0 0 0 0 0 0 1
## 120 0 0 0 0 0 0 1
## 121 0 0 0 0 0 0 1
## 122 0 0 0 0 0 0 0
## 123 0 0 0 0 0 0 0
## 124 0 0 0 0 0 0 1
## 125 0 0 0 0 0 0 1
## 126 0 0 0 0 0 0 1
## 127 0 0 0 0 0 0 0
## 128 0 0 0 0 0 0 1
## 129 1 1 1 1 1 1 0
## 130 1 1 1 1 1 1 1
## 131 1 1 1 1 1 1 1
## 132 1 1 1 1 1 1 1
## 133 0 0 0 0 0 0 1
## 134 1 1 1 1 1 1 1
## 135 0 0 0 0 0 0 1
## 136 0 0 0 0 0 0 1
## 137 0 0 0 0 0 0 1
## 138 0 0 0 0 0 0 0
## 139 0 0 0 0 0 0 1
## 140 1 1 1 1 1 1 1
## 141 1 1 1 1 1 1 1
## 142 1 1 1 1 1 1 1
## 143 1 1 1 1 1 1 1
## 144 0 0 0 0 0 0 1
## 145 0 0 0 0 0 0 1
## 146 0 0 0 0 0 0 1
## 147 1 1 1 1 1 1 1
## 148 0 0 0 0 0 0 1
## 149 0 0 0 0 0 0 0
## 150 0 0 0 0 0 0 1
## 151 1 1 1 1 1 1 1
## 152 0 0 0 0 0 0 0
## 153 1 1 1 1 1 1 1
## 154 1 1 1 1 1 1 1
## 155 1 1 1 1 1 1 1
## 156 1 1 1 1 1 1 1
## 157 0 0 0 0 0 0 0
## 158 1 1 1 1 1 1 1
## 159 1 1 1 1 1 1 1
# Read in the treefile
tree <- read.tree("Data/human_esbl_core_snps.aln.treefile")
# Root the tree at midpoint
tree <- midpoint(tree)
# Extract isolate metadata for tree
phylogroup_data <- isolate_data_human[, c("Isolate", "Phylogroup")]
# Reorder metadata to match tree tip order
phylogroup_data <- phylogroup_data[match(tree$tip.label, phylogroup_data$Isolate), ]
rownames(phylogroup_data) <- phylogroup_data$Isolate
# Extract District data for plotting
district_data <- isolate_data_human[, c("Isolate", "District")]
# Extract Year data for plotting
year_data <- isolate_data_human[, c("Isolate", "Year")]
# Prepare and reorder ESBL gene data for tree_plotting
tree_arg_data <- ARGs
selected_columns <- grep("Isolate|CTX", colnames(tree_arg_data), value = TRUE)
tree_arg_data <- tree_arg_data[, selected_columns]
# Mutate the ESBL gene data to have Isolate and ARG columns
ESBL_genes_long <- tree_arg_data %>%
pivot_longer(
cols = -Isolate,
names_to = "ARG",
values_to = "Presence"
)
# Filter for only relevant rows (where presence is 1)
ESBL_genes_long <- ESBL_genes_long %>%
dplyr::filter(Presence == 1) %>%
dplyr::select(-Presence)
# Generate the basic tree with phylogroup data
p <- ggtree(tree) %<+% phylogroup_data +
geom_tippoint(
aes(fill = Phylogroup),
shape = 21,
color = "black",
stroke = 0.3,
size = 2.0
) +
scale_fill_brewer(palette = "Set2") +
geom_treescale(x = 0.02, y = 100, width = 0.01, fontsize = 3, linesize = 0.5)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggtree package.
## Please report the issue at <https://github.com/YuLab-SMU/ggtree/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Add District
p1 <- p +
new_scale_fill() +
geom_fruit(
data = district_data,
geom = geom_tile,
mapping = aes(y = Isolate, x = District, fill = District),
color = "black",
offset = 0.03, # The distance between external layers, default is 0.03 times of x range of tree.
pwidth = 0.04 # width of the external layer, default is 0.2 times of x range of tree.
) +
scale_fill_brewer(palette = "Set1")
# Add Year
p2 <- p1 +
new_scale_fill() +
geom_fruit(
data = year_data,
geom = geom_tile,
mapping = aes(y = Isolate, x = Year, fill = Year),
color = "black",
offset = 0.04, # The distance between external layers, default is 0.03 times of x range of tree.
pwidth = 0.04 # width of the external layer, default is 0.2 times of x range of tree.
) +
scale_fill_brewer(palette = "Set3")
# Add ESBL genes
p3 <- p2 +
new_scale_fill() +
geom_fruit(
data = ESBL_genes_long,
geom = geom_tile,
mapping = aes(y = Isolate, x = ARG, fill = ARG),
color = "black",
offset = 0.04, # The distance between external layers, default is 0.03 times of x range of tree.
pwidth = 0.2 # width of the external layer, default is 0.2 times of x range of tree.
) +
scale_fill_brewer(name = "ESBL gene", palette = "Set2")
# Save the plot
ggsave("Figures/Tree.png", p3, width = 12, height = 6.5, dpi = 600)
# Print the plot
print(p3)
# Import data
# Read in household GPS data
households <- read.csv("data/Households_Jittered.csv")
# Read in lineages
interhousehold_lineages <- read.csv("data/Household_clusters.csv")
## Create the base map
# Convert Samama household coordinates to sf object and project
samama_sf <- households %>%
filter(district == "Mangochi") %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
samama_sf_proj <- st_transform(samama_sf, 32736)
# Define and project bounding box
rectangle_coords_samama <- matrix(c(
35.2166, -14.4150,
35.2260, -14.4150,
35.2260, -14.4230,
35.2166, -14.4230,
35.2166, -14.4150
), ncol = 2, byrow = TRUE)
rectangle_samama <- st_polygon(list(rectangle_coords_samama)) %>%
st_sfc(crs = 4326) %>%
st_transform(32736)
box_samama <- st_bbox(rectangle_samama)
rectangle_samama_proj <- st_as_sfc(box_samama)
# Plot the base map
samama_base_map <- ggplot() +
geom_sf(data = rectangle_samama_proj, fill = "cornsilk", color = "black") +
geom_sf(data = samama_sf_proj, color = "black", size = 1.8) +
annotation_scale(location = "bl", pad_x = unit(0.5, "in"), pad_y = unit(0.4, "in")) +
annotation_north_arrow(
location = "bl",
pad_x = unit(0.4, "in"), pad_y = unit(0.8, "in"),
style = north_arrow_fancy_orienteering
) +
theme_void()
# Save the base map
ggsave("Figures/Samama_map.png", plot = samama_base_map, width = 5, height = 5, dpi = 600)
# Print the base map
print(samama_base_map)
Here, we plot lineages (where groups of isolates are from the same ST and popPUNK cluster) in Mangochi District. Selected lineages must be represented in at least 3 households in either 2023 or 2024.
# Prepare the data
samama_clusters <- interhousehold_lineages %>%
filter(district == "Mangochi")
samama_clusters <- samama_clusters %>%
left_join(
households %>% select(household, GPS_S, GPS_E),
by = "household"
)
# Convert Samama household coordinates to sf object and project
samama_clusters_sf <- samama_clusters %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
samama_clusters_sf_proj <- st_transform(samama_clusters_sf, 32736)
# Plot the clusters
# Set custom colors for year
year_colors <- c(
"2023" = "blue",
"2024" = "red",
"Both years" = "green3"
)
# Define the clusters to include
clusters_to_plot <- c("ST10_popPUNK5", "ST38_popPUNK20", "ST44_popPUNK223", "ST58_popPUNK11", "ST131_popPUNK4", "ST131_popPUNK25", "ST1015_popPUNK11", "ST2852_popPUNK18", "ST3580_popPUNK18", "ST5614_popPUNK251", "ST8025_popPUNK5", "ST13823_popPUNK1407")
# Create individual plots
cluster_plots <- map(clusters_to_plot, function(clust) {
cluster_data <- samama_clusters_sf_proj %>%
filter(cluster == clust)
ggplot() +
geom_sf(data = rectangle_samama_proj, fill = "cornsilk", color = "black") +
geom_sf(data = samama_sf_proj, color = "black", size = 1.5) +
geom_sf(data = cluster_data, aes(color = year), size = 4.0,
show.legend = clust == "ST5614_popPUNK251") + # Show legend only for this cluster
scale_color_manual(
values = year_colors,
breaks = names(year_colors),
name = "Household colonisation year"
) +
labs(title = paste(clust)) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, size = 14),
legend.position = "bottom",
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
) +
guides(color = guide_legend(override.aes = list(size = 4)))
})
# Combine plots into one panel with a single shared legend
samama_panel_plot <- wrap_plots(cluster_plots, ncol = 4, nrow = 3) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
# Save the panel
ggsave("Figures/Samama_lineage_panel_map.png", plot = samama_panel_plot, width = 12, height = 12, dpi = 600)
print(samama_panel_plot)
## Create the base map
# Convert Mthawira household coordinates to sf object and project
mthawira_sf <- households %>%
filter(district == "Nsanje") %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
mthawira_sf_proj <- st_transform(mthawira_sf, 32736)
# Define and project bounding box
rectangle_coords_mthawira <- matrix(c(
35.2850, -16.8440,
35.3020, -16.8440,
35.3020, -16.8580,
35.2850, -16.8580,
35.2850, -16.8440
), ncol = 2, byrow = TRUE)
rectangle_mthawira <- st_polygon(list(rectangle_coords_mthawira)) %>%
st_sfc(crs = 4326) %>%
st_transform(32736)
box_mthawira <- st_bbox(rectangle_mthawira)
rectangle_mthawira_proj <- st_as_sfc(box_mthawira)
# Plot the base map
mthawira_base_map <- ggplot() +
geom_sf(data = rectangle_mthawira_proj, fill = "cornsilk", color = "black") +
geom_sf(data = mthawira_sf_proj, color = "black", size = 1.8) +
annotation_scale(location = "bl", pad_x = unit(0.5, "in"), pad_y = unit(0.4, "in")) +
annotation_north_arrow(
location = "bl",
pad_x = unit(0.4, "in"), pad_y = unit(0.8, "in"),
style = north_arrow_fancy_orienteering
) +
theme_void()
# Save the base map
ggsave("Figures/Mthawira_map.png", plot = mthawira_base_map, width = 5, height = 5, dpi = 600)
# Print the base map
print(mthawira_base_map)
Here, we plot lineages (where groups of isolates are from the same ST and popPUNK cluster) in Nsanje District. Selected lineages must be represented in at least 3 households in either 2023 or 2024.
# Prepare the data
mthawira_clusters <- interhousehold_lineages %>%
filter(district == "Nsanje")
mthawira_clusters <- mthawira_clusters %>%
left_join(
households %>% select(household, GPS_S, GPS_E),
by = "household"
)
# Convert Mthawira household coordinates to sf object and project
mthawira_clusters_sf <- mthawira_clusters %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
mthawira_clusters_sf_proj <- st_transform(mthawira_clusters_sf, 32736)
# Plot the clusters
# Set custom colors for year
year_colors <- c(
"2023" = "blue",
"2024" = "red",
"Both years" = "green3"
)
# Define the clusters to include
clusters_to_plot <- c("ST10_popPUNK92", "ST206_popPUNK41_1328", "ST1015_popPUNK11")
# Create individual plots
cluster_plots <- map(clusters_to_plot, function(clust) {
cluster_data <- mthawira_clusters_sf_proj %>%
filter(cluster == clust)
ggplot() +
geom_sf(data = rectangle_mthawira_proj, fill = "cornsilk", color = "black") +
geom_sf(data = mthawira_sf_proj, color = "black", size = 1.5) +
geom_sf(data = cluster_data, aes(color = year), size = 4.0,
show.legend = clust == "ST206_popPUNK41_1328") + # Show legend only for this cluster
scale_color_manual(
values = year_colors,
breaks = names(year_colors),
name = "Household colonisation year"
) +
labs(title = paste(clust)) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, size = 14),
legend.position = "bottom",
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
) +
guides(color = guide_legend(override.aes = list(size = 4)))
})
# Combine plots into one panel with a single shared legend
mthawira_panel_plot <- wrap_plots(cluster_plots, ncol = 4, nrow = 1) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
# Save the panel
ggsave("Figures/Mthawira_lineage_panel_map.png", plot = mthawira_panel_plot, width = 12, height = 4, dpi = 600)
print(mthawira_panel_plot)
# Read ANI matrix
ani <- read.csv("Data/ANI_matrix.csv", row.names = 1)
# Convert ANI to distance
ani_dist_matrix <- 1 - (as.matrix(ani) / 100)
# Convert to "dist" object
ani_dist_obj <- as.dist(ani_dist_matrix)
# Perform hierarchical clustering (average linkage)
hc <- hclust(ani_dist_obj, method = "average")
# Cut tree at ANI > 99.99% (distance < 0.0001)
clusters <- cutree(hc, h = 0.0001)
# Combine results
strain_groups <- split(names(clusters), clusters)
# Print strain groups
print(strain_groups)
## $`1`
## [1] "cM10a"
##
## $`2`
## [1] "cM12a" "fM23b"
##
## $`3`
## [1] "cM19a" "cM7b"
##
## $`4`
## [1] "cM20a" "cM2a" "cM3a" "cM44b" "cS28a"
##
## $`5`
## [1] "cM34a" "cM42b" "cM8a" "cM9b" "fS158a" "fS159a"
##
## $`6`
## [1] "cM35a"
##
## $`7`
## [1] "cM41a" "cM42a"
##
## $`8`
## [1] "cM59a" "fM21a"
##
## $`9`
## [1] "cM59b" "cM5a"
##
## $`10`
## [1] "cS100a" "cS58a" "cS71a"
##
## $`11`
## [1] "cS103a"
##
## $`12`
## [1] "cS104a" "cS53a" "cS61a" "cS63a" "fS92a"
##
## $`13`
## [1] "cS107a" "cS115a"
##
## $`14`
## [1] "cS108a" "cS109a" "cS129a" "cS164a"
##
## $`15`
## [1] "cS10a" "cS11a"
##
## $`16`
## [1] "cS113a"
##
## $`17`
## [1] "cS116a"
##
## $`18`
## [1] "cS132a" "cS162a" "cS172a" "cS178a" "cS51a" "cS83a"
##
## $`19`
## [1] "cS142a" "fS146a"
##
## $`20`
## [1] "cS153a"
##
## $`21`
## [1] "cS157a"
##
## $`22`
## [1] "cS15a"
##
## $`23`
## [1] "cS165a"
##
## $`24`
## [1] "cS168a" "cS80a" "cS91a"
##
## $`25`
## [1] "cS184a"
##
## $`26`
## [1] "cS27b" "cS30a" "cS33a" "fM35a"
##
## $`27`
## [1] "cS35a"
##
## $`28`
## [1] "cS37a"
##
## $`29`
## [1] "cS39c" "cS65a" "cS68a" "cS76a"
##
## $`30`
## [1] "cS45a"
##
## $`31`
## [1] "cS46a"
##
## $`32`
## [1] "cS4a"
##
## $`33`
## [1] "cS60a" "cS66a"
##
## $`34`
## [1] "cS6a"
##
## $`35`
## [1] "cS71b"
##
## $`36`
## [1] "cS72c"
##
## $`37`
## [1] "cS86a"
##
## $`38`
## [1] "cS86b"
##
## $`39`
## [1] "cS87a" "cS88a"
##
## $`40`
## [1] "cS8b"
##
## $`41`
## [1] "cS97a"
##
## $`42`
## [1] "cS99a"
##
## $`43`
## [1] "fM10a"
##
## $`44`
## [1] "fM16a"
##
## $`45`
## [1] "fM19a" "fM48a" "fM51a"
##
## $`46`
## [1] "fM24a"
##
## $`47`
## [1] "fM27b" "fM60a"
##
## $`48`
## [1] "fM29a"
##
## $`49`
## [1] "fM30a"
##
## $`50`
## [1] "fM31a"
##
## $`51`
## [1] "fM40a" "fM41b"
##
## $`52`
## [1] "fM54a"
##
## $`53`
## [1] "fM59a"
##
## $`54`
## [1] "fS100a" "fS14a"
##
## $`55`
## [1] "fS101a"
##
## $`56`
## [1] "fS102a"
##
## $`57`
## [1] "fS10a" "fS11a" "fS12a" "fS13a" "fS37a" "fS39a" "fS41a" "fS46a" "fS62a"
## [10] "fS63b" "fS64a" "fS74a" "fS93a" "fS97a" "fS99a"
##
## $`58`
## [1] "fS111a"
##
## $`59`
## [1] "fS117a"
##
## $`60`
## [1] "fS121a"
##
## $`61`
## [1] "fS122a"
##
## $`62`
## [1] "fS128a"
##
## $`63`
## [1] "fS133b"
##
## $`64`
## [1] "fS139a" "fS149a" "fS6a"
##
## $`65`
## [1] "fS143a"
##
## $`66`
## [1] "fS144a"
##
## $`67`
## [1] "fS148a"
##
## $`68`
## [1] "fS155a"
##
## $`69`
## [1] "fS157a"
##
## $`70`
## [1] "fS165a" "fS170a" "fS171a" "fS58a"
##
## $`71`
## [1] "fS174a" "fS177a"
##
## $`72`
## [1] "fS190a"
##
## $`73`
## [1] "fS191a" "fS50a" "fS54a" "fS72b" "fS73a" "fS79a" "fS81a"
##
## $`74`
## [1] "fS24a"
##
## $`75`
## [1] "fS25a" "fS80a" "fS95a"
##
## $`76`
## [1] "fS34a"
##
## $`77`
## [1] "fS35a"
##
## $`78`
## [1] "fS42a"
##
## $`79`
## [1] "fS4a"
##
## $`80`
## [1] "fS56a" "fS84a"
##
## $`81`
## [1] "fS70a"
##
## $`82`
## [1] "fS83a"
##
## $`83`
## [1] "fS85a" "fS86a"
# Generate a dendrogram of ANI distances
# Open SVG device
svg("Figures/ANI_dendrogram.svg", width = 8, height = 4.5)
# Export dendrogram of ANI hierarchical clustering
plot(hc, main = "ANI Hierarchical Clustering Dendrogram",
xlab = "Isolate", ylab = "Distance (1 - (ANI/100))", cex = 0.5)
# Close device
dev.off()
## png
## 2
# Print the plot
plot(hc, main = "ANI Hierarchical Clustering Dendrogram",
xlab = "Isolate", ylab = "Distance (1 - (ANI/100))", cex = 0.5)
# Identify medoid isolate from each strain represented in 3+ households
# Define strain IDs of interest
target_strains <- c(4, 5, 10, 12, 14, 18, 24, 26, 29, 45, 57, 64, 70, 73, 75)
# Create empty results data frame
medoids <- data.frame(strain = integer(),
n_isolates = integer(),
medoid_isolate = character(),
mean_distance = numeric(),
stringsAsFactors = FALSE)
for (strain_id in target_strains) {
# Get isolates belonging to this strain
members <- names(clusters[clusters == strain_id])
if (length(members) < 2) next # skip if only one isolate
# Subset distance matrix for this strain
submat <- ani_dist_matrix[members, members, drop = FALSE]
# Compute average distance to all other members
mean_dists <- rowMeans(submat, na.rm = TRUE)
# Identify isolate with smallest mean distance (the medoid)
medoid <- names(which.min(mean_dists))
# Store result
medoids <- rbind(medoids, data.frame(
strain = strain_id,
n_isolates = length(members),
medoid_isolate = medoid,
mean_distance = mean_dists[medoid]
))
}
# Print medoid isolates per target strain
print(medoids)
## strain n_isolates medoid_isolate mean_distance
## cM2a 4 5 cM2a 4.676800e-05
## cM8a 5 6 cM8a 3.386333e-05
## cS100a 10 3 cS100a 2.077667e-05
## cS53a 12 5 cS53a 4.184000e-05
## cS108a 14 4 cS108a 1.072000e-05
## cS51a 18 6 cS51a 3.701500e-05
## cS91a 24 3 cS91a 1.836333e-05
## cS33a 26 4 cS33a 3.172000e-05
## cS76a 29 4 cS76a 2.731000e-05
## fM51a 45 3 fM51a 2.507667e-05
## fS10a 57 15 fS10a 3.073600e-05
## fS149a 64 3 fS149a 4.928667e-05
## fS58a 70 4 fS58a 3.223500e-05
## fS54a 73 7 fS54a 4.114429e-05
## fS25a 75 3 fS25a 4.437667e-05
# Import within-strain genomic distance data
strain_SNPs <- read.csv("Data/Strain_distance.csv", header = TRUE)
# Order strains by maximum pairwise SNPs within each Phylogroup
strain_SNPs$Strain <- factor(
strain_SNPs$Strain,
levels = strain_SNPs %>%
arrange(Phylogroup, desc(Max_pairwise_SNPs_in_strain), Strain) %>%
pull(Strain) %>%
unique()
)
# Subset cross-district strains
cross_data <- subset(strain_SNPs, Cross_district_strain == "Yes")
# Dummy data for phylogroup legend
phylo_legend <- data.frame(
Phylogroup = unique(strain_SNPs$Phylogroup)
)
# Define the number of isolates in each strain
isolate_counts <- data.frame(
Strain = c("i) ST206", "ii) ST10", "vi) ST10", "xii) ST131", "vii) ST3580",
"xiv) ST38", "xiii) ST131", "viii) ST1015", "iv) ST44", "xi) ST1015",
"xv) ST38", "iii) ST8025", "x) ST2852", "ix) ST58", "v) ST13823"),
Isolates_in_strain = c(5, 6, 3, 5, 4, 6, 3, 4, 4, 3, 15, 3, 4, 7, 3)
)
# Define the number of households each strain was found in
household_counts <- data.frame(
Strain = c("i) ST206", "ii) ST10", "vi) ST10", "xii) ST131", "vii) ST3580",
"xiv) ST38", "xiii) ST131", "viii) ST1015", "iv) ST44", "xi) ST1015",
"xv) ST38", "iii) ST8025", "x) ST2852", "ix) ST58", "v) ST13823"),
Households = c(5, 4, 3, 5, 3, 6, 3, 4, 4, 3, 13, 3, 3, 7, 3)
)
# Define color for multi-district annotation
arrowe_color <- "#E57373"
# Ensure same factor order
isolate_counts$Strain <- factor(isolate_counts$Strain, levels = levels(strain_SNPs$Strain))
# Plot
Strain_SNP_distance_boxplot <- ggplot(strain_SNPs, aes(x = Strain, y = SNP_distance, fill = Phylogroup)) +
geom_boxplot(width = 0.6, linewidth = 0.3, outlier.size = 0.6, show.legend = FALSE) +
ylim(0, 49) + # extended y-limit to make room for circles
geom_point(data = cross_data, aes(x = Strain, y = 42),
shape = 25, fill = arrowe_color, color = arrowe_color, size = 3, show.legend = FALSE) +
geom_point(data = household_counts, aes(x = Strain, y = 46, size = Households),
shape = 21, fill = "steelblue", color = "black", show.legend = TRUE) +
scale_size_continuous(
name = "No. households",
range = c(2, 8),
breaks = c(3, 13)
) +
geom_point(aes(x = NA, y = NA, shape = "Yes"),
fill = arrowe_color, color = arrowe_color, size = 3) +
scale_shape_manual(name = "Cross-district strain", values = c("Yes" = 25)) +
geom_point(data = phylo_legend, aes(x = NA, y = NA, fill = Phylogroup),
shape = 22, size = 5, color = "black", inherit.aes = FALSE) +
scale_fill_brewer(palette = "Set3", name = "Phylogroup") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1)) +
labs(x = "Strain", y = "Genomic distance (no. chromosomal SNPs)")
# Save the plot
ggsave("Figures/Strain_SNP_distance_boxplot.png", Strain_SNP_distance_boxplot, height = 4, width = 10, dpi = 600)
## Warning in geom_point(aes(x = NA, y = NA, shape = "Yes"), fill = arrowe_color, : All aesthetics have length 1, but the data has 215 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## Warning: Removed 215 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_point()`).
# Print the plot
print(Strain_SNP_distance_boxplot)
## Warning in geom_point(aes(x = NA, y = NA, shape = "Yes"), fill = arrowe_color, : All aesthetics have length 1, but the data has 215 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## Warning: Removed 215 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_point()`).
# Build isolate -> Strain mapping from pairwise table
strain_map <- strain_SNPs %>%
select(Isolate = Isolate1, Strain) %>%
bind_rows(
strain_SNPs %>% select(Isolate = Isolate2, Strain)
) %>%
distinct()
# Keep only the required columns for edges
edges <- strain_SNPs %>%
select(Isolate1, Isolate2, SNP_distance)
# Categorise SNP distances for edge construction
edges <- edges %>%
mutate(
category = case_when(
SNP_distance <= 10 ~ "≤10",
SNP_distance <= 25 ~ "11–25",
SNP_distance > 25 ~ "26-50"
),
category = factor(category,
levels = c("≤10", "11–25", "26-50"),
ordered = TRUE)
)
# Prepare node metadata and attach Strain
all_isolates <- unique(c(strain_SNPs$Isolate1, strain_SNPs$Isolate2))
nodes <- isolate_data_human %>%
filter(Isolate %in% all_isolates) %>%
select(Isolate, District, Year, Participant.ID) %>%
left_join(strain_map, by = "Isolate")
# Create igraph object
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# Set seed for reproducible plotting and compute layout coordinate
set.seed(42)
lay <- create_layout(g, layout = "fr")
# Prepare dataframe for label positions just outside each Strain cluster
lay_df <- as.data.frame(lay) %>% filter(!is.na(Strain))
# Compute centroid per strain
centroids <- lay_df %>%
group_by(Strain) %>%
summarise(cx = mean(x), cy = mean(y), .groups = "drop")
# Compute cluster radius (max distance from centroid) per strain
spread_df <- lay_df %>%
left_join(centroids, by = "Strain") %>%
group_by(Strain, cx, cy) %>%
summarise(radius = max(sqrt((x - cx)^2 + (y - cy)^2)), .groups = "drop")
# Join and compute label coordinates (1.8 * radius above cluster)
strain_labels <- spread_df %>%
mutate(
label_x = cx - radius * 0,
label_y = cy + radius * 1.8
)
# Final plot with labels placed above clusters
network_plot <- ggraph(lay) +
geom_edge_link(aes(colour = category), width = 0.7, alpha = 0.7) +
geom_node_point(aes(fill = District, colour = Year),
shape = 21, size = 2.5, stroke = 1.0) +
geom_text(
data = strain_labels,
aes(x = label_x, y = label_y, label = Strain),
inherit.aes = FALSE,
size = 3
) +
scale_edge_color_manual(
values = c("≤10" = "red",
"11–25" = "orange",
"26-50" = "yellow2"),
breaks = c("≤10", "11–25", "26-50")
) +
scale_fill_manual(
values = c("Mangochi" = "dodgerblue3", "Nsanje" = "lightblue")
) +
scale_colour_manual(
values = c("2023" = "black", "2024" = "pink3")
) +
theme_void() +
labs(edge_color = "No. chromosomal SNPs", fill = "District")
# Save the plot
ggsave("Figures/Strain_network_plot.png", network_plot, height = 4, width = 5.5, dpi = 600)
# Print the plot
print(network_plot)
# Import within-strain genomic and geographic distance data (for comparisons within same village at the same sampling point)
strain_distance <- read.csv("Data/Strain_distance_within_village.csv", header = TRUE)
# Order ST levels by Phylogroup
strain_distance$ST <- factor(
strain_distance$ST,
levels = strain_distance %>%
dplyr::arrange(Phylogroup, ST) %>%
dplyr::pull(ST) %>%
unique()
)
# Remove connections between isolates from the same household (n=6)
strain_distance <- strain_distance %>%
dplyr::filter(Household1 != Household2)
# Print summary of SNP distances
summary(strain_distance$SNP_distance)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 2.000 3.895 3.000 38.000
# Add geographic distance groupings
strain_distance <- strain_distance %>%
mutate(dist_group = case_when(
distance_m < 200 ~ "<200",
distance_m >= 200 & distance_m <= 400 ~ "200 - 400",
distance_m > 400 ~ ">400"
))
strain_distance <- strain_distance %>%
mutate(dist_group = factor(dist_group, levels = c("<200", "200 - 400", ">400")))
# Plot geographic distance vs SNP distance (jittering applied to x axis)
SNP_distance_scatter <- ggplot(strain_distance, aes(x = distance_m, y = SNP_distance, fill = Phylogroup)) +
geom_jitter(height = 0, width = 5, seed = 125, alpha = 0.65, size = 1.8, shape = 21, colour = "black", stroke = 0.15) +
scale_fill_brewer(palette = "Set3") +
scale_x_continuous(name = "Distance between households (metres)") +
scale_y_continuous(name = "Genomic distance (no. chromosomal SNPs)", limits = c(0, 50)) +
theme_grey()
## Warning in geom_jitter(height = 0, width = 5, seed = 125, alpha = 0.65, :
## Ignoring unknown parameters: `seed`
# Save the plot
ggsave("Figures/SNP_distance_scatter.png", SNP_distance_scatter, height = 4, width = 5, dpi = 600)
# Print the plot
print(SNP_distance_scatter)
# Check for statistical difference in SNP distance between geographic distance groups
kruskal.test(SNP_distance ~ dist_group, data = strain_distance)
##
## Kruskal-Wallis rank sum test
##
## data: SNP_distance by dist_group
## Kruskal-Wallis chi-squared = 13.117, df = 2, p-value = 0.001418
# Perform post-hoc Dunn's Test with Bonferroni correction for p-values
dunnTest(SNP_distance ~ dist_group, data = strain_distance, method = "bonferroni")
## Dunn (1964) Kruskal-Wallis multiple comparison
## p-values adjusted with the Bonferroni method.
## Comparison Z P.unadj P.adj
## 1 <200 - >400 -3.6082383 0.0003082833 0.000924850
## 2 <200 - 200 - 400 -0.8330581 0.4048119620 1.000000000
## 3 >400 - 200 - 400 3.0214407 0.0025157493 0.007547248
# Manually create a table from Dunn's test output
pvals <- data.frame(
group1 = c("<200", "<200", "200 - 400"),
group2 = c(">400", "200 - 400", ">400"),
p.adj = c(0.000407142, 0.677055724, 0.009048447),
y.position = c(48, 42, 45)
)
pvals$signif <- cut(
pvals$p.adj,
breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
labels = c("***", "**", "*", "ns")
)
# Plot a violin plot with an overlayed boxplot
SNP_distance_violin <- ggplot(strain_distance, aes(x = dist_group, y = SNP_distance, fill = dist_group)) +
geom_violin(alpha = 0.6, color = "black", linewidth = 0.2) +
ylim(0, 50) +
scale_fill_brewer(palette = "Set4") +
labs(x = "Distance between households (metres)", y = "Genomic distance (no. chromosomal SNPs)") +
theme_minimal() +
theme(legend.position = "none") +
stat_pvalue_manual(
pvals,
label = "signif", # shows *, **, ***
tip.length = 0.02
)
## Warning: Unknown palette: "Set4"
# Save the plot
ggsave("Figures/SNP_distance_violin.png", SNP_distance_violin, height = 4, width = 3.5, dpi = 600)
# Print the plot
print(SNP_distance_violin)
# Prepare the data (make household variable for isolates from strain strains found in 3+ households)
nodes$household <- sub("\\.[0-9]+$", "", nodes$Participant.ID)
# Prepare the data
samama_strains <- nodes %>%
filter(District == "Mangochi")
samama_strains <- samama_strains %>%
left_join(
households %>% select(household, GPS_S, GPS_E),
by = "household"
)
# Convert Samama household coordinates to sf object and project
samama_strains_sf <- samama_strains %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
samama_strains_sf_proj <- st_transform(samama_strains_sf, 32736)
# Set custom colors for year
year_colors <- c(
"2023" = "blue",
"2024" = "red",
"Both years" = "green3"
)
# Define the clusters to include
clusters_to_plot <- c("i) ST206", "ii) ST10", "iii) ST8025", "iv) ST44", "v) ST13823",
"vi) ST10", "vii) ST3580", "viii) ST1015", "ix) ST58", "x) ST2852",
"xii) ST131", "xiii) ST131", "xiv) ST38", "xv) ST38")
# Create individual plots
strain_cluster_plots <- map(clusters_to_plot, function(clust) {
cluster_data <- samama_strains_sf_proj %>%
filter(Strain == clust)
ggplot() +
geom_sf(data = rectangle_samama_proj, fill = "cornsilk", color = "black") +
geom_sf(data = samama_sf_proj, color = "black", size = 1.5) +
geom_sf(data = cluster_data, aes(color = Year), size = 4.0,
show.legend = clust == "xii) ST131") + # Show legend only for this cluster
scale_color_manual(
values = year_colors,
breaks = names(year_colors),
name = "Household colonisation year"
) +
labs(title = paste(clust)) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, size = 18),
legend.position = "bottom",
legend.text = element_text(size = 22),
legend.title = element_text(size = 22)
) +
guides(color = guide_legend(override.aes = list(size = 4)))
})
# Combine plots into one panel with a single shared legend
samama_strain_panel_plot <- wrap_plots(strain_cluster_plots, ncol = 5, nrow = 3) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
# Save the panel
ggsave("Figures/Samama_strain_cluster_panel_map.png", plot = samama_strain_panel_plot, width = 15, height = 12, dpi = 600)
print(samama_strain_panel_plot)
# Prepare the data
mthawira_strains <- nodes %>%
filter(District == "Nsanje")
mthawira_strains <- mthawira_strains %>%
left_join(
households %>% select(household, GPS_S, GPS_E),
by = "household"
)
# Convert mthawira household coordinates to sf object and project
mthawira_strains_sf <- mthawira_strains %>%
st_as_sf(coords = c("GPS_E", "GPS_S"), crs = 4326)
mthawira_strains_sf_proj <- st_transform(mthawira_strains_sf, 32736)
# Set custom colors for year
year_colors <- c(
"2023" = "blue",
"2024" = "red",
"Both years" = "green3"
)
# Define the clusters to include
clusters_to_plot <- c("i) ST206", "ii) ST10", "viii) ST1015", "xi) ST1015")
# Create individual plots
strain_cluster_plots <- map(clusters_to_plot, function(clust) {
cluster_data <- mthawira_strains_sf_proj %>%
filter(Strain == clust)
ggplot() +
geom_sf(data = rectangle_mthawira_proj, fill = "cornsilk", color = "black") +
geom_sf(data = mthawira_sf_proj, color = "black", size = 1.5) +
geom_sf(data = cluster_data, aes(color = Year), size = 4.0,
show.legend = FALSE) + # Show legend only for this cluster) +
scale_color_manual(
values = year_colors,
breaks = names(year_colors),
name = "Household colonisation year"
) +
labs(title = paste(clust)) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, size = 18),
legend.position = "bottom",
legend.text = element_text(size = 22),
legend.title = element_text(size = 22)
) +
guides(color = guide_legend(override.aes = list(size = 4)))
})
# Combine plots into one panel with a single shared legend
mthawira_strain_panel_plot <- wrap_plots(strain_cluster_plots, ncol = 5, nrow = 1) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
# Save the panel
ggsave("Figures/Mthawira_strain_cluster_panel_map.png", plot = mthawira_strain_panel_plot, width = 15, height = 4, dpi = 600)
print(mthawira_strain_panel_plot)
# Import ST131 isolate metadata, including isolates from previous studies
ST131_metadata <- read.csv("data/ST131_genomes.csv", header = TRUE, row.names = 1)
# Define the core genome alignment size (columns containing only As, Ts, Cs and Gs)
ST131_cg_size <- 3954219
ST131_recomb_masked_cg_size <- 2834919
# Load ST131 SNP distance matrix masking recombination sites
ST131_snp_matrix_recomb_masked <- read.csv("data/ST131_malawi_SNP_dists_recombination_masked.csv", header = TRUE, row.names = 1)
# Convert to distance object and cluster
ST131_snp_dist_recomb_masked <- as.dist(ST131_snp_matrix_recomb_masked)
ST131_hc_recomb_masked <- hclust(ST131_snp_dist_recomb_masked, method = "average")
# Identify SNP thresholds representing strict, moderate and loose transmission networks adjusting for recombination-masking
ST131_strict <- ST131_recomb_masked_cg_size*0.000002
ST131_moderate <- ST131_recomb_masked_cg_size*0.000005
ST131_loose <- ST131_recomb_masked_cg_size*0.00002
print(c(ST131_strict, ST131_moderate, ST131_loose))
## [1] 5.669838 14.174595 56.698380
# Plot a dendrogram of SNP distances that masks recombination
# Open SVG device
svg("Figures/ST131_dendrogram.svg", width = 8, height = 4.5)
# Convert hclust to dendrogram
ST131_dend_recomb_masked <- as.dendrogram(ST131_hc_recomb_masked)
# Generate the dendrogram
plot(ST131_dend_recomb_masked,
main = "ST131",
xlab = "",
ylab = "SNP distance",
cex = 1, # leaf labels
cex.main = 1, # title
cex.lab = 0.8, # axis labels
cex.axis = 0.8, # tick labels
ylim = c(0, 400))
# Close device
dev.off()
## png
## 2
# Print the dendrogram
plot(ST131_dend_recomb_masked,
main = "ST131",
xlab = "",
ylab = "SNP distance",
cex = 1, # leaf labels
cex.main = 1, # title
cex.lab = 0.8, # axis labels
cex.axis = 0.8, # tick labels
ylim = c(0, 400))
# Plot an annotated SNP distance heatmap using the above clustering
# Convert SNP matrix to a matrix object for plotting
mat <- as.matrix(ST131_snp_matrix_recomb_masked)
# Typography for annotations and legends
# Legend / annotation TITLE text (bold)
title_gp <- gpar(
fontsize = 10,
fontface = "bold",
fontfamily = "sans"
)
# Legend / annotation LABEL text (normal)
label_gp <- gpar(
fontsize = 9,
fontface = "plain",
fontfamily = "sans"
)
# Prepare the metadata
annotation <- as.data.frame(ST131_metadata)
annotation <- annotation[, c("Donor", "Location", "Study", "Year"), drop = FALSE]
annotation$Year <- as.numeric(annotation$Year)
# Match metadata and matrix orders
annotation <- annotation[colnames(mat), , drop = FALSE]
# Define heatmap colour mappings
snp_color <- colorRamp2(
c(0, 400),
c("white", "red")
)
# Generate the range for continuous year annotation
year_color <- colorRamp2(
range(annotation$Year, na.rm = TRUE),
c("lightblue", "darkblue")
)
ha_col <- HeatmapAnnotation(
df = annotation,
col = list(
Location = c(
"Blantyre (urban)" = "springgreen",
"Mangochi District (rural)" = "springgreen3",
"Nsanje District (rural)" = "green4"
),
Donor = c(
"Hospital inpatient" = "tan4",
"Recent hospital discharge" = "tan3",
"Community" = "tan1"
),
Study = c(
"This study" = "gray80",
"Lewis et al." = "gray50",
"Musicha et al." = "gray20"
),
Year = year_color
),
annotation_name_gp = title_gp,
annotation_legend_param = list(
Location = list(title_gp = title_gp, labels_gp = label_gp),
Donor = list(title_gp = title_gp, labels_gp = label_gp),
Study = list(title_gp = title_gp, labels_gp = label_gp),
Year = list(title_gp = title_gp, labels_gp = label_gp)
),
gp = gpar(col = "grey30", lwd = 0.3)
)
# Generate the annotated heatmap
ht <- Heatmap(
mat,
name = "SNP distance",
col = snp_color,
rect_gp = gpar(col = "grey30", lwd = 0.3),
cluster_rows = ST131_hc_recomb_masked,
cluster_columns = ST131_hc_recomb_masked,
top_annotation = ha_col,
show_row_dend = FALSE,
show_column_dend = FALSE,
show_row_names = FALSE,
show_column_names = FALSE,
row_names_gp = gpar(fontsize = 4.5),
column_names_gp = gpar(fontsize = 4.5),
heatmap_legend_param = list(
title = "SNPs",
title_gp = title_gp,
labels_gp = label_gp,
at = c(0, 100, 200, 300, 400)
)
)
# Save the plot
png(
filename = "Figures/ST131_recombination_masked_SNP_heatmap.png",
width = 8,
height = 6,
units = "in",
res = 600
)
draw(ht, merge_legend = TRUE)
dev.off()
## png
## 2
# Print the plot
draw(ht, merge_legend = TRUE)
# Convert matrix to long format
long_snp <- ST131_snp_matrix_recomb_masked %>%
rownames_to_column(var = "Isolate1") %>%
pivot_longer(-Isolate1, names_to = "Isolate2", values_to = "SNP_distance")
# Keep only the required columns for edges
edges <- long_snp %>%
select(Isolate1, Isolate2, SNP_distance)
# Categorise SNP distances for edge construction
edges <- edges %>%
mutate(
category = case_when(
SNP_distance <= ST131_strict ~ "<0.0002% (10 SNPs per 5 Mb)",
SNP_distance <= ST131_moderate ~ "<0.0005% (25 SNPs per 5 Mb)",
SNP_distance <= ST131_loose ~ "<0.002% (100 SNPs per 5 Mb)"
),
category = factor(category,
levels = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"),
ordered = TRUE)
) %>%
filter(!is.na(category))
# Add weighting to distribute nodes
edges <- edges %>%
mutate(weight = 1 / (SNP_distance + 1))
# Get node data
nodes <- ST131_metadata %>%
mutate(
# Combine Study and isolation year with space + brackets
`Study (isolation year)` = paste0(Study, " (", Year, ")")
) %>%
rownames_to_column(var = "Isolate")
# Create igraph object
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# Set seed for reproducible plotting and compute layout coordinate
set.seed(42)
lay <- create_layout(g, layout = "fr")
# Plot networks
network_plot <- ggraph(lay) +
geom_edge_link(aes(colour = category), width = 0.7, alpha = 0.7) +
geom_node_point(aes(fill = `Study (isolation year)`, colour = Location),
shape = 21, size = 2.5, stroke = 1.0) +
scale_edge_color_manual(
values = c("<0.0002% (10 SNPs per 5 Mb)" = "red",
"<0.0005% (25 SNPs per 5 Mb)" = "orange",
"<0.002% (100 SNPs per 5 Mb)" = "yellow2"),
breaks = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"
)
) +
scale_colour_manual(
values = c("Blantyre (urban)" = "red",
"Mangochi District (rural)" = "springgreen",
"Nsanje District (rural)" = "green4"
)
) +
scale_fill_manual(
values = c('Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
) +
theme_void() +
labs(edge_color = "SNPs as % of core genome alignment", color = "Location", fill = "Study (isolation year)")
# Save the plot
ggsave("Figures/ST131_network_plot.png", network_plot, height = 4, width = 7, dpi = 600)
# Print the plot
print(network_plot)
# Load ST38 SNP distance matrix including recombination sites
ST131_snp_matrix <- read.csv("data/ST131_malawi_SNP_dists.csv", header = TRUE, row.names = 1)
# Identify SNP thresholds representing strict, moderate and loose transmission networks including recombination sites
ST131_strict_with_recomb <- ST131_cg_size*0.000002
ST131_moderate_with_recomb <- ST131_cg_size*0.000005
ST131_loose_with_recomb <- ST131_cg_size*0.00002
print(c(ST131_strict_with_recomb, ST131_moderate_with_recomb, ST131_loose_with_recomb))
## [1] 7.908438 19.771095 79.084380
# Convert matrix to long format
long_snp <- ST131_snp_matrix %>%
rownames_to_column(var = "Isolate1") %>%
pivot_longer(-Isolate1, names_to = "Isolate2", values_to = "SNP_distance")
# Keep only the required columns for edges
edges <- long_snp %>%
select(Isolate1, Isolate2, SNP_distance)
# Categorise SNP distances for edge construction
edges <- edges %>%
mutate(
category = case_when(
SNP_distance <= ST131_strict_with_recomb ~ "<0.0002% (10 SNPs per 5 Mb)",
SNP_distance <= ST131_moderate_with_recomb ~ "<0.0005% (25 SNPs per 5 Mb)",
SNP_distance <= ST131_loose_with_recomb ~ "<0.002% (100 SNPs per 5 Mb)"
),
category = factor(category,
levels = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"),
ordered = TRUE)
) %>%
filter(!is.na(category))
# Add weighting to distribute nodes
edges <- edges %>%
mutate(weight = 1 / (SNP_distance + 1))
# Create igraph object
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# Set seed for reproducible plotting and compute layout coordinate
set.seed(42)
lay <- create_layout(g, layout = "fr")
# Plot networks
network_plot <- ggraph(lay) +
geom_edge_link(aes(colour = category), width = 0.7, alpha = 0.7) +
geom_node_point(aes(fill = `Study (isolation year)`, colour = Location),
shape = 21, size = 2.5, stroke = 1.0) +
scale_edge_color_manual(
values = c("<0.0002% (10 SNPs per 5 Mb)" = "red",
"<0.0005% (25 SNPs per 5 Mb)" = "orange",
"<0.002% (100 SNPs per 5 Mb)" = "yellow2"),
breaks = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"
)
) +
scale_colour_manual(
values = c("Blantyre (urban)" = "red",
"Mangochi District (rural)" = "springgreen",
"Nsanje District (rural)" = "green4"
)
) +
scale_fill_manual(
values = c('Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
) +
theme_void() +
labs(edge_color = "SNPs as % of core genome alignment", color = "Location", fill = "Study (isolation year)")
# Save the plot
ggsave("Figures/ST131_network_plot_inc_recomb_sites.png", network_plot, height = 4, width = 7, dpi = 600)
# Print the plot
print(network_plot)
# Read in the treefile
ST131_tree <- read.tree("Data/ST131.aln.treefile")
# Root the tree at midpoint
ST131_tree <- midpoint(ST131_tree)
# Extract isolate metadata for tree
tree_metadata <- nodes[, c("Isolate", "Location", "Study (isolation year)")]
# Reorder metadata to match tree tip order
tree_metadata <- tree_metadata[match(ST131_tree$tip.label, tree_metadata$Isolate), ]
rownames(tree_metadata) <- tree_metadata$Isolate
# Colour palette
study_fill_vals <- c(
'Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
# Rename Isolate -> label
tree_metadata_for_join <- tree_metadata %>%
rename(label = Isolate)
# Plot tree
p <- ggtree(ST131_tree) %<+% tree_metadata_for_join +
geom_tippoint(
aes(
fill = `Study (isolation year)`,
shape = Location
),
colour = "black",
stroke = 0.3,
size = 2.0
) +
scale_fill_manual(values = study_fill_vals, drop = FALSE) +
scale_shape_manual(
values = c(
"Blantyre (urban)" = 21,
"Mangochi District (rural)" = 22,
"Nsanje District (rural)" = 24
)
) +
theme_tree2() +
theme(legend.position = "right") +
labs(
fill = "Study (isolation year)",
shape = "Location"
) +
geom_treescale(
x = 0.00005, y = 115, width = 0.001,
fontsize = 3, linesize = 0.5
)
# Override shape in key so colours are plotted properly
p <- p +
guides(
fill = guide_legend(
override.aes = list(shape = 21, colour = "black")
)
)
# Clean x-axis
p <- p +
theme(
axis.line.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title.x = element_blank()
)
# Add some border space to prevent plot clipping
p <- p + scale_y_continuous(expand = expansion(mult = c(0.03, 0.03)))
## Scale for y is already present.
## Adding another scale for y, which will replace the existing scale.
# Save the plot
ggsave("Figures/ST131_tree.png", p, width = 8, height = 8, dpi = 600)
# Print the plot
print(p)
# Import ST38 isolate metadata, including isolates from previous studies
ST38_metadata <- read.csv("data/ST38_genomes.csv", header = TRUE, row.names = 1)
# Define the core genome alignment size (columns containing only As, Ts, Cs and Gs)
ST38_cg_size <- 4279355
ST38_recomb_masked_cg_size <- 3472800
# Load ST38 SNP distance matrix masking recombination sites
ST38_snp_matrix_recomb_masked <- read.csv("data/ST38_malawi_SNP_dists_recombination_masked.csv", header = TRUE, row.names = 1)
# Convert to distance object and cluster
ST38_snp_dist_recomb_masked <- as.dist(ST38_snp_matrix_recomb_masked)
ST38_hc_recomb_masked <- hclust(ST38_snp_dist_recomb_masked, method = "average")
# Identify SNP thresholds representing strict, moderate and loose transmission networks adjusting for recombination-masking
ST38_strict <- ST38_recomb_masked_cg_size*0.000002
ST38_moderate <- ST38_recomb_masked_cg_size*0.000005
ST38_loose <- ST38_recomb_masked_cg_size*0.00002
print(c(ST38_strict, ST38_moderate, ST38_loose))
## [1] 6.9456 17.3640 69.4560
# Plot a dendrogram of SNP distances that masks recombination
# Open SVG device
svg("Figures/ST38_dendrogram.svg", width = 8, height = 4.5)
# Convert hclust to dendrogram
ST38_dend_recomb_masked <- as.dendrogram(ST38_hc_recomb_masked)
# Generate the dendrogram
plot(ST38_dend_recomb_masked,
main = "ST38",
xlab = "",
ylab = "SNP distance",
cex = 1, # leaf labels
cex.main = 1, # title
cex.lab = 0.8, # axis labels
cex.axis = 0.8, # tick labels
ylim = c(0, 400))
# Close device
dev.off()
## png
## 2
# Plot the dendrogram
plot(ST38_dend_recomb_masked,
main = "ST38",
xlab = "",
ylab = "SNP distance",
cex = 1, # leaf labels
cex.main = 1, # title
cex.lab = 0.8, # axis labels
cex.axis = 0.8, # tick labels
ylim = c(0, 400))
# Plot an annotated SNP distance heatmap using the above clustering
# Convert SNP matrix to a matrix object for plotting
mat <- as.matrix(ST38_snp_matrix_recomb_masked)
# Typography for annotations and legends
# Legend / annotation TITLE text (bold)
title_gp <- gpar(
fontsize = 10,
fontface = "bold",
fontfamily = "sans"
)
# Legend / annotation LABEL text (normal)
label_gp <- gpar(
fontsize = 9,
fontface = "plain",
fontfamily = "sans"
)
# Prepare the metadata
annotation <- as.data.frame(ST38_metadata)
annotation <- annotation[, c("Donor", "Location", "Study", "Year"), drop = FALSE]
annotation$Year <- as.numeric(annotation$Year)
# Match metadata and matrix orders
annotation <- annotation[colnames(mat), , drop = FALSE]
# Define heatmap colour mappings
snp_color <- colorRamp2(
c(0, 400),
c("white", "red")
)
# Generate the range for continuous year annotation
year_color <- colorRamp2(
range(annotation$Year, na.rm = TRUE),
c("lightblue", "darkblue")
)
ha_col <- HeatmapAnnotation(
df = annotation,
col = list(
Location = c(
"Blantyre (urban)" = "springgreen",
"Mangochi District (rural)" = "springgreen3",
"Nsanje District (rural)" = "green4"
),
Donor = c(
"Hospital inpatient" = "tan4",
"Recent hospital discharge" = "tan3",
"Community" = "tan1"
),
Study = c(
"This study" = "gray80",
"Lewis et al." = "gray50",
"Musicha et al." = "gray20"
),
Year = year_color
),
annotation_name_gp = title_gp,
annotation_legend_param = list(
Location = list(title_gp = title_gp, labels_gp = label_gp),
Donor = list(title_gp = title_gp, labels_gp = label_gp),
Study = list(title_gp = title_gp, labels_gp = label_gp),
Year = list(title_gp = title_gp, labels_gp = label_gp)
),
gp = gpar(col = "grey30", lwd = 0.3)
)
# Generate the annotated heatmap
ht <- Heatmap(
mat,
name = "SNP distance",
col = snp_color,
rect_gp = gpar(col = "grey30", lwd = 0.3),
cluster_rows = ST38_hc_recomb_masked,
cluster_columns = ST38_hc_recomb_masked,
top_annotation = ha_col,
show_row_dend = FALSE,
show_column_dend = FALSE,
show_row_names = FALSE,
show_column_names = FALSE,
row_names_gp = gpar(fontsize = 4.5),
column_names_gp = gpar(fontsize = 4.5),
heatmap_legend_param = list(
title = "SNPs",
title_gp = title_gp,
labels_gp = label_gp,
at = c(0, 100, 200, 300, 400)
)
)
# Save the plot
png(
filename = "Figures/ST38_recombination_masked_SNP_heatmap.png",
width = 8,
height = 6,
units = "in",
res = 600
)
draw(ht, merge_legend = TRUE)
dev.off()
## png
## 2
# Print the plot
draw(ht, merge_legend = TRUE)
# Convert matrix to long format
long_snp <- ST38_snp_matrix_recomb_masked %>%
rownames_to_column(var = "Isolate1") %>%
pivot_longer(-Isolate1, names_to = "Isolate2", values_to = "SNP_distance")
# Keep only the required columns for edges
edges <- long_snp %>%
select(Isolate1, Isolate2, SNP_distance)
# Categorise SNP distances for edge construction
edges <- edges %>%
mutate(
category = case_when(
SNP_distance <= ST38_strict ~ "<0.0002% (10 SNPs per 5 Mb)",
SNP_distance <= ST38_moderate ~ "<0.0005% (25 SNPs per 5 Mb)",
SNP_distance <= ST38_loose ~ "<0.002% (100 SNPs per 5 Mb)"
),
category = factor(category,
levels = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"),
ordered = TRUE)
) %>%
filter(!is.na(category))
# Add weighting to distribute nodes
edges <- edges %>%
mutate(weight = 1 / (SNP_distance + 1))
# Get node data
nodes <- ST38_metadata %>%
mutate(
# Combine Study and isolation year with space + brackets
`Study (isolation year)` = paste0(Study, " (", Year, ")")
) %>%
rownames_to_column(var = "Isolate")
# Create igraph object
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# Set seed for reproducible plotting and compute layout coordinate
set.seed(42)
lay <- create_layout(g, layout = "fr")
# Plot networks
network_plot <- ggraph(lay) +
geom_edge_link(aes(colour = category), width = 0.7, alpha = 0.7) +
geom_node_point(aes(fill = `Study (isolation year)`, colour = Location),
shape = 21, size = 2.5, stroke = 1.0) +
scale_edge_color_manual(
values = c("<0.0002% (10 SNPs per 5 Mb)" = "red",
"<0.0005% (25 SNPs per 5 Mb)" = "orange",
"<0.002% (100 SNPs per 5 Mb)" = "yellow2"),
breaks = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"
)
) +
scale_colour_manual(
values = c("Blantyre (urban)" = "red",
"Mangochi District (rural)" = "springgreen",
"Nsanje District (rural)" = "green4"
)
) +
scale_fill_manual(
values = c('Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
) +
theme_void() +
labs(edge_color = "SNPs as % of core genome alignment", color = "Location", fill = "Study (isolation year)")
# Save the plot
ggsave("Figures/ST38_network_plot.png", network_plot, height = 4, width = 7, dpi = 600)
# Print the plot
print(network_plot)
# Load ST38 SNP distance matrix including recombination sites
ST38_snp_matrix <- read.csv("data/ST38_malawi_SNP_dists.csv", header = TRUE, row.names = 1)
# Identify SNP thresholds representing strict, moderate and loose transmission networks including recombination sites
ST38_strict_with_recomb <- ST38_cg_size*0.000002
ST38_moderate_with_recomb <- ST38_cg_size*0.000005
ST38_loose_with_recomb <- ST38_cg_size*0.00002
print(c(ST38_strict_with_recomb, ST38_moderate_with_recomb, ST38_loose_with_recomb))
## [1] 8.55871 21.39678 85.58710
# Convert matrix to long format
long_snp <- ST38_snp_matrix %>%
rownames_to_column(var = "Isolate1") %>%
pivot_longer(-Isolate1, names_to = "Isolate2", values_to = "SNP_distance")
# Keep only the required columns for edges
edges <- long_snp %>%
select(Isolate1, Isolate2, SNP_distance)
# Categorise SNP distances for edge construction
edges <- edges %>%
mutate(
category = case_when(
SNP_distance <= ST38_strict_with_recomb ~ "<0.0002% (10 SNPs per 5 Mb)",
SNP_distance <= ST38_moderate_with_recomb ~ "<0.0005% (25 SNPs per 5 Mb)",
SNP_distance <= ST38_loose_with_recomb ~ "<0.002% (100 SNPs per 5 Mb)"
),
category = factor(category,
levels = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"),
ordered = TRUE)
) %>%
filter(!is.na(category))
# Add weighting to distribute nodes
edges <- edges %>%
mutate(weight = 1 / (SNP_distance + 1))
# Create igraph object
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# Set seed for reproducible plotting and compute layout coordinate
set.seed(42)
lay <- create_layout(g, layout = "fr")
# Plot networks
network_plot <- ggraph(lay) +
geom_edge_link(aes(colour = category), width = 0.7, alpha = 0.7) +
geom_node_point(aes(fill = `Study (isolation year)`, colour = Location),
shape = 21, size = 2.5, stroke = 1.0) +
scale_edge_color_manual(
values = c("<0.0002% (10 SNPs per 5 Mb)" = "red",
"<0.0005% (25 SNPs per 5 Mb)" = "orange",
"<0.002% (100 SNPs per 5 Mb)" = "yellow2"),
breaks = c("<0.0002% (10 SNPs per 5 Mb)",
"<0.0005% (25 SNPs per 5 Mb)",
"<0.002% (100 SNPs per 5 Mb)"
)
) +
scale_colour_manual(
values = c("Blantyre (urban)" = "red",
"Mangochi District (rural)" = "springgreen",
"Nsanje District (rural)" = "green4"
)
) +
scale_fill_manual(
values = c('Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
) +
theme_void() +
labs(edge_color = "SNPs as % of core genome alignment", color = "Location", fill = "Study (isolation year)")
# Save the plot
ggsave("Figures/ST38_network_plot_inc_recomb_sites.png", network_plot, height = 4, width = 7, dpi = 600)
# Print the plot
print(network_plot)
# Read in the treefile
ST38_tree <- read.tree("Data/ST38.aln.treefile")
# Root the tree at midpoint
ST38_tree <- midpoint(ST38_tree)
# Extract isolate metadata for tree
tree_metadata <- nodes[, c("Isolate", "Location", "Study (isolation year)")]
# Reorder metadata to match tree tip order
tree_metadata <- tree_metadata[match(ST38_tree$tip.label, tree_metadata$Isolate), ]
rownames(tree_metadata) <- tree_metadata$Isolate
# Colour palette
study_fill_vals <- c(
'Lewis et al. (2017)' = "grey95",
'Lewis et al. (2018)' = "grey30",
'Musicha et al. (2019)' = "pink",
'Musicha et al. (2020)' = "orange2",
'This study (2023)' = "skyblue1",
'This study (2024)' = "blue1"
)
# Rename Isolate -> label
tree_metadata_for_join <- tree_metadata %>%
rename(label = Isolate)
# Plot tree
p <- ggtree(ST38_tree) %<+% tree_metadata_for_join +
geom_tippoint(
aes(
fill = `Study (isolation year)`,
shape = Location
),
colour = "black",
stroke = 0.3,
size = 2.0
) +
scale_fill_manual(values = study_fill_vals, drop = FALSE) +
scale_shape_manual(
values = c(
"Blantyre (urban)" = 21,
"Mangochi District (rural)" = 22,
"Nsanje District (rural)" = 24
)
) +
theme_tree2() +
theme(legend.position = "right") +
labs(
fill = "Study (isolation year)",
shape = "Location"
) +
geom_treescale(
x = 0.0005, y = 50, width = 0.001,
fontsize = 3, linesize = 0.5
)
# Override shape in key so colours are plotted properly
p <- p +
guides(
fill = guide_legend(
override.aes = list(shape = 21, colour = "black")
)
)
# Clean x-axis
p <- p +
theme(
axis.line.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title.x = element_blank()
)
# Add some border space to prevent plot clipping
p <- p + scale_y_continuous(expand = expansion(mult = c(0.03, 0.03)))
## Scale for y is already present.
## Adding another scale for y, which will replace the existing scale.
# Save the plot
ggsave("Figures/ST38_tree.png", p, width = 8, height = 8, dpi = 600)
# Print the plot
print(p)