 you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you you Takk for ating med. Good morning everyone. People hearing me all right? Excellent. um Good, looks like it's working both on Zoom and on YouTube. Let's hope it keeps working this way. And how's the video quality? I know it's pretty decent on YouTube at least. Where I am? I'm at home. Being the geek that I am, I've pretty much been making a streaming setup that might make Twitch streamers envious. So we are talking multiple camera angles here, slide sharing, screen sharing. Let's hope it all works. All right, this camera is out of focus hello That's more like it. I'm trying, I'm trying. I'd say this has been a great opportunity to learn OBS Studio, YouTube live streaming, lots of different things and be able to call it work. Morning. Takk for ating med. Terima kasih telah menonton! For those on YouTube asking, the Zoom session is only for the official course participants at KU. Both of course to give priority to the people who've actually signed up for the course but also to avoid risking running into the limit of having at most 100 participants. Maybe I could do a tutorial on this streaming live on YouTube and simultaneously teaching over Zoom. Well I can do a tutorial on that if it turns out to work. Let's hope it does. It's not too complicated really, it's just a matter of recording everything into OBS Studio which is open source software used by lots of streamers. Then in that one you set up a virtual camera and then you're setting that camera to be your input camera for soon. And inside OBS you can record locally and you can stream to YouTube and other streaming services. There's a bit of software to set up, other than that it's not really too hard. Yeah, thanks Klaus. Hope things have been running smoothly the past couple of days. Also one small thing, because I'm at home and I don't have a dual screen setup. Once I start streaming the slides, I cannot see the Zoom chat. So if you're asking questions there, I unfortunately can't see them maybe I should get them up. Yeah, thanks, Nadja. So Nadja is a postdoc for my group. She's one of the several people who will be helping out today, especially when it comes to the exercises. Good. I see Katerina here as here as well also postdoc in my group so we have a number of people here who can help you with the exercises later and possibly also try to fill in in the chat while I'm giving the presentation because this is quite a bit of multitasking let me just fire up the slide deck here. Okay, I seem to have a bit unstable internet connection, which is scary. I'm seeing OPS connecting and disconnecting, reconnecting to YouTube Live. Nothing I can do about that unfortunately. All right, I guess it's 8.15 and we should get started. So first of all, welcome everyone to this day on Network Biology. The overall plan for the day is that there will be lectures and a few exercises in the morning, also some software demo in the afternoon. We'll really be diving into all the Cytoscape exercises that is much more hands on and interactive. So the morning session, I'll be streaming all of that, not just to Zoom, but also to YouTube as a live stream. I hope to make everything available to people also afterwards, since there are people in other time zones who are interested. Obviously, I doubt people from the US have dialed in at this hour. So the topic of today is network biology and really why do I care about network biology? What is network biology? Very quick introduction here. I'm a group leader at the Novo Nordisk Foundation Center for Protein Research. So that's a center at the University of Copenhagen with funding from the Novo Nordisk Foundation. And for that reason, we're very interested in general in proteins from all kinds of angles, including looking at protein interaction networks. I should also mention that I'm a co-founder of a company called Intomics. I don't say that to plug the company. I say that because some funding agencies think that this might be somehow a conflict of interest. So now you know it. I'm one of the founders, owners, and advisors of Intomics. Both in the academic setting and in industry, we're dealing with a lot of omics data. And generally what happens is that when people do an omics study, what comes out of it is a lot of molecular players. And what you want to understand afterwards typically is how these molecular players interact with each other, understand their interplay. And that's really the core of network biology to me. Using biological networks to understand how things work together inside the cell. And for that networks is a really useful abstraction and it's also a useful abstraction that really lends itself to visualization. Now I'll start out today with a bit of core concepts just to make sure everyone is on the same page and those are sort of the core concepts of working with networks just some terminology and a little bit of background that I want to get out of the way before we dive into the more biologically relevant parts. So when you're talking about networks there are two things you need to know. One is what are nodes, and the nodes in the network, also sometimes called vertices, are the things that are to be connected to each other in the network. That could be proteins, of course, when we're interested in protein interaction networks. It could be diseases, if you want to know how genes and diseases work together, or which diseases show comorbidity. Then you have the other half of the network, so to speak, which are the edges. And the edges is what connects the nodes. So those are the connections between your things in your network, be it proteins or diseases or something else. These edges, there can be several types. They're so-called undirected edges. An undirected edge means that there's no difference between having the edge AB and the edge BA. So for example, A and B binding to each other, that's an undirected edge. The opposite, of course, are directed edges where the direction matters. AB is B is not the same as B, A, and that's what you would often have in things like signal transduction pathways, where obviously A doing something to B like A activating B is not the same as B activating A. Then something we'll work a lot with today is so-called weighted graphs or weighted networks. That means that not all edges are considered equal. By that I mean instead of just there being an edge or not being an edge we have a probability or weight attached to the edge that somehow quantifies how sure we are that there actually is a link between these two things. When people talk about networks you will find that a lot of the literature is talking about things like network topology, so sort of the structure of the networks, talking about things like robustness of networks, whether networks fall apart, how you can use the structure of the network to infer which nodes are the most important nodes etc. And there's a lot of terms there. People talk a lot about network degree and the degree is simply how many connections an edge has. So if something interacts with five other things it has a degree of five. You have methods like centrality. There are a number of different centrality measures. I'm not going to bore you with all of them, but it's again somehow a combination of either how connected the node is or how important the node is to keeping the whole network together. So that can be degree centrality. You can also have closeness centrality, many different measures. Another thing is clustering coefficients, which is sort of if you're looking at a certain node and you looked at its interaction partners, how connected are those to each other. So that gives you an idea of is this node part of a closely connected part within the network, which is relevant later as the name implies when you're doing clustering. So we will be using clustering, but we won't really be talking about clustering coefficients today. People talk a lot about robustness that links with the whole centrality idea. The idea being that if you remove certain nodes from the network, does the network fall apart? I think one important thing to think about here is that whether it makes any sense to talk about robustness or not depends very much on which kind of network you're dealing with. If you're dealing with a physical protein-protein interaction network, it's not clear at all what it means to the cell that things are connected, that there is a path connecting A to B. It is not clear that it is in any way relevant to the cell if the network falls apart, so talking about robustness of such networks is not a terribly meaningful thing to do in my opinion. However for some other networks like a signal transduction pathway it obviously makes sense if you break the signal transduction chain, then you've broken the signaling. So what we'll focus on today is mostly protein networks. And when it comes to protein networks, what people mostly talk about are physical interactions. We do have those in our networks, as I'll get to, but we are not limiting ourselves to physical interactions consisting of A binding to B forming a complex. What instead we are looking into is looking also at functional associations more broadly, so capturing which things work together. So we're trying to link proteins to other proteins if they somehow work together. Now the name of the game here is obviously guilt by association. How can you find out whether two things work together? And for that, I find it illustrative to look at my favorite guilt by association network ever. And this, as you can clearly read on this slide, the nodes are not proteins. They're people. And this is a network that is based on emails. So it's an email network where we're linking people to other people based on who's sending email to whom. And what makes this particular network funny, to me at least, is that it's not just some random email network. It's an email network that was built based on the email sent during the last couple of weeks in the company Enron before the company went bankrupt in an enormous scandal some years ago. And you can read many fun things out of it. If you look at the lower left side of the network, you'll see a bunch of people who are not mentioned. Some of those people were people outside the company who magically managed to sell their stocks in time and I believe to have read that some of those people actually went to jail for insider trading. Just above them you see the whole board of directors who actually compared to many other people were sending remarkably few emails while the entire company was collapsing around them. And if you followed the news back then when Enron went bankrupt, you will know that those people were in fact more busy playing golf than they were managing the company. So they were out on the golf course improving their golf handicap while at the same time the company was crashing around them. But enough about Enron, enough about email networks. Let's get to the core of this, the String database. So the String database is a big database that I'm heavily and my group is heavily involved in developing, together with the group of Christian von Meering at the University of Zurich and Pierre Borg at EMBL in Heidelberg. So the String database is a protein interaction database. It's a database of functional associations. And at the heart of it, you can go to the website stringdb.org. And there you can look up any protein of interest. And you can then find interactions for those proteins. And that can, of course, give you a hint of what a protein might be doing. So if you look up some protein where you have no idea what it's doing, you can see which other proteins it's likely to work together with, and based on that, try to make some qualified guesses as to what your protein might be doing, and go out and validate them in the lab, hopefully. What you can also use it for is to come with not one protein of interest, but a whole long list of proteins from an omics study, query for a network, and that way find out how the proteins that showed up as significantly regulated in your study behave in terms of being functionally associated. Now, the starting point for making the string database is a collection of some 5,090 genomes in the latest version, and these encode a total of 24.6 million proteins and the goal is of course to link all of those to each other with functional associations. So string is a heavily used resource and this is sort of the bragging slide from Google Analytics. We're looking at more than 30,000 users on a typical week and as you can see it's growing over time and the other thing you can definitely see out of this slide is that if nothing else string is very good at detecting when it's Christmas. So at least scientists do tend to take a break over Christmas. We'd like to think of course that the reason why people use string so much is that string works well. The problem with making that statement of course is that when it comes to bioinformatics tools and I guess many other aspects of science, everything works well according to the authors. So you're dealing here with it's so easy to fake your benchmarks intentionally or unintentionally and make yourself look good. So why would you trust my benchmarks of string? And you shouldn't. Thankfully you don't have to because there are independent benchmarks out there. That's one of the advantages of being a heavily used resource. other people actually compare things to your resource. So this is a graph from a fairly recent paper from the group of Triideca, one of the main groups behind the whole Cytoscape tool that we'll look at later. And they were working on building a protein interaction resource putting together lots of different existing resources including string and as part of that they benchmarked how good these different networks were for identifying disease genes both looking at genome-wide association studies and looking at literature-based gene sets and according to both benchmarks String came out as being the best performing network of the many many networks in this graph. And part of that of course is String is great, at least I think so. Another big part of it is of course many of these databases are very limited compared to String because they're focused on physical interaction networks. And if what you're interested in is to find disease genes, limiting yourself to only use physical protein interactions is really going to harm you. So, if you believe me and Troy Heidecker that the string network seems to work really well, the next obvious question is, how did we pull this off? How did we manage to make a network that is this good? And the name of the game here is really data integration. If you want a good network that performs well in these kinds of benchmarks, you need as good coverage as possible of proteins. You need as good coverage as possible in terms of which ones work together. And the first kind of data we integrate is what is called genomic context. And genomic context, that's a whole class of methods that can be used to infer functional associations based on just having a set of genomes. So the easiest to understand of these is the gene fusion method. The idea here is, imagine you have two genes, look at the top row, the red and the yellow gene, and as indicated by the broken line, these are different genes sitting in different places in the genome. If it's a eukaryotic genome with multiple chromosomes, they could even sit on different chromosomes. However, if you go look at the orthologs of these genes, if you do sequence similarity searches and try to identify the likely orthologs in other organisms, you find that in some organisms, the second and the fourth, these two protein coding genes have been fused into a single large protein coding gene that encodes a fusion protein. Now if you think about this for a second from point of view of a cell, would it make any sense to take two proteins that have nothing to do with each other whatsoever and covalently link them together, making them one big protein? And the answer to that is, of course, no, it wouldn't. Why would you link two unrelated proteins? That obviously means that since some organisms actually took these proteins and covalently linked them to make them one big protein, that's a pretty strong hint that these proteins are doing something related. Also in the organisms where they haven't been fused. So that way by looking at evolution, looking at how these genes are organized, in this case fused, in other genomes, we can make inferences about functional associations in our genome of interest. Another example is gene neighborhood, so looking at which genes sit next to each other. And the simplest case of this, of course, is operands. So if you're looking in particular bacterial genomes, you have operands, where several genes sit together as a cluster, which is transcribed as a polycistronic transcript that encodes multiple different proteins. And generally those genes that are transcribed together in a single operon are of course functionally associated because they're always expressed at the same time and therefore needed at the same time. So typically they encode for example different enzymes involved in the same metabolic pathway. Now the problem is if you're looking at just one genome it's not that easy to infer operands because every gene has to sit next to something. In fact it has to sit next to something on both sides and when two genes sit next to each other they have a 50-50 chance of pointing in the same direction. So just having two genes sitting next to each other being transcribed the same direction is not much of a hint that these two are likely to be in an uproom together. However, again, if you use the power of evolution and you look across 5,000 different genomes, you can look at this and say, is it evolutionarily conserved that these genes sit together in what looks like a somewhat conserved operon? And the reason why this works is that if you're looking at something like genomes, then on the timescale of about 100 million years, genes get shuffled around. If you have two genes sitting randomly next to each other not being functionally associated, not being transcribed as a single operon, chances are that if you look in another genome that is a hundred million years away they're not sitting next to each other. So for that reason when you have a big span of organisms over a very long time scale you can make inferences about functional associations. The last method we have in string of the genomic context methods is so-called phylogenetic profiles. This is the hardest one to understand, but it is also by far the most powerful of these methods. The idea here is that you're looking at presence-absence patterns of genes. So here you have three genes, the red, the yellow and the green, and it's a toy example. On the left side, you have a species tree. So you see how these different species are related to each other. And you see that when you look at these genes, the presence absence pattern of these in this toy example is identical. And you also see that like if you look at the top two genomes, one has all three genes, the other has neither. So it doesn't follow the tree. It's not like one of these cases where say gamma protobacteria have these genes and nobody else. You have close neighbors where one species has it, another doesn't. In another part of the tree, one has it, its neighbor doesn't. And to explain that kind of pattern, you need a lot of joint gain and loss events of these genes, which of course is exceptionally unlikely to happen by random chance. So what you do is that you say, well, since it's unlikely to happen by random chance, it presumably didn't happen by random chance, it happened for a reason. And the reason is that these genes are somehow involved in carrying out a common function. If you have all of these genes, you're able to do that function, whatever it is. If you were to lose one of these genes, you're no longer able to carry out that function, at which point you have no evolutionary pressure to retain the other genes, and you're therefore likely to just use them pretty quickly. In the real world, the tree, of course, is not this small. You're looking at 5,000 genomes. That's what gives you the statistical power. On the other hand, the pattern matching is, of course, not this perfect. It's not a perfect match in terms of presence and absence. But this is the idea. The idea is that if genes are systematically present in the same subset of genomes, and those genomes are not closely related to each other, then you likely have some set of genes that are needed together for some function that those organisms are able to do. Of course, you only get so far by only looking at genomes. So if you want a good network, in particular, a good network for looking at something like high-agriculocaries, in particular human, you need to pull in other experimental data than just the genomes. That could be things like gene co-expression. I'm not going to spend time talking about that. But gene co-expression, you could argue, works a little bit like the phylogenetic profiles. In the phylogenetic profiles, we're looking at presence-absence across different genomes. In gene expression, we can look at presence-absence of genes across many, many, many different conditions. So based on RNA-seq experiments or older microarray experiments, we can look at which genes go up and down together across thousands or tens of thousands of different experimental conditions. And if genes systematically go up and down together like that, it's a pretty strong hint that they might be doing something together because they seem to be needed under the same conditions. Another thing that we focus a lot on is physical protein interactions. So as I mentioned earlier, lots of networks are based purely on these. For us, it's just one of many evidence channels. So the physical interactions can come from a wide variety of different screening technologies. I'm not going to go through all of them. There are many out there, but that's not really the topic for a bioinformatics course. I'll just illustrate one of them because we need an example for later in the presentation. And this is the example of a tandem affinity purification followed by a mass spec experiment. And the idea here is pretty simple. So imagine you have a protein of interest. You put a tag on that, which effectively is a molecular handle. You're now able to do an experiment in which you grab that handle, pull down that protein. And when you pull down that protein, it comes down together with whatever else is stuck to it. Now, when you have that, you can then use mass spectrometry to identify what's in the pull-down. You can run around and put handles on lots of different proteins and do lots of pull-downs and then see which things systematically come down together. Based on that, try to infer which proteins are likely in a complex together. I'll get back to that. Lastly, we integrate what we call curated knowledge. Curated knowledge is different from the experimental data in the sense that this is really more of the textbook knowledge. It's not somebody did an experiment and deposited in a database showing that these proteins supposedly interact with each other. We're talking about established knowledge. We know that these things exist. So this includes things like protein complexes. We know there is something called, say, the cohesion complex. We know what the subunits are. This is well established. It's not based on one experiment. Could also be things like pathways. So there are lots of different pathway databases. They were also in Trieidecker's graph. Things like reactome, keg, and so on. And these pathways, of course, tell you how different enzymes work together on different pathways, making reactions with different metabolites. You have other things like signal transduction pathways, knowing which kinases regulate other kinases, so on and so forth. And those of us older than I think most of the participants here had to learn a lot of these metabolic charts by heart for a biochemistry exam and promptly forget them again afterwards. That was already pointless back then. I hope we are not doing that anymore because all of this is, of course, available in computer readable databases. There is no course available in computer readable databases. There is no reason to know it by heart. So we take all of that and we put it together and you have the string database. Except that it's a little bit harder than that. There are a few problems. So firstly there are many databases. We don't get 5,000 genomes from one place. When we integrate 5,000 genomes we have to collect those genomes from multiple different places. There are multiple different repositories for physical protein interactions. There are dozens of pathway databases. If you want a good database with as good coverage as possible, you need to integrate many, many, many databases. These databases tend to come in different file formats. Of course people try to standardize it but there are still many different formats to deal with. And even if people use the same format they likely don't use the same identifiers within that format. So one database is going to use uniprot identifiers for the proteins, another database is going to use NCBI identifiers, another database is going to use uniprot identifiers for the proteins, another database is going to use NCBI identifiers, another database is going to use yet something else. So we need to deal with that. Then the data is of what I very politely refer to as varying quality, which is the nice way of saying that some of the data is really bad. So if you just treat everything as being equal, you're not going to get a good network. You're just going to get a network where you get flooded by false positives. And then lastly, well not lastly, the data are not comparable. You have the problem that how do you compare a pathway to a physical protein interaction screen, How do you compare a pathway to a physical protein interaction screen, to co-expression data, to inferred operands, to phylogenetic profiles? These things are just fundamentally different things. And how can you even compare them? And last but not least, all the data is not in the same species. That's the reason why we have something called model organisms. We do experiments on those model organisms to learn something primarily about human. So if you're interested in some human proteins you don't want to just look at the human data. You want to know what have we learned from mouse, what have we learned from rat, what's available on the yeast orthologs, the Drosophila orthologs. You need to somehow integrate data from all these different species and put it in one big network. So some of this is just hard work. There's not a whole lot to say about it. So you have a lot of databases. Somebody has to download them. They are in different formats. Somebody has to write a lot of parcels. And of course, when databases decide to change formats somebody's going to have to update their parcel. Then they use different identifiers so somebody has to make mapping files. We need to have files that tell us which Uniprot identifiers correspond to which Ensemble identifiers correspond to which NCBI identifiers. We need to have mapping files for that and again making those is just hard work. Where things get a bit more interesting is when it comes to dealing with quality. So there we build what we call raw quality scores and that's what gets me back to the physical interaction screens. Because the idea here is that you develop a raw quality score for each type of data individually that allows you to take this kind of data and rank the interactions coming from it from which ones are most likely to be correct to which ones are least likely to be correct. So you get a sorting of your interactions based on how likely they are to be right. And if we look at tantrum affinity purification followed by mass spec, how could you rank them? Well, let's imagine the evidence landscape here. We're looking at the interaction between the blue and the green protein. And we've done a number of pulldowns. And in one pulldown, we tagged the blue protein. We got the green and a couple of others. Second, we tagged another protein, got both the blue and the green protein in the pulldown. We tagged a third protein, we got the blue in the pulldown, but not the green. And we tagged the green protein and we got a couple of proteins, but the blue was not among them. The real problem here is how do you turn this into a number? And that's not at all clear, but I hope it's clear that the first two pulldowns are positive evidence, and the last two pulldowns are negative evidence. The more often we see these proteins together in pulldowns, the more we will tend to believe that these proteins interact. The less we see them together in a pulldown, the more often you see one but not the other, the less we're going to believe that they are in are complex together. So if you think about it from a statistical standpoint, what you have from a big tandem affinity purification experiment is basically a 2x2 contingency table. So what we have in this 2x2 contingency table is we know how many pulldowns we did in total, we know how many contained the blue, we know how many pulldowns we did in total, we know how many contained the blue, we know how many contained the green, and we know how many contained both. When you have a 2x2 contingency table you can of course do a lot of different things. The first thing that should come to mind if you do statistics is Fisher's exact test. You could calculate a p-value. Are the blue and the green proteins together in pulldowns more often than you would expect by random chance? That was my first idea. I tried that. It turned out to not be a very good scoring scheme. You could do other things. You could calculate an observed over expected ratio. We know which fraction of pulldowns contain the blue. We know which fraction contains the green. That means we can calculate which fraction we would expect by random chance to contain both, and we can compare that to the actual fraction that contains both. That turns out to be a better scoring scheme. But the point here is you have to come up with a lot of different scoring schemes, and you can do even better than what I mentioned here, but you have to come up with some scoring scheme that allow you to rank the interactions from what's best to what's worst. And you have to come up with some scoring scheme that allow you to rank the interactions from what's best to what's worst. And you have to do that separately for each type of data. For co-expression data, it might be a Pearson correlation coefficient. For the other types of data, it's going to be yet something else. Now, once you have your raw quality scores for each type of data or each big screen, you need to do score calibration. And the idea here is that we compare everything to a common standard, in our case pathways from the KEGG database. And now what we do is we try to say how do these interactions, depending on their score, agree with gold standard pathways that represent sort of what we know about which proteins are in a pathway together. So for doing this calibration, we first ignore all the proteins that we cannot map to pathways. So we now look only at the subset of proteins that actually have been assigned to pathways by manual annotation. And we can go in and look at say all the interactions that score between 1 and 1.1 and we can count how many of those do we have the two proteins in the same pathway and how many of them do we have them in different pathways. And we then figure out that something like 14% of them on the same pathway the rest are in different pathways which tell you that a score between 1 and 1.1 is pretty bad. You could do the same for the one scoring between 2 and 2.1, and you would see that in that case something like 70-80% of them fall in the same pathway, which tells you that a score above 2 is a pretty good score. You do that for lots of different score pins. You get a cloud of dots like I'm showing here and you fit some simple mathematical function, typically a sigmoid function, through it and you now have your calibration curve. The trick is we can now go back to all the proteins that we might not know what are doing, the ones that don't fall on any known pathways. And we can take a given interaction, we can calculate a raw quality score, and now that we have a raw quality score, we can go in and say the raw quality score was 1.7. What does that mean? Well, 1.7, if you look at this curve, means about 50-50 chance of these two proteins being in the same pathway. We can do that for all the different types of data. And the real trick is that, of course, you have different calibration curves for different types of data. And even though the scores on the x-axis are completely different things, we've now managed to map everything into the same score space. We've turned everything into posterior probabilities of two proteins interacting or being associated. The next thing we need to do is to deal with the species problem, the evidence being spread across model organisms in particular. And for dealing with that, we have to transfer evidence by orthology. So orthology has to do with evolution of genes. Homologs are genes that share common ancestry. do with evolution of genes. Homologs are genes that share common ancestry. Orthologs are genes, it's a subset of homologs, that separated by a speciation event as opposed to a gene duplication event. So the ones that are orthologs are the ones that in the last common ancestor of two species we believe were a single gene back then. This is a very complicated scheme. I'm not going to try to explain it in detail, but the idea is that you do it in a two-step process. So first we build up what we call atholicous groups at different levels of evolution. So we have groups that group together, the orthologs within mammals. We have broader groups that group everything in vertebrates, even broader that groups everything in vertebrates, even broader that groups everything in metasoa, in eukaryotes, or even going all the way back to the last universal common ancestor, which is normally called leuka. And we can then map all of our evidence back to all those levels, link the orthologous groups at the eukaryotic level, at the mammalian level, at the vertebrate level. We can link all of those based on all the evidence from the organisms that are within them. Then in step two we can transfer evidence from those groups back to individual proteins through a very very complicated scoring scheme. And the idea is that we now say we are looking at two human proteins of interest. We take the evidence that we have for those directly, of course, but then we take the additional evidence from the other mammals, from the mammalian othellicus groups. We take the evidence from vertebrates that are not mammals from the vertebrate groups. We take the evidence from eukaryotes that are not vertebrates from the eukaryotic groups. So we can go back in different steps, transfer more and more evidence in. And the reason why this scoring scheme is so incredibly complicated is really that we need to deal with gene duplication events. We need to deal with different genes evolving at different speeds, and we need to deal of course with transferring from mouse to human. It's going to be a lot more reliable inherently than transferring from E.coli to human. So that's what we do in string and the bad news is that everything I've talked about so far adds up to maybe 10 to 20% of the evidence at string. So we're still missing about 80-90% of the evidence, which is what I'm going to be talking about in the next presentation. So we'll have a short five-minute break, and then we'll get back and talk about text mining. You're welcome to ask questions during the break though. And now I can see the chat. Takk for ating med. Yeah, thanks. I'm now reading up on the questions and the answers. So indeed, the genomes represent different, well, mostly different species. In some cases, we do have a few different strains of the same species, but that's rare. So the main goal of selecting the genomes is we want to not have as many as possible because that just makes the problem blow up computationally and makes the database unnecessarily big. So we want a set of genomes that keeps it at a reasonable level, has as good a spread phylogenetically as possible so that we have a good coverage of the whole species space of what has been sequenced. And then also we want to make sure that the genomes that we have in are of at least a reasonable quality. So we collect first a very, very large number of genomes. We then do a lot of assessments of genome quality. So we collect first a very, very large number of genomes. We then do a lot of assessments of genome quality in terms of the assembly quality, that the genes are not fragmented, that there's actually good coverage of the clone library, so the genes that should be in the genomes are there. And then when we have that subset of things that pass the quality filter, we start looking at which ones are too closely related. Again, looking back at the quality, we start looking at then, okay, when these two are too close, which one is the better? Let's keep that one. We have, of course, a list of sort of the main model organisms, knowing that these particular strains of these organisms must be there, because those are the ones that are like the reference genomes in the field. That's what goes into the genome selection. So the whole point of these networks, there are many ways you can use them. You can use them to guide experiments. One way people use it is you have some gene where you don't know what it's doing and you then try to use something like string to get an idea of what it might be doing and then go in and do experiments. Another way people are using it for more single gene studies is that say they know some genes that are involved in a function but based on experiments they know that that set of genes is not sufficient to reconstitute the function and that means that they know they're sort of missing a gene or at least one gene. They then go into string with the means that they know they're sort of missing a gene, or at least one gene. They then go into string with the genes that they already know are important for the function they're interested in, and try to find additional genes, possibly genes of unknown function, that are functionally associated with the ones they know are important, and that way try to find the missing gene in their pathway, and then go show that experimentally. So that's sort of all the guiding small-scale experiments. Then you have the people coming from the omics side, which is more what we do, where you have a long list of genes. And the way you use that long list of genes is that you want to somehow structure your list. Looking at a long list and finding a biological story is difficult. So you want to put all of those genes into string, or rather into Cytoscape using string, and that way make visualizations. So using the network for doing data visualization of your omics data to help you identify what are sort of the interesting parts of your results. All right, let's get back to the slides. Bingo. So as I mentioned, we're missing most of the evidence. And where that most of the evidence that we're missing is hiding is the text mining. Because this is where the evidence is hiding. So this is sort of the back of the envelope estimate of the biomedical literature. If we naively assume that everything is indexed in PubMed and that we assume that the average article is five pages long, if I were to take it, print it all out on standard 80 gram A4 paper and pile it on top of each other, I'm going to get a pile that is over 10 kilometers tall. Now, of course, this is an incredibly naive estimate. The average paper is longer than five pages. Not everything is indexed in PubMed. And for sure, the pile is more than 20 kilometers as well. But it doesn't matter whether it's more than 10 kilometers or more than 20 kilometers. Because in either case, the reality is just there is too much to read. We cannot read the literature, which sounds ridiculous, right? Because we're spending all this time writing papers, and they are clearly written in a way that is intended for humans to consume. And we're now faced with the problem that we have too much of it, and we can't read it, which means that whether we like it or not, we have to get a computer to read it. So that's the reality we live in. We need to somehow get a computer to read the literature because we can't possibly keep up with all of it ourselves. And whenever I need to get a computer to do something that even halfway approaches being smart. I get worried and I find it useful to think of the analogy that a computer is about as smart as a dog, by which I mean that if I put sufficient effort into it I can teach it to do specific tricks. So borrowing a cartoon from Gary Larson what we say to dogs? Okay Ginger I've had it you stay out of the garbage understand Ginger stay out of the garbage or else. And the only thing the dog hears is blah, blah, blah, Ginger. Blah, blah, blah, blah, Ginger. Blah, blah, blah, blah, blah. And it understood its own name. And when I do text mining, most of the time, this is sort of our level of ambition. We're trying to just get the computer to recognize names, level of ambition. We're trying to just get the computer to recognize names, but most of the text in between is going to be complete blah blah blah to the computer. We're working on getting beyond that, but this is all of the core of the text mining in string at the moment. So this is what people in the text mining community call named entity recognition. And text mining is a scary field to get into because people like to use overly complicated terms for very simple things. called named entity recognition. And text mining is a scary field to get into because people like to use overly complicated terms for very simple things. So named entity recognition sounded fancy to me until I realized that it literally means recognizing things with names. And unsurprisingly, when you want to recognize things with names, you need a good dictionary of the names you want to recognize. So that means we need to know about synonyms. We need to know whether there's a protein called cyclin-dependent kinase 1, and we need to know that CTC2 is the same thing. We need to handle what people call autographic variation, which is the fancy way of saying that people can write the same thing in slightly different ways. So for example in your dictionary, Uniprot or wherever you get the name from, is going to tell you that there is a protein called cyclin-dependent kinase 1. And boy wouldn't it be nice if you were still able to recognize that in the literature when people write it with a hyphen. If you're just doing plain simple string matching these two strings are not the same and when you have it without a hyphen in your dictionary and it's written with the hyphen in the text you won't find it. So you need to have some sort of flexibility in the matching. You also need to know some rules about how people mangle names like you have cdc2 but you have cdc2 in human, you have cdc2 in mouse, you have cdc2 in rat, and quite likely you're starting all three of them in a single paper, so it gets very confusing. So you put an H in front of it to tell me that it's human cdc2. You can do that with all human gene samples. You put an M in front of mouse gene samples, an R in front of rat gene samples, and so on. But again, the dictionaries like UniProt are not going to tell you that. So you have to teach the computer these little tricks of how biologists write. It's not difficult, but it's important. Then you need a blacklist. And a blacklist is a list of the names that are not in your dictionary because your dictionary is wrong per se, but they are a really bad idea from a text mining perspective, because while they can mean what they mean according to your dictionary, most of the time they mean something entirely different. And my favorite example of that is the Human Gene Naming Committee, which in their infinite wisdom decided that it would be a good idea that the recommended gene sample, the one you're supposed to use in the literature of a certain gene, was this. Now anyone who's done wet lab molecular biology of any kind will know that SDS is a detergent that you use in the lab quite often for several things, one of which is to denature proteins. So of course if you text mine the literature and you think that whenever people write SDS it means the SDS gene you are going to be very very wrong a lot of the time. And this is going to be particularly disastrous because since you use SDS for studying proteins pretty much every protein that we ever studied will have been mentioned together with SDS in the literature, for which reason it's going to be a complete disaster when we go to the next step and try to do relation extraction using co-mentioning. So the idea in co-mentioning is very simple. If people mention two things together in the literature, they're probably related, and that would of course be useful to us when we're trying to build a functional association network. related and that would of course be useful to us when we're trying to build a functional association network. Now you could of course argue that we could very easily have the two things are mentioned together by random chance it doesn't mean a thing but that's where we do counting the idea simply being that if people keep mentioning many times the two things together it's not by random chance it's because these things are actually somehow related. The question is of course how you count. Which level should we count? Should we count how many documents mention A and B together? Should we count it only when it's within the same paragraph? Should we count it only when it's within the same sentence? And the answer is that doing either of these three is wrong. Because things being mentioned together in the same sentence is obviously the strongest evidence, but it's still a good hint when things are mentioned together in the same paragraph. And it's still a hint when things are mentioned in the same paper, even not the same paragraph. So you need to count at all the different levels and somehow combine that into a weighted count where the count is not actually an integer but it's a count that is more weighted count taking into account how much and how close to each other are these entities mentioned together. The way the formula looks is like this. So we have a weight for being mentioned in the same document, a weight for being in the same paragraph, a weight for being in the same sentence, and then for entities i and j we calculate this weighted sum k is the sum of all the documents, i, j are the two entities that we're trying to link to each other, and we're now saying are they mentioned in the same document, same paragraph, same sentence for document K. Once we have that, we can convert that into our raw quality score where we basically normalize this very much like the physical protein interaction. So we need to normalize things and take into account how much is written about I, how much is written about J. is written about j and once we have that quality score we then do score calibration against keg pathways exactly the same way as before and that way we get our interactions from text mining scored in a way consistent with all the other evidence. We then take all of that text mind evidence and like for all the other evidence we transfer all of it by mythology and now we're done and we have string. Now the neat thing of text mining is that we can use it for many other things than just protein-protein interactions and that gets us to the next topic of knowledge graphs as people call it. So in knowledge graph you're trying to build not just protein networks but you're trying to link in a protein knowledge graph lots of other things together as well that is relevant when you're looking at proteins. So we've so far looked at intraspecies networks, so string. There are other networks, of course, where you look at proteins going across different species. So intraspecies networks, I just want to highlight here a work of a former PhD student of mine, Helen Cook, who made a version of string for viruses. So there you have virus proteins associated with the host proteins using exactly the same kinds of strategies I've talked about for string. You can have protein-chemical interactions, so linking proteins to small molecule compounds. That could be interesting if you're interested in drug targets, if you're interested in metabolism. For that we have a sister resource of string called STCH, which is basically string with small molecule compounds bolted onto it as well. You can do protein compartment association, so your nodes in your network could be subcellular localizations as opposed to protein entities. And that way you can link things and basically capture the subcellular localization information about the proteins. You can draw it as a network or you can draw it as a pretty figure where you color a cell based on where protein looks like it's located. In either case, behind the scenes, it is a network. Same thing for protein tissue associations. You can look at tissue expression. You can map that onto figures like this or you can think of it as a network where you have a node being the liver. You have a node being the heart. It's a matter of the data model versus how you visualize it. Behind the scenes it's a network protein disease associations we can again we have a database called diseases where you can go in and look up either for a certain disease get the genes or for a certain gene gets the diseases again it's a network where you now have two kinds of nodes proteins and diseases and it's the nice thing here is it's the same strategy we're using for making all of these resources. We take curated knowledge from whatever reliable manually curated databases exist. We take experimental data. It could be tissue expression data, subcellular localization data, physical protein interactions, chemical screens. It doesn't matter what it is. We run text mining looking at co-occurrence evidence so that would be things like if a protein is mentioned with a disease that protein is likely involved with that disease. It's very simple logic here. We map everything to common identifiers so we use the string identifiers for proteins in all these different resources. But similarly, we have standardized identifiers that we use for diseases, being disease ontology, for tissues, being the Brenda tissue ontology, subcellular localization coming from gene ontology, so on and so forth. And then we again develop scoring schemes. We don't consider everything equal. We score things using the same strategies. We benchmark everything to get calibrated scores out. And that's how we then get one big knowledge graph. But even though you can view it as a number of different resources online, behind the scenes, it is really one big network that ties everything together. behind the scenes it is really one big network that ties everything together. So that's the end of this first part. We now should have, let me look at the time, we have a bit more than 10 minutes for sort of general questions and answers and then after that a 10-minute break. Have we experimented with more sophisticated text passing attempts to understand the nature of the text and the association of the terms mentioned? So, good question. In string, we have a very old natural language processing pipeline that I didn't talk about here. That is a rule-based system using grammars to pull out associations or things like A activates B and so on. We do have that in there. We're not really doing anything to develop that one anymore. Katerina, who at least earlier was in the chat, she might still be here. It's actually her main project is using these more modern methods for dealing with the text. So she's looking into all the kinds of technologies with deep learning using BERT transformers and so on. So she can tell you much more about that in chat if you're interested. And how we calibrate the scores. So in String I mentioned it's the way we calibrate them by benchmarking everything against a common gold standard. In the other resources we do things in slightly different ways but overall the idea is the same. You have some gold standard like manually curated gene disease interactions and based on that you figure out how can I calibrate these different raw quality scores for different data types into a score that means the same across evidence type so you know that a score of X means that you are so and so sure so another So sure. So another question over on YouTube is, is string an undirected network? String is mainly an undirected network. It's mainly an undirected weighted graph. However, we do from in part the passing the manually curated pathway databases and in part from this natural language processing pipeline, we do have some directed edges in there. But if you only consider the directed edges, then you're going to be throwing away the vast majority of string. So if you're thinking about it from a graph analysis standpoint, it's probably best to think of it as an undirected network because the vast majority of edges are undirected. So, done text mining. Would it be different scores when two proteins are co-mentioned in the same paragraph, and if they are two different parts of a paper? In the latter case, will it still get a score? Yes, it will still get a score. It will be a very low score, but it will still get a score. So things being mentioned together just in the same paper, even in different paragraphs, does carry some weight. But it's way lower than if it's in the same paragraph. And actually being in the same sentence is only a little bit better than being in the same paragraph. So I would say if you didn't want to do this complicated weighting scheme, the best level to choose is probably to say same paragraph. Over on YouTube, what databases do you use for storing the string data? So technically we are storing all the data in a big PostgreSQL database. So it's an SQL database. We are not using no SQL databases for it. We did do some experiments working with graph databases like Neo4j, but we ended up not really seeing any advantage in doing that, so we ended up just staying with Postgres. How are the scores combined? Good point, as the evidence are collected from different sources, experiments, predictions, and I could add different organisms. So we're in string when everything has been combined, has been calibrated, and you have probabilistic scores, right? You effectively have posterior probabilities given each piece of evidence. Then in most cases, the evidence is being combined, assuming independence. So you're combining the probabilities. I'm slightly exaggerating the simplicity here. The real formulas are in the papers. But if you're 90% sure, given one piece of evidence, the two proteins are associated, you're 50% sure. If you're 50% sure, given one piece of evidence, and you're 50% sure. If you're 50% sure given one piece of evidence, and you're 50% sure given another piece of evidence, then overall you would say there's only 50% chance that the first one is wrong, there's only 50% chance that the second one is wrong. For the edge to be wrong, both of them would have to be wrong, so there's only 25% chance that both of them are wrong. So 2 times 50% is 75%. You're 75% sure if you have two independent pieces of evidence that each gave you 50%. It's slightly more complicated than that when you're combining evidence across species, for example. You need to take into account how closely related the organisms are. If it's very distantly related organisms, you can sensibly assume independence. But of course, if you're combining evidence from E. coli with evidence from Salmonella, you would be a fool to assume independence. So in that case, we are more using a max score rather than combining them. So we either assume things are dependent and we just take the better of the scores or we assume independence and we combine them in the fashion I explained. Thank you. There was also a question at some point about for the contingency tables, what was the best fitted scoring scheme for the physical interactions. It's been changing over the years. I wouldn't really spend time on trying to explain that now, because right now actually Mark in my group is working on coming up with new scoring schemes for the physical interaction data. So whatever I would tell you now would be something that actually would be outdated very soon. But the idea was basically it's sort of, it's an observed over expected ratio, but at the same time combined with the absolute count having to be high as well. So it's sort of a compromise between you need a lot of observations to be sure and at the same time you get it. You need a good observed over expected ratio. Let me just see which paper it is. Katerina managed to dig up on the... Yeah, that's the right one. Exactly. So the paper describing the NLP pipeline was a super productive collaboration with another group in Heidelberg. So it was all done while I worked at the EMBL in Pierre Borg's group. And I was working with Jasmine Sarich, a computational linguist. And I don't think I'm going to offend anyone if I say that his knowledge about proteins was as great as my knowledge of linguistics. So we had very complementary skills, let's put it that way. But somehow it just worked amazingly well. And yeah, I knew what it was we wanted to accomplish. He knew what one could actually do with NLP at the time. And we put together in half a year, each of us working maybe a quarter of our time on it, we managed to put together a pipeline that actually was probably the best in the world at the time. And it's still doing remarkably well. It's sort of embarrassingly outdated technology, but every time somebody's been benchmarking it, they've told me that it is scary good considering how old it is 1.5 kg kv. kg kv. kg. I'm not sure if questions come up so just the plan now is that first we have 10 minute break I just need to grab some more water and have a short bio break here. Yeah, so, oh, there's a question about APIs. Are there REST APIs for accessing string programmatically? There are REST APIs, yes. I don't think there's a Python package for doing it specifically, but you can access the REST APIs. It's all on the StringDB website. If you go to the help section, the API is documented there. So yes, there's definitely REST APIs for accessing it programmatically. That being said, depending on what you want to do, you don't necessarily want to use the REST APIs. There are also bulk download files and if you want to do something like a global analysis of the whole network of a certain organism, I would say you are far better off just going downloading all the data locally rather than trying to fetch it via the REST API. It's just going to be much slower to do it via the API and unnecessarily complicated. Another question. Can we use string to predict interspecies PPIs of organism which is not in string? Yes and no. It's certainly not something you can do via the website. You can't just go plunk in a genome that you're interested in that isn't in string and get a network. But you can use, so there's an Authology resource that String builds on that is called eggnog and if you download there the orthologous groups, then you can figure out you can take your there's a tool as well called EGNOC mapper so you can go map all the genes from your genome to either a close relative in string and transfer the evidence from there or orthologous groups, and then you can take and download the whole network from string and you can map interactions over. So it's a lot of coding work to do. There's not an easy way to do it at the moment. It's something I would like to see in the future but it's certainly not a trivial task and it's also something that would be computationally quite expensive so that's really the tricky part. Can we make this good enough and fast enough that we can offer it as a service that people can just go use? Because we obviously don't want people to be crashing our server. Okay, so let's have a quick 10-minute break. Then starting at 9.30 30 we'll jump into some exercises so the exercises are you should have the link in the course material but let me just open it up here training So the exercises we'll be doing in 10 minutes are these ones. And the idea is to have basically, what is that, 25 minutes or so for that. Then a short five-minute break. You're, of course, welcome to start working already if you want. I just don't promise that I'll be sitting at the computer right now. And get as far as you get during that time. It's to give you an idea of what's actually in string. How do you work with string through the web interface? Where does the data come from? Understand the nature of this protein graph before we at 10 o'clock get back into talking about Cytoscape, StringApp and how to work with these networks inside Cytoscape. Because you have a much better view of the underlying evidence when you're in the web interface. So that's why first we go look at the web interface, have an understanding of what's the data we're dealing with. And then we start working with those networks on a much bigger scale in Cytoscape. And just for everyone also on YouTube if you want to play along with the Cytoscape exercises it would be a good idea to get Cytoscape downloaded and installed as well. It's a bit of a big install so depending on your internet speed you you probably want to get started if you haven't done it already. And if you already have Cytoscape installed, please, please, please make sure you update to the latest version 3.7.2 and make sure that you've updated the apps including StringApp to be the latest version. We usually always run into some people who already had an old version of Cytoscape installed and then the exercises don't work because they are on an old version of Cytoscape, old version of StringApp etc. So especially now that we're trying to teach online and we can't see your screens, please make sure you're on the latest version to avoid a lot of questions. Thank you, and I'll be back in a bit less than 10 minutes. you you you you you you you you you you you you you you you you you you you you you you you Thank you. I'm back. So, people still hear me? Excellent. You hopefully see my screen now. The exercises that we'll be doing, it's this link. It should be on the course website as well. I've just opened up the webpage here. I hope you see me sharing the screen. So these first exercises, they are all web-based and just get myself out of the way there. That's better. And you can see we have a number of exercises and the first one we're really going through basic things with the String website, querying for a single protein, looking at how you can represent the networks in the interface, looking at the so-called evidence viewers, which are all about seeing the underlying data, seeing where a network came from or rather where a specific interaction came from. Experimenting a bit with the query parameters and seeing how they affect the result you get just to basically get an understanding of what's in string how does it all work that's really the key to get through that exercise 2 that one is the stitch. So if you're interested in how you can do similar things with small molecule compounds, have a look at that one. It's not something you really need for the exercises later. So that's very much optional. Exercise three, the disease query. We will be doing a disease query from Cytoscape later on. So it would be great if you go in and have a look at exercise three. disease query we will be doing a disease query from Cytoscape later on so it would be great if you go in and have a look at exercise 3 so that you have an understanding of what's in the diseases database before we use it from inside Cytoscape. Exercise 4 is all about the string viruses so if you are interested and well many people are at the moment even though I'm sorry to say that a certain specific virus that I'm not sure I'm allowed to mention on YouTube is not in the database obviously we have not released a new version of the string viruses after the outbreak but you can look up other proteins from other viruses lots of echo i have no idea where the echo would come from? Is there still echo? Okay good I don't know. There was a chat comment in YouTube that there was lots of echo. I have no idea where that would be coming from. Good to hear that there's no echo. So yeah, dig into the exercises. Just ask questions. 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt 1 tsk vanilleekstrakt Terima kasih. Takk for ating med. Sampai jumpa. Terima kasih telah menonton. Thank you. Terima kasih. 1 tbsps of butter 1 tbsps of flour 1 tbsps of baking powder 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsps of baking soda 1 tbsp. salt 1 tbsp. pepper 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder 1 tbsp. garlic powder Terima kasih telah menonton! Right, there's a channel called database, which can be a bit confusing. Personally, I would vote for renaming that channel. The database are the manually curated databases. So they are really the curated knowledge. But I would agree it's not the best name for it because all the data that goes into the experiments channel, for example, comes from the databases, comes from other databases, and all the evidence in string overall, string is a database. So it's not the most accurate term. I think it's called that for historical reasons. Back in the Stone Age, the string database only had interactions inferred from the genomic context methods, and interactions coming from the databases. So it was called database. Since then, we've added a lot more, and the term database is not that descriptive anymore. Terima kasih telah menonton! 1.5 kg kaya kaya Terima kasih telah menonton! Very good question. So the question about what do the scores mean for the database column? Well, since the database is kind of the manually curated knowledge that we believe to be true, how can you benchmark it, right? It's the gold standard. It's what we are benchmarking against effectively. So for that reason, the database channel is the only one that actually is not benchmarked. Instead, everything that comes directly from one database gets a flat score of 0.9. We say we're 90% sure of stuff that is manually curated. If things score higher than 0.9 in the database channel, it's because we got the same manually curated information from several different places. But I don't even think that happens. I think higher than 0.9 has to be from another evidence channel as well, because the curated databases interchange data. So the fact that it's in more than one database wouldn't really make it more reliable. I would have to check that carefully. So I'm not doing the database channel. This is not meant as a disclaimer. It's more the we're a big consortium making this different groups are responsible for different parts of string. And I just want to give credit that it is the group in Zurich that is doing all the hard work of integrating these way too many different pathway databases. So really technical questions on how things are done in that channel. The people in Zurich would be more qualified at answering it than me. Is there a reference of how these scores are calculated? By reference do you mean publication? The problem is there's not a single publication explaining how everything in string is done, which sort of is an artifact of how publishing works. So we are making the string database, we're releasing new versions, and there's this thing called the nucleic acid research database issue. And we publish every two years an update paper or string. But since it's an update paper, every paper describes what's new, what's changed. And for that reason, it's effectively like this series of papers is like patch files to source code. You almost have to go back and read the original paper, and then you have to read all the subsequent papers to figure out which things have been changed since then. There's no way of publishing a paper where it's a live paper, so to speak, where you just have the current information in one paper. It's quite bizarre. on. There's not one equation for a score, no, because the point is all the different evidence channels have different scoring schemes. That's also why if you were to make a publication that explains how everything is scored, it would be a gigantic publication, because that would be explaining the scoring scheme for how do you score fusions, how do you score neighborhoods, how do you score phylogenetic profiles. That's actually a separate paper in its own right. There is a paper out on how we score the phylogenetic profiles. Then there's the whole scoring scheme for experimental interactions, which has changed over the years and which is due to change again. There's the scoring of the text mining. On top of that you then have the whole scoring of how do you transfer evidence by a orthology. So yeah, the best people to answer questions about how actually both the, let me get it right here. The genomic context channels and the database channel and also the authority. Those parts are done primarily in Zurich. The authority transfer. So those are the best people to ask. I think I saw over on the YouTube chat. I think I saw David Lyon over there. He's actually a former member of my group who's now in Zurich, so he might be able to answer questions for their part over there. I'm just delegating things here without even asking people if they're willing to. He can complain later. Terima kasih telah menonton. Question about if two proteins are in fly-based, they would have a score 0.9. No, the scores are about interactions, right? Of course, the proteins themselves are going to be in, Drosophila protein is going to be in flybase, because in fact, we get the genome from Enxample, which gets the genome annotation from flybase, so everything is in flybase. But for there to be an interaction that scores 0.9 in the database channel, there would have to be manually curated information from Flybase that they interact. Does that make sense? Takk for ating med. Thank you. Gå inn i fjellet. Jalur Terima kasih. Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Nasa kata, Terima kasih. Takk for ating med. I think I'll just really quickly go through exercise one just to show you what the idea is to make sure that everybody's understood that part before we dive into cytoscape after another break. So here's the string welcome page. When you first arrive, you go in, you can query for a protein, I query for insulin receptor. I can either leave the organism on auto detect or I could select human. If I'm lazy and I leave it on auto detect, it comes up and says I know insulin receptor and a lot of different organisms, lots of proteins it could be. I'm guessing you mean this one in human. Yes, it is. And I get a network. And it looks like this. looks like this. The first thing you notice is that there are many different colors of lines and if you look down here then you will see that the different colors of lines correspond to different types of evidence. So the pink lines are experimentally determined interactions, the yellowish lines are text mining and so on. So this is what is called the evidence view where the colors of lines represent which types of evidence you have for a certain interaction. Another view is the confidence view where now you see you don't have multiple lines anymore instead you have different strengths of lines. So for this we are now just showing what's the overall confidence of a certain interaction and you can see that we are more sure about this interaction between these two than we are between on the interaction between these two. So in this mode we're just showing how sure are we not where did the evidence come from. When it comes to the evidence viewers you can still get in and find the evidence of where does a certain interaction come from even when you're in confidence view so if we're interested in what was it insulin receptor and insulin receptor substrate one to make it easier to click on i'm just going to move these makes it a lot easier to click on, I'm just going to move these. Makes it a lot easier to click on this edge and get the pop-up. And now that you're seeing this pop-up, you see we have evidence from a little bit from co-expression, a little bit from text mining, but it's annotated in manually curated databases. There's experimental biochemical data, both in the same organism in human and transferred from other organisms. That's really where the bulk of it comes from. And sorry, yeah, there was a lot from text mining as well. So that shows where it comes from. You can go in and see more detail. So as I said, there's experimental data supporting this interaction. If I want to see where did that experimental data come from, I can click the show button and it will show me that I have things imported from a number of different databases in the act, HPRD, GRID, which is BioGrid. And you see which type of assay they did. Pull-down assays, affinity chromatography experiments, two hybrid experiments, enzyme enzymatic study, etc., etc. There are loads of different and you see it truncated to just show 10. There's so much data and it's not surprising that we have a lot of data for that interaction. There's a reason why it's called IRS1. It's insulin receptor substrate 1. So of course given the name of it it's obviously very very well known that insulin receptor substrate 1 interacts with insulin receptor. If we go to the query parameters, this is where there's a bit more to understand. There's a lot of different settings that you can choose. There's the minimum interaction score. There's the maximum number of interactors. And that's really what we're trying to make sure people understand here. So what's the difference between these? How do they play together? Right now we have a network. If you count the proteins you see there's insulin receptor and 10 other proteins in the network. If I go over and I set the minimum interaction score to 0.7, update, does it change the network? More specifically does it change the list of proteins? And if we looked at the list of proteins here before and after, I can tell you it did not change the list of proteins. Now, there's a very simple reason for that. We are ranking the proteins based on their interaction score with insulin receptor, the query protein. The top 10 proteins all score way more than 0.9. score way more than 0.9. So when I'm choosing to show the top 10, it doesn't matter whether I set the score cutoff at 0.4 or 0.7 or even 0.9. The top 10 is still going to be the same top 10. However, some of the interactions between the proteins may score lower than 0.7, so we did lose something in terms of interactions when we change the cutoff. So the next thing is let's go turn off all evidence types except from experiments. So if we only consider the experiments channel. Now you've got a network that quite clearly looks different. And if we go look at the legend, you will see, if you compare it with before, that the list has changed. The reason is the score we're ranking on is the score coming from the evidence types that we've turned on. So when I turn off everything but one evidence channel, it means that the score that I'm now sorting the proteins on and taking the top 10, that score is different. It's now the pure experiment score as opposed to the combined score across all evidence channels. score as opposed to the combined score across all evidence channels. If I now go and say let's show top 20. So 0.7 only experiments show me top 20. Update the network and clearly there's a lot less than 20 proteins in this network what's happening well the reason is this is the lowest scoring protein that scores over 0.7 in the experiments channel alone so when I'm asking for a top 20 with a confidence cutoff of 0.7 using experiments channel only, the answer the string comes with is, sorry I don't have 20 proteins for you. There are not 20 proteins scoring above 0.7 based on experiments alone. And I could go lower this one and I still wouldn't get more I think you saw the point any questions to this otherwise we are ready for digging into Cytoscape. So now you've seen String, you've seen some of the other resources around String, and I hope you have an understanding of what's the data that goes into it. We have confidence scores. It's a very complicated setup, but it basically allows you to know which interactions are more reliable, which interactions are less reliable and it's based on many different lines of evidence and that's why it's complicated. Now Cytoscape, unlike String, is a network tool. Cytoscape is great for doing analysis of networks. Cytoscape is great for doing visualization of networks. Cytoscape is great for doing visualization networks in particular. That's what we'll mainly use it for here. But Cytoscape is not a database. It's one of the most common questions that comes up on the Cytoscape helpdesk, which by the way I can highly recommend if you have Cytoscape problems to go to the helpdesk. It's not a database. Cytoscape does not give you a network. When people open Cytoscape and go where do I get my network the answer is well you're using a network tool. You have to load a network in from somewhere. The Cytoscape user interface has three parts. One is the networks where you are showing a network. That's the visualization. One is the tables. tables that's where all the data resides those are the ones you need to populate with some data to have something to show and there's the visual styles which is the mapping of how the data in the tables turn into the pretty visualization that is the network so here's how it looks. We have up here the network visualization and you see in this case it looks like a string network. You have down here the tables where you have a note table that contains all the notes. You also have an edge table that contains all the interactions. And then over on the left you have the style panel where we can say how different properties map onto this. So we can say how the strength of the edges depend on the scores in the edge table or if we have some data how we want that data to be mapped as colors onto the network. So you can do many things in Cytoscape. You can of course load and save sessions. This is the first thing where people get confused. They want to get a network into Cytoscape and they think the obvious thing is you go file load. Well, you don't go file load because you use load for loading and saving sessions. So if you don't have a session already you've saved, you don't have anything to load. So this is more like loading and saving Adobe. So if you don't have a session already you've saved, you don't have anything to load. So this is more like loading and saving Adobe Illustrator for else. To get data into Cytoscape in the first place, you need to use import. So you import a network, and you can import a network either from a local file. So if you have your own tab delimited file or Excel sheet with interactions from your own study, you can load it into Cytoscape using the local file load importer. Or you can import a network if you don't have your own from a public database, which can obviously be string. You can import tables. So that one is something that is named a little bit confusingly. Import table is really all about importing note table information. So when you have imported a network already and then you have for example your own omics data that you want to import into Cytoscape as well in order to visualize it onto the network, you want to use the import table functionality to load your data into the note table. You then have property mappings and there's a few of them. There's the pass-through mapping which just takes the data as is and puts it on the network. That's what you use for example to say this field contains the name. I want a pass-through mapping of that name to be the text shown on the node. You have discrete mappings which is when you have discrete data or data that consists of classes. So say you have clusters A, B, C, and D, and you want to have things in cluster A be red and things in cluster B be blue, you would use a discrete mapping. And then you have continuous mappings, which are the ones you want to use when you want to use, for example, a color gradient to map something like a logfold change value onto a network, or like when we take the string confidence scores and map them onto how strong the line is on the edge. There's something called default and bypass. So I just talked about the mappings. These are the other two halves of how you map data in Cytoscape. The default color is what it's going to show if you don't have any data. So if I load in some logfold change values, I give it a color gradient going from blue to white to red, and then I set a default color to be gray. Then the nodes for which I have missing values would be gray, because I have no logfold change value. Whereas something that I have data for, but it doesn't change, would be white. The bypass is something that allows you to select nodes and set properties specifically for that node and just say, I have this node, I want it to be orange. It's very powerful. You can do a lot of things with bypass, but it's also a bit dangerous because there's not an easy way to see what you've done in a session. So if you mess things up, it can be quite messy if you're using bypass. So I would generally try to avoid using bypass when you can. Another important feature in Cytoscape core functionality is selection filters. So instead of selecting things by selecting a square or somehow clicking on the node, holding down a button, clicking multiple nodes, you can select based on properties. You can say select everything for which the logfold change value is greater than so and so. Select all the nodes connected to the node I've currently selected. All those kinds of things. So you can select by attributes. You can also use a lot of layout algorithms. Cytoscape has a lot of powerful algorithms for how to layout networks. You'll be playing a bit with those. I highly recommend installing the Y-files plugin which has additional layout algorithms. Clustering. There's the Cluster Maker 2 app, which is really powerful for doing all kinds of clustering algorithms on the network. And that gets me to the topic of Cytoscape has an app store. So it's a bit of a bad name. I know that John Scudamore is our collaborator who's on the Cytoscape core team prefers that it would be called the tool shed instead because it's not an app store in the Android or Apple sense. It's not a place where you have to pay for anything. The app store is just a place where you can install additional tools in Cytoscape from. It's all free. So one of those apps that you can find in the App Store is StringApp and there's a few related things as well. So the StringApp basically does this. It allows you to very easily take string and get it into Cytoscape. It has a lot of added functionality as well and but this is really the core function of it. Get string into Cytoscape. You can do several types of queries. You can do protein queries. So in that you query for typically a long list of proteins and fetch a network for it. You can do a disease query where you use the diseases database and go and say, I want a network for Alzheimer's disease. So you just query for Alzheimer's disease, get the top end proteins for that disease, and then retrieve a string network for it. Or you can do a PubMed query where you start from some topic of interest, you query the literature for that topic, you find the proteins of interest by text mining of that literature, and then put a string network. One of the most common use cases of wanting to get string networks into Cytoscape is to visualize omics data. So simple case here, we have a proteomics experiment and what came out of that is of course your typical Excel table with a lot of columns. You see here we have a column called uniprot. It's always good to use things like accession numbers instead of gene names when you're querying a database. So we want to have that and we good to use things like accession numbers instead of gene names when you're querying a database. So we want to have that and we want to use that. We have a lot of data coming out of the mass spec, including some things like some log fold change values after five minutes, after 10 minutes. Then what you do is you take the whole list of Uniprot accession numbers from that table. You do a protein query query and that way you fetch a string network. You then go and do import table to load all of these additional columns from this Excel table into Cytoscape as well. And you can then go and color the network by a fold change for example. So you now take the fold change values from the Excel table and map them as colors onto the nodes using the visual property mappings inside of Scape on a string network. So here you have a network where the coloring of the nodes comes from the user's own data. All the edges come from string. Other things you can do enrichment analysis. We didn't use it in the web interface but String has functionality for doing enrichment analysis. So you can do a go-term enrichment analysis, find terms that are significantly enriched in this network and map it onto the network. You see there are now these these halos or circles around with several segments with different colors and these colors represent different terms that were significantly overrepresented in this network. We can also take things like site-specific data. So this is particularly interesting to people who work with phosphoproteomics data or other post-translational modifications, or things where you have multiple comparisons, for example time series data. And you can use the Omics Visualizer app, which is also developed in my lab in particular by Mark. Nadja has been one of the main drivers, she's also in the chat for the Stringer app. And you can then, the same way as these colored circles with multiple segments map logfold change values for different phosphorylation sites on the same protein for multiple different comparisons. You can of course make overly complicated figures this way if you want, you shouldn't, but it is a very powerful visualization tool and it gives you a lot more power than core cytoscape in terms of being able to map complicated data onto a network. And it is designed of course since it comes from my group to play very nicely with the StringApp. So StringApp and Omics Visualizer work great together. Now the bad news is that what I showed you here were really easy examples. And they were easy because they were small. Typical Omics datasets you don't have a small network like what I just showed you. You have typically hundreds to a thousand, even a few thousand proteins that come out. And for those, you will typically have a thousand to ten thousand interactions. And when you show that, you end up with something that looks like this. And at first, maybe you you think this looks nice. I mean I see lots of networks like this get published in the scientific literature. But try making any sense of this network, right? I mean what can you see? The only thing you can see is it's a big network. It looks like everything is connected to everything. And it is what I like to and many people in the field like to call a ridiculous gram. Everything is linked to everything. It's ridiculous to make a plot like this because you can't see anything from this figure. So what we want to do typically when we have a big complicated network like that is to use network clustering to cut it up. So that's where we use the Cluster Maker 2 app in the exercises which comes from Jan Skudamoris at UCSF, our collaborator in StringApp and Cytoscape. And we use that to identify functional modules in the network. We then typically cut down the network and show only the interactions that are within the clusters and that way we can take the network from before and turn it into something that looks much much simpler. It's still a big network it still takes time to understand this but I hope you agree that this is a much nicer figure than the one we had before. So to summarize I hope I convinced you that networks are a very useful abstraction that I hope you remember. Nodes, those are the things in your network. Edges, those are the ones that connect your things. So proteins and interactions typically. You heard a lot about the String database. It's a database of protein networks. It has a whole suite of related database resources around it. Subcellular localization, tissue expression, disease associations. And all these resources, string and its sister resources, are made by integrating heterogeneous data from a lot of different places. They use text mining. All of them rely heavily on mining information out of the text because no matter how many databases you import, you're not going to capture everything. There's so much written in the literature that is not in the databases. I've told you a bit about Cytoscape. I think the best way of learning Cytoscape is to do hands-on exercises. So that's basically what we'll be doing the rest of the day. It's a network tool. It has apps that you can plug in like the String app that is really useful for working with string networks inside Cytoscape. You have Omix visualization. We can do a lot of things visualizing the data on string networks both using the core functionality of cytoscape and using omics visualizer so with that i just want to really thank a lot of people behind this work so i already mentioned several times the string database it's a huge collaboration it's been running for a long long time it all started in peer box group at the empl where both christian van Meering and I was in his group at the same time. Christian then started his own lab in Zurich. I started my lab in Copenhagen. We're now working together as a consortium, still all of us involved in doing the string database. Lots of people from the groups have been working on this. I want to particularly highlight Damian, who was one of my first PhD students and now working in Christian's lab since quite a few years. Really string being his core activity. He's been the mastermind behind the Authology transfer and many other parts of string over the years. I mentioned Helen who did the string viruses which is certainly a very timely thing now. Michael Kuhn was the mastermind behind Stitch if you're interested in small molecule compounds. David Lyon whom I think might still be online has been doing was first a postdoc in my group and is now also in Christian's group in Zurich. You begin to see a pattern here, it seems. Done lots of things, especially related to the enrichment analysis functionality. On the text mining front, Alexander Junge in my group has done a lot of work. Current postdoc, Doha Grisa in the group has worked a lot on getting the full text mining in. Katerina, who's here helping today, is working very hard on making what is going to be the next generation of text mining in string, so using BERT transformers and all that fancy stuff. I've been collaborating for many years with Vangelis in Greece, so he's really driving a lot of the early work on text mining together. And Sampo Pusalo is our collaborator on the whole BERT project with Katharina. The knowledge graph work, Sune Frankil was the main reason for this whole thing, starting with the diseases database. Oana has been doing a lot of work in particular on the tissues resource. Alberto also on the tissues resource and on making a knowledge graph of the whole thing. Cytoscape, StringApp, Omics Visualizer, that's all. Nadja doing a ton of work on it, collaborating with Janko Otkin's group, where she was joined between my group and Jan's group. John Scudamore, I mentioned him several times. He's one of the core developers of Cytoscape and heavily involved in both String App and Omics Visualizer. And Mark is the main developer of the Omics Visualizer. So thanks for your attention. Thanks for funding as well, of course. And I'm happy to take some questions. And then after that, I'll dig in and give you a quick demo of what you can do in Cytoscape before we break for lunch and then continue in the afternoon with exercises. Do we have any questions to this? There is a question about could you do things with antibiotic resistance? And maybe the smartest is to actually try to just do a demo with that. So how would I go about if I wanted to make some network of antibiotic resistance in some bacteria? Then the first thing is I need to find literature. So I want to dig out a list of antibiotic resistance proteins from the literature. And for that, I'll start by going to PubMed. Let's see... That gives me 200,000 or so. I need to share the screen. A query for that gives me a list of 200,000 papers. Let's see what should we go for? Streptococcus. Yeah, that's good. We now have 14,000. Let's see. What does that give? No bad idea. So this gives us a bit less than 14,000 papers about Streptococcus antibiotic resistance. I'm just going to copy that. I'm going to jump into Cytoscape and this is a perfect case for illustrating what you can do with the PubMed query. Now I say import network from public databases and when you have the String app installed you can choose under data sources instead of universal database client you can choose String PubMed query. Obviously I don't want a human network now. I want something that would be streptococcus. Let's see which one, paste in this query, ask for let's just take 50 proteins. So now if everything works well, we are going to get a network of proteins from this species that are mentioned a lot in abstracts talking about antibiotic resistance in streptococcus. So it queried PubMed. It found the same number of papers as we found querying PubMed. It should, we are using the API for the same database, so it obviously should do the same. It then goes to my database of pre-computed text mining results, figures out which proteins are mentioned a lot together with this, and retrieves a string network for those proteins. So the list of proteins came out of running text mining but the network came from string. So I hope that answered the question can you use this to make a network for antibiotic resistance genes? Yes you can. You very much can. So what else could you do? We can do things like, let's illustrate the features here. So you see down here you have the node table. In the node table we are seeing the list of proteins that came out from this query. We have the edge table it has the interactions coming from string. The network table you don't really need to worry about. In this one we have a lot of columns. You'll see one thing we have over here is the text mining scores. So that's because we did a PubMed query. Then we have a score that actually is what it was ranked on. That sort of combines how many papers were there in total in PubMed mentioning this gene. How many papers out of my 14,000 from the PubMed query mentioned this gene. I can now take these. I could choose to do a coloring of it. So let's say we want to color these proteins based on how strong text mining evidence I have for these genes being related to antibiotic resistance. So for that, you go to the style, and you want to be in the style notes. related to antibiotic resistance. So for that, you go to the style and you want to be in the style notes. And then first thing, we currently have these colors that are sort of reminiscent of how things look in string. It's called string colors. I turn this off. And now I say I want the fill color And now I say I want the fill color to depend on the text mining score. I then say I want the mapping. You see this pass-through discrete continuous. Since this is a continuous valued score, I want a continuous mapping. And I now get a color gradient that turns the numbers from this score into colors on the network. And you see it's a very skewed distribution. There's really one that has very strong text mining evidence and most of the others are scoring quite low. You can go in and customize these gradients. I could sort of pull the middle color down and maybe get a little bit more color into the network that way. So that's the kind of thing you can do with a PubMed query. So on the import page, what does use smart delimiters refer to? I actually don't remember. Maybe Nadja can explain. I think it's sort of like when you have lists of things instead of having one per line. So it would automatically split them. I think if you have like a comma separated list of identifiers, I think that's what it is. The reason why you need to be able to turn it off is obviously depending on how your identifiers look, splitting things could break your query. So if you're having a clean list where everything is on a separate line, you probably don't want to use smart delimiters. Am I right Nadja? Yes I got something right. I'll note that down as a win. Let's look at something else. We have somewhere here a spreadsheet. So this is the kind of spreadsheet, in fact, it is the one I showed on the slides, where you have uniprots, you have a lot of different log ratios and so on. So let's try to go and get a network for this. So I just select all of these. Edit, copy. I jump into Cytoscape and I say file, import, network from public databases, string, protein query, homo sapiens. Yes. Paste in my whole list of Uniprot identifiers here. Maybe crank up the confidence a little bit. And it doesn't matter whether I have smart delimiters on or not because things are nicely separated on different lines and these are uniprot accession numbers they don't have any spaces or commas or funny things in it that this functionality could break. Click import I get to the disambiguation page there's one ID that could match to several different proteins in string. I just use the first one as the representative. It's a whole set of histones that are nearly identical. I fetch the network, I get a network. Now the next thing I can do is that now I would like to visualize data onto this network. So for that, I want to import table. So import table from file. I have the same Excel table as a tab-delimited file on the desktop on my computer. I'm just importing that one. You now see here basically the same spreadsheet shown inside Cytoscape and the important thing is here I have the UniProt accessions it's marked with a little key up here there's what's the key column for the network since we query it with the UniProt identifiers all of those land in a column called query term so these IDs over here accession numbers over here, are the ones that are in the query term column. So I want to match this key column against that key column. When I import, it may seem like nothing happened. But when we are scrolling all the way to the right, you will see that I now have a bunch of columns. Gene name, peptide, sequence, 5-minute, 10-minute, log ratios etc. So I now got all my data from this spreadsheet into Cytoscape and that means I can now go and say fill color. Let's just edit mappings. Let's say I want to color things based on the 10-minute log ratio and then I want to make it a continuous mapping. And you see it automatically detected that this had both positive and negative values in it. So you sort of want a two-ended gradient. This makes sense, but the colors are really faint. It's hard to see anything. You would typically want to go first, maybe pick a different palette with a bit stronger colors. You could go to, I don't know, this one. Boom, that's more strong. Still doesn't really fix it, right? Next thing we could do is to say change the min and max values. Say let's go, because it just auto scales, it's based on what are the biggest values in those columns. But usually you have some few proteins that are kind of outliers in terms of being very highly regulated compared to the rest. So now if we just go, say, minus three to plus three. OK. OK. Now we're getting somewhere, right? Now you have strongly colored proteins and you can see what's going up, what's going down. The next thing we could do is that we could say up here these little structure images that may look very nice inside the node. When you have a big network you can't really see them anyway and when you're trying to map data onto your network they're kind of disturbing the coloring so let's turn them off. So now things stand out even more clearly. We could try and... I mean the layout here is actually not too bad. We could run an Y-Files organic layout. It usually does a does a better job there you have it that gave you a nicer network Yeah, I think that was that. Very quickly with Omix Visualizer. So you might have noticed here that you have this problem. What if you mean merge it? Can you combine? Okay, there's a question on YouTube whether you can combine two sessions. Can you combine? Okay, there's a question on YouTube whether you can combine two sessions. You can't really combine sessions, but you can combine networks. So the networks have to be in the same session for you to be able to merge them. So let's just do a really quick thing. Of course, I can't merge these two networks in a meaningful way since one is a streptococcus network and one is a human network. But let's make another couple of quick human networks. Import network from public databases. Let's illustrate a disease query. A query for Alzheimer's. Alzheimer's disease. Give me top 100 proteins. 0.8. Give me a big network. 200 proteins. Something like that. And that gave me a network of Alzheimer's disease which is a ridiculous grammar you would expect then we can go import another disease database network from public databases Parkinson's disease let's do the same for that. So now I get a network for Alzheimer's disease, I get a network for Parkinson's disease, I could go merge these networks. Now one little thing if I want to be clever, I could go and say there's this score over here say there's this score over here called disease score and you have the same down in the Parkinson's it's also called disease score of course in one network it refers to Alzheimer's disease in the other network it refers to Parkinson's so that's a little bit confusing. You can rename them. So I'm going to rename this one. Let's just call it ADscore. I can go to the Parkinson's network. I can right-click this one, rename it, call it PDscore now I have these two networks I can take them and go tools this is where we combine networks tools merge networks I can take the union of the Parkinson's disease network and the Alzheimer's disease network Merge them. And now I have a big network. You see I had 200 here, 200 nodes in this network, 200 nodes in this network. The merged network contains 321 nodes because there's of course an overlap in terms of which proteins are involved in both the seasons. By the way you may notice now that it's a big network help where did all my engines go why is it not showing any engines it's because it tries to be fast so when the network is very big and I'm zoomed out like this, it doesn't show me everything. If I say view, graphics details, I tell it I want you to draw everything. You see now the labels are drawn, all the edges are drawn. Life is good. Now one of the tricky things here is that when you're merging networks like this, of course you're just taking the union of them. So I took the union of this network and this network. So if I have a protein that is only in Alzheimer's disease and I have another protein that is only in Parkinson's disease, the merged network will not have an edge between them because the edge wouldn't be in either of the two networks so it's not going to be in the merged network. There are ways of fixing that. It's a bit of a workaround. String, set a string network, string and then first I'm just going to change so you know how we set the Set a string network. String. And then first, I'm just going to change. So you know how we set the confidence when we are importing a network. You can change the confidence afterwards. So what I'm going to do is first crank it up all the way. We're never 100% sure about anything. So I just deleted all the edges. And now if I go lower the confidence the app will go back to the server and retrieve all of the interactions so I can now go in and retrieve interactions between them I can also go all the way down I can say let's give me the biggest radiculogram that I can possibly get here get me all the interactions that we have in string no matter how weak I can say let's give me the biggest radiculogram that I can possibly get here. Get me all the interactions that we have in string, no matter how weak they are. So that's how it looks when you do that. And as you can see, we can handle pretty big networks. You're looking at a network with more than 16,000 edges here. Of course, I can do a layout on that. It's not really going to make things look pretty. I mean there's your ridiculous grammar if you've ever seen one. This is where you want to use things like Cluster Maker. MCL clustering. There's a whole lot of clustering algorithms in Cluster Maker. MCL, by everyone's experience, just works amazingly well for string networks. Well, it works amazingly well in general, but in particular for string networks I would always use that one. Granularity. That's something that says how much we want to cut up the network. I am going to go something like 4 here, because this is really a big network I want to cut up. And then it can take into account that this is a weighted graph. That's really important. That's one of the nice things about MCL. It can handle that the edges are weighted. Tell it the one that matters is the score from the string database. And then I can say create a new cluster of network. And I don't want to restore the intercluster edges. So now it's going to run clustering figure out which proteins are in a cluster together make a new network where it has only the interactions within nodes from the same cluster and that didn't really manage to break apart the hairball. That's the danger of live demos. I should have picked an even higher granularity parameter on this. But you see, it did break it up a little bit. I'm not going, in the interest of time, I'm not going to play around and see how to get a better parameter for it. You could increase the parameter, break it up even more. You could also have filtered on confidence first. In any case, this is it. You might think, how can I, now I have these proteins, how can I select the ones that, hang on, show graphic details. How can I select all the ones that are involved in Alzheimer's disease from this? This gets us to the selection filters. So select, column filter. I can now select select based on is... Where are you? AD score. Now it's selected all the ones that have an AD score. So that's all the ones that were involved in Alzheimer's disease. And this is where you could then go and say set a bypass color make them red for example and when I then click outside to deselect them you'll see all the ones that had an alzheimer's score are now red how are we on time here exercises i am running a bit over time right no I'm not so that 10 minutes any questions any other stuff you would want me to demo in cytoscape Maybe one thing I should have shown you is that we're importing from the database a lot of different properties. You see all these columns called tissue? So those come from the tissue database. And that means that we automatically get tissue expression data in. So if you want to say this network of things that are supposedly involved in Alzheimer's disease, does it look like they're expressed in the nervous system? I could immediately go and say fill color, come on, edit, mapping. So I could say I want the fill color to depend on the tissue nervous system. And there we then have a confidence score that goes from 1 to 5 or 0 to 5 in terms of how sure we are. And now I just colored it based on the expression evidence. And as you see, the vast majority of the proteins got a very dark color meaning that we have strong evidence for expression in the nervous system for pretty much all the stuff involved in Alzheimer's disease. That's what you would expect both because nervous system is a very well studied tissue where we have good expression data but also because obviously proteins involved in Alzheimer's disease you would expect them to be expressed in the nervous system. Of course, one downside to doing this is that you can only show whether things are... You can only show one color, right? When I set the fill color here, I have to choose one tissue. What if I wanted to show multiple tissues? That's where we have some brand new functionality in the Omix Visualizer. So instead of importing a table from a file I can actually import a table into Omix Visualizer from the note table. So I can go and do crazy things like say let's show all the tissues. I'm not saying that's a good idea to do. Just to be clear here, you could select a few of them, but just to show what can be done, I can say import all the tissues into an Omics Visualizer table. I now have them in this other table here. I can now say I want to show that as a pie visualization on the network. Values, continuous mapping, yes. That sounds great. Draw it. And now what I get is that every single node is a little pie shaped heat map, if you will, where the different slices correspond to different tissues with their scores mapped onto them. You obviously should not do this with this many slices, but if you have two, three, four slices that could work. Terima kasih. Thank you. No more questions on YouTube. 1.5 kg kvartal Thank you. Can I show mappings or questions on YouTube? Can I show mapping of compounds to proteins like drug-protein interactions? Yes. Yes, I can. So actually, there's a few things you can do. So let me just go. I think I've messed up this session so bad by now that it would be good to start from a clean slate. There's a few things we can do. One is, by the way, there's also this query panel here where you can query. I always forget it myself. So I fetch a network here. That's an interesting feature. It is doing something a bit funny here. It seems like despite doing... That's a bug in Zytoscape. It seems like despite closing the session and starting a new session, I ended up actually having the bypass being remembered. You can right-click it once you've selected all of them and remove bypass. That's a bug report I should file. Anyway, I have a clean Alzheimer's network now. Let's just lay it out. By the way, when things are a bit too densely packed, layout, node tools, spread it out, super useful feature. Now in the node table I have a lot of information and somewhere in there we have information from illuminatingating the Drugable Genome. So Illuminating the Drugable Genome is a big NIH project that I'm involved in, and I'm involved in the so-called Knowledge Management Central, which is headed by Tudor Oprea at University of New Mexico. And there we have things called target development levels and target families so we can go in and color things based on the target development level which is think like is this something where we have an FDA approved drug is it something where we have a small molecule compound or is it something where it's just reasonably biologically classified but we don't have a compound yet or is it a so-called dark target which is a target where it's from a protein family where we are pretty sure that we should be able to make drugs against it but we know nothing about this protein. So let's take the target development level and this is a good chance to illustrate the discrete mapping. Now you see here you have tclin and tchem. So we can take the ones where we have FDA approved drugs, mark them by blue, take the ones where we have small molecule compounds, but nothing FDA approved, Color them orange. And there you have it. You have drop target information mapped onto the network. So that's one thing you can do. The other thing you can do is you can go use the stitch database. And you can go and do import network from public databases. Do a stitch protein compound query. Query for something like, I don't know, Gleevec, if I can spell, ask for some interaction partners of Gleevec, let's say give me 20. And now I got Imaginib, which is another name for Gleevec. I think this is the correct chemical name for it. Gleevec is a brand name for the drug. Dasatinib, which is a very closely related compound. If you see the structures over here, you will see that those two compounds are very similar. And you have then information about you have then information about the targets. Both the ones that are sort of the approved targets and the ones where there's information relating them to these. I think we are done. Last chance to ask questions. And I think this afternoon... I don't know. Should I keep the YouTube stream running? It's going to be a long one, but I guess YouTube can handle it. Or should we just go to purely run it as the Zoom thing in the afternoon? Will it consider off-target as well? Yes, it will. So when we're looking, so it depends on what you mean. So when you're doing the stitch query, absolutely. We're just looking at do we have binding information or things being mentioned a lot in the literature and so on. It's the same kind of functional associations as you have in a string. It's not just going to give you the approved intended targets. It's definitely going to give you the approved intended targets. It's definitely going to give you things like off-targets too. It's also going to give you things like cytochrome P450 enzymes that are involved in metabolizing the drug. The later missing question here isn't the label option under the style tab meant to's label font size over here. If I use, if I change the label font size to be 18, then they all become bigger. However, if you're not seeing it is probably because you're also not seeing the names being centered. It's probably because you are using string style labels, which are these ones with sort of a little shadow on them and offset relative to the center. If you're using plain Cytoscape labels, then these features will affect it. It can also be really useful over here. You see it's the column called display name from string that is being shown as the label. If you're importing some omics study and your Excel table has a column that contains the gene names that you prefer to use in your study, you can go and change the label from being the display name to be the gene names from the Excel table that you got in with the import table so that the name shown in the figure are consistent with what you show in all your other figures in your paper. Is there a way to map known PTMs No. Not from purely Cytoscape. So if you have your own PTM data and PTM data from elsewhere, you wouldn't have to gather that outside Cytoscape. You can, of course, import both of them into Cytoscape to compare them afterwards on the network, but you can't go in and do it purely in Cytoscape, I believe. Although there is the App Store. It's a massive, there are so many apps in there. So I'm not going to rule out that one of the hundreds of apps is capable of doing what you want to do. I'm just not aware of one that does it. So there was a question... let me see... there's a YouTube question about tips and tricks on how to deal with huge networks. Depends on what you mean by huge. So there's a couple of things with Cytoscape and huge networks. So one thing is of course you have networks and you have visualizations of them. If I import a massive network into Cytoscape, by default it's not going to draw the network because it says that it's too big. There's no point. If you really insist I can do it but it's just going to be slower and gobble up a lot of memory. So you're better off analyzing it without a visualization first. However, if you have truly big networks that are so big that it really doesn't make sense to try to draw them yet, if you know how to program I would highly advise that you do as much of the analysis as you can outside Cytoscape before getting them in. When I say huge networks I'm talking tens of thousands of nodes, hundreds of thousands to millions of edges. When you're looking at that Cytoscape can handle it if your computer is powerful enough. I just don't think it's a good way to work with massive networks. If we're talking big networks, you know, a thousand proteins, lots of nodes, and the challenge is not so much how do you get your computer to handle it, but how do you draw it. Then the trick is really things like clustering to cut it up. That's the key thing there, because you have this big, ridiculous gram and you basically have to chop it up in smaller modules for it to make sense. Absolutely, if you're loading massive networks into Cytoscape, it is going to take a lot of memory. I would not really want to run Cytoscape on a machine with less than 8 gigabytes of RAM working with kind of biggish networks, you would want to have Cytoscape on a machine with less than 8 gigabytes of RAM, working with kind of big-ish networks, you would want to have at least 16. So everything I did here, which you saw, was pretty snappy. That was run on a PC with 16 gigabytes of memory, and I was not using much of it. Right, it would be neat to have, I mean, that's something we could consider having a way of fetching data directly from PTM databases into Omics Visualizer. That could actually be a neat functionality to have. It depends on whether those databases have the necessary APIs to even allow us to do that. I haven't explored it. It would be super neat if one could do it. If you would have a way of automatically querying some of the major databases like Phosphosite Plus and whatever they are called. If you could query those and retrieve PTM data directly from them, that would be neat. For now, what you can do is if they have something like an Excel table you can download, you can download that and then just import it into Omix Visualizer from a file. Good. I think we'll stick with the timetable. We'll stop here. We have one hour lunch break and we'll be back on Zoom with the Cytoscape exercises. Since there won't be more lectures or anything like it in the afternoon, I will end the YouTube stream here. You're welcome to contact me if you have questions. If it's more Cytoscape questions I suggest ask on the Cytoscape help desk. We are monitoring that as well so you will very likely get an answer from us on it but it means that it gets shared with other people so instead of having everybody ask the same question and us write you private emails it's really better that you ask your questions and the answers get out in the open to help other people as well. So thanks, everyone. I'm happy to see so many people were here. So many people were on YouTube as well. And see you back, those of you on the course on zoom in an hour. Enjoy lunch Bye you you you you you you you you you you you
Network Biology: Introduction to STRING and Cytoscape
This lecture and software demo will cover the STRING database of protein interactions, related online database resources, the Cytoscape network analysis framework, and how the Cytoscape stringApp allows these to all be used together for omics data visualization.

This is part of the "Statistical Methods in Bioinformatics" Ph.D. course offered by University of Copenhagen.

0:00 Waiting screen
17:00 Pre-course chat
24:50 STRING lecture
59:21 Break
1:04:30 Text mining lecture
1:16:35 Questions and answers
1:29:35 Break
1:41:20 Hands-on STRING exercises
2:10:26 Cytoscape lecture
2:27:48 Questions, answers, and live demo
3:09:32 The end

Hands-on exercises are available at https://jensenlab.org/training/