Bodega Workshop alum Christoph Hiedtke has the following question regarding excluded character sets when setting up partitions in MrBayes. With his permission I’m posting it here. I’ve run into this exact problem before and I’m sure many others have also.
Hey gang, how is everybody doing?
I am going crazy over what initially seemed to be a rather trivial MrBayes operation. Initially I had set up a MrBayes file dividing my alignment into 3 partitions and it executes perfectly. I then wanted re-run the same file but this time excluding one partition from my analysis with the designated “exclude” command, but for some reason I am getting an error I cannot get around. Does anyone know whats going on?
Here is part of my command block:
begin MrBayes; charset p1 = 1-370 371-844 845-1124 2159-2395 3018-3328; charset p2 = 1125-1404 1685-1921 1922-2158 2396-2706 2707-3017; charset p3 = 1405-1684; partition parts = 3: p1, p2, p3; exclude p3; set partition = parts; unlink statefreq=(all) revmat=(all) shape=(all) pinvar=(all); prset applyto=(all) ratepr=variable; end;
MrBayes gets stuck on the “set partition = parts” line with the following error:
Defining charset called p1 Defining charset called p2 Defining charset called p3 Defining partition called parts Excluding character(s) Setting parts as the partition, dividing characters into 3 parts. Setting model defaults Seed (for generating default start values) = 1507443219 You must have at least one site in a partition. Partition 3 has 0 site patterns. Error when setting parameter “Partition” (2)
Ok, before getting to the answer, I’ll just point out that the obvious alternative approach of excluding p3 and THEN defining a partition that contains only the p1 and p2 character sets will also give an error for not including all sites into one of the partitions. All sites need to be assigned to a partition and all partitions need to have at least one site, so how can we get away with excluding anything?
The solution is to change the command block as follows:
begin MrBayes; charset p1 = 1-370 371-844 845-1124 2159-2395 3018-3328; charset p2 = 1125-1404 1685-1921 1922-2158 2396-2706 2707-3017; charset p3 = 1405-1684; partition parts = 2: p1, p2 p3; exclude p3; set partition = parts unlink statefreq=(all) revmat=(all) shape=(all) pinvar=(all); prset applyto=(all) ratepr=variable; end;
We’ve defined 2 partitions (instead of 3) assigning the ‘extra’ character set to the second partition (note the missing comma). Now we have all sites assigned to a partition and no partitions are empty, so we’re free to exclude the character set.