Sampling with a discrete parameterΒΆ

This example is identical to Sampling, but in this case par4 is a discrete parameter.

%matplotlib inline
import sys,os
try:
    import matk
except:
    try:
        sys.path.append(os.path.join('..','src'))
        import matk
    except ImportError as err:
        print 'Unable to load MATK module: '+str(err)
import numpy
from scipy import arange, randn, exp
from multiprocessing import freeze_support

# Model function
def dbexpl(p):
    t=arange(0,100,20.)
    y =  (p['par1']*exp(-p['par2']*t) + p['par3']*exp(-p['par4']*t))
    #nm =  ['o1','o2','o3','o4','o5']
    #return dict(zip(nm,y))
    return y

# Setup MATK model with parameters
p = matk.matk(model=dbexpl)
p.add_par('par1',min=0,max=1)
p.add_par('par2',min=0,max=0.2)
p.add_par('par3',min=0,max=1)
vals = numpy.linspace(0,0.2,21)
probs = [1./20.]*21

p.add_par('par4',discrete_vals = (vals,probs))

# Create LHS sample
s = p.lhs('lhs', siz=500, seed=1000)

# Look at sample parameter histograms, correlations, and panels
h = s.samples.hist(ncols=2, bins=55, title='Parameter Histograms by Counts')
_images/sampling_w_discrete_par_0_0.png
par1:
Count:            9        9        9        9       10        8        9       10        9        9        9        9        9        9        9       10        8        9       10        9        9        9        9        9        9        9       10        8       10        9        9        8       10        9       10        8        9       10        8        9       10        9        9        9        9        9        9        9        9       10        9        9        9        9        9
 Bins:        0    0.018    0.036    0.055    0.073    0.091     0.11     0.13     0.15     0.16     0.18      0.2     0.22     0.24     0.25     0.27     0.29     0.31     0.33     0.35     0.36     0.38      0.4     0.42     0.44     0.45     0.47     0.49     0.51     0.53     0.55     0.56     0.58      0.6     0.62     0.64     0.65     0.67     0.69     0.71     0.73     0.75     0.76     0.78      0.8     0.82     0.84     0.85     0.87     0.89     0.91     0.93     0.95     0.96     0.98        1

par2:
Count:            9        9        9        9        9       10        9        9        9        9        9        9        9        9        9        9       10        9        9        9        9        9        9        9        9        9       10        8       10        9        9        9        9       10        8        9        9       10        9        9        9        9        9        9        9        9        9       10        8       10        9        9        8       10        9
 Bins:        0   0.0036   0.0073    0.011    0.015    0.018    0.022    0.025    0.029    0.033    0.036     0.04    0.044    0.047    0.051    0.055    0.058    0.062    0.065    0.069    0.073    0.076     0.08    0.084    0.087    0.091    0.095    0.098      0.1     0.11     0.11     0.11     0.12     0.12     0.12     0.13     0.13     0.13     0.14     0.14     0.15     0.15     0.15     0.16     0.16     0.16     0.17     0.17     0.17     0.18     0.18     0.19     0.19     0.19      0.2      0.2

par3:
Count:            9        9        9        9       10        9        8       10        9        9        9       10        8        9        9       10        9        9        8       10        8       10        9        9        9       10        8        9       10        9        8       10        9        9        9        9        9       10        8       10        8       10        9        9        9        9       10        9        9        8       10        9        9        9        9
 Bins:        0    0.018    0.036    0.055    0.073    0.091     0.11     0.13     0.15     0.16     0.18      0.2     0.22     0.24     0.25     0.27     0.29     0.31     0.33     0.35     0.36     0.38      0.4     0.42     0.44     0.45     0.47     0.49     0.51     0.53     0.55     0.56     0.58      0.6     0.62     0.64     0.65     0.67     0.69     0.71     0.73     0.75     0.76     0.78      0.8     0.82     0.84     0.85     0.87     0.89     0.91     0.93     0.95     0.96     0.98        1

