UniRef90 Search Result

I found that some sequences in UniRef90 database are tens of thousands amino acids long. I read UniProt official documentation and figured out that these sequences are the representative sequences of clustered known protein sequences. That is, they are sequences of real proteins that do exist in nature.

I know that some giant proteins like Titin have the length of tens of thousands a.a. However, when I visualized the lengths of protein sequences in uniref90.fasta, I got the plot below.

Distribution of Protein Sequence Lengths

It seems that at least thousand of proteins are longer that 10,000 a.a. and average protein sequence length is around 5,000. So far, I have thought that proteins are hundreds a.a. long. Do natural proteins are usually composed of thousands of a.a?

Thank you.


2 Answers 2


This is a good question, but there are a few things going on. There is a subtlety about what you're asking: do you want to know the average length of a protein sampled from a cell, or the average length of a sequence sampled from this specific database? Because the plot you use relates to the second question, while you seem to want to know the first one.

The whole Uniref is also probably not the best set of sequences to test this with. The clustering would tend to amplify the proportion of outliers caused by missing stops, skipped exons, pseudogenes, or duplications, since they will form their own cluster. Also, each isoform can form its own cluster. From a quick look at the first ~100 Uniref90 sequences, maybe 80 of them are annotated as titin isoforms. Plotting and comparing the distributions of Uniref50, 90, and 100 might be a good exercise. At the very least, median is better than mean here.

This is a good relevant paper: Protein length distribution is remarkably uniform across the tree of life

Also, this from the always-excellent bionumbers is good: https://book.bionumbers.org/how-big-is-the-average-protein/

  • $\begingroup$ Now I understand. The plot I made shows only the representative sequences of UniRef90 clusters. It doesn't consider about the other members in each cluster. Therefore the average length must differ from that of proteins sampled from a cell, which considers any sequences whether it is representative sequence or not. Also, such representative sequences contain may outliers due to the reasons you've mentioned. I will analyze the data again keeping your advice in mind. Thank you so much. $\endgroup$
    – dearname
    Commented Jan 11 at 19:08

There's something odd about your numbers:

I took a quick look at the database and just used the (LENGTH:[X TO Y]) command to filter by lengths. This gives you numbers of entries for each size bracket (see numbers on left of image under the Clusters heading).

clusters entry size

These are the numbers for clusters I get in the UniRef90 database (Yes, there's some overlap in the brackets 'cause I used 0-1000, 1000-2000 etc, but it doesn't matter in the final analysis, all it did was save some typing time for me):

Size bracket Number of clusters
0 - 1K 173,209,693
1K - 2K 5,303,314
2K - 3K 658,504
3K - 4K 161,999
4K - 5K 80,517
5K - 6K 32,742
6K - 7K 12,207
7K - 8K 7,076
8K - 9K 4,995
9K - 10K 2,616
10K - 11K 1,603
11K - 12K 900
12K - 13K 792
13K - 14K 476
14K - 15K 519
15K - 50K 3902

From this you can see that the first two brackets (even the first one alone) are vastly more than all the others summed together, which means that there's no way that the average cluster can be 5000 aa in length

This tells me that you have some real problems in your analysis or in your data, but what that problem might be, I don't know. I thought it might have been that you had substituted size for length, but even there cluster size of 5K-6K is only in the 400 range and vastly outweighed by the 1-1000 clusters.

Rest assured, the average protein size is between 50 and 2000 amino acids in length (see 4th para in link).

Edited to add:

I did some analysis of my own using R and ggplot. I downloaded a dataset specifying 90% identity and lengths to be between 2000 and 8000, to keep the file smallish. This makes it a fairly small dataset of 952,569 entries and using the following code (yes, poor coding style, but it's literally a 4 line code including loading the file and library (left out here), so don't need anything fancy). The binwidth of 200 means that the counts for each category are "binned" in lengths of 200 aa, meaning there are 5 bars per 1000 aa.

plot <- ggplot(file, mapping = aes(x = Length))
plot + geom_histogram(binwidth = 200)

2000-8000 aa

This shows me that there is a peak number of entries between 2000 and 3000, not the ~5000-6000 peak in yours (I note that your bins don't line up with nice groupings, so it makes it hard to work out what they are, but something like 910 aa per bin I think, so it should be about 5400 at the peak). This peak has about 200,000 entries, which is massive compared to the ~45,000 peak in your plot, and if you pool my numbers into brackets of ~1000, you get an even more telling picture:

bins of 1000

These plots, together with the numbers in my table above, tells me that there is a problem with your dataset or the code you used to generate the plot, probably the data table. You might wish to explore your data more - look at the number of entries in the table. I think, from your plot, that you have vastly too few entries to be a full UniRef90 dataset, as they should total somewhere close to 180 million not the (very rough) <200,000 entries you have.

  • $\begingroup$ Thank you for your answer. I downloaded UniRef90 dataset again from the official UniProt website but got the same result. I think there must be some errors in my own Python script which I used to analyze the data. So currently I'm trying to debug it. (It might take some time since I have bad coding skills.) And thanks to you, I became aware of the existence of Uniprot query syntax and was able to learn it. Thank you again, I’m really grateful for your help. $\endgroup$
    – dearname
    Commented Jan 11 at 17:34
  • $\begingroup$ @dearname You are welcome. If you think either of the answers is the correct one, then you should hit the checkmark below the voting arrows to tell people that it is the accepted answer. Stick at the programming, it's a steep learning curve, but is a very rewarding and looks great on your CV. Data science is hard, but it always pays to do some exploratory things (like looking at number of entries, quick distribution plots etc) before jumping in to a full analysis. $\endgroup$
    – bob1
    Commented Jan 11 at 19:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .