This is a good test - bootstrapping results should be similar to the
covariance matrix and MC simulations.  However you should note that
statisticians do not consider this technique to be a valid error
estimate.

Regards,

Edward

On 31 August 2014 17:26,  <[email protected]> wrote:
> Author: tlinnet
> Date: Sun Aug 31 17:26:48 2014
> New Revision: 25485
>
> URL: http://svn.gna.org/viewcvs/relax?rev=25485&view=rev
> Log:
> Modified systemtest Relax_disp.verify_estimate_r2eff_err_compare_mc to 
> include boot strapping method.
>
> This shows there is excellent agreement between boot-strapping and estimation 
> of errors from Co-variance, while
> relax Monte-Carlo simulations are very much different.
>
> Boot strapping is the "-2":
>
>       -2 0.070 0.085 0.087 0.095 0.086 0.076 0.087 0.072 0.069 0.077 0.025 
> 0.035 0.018 0.015 sum= 0.897
>       -1 0.069 0.081 0.085 0.092 0.085 0.074 0.083 0.069 0.066 0.074 0.025 
> 0.035 0.018 0.016 sum= 0.874
>        0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
> 0.000 0.000 0.000 sum= 0.000
>      400 0.034 0.043 0.044 0.049 0.046 0.037 0.042 0.035 0.031 0.039 0.014 
> 0.018 0.009 0.008 sum= 0.450
>      800 0.032 0.040 0.041 0.046 0.042 0.036 0.040 0.034 0.034 0.037 0.013 
> 0.018 0.009 0.008 sum= 0.431
>     1200 0.033 0.041 0.042 0.046 0.043 0.037 0.042 0.036 0.034 0.038 0.012 
> 0.018 0.009 0.008 sum= 0.439
>     1600 0.036 0.041 0.042 0.047 0.043 0.038 0.042 0.035 0.035 0.037 0.013 
> 0.018 0.009 0.008 sum= 0.443
>     2000 0.034 0.042 0.042 0.046 0.042 0.036 0.043 0.035 0.034 0.037 0.013 
> 0.017 0.009 0.008 sum= 0.438
>
> task #7822(https://gna.org/task/index.php?7822): Implement user function to 
> estimate R2eff and associated errors for exponential curve fitting.
>
> Modified:
>     trunk/test_suite/system_tests/relax_disp.py
>
> Modified: trunk/test_suite/system_tests/relax_disp.py
> URL: 
> http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/relax_disp.py?rev=25485&r1=25484&r2=25485&view=diff
> ==============================================================================
> --- trunk/test_suite/system_tests/relax_disp.py (original)
> +++ trunk/test_suite/system_tests/relax_disp.py Sun Aug 31 17:26:48 2014
> @@ -24,6 +24,8 @@
>  # Python module imports.
>  from os import F_OK, access, getcwd, path, sep
>  from numpy import array, asarray, exp, median, inf, log, save, std, sum, 
> zeros
> +from minfx.generic import generic_minimise
> +from random import gauss
>  import re, math
>  from tempfile import mkdtemp, NamedTemporaryFile
>
> @@ -3125,9 +3127,7 @@
>          # Do boot strapping ?
>          do_boot = True
>          if do_boot:
> -            from minfx.generic import generic_minimise
> -            from random import gauss
> -            min_algor = 'BFGS'
> +            min_algor = 'Newton'
>              min_options = ()
>              sim_boot = 2000
>              scaling_list = [1.0, 1.0]
> @@ -3232,7 +3232,7 @@
>                          x0 = [r2eff, i0]
>                          setup(num_params=len(x0), num_times=len(times), 
> values=I_err, sd=errors, relax_times=times, scaling_matrix=scaling_list)
>
> -                        params_minfx_sim_j, chi2_minfx_sim_j, iter_count, 
> f_count, g_count, h_count, warning = generic_minimise(func=func, dfunc=dfunc, 
> args=(), x0=x0, min_algor=min_algor, min_options=min_options, 
> full_output=True, print_flag=0)
> +                        params_minfx_sim_j, chi2_minfx_sim_j, iter_count, 
> f_count, g_count, h_count, warning = generic_minimise(func=func, dfunc=dfunc, 
> d2func=d2func, args=(), x0=x0, min_algor=min_algor, min_options=min_options, 
> full_output=True, print_flag=0)
>                          R_m_sim_j, I0_m_sim_j = params_minfx_sim_j
>                          R_m_sim_l.append(R_m_sim_j)
>                          I0_m_sim_l.append(I0_m_sim_j)
> @@ -7995,6 +7995,9 @@
>          # Set algorithm.
>          min_algor = 'Newton'
>          constraints = False
> +        min_options = ()
> +        sim_boot = 2000
> +        scaling_list = [1.0, 1.0]
>
>          # Minimise.
>          self.interpreter.minimise.execute(min_algor=min_algor, 
> constraints=constraints, verbosity=1)
> @@ -8008,10 +8011,7 @@
>                  if hasattr(cur_spin, err_attr):
>                      delattr(cur_spin, err_attr)
>
> -        # Estimate R2eff errors.
> -        self.interpreter.relax_disp.r2eff_err_estimate(chi2_jacobian=False)
> -
> -        # Collect the estimation data.
> +        # Collect the estimation data from boot.
>          my_dic = {}
>          param_key_list = []
>          est_keys = []
> @@ -8038,6 +8038,69 @@
>
>                  # Append key.
>                  param_key_list.append(param_key)
> +
> +                # Add key to dic.
> +                my_dic[spin_id][est_key][param_key] = {}
> +
> +                values = []
> +                errors = []
> +                times = []
> +                for time in loop_time(exp_type=exp_type, frq=frq, 
> offset=offset, point=point):
> +                    values.append(average_intensity(spin=cur_spin, 
> exp_type=exp_type, frq=frq, offset=offset, point=point, time=time))
> +                    errors.append(average_intensity(spin=cur_spin, 
> exp_type=exp_type, frq=frq, offset=offset, point=point, time=time, 
> error=True))
> +                    times.append(time)
> +
> +                # Convert to numpy array.
> +                values = asarray(values)
> +                errors = asarray(errors)
> +                times = asarray(times)
> +
> +                r2eff = getattr(cur_spin, 'r2eff')[param_key]
> +                i0 = getattr(cur_spin, 'i0')[param_key]
> +
> +                R_m_sim_l = []
> +                I0_m_sim_l = []
> +                for j in range(sim_boot):
> +                    if j in range(0, 100000, 100):
> +                        print("Simulation %i"%j)
> +                    # Start minimisation.
> +
> +                    # Produce errors
> +                    I_err = []
> +                    for j, error in enumerate(errors):
> +                        I_error = gauss(values[j], error)
> +                        I_err.append(I_error)
> +                    # Convert to numpy array.
> +                    I_err = asarray(I_err)
> +
> +                    x0 = [r2eff, i0]
> +                    setup(num_params=len(x0), num_times=len(times), 
> values=I_err, sd=errors, relax_times=times, scaling_matrix=scaling_list)
> +
> +                    params_minfx_sim_j, chi2_minfx_sim_j, iter_count, 
> f_count, g_count, h_count, warning = generic_minimise(func=func, dfunc=dfunc, 
> d2func=d2func, args=(), x0=x0, min_algor=min_algor, min_options=min_options, 
> full_output=True, print_flag=0)
> +                    R_m_sim_j, I0_m_sim_j = params_minfx_sim_j
> +                    R_m_sim_l.append(R_m_sim_j)
> +                    I0_m_sim_l.append(I0_m_sim_j)
> +
> +                # Get stats on distribution.
> +                sigma_R_sim = std(asarray(R_m_sim_l), ddof=1)
> +                sigma_I0_sim = std(asarray(I0_m_sim_l), ddof=1)
> +                my_dic[spin_id][est_key][param_key]['r2eff_err'] = 
> sigma_R_sim
> +                my_dic[spin_id][est_key][param_key]['i0_err'] = sigma_I0_sim
> +
> +        # Estimate R2eff errors.
> +        self.interpreter.relax_disp.r2eff_err_estimate()
> +
> +        est_key = '-1'
> +        est_keys.append(est_key)
> +
> +        # Collect data.
> +        for cur_spin, mol_name, resi, resn, spin_id in 
> spin_loop(full_info=True, return_id=True, skip_desel=True):
> +            # Add key for estimate.
> +            my_dic[spin_id][est_key] = {}
> +
> +            for exp_type, frq, offset, point, ei, mi, oi, di in 
> loop_exp_frq_offset_point(return_indices=True):
> +                # Generate the param_key.
> +                param_key = return_param_key_from_data(exp_type=exp_type, 
> frq=frq, offset=offset, point=point)
>
>                  # Add key to dic.
>                  my_dic[spin_id][est_key][param_key] = {}
> @@ -8054,38 +8117,8 @@
>                      my_dic[spin_id][est_key][param_key][err_attr] = 
> get_err_attr
>
>
> -        # Estimate R2eff errors from Chi2 Jacobian.
> -        self.interpreter.relax_disp.r2eff_err_estimate(chi2_jacobian=True)
> -
> -        est_key = '-1'
> -        est_keys.append(est_key)
> -
> -        # Collect data.
> -        for cur_spin, mol_name, resi, resn, spin_id in 
> spin_loop(full_info=True, return_id=True, skip_desel=True):
> -            # Add key for estimate.
> -            my_dic[spin_id][est_key] = {}
> -
> -            for exp_type, frq, offset, point, ei, mi, oi, di in 
> loop_exp_frq_offset_point(return_indices=True):
> -                # Generate the param_key.
> -                param_key = return_param_key_from_data(exp_type=exp_type, 
> frq=frq, offset=offset, point=point)
> -
> -                # Add key to dic.
> -                my_dic[spin_id][est_key][param_key] = {}
> -
> -                # Get the value.
> -                # Loop over err attributes.
> -                for err_attr in err_attr_list:
> -                    if hasattr(cur_spin, err_attr):
> -                        get_err_attr = getattr(cur_spin, err_attr)[param_key]
> -                    else:
> -                        get_err_attr = 0.0
> -
> -                    # Save to dic.
> -                    my_dic[spin_id][est_key][param_key][err_attr] = 
> get_err_attr
> -
> -
>          # Make Carlo Simulations number
> -        mc_number_list = range(0, 50, 10)
> +        mc_number_list = range(0, 2400, 400)
>
>          sim_attr_list = ['chi2_sim', 'f_count_sim', 'g_count_sim', 
> 'h_count_sim', 'i0_sim', 'iter_sim', 'peak_intensity_sim', 'r2eff_sim', 
> 'select_sim', 'warning_sim']
>
>
>
> _______________________________________________
> relax (http://www.nmr-relax.com)
>
> This is the relax-commits mailing list
> [email protected]
>
> To unsubscribe from this list, get a password
> reminder, or change your subscription options,
> visit the list information page at
> https://mail.gna.org/listinfo/relax-commits

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to