minControlsCap {optmatch} | R Documentation |
Functions to find the largest value of min.controls, or the smallest value of max.controls, for which a full matching problem is feasible. These are determined by constraints embedded in the matching problem's distance matrix.
minControlsCap(distance, max.controls = NULL, subclass.indices = NULL) maxControlsCap(distance, min.controls = NULL, subclass.indices = NULL)
distance |
Either a matrix of nonegative, numeric discrepancies,
or a list of such matrices. (See fullmatch for details.) |
max.controls |
Optionally, set limits on the maximum number of
controls per matched set. (Only makes sense for minControlsCap .) |
min.controls |
Optionally, set limits on the minimum number of
controls per matched set. (Only makes sense for maxControlsCap .) |
subclass.indices |
This argument no longer supported (nor necessary). |
The function works by repeated application of full matching, so on large problems it can be time-consuming.
For minControlsCap
, strictest.feasible.min.controls
and
given.max.controls
. For maxControlsCap
,
given.min.controls
and strictest.feasible.max.controls
.
strictest.feasible.min.controls |
The largest values of
the fullmatch argument min.controls that yield
a full match; |
given.max.controls |
The max.controls argument given to minControlsCap
or, if none was given, a vector of Inf s. |
given.min.controls |
The min.controls argument given to maxControlsCap
or, if none was given, a vector of 0 s; |
strictest.feasible.max.controls |
The smallest values of
the fullmatch argument max.controls that yield
a full match. |
Essentially this is just a line search. I've done several things to speed it up, but not everything that might be done. At present, not very thoroughly tested either. Comments appreciated (but not likely to generate immediate action on my part...).
Ben B. Hansen
Hansen, B.B. and S. Olsen Klopfer (2006), ‘Optimal full matching and related designs via network flows’, Journal of Computational and Graphical Statistics 15, 609–627.
##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. plantdist <- matrix(nrow=7, ncol=19,byrow=TRUE,data=c( 28, 0, 3,22,14,30,17,28,26,28,20,22,23,26,21,18,34,40,28, 24, 3, 0,22,10,27,14,26,24,24,16,19,20,23,18,16,31,37,25, 10,18,14,18, 4,12, 6,11, 9,10,14,12, 6,14,22,10,16,22,28, 7,28,24, 8,14, 2,10, 6,12, 0,24,22, 4,24,32,20,18,16,38, 17,20,16,32,18,26,20,18,12,24, 0, 2,20, 6, 8, 4,14,20,14, 20,31,28,35,20,29,22,20,14,26,12, 9,22, 5,15,12, 9,11,12, 14,32,29,30,18,24,17,16,10,22,12,10,17, 6,16,14, 4, 8,17), dimnames=list(c("A","B","C","D","E","F","G"), c("H","I","J","K","L","M","N","O","P","Q","R", "S","T","U","V","W","X","Y","Z"))) (tmn <- minControlsCap(plantdist)$strictest) maxControlsCap(plantdist, min=tmn) splitdist <- list(one=plantdist[1:3, 1:9], two=plantdist[4:7, 10:19]) (tmn <- minControlsCap(splitdist)$strictest) maxControlsCap(splitdist, min=tmn)