This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Treeio And Bootstrap Values

Hi, I posted this on the bioperl mailing list but don't have an answer yet.

I want to change the bootstrap values in my phylogeny to some artificial Fst values I created earlier in the script. This subroutine seems to be doing the trick because Data::Dumper shows that the nodes and the tree have the new bootstraps. However, the resulting Newick tree does not display them. Can anyone help? Are there any bioperl nuances that I'm not aware of, in regards to bootstrap values? Thank you.

http://pastie.org/private/wtn0pqgjwrmpdswodok4mw#

sub printTree{
  my($fst,$tree,$settings)=@_;
  my $treeIn=new Bio::TreeIO(-file=>$tree)->next_tree;
  my $out=Bio::TreeIO->new(-format=>"newick");
  for my $node($treeIn->get_nodes){
    # get all descendents of the node and alpha-sort them
    my @d=sort{$a->id cmp $b->id} $node->each_Descendent;
    next if(!@d);
    # make a comma-separated key
    my $key; $key.=$_->id."," for(@d);
    $key=~s/,$//;
    # next if that key isn't in $fst: not all $fst combos were calculated.
    next if(!$$fst{$key});
    # apply the Fst with that key
    $node->bootstrap($$fst{$key});
  }

  $out->write_tree($treeIn);
}
bioperl fst

Or if there is a good way to apply Fst values as bootstrap values using a different mechanism than BioPerl, then I'll take that too (begrudgingly)

1 answer

Apparently I had to do $node->id($$fst{$key}) instead of ->bootstrap which is a really weird quirk to me. Hopefully that will help someone in the future.

Quoting Jason Stajich's response on the BioPerl mailing list:

Bootstrap is not a fixed newick field - best thing is to set the internal ID to the bootstrap value, that is where it is read from when writing a newick tee.

replace $node->bootstrap( ... ) with $node->id( ... );

Or use NHX format which has separate fields for bootstrap and ID.

There is also a connivence function which will copy IDs to the bootstrap field on the whole tree, (move_id_to_boostrap defined Bio::Tree::TreeFunctionsI) but there is not a corresponding reverse function that would move bootstrap to id at the moment, though it would be trivial to add this patch if you think it is useful enough.

Log in to answer this question.