1. Home
2. DCOMPOSITIONAL procedure

# DCOMPOSITIONAL procedure

Plots 3-part compositional data within a barycentric triangle (S.J. Clark).

### Options

`PRINT` = text What to print (`proportions`); default `*` Labels for the vertices of the triangle; default * uses the names of the corresponding variates given in the `DATA` pointer Title for the barycentric triangle; default `*` (i.e. no title) Whether to draw perpendiculars from each vertex to its opposite side (`yes`, `no`); default `no` Which high-resolution graphics window to use; default 3 Whether to clear the graphics screen before plotting (`clear`, `keep`); default `clea`

### Parameters

`DATA` = pointers Contains variates which form the three-part compositions Scale factor for adjusting size of triangle to represent a fourth category; default 1 Saves the two-dimensional x- and y-coordinates into the first and second elements of the pointer, respectively Pen number to draw points within the barycentric triangle; default 1

### Description

`DCOMPOSITIONAL` plots three-part compositional data within a barycentric triangle (ternary diagram). Four-part compositional data can be represented when there is only one experimental unit.

Compositional data consist of vectors of proportions (one for each experimental unit). Each vector contains a set of d non-negative elements, each element representing a proportion of some whole, with the sum of the elements constrained to unity (Aitchison 1986). A composition with d elements per vector is termed a d-part composition. `DCOMPOSITIONAL` produces a graphical display of three-part compositions within an equilateral triangle with unit height (termed a barycentric triangle or ternary diagram), using high-resolution graphics. The three parts of the compositions are input using the `DATA` parameter as a pointer containing three separate variates. The first, second and third variates in the pointer should correspond, respectively, to the parts required to be represented at the top, bottom left and bottom right vertices of the triangle. `DCOMPOSITIONAL` also allows for data to be input on an original scale, in which case they will be converted to proportions of the totals. Variates representing the two-dimensional x- and y-coordinates can be saved (in a pointer) using the `SAVECOORDINATES` parameter. The `PEN` parameter may be used to specify the pen to use to plot the points within the barycentric triangle; the default setting is pen 1 (for which the initial defaults are `METHOD=point` and `SYMBOLS=1`).

The `SCALE` parameter should be set only when there is a single experimental unit (i.e. the length of each variate in the `DATA` pointer is one) and is provided to aid representation of a four-part composition. Its value, which should equal the sum of three of the parts divided by the total of all four parts, is used to scale the overall size of the triangle; by default `SCALE` is 1. The three parts in the numerator should be input using the `DATA` parameter, and the point plotted within the scaled triangle therefore represents the relative proportions of the three parts amongst themselves. This option is most useful when plotting several triangles in different windows of the same frame.

The proportions can be printed by setting option `PRINT=proportions`. Labels for the vertices of the triangle can be specified by setting the `VERTEXLABELS` option to a text structure containing exactly three values: the first, second and third values should correspond, respectively, to the labels required at the top, bottom left and bottom right vertices of the triangle. By default the vertices will be labelled by the names of the corresponding variates given in the `DATA` pointer. The perpendiculars from each vertex to its opposite side will be drawn (using `LINESTYLE=2`) if the `PERPENDICULARS` option is set to yes; otherwise these lines are omitted. The graphical display can be controlled as usual using the `TITLE`, `WINDOW` and `SCREEN` options. By default triangles are produced in window 3, have no title, and are drawn on a new screen.

Options: `PRINT`, `VERTEXLABELS`, `TITLE`, `PERPENDICULARS`, `WINDOW`, `SCREEN`.

Parameters: `DATA`, `SCALE`, `SAVECOORDINATES`, `PEN`.

### Method

The percentages of the totals are computed within the procedure (when proportions are input this will therefore have no effect), and standard graphics commands are used to produce high-quality graphical output.

### Action with `RESTRICT`

If the variates input by the `DATA` parameter are restricted, only the selected points are plotted.

### Reference

Aitchison, J. (1986) The statistical Analysis of Compositional Data. Chapman & Hall, London.

Directive: `DPIE`.

Commands for: Graphics.

### Example

```CAPTION        'DCOMPOSITIONAL example',\
!t('Compositions (sand, silt, clay) of 39 sediment samples.',\
'Data set 5 from Aitchison (1986, The Statistical Analysis',\
'of Compositional Data. Chapman & Hall, London. Page 359',\
'and Figure 1.2 page 6).'); STYLE=meta,plain
VARIATE        [NVALUES=39] sand,silt,clay
77.5 71.9 50.7 52.2 70.0 66.5 43.1 53.4 15.5 31.7 65.7 70.4 17.4 10.6 38.2
10.8 18.4  4.6 15.6 31.9  9.5 17.1 10.5  4.8  2.6 11.4  6.7  6.9  4.0  7.4
4.8  4.5  6.6  6.7  7.4  6.0  6.3  2.5  2.0 :
19.5 24.9 36.1 40.9 26.5 32.2 55.3 36.8 54.4 41.5 27.8 29.0 53.6 69.8 43.1
52.7 50.7 47.4 50.4 45.1 53.5 48.0 55.4 54.7 45.2 52.7 46.9 49.7 44.9 51.6
49.5 48.5 52.1 47.3 45.6 48.9 53.8 48.0 47.8 :
3.0  3.2 13.2  6.6  3.5  1.3  1.6  9.8 30.1 26.8  6.5  0.6 29.0 19.6 18.7
36.5 30.9 48.0 34.0 23.0 37.0 34.9 34.1 41.0 52.2 35.9 46.4 43.4 51.1 40.9
45.7 47.0 41.3 45.9 46.9 45.1 39.9 49.5 50.2 :
POINTER        [NVALUES=3] part; VALUES=!p(sand,silt,clay)
FACTOR         [LEVELS=5; VALUES=13(1),11(2),5(3),6(4),4(5)] depth
TEXT           [VALUES=Sand,Silt,Clay] sediment
DCOMPOSITIONAL [PRINT=proportions; VERTEXLABELS=sediment; PERPENDICULARS=yes;\
TITLE='Sediment samples from an Arctic lake']\
part; SAVECOORDINATES=coord
PRINT          coord[]
PEN            10; SYMBOLS=depth; METHOD=point; COLOUR='black'
DCOMPOSITIONAL [TITLE='Sediment samples from an Arctic lake by depth']\
part; PEN=10
VARIATE        [NVALUES=1] data1[1...4]; VALUES=3,5,2,10
VARIATE        [NVALUES=1] data2[1...4]; VALUES=13,8,22,9
CALCULATE      total1 = VSUM(data1)
CALCULATE      total2 = VSUM(data2)
SCALAR         size1,size2
CALCULATE      size1 = VSUM(!p(data1[1...3])) / total1
CALCULATE      size2 = VSUM(!p(data2[1...3])) / total2
DCOMPOSITIONAL [WINDOW=5] !p(data1[1...3]); SCALE=size1
DCOMPOSITIONAL [WINDOW=6; SCREEN=keep] !p(data2[1...3]); SCALE=size2
```
Updated on March 8, 2019