1

I am using historical yearly rainfall data to devise 'whatif' scenarios of altered rainfall in ecological models. To do that, I am trying to sample actual rainfall values to create a sample of rainfall years that meet a certain criteria (such as sample of rainfall years that are 10% wetter than the historical average).

I have come up with a relatively simple brute force method described below that works ok if I have a single criteria (such as a target mean value):

rainfall_values = c(270.8, 150.5, 486.2, 442.3, 397.7, 
           593.4191, 165.608, 116.9841, 265.69, 217.934, 358.138, 238.25, 
           449.842, 507.655, 344.38, 188.216, 210.058, 153.162, 232.26, 
           266.02801, 136.918, 230.634, 474.984, 581.156, 674.618, 359.16
)

#brute force 
sample_size=10 #number of years included in each sample
n_replicates=1000 #number of total samples calculated
target=mean(rainfall_values)*1.1 #try to find samples that are 10% wetter than historical mean
tolerance=0.01*target #how close do we want to meet the target specified above?

#create large matrix of samples
sampled_DF=t(replicate(n_replicates, sample(x=rainfall_values, size=sample_size, replace=T))) 
#calculate mean for each sample
Sampled_mean_vals=apply(sampled_DF,1, mean)
#create DF only with samples that meet the criteria
Sampled_DF_on_target=sampled_DF[Sampled_mean_vals>(target-tolerance)&Sampled_mean_vals<(target+tolerance),]

The problem is that I will eventually have multiple criteria to match (not only a means target, but also standard deviation, and auto correlation coefficients, etc.). With more complex multivariate targets, this brute force method becomes really inefficient in finding matches where I essentially have to look over millions of samples, and taking days even when parallelized...

So -my question is- is there any way to implement this search using an optimization algo or other non-brute force approach?

Lucas Fortini
  • 2,420
  • 15
  • 26

1 Answers1

0

Some approaches to this kind of question are covered in this link. One respondent calls the "rejection" method what you refer to as the "brute force" method.

This link addresses a related question.

Edward Carney
  • 1,372
  • 9
  • 7