Description Usage Arguments Value Details Warning Author(s) Examples
This function (attempts to) provide a maximally counterbalanced set of sequences from the full possible set of sequences.
1 2 | counterbalance(conds, N, toomany = 2, iter = 500,
pb = TRUE, latinSquareFunction = latinSquareDigram)
|
conds |
(vector) A of condition IDs or condition names |
N |
(numeric) The number of sequences desired |
toomany |
(numeric) If there are this many (or more) extra occurances of a given condition at a given order position by the time the function returns, then a warning is generated. |
iter |
(integer) The maximum number of iterations to
search for a set of permutations that does not fail the
|
latinSquareFunction |
(function) The function you
want to use to produce latin squares. The arguments and
returns for such a function should be like
|
pb |
(boolean) Indicate whether you want a progress bar. Having a progress bar may make solution finding slower. |
N x conds (matrix) of sequences (by rows)
When the number of requested sequences allows for a (multiple) set(s) of full permtations (a.k.a. t x t! design or full rectangular array) to be used, it is provided.
If the number of sequences requested does not allow for
a(nother) full set of permutations, then the remaining
sequences are selected from full digram balanced latin
squares. The assignment of conditions to values in those
latin squares are randomized between squares with the
constraint that no two squares can use the same set of
assignments. In addition, if iter is greater than 0, an
attempt is made to meet the constraint that no condition
is assigned to any given value in the latin square
toomany
(or more) times more than any other.
If the number of sequences requested does not allow for
a(nother) full (set of) digram balanced latin square(s),
the remaining requested sequences are randomly selected
from a latin square with an as yet used assignment of
condtions to values selected according to the constraints
used in the selection of full latin squares. In addition,
if iter
is greater than 0, an attempt is made to
meet the constraint that no condition is assigned to any
position toomany
(or more) times more than any
other. A warning message is generated if this constraint
is not met before the limit set in iter
is
reached.
The function will not work for large numbers of conditions because the ability to fit all possible permutations into memory is compromised!
Russell S. Pierce Russell.S.Pierce@gmail.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #counterbalance(LETTERS[1:4],12) #not run, time consuming
counterbalance(LETTERS[1:4],25)
#Sample code to check the maximum difference in the number of times a condition appears in a given position
checkmaxdiff <- function(mat) {
mat.levels <- as.character(sort(unique(as.vector(mat))))
mat.factor <- as.data.frame(apply(mat,2,as.character))
mat.factor <- lapply(mat.factor,factor,levels=mat.levels)
return(max(unlist(lapply(lapply(lapply(mat.factor,table),range),diff))))
}
## Example code not run
#Checking number of iter required
#combinations <- expand.grid(Ncond=3:10,N=1:300)
#combinations$howmany <- NA
#for (i in 1:nrow(combinations)){
# res <- counterbalance(1:combinations[i,"Ncond"],combinations[i,"N"],toomany=1,iter=1000)
# combinations[i,"howmany"] <- checkmaxdiff(res)
#}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.