par4:
Count:           18        0       22        0        0       30        0        0       27        0        0       27        0       17        0        0       21        0        0       26        0        0       18        0       23        0        0       28        0        0       22        0        0       23        0       23        0        0       25        0        0       26        0        0       22        0       23        0        0       23        0        0       25        0       31
 Bins:        0   0.0036   0.0073    0.011    0.015    0.018    0.022    0.025    0.029    0.033    0.036     0.04    0.044    0.047    0.051    0.055    0.058    0.062    0.065    0.069    0.073    0.076     0.08    0.084    0.087    0.091    0.095    0.098      0.1     0.11     0.11     0.11     0.12     0.12     0.12     0.13     0.13     0.13     0.14     0.14     0.15     0.15     0.15     0.16     0.16     0.16     0.17     0.17     0.17     0.18     0.18     0.19     0.19     0.19      0.2      0.2
h = s.samples.hist(ncols=2,bins=55,title='Parameter Histograms by Frequency',frequency=True)
_images/sampling_w_discrete_par_1_0.png
par1:
 Freq:         0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02
 Bins:        0    0.018    0.036    0.055    0.073    0.091     0.11     0.13     0.15     0.16     0.18      0.2     0.22     0.24     0.25     0.27     0.29     0.31     0.33     0.35     0.36     0.38      0.4     0.42     0.44     0.45     0.47     0.49     0.51     0.53     0.55     0.56     0.58      0.6     0.62     0.64     0.65     0.67     0.69     0.71     0.73     0.75     0.76     0.78      0.8     0.82     0.84     0.85     0.87     0.89     0.91     0.93     0.95     0.96     0.98        1

par2:
 Freq:         0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02
 Bins:        0   0.0036   0.0073    0.011    0.015    0.018    0.022    0.025    0.029    0.033    0.036     0.04    0.044    0.047    0.051    0.055    0.058    0.062    0.065    0.069    0.073    0.076     0.08    0.084    0.087    0.091    0.095    0.098      0.1     0.11     0.11     0.11     0.12     0.12     0.12     0.13     0.13     0.13     0.14     0.14     0.15     0.15     0.15     0.16     0.16     0.16     0.17     0.17     0.17     0.18     0.18     0.19     0.19     0.19      0.2      0.2

par3:
 Freq:         0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02     0.02
 Bins:        0    0.018    0.036    0.055    0.073    0.091     0.11     0.13     0.15     0.16     0.18      0.2     0.22     0.24     0.25     0.27     0.29     0.31     0.33     0.35     0.36     0.38      0.4     0.42     0.44     0.45     0.47     0.49     0.51     0.53     0.55     0.56     0.58      0.6     0.62     0.64     0.65     0.67     0.69     0.71     0.73     0.75     0.76     0.78      0.8     0.82     0.84     0.85     0.87     0.89     0.91     0.93     0.95     0.96     0.98        1

par4:
 Freq:         0.04     0.00     0.04     0.00     0.00     0.06     0.00     0.00     0.05     0.00     0.00     0.05     0.00     0.03     0.00     0.00     0.04     0.00     0.00     0.05     0.00     0.00     0.04     0.00     0.05     0.00     0.00     0.06     0.00     0.00     0.04     0.00     0.00     0.05     0.00     0.05     0.00     0.00     0.05     0.00     0.00     0.05     0.00     0.00     0.04     0.00     0.05     0.00     0.00     0.05     0.00     0.00     0.05     0.00     0.06
 Bins:        0   0.0036   0.0073    0.011    0.015    0.018    0.022    0.025    0.029    0.033    0.036     0.04    0.044    0.047    0.051    0.055    0.058    0.062    0.065    0.069    0.073    0.076     0.08    0.084    0.087    0.091    0.095    0.098      0.1     0.11     0.11     0.11     0.12     0.12     0.12     0.13     0.13     0.13     0.14     0.14     0.15     0.15     0.15     0.16     0.16     0.16     0.17     0.17     0.17     0.18     0.18     0.19     0.19     0.19      0.2      0.2
parcor = s.samples.corr(plot=True, title='Parameter Correlations')
             par1     par2     par3     par4
par1         1.00     0.00    -0.01     0.01
par2         0.00     1.00    -0.00    -0.04
par3        -0.01    -0.00     1.00     0.05
par4         0.01    -0.04     0.05     1.00
_images/sampling_w_discrete_par_2_1.png
s.samples.panels(bins=55,title='Parameter Panels')
_images/sampling_w_discrete_par_3_0.png
# Run model with parameter samples
s.run( cpus=2, outfile='results.dat', logfile='log.dat',verbose=False)

