Какие существуют способы определить, насколько велики роды?

Я хочу посмотреть на роды в целом, на весь животный мир, чтобы определить диапазон размеров родов. Я изучил видовое богатство и генетическое разнообразие (попарное расстояние от наборов данных о последовательностях), но я ищу другие способы взглянуть на то, «насколько велик род?» с точки зрения биоразнообразия. Любые идеи или комментарии приветствуются!

Или даже методы разграничения видов, которые можно было бы использовать для родов?
Если вы стремитесь широко сравнивать роды в семействах и отрядах, вам следует учитывать, что таксономические уровни (например, род) используются очень по-разному в разных отрядах. Это означает, что таксономисты используют совершенно разные критерии для разграничения родов, поэтому различия, которые вы можете наблюдать, вероятно, будут вызваны этими разными определениями / критериями, а не «фактических» различий.

Ответы (2)

Принимая во внимание, что информация будет неполной (как и список существующих видов), вы можете использовать таксономическую базу данных NCBI . Например, проверка страницы рода Drosophila даст вам представление о его размере.

Чтобы получить более точные цифры, вы можете загрузить taxdump.tar.gzфайл с FTP-сервера NCBI ( ссылка ), извлечь его и запустить приведенный ниже скрипт для файла nodes.dmp(дамп информации базы данных).

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
my (%opts,%children,%ranks);
getopts('t:',\%opts) || do { print STDERR "Invalid option"; exit(1); };

my $taxid=$opts{t}||die "Need a taxid: -t\n";

sub getchildren{
    my $p=shift; ## The taxid of interest
        my $found=0; ## will be 0 unless we find a new kid
    ## For each child of this taxid
    foreach my $kid (keys%{$children{$p}}){
    	## Get the kid's kids
    	foreach my $gkid (keys%{$children{$kid}}){
    	    ## If this one hasn't been seen before
    	    unless (defined($children{$p}{$gkid})) {
    		## Add it to the list of this taxid's children
    		$children{$p}{$gkid}++;
    		## We found a new one, we need to test again. 
    		$found=1;
    	    }
    	}
        }
        ## If we found a new one, run again
        getchildren($p) if $found==1;
    }
    while (<>) {
        ## Remove trailing newlines
        chomp;
        ## Parse the current line
        my ($name,$parent,$rank,$rest)=split(/\s*\|\s*/);
        ## Save the current taxid as a child of its parent
        $children{$parent}{$name}++;
        ## Save its rank (species, genus, order etc)
        $ranks{$name}=$rank;
}

## Recursively get all children of this taxid
getchildren($taxid);

# Count only species as children
my @kids=grep($ranks{$_} eq "species", keys(%{$children{$taxid}}));

# Print out the results
printf "Genus %s has %s members\n", $taxid, scalar(@kids);

Предполагая, что вы находитесь в среде *nix или имеете к ней доступ, сохраните этот файл как genus.plи запустите его на nodes.dmp, указав таксид интересующего вас рода:

perl genus.pl -t 9257 nodes.dmp

Результат приведенного выше примера (Ornithorhynchus):

$ perl genus.pl -t 9257 nodes.dmp 
Genus 9257 has 1 members

Если мы попробуем на дрозофиле, то получим:

$ perl genus.pl -t 7215 nodes.dmp 
Genus 7215 has 738 members

Это действительно не самый эффективный способ сделать это (гораздо лучше сделать это в самом скрипте, но у меня нет времени на это сейчас), но если вы не против подождать, это даст вам числа для всех родов:

for i in $(grep -w genus nodes.dmp | awk '{print $1}'); do 
        perl genus.pl -t $i nodes.dmp; 
done

Размеры рода обычно измеряются количеством видов, поскольку конкретный вид, относящийся к одному таксономическому органу, не должен встречаться более чем в одном роде. Ознакомьтесь со Strand and Panova, 2014, где приведены некоторые данные о количестве видов, обнаруженных в каждом роде в среднем по нескольким тысячам родов из восьми основных таксономических групп.