Difference between revisions of "ABC-INT-Mutation impact"

From "A B C"
Jump to navigation Jump to search
m
m
 
(27 intermediate revisions by the same user not shown)
Line 1: Line 1:
<div id="BIO">
+
<div id="ABC">
  <div class="b1">
+
<div style="padding:5px; border:4px solid #000000; background-color:#e19fa7; font-size:300%; font-weight:400; color: #000000; width:100%;">
Integration Unit: Mutation Impact
+
Integrator Unit: Mutation Impact
  </div>
+
<div style="padding:5px; margin-top:20px; margin-bottom:10px; background-color:#e19fa7; font-size:30%; font-weight:200; color: #000000; ">
 
+
(Integrator unit: assess the impact of mutations in a gene)
  {{Vspace}}
+
</div>
 
 
<div class="keywords">
 
<b>Keywords:</b>&nbsp;
 
Integration unit: assess the impact of mutations in a gene
 
 
</div>
 
</div>
  
{{Vspace}}
+
{{Smallvspace}}
  
  
__TOC__
+
<div style="padding:5px; border:1px solid #000000; background-color:#e19fa733; font-size:85%;">
 +
<div style="font-size:118%;">
 +
<b>Abstract:</b><br />
 +
<section begin=abstract />
 +
This page integrates material from the learning units for R programming, working with sequences and the genetic code, and probability and significance, in a task for evaluation.
 +
<section end=abstract />
 +
</div>
 +
<!-- ============================  -->
 +
<hr>
 +
<b>Deliverables:</b><br />
 +
<section begin=deliverables />
 +
<li><b>Integrator unit</b>: Deliverables can be submitted for course marks. See below for details.</li>
 +
<section end=deliverables />
 +
<!-- ============================  -->
 +
<hr>
 +
<section begin=prerequisites />
 +
<b>Prerequisites:</b><br />
 +
This unit builds on material covered in the following prerequisite units:<br />
 +
*[[FND-STA-Significance|FND-STA-Significance (Significance)]]
 +
*[[RPR-Genetic_code_optimality|RPR-Genetic_code_optimality (Optimality of the Genetic Code: an R Exploration)]]
 +
*[[RPR-Unit_testing|RPR-Unit_testing (Testing R code)]]
 +
<section end=prerequisites />
 +
<!-- ============================  -->
 +
</div>
  
{{Vspace}}
+
{{Smallvspace}}
  
  
{{LIVE}}
 
  
{{Vspace}}
+
{{Smallvspace}}
  
  
</div>
+
__TOC__
<div id="ABC-unit-framework">
 
== Abstract ==
 
<section begin=abstract />
 
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "abstract" -->
 
This page assesses the learning units for working with sequence data.
 
 
 
*Write code to access a mutated RNA sequence and a reference sequence.
 
*Estimate distribution of missense and nonsense mutations
 
*Assess significance of observed changes
 
<section end=abstract />
 
  
 
{{Vspace}}
 
{{Vspace}}
  
  
== This unit ... ==
+
=== Evaluation ===
=== Prerequisites ===
+
This "Integrator Unit" should be submitted for evaluation for a maximum of 13 marks if one of the written deliverables is chosen, resp. 24 marks if you choose this for your oral test<ref>Note: the oral test is cumulative. It will focus on the content of this unit but will also cover other material that leads up to it.</ref>.
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "prerequisites" -->
+
:Please note the evaluation types that are available as options for this unit.
<!-- included from "ABC-unit_components.wtxt", section: "notes-prerequisites" -->
+
:Be mindful of the [[ABC-Rubrics| '''Marking rubrics''']].
You need to complete the following units before beginning this one:
+
:If this is submitted for your oral test, please read the [[BCH441 Oral Test instructions|Oral test instructions]] before you begin.
*[[FND-STA-Significance|FND-STA-Significance (Significance)]]
+
:If your submission includes R code, please read the [[BCH441 Code submisson instructions|Code submission instructions]] before you begin.
*[[RPR-Genetic_code_optimality|RPR-Genetic_code_optimality (Optimality of the Genetic Code: an R Exploration)]]
 
*[[RPR-Unit_testing|RPR-Unit_testing (Testing R code)]]
 
  
{{Vspace}}
+
Once you have chosen an option ...
 +
<ol>
 +
<li>Create a new page on the student Wiki as a subpage of your User Page.</li>
 +
<li>Put all of your writing to submit on this one page.</li>
  
 +