# Look at response histograms, correlations, and panels
h = s.responses.hist(ncols=3,title='Model Response Histograms by Counts')
_images/sampling_w_discrete_par_4_0.png
obs1:
Count:           16       28       51       62       77      103       72       49       25       17
 Bins:    0.033     0.23     0.42     0.61      0.8     0.99      1.2      1.4      1.6      1.8        2

obs2:
Count:          227       94       76       37       26       21        9        7        0        3
 Bins:   0.0076     0.14     0.26     0.39     0.52     0.65     0.78     0.91        1      1.2      1.3

obs3:
Count:          344       64       34       19       13       11        8        3        3        1
 Bins:  0.00033     0.11     0.23     0.34     0.46     0.57     0.69      0.8     0.92        1      1.1

obs4:
Count:          392       43       21       12       12        7        6        3        3        1
 Bins:  7.7e-06     0.11     0.21     0.32     0.42     0.53     0.63     0.74     0.84     0.95      1.1

obs5:
Count:          412       38       12       12        9        4        4        5        1        3
 Bins:  1.7e-07      0.1      0.2      0.3      0.4      0.5      0.6      0.7      0.8      0.9        1
h = s.responses.hist(ncols=3,title='Model Response Histograms by Frequency',frequency=True)
_images/sampling_w_discrete_par_5_0.png
obs1:
 Freq:         0.03     0.06     0.10     0.12     0.15     0.21     0.14     0.10     0.05     0.03
 Bins:    0.033     0.23     0.42     0.61      0.8     0.99      1.2      1.4      1.6      1.8        2

obs2:
 Freq:         0.45     0.19     0.15     0.07     0.05     0.04     0.02     0.01     0.00     0.01
 Bins:   0.0076     0.14     0.26     0.39     0.52     0.65     0.78     0.91        1      1.2      1.3

obs3:
 Freq:         0.69     0.13     0.07     0.04     0.03     0.02     0.02     0.01     0.01     0.00
 Bins:  0.00033     0.11     0.23     0.34     0.46     0.57     0.69      0.8     0.92        1      1.1

obs4:
 Freq:         0.78     0.09     0.04     0.02     0.02     0.01     0.01     0.01     0.01     0.00
 Bins:  7.7e-06     0.11     0.21     0.32     0.42     0.53     0.63     0.74     0.84     0.95      1.1

obs5:
 Freq:         0.82     0.08     0.02     0.02     0.02     0.01     0.01     0.01     0.00     0.01
 Bins:  1.7e-07      0.1      0.2      0.3      0.4      0.5      0.6      0.7      0.8      0.9        1
rescor = s.responses.corr(plot=True, title='Model Response Correlations')
             obs1     obs2     obs3     obs4     obs5
obs1         1.00     0.41     0.27     0.22     0.19
obs2         0.41     1.00     0.95     0.87     0.80
obs3         0.27     0.95     1.00     0.98     0.94
obs4         0.22     0.87     0.98     1.00     0.99
obs5         0.19     0.80     0.94     0.99     1.00
_images/sampling_w_discrete_par_6_1.png
s.responses.panels(title='Response Panels')
_images/sampling_w_discrete_par_7_0.png
# Print and plot parameter/response correlations
print "\nPearson Correlation Coefficients:"
pcorr = s.corr(plot=True,title='Pearson Correlation Coefficients')
print "\nSpearman Correlation Coefficients:"
scorr = s.corr(plot=True,type='spearman',title='Spearman Rank Correlation Coefficients')
s.panels(figsize=(10,8))
Pearson Correlation Coefficients:
             obs1     obs2     obs3     obs4     obs5
par1         0.70     0.29     0.17     0.13     0.10
par2         0.00    -0.47    -0.40    -0.32    -0.27
par3         0.70     0.29     0.21     0.19     0.17
par4         0.04    -0.52    -0.48    -0.43    -0.39
_images/sampling_w_discrete_par_8_1.png
Spearman Correlation Coefficients:
             obs1     obs2     obs3     obs4     obs5
par1         0.69     0.32     0.17     0.11     0.07
par2        -0.01    -0.52    -0.55    -0.56    -0.56
par3         0.70     0.28     0.14     0.09     0.06
par4         0.05    -0.55    -0.60    -0.61    -0.62
_images/sampling_w_discrete_par_8_3.png _images/sampling_w_discrete_par_8_4.png