Exemple #1
0
import pyabc

from pyABC_study.ODE import ODESolver, PriorLimits, exp_data

print("\n\n\nABC SMC\nParameter estimation\n")

# %% Set database path and observed data

# Change database name every run
db_path = "sqlite:///model3.db"

print("Target data")
print(exp_data)

solver = ODESolver()

# %% Calculate data range as factors:

print("No factors applied")

# %% Plot

# obs_data_plot(solver.timePoint, obs_data_noisy_s, obs_data_raw_s)

# %% Define prior distribution of parameters
# Be careful that RV("uniform", -10, 15) means uniform distribution in [-10, 5], '15' here is the interval length

# Set prior

lim = PriorLimits(1e-6, 75)
para_true = {'iBM': 1.0267462374320455,
             'kMB': 0.07345932286118964,
             'kNB': 2.359199465995228,
             'lambdaM': 2.213837884117815,
             'lambdaN': 7.260925726829641,
             'muA': 18.94626522780349,
             'muB': 2.092860392215201,
             'muM': 0.17722330053184654,
             'muN': 0.0023917569160019844,
             'sAM': 10.228522400429998,
             'sBN': 4.034313992927392,
             'vNM': 0.3091883041193706}

# Using default time points

solver = ODESolver()

obs_data_noisy = solver.ode_model(para_true, flatten=True, add_noise=True)
obs_data_raw = solver.ode_model(para_true, flatten=True, add_noise=False)

obs_data_noisy_s = solver.ode_model(para_true, flatten=False, add_noise=True)
obs_data_raw_s = solver.ode_model(para_true, flatten=False, add_noise=False)

print("Target data")
print(obs_data_noisy_s)

# %% Calculate data range as factors:

# Use data range as factors
range_N = obs_data_raw_s['N'].max() - obs_data_raw_s['N'].min()
range_M = obs_data_raw_s['M'].max() - obs_data_raw_s['M'].min()
Exemple #3
0
import pyabc

from pyABC_study.ODE import ODESolver, PriorLimits, para_true1, para_prior

print("\n\n\n Base\n Median eps, 2000 particles, 20 generations\n\n\n")

# %% Set path

db_path = "sqlite:///dbfiles/ib_wide.db"

# %% Generate synthetic data


# Using default time points

solver = ODESolver()
solver.time_point = solver.time_point_default

obs_data_raw = solver.ode_model1(para_true1)

print("Target data")
print(obs_data_raw)

# Set factors
# print("Factors applied: 75/25 factor")

# factors = {}

# time_length: int = len(solver.time_point) * 4

# # for i in range(0, time_length, 4):
para_prior3 = para_prior(lim, prior_distribution, 3)
para_prior4 = para_prior(lim, prior_distribution, 4)
para_prior5 = para_prior(lim, prior_distribution, 5)

# %% Load database

# change database name
db_path = "sqlite:///db/model5_24_more.db"

history = pyabc.History(db_path)

print("ID: %d, generations: %d" % (history.id, history.max_t))

# %% Plot

solver = ODESolver()

# change model name
solver.ode_model = solver.ode_model5

result_data(history, solver, nr_population=history.max_t, savefig=True)

# change prior name
result_plot(history, None, para_prior5, history.max_t - 5, savefig=False)

df, w = history.get_distribution(t=history.max_t - 5)
pyabc.visualization.plot_kde_matrix(df, w)
plt.show()

pyabc.visualization.plot_epsilons(history)
plt.show()
import pyabc

from pyABC_study.ODE import ODESolver, PriorLimits, arr2d_to_dict, para_true1, para_prior
from pyABC_study.dataPlot import result_data_old, result_plot, result_data

# %% Settings

lim = PriorLimits(1e-6, 50)

prior_distribution = "uniform"

print(prior_distribution)

para_prior1 = para_prior(lim, prior_distribution, 1)

solver = ODESolver()
solver.time_point = solver.time_point_default

obs_data_raw_s = solver.ode_model1(para_true1, flatten=False, add_noise=False)

solver.time_point = solver.time_point_exp
obs_data_raw_s_less = solver.ode_model(para_true1, flatten=False, add_noise=False)

# print("Target data")
# print(obs_data_noisy_s)

# %% Load database

db_path = "sqlite:///db/abcsmc_test.db"

