This code compiles summary information about the gene GPX1 (Glutathione Peroxidase 1). Additionally, it generates alignments and a phylogenetic tree to illustrate the evolutionary relationship between the human version of the gene and its homologs in other species.
Key information used to make this script can be found here:
Other resources consulted:
Load necessary packages: BiocManager and drawProteins from BioConductor
library(BiocManager)
## Bioconductor version '3.13' is out-of-date; the current release version '3.14'
## is available with R version '4.1'; see https://bioconductor.org/install
library(drawProteins)
Load other packages:
# GitHub Packages
library(compbio4all)
library(ggmsa)
## Registered S3 methods overwritten by 'ggalt':
## method from
## grid.draw.absoluteGrob ggplot2
## grobHeight.absoluteGrob ggplot2
## grobWidth.absoluteGrob ggplot2
## grobX.absoluteGrob ggplot2
## grobY.absoluteGrob ggplot2
# CRAN Packages
library(rentrez)
library(seqinr)
library(ape)
##
## Attaching package: 'ape'
## The following objects are masked from 'package:seqinr':
##
## as.alignment, consensus
library(pander)
library(ggplot2)
# Bioconductor Packages
library(msa)
## Loading required package: Biostrings
## Loading required package: BiocGenerics
## Loading required package: parallel
##
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:parallel':
##
## clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
## clusterExport, clusterMap, parApply, parCapply, parLapply,
## parLapplyLB, parRapply, parSapply, parSapplyLB
## The following objects are masked from 'package:stats':
##
## IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
##
## anyDuplicated, append, as.data.frame, basename, cbind, colnames,
## dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
## grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,
## order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
## rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,
## union, unique, unsplit, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
##
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:base':
##
## expand.grid, I, unname
## Loading required package: IRanges
## Loading required package: XVector
## Loading required package: GenomeInfoDb
##
## Attaching package: 'Biostrings'
## The following object is masked from 'package:ape':
##
## complement
## The following object is masked from 'package:seqinr':
##
## translate
## The following object is masked from 'package:base':
##
## strsplit
##
## Attaching package: 'msa'
## The following object is masked from 'package:BiocManager':
##
## version
# Biostrings Packages
library(Biostrings)
library(HGNChelper)
Accession numbers were obtained from RefSeq, Refseq Homlogene, UniProt and PDB. UniProt accession numbers can be found by searching for the gene name. PDB accessions can be found by searching with a UniProt accession or a gene name, though many proteins are not in PDB. The the Neanderthal genome database was searched but did not yield sequence information on.
A protein BLAST search (https://blast.ncbi.nlm.nih.gov/Blast.cgi?PROGRAM=blastp&PAGE_TYPE=BlastSearch&LINK_LOC=blasthome) was carried out excluding vertebrates to determine if it occurred outside of vertebreates. The gene does not appear in non-vertebrates and so a second search was conducted to exclude mammals.
HGNChelper::checkGeneSymbols(x = c("GPX1"))
## Maps last updated on: Thu Oct 24 12:31:05 2019
## x Approved Suggested.Symbol
## 1 GPX1 TRUE GPX1
Not available: - Neanderthal
Does not occur: - Outside of Vertebrates
refseq.ID <- c("NP_000572", "NP_001070980", "NP_001152770", "NP_001108591", "NP_776501","NP_032186", "NP_110453", "NP_001264782", "NP_001015740", "NP_001004634")
uniprot.ID <- c("P07203", "Q0EFA0", "NA", "NA", "P00435", "P11352", "P04041", "NA", "NA", "NA")
pdb <- c("2F8A", "NA", "NA", "NA", "1GP1", "NA", "NA", "NA", "NA", "NA")
species <- c("Homo sapiens", "Pan troglodytes", "Macaca mulatta", "Canis lupus", "Bos taurus", "Mus musculus", "Rattus norvegicus", "Gallus gallus", "Xenopus tropicalis", "Danio rerio")
common_name <- c("Human", "Chimpanzee", "Rhesus Monkey", "Wolf", "Cattle", "Mouse", "Rat", "Junglefowl", "Frog", "Zebrafish")
gene_name <- c("GPX1", "GPX1", "GPX1", "GPX1", "GPX1", "Gpx1", "Gpx1", "GPX1", "gpx1", "gpx1b")
gpx1_df <- data.frame(refseq.ID, uniprot.ID, pdb, species, common_name, gene_name)
pander::pander(gpx1_df)
| refseq.ID | uniprot.ID | pdb | species | common_name | gene_name |
|---|---|---|---|---|---|
| NP_000572 | P07203 | 2F8A | Homo sapiens | Human | GPX1 |
| NP_001070980 | Q0EFA0 | NA | Pan troglodytes | Chimpanzee | GPX1 |
| NP_001152770 | NA | NA | Macaca mulatta | Rhesus Monkey | GPX1 |
| NP_001108591 | NA | NA | Canis lupus | Wolf | GPX1 |
| NP_776501 | P00435 | 1GP1 | Bos taurus | Cattle | GPX1 |
| NP_032186 | P11352 | NA | Mus musculus | Mouse | Gpx1 |
| NP_110453 | P04041 | NA | Rattus norvegicus | Rat | Gpx1 |
| NP_001264782 | NA | NA | Gallus gallus | Junglefowl | GPX1 |
| NP_001015740 | NA | NA | Xenopus tropicalis | Frog | gpx1 |
| NP_001004634 | NA | NA | Danio rerio | Zebrafish | gpx1b |
h_sapiens_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_000572", rettype = "fasta") #1
p_troglodytes_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001070980", rettype = "fasta") #2
m_mulatta_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001152770", rettype = "fasta") #3
c_lupus_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001108591", rettype = "fasta") #4
b_taurus_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_776501", rettype = "fasta") #5
m_musculus_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_032186", rettype = "fasta") #6
r_norvegicus_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_110453", rettype = "fasta") #7
g_gallus_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001264782", rettype = "fasta") #8
x_tropicalis_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001015740", rettype = "fasta") #9
d_rerio_fasta <- compbio4all::entrez_fetch_list(db = "protein", id = "NP_001004634", rettype = "fasta") #10
gpx1_list <- list(h_sapiens_fasta, p_troglodytes_fasta, m_mulatta_fasta, c_lupus_fasta, b_taurus_fasta, m_musculus_fasta, r_norvegicus_fasta, g_gallus_fasta, x_tropicalis_fasta, d_rerio_fasta)
# Number of Fasta files obtained
length(gpx1_list)
## [1] 10
# The first entry
gpx1_list[[1]]
## $NP_000572
## [1] ">NP_000572.2 glutathione peroxidase 1 isoform 1 [Homo sapiens]\nMCAARLAAAAAAAQSVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRG\nLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDA\nTALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLRRYSRRFQTIDIEPDIEALLSQGPSCA\n\n"
# Remove Fasta header
for (i in 1:length(gpx1_list)){
gpx1_list[[i]] <- compbio4all::fasta_cleaner(gpx1_list[[i]], parse = F)
}
P07203_json <- drawProteins::get_features("P07203")
## [1] "Download has worked"
my_prot_df <- drawProteins::feature_to_dataframe(P07203_json)
my_prot_df[,-2]
## type begin end length accession entryName taxid order
## featuresTemp CHAIN 1 203 202 P07203 GPX1_HUMAN 9606 1
## featuresTemp.1 ACT_SITE 49 49 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.2 SITE 49 49 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.3 NON_STD 49 49 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.4 MOD_RES 34 34 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.5 MOD_RES 88 88 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.6 MOD_RES 88 88 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.7 MOD_RES 114 114 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.8 MOD_RES 114 114 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.9 MOD_RES 148 148 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.10 MOD_RES 148 148 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.11 MOD_RES 197 197 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.12 MOD_RES 201 201 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.13 VAR_SEQ 85 98 13 P07203 GPX1_HUMAN 9606 1
## featuresTemp.14 VAR_SEQ 99 203 104 P07203 GPX1_HUMAN 9606 1
## featuresTemp.15 VARIANT 5 5 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.16 VARIANT 7 8 1 P07203 GPX1_HUMAN 9606 1
## featuresTemp.17 VARIANT 8 8 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.18 VARIANT 194 194 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.19 VARIANT 200 200 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.20 CONFLICT 93 93 0 P07203 GPX1_HUMAN 9606 1
## featuresTemp.21 HELIX 16 18 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.22 HELIX 32 35 3 P07203 GPX1_HUMAN 9606 1
## featuresTemp.23 STRAND 38 45 7 P07203 GPX1_HUMAN 9606 1
## featuresTemp.24 STRAND 47 49 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.25 HELIX 52 66 14 P07203 GPX1_HUMAN 9606 1
## featuresTemp.26 HELIX 67 69 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.27 STRAND 71 77 6 P07203 GPX1_HUMAN 9606 1
## featuresTemp.28 TURN 82 85 3 P07203 GPX1_HUMAN 9606 1
## featuresTemp.29 HELIX 89 91 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.30 HELIX 92 98 6 P07203 GPX1_HUMAN 9606 1
## featuresTemp.31 STRAND 108 112 4 P07203 GPX1_HUMAN 9606 1
## featuresTemp.32 HELIX 124 132 8 P07203 GPX1_HUMAN 9606 1
## featuresTemp.33 HELIX 147 149 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.34 STRAND 152 154 2 P07203 GPX1_HUMAN 9606 1
## featuresTemp.35 STRAND 166 169 3 P07203 GPX1_HUMAN 9606 1
## featuresTemp.36 STRAND 175 179 4 P07203 GPX1_HUMAN 9606 1
## featuresTemp.37 HELIX 185 188 3 P07203 GPX1_HUMAN 9606 1
## featuresTemp.38 HELIX 189 196 7 P07203 GPX1_HUMAN 9606 1
my_canvas <- draw_canvas(my_prot_df)
my_canvas <- draw_chains(my_canvas, my_prot_df, label_size = 2.5)
my_canvas <- draw_domains(my_canvas, my_prot_df)
my_canvas <- draw_regions(my_canvas, my_prot_df)
my_canvas <- draw_folding(my_canvas, my_prot_df)
my_canvas
gpx1_human_vector <- compbio4all::fasta_cleaner(h_sapiens_fasta)
str(gpx1_human_vector)
## chr [1:203] "M" "C" "A" "A" "R" "L" "A" "A" "A" "A" "A" "A" "A" "Q" "S" ...
# set up 2 x 2 grid
par(mfrow = c(2,2), mar = c(0, 0, 2, 1))
# plot 1: - Defaults
dotPlot(gpx1_human_vector, gpx1_human_vector ,
wsize = 1,
nmatch = 1,
main = "GPX1 Defaults")
# plot - size = 10, nmatch = 1
dotPlot(gpx1_human_vector, gpx1_human_vector,
wsize = 10,
nmatch = 1,
main = " GPX1 - size = X, nmatch = X")
# plot 3: - size = 10, nmatch = 5
dotPlot(gpx1_human_vector, gpx1_human_vector ,
wsize = 10,
nmatch = 5,
main = "GPX1 - size = 10, nmatch = 5")
# plot 4: size = 20, nmatch = 5
dotPlot(gpx1_human_vector, gpx1_human_vector,
wsize = 20,
nmatch = 5,
main = "GPX1 - size = 20, nmatch = 5")
# reset par()
par(mfrow = c(1,1),
mar = c(4,4,4,4))
# best DotPlot
dotPlot(gpx1_human_vector, gpx1_human_vector ,
wsize = 1,
nmatch = 1,
xlab = "gpx1_human_vector", ylab = "gpx1_human_vector")
This particular protein is not in
source <- c("Pfam", "Uniprot", "PDB")
protein_property <- c("There is an interesting doman 'GSHPx' from amino acid 16 to 130. Additionally, a low complexity region is indicated form amino acid 16 to 130.", "GPX1 protects the hemoglobin in erythocytes from oxidative breakdown. It is located in the cytoplasm, and it is expressed in platelets.", "PDB results show a structure '2F8A', which is the selenocysteine to glycine mutant of GPX1. GPX1 has both A and B chains, and has a sequence length of 208." )
link <- c("http://pfam.xfam.org/protein/P07203", "https://www.uniprot.org/uniprot/P07203", "https://www.rcsb.org/structure/2F8A" )
prop_df <- data.frame(source, protein_property, link)
pander::pander(prop_df)
| source | protein_property |
|---|---|
| Pfam | There is an interesting doman ‘GSHPx’ from amino acid 16 to 130. Additionally, a low complexity region is indicated form amino acid 16 to 130. |
| Uniprot | GPX1 protects the hemoglobin in erythocytes from oxidative breakdown. It is located in the cytoplasm, and it is expressed in platelets. |
| PDB | PDB results show a structure ‘2F8A’, which is the selenocysteine to glycine mutant of GPX1. GPX1 has both A and B chains, and has a sequence length of 208. |
| link |
|---|
| http://pfam.xfam.org/protein/P07203 |
| https://www.uniprot.org/uniprot/P07203 |
| https://www.rcsb.org/structure/2F8A |
Multivariate statistcal techniques were used to confirm the information about protein structure and location in the line database.
Uniprot indicates that the protein is in the cytoplasm.
aa.1.1 <- c("A","R","N","D","C","Q","E","G","H","I",
"L","K","M","F","P","S","T","W","Y","V")
alpha <- c(285, 53, 97, 163, 22, 67, 134, 197, 111, 91,
221, 249, 48, 123, 82, 122, 119, 33, 63, 167)
beta <- c(203, 67, 139, 121, 75, 122, 86, 297, 49, 120,
177, 115, 16, 85, 127, 341, 253, 44, 110, 229)
a.plus.b <- c(175, 78, 120, 111, 74, 74, 86, 171, 33, 93,
110, 112, 25, 52, 71, 126, 117, 30, 108, 123)
a.div.b <- c(361, 146, 183, 244, 63, 114, 257, 377, 107, 239,
339, 321, 91, 158, 188, 327, 238, 72, 130, 378)
pander(data.frame(aa.1.1, alpha, beta, a.plus.b, a.div.b))
| aa.1.1 | alpha | beta | a.plus.b | a.div.b |
|---|---|---|---|---|
| A | 285 | 203 | 175 | 361 |
| R | 53 | 67 | 78 | 146 |
| N | 97 | 139 | 120 | 183 |
| D | 163 | 121 | 111 | 244 |
| C | 22 | 75 | 74 | 63 |
| Q | 67 | 122 | 74 | 114 |
| E | 134 | 86 | 86 | 257 |
| G | 197 | 297 | 171 | 377 |
| H | 111 | 49 | 33 | 107 |
| I | 91 | 120 | 93 | 239 |
| L | 221 | 177 | 110 | 339 |
| K | 249 | 115 | 112 | 321 |
| M | 48 | 16 | 25 | 91 |
| F | 123 | 85 | 52 | 158 |
| P | 82 | 127 | 71 | 188 |
| S | 122 | 341 | 126 | 327 |
| T | 119 | 253 | 117 | 238 |
| W | 33 | 44 | 30 | 72 |
| Y | 63 | 110 | 108 | 130 |
| V | 167 | 229 | 123 | 378 |
# Convert to Frequencies
alpha.prop <- alpha/sum(alpha)
beta.prop <- beta/sum(beta)
a.plus.b.prop <- a.plus.b/sum(a.plus.b)
a.div.b <- a.div.b/sum(a.div.b)
aa.prop <- data.frame(alpha.prop,
beta.prop,
a.plus.b.prop,
a.div.b)
#row labels
row.names(aa.prop) <- aa.1.1
pander::pander(aa.prop)
| Â | alpha.prop | beta.prop | a.plus.b.prop | a.div.b |
|---|---|---|---|---|
| A | 0.1165 | 0.07313 | 0.09264 | 0.08331 |
| R | 0.02166 | 0.02414 | 0.04129 | 0.03369 |
| N | 0.03964 | 0.05007 | 0.06353 | 0.04223 |
| D | 0.06661 | 0.04359 | 0.05876 | 0.05631 |
| C | 0.008991 | 0.02702 | 0.03917 | 0.01454 |
| Q | 0.02738 | 0.04395 | 0.03917 | 0.02631 |
| E | 0.05476 | 0.03098 | 0.04553 | 0.05931 |
| G | 0.08051 | 0.107 | 0.09052 | 0.08701 |
| H | 0.04536 | 0.01765 | 0.01747 | 0.02469 |
| I | 0.03719 | 0.04323 | 0.04923 | 0.05516 |
| L | 0.09031 | 0.06376 | 0.05823 | 0.07824 |
| K | 0.1018 | 0.04143 | 0.05929 | 0.07408 |
| M | 0.01962 | 0.005764 | 0.01323 | 0.021 |
| F | 0.05027 | 0.03062 | 0.02753 | 0.03646 |
| P | 0.03351 | 0.04575 | 0.03759 | 0.04339 |
| S | 0.04986 | 0.1228 | 0.0667 | 0.07547 |
| T | 0.04863 | 0.09114 | 0.06194 | 0.05493 |
| W | 0.01349 | 0.01585 | 0.01588 | 0.01662 |
| Y | 0.02575 | 0.03963 | 0.05717 | 0.03 |
| V | 0.06825 | 0.08249 | 0.06511 | 0.08724 |
# function to convert table into vector
table_to_vector <- function(table_x){
table_names <- attr(table_x, "dimnames")[[1]]
table_vect <- as.vector(table_x)
names(table_vect) <- table_names
return(table_vect)
}
# determine frequency of each amino acid in GPX1 human protein
gpx1_human_table <- table(gpx1_human_vector)/length(gpx1_human_vector)
gpx1.human.aa.freq <- table_to_vector(gpx1_human_table)
gpx1.human.aa.freq
## A C D E F G
## 0.118226601 0.024630542 0.039408867 0.064039409 0.054187192 0.083743842
## H I K L M N
## 0.009852217 0.029556650 0.029556650 0.113300493 0.019704433 0.049261084
## P Q R S T U
## 0.073891626 0.034482759 0.068965517 0.054187192 0.034482759 0.004926108
## V W Y
## 0.064039409 0.009852217 0.019704433
# check for presence of "U"
aa.names <- names(gpx1.human.aa.freq)
i.U <- which(aa.names == "U")
aa.names[i.U]
## [1] "U"
gpx1.human.aa.freq[i.U]
## U
## 0.004926108
# remove "U"
gpx1.human.aa.freq <- gpx1.human.aa.freq[-i.U]
# add data to frequency table
aa.prop$GPX1.human.aa.freq <- gpx1.human.aa.freq
pander::pander(aa.prop)
| Â | alpha.prop | beta.prop | a.plus.b.prop | a.div.b | GPX1.human.aa.freq |
|---|---|---|---|---|---|
| A | 0.1165 | 0.07313 | 0.09264 | 0.08331 | 0.1182 |
| R | 0.02166 | 0.02414 | 0.04129 | 0.03369 | 0.02463 |
| N | 0.03964 | 0.05007 | 0.06353 | 0.04223 | 0.03941 |
| D | 0.06661 | 0.04359 | 0.05876 | 0.05631 | 0.06404 |
| C | 0.008991 | 0.02702 | 0.03917 | 0.01454 | 0.05419 |
| Q | 0.02738 | 0.04395 | 0.03917 | 0.02631 | 0.08374 |
| E | 0.05476 | 0.03098 | 0.04553 | 0.05931 | 0.009852 |
| G | 0.08051 | 0.107 | 0.09052 | 0.08701 | 0.02956 |
| H | 0.04536 | 0.01765 | 0.01747 | 0.02469 | 0.02956 |
| I | 0.03719 | 0.04323 | 0.04923 | 0.05516 | 0.1133 |
| L | 0.09031 | 0.06376 | 0.05823 | 0.07824 | 0.0197 |
| K | 0.1018 | 0.04143 | 0.05929 | 0.07408 | 0.04926 |
| M | 0.01962 | 0.005764 | 0.01323 | 0.021 | 0.07389 |
| F | 0.05027 | 0.03062 | 0.02753 | 0.03646 | 0.03448 |
| P | 0.03351 | 0.04575 | 0.03759 | 0.04339 | 0.06897 |
| S | 0.04986 | 0.1228 | 0.0667 | 0.07547 | 0.05419 |
| T | 0.04863 | 0.09114 | 0.06194 | 0.05493 | 0.03448 |
| W | 0.01349 | 0.01585 | 0.01588 | 0.01662 | 0.06404 |
| Y | 0.02575 | 0.03963 | 0.05717 | 0.03 | 0.009852 |
| V | 0.06825 | 0.08249 | 0.06511 | 0.08724 | 0.0197 |
Functions to calculate similarities
# Corrleation used in Chou adn Zhange 1992.
chou_cor <- function(x,y){
numerator <- sum(x*y)
denominator <- sqrt((sum(x^2))*(sum(y^2)))
result <- numerator/denominator
return(result)
}
# Cosine similarity used in Higgs and Attwood (2005).
chou_cosine <- function(z.1, z.2){
z.1.abs <- sqrt(sum(z.1^2))
z.2.abs <- sqrt(sum(z.2^2))
my.cosine <- sum(z.1*z.2)/(z.1.abs*z.2.abs)
return(my.cosine)
}
# correlation between each column
corr.alpha <- chou_cor(aa.prop[,5], aa.prop[,1])
corr.beta <- chou_cor(aa.prop[,5], aa.prop[,2])
corr.apb <- chou_cor(aa.prop[,5], aa.prop[,3])
corr.adb <- chou_cor(aa.prop[,5], aa.prop[,4])
# cosine similarity
cos.alpha <- chou_cosine(aa.prop[,5], aa.prop[,1])
cos.beta <- chou_cosine(aa.prop[,5], aa.prop[,2])
cos.apb <- chou_cosine(aa.prop[,5], aa.prop[,3])
cos.adb <- chou_cosine(aa.prop[,5], aa.prop[,4])
# Euclidean distance
# flip dataframe
aa.prop.flipped <- t(aa.prop)
round(aa.prop.flipped,2)
## A R N D C Q E G H I L K
## alpha.prop 0.12 0.02 0.04 0.07 0.01 0.03 0.05 0.08 0.05 0.04 0.09 0.10
## beta.prop 0.07 0.02 0.05 0.04 0.03 0.04 0.03 0.11 0.02 0.04 0.06 0.04
## a.plus.b.prop 0.09 0.04 0.06 0.06 0.04 0.04 0.05 0.09 0.02 0.05 0.06 0.06
## a.div.b 0.08 0.03 0.04 0.06 0.01 0.03 0.06 0.09 0.02 0.06 0.08 0.07
## GPX1.human.aa.freq 0.12 0.02 0.04 0.06 0.05 0.08 0.01 0.03 0.03 0.11 0.02 0.05
## M F P S T W Y V
## alpha.prop 0.02 0.05 0.03 0.05 0.05 0.01 0.03 0.07
## beta.prop 0.01 0.03 0.05 0.12 0.09 0.02 0.04 0.08
## a.plus.b.prop 0.01 0.03 0.04 0.07 0.06 0.02 0.06 0.07
## a.div.b 0.02 0.04 0.04 0.08 0.05 0.02 0.03 0.09
## GPX1.human.aa.freq 0.07 0.03 0.07 0.05 0.03 0.06 0.01 0.02
dist(aa.prop.flipped, method = "euclidean")
## alpha.prop beta.prop a.plus.b.prop a.div.b
## beta.prop 0.13342098
## a.plus.b.prop 0.09281824 0.08289406
## a.div.b 0.06699039 0.08659174 0.06175113
## GPX1.human.aa.freq 0.18295063 0.19660540 0.16377475 0.17599560
dist.alpha <- dist((aa.prop.flipped[c(1,5),]), method = "euclidean")
dist.beta <- dist((aa.prop.flipped[c(2,5),]), method = "euclidean")
dist.apb <- dist((aa.prop.flipped[c(3,5),]), method = "euclidean")
dist.adb <- dist((aa.prop.flipped[c(4,5),]), method = "euclidean")
# Put information together
# fold types
fold.type <- c("alpha","beta","alpha plus beta", "alpha/beta")
# data
corr.sim <- round(c(corr.alpha,corr.beta,corr.apb,corr.adb),5)
cosine.sim <- round(c(cos.alpha,cos.beta,cos.apb,cos.adb),5)
Euclidean.dist <- round(c(dist.alpha,dist.beta,dist.apb,dist.adb),5)
# summary
sim.sum <- c("","","most.sim","")
dist.sum <- c("","","min.dist","")
df <- data.frame(fold.type,
corr.sim ,
cosine.sim ,
Euclidean.dist ,
sim.sum ,
dist.sum )
pander::pander(df)
| fold.type | corr.sim | cosine.sim | Euclidean.dist | sim.sum | dist.sum |
|---|---|---|---|---|---|
| alpha | 0.7512 | 0.7512 | 0.183 | ||
| beta | 0.7163 | 0.7163 | 0.1966 | ||
| alpha plus beta | 0.7905 | 0.7905 | 0.1638 | most.sim | min.dist |
| alpha/beta | 0.7612 | 0.7612 | 0.176 |
names(gpx1_list)[1] <- "NP_000572"
names(gpx1_list)[2] <- "NP_001070980"
names(gpx1_list)[3] <- "NP_001152770"
names(gpx1_list)[4] <- "NP_001108591"
names(gpx1_list)[5] <- "NP_776501"
names(gpx1_list)[6] <- "NP_032186"
names(gpx1_list)[7] <- "NP_110453"
names(gpx1_list)[8] <- "NP_001264782"
names(gpx1_list)[9] <- "NP_001015740"
names(gpx1_list)[10] <- "NP_001004634"
gpx1_list[1]
## $NP_000572
## [1] "MCAARLAAAAAAAQSVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLRRYSRRFQTIDIEPDIEALLSQGPSCA"
gpx1_list
## $NP_000572
## [1] "MCAARLAAAAAAAQSVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLRRYSRRFQTIDIEPDIEALLSQGPSCA"
##
## $NP_001070980
## [1] "MCAARLAAAAAQSVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLRRYSRRFQTIDIEPDIEALLSQGPSCA"
##
## $NP_001152770
## [1] "MCAARLAAAAVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPVRRYSRRFQTIDIEPDIEALLSQGPSSA"
##
## $NP_001108591
## [1] "MCAAALAAAAVAAAPRSVYAFSARPLAGGEPMSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFTLFEKCEVNGAQAHPLFAFLRESLPAPSDDTTALMTDPKFITWSPVCRNDVAWNFEKFLVGPDGVPVRRYSRRFPTIDIEPDIEALLSQGPSCA"
##
## $NP_776501
## [1] "MCAAQRSAAALAAAAPRTVYAFSARPLAGGEPFNLSSLRGKVLLIENVASLUGTTVRDYTQMNDLQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNCLKYVRPGGGFEPNFMLFEKCEVNGEKAHPLFAFLREVLPTPSDDATALMTDPKFITWSPVCRNDVSWNFEKFLVGPDGVPVRRYSRRFLTIDIEPDIETLLSQGASA"
##
## $NP_032186
## [1] "MCAARLSAAAQSTVYAFSARPLTGGEPVSLGSLRGKVLLIENVASLUGTTIRDYTEMNDLQKRLGPRGLVVLGFPCNQFGHQENGKNEEILNSLKYVRPGGGFEPNFTLFEKCEVNGEKAHPLFTFLRNALPTPSDDPTALMTDPKYIIWSPVCRNDIAWNFEKFLVGPDGVPVRRYSRRFRTIDIEPDIETLLSQQSGNS"
##
## $NP_110453
## [1] "MSAARLSAVAQSTVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTTRDYTEMNDLQKRLGPRGLVVLGFPCNQFGHQENGKNEEILNSLKYVRPGGGFEPNFTLFEKCEVNGEKAHPLFTFLRNALPAPSDDPTALMTDPKYIIWSPVCRNDISWNFEKFLVGPDGVPVRRYSRRFRTIDIEPDIEALLSKQPSNP"
##
## $NP_001264782
## [1] "MAATGLAGIVARPLGAAEPLALSSLRGKVLLVVNVASLUGTTTRDFLQLNELQQRYGPRGLRVLGFPCNQFGHQENATNEEILRSLEYVRPGNGFKPNFTMFEKCEVNGKGAHPLFAFLREALPFPHDDPSALMTNPQYIIWSPVCRNDVSWNFEKFLVGPDGVPFRRYSRHFETIKLQDDIELLLQKVPKEALQ"
##
## $NP_001015740
## [1] "MRLAMVSRTVYEFSARLLSAGENTALSQYKGRVLLIENVASLUGTTIRDYTQMSRLQSMYGPRGLQVLAFPCNQFGHQENSGNQEILNILKHVRPGGGFEPNFPLFEKVDVNGEKEHPLFTFLKGQLPYPSDDSISLMQDPKSIIWSPVRRNDIAWNFEKFLIARNGVPYKRYGRRFETFNIQQDIEKLLDETCE"
##
## $NP_001004634
## [1] "MAGIKSFYDITAKTLTGEEFKFSSLQGKVVLIENVASLUGTTSRDYTQMNELHERFAEKGLVVLGVPCNQFGYQENCTNEEILLSLKYVRPGNGYEPKFQLLEKVDVNGKNAHPLFTFLKEKLPFPSDEPMPFMSDPKFIIWSPVCRNDIAWNFEKFLIGSDGVPFKRYSRRFLTSGIDGDIKKLLSIPK"
gpx1_vector <- unlist(gpx1_list)
names(gpx1_vector) <- names(gpx1_list)
gpx1_vector[1]
## NP_000572
## "MCAARLAAAAAAAQSVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYTQMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEVNGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLRRYSRRFQTIDIEPDIEALLSQGPSCA"
# PID of Human (1) vs Chimp (2)
align01.02 <- Biostrings::pairwiseAlignment(gpx1_vector[1], gpx1_vector[2])
pid(align01.02)
## [1] 99.01478
# PID of Human (1) vs Mouse (6)
align01.06 <- Biostrings::pairwiseAlignment(gpx1_vector[1], gpx1_vector[6])
pid(align01.06)
## [1] 85.78431
# PID of Human (1) vs Frog (9)
align01.09 <- Biostrings::pairwiseAlignment(gpx1_vector[1], gpx1_vector[9])
pid(align01.09)
## [1] 63.5468
# PID of Chimp (2) vs Mouse (6)
align02.06 <- Biostrings::pairwiseAlignment(gpx1_vector[2], gpx1_vector[6])
pid(align02.06)
## [1] 86.06965
# PID of Chimp (2) vs Frog (9)
align02.09 <- Biostrings::pairwiseAlignment(gpx1_vector[2], gpx1_vector[9])
pid(align02.09)
## [1] 64.1791
# PID of Mouse (6) vs Frog (9)
align06.09 <- Biostrings::pairwiseAlignment(gpx1_vector[6], gpx1_vector[9])
pid(align06.09)
## [1] 67.33668
pid_val <- c(1, NA, NA, NA,
pid(align01.02), 1, NA, NA,
pid(align01.06), pid(align02.06), 1, NA,
pid(align01.09), pid(align02.09), pid(align06.09), 1)
pid_mat <- matrix(pid_val, nrow = 4, byrow = T)
row.names(pid_mat) <- c("Homo","Pan","Mouse","Frog")
colnames(pid_mat) <- c("Homo","Pan","Mouse","Frog")
pander::pander(pid_mat)
| Â | Homo | Pan | Mouse | Frog |
|---|---|---|---|---|
| Homo | 1 | NA | NA | NA |
| Pan | 99.01 | 1 | NA | NA |
| Mouse | 85.78 | 86.07 | 1 | NA |
| Frog | 63.55 | 64.18 | 67.34 | 1 |
# Comparison of Human and Chimps PID with different methods
pid1 <- pid(align01.02, type = "PID1")
pid2 <- pid(align01.02, type = "PID2")
pid3 <- pid(align01.02, type = "PID3")
pid4 <- pid(align01.02, type = "PID4")
pid_method <- c("PID1", "PID2", "PID3", "PID4")
pid_value <- c(pid1, pid2, pid3, pid4)
denominator <- c("(aligned positions + internal gap positions)", "(aligned positions)", "(length shorter sequence)", "(average length of the two sequences)")
pid_df <- data.frame(pid_method, pid_value, denominator)
pander::pander(pid_df)
| pid_method | pid_value | denominator |
|---|---|---|
| PID1 | 99.01 | (aligned positions + internal gap positions) |
| PID2 | 100 | (aligned positions) |
| PID3 | 100 | (length shorter sequence) |
| PID4 | 99.5 | (average length of the two sequences) |
gpx1_vector_ss <- Biostrings::AAStringSet(gpx1_vector)
gpx1_align <- msa(gpx1_vector_ss, method = "ClustalW")
## use default substitution matrix
class(gpx1_align)
## [1] "MsaAAMultipleAlignment"
## attr(,"package")
## [1] "msa"
is(gpx1_align)
## [1] "MsaAAMultipleAlignment" "AAMultipleAlignment" "MsaMetaData"
## [4] "MultipleAlignment"
# Default output of MSA
gpx1_align
## CLUSTAL 2.1
##
## Call:
## msa(gpx1_vector_ss, method = "ClustalW")
##
## MsaAAMultipleAlignment with 10 rows and 208 columns
## aln names
## [1] MCAARLSAAAQS-----TVYAFSAR...RRFRTIDIEPDIETLLSQQSGNS-- NP_032186
## [2] MSAARLSAVAQS-----TVYAFSAR...RRFRTIDIEPDIEALLSKQPSNP-- NP_110453
## [3] MCAARLAAAAAAAQ---SVYAFSAR...RRFQTIDIEPDIEALLSQGPSCA-- NP_000572
## [4] MCAARLAAAA--AQ---SVYAFSAR...RRFQTIDIEPDIEALLSQGPSCA-- NP_001070980
## [5] MCAARLAAAA--------VYAFSAR...RRFQTIDIEPDIEALLSQGPSSA-- NP_001152770
## [6] MCAAALAAAAVAAAP-RSVYAFSAR...RRFPTIDIEPDIEALLSQGPSCA-- NP_001108591
## [7] MCAAQRSAAALAAAAPRTVYAFSAR...RRFLTIDIEPDIETLLSQGASA--- NP_776501
## [8] MAATGLAGIV-------------AR...RHFETIKLQDDIELLLQKVPKEALQ NP_001264782
## [9] MRLAMVSRTV---------YEFSAR...RRFETFNIQQDIEKLLDETCE---- NP_001015740
## [10] --MAGIKS----------FYDITAK...RRFLTSGIDGDIKKLLS-IPK---- NP_001004634
## Con MCAARLAAAA-------?VYAFSAR...RRF?TIDIEPDIEALLSQGPS?A-- Consensus
# Change class of alignment
class(gpx1_align) <- "AAMultipleAlignment"
# Convert to seqinr format
gpx1_align_seqinr <- msaConvert(gpx1_align, type = "seqinr::alignment")
# Output
compbio4all::print_msa(gpx1_align_seqinr)
## [1] "MCAARLSAAAQS-----TVYAFSARPLTGGEPVSLGSLRGKVLLIENVASLUGTTIRDYT 0"
## [1] "MSAARLSAVAQS-----TVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTTRDYT 0"
## [1] "MCAARLAAAAAAAQ---SVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYT 0"
## [1] "MCAARLAAAA--AQ---SVYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYT 0"
## [1] "MCAARLAAAA--------VYAFSARPLAGGEPVSLGSLRGKVLLIENVASLUGTTVRDYT 0"
## [1] "MCAAALAAAAVAAAP-RSVYAFSARPLAGGEPMSLGSLRGKVLLIENVASLUGTTVRDYT 0"
## [1] "MCAAQRSAAALAAAAPRTVYAFSARPLAGGEPFNLSSLRGKVLLIENVASLUGTTVRDYT 0"
## [1] "MAATGLAGIV-------------ARPLGAAEPLALSSLRGKVLLVVNVASLUGTTTRDFL 0"
## [1] "MRLAMVSRTV---------YEFSARLLSAGENTALSQYKGRVLLIENVASLUGTTIRDYT 0"
## [1] "--MAGIKS----------FYDITAKTLTG-EEFKFSSLQGKVVLIENVASLUGTTSRDYT 0"
## [1] " "
## [1] "EMNDLQKRLGPRGLVVLGFPCNQFGHQENGKNEEILNSLKYVRPGGGFEPNFTLFEKCEV 0"
## [1] "EMNDLQKRLGPRGLVVLGFPCNQFGHQENGKNEEILNSLKYVRPGGGFEPNFTLFEKCEV 0"
## [1] "QMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEV 0"
## [1] "QMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEV 0"
## [1] "QMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFMLFEKCEV 0"
## [1] "QMNELQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNSLKYVRPGGGFEPNFTLFEKCEV 0"
## [1] "QMNDLQRRLGPRGLVVLGFPCNQFGHQENAKNEEILNCLKYVRPGGGFEPNFMLFEKCEV 0"
## [1] "QLNELQQRYGPRGLRVLGFPCNQFGHQENATNEEILRSLEYVRPGNGFKPNFTMFEKCEV 0"
## [1] "QMSRLQSMYGPRGLQVLAFPCNQFGHQENSGNQEILNILKHVRPGGGFEPNFPLFEKVDV 0"
## [1] "QMNELHERFAEKGLVVLGVPCNQFGYQENCTNEEILLSLKYVRPGNGYEPKFQLLEKVDV 0"
## [1] " "
## [1] "NGEKAHPLFTFLRNALPTPSDDPTALMTDPKYIIWSPVCRNDIAWNFEKFLVGPDGVPVR 0"
## [1] "NGEKAHPLFTFLRNALPAPSDDPTALMTDPKYIIWSPVCRNDISWNFEKFLVGPDGVPVR 0"
## [1] "NGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLR 0"
## [1] "NGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPLR 0"
## [1] "NGAGAHPLFAFLREALPAPSDDATALMTDPKLITWSPVCRNDVAWNFEKFLVGPDGVPVR 0"
## [1] "NGAQAHPLFAFLRESLPAPSDDTTALMTDPKFITWSPVCRNDVAWNFEKFLVGPDGVPVR 0"
## [1] "NGEKAHPLFAFLREVLPTPSDDATALMTDPKFITWSPVCRNDVSWNFEKFLVGPDGVPVR 0"
## [1] "NGKGAHPLFAFLREALPFPHDDPSALMTNPQYIIWSPVCRNDVSWNFEKFLVGPDGVPFR 0"
## [1] "NGEKEHPLFTFLKGQLPYPSDDSISLMQDPKSIIWSPVRRNDIAWNFEKFLIARNGVPYK 0"
## [1] "NGKNAHPLFTFLKEKLPFPSDEPMPFMSDPKFIIWSPVCRNDIAWNFEKFLIGSDGVPFK 0"
## [1] " "
## [1] "RYSRRFRTIDIEPDIETLLSQQSGNS-- 32"
## [1] "RYSRRFRTIDIEPDIEALLSKQPSNP-- 32"
## [1] "RYSRRFQTIDIEPDIEALLSQGPSCA-- 32"
## [1] "RYSRRFQTIDIEPDIEALLSQGPSCA-- 32"
## [1] "RYSRRFQTIDIEPDIEALLSQGPSSA-- 32"
## [1] "RYSRRFPTIDIEPDIEALLSQGPSCA-- 32"
## [1] "RYSRRFLTIDIEPDIETLLSQGASA--- 32"
## [1] "RYSRHFETIKLQDDIELLLQKVPKEALQ 32"
## [1] "RYGRRFETFNIQQDIEKLLDETCE---- 32"
## [1] "RYSRRFLTSGIDGDIKKLLS-IPK---- 32"
## [1] " "
ggmsa::ggmsa(gpx1_align, start = 25, end = 100)
gpx1_dist <- seqinr::dist.alignment(gpx1_align_seqinr, matrix = "identity")
is(gpx1_dist)
## [1] "dist" "oldClass"
class(gpx1_dist)
## [1] "dist"
gpx1_dist_round <- round(gpx1_dist, 3)
gpx1_dist_round
## NP_032186 NP_110453 NP_000572 NP_001070980 NP_001152770
## NP_110453 0.235
## NP_000572 0.374 0.367
## NP_001070980 0.362 0.355 0.000
## NP_001152770 0.349 0.342 0.101 0.101
## NP_001108591 0.381 0.374 0.233 0.224 0.214
## NP_776501 0.368 0.382 0.331 0.325 0.303
## NP_001264782 0.545 0.525 0.515 0.515 0.515
## NP_001015740 0.574 0.583 0.601 0.601 0.601
## NP_001004634 0.586 0.591 0.591 0.591 0.591
## NP_001108591 NP_776501 NP_001264782 NP_001015740
## NP_110453
## NP_000572
## NP_001070980
## NP_001152770
## NP_001108591
## NP_776501 0.329
## NP_001264782 0.520 0.541
## NP_001015740 0.601 0.588 0.645
## NP_001004634 0.586 0.591 0.617 0.632
# Build tree
tree_subset <- nj(gpx1_dist)
# Plot tree
plot.phylo(tree_subset, main = "Phylogenetic Tree", use.edge.length = FALSE)
mtext(text = "GPX1 family gene tree - rooted, no branch lengths")