| two_stage_design | R Documentation |
two_stage_allocation() needs the cost c1 of visiting a primary unit,
which is not a constant: a tour shares its travel among the units it
visits, so the routed cost G(n) of visiting n units grows like
c0 + a n + b sqrt(n) (Beardwood, Halton and Hammersley). This function
measures G(n) by routing samples at a few sizes around the current
allocation, fits that curve, and re-allocates with the marginal cost
G'(n) in place of c1; with a non-linear cost the optimal number of
secondary units is Cochran's formula with the marginal, not the average,
cost per primary unit, as in Hansen, Hurwitz and Madow's travel-cost model.
Under a budget the number of primary units then
comes from the fitted curve, so the design spends the budget at its real
routed cost. It stops when n no longer changes (or after max_iter
rounds; a two-cycle stops with the better of the two designs).
two_stage_design(
frame,
depot,
cost_model,
m_secondary,
s2_between,
s2_within,
target_variance = NULL,
target_cv = NULL,
budget = NULL,
mean = NULL,
c1_start = NULL,
max_iter = 8,
size = NULL,
strata = NULL,
selection = c("lpm", "systematic", "srs"),
matrix = NULL,
method = c("haversine", "euclidean", "osrm"),
max_length = Inf,
max_stops = Inf,
n_rep = 5,
iterations = 100,
seed = 1
)
frame |
Data frame of units as in |
depot |
Name of the depot unit in |
cost_model |
A |
m_secondary |
Secondary units per primary unit in the population. |
s2_between, s2_within |
Variance among primary-unit means and within primary units. |
target_variance, target_cv, budget |
Exactly one: target variance of the
estimated total, target coefficient of variation (needs |
mean |
Population mean per secondary unit, for |
c1_start |
Starting value of the cost per primary unit (default: the per-visit cost plus the travel cost of the median trip from the depot). |
max_iter |
Maximum number of rounds. |
size |
Optional size column for probability-proportional-to-size selection. |
strata |
Optional stratum column, passed to |
selection |
Selection method of |
matrix |
Optional |
method |
Distance method of |
max_length, max_stops |
Route limits passed to |
n_rep |
Routed samples per sample size of the cost curve. |
iterations |
GRASP iterations per routing. |
seed |
Seed. |
Using the average cost G(n)/n instead takes too few primary units: in
the package's experiments the marginal rule was within 0.2 percent of the
cost of the best design found by exhaustive search, the average rule up to
3 percent above it, and a constant c1 guessed from depot distances 7 to
19 percent above.
The final fieldopt_two_stage allocation, with cost the routed
cost G(n) + c2 n m, and the extra elements c1 (the marginal cost
used), c1_average (G(n)/n), cost_curve (the routed points: n,
cost_mean, cost_sd), cost_coef (c0, a, b), history (one
row per round: round, c1, c1_average, n, m, cost,
variance_total) and converged.
Hansen, M. H., Hurwitz, W. N. and Madow, W. G. (1953). Sample
Survey Methods and Theory, Vol. II, Chapter 6, Section 11 (two-stage
optimum with a travel cost proportional to sqrt(m)). Cochran, W. G. (1977). Sampling
Techniques, 3rd ed., Section 10.6. Beardwood, J., Halton, J. H. and Hammersley, J. M. (1959). The
shortest path through many points. Proc. Cambridge Phil. Soc., 55,
299-327.
set.seed(2)
cells <- expand.grid(x = 1:12, y = 1:12)
cells$unit <- paste0("c", seq_len(nrow(cells)))
frame <- rbind(data.frame(unit = "depot", x = 6, y = 6), cells)
model <- field_cost_model(
per_travel = 3, per_unit = 40, per_interview = 20,
interviews_per_unit = 1
)
two_stage_design(frame, "depot", model,
m_secondary = 12, s2_between = 9, s2_within = 40,
target_cv = 0.05, mean = 10, method = "euclidean", n_rep = 2,
iterations = 20
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.