I have a data set of the 2020 value of 15,000 unique objects. The value is right skewed. I have to draw a sample of 500 unique objects based on the 2020 value (range = $1-40,000). The present value of this sample (n=500) will be determined, and extrapolated to the broader population (n=14,500) to determine the value of these objects. The sample cannot be larger than 500. Given the circumstances, my thinking was that it would be best to segment the object dollar value of the entire population, and use this as the stratification variable to undertake to Neyman allocation. The goal being to obtain a sample that minimise the standard error.

Is this the best approach, or would simple random sampling be sufficient? what considerations should I be making when segmenting the cost variable?

  • $\begingroup$ The standard error of estimation of what? If you can already write out the values of the entire population, presumably there is no need to estimate the total value, so what are you estimating with your sample? $\endgroup$
    – Ben
    Commented Feb 15, 2023 at 3:50
  • $\begingroup$ What is a "2020 value"? Something to do with cricket scores? $\endgroup$ Commented Oct 30, 2023 at 5:44

1 Answer 1



If you think there's a strong relationship between the 2020 value and the current value, then it would be helpful to also use probability proportional to size (PPS) sampling. PPS sampling is commonly used by statistical agencies such as the U.S. Bureau of Labor Statistics, which for example samples businesses with probabilities proportional to a measure of size such as total employees or reported income.

PPS sampling can be used in addition to or instead of stratified sampling. So you can define strata, allocate sample sizes using Neyman allocation, and then sample objects within each stratum using probabilities proportional to your "measure of size", which in this case is the known 2020 dollar value of the object.

A simpler and probably more effective method is to use systematic sampling with probability proportional to size. Systematic sampling can be used to implicitly stratify your data, so that you don't have to define strata manually and conduct Neyman allocation. This blog post provides an explanation of how systematic sampling is used to "implicitly stratify" a population for the purpose of sampling:


Systematic sampling often tends to be more precise than regular stratified simple random sampling.


Chapter 6 of the classic sampling textbook "Sampling: Design and Analysis" by Sharon Lohr provides a good introduction to PPS sampling. Section 5.6 of "Sampling and Estimation from Finite Population" by Yves Tillé provides a more detailed mathematical treatment of the method of systematic PPS sampling. Page 205 of the textbook "Sampling Techniques" by William Cochran provides a more accessible introduction to systematic sampling and an intuitive explanation of why it often yields more precise estimates compared to stratified simple random sampling.

  • Lohr, Sharon L. 2022. Sampling: Design and Analysis. Third edition. Boca Raton: CRC Press.
  • Tillé, Yves. 2020. Sampling and Estimation from Finite Population. Hoboken, NJ: Wiley.
  • Cohcran, William. 1977. Sampling Techniques. Third Edition.


The 'sampling' package in R provides methods for PPS sampling, including the method of systematic PPS sampling.


The example R code below shows how to select a sample using systematic PPS sampling, and repeats this 10,000 times using simulation so that we can see how accurate the estimates are based on this sampling method.

In this example, we draw a sample of 500 libraries from a Census of 9,245 U.S. public libraries. We want to estimate the mean circulation among libraries in the U.S. So we define our sampling probabilities proportional to library size, where size is measured in terms of the total number of staff at a library. This makes sense since these two variables are fairly correlated (i.e., libraries with more staff also tend to have more books).

In the simulation output below, we can see that on average the estimate from our sample is no more than about 9% too small or too large.


# Load example data to use as a population ----
  data('library_census', package = 'svrep')

# Impute missing values ----
  library_census$TOTSTAFF <- ifelse(
    mean(library_census$TOTSTAFF, na.rm = TRUE),
  library_census$TOTCIR <- ifelse(
    mean(library_census$TOTCIR, na.rm = TRUE),

# Define sampling probabilities to be proportional to `TOTSTAFF`
  sampling_probs <- sampling::inclusionprobabilities(
    a = pmax(library_census$TOTSTAFF, 0.01),
    n = 500

# Repeatedly sample using systematic PPS ----
  estimates <- replicate(n = 10000, expr = {
    sample_indicators <- sampling::UPsystematic(
      pik = sampling_probs
    ) |> as.logical()
    selected_sample <- library_census[sample_indicators,]
    # Calculate weights to use for estimation
    selected_sample$WEIGHT <- 1/sampling_probs[sample_indicators]
    # Produce an estimate
    survey_estimate <- weighted.mean(
      x = selected_sample$TOTCIR,
      w = selected_sample$WEIGHT
  true_value <- mean(library_census$TOTCIR)
  relative_error <- abs(estimates - true_value)/true_value
#> [1] 0.0916447

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.