history = pyabc.History(db_path)
Exemple #6
0
def result_data_old(history,
                    solver: ODESolver,
                    compare_data=exp_data_s,
                    nr_population=1,
                    sample_size=500,
                    savefig='False'):
    """
Visualise SMC population from infer-back populations
    :param solver: ODE solver object
    :param savefig: Filename of output figure. If 'False' then no figure will be saved
    :param history: abc.history object
    :param compare_data: target data
    :param nr_population: the id of population to be visualised
    :param sample_size: sampling size of the selected population
    """
    df, w = history.get_distribution(t=nr_population)
    # df.columns = ['i_beta_phi', 'k_phi_beta', 'k_n_beta', 'lambda_phi', 'lambda_n', 'mu_alpha', 'mu_beta', 'mu_phi',
    #               'mu_n', 's_alpha_phi', 's_beta_n', 'v_n_phi']

    df_sample = df.sample(sample_size, replace=False)
    df_all_sim_data = pd.DataFrame(columns=['N', 'M', 'B', 'A'])

    # solver.time_point = solver.time_point_default
    for ii in range(sample_size):
        temp_dict = df_sample.iloc[ii].to_dict()
        sim_data = solver.ode_model(temp_dict, flatten=False)
        # print(sim_data)
        sim_data = pd.DataFrame.from_dict(sim_data)
        df_all_sim_data = pd.concat([df_all_sim_data, sim_data])

    # plt.ylim(0, 2) # make lim a function parameter
    # plt.show()

    df_mean = pd.DataFrame(columns=['N', 'M', 'B', 'A'])
    for jj in range(solver.time_point.__len__()):
        # print(df_all_sim_data.loc[jj].mean())
        df_mean = df_mean.append(df_all_sim_data.loc[jj].mean(),
                                 ignore_index=True)

    df_median = quantile_calculate(df_all_sim_data,
                                   solver.time_point.__len__(), 0.5)
    df_75 = quantile_calculate(df_all_sim_data, solver.time_point.__len__(),
                               0.75)
    df_25 = quantile_calculate(df_all_sim_data, solver.time_point.__len__(),
                               0.25)

    fig, axs = plt.subplots(4, 1, figsize=(6, 12))
    plt.subplots_adjust(hspace=0.5)
    index_cov = ['N', 'M', 'B', 'A']
    titles = ["N", "Φ", "β", "α"]
    for kk in range(4):
        # seq_mask = np.isfinite(compare_data[index_cov[kk]])
        # axs[kk].plot(solver.timePoint, df_25.iloc[:, kk], 'b--')
        # axs[kk].plot(solver.timePoint, df_75.iloc[:, kk], 'b--')
        axs[kk].fill_between(solver.time_point,
                             df_25.iloc[:, kk],
                             df_75.iloc[:, kk],
                             alpha=0.9,
                             color='lightgrey')
        axs[kk].plot(solver.time_point,
                     df_mean.iloc[:, kk],
                     'b',
                     label="Mean",
                     alpha=0.6)
        axs[kk].scatter(solver.time_point_default,
                        compare_data[index_cov[kk]],
                        alpha=0.7,
                        marker='^',
                        color='black')
        # axs[kk].errorbar(solver.time_point_exp, compare_data[index_cov[kk]],
        #                  yerr=[[0.5 * x for x in exp_data_SEM[index_cov[kk]]],
        #                        [0.5 * x for x in exp_data_SEM[index_cov[kk]]]], fmt='none',
        #                  ecolor='grey', elinewidth=2, alpha=0.6)
        # axs[kk].legend(['Mean', '25% – 75% quantile range', 'Observed'])
        axs[kk].set_title(titles[kk])
    # fig.tight_layout(pad=5.0)
    if savefig != 'False':
        plt.savefig(savefig + ".png", dpi=200)
    plt.show()
Exemple #7
0
# para_true = {'iBM': 1.0267462374320455,
#              'kMB': 0.07345932286118964,
#              'kNB': 2.359199465995228,
#              'lambdaM': 2.213837884117815,
#              'lambdaN': 7.260925726829641,
#              'muA': 18.94626522780349,
#              'muB': 2.092860392215201,
#              'muM': 0.17722330053184654,
#              'muN': 0.0023917569160019844,
#              'sAM': 10.228522400429998,
#              'sBN': 4.034313992927392,
#              'vNM': 0.3091883041193706}

# Using default time points

solver = ODESolver()
solver.time_point = solver.time_point_default
# obs_data_noisy = solver.ode_model(para_true, flatten=True, add_noise=True)
obs_data_raw = solver.ode_model(para_true1, flatten=True, add_noise=False)

# obs_data_noisy_s = solver.ode_model(para_true1, flatten=False, add_noise=True)
# obs_data_raw_s = solver.ode_model(para_true1, flatten=False, add_noise=False)

print("Target data")
print(obs_data_raw)

# %% Calculate data range as factors:

# range_N = obs_data_raw_s['N'].max() - obs_data_raw_s['N'].min()
# range_M = obs_data_raw_s['M'].max() - obs_data_raw_s['M'].min()
# range_B = obs_data_raw_s['B'].max() - obs_data_raw_s['B'].min()
Exemple #8
0
        'v_n_phi': para[11]
    }
    return para_dict


# Read  and prepare raw data

rawData_path = os.path.abspath(os.curdir) + "/data/rawData.csv"
rawData = pd.read_csv(rawData_path).astype("float32")
# normalise_data(expData)
print("Target data")
print(exp_data)

# Run a rough inference on the raw data

solver = ODESolver()
# Reload the timepoints to be calculated in ODE solver
solver.time_point = solver.time_point_exp

paraGuess = [1] * 12

distanceP2 = pyabc.PNormDistance(p=2)
tmpData = solver.ode_model(para_list_to_dict(paraGuess))


def residual_ls(para: list):
    """
Define the residual
    :param para: parameter values
    :return: value of residual
    """