{
  "id": 405090,
  "title": "Q: information accretion values in IA.txt",
  "url": "/competitions/cafa-5-protein-function-prediction/discussion/405090",
  "author_name": "",
  "post_date": "2023-04-26T09:32:54.304906500Z",
  "votes": 12,
  "comment_count": 2,
  "views": 0,
  "content": "<p>Hi <a href=\"https://www.kaggle.com/iddux1\" target=\"_blank\">@iddux1</a><br>\nCould you please explain the information accretion values in IA.txt?<br>\nYou wrote in <a href=\"https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:\" target=\"_blank\">https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:</a></p>\n<blockquote>\n  <p>The weight for a term is determined by the logarithm of the frequency of occurrence of that term in a large pool of proteins. The root terms appear in every protein's annotation and thus, their weights are 0. Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger (Clark &amp; Radivojac, 2013).</p>\n</blockquote>\n<p>Apparently, the values in IA.txt do not follow your definition.<br>\nLet's take a hierarchical tree above term GO:0019492 (<a href=\"http://amigo.geneontology.org/amigo/term/GO:0019492\" target=\"_blank\">http://amigo.geneontology.org/amigo/term/GO:0019492</a>)<br>\nIA values are taken from IA.txt.</p>\n<pre><code>GO:0044281 small molecule metabolic process (IA=)\n    GO:0044283 small molecule biosynthetic process (IA=)\n        GO: organonitrogen compound biosynthetic process (IA=)\n            GO:0006560 proline metabolic process (IA=)\n                GO:0006561 proline biosynthetic process (IA=)\n                    GO:0019492 proline salvage (IA=)\n</code></pre>\n<p>It seems that the parent (more general term) sometimes could have IA greater than the child.<br>\nFor some strange reason, the leaf term (GO:0019492, most specific in that hierarchy) has zero IA.<br>\nHow could it be?<br>\nThank you</p>",
  "messages": [
    {
      "id": "2235697",
      "postDate": "04/26/2023 09:32:54",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/iddux1\" target=\"_blank\">@iddux1</a><br>\nCould you please explain the information accretion values in IA.txt?<br>\nYou wrote in <a href=\"https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:\" target=\"_blank\">https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:</a></p>\n<blockquote>\n  <p>The weight for a term is determined by the logarithm of the frequency of occurrence of that term in a large pool of proteins. The root terms appear in every protein's annotation and thus, their weights are 0. Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger (Clark &amp; Radivojac, 2013).</p>\n</blockquote>\n<p>Apparently, the values in IA.txt do not follow your definition.<br>\nLet's take a hierarchical tree above term GO:0019492 (<a href=\"http://amigo.geneontology.org/amigo/term/GO:0019492\" target=\"_blank\">http://amigo.geneontology.org/amigo/term/GO:0019492</a>)<br>\nIA values are taken from IA.txt.</p>\n<pre><code>GO:0044281 small molecule metabolic process (IA=)\n    GO:0044283 small molecule biosynthetic process (IA=)\n        GO: organonitrogen compound biosynthetic process (IA=)\n            GO:0006560 proline metabolic process (IA=)\n                GO:0006561 proline biosynthetic process (IA=)\n                    GO:0019492 proline salvage (IA=)\n</code></pre>\n<p>It seems that the parent (more general term) sometimes could have IA greater than the child.<br>\nFor some strange reason, the leaf term (GO:0019492, most specific in that hierarchy) has zero IA.<br>\nHow could it be?<br>\nThank you</p>",
      "rawMarkdown": "Hi @iddux1\nCould you please explain the information accretion values in IA.txt?\nYou wrote in https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:\n>The weight for a term is determined by the logarithm of the frequency of occurrence of that term in a large pool of proteins. The root terms appear in every protein's annotation and thus, their weights are 0. Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger (Clark & Radivojac, 2013).\n\nApparently, the values in IA.txt do not follow your definition.\nLet's take a hierarchical tree above term GO:0019492 (http://amigo.geneontology.org/amigo/term/GO:0019492)\nIA values are taken from IA.txt.\n\n```python\nGO:0044281 small molecule metabolic process (IA=2.05)\n    GO:0044283 small molecule biosynthetic process (IA=0.68)\n        GO:1901566 organonitrogen compound biosynthetic process (IA=0.13)\n            GO:0006560 proline metabolic process (IA=2.38)\n                GO:0006561 proline biosynthetic process (IA=0.11)\n                    GO:0019492 proline salvage (IA=0.00)\n```\nIt seems that the parent (more general term) sometimes could have IA greater than the child.\nFor some strange reason, the leaf term (GO:0019492, most specific in that hierarchy) has zero IA.\nHow could it be?\nThank you",
      "votes": null
    },
    {
      "id": "2236230",
      "postDate": "04/26/2023 16:30:23",
      "content": "<blockquote>\n  <p>Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger</p>\n</blockquote>\n<p>This statement is usually true but not always. Thanks for catching this and we will fix the language to make it clearer in the Evaluation section. </p>\n<p>To explain the exceptions to this rule, let's consider the IA calculation that boils down to </p>\n<p>$$ia(X) = \\log_2\\left(\\frac{\\text{number of proteins with parent term(s) of } X}{\\text{number of proteins with term } X}\\right)$$</p>\n<p>Usually terms deeper in the ontology are more rarely seen because they correspond to functions that are more specific and may be harder to determine than those closer to ontology roots. However, sometimes there are terms that are always seen annotated in proteins whenever the parents terms are seen annotated. In those cases number of proteins with parent term(s) of  X is equal to number of proteins with term X and IA is 0. This is the case with GO:0019492 in your example. This term has two parents: GO:0043102 and GO:0006561. There is one protein annotated with these two parent terms (A0A031WDE4). This protein also is annotated with the child term GO:0019492. Thus the counts in the equation are equal and IA=0</p>\n<p>As you point out one of those parent terms (GO:0006561) has a larger IA. This is because we see term GO:0006561 in 24 proteins. The term has 2 parents (GO:0009084 and GO:0006560). We see 26 proteins annotated with both these terms. log2(26+1/24+1) =0.111.  Note the +1 is to regularize the empirical counts.</p>\n<p>The term GO:1901566 is not a parent of GO:0006560, but it is an ancestor of your leaf term GO:0019492 (just through a different path in the ontology: GO:0019492 &gt;GO:0043102&gt;GO:0008652&gt;GO:1901566). So your point stands anyway. I hope the above explanation helps. </p>",
      "rawMarkdown": "> Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger\n\nThis statement is usually true but not always. Thanks for catching this and we will fix the language to make it clearer in the Evaluation section. \n\nTo explain the exceptions to this rule, let's consider the IA calculation that boils down to \n\n$$ia(X) = \\log_2\\left(\\frac{\\text{number of proteins with parent term(s) of } X}{\\text{number of proteins with term } X}\\right)$$\n\nUsually terms deeper in the ontology are more rarely seen because they correspond to functions that are more specific and may be harder to determine than those closer to ontology roots. However, sometimes there are terms that are always seen annotated in proteins whenever the parents terms are seen annotated. In those cases number of proteins with parent term(s) of  X is equal to number of proteins with term X and IA is 0. This is the case with GO:0019492 in your example. This term has two parents: GO:0043102 and GO:0006561. There is one protein annotated with these two parent terms (A0A031WDE4). This protein also is annotated with the child term GO:0019492. Thus the counts in the equation are equal and IA=0\n\nAs you point out one of those parent terms (GO:0006561) has a larger IA. This is because we see term GO:0006561 in 24 proteins. The term has 2 parents (GO:0009084 and GO:0006560). We see 26 proteins annotated with both these terms. log2(26+1/24+1) =0.111.  Note the +1 is to regularize the empirical counts.\n\nThe term GO:1901566 is not a parent of GO:0006560, but it is an ancestor of your leaf term GO:0019492 (just through a different path in the ontology: GO:0019492 >GO:0043102>GO:0008652>GO:1901566). So your point stands anyway. I hope the above explanation helps.",
      "votes": null
    },
    {
      "id": "2236254",
      "postDate": "04/26/2023 16:53:58",
      "content": "<p>This is an excellent question and an excellent post. One of the reasons this ia(node) term was called information accretion (and not say information content) was that this is the amount of information a term provides beyond what all of its ancestors collectively do (it's sufficient to just look at immediate parents due to annotation propagation to the root). If a term is always present when all its ancestors are present, then its contribution is 0; it does not bring anything to the table since it's always predicted to be present when the parents are present. If not, then term's contribution is above 0.</p>",
      "rawMarkdown": "This is an excellent question and an excellent post. One of the reasons this ia(node) term was called information accretion (and not say information content) was that this is the amount of information a term provides beyond what all of its ancestors collectively do (it's sufficient to just look at immediate parents due to annotation propagation to the root). If a term is always present when all its ancestors are present, then its contribution is 0; it does not bring anything to the table since it's always predicted to be present when the parents are present. If not, then term's contribution is above 0.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2236230,
      "author_name": "claradepaolis",
      "author_url": "",
      "post_date": "04/26/2023 16:30:23",
      "content": "<blockquote>\n  <p>Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger</p>\n</blockquote>\n<p>This statement is usually true but not always. Thanks for catching this and we will fix the language to make it clearer in the Evaluation section. </p>\n<p>To explain the exceptions to this rule, let's consider the IA calculation that boils down to </p>\n<p>$$ia(X) = \\log_2\\left(\\frac{\\text{number of proteins with parent term(s) of } X}{\\text{number of proteins with term } X}\\right)$$</p>\n<p>Usually terms deeper in the ontology are more rarely seen because they correspond to functions that are more specific and may be harder to determine than those closer to ontology roots. However, sometimes there are terms that are always seen annotated in proteins whenever the parents terms are seen annotated. In those cases number of proteins with parent term(s) of  X is equal to number of proteins with term X and IA is 0. This is the case with GO:0019492 in your example. This term has two parents: GO:0043102 and GO:0006561. There is one protein annotated with these two parent terms (A0A031WDE4). This protein also is annotated with the child term GO:0019492. Thus the counts in the equation are equal and IA=0</p>\n<p>As you point out one of those parent terms (GO:0006561) has a larger IA. This is because we see term GO:0006561 in 24 proteins. The term has 2 parents (GO:0009084 and GO:0006560). We see 26 proteins annotated with both these terms. log2(26+1/24+1) =0.111.  Note the +1 is to regularize the empirical counts.</p>\n<p>The term GO:1901566 is not a parent of GO:0006560, but it is an ancestor of your leaf term GO:0019492 (just through a different path in the ontology: GO:0019492 &gt;GO:0043102&gt;GO:0008652&gt;GO:1901566). So your point stands anyway. I hope the above explanation helps. </p>",
      "votes": null,
      "replies": [
        {
          "id": 2236254,
          "author_name": "predragradivojac",
          "author_url": "",
          "post_date": "04/26/2023 16:53:58",
          "content": "<p>This is an excellent question and an excellent post. One of the reasons this ia(node) term was called information accretion (and not say information content) was that this is the amount of information a term provides beyond what all of its ancestors collectively do (it's sufficient to just look at immediate parents due to annotation propagation to the root). If a term is always present when all its ancestors are present, then its contribution is 0; it does not bring anything to the table since it's always predicted to be present when the parents are present. If not, then term's contribution is above 0.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2235697": "Hi @iddux1\nCould you please explain the information accretion values in IA.txt?\nYou wrote in https://www.kaggle.com/competitions/cafa-5-protein-function-prediction/overview/evaluation:\n>The weight for a term is determined by the logarithm of the frequency of occurrence of that term in a large pool of proteins. The root terms appear in every protein's annotation and thus, their weights are 0. Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger (Clark & Radivojac, 2013).\n\nApparently, the values in IA.txt do not follow your definition.\nLet's take a hierarchical tree above term GO:0019492 (http://amigo.geneontology.org/amigo/term/GO:0019492)\nIA values are taken from IA.txt.\n\n```python\nGO:0044281 small molecule metabolic process (IA=2.05)\n    GO:0044283 small molecule biosynthetic process (IA=0.68)\n        GO:1901566 organonitrogen compound biosynthetic process (IA=0.13)\n            GO:0006560 proline metabolic process (IA=2.38)\n                GO:0006561 proline biosynthetic process (IA=0.11)\n                    GO:0019492 proline salvage (IA=0.00)\n```\nIt seems that the parent (more general term) sometimes could have IA greater than the child.\nFor some strange reason, the leaf term (GO:0019492, most specific in that hierarchy) has zero IA.\nHow could it be?\nThank you",
    "2236230": "> Terms deep in the ontology appear less frequently, are harder to predict, and thus their weights are larger\n\nThis statement is usually true but not always. Thanks for catching this and we will fix the language to make it clearer in the Evaluation section. \n\nTo explain the exceptions to this rule, let's consider the IA calculation that boils down to \n\n$$ia(X) = \\log_2\\left(\\frac{\\text{number of proteins with parent term(s) of } X}{\\text{number of proteins with term } X}\\right)$$\n\nUsually terms deeper in the ontology are more rarely seen because they correspond to functions that are more specific and may be harder to determine than those closer to ontology roots. However, sometimes there are terms that are always seen annotated in proteins whenever the parents terms are seen annotated. In those cases number of proteins with parent term(s) of  X is equal to number of proteins with term X and IA is 0. This is the case with GO:0019492 in your example. This term has two parents: GO:0043102 and GO:0006561. There is one protein annotated with these two parent terms (A0A031WDE4). This protein also is annotated with the child term GO:0019492. Thus the counts in the equation are equal and IA=0\n\nAs you point out one of those parent terms (GO:0006561) has a larger IA. This is because we see term GO:0006561 in 24 proteins. The term has 2 parents (GO:0009084 and GO:0006560). We see 26 proteins annotated with both these terms. log2(26+1/24+1) =0.111.  Note the +1 is to regularize the empirical counts.\n\nThe term GO:1901566 is not a parent of GO:0006560, but it is an ancestor of your leaf term GO:0019492 (just through a different path in the ontology: GO:0019492 >GO:0043102>GO:0008652>GO:1901566). So your point stands anyway. I hope the above explanation helps.",
    "2236254": "This is an excellent question and an excellent post. One of the reasons this ia(node) term was called information accretion (and not say information content) was that this is the amount of information a term provides beyond what all of its ancestors collectively do (it's sufficient to just look at immediate parents due to annotation propagation to the root). If a term is always present when all its ancestors are present, then its contribution is 0; it does not bring anything to the table since it's always predicted to be present when the parents are present. If not, then term's contribution is above 0."
  },
  "source": "meta"
}