Trial Design Options
Source:vignettes/articles/V1-trial-design-options.Rmd
V1-trial-design-options.Rmd
The ofpetrial
package offers various trial design types.
This vignette provides examples of availabl design types. Let’s first
prepare experiment plots to which we assign rates using various trial
design options.
library(ofpetrial)
n_plot_info <-
prep_plot(
input_name = "NH3",
unit_system = "imperial",
machine_width = 30,
section_num = 1,
harvester_width = 20,
headland_length = 30,
side_length = 60
)
exp_data <-
make_exp_plots(
input_plot_info = n_plot_info,
boundary_data = system.file("extdata", "boundary-simple1.shp", package = "ofpetrial"),
abline_data = system.file("extdata", "ab-line-simple1.shp", package = "ofpetrial"),
abline_type = "free"
)
viz(exp_data, type = "layout")
We will be assigning rates to the experimental plots using various trial design types below.
Latin Square (“ls”)
By default, here is what design_type = "ls"
produces.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 140, 180, 220, 260),
design_type = "ls"
)
td_ls_d <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_ls_d)
Note that the trial design produced by assign_rates()
is
randomly picked from a pool of candidate Latin Square designs. If you
would like to reproduce the same trial design later, you can use
set.seed()
.
set.seed(89934)
td_ls_d <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_ls_d)
However, you can customize the spatial pattern of input rate when
design_type = "ls"
using the rank_seq_ws
and
rank_seq_as
options. To do so, it is important to
understand how plot_id
and strip_id
are
assigned to each of the plots. Here are their maps.
As you can see, plot_id
is the unique numeric identifier
assigned to each of the plots within a strip. So, there
are multiple plots with the same plot_id
values, but a
combination of strip_id
and plot_id
uniquely
identifies a plot.
The rank_seq_ws
option specifies the order of rate
rankings to be repetead within a strip (this is why
_ws
at the end of the function). Suppose you have
rank_seq_ws = c(5, 4, 3, 2, 1)
. 5
refers to
the 5th-ranked (highest) rate, which is 260 because we have
rates = c(100, 140, 180, 220, 260)
above. 1
refers to the first-ranked (lowest) rate, which is 100. Rates are
assigned in this order to the plots within a strip. The
rank_seq_as
option specifies the order of the rate rankings
of the very first plot of each strip
across all the strips. So, for example, if
rank_seq_as = c(1, 4, 3, 2, 5)
, then the first plot
(plot_id == 1
) of the first strip
(strip_id == 1
) will be assigned rate rank of 1. The first
plot of 5th strip (strip_id == 5
) will be assigned rate
rank of 5. This sequence will be repeated until the first plot of all
the strips are assigned a rate rank. Now, for a given strip, rate ranks
specified by rank_seq_ws
will be repeated starting
from the rate rank of the first plot. For example, the first
plot of the 3rd strip has a rate rank of 3 (so, 180). This means that
the code will go over the rest of the rate ranks in
rank_seq_ws
(2 and 1), and then go back to the beginning of
rank_seq_ws
, which is 5. So, for the third strip, the rate
rank of its plots look like this.
rank_seq_ws <- c(5, 4, 3, 2, 1)
data.frame(
plot_id = 1:10,
rate_rank = c(3, 2, 1, rank_seq_ws, rank_seq_ws[1:2])
)
#> plot_id rate_rank
#> 1 1 3
#> 2 2 2
#> 3 3 1
#> 4 4 5
#> 5 5 4
#> 6 6 3
#> 7 7 2
#> 8 8 1
#> 9 9 5
#> 10 10 4
Let’s try few examples.
Strip trial (“str”)
You can design a strip trial using design_type = "str"
.
By default, it repeates a sequence of rates like below.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 160, 220, 280),
design_type = "str",
)
td_strip <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_strip, type = "rates")
Just like the “ls” option, you can specify the spatial pattern of
strip rates using the rank_seq_as
option. The code below
repeats 100 (rank 1), 280 (rank 4), 220 (rank 3), and 160 (rank 2).
Since the strip trial has a single rate per strip,
rank_seq_ws
is not available unlike
design_type = "ls"
.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 160, 220, 280),
rank_seq_as = c(1, 4, 3, 2),
design_type = "str",
)
td_strip <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_strip, type = "rates")
For the strip trial, you can specify the full sequence unlike the other design options. We have a total of 19 strips in this experiment.
#--- total number of strips ---#
max(exp_data$exp_plots[[1]]$strip_id)
#> [1] 19
Let’s provide a vector of length 19 to rank_seq_as
.
n_rate_info$rank_seq_as <- list(c(1, 4, 3, 2, 2, 3, 4, 1, 3, 2, 1, 4, 2, 3, 1, 4, 4, 2, 3))
td_strip <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_strip, type = "rates")
Randomized Strip (“rstr”)
You can create a randomized strip design using the “rstr” option as follows.
set.seed(329544)
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 160, 220, 280),
design_type = "rstr",
)
td_randomized_strip <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_randomized_strip, type = "rates")
This design is not completely randomized. Rather it is randomized inside a block of strips. Here, a block consists of four consecutive strips because four distinct rates were provided by the user.
Randomized Block (“rb”)
You can crete a randomized block design using the "rb"
option.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 140, 180, 220, 260),
design_type = "rb",
)
td_rb <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_rb, type = "rates")
When design_type = "rb"
, blocks are created internally
when assign_rates()
is run. Here is what blocks look
like.
add_blocks(td_rb) %>% viz(type = "block_id")
Since there are five distinctive rates, each block consists of five by five plots. In each of the block, the five rates are randomly assigned in a way that each of the rates appear exactly five times.
Extra Jump-conscious Alternate (“ejca”)
This design alternate high-rate strip and low-rate strip, thus avoiding sudden changes in input rates so that machines can handle them. EJCA is more machine friendly than JCLS.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 140, 180, 220, 260, 300),
design_type = "ejca",
)
td_ejca <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_ejca, type = "rates")
Sparse (“sparse”)
Sparse design with the "sparse"
option generate a trial
design so that every other experimental plot has the status-quo rate
(business-as-usual rate). This can potentially alleviate yield loss
associated with lower rates compared to other designs as lower rates
happen less frequently.
n_rate_info <-
prep_rate(
plot_info = n_plot_info,
gc_rate = 180,
unit = "lb",
rates = c(100, 140, 180, 220, 260, 300),
design_type = "sparse",
)
td_sparse <-
assign_rates(
exp_data = exp_data,
rate_info = n_rate_info
)
viz(td_sparse, type = "rates")