<li>When you are done with everything, go to the [https://q.utoronto.ca/courses/180416/assignments Quercus '''Assignments''' page] and open the appropriate '''Integrator Unit''' assignment. Paste the URL of your Wiki page into the form, and click on '''Submit Assignment'''.</li>
 +
</ol>
  
=== Deliverables ===
+
Your link can be submitted only once and not edited. But you may change your Wiki page at any time. However only the last version before the due date will be marked. All later edits will be silently ignored.
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "deliverables" -->
 
<!-- included from "ABC-unit_components.wtxt", section: "deliverables-integrator" -->
 
*<b>Integrator unit</b>: Deliverables will be marked as detailed on this page.
 
  
{{Vspace}}
+
{{Smallvspace}}
  
 +
;Report option
 +
* Work through the tasks described in the scenario below.
 +
* Document your results in a short technical report on a subpage of your User page on the Student Wiki. Describe your methods (R-code!) in [[BCH441 Code submisson instructions|an appendix]] linked from your report;
 +
* When you are done, submit the link to your page via Quercus as described above.
  
=== Evaluation ===
 
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "evaluation" -->
 
;This "Integrator Unit" should be submitted for evaluation for a maximum of 10 marks.
 
:Please note the evaluation types that are available as options for this unit. Choose one evaluation type that you have not chosen for another Integrator Unit. (Each submitted Integrator Unit must be evaluated in a different way and one of your evaluations - but not your first one - must be an oral exam).
 
{{Smallvspace}}
 
;Report option
 
* Work through the tasks described in the scenario.
 
* Document your results in a short report on a subpage of your User page on the Student Wiki. Describe your methods (R-code!) in an appendix;
 
* When you are done with everything, add the following category tag to the page:
 
::<code><nowiki>[[Category:EVAL-INT-Mutation_impact]]</nowiki></code>
 
:'''Do not''' change your submission page after this tag has been added. The page will be marked and the category tag will be removed by the instructor.
 
 
<!--
 
<!--
 
{{Smallvspace}}
 
{{Smallvspace}}
 
;Interview option
 
;Interview option
: Identify a laboratory whose work includes evaluating [...]. Get in touch with the PI, a postdoc or senior graduate student in the laboratory and interview them in person or by eMail. Find out
+
: Identify a laboratory whose work has recently included producing and interpreting a homology model. Get in touch with the PI, a postdoc or senior graduate student in the laboratory and interview them in person or by eMail. Find out
 
* why this work is important;
 
* why this work is important;
 
* how they approach it methodologically;
 
* how they approach it methodologically;
* in particular, how they quantify the severity of an effect (get technical on that point);
+
* in particular, how they interpret the model and what the model tells them that a sequence alignment alone would not have;
 
* what they have recently learned.
 
* what they have recently learned.
 
* write up your interview on a subpage of your User page of the Student Wiki;
 
* write up your interview on a subpage of your User page of the Student Wiki;
* add information that may be required to understand the methodology;
+
* add information that may be required to understand the context;
* make sure that you have included important literature references.
+
* make sure that you included important literature references.
*When you are done with everything, add the following category tag to the page:
+
* If this is well done and interesting,  parts of this may be used to augment the learning unit. Make sure your interviewee is aware of what the interview is for, and has given her or his consent.
::<code><nowiki>[[Category:EVAL-INT-Mutation_impact]]</nowiki></code>
+
* Make sure contact information for your interviewee is included on your submission page.
:'''Do not''' change your submission page after this tag has been added. The page will be marked and the category tag will be removed by the instructor.
+
* Add a CC-BY tag to your submission.
 +
* When you are done with everything, add the following category tag '''to the end of page''':
 +
::<code><nowiki>[[Category:EVAL-INT-Mutation_impact]]</nowiki></code>.
 +
 
 +
Once the page has been saved with this tag, it is considered "submitted".
 +
'''Do not''' change your submission after this tag has been added. The page will be marked and the category tag will be removed by the instructor.
 
-->
 
-->
 
<!--
 
<!--
Line 91: Line 97:
 
-->
 
-->
 
{{Smallvspace}}
 
{{Smallvspace}}
;Oral exam option
 
* Work through the tasks described in the scenario. Remember to document your work in your journal.
 
* Part of your task will involve writing an R script, place that code in a subpage of your User page on the Student Wiki and link to it from your Journal. (Do not add an evaluation category tag to that code).
 
* Your work must be complete before 21:00 on the day of your exam.
 
* Schedule an oral exam by editing the [http://steipe.biochemistry.utoronto.ca/abc/students/index.php/Signup-Oral_exams_2017 '''signup page on the Student Wiki''']. Enter the unit that you are signing up for, and your name. You must have signed-up for an exam slot before 21:00 on the day before your exam.
 
{{Smallvspace}}
 
;R code option
 
* Work through the tasks described in the scenario and develop code as required.
 
* Put your code on a subpage of your User page on the Student Wiki;
 
* When you are done with everything, add the following category tag to the page:
 
::<code><nowiki>[[Category:EVAL-INT-Mutation_impact]]</nowiki></code>
 
:'''Do not''' change your submission page after this tag has been added. The page will be marked and the category tag will be removed by the instructor.
 
  
 +
;Oral test option
 +
* Work through the tasks described below. Remember to document your work in your journal, but there is no need to format this specially as a report.
 +
* Part of your task will involve writing an R script; refer to the [[BCH441 Code submisson instructions|Code submission instructions]] and link to your page from your Journal.
 +
* Note that the work must be completed [[BCH441 Oral Test instructions| '''before''' your actual test date.]]
  
{{Vspace}}
+
{{Smallvspace}}
  
 
+
<!--
</div>
+
;R code option
<div id="BIO">
+
* Work through the tasks described in the scenario below and develop code as required.
 +
* Put your code and other documentation on a subpage of your User page on the Student Wiki;
 +
* When you are done, submit the link to your page via Quercus as described above.
 +
-->
 
== Contents ==
 
== Contents ==
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "contents" -->
 
  
===Scenario background===
+
== Biological Context ==
  
Cancer is a genetic disease and one aspect that makes cancer hard to treat is that cancer cells progress through their own micro-evolution and become progressively more aggressive and treatment-resistant. But since the cancer phenotype is ultimately based on genetic alterations, it is important to understand which genes contribute. Unfortunately this is not as simple as just sequencing a few cancers: one of the hallmarks of the disease is genome instability (this contributes to the accelerated evolution), and it is very difficult to distinguish causal mutations from incidental mutations, or, '''driver genes''' from '''passenger genes'''.
+
Cancer is a genetic disease and one aspect that makes cancer hard to treat is that cancer cells adapt and evolve and as a result of selective pressure from the body's own defenses, they become progressively more aggressive and treatment-resistant. Since the cancer phenotype is ultimately based on genetic alterations, it is important to understand which genes contribute. Unfortunately this is not as simple as just sequencing a few cancers: one of the hallmarks of the disease is genome instability (this contributes to the accelerated evolution), and it is very difficult to distinguish causal mutations from incidental mutations, or, '''driver genes''' from '''passenger genes'''.
  
 
However, an analysis of the distribution of mutations may help. Passenger mutations are expected to be randomly distributed throughout the genome, driver mutations are expected to have either a '''gain of function''' or '''loss of function''' effect. Gain of function mutations are expected to be very specific, targeting only a small number of amino acids in a defined region of the protein. We actually expect purifying selection '''against''' mutations elsewhere. Loss of function mutations are expected to include nonsense mutations, frameshifts, but above all, they should be enriched in missense and nonsense mutations relative to silent mutations.
 
However, an analysis of the distribution of mutations may help. Passenger mutations are expected to be randomly distributed throughout the genome, driver mutations are expected to have either a '''gain of function''' or '''loss of function''' effect. Gain of function mutations are expected to be very specific, targeting only a small number of amino acids in a defined region of the protein. We actually expect purifying selection '''against''' mutations elsewhere. Loss of function mutations are expected to include nonsense mutations, frameshifts, but above all, they should be enriched in missense and nonsense mutations relative to silent mutations.
Line 131: Line 131:
 
{{Smallvspace}}
 
{{Smallvspace}}
  
Nucleotide binding domains are among the oldest known protein families and one family in particular, the G-proteins has diverse roles in all domains of life. These are collectively called GTP hydrolases, or GTPases – a misnomer, since even though they do catalyze the hydrolysis of GTP to GDP, their role in the cell has nothing to do with GTP metabolism, but comes from a conformational change that accompanies binding to either GTP or GDP. As far as enzymes go, GTPases are rather slow.
+
Nucleotide binding domains are among the oldest known protein families and one family in particular, the G-proteins, has diverse roles in all domains of life. These are collectively called GTP hydrolases, or GTPases – a misnomer, since even though they do catalyze the hydrolysis of GTP to GDP, their role in the cell has nothing to do with GTP metabolism, but comes from a conformational change that accompanies binding to either GTP or GDP. As far as enzymes go, GTPases are rather slow. They are switches, not gears.
  
A large family among these G-proteins are the Ras proteins: these act as molecular switches. In humans, there are three isoforms of Ras called HRas, KRas and NRas. These are differentially expressed in tissues and have slightly different C-termini through which they are localized to different membrane subdomains. When Ras binds GTP, it adopts a stable, active '''ON''' conformation through which it activates effector proteins. But then the Ras protein slowly hydrolyses GTP to GDP, it undergoes a conformational change and enters the '''OFF''' state. Then GDP dissociates from the binding site, Ras can re-bind GTP and is once again switched on. This cycle is modified by interactors: GEF proteins (Guanine Nucleotide Exchange factors such as Sos) catalyze the dissociation of GDP and thus speed up the re-uptake of GTP and re-activation of Ras. Thus they shift the cycle to an active state. GAP proteins (GTPase activating proteins such as P120GAP) speed up the conversion of GTP to GDP. This shifts the cycle towards its inactive state.
+
A large family among these G-proteins are the Ras proteins. In humans, there are three isoforms of Ras called HRas, KRas and NRas. These are differentially expressed in tissues and have slightly different C-termini through which they are localized to different membrane subdomains. When Ras binds GTP, it adopts a stable, active '''ON''' conformation through which it activates effector proteins. But then the Ras protein slowly hydrolyses GTP to GDP, it undergoes a conformational change and enters the '''OFF''' state. Then GDP dissociates from the binding site, Ras can re-bind GTP and is once again switched '''ON'''. This cycle is modified by interactors: GEF proteins (Guanine Nucleotide Exchange factors such as Sos) catalyze the dissociation of GDP and thus speed up the re-uptake of GTP and re-activation of Ras. Thus they shift the cycle to an active state. GAP proteins (GTPase activating proteins such as P120GAP) speed up the conversion of GTP to GDP. This shifts the cycle towards its inactive state.
  
One of the most important pathways for cell proliferation is the EGFR pathway that feeds into the MAPK cascade. Under physiological conditions, the active EGFR activates the Sos protein, which shifts a pool of Ras molecules into their active state. Active Ras then turns on its effectors – among them Raf1 – which activates a signalling cascade that induces cell proliferation. This is limited by GAPs that speed up Ras GTPase activity which turns the protein off. Deactivation of Sos when the EGFR is inactive ensures that GDP remains bound and the Ras protein pool remains off. This matches our expectations about the roles of these proteins well.
+
One of the most important pathways for cell proliferation is the EGFR pathway that feeds into the MAPK cascade. Under physiological conditions, the active EGFR activates the Sos protein, which shifts a pool of Ras molecules into their active state. Active Ras then switches its effectors on – among them Raf1 – which activates a signalling cascade that induces cell proliferation. This is limited by GAPs that speed up Ras GTPase activity which turns the Ras '''OFF''' again. Deactivation of Sos when the EGFR is inactive ensures that GDP remains bound and the Ras protein pool remains '''OFF'''. This matches our expectations about the roles of these proteins well.
  
The problem is that this system can go terribly wrong if Ras gets mutated in a way that damages its catalytic activity and prevent GTP hydrolysis. Activating GAPs no longer works to switch Ras off, because if the Ras active site is dead, GAPs have no way of inducing it. And inhibiting GEFs does not switch Ras off either, because GTP does not get hydrolyzed to GDP and there is no need for GEFs to clear the active site of GDP. The switch is '''ON''' and stays '''ON'''. The EGFR pathway is on and stays on. The cell proliferates out of control. This can be the first step of transforming a cell into a cancer cell and this exact mutation in the KRas protein is the third-most frequent mutation seen in cancer genome studies and possibly the most powerful cancer driver mutation of all. The big issue about all this is that mutant Ras is generally considered "undruggable": we can't imagine small molecule drugs that would restore Ras' catalytic activity, and the affinity of GTP to the molecule is so high that we haven't found competitive antagonists that don't have dramatic side effects. An interesting new development therefore was the recent discovery that a phosphatase - PTPN11 - somehow works synergistically with Ras to facilitate its activation of effectors: inhibition of PTPN11 suppressed oncogenesis<ref>{{#pmid:26617336}}</ref>. If this is a pathophysiologically relevant effect, we expect cancer mutations to spare PTPN11, or even to deregulate it to anhance its activity. Do they?
+
The problem is that this system can go terribly wrong if Ras gets mutated in a way that damages its catalytic activity and prevents GTP hydrolysis. Activating GAPs no longer works to switch Ras 'off'''OFF''', because if the Ras active site is dead, GAPs have no way of inducing it. And inhibiting GEFs does not switch Ras 'off'''OFF''' either, because GTP does not get hydrolyzed to GDP and there is no need for GEFs to clear the active site of GDP. The switch is '''ON''' and stays '''ON'''. The EGFR pathway is on and stays on. The cell proliferates out of control. This can be the first step of transforming a cell into a cancer cell and this exact mutation in the KRas protein is the second-most frequent mutation seen in cancer genome studies (behind p53) and possibly the most powerful cancer driver mutation of all. The big issue about all this is that mutant Ras is generally considered "undruggable":<ref>{{#pmid:32723567}}</ref> we can't imagine small molecule drugs that would restore Ras' catalytic activity, and the affinity of GTP to the molecule is so high that we haven't found competitive antagonists that don't have dramatic side effects. An interesting new development therefore was the recent discovery that a phosphatase - PTPN11 - somehow works synergistically with Ras to facilitate its activation of effectors: inhibition of PTPN11 suppressed oncogenesis<ref>{{#pmid:26617336}}{{#pmid:30644389}}</ref>. If this is a pathophysiologically relevant effect, we expect cancer mutations to spare PTPN11, or even to deregulate it to anhance its activity. Do they?
  
 
{{Vspace}}
 
{{Vspace}}
Line 150: Line 150:
 
* visit [http://www.intogen.org/ '''IntOGen'''].
 
* visit [http://www.intogen.org/ '''IntOGen'''].
 
* find the KRas information page and briefly explore the information that is available.
 
* find the KRas information page and briefly explore the information that is available.
 +
* then visit the information pages for three other genes:
 +
** Rab39B, a small GTPase, homologous to KRAS, but '''not''' associated with cancer;
 +
** PTPN11, the non-receptor type protein-phosphatase discussed above;
 +
** PTPN5, a homolgous phosphatase that appears '''not''' to be associated with cancer.
 +
* Here, Kras and PTPN11 are proteins which need to be studied regarding their role in cancer; Rab39B and PTPN5 serve as controls: they have about the same size and similar domain composition - but are not active in cancer-relevant pathways.
 +
}}
 +
 +
{{Vspace}}
 +
 +
== (All Options) Loading Data ==
 +
 +
{{Smallvspace}}
 +
 +
{{task|1=
 +
All options initially work with the same data:
 +
* Open the RStudio course project.
 +
* Begin a new R script to explore KRas, Rab39B, PTPN11 and PTPN5 mutations.
 +
* Start by collecting four FASTA sequences that I have provided in the <tt>data/</tt> directory into a data frame. Something like:
 +
<pre>
 +
myFA <-            readFASTA("data/RAB39B_HSa_coding.fa")
 +
myFA <- rbind(myFA, readFASTA("data/PTPN5_HSa_coding.fa"))
 +
myFA <- rbind(myFA, readFASTA("data/PTPN11_HSa_coding.fa"))
 +
myFA <- rbind(myFA, readFASTA("data/KRAS_HSa_coding.fa"))
 +
</pre>
 +
: ... should work fine. Give your data frame convenient, meaningful row names - do not refer to the rows simply by row index in your script. Gene names will work fine.
 
}}
 
}}
  
Line 155: Line 180:
  
 
===For the Report Option... ===
 
===For the Report Option... ===
 +
 +
{{Smallvspace}}
  
 
{{task|1=
 
{{task|1=
* Open the RStudio course project.
+
* Write code that executes a loop <code>N</code> times (for <code>N <- 100000</code>) to create a point mutation randomly in a gene. Keep track of the number of missense, silent ("synonymous"), and nonsense ("truncating")" mutations you find. To develop your code, use a smaller size of N, obviously. Then put your code '''into a function''' that takes as parameters a single string of nucleotides as input, and the number of trials for your simulation. Refer to the [[BCH441 Code submisson instructions|Code submission instructions]] regarding more detailed specifications and additional validation code that the run must produce. (There are possibilities to handle string input for this purpose; you need to figure out what works best for you. You could consider producing a vector of nucleotides for which you keep track of the indices of the codons, a matrix with three columns in which every row is a codon, or you could leave the string intact and use <tt>substring()</tt> to work with it, or come up with a different solution. Also you could use <tt>biostrings::</tt> functions or <tt>seqinr::</tt> for the translation. Or just use code that is similar to the learning units. Don't forget to reference your sources!)
* Begin a new R script to explore KRas, PTPN11 and OR1A1 mutations.
+
* Tests: validate your function as follows.
* Load the data file of mRNAs I have prepared for you. This will create the three R objects, <code>KRascodons</code>, <code>PTPN11codons</code>, and <code>OR1A1codons</code>:
+
** The sequence <tt>ATGATGATGATGATGATG</tt> has no silent mutations;
<source lang="R">
+
** The sequence <tt>CCCCCCCCCCCCCCCCCC</tt> has no truncating mutations;
load(file = "./data/ABC-INT-Mutation_impact.RData")
+
** The sequence <tt>TATTACTATTACTATTAC</tt> has some truncations, about the same frequency as <tt>TGGTGGTGGTGGTGGTGGTGGTGG</tt>; both those sequences have about twice as many truncating mutations as <tt>TGTTGTTGTTGTTGTTGTTGTTGT</tt>. (Explain what these tests demonstrate.)
</source>
+
* Once your function is ready, run your simulation once for each of the four genes: Kras, Rab39B, PTPN5, and PTPN11. Paste the exact output of each of the four runs into your report.
* Write code that executes a loop <code>N</code> times (for <code>N <- 100000</code>) to create a point mutation randomly in each of the three genes. Keep track of the number of missense, silent ("synonymous"), and nonsense ("truncating")" mutations you find.
+
* For each of the four genes, discuss the relative frequency of the mutations you have observed in each category and compare it to the frequency reported on the IntOGen Web site.
* Contrast that with the relative frequency of the mutations in each category reported on the IntOGen Web page for each of the three genes.
+
* Explain whether you think there is an important difference between the expected categories of mutations (i.e. the stochastic background that you simulated), and categories of mutations that were observed in cancer genomes.
* Establish if there is a significant difference between the expected categories of mutations (i.e. the stochastic background that you simulated), and categories of mutations that were observed in cancer genomes.
+
* Write a short report that interprets your results against the context of cancer biology outlined above: what would you expect if any of these genes were cancer drivers, what do you observe, what can you conclude from your observation? <!-- Include a histogram of the expected distribution and the observed values. -->
* Write a short report that interprets your results against the context outlined above: what would you expect if any of these genes were cancer drivers, what do you observe, what can you conclude from your observation? Include a histogram of the expected distribution and the observed values.
 
 
}}
 
}}
  
 
{{Vspace}}
 
{{Vspace}}
  
===For the Oral Exam Option... ===
+
===For the Oral Test Option... ===
  
 
{{task|1=
 
{{task|1=
 
* Open the RStudio course project.
 
* Open the RStudio course project.
* Begin a new R script to explore KRas, PTPN11 and OR1A1 mutations.
+
 
* Load the data file of mRNAs I have prepared for you. This will create the three R objects, <code>KRAscodons</code>, <code>PTPN11codons</code>, and <code>OR1A1codons</code>:
+
* Proceed as described for the short-report option. However there is no need to write a formal report, just document your activities and results in your Journal. Add a brief conclusion / interpretation.
<source lang="R">
 
load(file = "./data/ABC-INT-Mutation_impact.RData")
 
</source>
 
* Write code that executes a loop <code>N</code> times (for <code>N <- 100000</code>) to create a point mutation randomly in each of the three genes. Keep track of the number of missense, silent ("synonymous"), and nonsense ("truncating")" mutations you find.
 
* Contrast that with the relative frequency of the mutations in each category reported on the IntOGen Web page for each of the three genes.
 
* Establish if there is a significant difference between the expected categories of mutations (i.e. the stochastic background that you simulated), and categories of mutations that were observed in cancer genomes.
 
* Document your activities and results in your Journal. Add a brief conclusion / interpretation.
 
 
}}
 
}}
  
 
{{Vspace}}
 
{{Vspace}}
  
 +
 +
<!--  R Code option needs to be re-thought ... not significantly different
 
===For the R Code Option... ===
 
===For the R Code Option... ===
  
Line 198: Line 219:
  
 
* Here is a header that specifies the function, its parameters and its value.
 
* Here is a header that specifies the function, its parameters and its value.
<source lang="R">
+
<pre>
 
evalMut <- function(FA, N) {
 
evalMut <- function(FA, N) {
 
     # Purpose: evaluate the distribution of silent, missense and nonsense
 
     # Purpose: evaluate the distribution of silent, missense and nonsense
Line 209: Line 230:
 
     #                      FA    chr  the input file
 
     #                      FA    chr  the input file
 
     #                      N    num  same as the input parameter
 
     #                      N    num  same as the input parameter
     #                      nSilent    num  the mean number of silent mutations
+
     #                      nSilent    num  the number of silent mutations
     #                      nMissense  num  the mean number of missense mutations
+
     #                      nMissense  num  the number of missense mutations
     #                      nNonsense  num  the mean number of nonsense mutations
+
     #                      nNonsense  num  the number of nonsense mutations
  
 
}
 
}
</source>
+
</pre>
  
 
* The IntOGen Website lists the counts and frequencies of silent, missense, and nonsense mutations, but that includes point mutations, splice-site mutations, insertions and deletions. However your method above only simulates the frequency of point mutations; thus, for a correct comparison of observation and expectation we need to distinguish. IntOGen provides data downloads that list the exact mutation and categorize it. Write a second function that reads an IntOGen mutation-distribution file and returns counts for the three categories of point mutations that you are simulating. You will find three files in the course project's <code>./data</code> directory that you can use to develop your function:
 
* The IntOGen Website lists the counts and frequencies of silent, missense, and nonsense mutations, but that includes point mutations, splice-site mutations, insertions and deletions. However your method above only simulates the frequency of point mutations; thus, for a correct comparison of observation and expectation we need to distinguish. IntOGen provides data downloads that list the exact mutation and categorize it. Write a second function that reads an IntOGen mutation-distribution file and returns counts for the three categories of point mutations that you are simulating. You will find three files in the course project's <code>./data</code> directory that you can use to develop your function:
Line 222: Line 243:
  
 
* Here is a header that specifies the function, its parameters and its value.
 
* Here is a header that specifies the function, its parameters and its value.
<source lang="R">
+
<pre>
 
readIntOGen <- function(IN) {
 
readIntOGen <- function(IN) {
 
     # Purpose: read and parse an IntOGen mutation data file. Return only the
 
     # Purpose: read and parse an IntOGen mutation data file. Return only the
Line 230: Line 251:
 
     #    IN  chr      Filename of an IntOGen mutation data file.
 
     #    IN  chr      Filename of an IntOGen mutation data file.
 
     # Value:  list    List with the following elements:
 
     # Value:  list    List with the following elements:
     #                      nSilent    num the mean number of silent mutations
+
     #                      nSilent    num the number of silent mutations
     #                      nMissense  num the mean number of missense mutations
+
     #                      nMissense  num the number of missense mutations
     #                      nNonsense  num the mean number of nonsense mutations
+
     #                      nNonsense  num the number of nonsense mutations
  
 
}
 
}
</source>
+
</pre>
  
 
* You may find the function <code>read.delim()</code>, or <code>read_tsv()</code> from the <code>readr</code> package useful.
 
* You may find the function <code>read.delim()</code>, or <code>read_tsv()</code> from the <code>readr</code> package useful.
Line 243: Line 264:
 
* Write tests for your function. Place them in a protected block of code that will not get executed when the file gets sourced, like so:
 
* Write tests for your function. Place them in a protected block of code that will not get executed when the file gets sourced, like so:
  
<source lang="R">
+
<pre>
 
if (FALSE) {
 
if (FALSE) {
 
   # Code that won't get executed goes here...
 
   # Code that won't get executed goes here...
 
   # ... but it's easy to manually step through the script and execute it.
 
   # ... but it's easy to manually step through the script and execute it.
 
}
 
}
</source>
+
</pre>
  
* Write a brief script that simulates 10000 point mutations of PTPN11 and compares the relative frequencies with the values reported in the distribution-data file. Note whether the resulting differences are significant. Place this script too in a protected block of code that will not get executed.
+
* Write a brief script that simulates 10000 point mutations of PTPN11 and compares the relative frequencies with the values reported in the distribution-data file. Describe whether you think there is an important difference between the expected categories of mutations (i.e. the stochastic background that you simulated), and categories of mutations that were observed in cancer genomes. Place this script too in a protected block of code that will not get executed.
  
}}
+
* Note: with the following FASTA file saved as <tt>GCsample.fa</tt>...
 +
>GCsample
 +
ATGAAAAACAAGAATACAACCACGACTAGAAGCAGGAGTATAATCATTCAACACCAGCATCCACCCCCGCCTCGACGCCG
 +
GCGTCTACTCCTGCTTGAAGACGAGGATGCAGCCGCGGCTGGAGGCGGGGGTGTAGTCGTGGTTTAATACTAGTATTCAT
 +
CCTCGTCTTGATGCTGGTGTTTATTCTTGTTT
 +
... my implementation returns:
 +
<pre>
 +
> evalMut("GCsample.fa", 100000)
 +
$FA
 +
[1] "GCsample.fa"
 +
 
 +
$N
 +
[1] 1e+05
  
 +
$nSilent
 +
[1] 24114
  
{{Vspace}}
+
$nMissense
 +
[1] 67878
  
 +
$nNonsense
 +
[1] 8008
 +
</pre>
  
== Further reading, links and resources ==
+
NB...
<!-- {{#pmid: 19957275}} -->
+
We could do chisq.test() rather than distributions, but we have not properly
<!-- {{WWW|WWW_GMOD}} -->
+
introduced hypothesis testing with statistical tests...
<!-- <div class="reference-box">[http://www.ncbi.nlm.nih.gov]</div> -->
+
myDat <- c(23, 82, 7)  # silent, missense, frame+stop ... from IntOGen
 +
myDat <- rbind(myDat, c(24114, 67878, 8008))
  
{{Vspace}}
+
(x <- chisq.test(myDat))
 +
x$observed
 +
x$expected
  
 +
}}
 +
-->
  
 
== Notes ==
 
== Notes ==
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "notes" -->
 
<!-- included from "ABC-unit_components.wtxt", section: "notes" -->
 
 
<references />
 
<references />
  
 
{{Vspace}}
 
{{Vspace}}
  
 
</div>
 
<div id="ABC-unit-framework">
 
== Self-evaluation ==
 
<!-- included from "../components/ABC-INT-Mutation_impact.components.wtxt", section: "self-evaluation" -->
 
<!--
 
=== Question 1===
 
 
Question ...
 
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px">
 
Answer ...
 
<div class="mw-collapsible-content">
 
Answer ...
 
 
</div>
 
  </div>
 
 
  {{Vspace}}
 
 
-->
 
 
{{Vspace}}
 
 
 
 
{{Vspace}}
 
 
 
<!-- included from "ABC-unit_components.wtxt", section: "ABC-unit_ask" -->
 
 
----
 
 
{{Vspace}}
 
 
<b>If in doubt, ask!</b> If anything about this learning unit is not clear to you, do not proceed blindly but ask for clarification. Post your question on the course mailing list: others are likely to have similar problems. Or send an email to your instructor.
 
 
----
 
 
{{Vspace}}
 
  
 
<div class="about">
 
<div class="about">
Line 322: Line 324:
 
:2017-08-05
 
:2017-08-05
 
<b>Modified:</b><br />
 
<b>Modified:</b><br />
:2017-08-09
+
:2020-11-11
 
<b>Version:</b><br />
 
<b>Version:</b><br />
:1.0
+
:1.5.2
 
<b>Version history:</b><br />
 
<b>Version history:</b><br />
 +
*1.5.2 Removed erroneous reference to old "R-Code option" with partial (and wrong) instructions.
 +
*1.5.1 Fixed error in control sequences
 +
*1.5 Edit policy update
 +
*1.4 2020 rewrite. Different input modes, different genes, more structured requirements, validation of simulation code.
 +
*1.3 Remove "significance" requirements since we didn't simulate distributions and we never introduced chisq.test()
 +
*1.2 Corrected posted marks, which were not consistent with the description in the syllabus.
 +
*1.1 Added sample output
 
*1.0 New unit
 
*1.0 New unit
 
*0.1 First stub
 
*0.1 First stub
 
</div>
 
</div>
[[Category:ABC-units]]
 
<!-- included from "ABC-unit_components.wtxt", section: "ABC-unit_footer" -->
 
  
 
{{CC-BY}}
 
{{CC-BY}}
  
 +
[[Category:ABC-units]]
 +
{{INTEGRATOR}}
 +
{{LIVE}}
 +
{{EVAL}}
 
</div>
 
</div>
 
<!-- [END] -->
 
<!-- [END] -->

Latest revision as of 03:23, 11 November 2020

Integrator Unit: Mutation Impact

(Integrator unit: assess the impact of mutations in a gene)


 


Abstract:

This page integrates material from the learning units for R programming, working with sequences and the genetic code, and probability and significance, in a task for evaluation.


Deliverables:

  • Integrator unit: Deliverables can be submitted for course marks. See below for details.

  • Prerequisites:
    This unit builds on material covered in the following prerequisite units:


     



     



     


    Evaluation

    This "Integrator Unit" should be submitted for evaluation for a maximum of 13 marks if one of the written deliverables is chosen, resp. 24 marks if you choose this for your oral test[1].

    Please note the evaluation types that are available as options for this unit.
    Be mindful of the Marking rubrics.
    If this is submitted for your oral test, please read the Oral test instructions before you begin.
    If your submission includes R code, please read the Code submission instructions before you begin.

    Once you have chosen an option ...

    1. Create a new page on the student Wiki as a subpage of your User Page.
    2. Put all of your writing to submit on this one page.
    3. When you are done with everything, go to the Quercus Assignments page and open the appropriate Integrator Unit assignment. Paste the URL of your Wiki page into the form, and click on Submit Assignment.

    Your link can be submitted only once and not edited. But you may change your Wiki page at any time. However only the last version before the due date will be marked. All later edits will be silently ignored.


     
    Report option
    • Work through the tasks described in the scenario below.
    • Document your results in a short technical report on a subpage of your User page on the Student Wiki. Describe your methods (R-code!) in an appendix linked from your report;
    • When you are done, submit the link to your page via Quercus as described above.


     
    Oral test option
    • Work through the tasks described below. Remember to document your work in your journal, but there is no need to format this specially as a report.
    • Part of your task will involve writing an R script; refer to the Code submission instructions and link to your page from your Journal.
    • Note that the work must be completed before your actual test date.


     

    Contents

    Biological Context

    Cancer is a genetic disease and one aspect that makes cancer hard to treat is that cancer cells adapt and evolve and as a result of selective pressure from the body's own defenses, they become progressively more aggressive and treatment-resistant. Since the cancer phenotype is ultimately based on genetic alterations, it is important to understand which genes contribute. Unfortunately this is not as simple as just sequencing a few cancers: one of the hallmarks of the disease is genome instability (this contributes to the accelerated evolution), and it is very difficult to distinguish causal mutations from incidental mutations, or, driver genes from passenger genes.

    However, an analysis of the distribution of mutations may help. Passenger mutations are expected to be randomly distributed throughout the genome, driver mutations are expected to have either a gain of function or loss of function effect. Gain of function mutations are expected to be very specific, targeting only a small number of amino acids in a defined region of the protein. We actually expect purifying selection against mutations elsewhere. Loss of function mutations are expected to include nonsense mutations, frameshifts, but above all, they should be enriched in missense and nonsense mutations relative to silent mutations.

    The task of this unit is to analyze the relative frequencies of neutral, missense and nonsense mutations in a gene, and contrast that with the frequencies one would expect if the distribution of mutations was purely due to chance. This analysis should work on an actual sequence, and consider actually observed mutations. We will develop it to evaluate mutations of the KRas gene, a known cancer driver, an olfactory receptor (OR1A1), most likely not involved in cancer, and the PTPN11 phosphatase, a gene of interest whose role in cancer we would like to understand better.


     

    KRas and cancer

     
    Ras Cycle.jpg

    Sketch of the Ras activation cycle. (PRE) Ras is translated, and C-terminally farnesylated, palmitoylated and located to the plasma membrane. (I) The GEF Sos is activated in its complex with active EGFR. It binds to Ras and removes GDP. (II) Apo-Ras is ready to bind a nucleotide. (III) upon GTP binding, Ras acquires its active conformation. (IV) Ras binds its effectors such as Raf1. This switches the MAPK signalling cascade on and leads to cell proliferation. (V) Src phosporylates Ras Y32. This reduces the affinity of RAf1 by ~1000-fold. (VI) GAPs can now displace the effector and stimulate Ras GTPase activity. GTP is hydrolyzed to GDP. (VII) with bound GDP, Ras acquires the inactive conformation. PTPN 11 removes the Y32 phosphate and regenerates the effector binding site. The cycle can begin anew.


     

    Nucleotide binding domains are among the oldest known protein families and one family in particular, the G-proteins, has diverse roles in all domains of life. These are collectively called GTP hydrolases, or GTPases – a misnomer, since even though they do catalyze the hydrolysis of GTP to GDP, their role in the cell has nothing to do with GTP metabolism, but comes from a conformational change that accompanies binding to either GTP or GDP. As far as enzymes go, GTPases are rather slow. They are switches, not gears.

    A large family among these G-proteins are the Ras proteins. In humans, there are three isoforms of Ras called HRas, KRas and NRas. These are differentially expressed in tissues and have slightly different C-termini through which they are localized to different membrane subdomains. When Ras binds GTP, it adopts a stable, active ON conformation through which it activates effector proteins. But then the Ras protein slowly hydrolyses GTP to GDP, it undergoes a conformational change and enters the OFF state. Then GDP dissociates from the binding site, Ras can re-bind GTP and is once again switched ON. This cycle is modified by interactors: GEF proteins (Guanine Nucleotide Exchange factors such as Sos) catalyze the dissociation of GDP and thus speed up the re-uptake of GTP and re-activation of Ras. Thus they shift the cycle to an active state. GAP proteins (GTPase activating proteins such as P120GAP) speed up the conversion of GTP to GDP. This shifts the cycle towards its inactive state.

    One of the most important pathways for cell proliferation is the EGFR pathway that feeds into the MAPK cascade. Under physiological conditions, the active EGFR activates the Sos protein, which shifts a pool of Ras molecules into their active state. Active Ras then switches its effectors on – among them Raf1 – which activates a signalling cascade that induces cell proliferation. This is limited by GAPs that speed up Ras GTPase activity which turns the Ras OFF again. Deactivation of Sos when the EGFR is inactive ensures that GDP remains bound and the Ras protein pool remains OFF. This matches our expectations about the roles of these proteins well.

    The problem is that this system can go terribly wrong if Ras gets mutated in a way that damages its catalytic activity and prevents GTP hydrolysis. Activating GAPs no longer works to switch Ras 'offOFF, because if the Ras active site is dead, GAPs have no way of inducing it. And inhibiting GEFs does not switch Ras 'offOFF either, because GTP does not get hydrolyzed to GDP and there is no need for GEFs to clear the active site of GDP. The switch is ON and stays ON. The EGFR pathway is on and stays on. The cell proliferates out of control. This can be the first step of transforming a cell into a cancer cell and this exact mutation in the KRas protein is the second-most frequent mutation seen in cancer genome studies (behind p53) and possibly the most powerful cancer driver mutation of all. The big issue about all this is that mutant Ras is generally considered "undruggable":[2] we can't imagine small molecule drugs that would restore Ras' catalytic activity, and the affinity of GTP to the molecule is so high that we haven't found competitive antagonists that don't have dramatic side effects. An interesting new development therefore was the recent discovery that a phosphatase - PTPN11 - somehow works synergistically with Ras to facilitate its activation of effectors: inhibition of PTPN11 suppressed oncogenesis[3]. If this is a pathophysiologically relevant effect, we expect cancer mutations to spare PTPN11, or even to deregulate it to anhance its activity. Do they?


     

    Cancer gene data

    Knowledge about the mutations of cancer comes from large-scale genome sequencing efforts of cancer tissue samples, and is collected and curated by a small number of databases. These databases sift through the massive volumes of sequence changes, distinguish natural variation from novel somatic mutations, and map the nucleotide changes to individual genes. One of these resources is the IntOGen database in Barcelona.


     

    Task:

    • visit IntOGen.
    • find the KRas information page and briefly explore the information that is available.
    • then visit the information pages for three other genes:
      • Rab39B, a small GTPase, homologous to KRAS, but not associated with cancer;
      • PTPN11, the non-receptor type protein-phosphatase discussed above;
      • PTPN5, a homolgous phosphatase that appears not to be associated with cancer.
    • Here, Kras and PTPN11 are proteins which need to be studied regarding their role in cancer; Rab39B and PTPN5 serve as controls: they have about the same size and similar domain composition - but are not active in cancer-relevant pathways.


     

    (All Options) Loading Data

     

    Task:
    All options initially work with the same data:

    • Open the RStudio course project.
    • Begin a new R script to explore KRas, Rab39B, PTPN11 and PTPN5 mutations.
    • Start by collecting four FASTA sequences that I have provided in the data/ directory into a data frame. Something like:
    myFA <-             readFASTA("data/RAB39B_HSa_coding.fa")
    myFA <- rbind(myFA, readFASTA("data/PTPN5_HSa_coding.fa"))
    myFA <- rbind(myFA, readFASTA("data/PTPN11_HSa_coding.fa"))
    myFA <- rbind(myFA, readFASTA("data/KRAS_HSa_coding.fa"))
    
    ... should work fine. Give your data frame convenient, meaningful row names - do not refer to the rows simply by row index in your script. Gene names will work fine.


     

    For the Report Option...

     

    Task:

    • Write code that executes a loop N times (for N <- 100000) to create a point mutation randomly in a gene. Keep track of the number of missense, silent ("synonymous"), and nonsense ("truncating")" mutations you find. To develop your code, use a smaller size of N, obviously. Then put your code into a function that takes as parameters a single string of nucleotides as input, and the number of trials for your simulation. Refer to the Code submission instructions regarding more detailed specifications and additional validation code that the run must produce. (There are possibilities to handle string input for this purpose; you need to figure out what works best for you. You could consider producing a vector of nucleotides for which you keep track of the indices of the codons, a matrix with three columns in which every row is a codon, or you could leave the string intact and use substring() to work with it, or come up with a different solution. Also you could use biostrings:: functions or seqinr:: for the translation. Or just use code that is similar to the learning units. Don't forget to reference your sources!)
    • Tests: validate your function as follows.
      • The sequence ATGATGATGATGATGATG has no silent mutations;
      • The sequence CCCCCCCCCCCCCCCCCC has no truncating mutations;
      • The sequence TATTACTATTACTATTAC has some truncations, about the same frequency as TGGTGGTGGTGGTGGTGGTGGTGG; both those sequences have about twice as many truncating mutations as TGTTGTTGTTGTTGTTGTTGTTGT. (Explain what these tests demonstrate.)
    • Once your function is ready, run your simulation once for each of the four genes: Kras, Rab39B, PTPN5, and PTPN11. Paste the exact output of each of the four runs into your report.
    • For each of the four genes, discuss the relative frequency of the mutations you have observed in each category and compare it to the frequency reported on the IntOGen Web site.
    • Explain whether you think there is an important difference between the expected categories of mutations (i.e. the stochastic background that you simulated), and categories of mutations that were observed in cancer genomes.
    • Write a short report that interprets your results against the context of cancer biology outlined above: what would you expect if any of these genes were cancer drivers, what do you observe, what can you conclude from your observation?


     

    For the Oral Test Option...

    Task:

    • Open the RStudio course project.
    • Proceed as described for the short-report option. However there is no need to write a formal report, just document your activities and results in your Journal. Add a brief conclusion / interpretation.


     


    Notes

    1. Note: the oral test is cumulative. It will focus on the content of this unit but will also cover other material that leads up to it.
    2. Rhett et al. (2020) Biology, pathology, and therapeutic targeting of RAS. Adv Cancer Res 148:69-146. (pmid: 32723567)

      PubMed ] [ DOI ] RAS was identified as a human oncogene in the early 1980s and subsequently found to be mutated in nearly 30% of all human cancers. More importantly, RAS plays a central role in driving tumor development and maintenance. Despite decades of effort, there remain no FDA approved drugs that directly inhibit RAS. The prevalence of RAS mutations in cancer and the lack of effective anti-RAS therapies stem from RAS' core role in growth factor signaling, unique structural features, and biochemistry. However, recent advances have brought promising new drugs to clinical trials and shone a ray of hope in the field. Here, we will exposit the details of RAS biology that illustrate its key role in cell signaling and shed light on the difficulties in therapeutically targeting RAS. Furthermore, past and current efforts to develop RAS inhibitors will be discussed in depth.

    3. Bunda et al. (2015) Inhibition of SHP2-mediated dephosphorylation of Ras suppresses oncogenesis. Nat Commun 6:8859. (pmid: 26617336)

      PubMed ] [ DOI ] Ras is phosphorylated on a conserved tyrosine at position 32 within the switch I region via Src kinase. This phosphorylation inhibits the binding of effector Raf while promoting the engagement of GTPase-activating protein (GAP) and GTP hydrolysis. Here we identify SHP2 as the ubiquitously expressed tyrosine phosphatase that preferentially binds to and dephosphorylates Ras to increase its association with Raf and activate downstream proliferative Ras/ERK/MAPK signalling. In comparison to normal astrocytes, SHP2 activity is elevated in astrocytes isolated from glioblastoma multiforme (GBM)-prone H-Ras(12V) knock-in mice as well as in glioma cell lines and patient-derived GBM specimens exhibiting hyperactive Ras. Pharmacologic inhibition of SHP2 activity attenuates cell proliferation, soft-agar colony formation and orthotopic GBM growth in NOD/SCID mice and decelerates the progression of low-grade astrocytoma to GBM in a spontaneous transgenic glioma mouse model. These results identify SHP2 as a direct activator of Ras and a potential therapeutic target for cancers driven by a previously 'undruggable' oncogenic or hyperactive Ras.

      Kano et al. (2019) Tyrosyl phosphorylation of KRAS stalls GTPase cycle via alteration of switch I and II conformation. Nat Commun 10:224. (pmid: 30644389)

      PubMed ] [ DOI ] Deregulation of the RAS GTPase cycle due to mutations in the three RAS genes is commonly associated with cancer development. Protein tyrosine phosphatase SHP2 promotes RAF-to-MAPK signaling pathway and is an essential factor in RAS-driven oncogenesis. Despite the emergence of SHP2 inhibitors for the treatment of cancers harbouring mutant KRAS, the mechanism underlying SHP2 activation of KRAS signaling remains unclear. Here we report tyrosyl-phosphorylation of endogenous RAS and demonstrate that KRAS phosphorylation via Src on Tyr32 and Tyr64 alters the conformation of switch I and II regions, which stalls multiple steps of the GTPase cycle and impairs binding to effectors. In contrast, SHP2 dephosphorylates KRAS, a process that is required to maintain dynamic canonical KRAS GTPase cycle. Notably, Src- and SHP2-mediated regulation of KRAS activity extends to oncogenic KRAS and the inhibition of SHP2 disrupts the phosphorylation cycle, shifting the equilibrium of the GTPase cycle towards the stalled 'dark state'.


     


    About ...
     
    Author:

    Boris Steipe <boris.steipe@utoronto.ca>

    Created:

    2017-08-05

    Modified:

    2020-11-11

    Version:

    1.5.2

    Version history:

    • 1.5.2 Removed erroneous reference to old "R-Code option" with partial (and wrong) instructions.
    • 1.5.1 Fixed error in control sequences
    • 1.5 Edit policy update
    • 1.4 2020 rewrite. Different input modes, different genes, more structured requirements, validation of simulation code.
    • 1.3 Remove "significance" requirements since we didn't simulate distributions and we never introduced chisq.test()
    • 1.2 Corrected posted marks, which were not consistent with the description in the syllabus.
    • 1.1 Added sample output
    • 1.0 New unit
    • 0.1 First stub

    CreativeCommonsBy.png This copyrighted material is licensed under a Creative Commons Attribution 4.0 International License. Follow the link to learn more.