Ejemplo n.º 1
0
        omega2[idx] = omega[1:]
        l = range(i * N, (i + 1) * N)

        # random phase shift on [0, 2pi) following Saltelli et al. Technometrics 1999
        phi = 2 * math.pi * np.random.rand()

        for j in range(D):
            g = 0.5 + (1 / math.pi) * np.arcsin(np.sin(omega2[j] * s + phi))
            X[l, j] = g

    scale_samples(X, pf['bounds'])
    return X


if __name__ == "__main__":

    parser = common_args.create()
    parser.add_argument('-M',
                        type=int,
                        required=False,
                        default=4,
                        help='M coefficient, default 4')
    args = parser.parse_args()

    np.random.seed(args.seed)
    param_values = sample(args.samples, args.paramfile, M=args.M)
    np.savetxt(args.output,
               param_values,
               delimiter=args.delimiter,
               fmt='%.' + str(args.precision) + 'e')
Ejemplo n.º 2
0
Archivo: dgsm.py Proyecto: pradal/SALib
def calc_vi(base, perturbed, x_delta):
    # v_i sensitivity measure following Sobol and Kucherenko (2009)
    # For comparison, Morris mu* < sqrt(v_i)
    dfdx = (perturbed-base)/x_delta
    dfdx2 = dfdx**2

    return np.mean(dfdx2), np.std(dfdx2)

def calc_dgsm(base, perturbed, x_delta, bounds, num_resamples, conf_level):
    # v_i sensitivity measure following Sobol and Kucherenko (2009)
    # For comparison, total order S_tot <= dgsm
    D = np.var(base)
    vi, _ = calc_vi(base, perturbed, x_delta)
    dgsm = vi*(bounds[1]-bounds[0])**2/(D*np.pi**2)

    s = np.empty(num_resamples)
    for i in xrange(num_resamples):        
        r = np.random.randint(len(base), size=len(base))        
        s[i], _ = calc_vi(base[r], perturbed[r], x_delta[r])

    return dgsm, norm.ppf(0.5 + conf_level/2) * s.std(ddof=1)

if __name__ == "__main__":
    parser = common_args.create()
    parser.add_argument('-X', '--model-input-file', type=str, required=True, default=None, help='Model input file')
    parser.add_argument('-r', '--resamples', type=int, required=False, default=1000, help='Number of bootstrap resamples for Sobol confidence intervals')
    args = parser.parse_args()

    analyze(args.paramfile, args.model_input_file, args.model_output_file, args.column, 
        num_resamples = args.resamples, delim = args.delimiter, print_to_console=True)