Compact letter display is used to report results of pairwise comparisons among treatment means in comparative experiments, so that means with the same letter are not significantly different from one another according to some level of statistical significance (typically 5%).
The CLD in Julia is based on the insert-and-absorb algorithm by Piepho (2004). This code also includes the additional step of the sweeping algorithm to ensure there are no redundant letters.
Clone the repo by
https://github.com/cbsteh/CLD.git
The most important Julia source file is the piepho.jl, which contains the CLD algorithm. An example data file example3.csv is included as test.
In Piepho (2004) paper, there is Example 3 which comprised 8 treatments: T1 to T8, with five significant pairwise comparisons: T1 vs T7, T1 vs T8, T2 vs T4, T2 vs T5, and T3 vs T5. So, prepare the following CSV file, named example3.csv:
col1,col2,sig
T1,T2,FALSE
T1,T3,FALSE
T1,T4,FALSE
T1,T5,FALSE
T1,T6,FALSE
T1,T7,TRUE
T1,T8,TRUE
T2,T3,FALSE
T2,T4,TRUE
T2,T5,TRUE
T2,T6,FALSE
T2,T7,FALSE
T2,T8,FALSE
T3,T4,FALSE
T3,T5,TRUE
T3,T6,FALSE
T3,T7,FALSE
T3,T8,FALSE
T4,T5,FALSE
T4,T6,FALSE
T4,T7,FALSE
T4,T8,FALSE
T5,T6,FALSE
T5,T7,FALSE
T5,T8,FALSE
T6,T7,FALSE
T6,T8,FALSE
T7,T8,FALSE
where col1 and col2 represent the two columns for every pairwise comparison, and sig is either TRUE (for significant) or FALSE (for non-siginficant). The boolean for sig is case-insensitive, e.g., true and false are valid values, too.
Then, read the CSV file as a DataFrame:
using CLD
using CSV, DataFrame
df = read("data/example3.csv", DataFrame)
Finally, pass the df DataFrame into cld_letters function:
cld_df = cld_letters(df, axb=:trt)
8×2 DataFrame
Row │ trt LETTERS
│ String String
─────┼─────────────────
1 │ T1 abc
2 │ T2 cd
3 │ T3 ad
4 │ T4 ae
5 │ T5 be
6 │ T6 ade
7 │ T7 def
8 │ T8 def
You can sort cld_df based on LETTERS column to arrange the treatments based on the letters as:
sort(cld_df, :LETTERS)
8×2 DataFrame
Row │ trt LETTERS
│ String String
─────┼─────────────────
1 │ T1 abc
2 │ T3 ad
3 │ T6 ade
4 │ T4 ae
5 │ T5 be
6 │ T2 cd
7 │ T7 def
8 │ T8 def
cld_letters(df::AbstractDataFrame; col1::Symbol, col2::Symbol, sig::Symbol, axb::Symbol)
where:
col1 and col2 are the names of the left and right parts of the pair (defaults: :col1 and col2)
sig is the name of the significant column (default: :sig)
axb is the name of the treatment column for the CLD DataFrame (default: :AxB).