NRMSampling: Comprehensive Framework for Sampling Design and Estimation in Natural Resource Management

Sadikul Islam

2026-04-22

1. Introduction

Natural Resource Management (NRM) research requires robust sampling frameworks to ensure reliable estimation of environmental variables such as biomass, soil loss, and carbon stocks. Challenges include spatial heterogeneity, accessibility constraints, and integration with geospatial data.

The NRMSampling package provides a unified and extensible framework for:


2. Data Generation

sample_nrm <- data.frame(
  plot_id   = 1:100,
  biomass   = round(runif(100, 15, 65), 1),
  soil_loss = round(runif(100, 0, 12), 2),
  rainfall  = round(runif(100, 800, 1500)),
  slope     = round(runif(100, 1, 35), 1),
  strata    = sample(c("forest", "grassland", "agriculture"), 100, replace = TRUE),
  cluster   = sample(1:10, 100, replace = TRUE),
  size      = round(runif(100, 0.5, 5.0), 2)
)
head(sample_nrm)
#>   plot_id biomass soil_loss rainfall slope      strata cluster size
#> 1       1    29.4      7.20      967  27.7 agriculture       2 2.93
#> 2       2    54.4      3.99     1474   1.3 agriculture       6 1.13
#> 3       3    35.4      5.86     1221  27.5 agriculture      10 1.78
#> 4       4    59.2     11.45     1161  25.8      forest      10 3.12
#> 5       5    62.0      5.79     1082  22.4      forest       9 1.24
#> 6       6    17.3     10.68     1416  17.4 agriculture       7 0.93

3. Probability Sampling Designs

3.1 Simple Random Sampling

srs <- srs_sample(sample_nrm, n = 25)
head(srs)
#>   plot_id biomass soil_loss rainfall slope      strata cluster size .sample_id
#> 1      45    22.6     10.11     1018  17.5   grassland      10 4.12         45
#> 2      76    26.0      7.42     1315  33.8 agriculture       2 2.36         76
#> 3      25    47.8      4.43      837   4.5      forest       4 0.53         25
#> 4      91    21.5      3.29     1008  34.2   grassland       6 0.57         91
#> 5      13    48.9      0.73      951  25.3   grassland       3 2.01         13
#> 6      84    54.4      3.18      957  27.2 agriculture       4 1.63         84

3.2 Stratified Sampling

st <- stratified_sample(sample_nrm, strata_var = "strata", n_per_stratum = 8)
table(st$strata)
#> 
#> agriculture      forest   grassland 
#>           8           8           8

3.3 Cluster Sampling

cl <- cluster_sample(sample_nrm, cluster_var = "cluster", n_clusters = 4)
length(unique(cl$cluster))
#> [1] 4

3.4 Probability Proportional to Size (PPS)

pps <- pps_sample(sample_nrm, size_var = "size", n = 20)
summary(pps$.inclusion_prob)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>  0.1065  0.2064  0.2512  0.2557  0.3375  0.3735

4. Non-Probability Sampling

conv <- convenience_sample(sample_nrm, n = 10)

purp <- purposive_sample(sample_nrm, "biomass > 45 & strata == 'forest'")

quot <- quota_sample(sample_nrm, strata_var = "strata", quota = 6)
table(quot$strata)
#> 
#> agriculture      forest   grassland 
#>           6           6           6

5. Estimation Methods

5.1 Mean and Total Estimation

N <- nrow(sample_nrm)
srs_est <- srs_sample(sample_nrm, n = 30)

estimate_mean(srs_est$biomass)
#> [1] 42.51333
estimate_total(srs_est$biomass, N = N)
#> [1] 4251.333
estimate_se(srs_est$biomass, N = N)
#> [1] 2.473553

5.2 Ratio and Regression Estimators

X_total <- sum(sample_nrm$size)
X_mean  <- mean(sample_nrm$size)

ratio_estimator(srs_est$biomass, srs_est$size, X_total)
#> [1] 4838.863
regression_estimator(srs_est$biomass, srs_est$size, X_mean)
#>        x 
#> 41.75855

5.3 Horvitz–Thompson Estimator

ht_estimator(pps$biomass, pps$.inclusion_prob)
#> [1] 3146.885
ht_variance(pps$biomass, pps$.inclusion_prob)
#> [1] 219171.7

5.4 Stratified Estimator

N_h <- table(sample_nrm$strata)
stratified_estimator(st$biomass, st$strata, N_h)
#> [1] 43.952

6. NRM-Specific Applications

6.1 Biomass and Carbon Estimation

bio <- biomass_estimate(srs_est, biomass_var = "biomass", area = 1500)
bio$total_biomass
#> [1] 63770

carbon_stock_estimate(srs_est, biomass_var = "biomass", area = 1500)
#> $total_biomass
#> [1] 63770
#> 
#> $total_carbon
#> [1] 29971.9
#> 
#> $carbon_fraction
#> [1] 0.47
#> 
#> $n
#> [1] 30

6.2 Soil Loss Estimation

sl <- soil_loss_estimate(srs_est, loss_var = "soil_loss", area = 1500)
sl$total_loss
#> [1] 10328.5

7. Sampling Efficiency

srs1 <- srs_sample(sample_nrm, n = 20)
srs2 <- srs_sample(sample_nrm, n = 40)

sampling_efficiency(srs1$biomass, srs2$biomass, N = 100)
#>         var_design1         var_design2 relative_efficiency 
#>            6.804753            3.005700            2.263900

8. Spatial Sampling (Optional)

library(sf)

sample_spatial <- data.frame(
  lon = runif(50, 77.8, 78.2),
  lat = runif(50, 30.1, 30.4)
)

pts_sf <- to_sf_points(sample_spatial, lon = "lon", lat = "lat")
head(pts_sf)

10. Conclusion

The NRMSampling package provides a comprehensive and scalable framework for sampling and estimation in NRM research. It enables researchers to adopt statistically sound methodologies while ensuring reproducibility and integration with spatial data systems.


References

Cochran, W.G. (1977). Sampling Techniques. Lohr, S.L. (2022). Sampling: Design and Analysis. Horvitz, D.G. and Thompson, D.J. (1952). IPCC (2006). Guidelines for Greenhouse Gas Inventories.