Εισαγωγικά
Στην άσκηση αυτή θα ασχοληθούμε με τον εντοπισμό μοτίβων αλληλουχιών. Αρχικά θα προσπαθήσουμε να εντοπισουμε μικρά cis-στοιχεία σε προ-στοιχισμένες αλληλουχίες Και στη συνέχεια θα τα αναζητήσουμε σε άγνωστες αλληλουχίες.
To παράδειγμα των γνωστών αλληλουχιών θα είναι ένα σύνολο θέσεων πρόσδεσης ενός μεταγραφικού παράγοντα που εμπλέκεται στη διαφοροποίηση των κυττάρων του αιματοποιητικού συστήματος, του GATA όπως έχουν εντοπιστεί στο γονιδίωμα του ανθρώπου. Τα δεδομένα συνίστανται σε 50 εξανουκλεοτίδια τα οποία μπορείτε να κατεβάσετε από το αρχείο gata.fa τέλος αυτής της σελίδας.
(Tα δεδομένα έχουν ληφθεί από το βιβλίο των Deonier, Tavare και Waterman "Computational Genome Analysis").
Στόχοι της Άσκησης
Οι στόχοι είναι:
1. Ανάγνωση Αλληλουχιών
Για το σκοπό και αυτής της άσκησης θα χρησιμοποιήσουμε την R στην οποία θα φορτώσουμε τη βιβλιοθήκη seqinr (αφού θέσουμε το σωστό φάκελο εργασίας).
Tα στάδια είναι:
setwd("...");
source("seqMotif.R")
source("readfastafile.R")
gata<-readfastafile("gata.fa")
Εξετάστε το αποτέλεσμα για να δείτε τα περιέχομενα της συλλογής. Πρόκειται για 50 αλληλουχίες των έξι νουκλεοτιδίων η καθεμία. Το γεγονός ότι όλες οι αλληλουχίες έχουν το ίδιο μήκος θα μας φανεί χρήσιμο στη συνέχεια για την εξαγωγή χαρακτηριστικών μοτίβου, καθώς θα θεωρήσουμε ότι μπορούμε να στοιχίσουμε τις αλληλουχίες τη μία κάτω από την άλλη και να συγκρίνουμε τα κατάλοιπά τους ανά θέση.
2. Εξαγωγή consensus
Έχουμε πλέον τις αλληλουχίες αποθηκευμένες σε μια δομή δεδομένων της R. Eπόμενος στόχος μας είναι να εξαγάγουμε μια consensus αλληλουχία από το σύνολο των αλληλουχιών που έχουμε στη συλλογή μας. Θυμηθείτε ότι η consensus αλληλουχία αντιστοιχεί στην πιο κοινή αλληλουχία εξάγοντας το κατάλοιπο ανά θέση. Μπορείτε να εξάγετε την συναινετική (consensus) αλληλουχία με τη χρήση της ομώνυμης συνάρτησης consensus.R όπως φαίνεται παρακάτω:
source("consensus.R")
consensus(gata, threshold=0.3)
Παίρνετε μια αλληλουχία που αντιστοιχεί στο consensus. Όπως έχουμε συζητήσει στο μάθημα, η πιθανότητα με την οποία εμφανίζεται το επικρατέστερο κατάλοιπο μπορεί να είναι πολύ διαφορετική για την κάθε θέση, κάτι που επηρρεάζει την αξιοπιστία του consensus. Στο παραπάνω παράδειγμα θέσαμε ως κατώφλι την πιθανότητα 0.3 που σημαίνει ότι αν η μέγιστη τιμή ήταν μεγαλύτερη από 0.3 τότε μας επιστρέφεται το συγκεκριμένο κατάλοιπο. Πώς θα ήταν όμως τα αποτελέσματα αν θέλαμε να είμαστε πιο αυστηροί, π.χ. απαιτούσαμε το επικρατέστερο κατάλοιπο να έχει πιθανότητα τουλάχιστον 0.6;
consensus(gata, threshold=0.6)
Βλέπετε πως το consensus αλλάζει καθώς για την τελευταία θέση υπάρχει μια σχετική αμφισημία (δεν υπάρχει κανένα κατάλοιπο που να έχει p>=0.6). Στην περίπτωση αυτή, η συνάρτηση επιστρέφει όλα τα κατάλοιπα με πιθανότητα τουλάχιστον 1-threshold (σε αυτήν την περίπτωση [AG]). Δοκιμάστε να αυξήσετε κι άλλο το κατώφλι και δείτε πως το consensus γίνεται ολοένα και περισσότερο "πιθανοτικό". Αυτό δε σημαίνει ότι δεν μπορείτε πια να πείτε τι συμβαίνει σε κάθε θέση, απλώς ότι η αρχική εκτίμηση για ένα σαφές consensus δεν είναι και τόσο ασφαλής.
Ο καλύτερος τρόπος για να εκτιμήσουμε ένα μοτίβο είναι να δούμε τον πίνακα Πιθανοτήτων PWM και να το αναπαραστήσουμε ως logo
3. PWM
Πέρα από μια απλή consensus αλληλουχία, ένα μοτίβο αλληλουχιών μπορεί να ποσοτικοποιηθεί και αναλυθεί καλύτερα με ένα PWM, δηλαδή έναν πίνακα πιθανοτήτων ανα θέση. Με τη χρήση της συνάρτησης seqMotif.R μπορούμε να υπολογίσουμε τον PWM μιας συλλογής αλληλουχιών με τον παρακάτω τρόπο:
seqMotif(gata, drawmotif=F)
seqMotif(gata, drawmotif=Τ)
Παρατηρήστε το σχήμα που προκύπτει. Βλέπετε κατ' αρχήν στον x αξονα τις θέσεις των νουκλεοτιδίων που εξετάζουμε (από το P1 ως το P6) και στον y αξονα τα τέσσερα πιθανά ενδεχόμενα (νουκλεοτιδία). Τα αντιστοιχα στοιχεία (βάση ανα θέση) είναι χρωματισμένα με βάση τον PWM, με κόκκινες τιμές τις υψηλές και λευκές τις χαμηλές. Μπορείτε να δείτε την αντιστοιχία με το consensus;
Μπορείτε εύκολα να αποθηκεύσετε την εικόνα που μόλις δημιουργήσατε σε μια μορφή που να διαβάζεται εύκολα από κάθε υπολογιστή (pdf) με την εντολη:
pdf("myfirstheatmap.pdf");seqMotif(gata, drawmotif=T);dev.off()
4.
Γραφική παράσταση PWM. Logo αλληλουχιών
Ένας ακόμα καλύτερος τρόπος αναπαράστασης ενός μοτίβου είναι αυτός που προκύπτει από τις στοιχημένες αλληλουχίες μέσω της ανάλυσης της πληροφορίας κατά Shannon και την αναπαράστασή της σε logo αλληλουχιών. Αυτό μπορεί να γίνει πολύ εύκολα με τη χρήση διαδικτυακών υπηρεσιών η πιο γνωστή εκ των οποίων είναι η Weblogo του Πανεπιστημίου του Berkeley: http://weblogo.berkeley.edu/logo.cgi.
Για να την χρησιμοποιήσουμε δεν έχουμε παρά να εγγράψουμε όλες τις αλληλουχίες στοιχημένες σε ένα αρχείο απλού κειμένου txt και στη συνέχεια να τις επικολλήσουμε στη σελίδα του Server του Weblogo.
write.table(as.vector(unlist(gata)), file="temp.txt", row.names=F, quote=F, col.names=F)
Παρατηρείστε το logo που δημιουργήθηκε. Σε ποιο βαθμό περιέχει πληροφορία που πήρατε από το PWM μέσω του θερμικού χάρτη;
Σύγκριση με τυχαίες αλληλουχίες
Για να καταλάβουμε καλύτερα την ένταση ενός PWM, το πόσο δηλαδή χαρακτηριστικό είναι το μοτίβο που περιέχει είναι καλό να το συγκρίνουμε με ένα τυχαίο σύνολο αλληλουχιών. Μπορείτε να το κάνετε όλα τα παραπάνω βήματα πάνω σε ένα σύνολο τυχαίων αλληλουχιών ίδιου μήκους (6 νουκλεοτίδια) που θα βρείτε στο αρχείο random.fa. Εξετάστε το θερμικό χάρτη και το logo αυτής της συλλογής και δείτε τις διαφορές μεταξύ αυτών και των GATA-στοιχείων
Ερωτήσεις:
1. Να κατεβάσετε το σύνολο των αλληλουχιών random.fa που θα βρείτε στο τέλος της σελίδας και να κάνετε όλες τις αναλύσεις που περιγράφονται παραπάνω ώστε να πάρετε τον αντίστοιχο PWM. Οι random.fa αλληλουχίες είναι μια συλλογή τυχαίων αλληλουχιών
2. Να δημιουργήσετε έναν PSSM πίνακα συγκρίνοντας τις συλλογές gata.fa και random.fa. Θα πρέπει να υπολογίσετε τον δυαδικό λογάριθμο του λόγου των δύο μοτίβων με αυτό του gata στον αριθμητή. Μια απαραίτητη προσθήκη είναι να βάλετε pseudocounts και στα δύο μοτίβα ώστε να αποφύγετε απροσδιοριστίες του τύπου Ν/0 ή log(0). Μια ενδεικτική εντολή προσθέτει μια μικρή ποσότητα (0.01) και στα δύο μέρη του λόγου:
pssm<-log2((gata_motif+0.01)/(random_motif+0.01))
όπου τα gata_motif και random_motif έχουν προκύψει από εφαρμογή της seqMotif() στις αντίστοιχες συλλογές αλληλουχιών.
3. Έχοντας δημιουργήσει τον PSSM θα πρέπει να αναζητήσετε το συγκεκριμενο μοτίβο στην αλληλουχία που σας δίνεται σαν test1.fa στο τέλος της σελίδας. Τα βήματα που πρέπει να ακολουθήσετε είναι τα εξής:
α. Να διαβάσετε την αλληλουχία
targetseq<-readfastafile("test1.fa")
β. να κατεβάσετε τη συνάρτηση pssmSearch.R και να την εκτελέσετε ώς εξής:
pssmSearch(pssm, targetseq, threshold=X)
όπου: το pssm είναι ο PSSM πίνακας που δημιουργήσατε, η targetseq είναι η αλληλουχία στην οποία αναζητείτε το μοτίβο και το threshold=X είναι μια τιμή στο διάστημα 0 έως 1 που θα σας επιστρέψει το ανάλογο ποσοστό των θέσεων στην αλληλουχία targetseq με score ομοιότητας με το μοτίβο που είναι μεγαλύτερα ή ίσα με Χ*το μέγιστο score του μοτίβου. Αυτό σημαίνει ότι για threshold=0.8 η συνάρτηση θα αναφέρει τις θέσεις (και τα score) των θέσεων που είναι τουλάχιστον ίσες ή μεγαλύτερες από 80% του μέγιστου score του μοτίβου.
Σας ζητείται να εκτελέσετε την pssmSearch ώστε να περιορίσετε τις θέσεις επιτυχίaς γύρω στις 20. Να αναφέρετε το threshold για το οποίο το επιτυγχάνετε καθώς και τις θέσεις στην αλληλουχία για τις οποίες συμβαίνει αυτό.
H αναφορά σας δε θα πρέπει να ξεπερνάει τις τρεις σελίδες. Ζητούμε ένα αρχείο κειμένου στο οποίο θα περιγράφονται τα βήματα της διαδικασίας που ακολουθήσατε και τα αποτελέσματα στις παραπάνω ερωτήσεις σαφώς διατυπωμένα. Πίνακες/διαγράμματα που συνοδεύουν τις αναλύσεις σας θα πρέπει να βρίσκονται μέσα στην αναφορά και όχι σε ξεχωριστά αρχεία. Ονομάστε το αρχείο χρησιμοποιώντας το ονοματεπώνυμο και τον ΑΜ σας.
Ανεβάστε την αναφορά σας στο παρακάτω link:
https://www.dropbox.com/request/1ylNBbFGCppyhckJhnMi
μέχρι τη Κυριακή 29/3/2020 στις 23.59