Ошибка при построении дерева с несколькими белками с использованием пакета деревьев

Я использую пакет trees найденный здесь, by @jbaums и объяснил в этот пост.

Мои данные следующие:

дерево составлено ствол

    Trunk
[1] 13.60415

и ветки

Tree
   TreeBranchLength TreeBranchID
1         10.004269            1
2          7.994269            2
3          9.028834           11
4         10.817401           12
5          8.551311          111
6         10.599798          112
7         11.073243          121
8         13.367392          122
9          9.625431         1111
10        10.793569         1112
11         9.896499        11121
12         8.687741        11122
13         7.791180         1211
14        12.506105         1212
15         6.768478         1221
16        10.441796         1222
17        10.751892         1121
18         9.458651         1122
19        10.768509        11221
20        10.150673        11222
21        12.377448       111211
22        12.235136       111212
23         9.074079        11211
24         9.996334        11212
25         9.807019       112221
26        10.895809       112222
27         6.741274      1122211
28        15.841272      1122212
29         5.753920     11222111
30         8.846389     11222112
31        11.925961       112111
32         9.780776       112112
33         8.207965        12221
34        10.079375        12222

50 популяции белков -

Populations
   PopulationPositionOnBranch PopulationBranchID ID
1                  10.6321655             112111  1
2                   1.0644897                  1  2
3                   3.9315473                  1  3
4                   1.0310244                  0  4
5                   9.1768846                  0  5
6                  13.4267181                  0  6
7                   7.9461528                  0  7
8                   6.0533401                121  8
9                   2.1227425                121  9
10                  1.8256787                121 10
11                  4.7332588           11222112 11
12                  4.4837432           11222112 12
13                  4.6200834           11222112 13
14                  2.5622276               1221 14
15                  1.2446683               1221 15
16                  7.0674052                111 16
17                  1.3854674                111 17
18                  4.8735635                111 18
19                  9.5007998               1222 19
20                  6.6373468               1222 20
21                 12.6757728                122 21
22                  4.2685465                122 22
23                  3.9806540                  2 23
24                  3.1025403                  2 24
25                  3.9119065              11122 25
26                  1.5527653              11122 26
27                  1.6687957              11122 27
28                  8.0697456               1122 28
29                  6.7871391               1122 29
30                  9.8050713             111212 30
31                  8.5226920             111212 31
32                  3.6113379             111212 32
33                  7.3184965             111211 33
34                  8.6142984             111211 34
35                  1.3550870               1211 35
36                  8.3650639                 12 36
37                  4.6411446             112112 37
38                  3.2985541             112112 38
39                 12.2344148               1212 39
40                  9.0290776               1212 40
41                  1.3900249               1121 41
42                  0.9261425            1122212 42
43                 15.2522199            1122212 43
44                  4.0253771              12222 44
45                  8.7507678              11222 45
46                  4.6289841            1122211 46
47                  9.1799522                112 47
48                  5.1293838              12221 48
49                  1.1543080              12221 49
50                 10.1014837             112222 50

код для создания графика

        g <- germinate(list(trunk.height=Trunk, 
                   branches=Tree$TreeBranchID,
                   lengths=Tree$TreeBranchLength), 
              left='1', right='2', angle=30))

    xy <- squirrels(g, Populations$PopulationBranchID, pos=Populations$PopulationPositionOnBranch, 
               left='1', right='2', pch=21, bg='white', cex=3, lwd=2)
    text(xy$x, xy$y, labels=seq_len(nrow(xy)), font=1)

который производит

The tree produced

Как вы можете видеть на сюжете ниже население 43 (синяя стрелка) находится вне дерева. Кажется, что длина ветвей на графике не соответствует данным. Например, ветвь (левая зеленая стрелка), на которой расположены популяции 38 и 37, длиннее той, где население 43 (правая зеленая стрелка), это не так в данных. enter image description here Что я делаю неправильно? Правильно ли я понял, как использовать trees?

Ответ 1

При изучении функции прорастания мне кажется, что значения Tree, которые вы передаете ему, нужно сортировать по полю TreeBranchId в порядке возрастания.

BranchID: 1122212, где вы разместили 43, не является фактической ветвью 1122212. Из-за порядка, в котором вы загрузили значения в Дереве, функция каким-то образом испортила местоположение ветки.

Мне было любопытно узнать, увеличиваю ли длину ID Branch: 1122212, изменит ли она ветку, где находится 43, и угадайте, что? это не так. Филиал, который фактически показал увеличение длины, был ветвью, где вы разместили 37 и 38.

Итак, этот намек указал, что что-то не так с функцией прорастания. При дальнейшей отладке я смог заставить его работать, используя приведенный ниже код.

Tree<-read.csv("treeBranch.csv")
Tree<-Tree[order(Tree$TreeBranchID),] 
g <- germinate(list(trunk.height=15, 
                branches=Tree$TreeBranchID,
                lengths=Tree$TreeBranchLength), 
               left='1', right='2', angle=30)

xy <- squirrels(g, Populations$PopulationBranchID,pos=Populations$PopulationPositionOnBranch, 
            left='1', right='2', pch=21, bg='white', cex=3, lwd=2)
text(xy$x, xy$y, labels=seq_len(nrow(xy)), font=1)