def posterior_prediction(model, parameter_vector, parameter_names, sf,
                         test_times=[2.5, 5.0, 7.5, 10.0, 20.0, 60.0],
                         alpha_doses=np.logspace(-1, 5, 15),
                         beta_doses=np.logspace(-1, 5, 15)):
    """
    Produce predictions for IFNa and IFNb using model with parameters given
    as input to the function.
    """
    # Make predictions
    model.set_parameters(parameter_vector)
    dradf = model.doseresponse(test_times, 'TotalpSTAT', 'Ia',
                               alpha_doses, parameters={'Ib': 0},
                               scale_factor=sf,
                               return_type='dataframe',
                               dataframe_labels='Alpha')
    drbdf = model.doseresponse(test_times, 'TotalpSTAT', 'Ib',
                               beta_doses, parameters={'Ia': 0},
                               scale_factor=sf,
                               return_type='dataframe',
                               dataframe_labels='Beta')

    posterior = IfnData('custom', df=pd.concat((dradf, drbdf)),
                        conditions={'Alpha': {'Ib': 0},
                                    'Beta': {'Ia': 0}})
    posterior.drop_sigmas()
    return posterior
def posterior_prediction(parameter_vector, parameter_names=parameter_names):
    # Make predictions
    Mixed_Model.set_parameters(parameter_vector)
    dradf = Mixed_Model.doseresponse(times,
                                     'TotalpSTAT',
                                     'Ia',
                                     dose_range,
                                     parameters={'Ib': 0},
                                     scale_factor=sf,
                                     return_type='dataframe',
                                     dataframe_labels='Alpha')
    drbdf = Mixed_Model.doseresponse(times,
                                     'TotalpSTAT',
                                     'Ib',
                                     dose_range,
                                     parameters={'Ia': 0},
                                     scale_factor=sf,
                                     return_type='dataframe',
                                     dataframe_labels='Beta')

    posterior = IfnData('custom',
                        df=pd.concat((dradf, drbdf)),
                        conditions={
                            'Alpha': {
                                'Ib': 0
                            },
                            'Beta': {
                                'Ia': 0
                            }
                        })
    posterior.drop_sigmas()
    return posterior
def posterior_prediction(parameter_vector, parameter_names=parameter_names):
    # Make predictions
    Mixed_Model.update_parameters(parameter_vector)
    dradf = Mixed_Model.mixed_dose_response(times, 'TotalpSTAT', 'Ia', list(np.logspace(1, 5.2)),
                                            parameters={'Ib': 0}, sf=scale_factor)
    drbdf = Mixed_Model.mixed_dose_response(times, 'TotalpSTAT', 'Ib', list(np.logspace(-1, 4)),
                                            parameters={'Ia': 0}, sf=scale_factor)

    posterior = IfnData('custom', df=pd.concat((dradf, drbdf)), conditions={'Alpha': {'Ib': 0}, 'Beta': {'Ia': 0}})
    posterior.drop_sigmas()
    return posterior
Exemple #4
0
def timecourse_figure():
    # Get experimental data
    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    # Aligned data, to get scale factors for each data set
    alignment = DataAlignment()
    alignment.add_data([newdata_4, newdata_3, newdata_2, newdata_1])
    alignment.align()
    alignment.get_scaled_data()
    mean_data = alignment.summarize_data()

    # Plot
    green = sns.color_palette("deep")[2]
    red = sns.color_palette("deep")[3]
    light_green = sns.color_palette("pastel")[2]
    light_red = sns.color_palette("pastel")[3]
    plot = TimecoursePlot((1, 1))
    plot.add_trajectory(mean_data,
                        'errorbar',
                        'o--', (0, 0),
                        label=r'10 pM IFN$\alpha$2',
                        color=light_red,
                        dose_species='Alpha',
                        doseslice=10.0,
                        alpha=0.5)
    plot.add_trajectory(mean_data,
                        'errorbar',
                        'o--', (0, 0),
                        label=r'6 pM IFN$\beta$',
                        color=light_green,
                        dose_species='Beta',
                        doseslice=6.0,
                        alpha=0.5)
    plot.add_trajectory(mean_data,
                        'errorbar',
                        'o-', (0, 0),
                        label=r'3000 pM IFN$\alpha$2',
                        color=red,
                        dose_species='Alpha',
                        doseslice=3000.0)
    plot.add_trajectory(mean_data,
                        'errorbar',
                        'o-', (0, 0),
                        label=r'2000 pM IFN$\beta$',
                        color=green,
                        dose_species='Beta',
                        doseslice=2000.0)
    fname = os.path.join(os.getcwd(), 'results', 'Figures', 'Figure_4',
                         'Timecourse.pdf')
    plot.axes.set_ylabel('pSTAT1 (MFI)')
    plot.show_figure(show_flag=False, save_flag=True, save_dir=fname)
Exemple #5
0
def __unpackMCMC__(ID, jobs, result, countQ, build_model, build_data,
                   model_parameters, temperature):
    """
    This function is used by the MCMC class but must be defined externally.
    Should not be used by any other program.
    """
    model_name, fit_parameters, priors, jump_distributions = build_model
    data_set, data_name, build_conditions = build_data
    model = IfnModel(model_name)
    model.parameters = model_parameters
    if data_name is None:
        data = IfnData(name='custom', df=data_set, conditions=build_conditions)
    else:
        data = IfnData(data_name)
    processMCMC = MCMC(model, data, fit_parameters, priors, jump_distributions)
    processMCMC.temperature = temperature
    processMCMC.__run_chain__(ID, jobs, result, countQ)
def _get_data_coordinates(data: IfnData):
    """Generates a list of all (species, dose, time) triplets with non-NaN
    values in the IfnData data_set attribute. Returns this list of 3-elemnt
    tuples.
    """
    coord = []
    for s in data.get_dose_species():
        for d in data.get_doses(species=s):
            for t in data.get_times(species=s):
                c = (s, d, t)
                if not pd.isnull(data.data_set.loc[c[0:2]][c[2]]):
                    if type(data.data_set.loc[c[0:2]][c[2]]) == tuple:
                        if not pd.isnull(data.data_set.loc[c[0:2]][c[2]][0]):
                            coord.append(c)
                    else:
                        coord.append(c)
    return coord
Exemple #7
0
def likelihood(parameter_vector,
               sampled_parameter_names=pysb_sampled_parameter_names,
               model=Mixed_Model):

    # Change model parameter values to current location in parameter space (values are in log(value) format)

    shared_param_dict = {
        pname: 10**pvalue
        for pname, pvalue in zip(sampled_parameter_names, parameter_vector)
        if pname[-2] != '_'
    }
    pop1_param_dict = {
        pname[:-2]: 10**pvalue
        for pname, pvalue in zip(sampled_parameter_names, parameter_vector)
        if pname[-2:] == '_1'
    }
    pop2_param_dict = {
        pname[:-2]: 10**pvalue
        for pname, pvalue in zip(sampled_parameter_names, parameter_vector)
        if pname[-2:] == '_2'
    }

    model.set_global_parameters(shared_param_dict)
    model.model_1.set_parameters(pop1_param_dict)
    model.model_2.set_parameters(pop2_param_dict)

    #Simulate experimentally measured TotalpSTAT values.
    # Alpha
    dradf = model.mixed_dose_response(tspan,
                                      'TotalpSTAT',
                                      'Ia',
                                      alpha_doses,
                                      parameters={'Ib': 0},
                                      sf=scale_factor)
    drbdf = model.mixed_dose_response(tspan,
                                      'TotalpSTAT',
                                      'Ib',
                                      beta_doses,
                                      parameters={'Ia': 0},
                                      sf=scale_factor)

    # Concatenate and flatten
    total_simulation_data = IfnData(name='custom',
                                    df=pd.concat([dradf, drbdf]))
    sim_data = np.array([[el[0] for el in dose]
                         for dose in total_simulation_data.data_set.values
                         ]).flatten()

    #Calculate log probability contribution from simulated experimental values.

    logp_ctotal = np.sum(like_ctot.logpdf(sim_data))

    #If model simulation failed due to integrator errors, return a log probability of -inf.
    if np.isnan(logp_ctotal):
        logp_ctotal = -np.inf

    return logp_ctotal
Exemple #8
0
    def __posterior_prediction__(self, parameter_dict, test_times,
                                 observable, dose_species, doses,
                                 scale_factor, conditions, dataframe_label):
        """
        Produce predictions for IFNa and IFNb using model with parameters given
        as input to the function.
        """
        # Update parameters
        if self.param_dist_flag:
            # find all distribution parameters
            dist_param_names = []
            for key in parameter_dict.keys():
                if key.endswith('_mu*'):
                    dist_param_names.append(key[:-4])
            # sample according to mu, std
            dist_param_dict = {}
            for pname in dist_param_names:
                mu = np.log10(parameter_dict[pname + '_mu*'])
                std = parameter_dict[pname + '_std*']
                sample = 10 ** np.random.normal(loc=mu, scale=std)
                dist_param_dict.update({pname: sample})
                # remove distribution parameters
                parameter_dict.pop(pname + '_mu*')
                parameter_dict.pop(pname + '_std*')
            # add sample to parameter_dict
            parameter_dict.update(dist_param_dict)

        parameter_dict.update(conditions)

        # Make predictions
        df = self.model.doseresponse(test_times, observable, dose_species,
                                     doses, parameters=parameter_dict,
                                     scale_factor=scale_factor,
                                     return_type='dataframe',
                                     dataframe_labels=dataframe_label)
        posterior = IfnData('custom', df=df, conditions=conditions)
        posterior.drop_sigmas()
        return posterior
Exemple #9
0
    def mixed_dose_response(self,
                            times,
                            observable,
                            dose_species,
                            doses,
                            parameters={},
                            sf=1,
                            **kwargs):
        return_type = kwargs.get('return_type', 'DataFrame')
        if return_type not in ['DataFrame', 'IfnData']:
            raise TypeError('Invalid return type requested')

        response_1 = self.model_1.doseresponse(
            times, observable, dose_species, doses,
            parameters=parameters)[observable]
        response_2 = self.model_2.doseresponse(
            times, observable, dose_species, doses,
            parameters=parameters)[observable]

        weighted_sum_response = np.add(np.multiply(response_1, self.w1),
                                       np.multiply(response_2, self.w2))
        if sf != 1:
            weighted_sum_response = [[el * sf for el in row]
                                     for row in weighted_sum_response]
        if dose_species == 'Ia':
            labelled_data = [[
                'Alpha', doses[row], *[(el, nan)
                                       for el in weighted_sum_response[row]]
            ] for row in range(0, len(weighted_sum_response))]
        elif dose_species == 'Ib':
            labelled_data = [[
                'Beta', doses[row], *[(el, nan)
                                      for el in weighted_sum_response[row]]
            ] for row in range(0, len(weighted_sum_response))]
        else:
            labelled_data = [[
                'Cytokine', doses[row], *[(el, nan)
                                          for el in weighted_sum_response[row]]
            ] for row in range(0, len(weighted_sum_response))]

        column_labels = ['Dose_Species', 'Dose (pM)'
                         ] + [str(el) for el in times]

        drdf = pd.DataFrame.from_records(labelled_data, columns=column_labels)
        drdf.set_index(['Dose_Species', 'Dose (pM)'], inplace=True)

        if return_type == 'DataFrame':
            return drdf
        if return_type == 'IfnData':
            return IfnData(name='custom', df=drdf, conditions=parameters)
Exemple #10
0
def testing_specific_values():
    volEC1 = 1 / (25E9)
    volEC2 = 1E-5
    # --------------------
    # Set up Model
    # --------------------
    # Parameters found by stepwise fitting GAB mean data
    # Note: can remove multiplicative factors on all K1, K2, K4 and still get very good fit to data (worst is 5 min beta)
    initial_parameters = {
        'k_a1': 4.98E-14 * 2,
        'k_a2': 8.30e-13 * 2,
        'k_d4': 0.006 * 3.8,
        'kpu': 0.00095,
        'ka2': 4.98e-13 * 2.45,
        'kd4': 0.3 * 2.867,
        'kint_a': 0.000124,
        'kint_b': 0.00086,
        'krec_a1': 0.0028,
        'krec_a2': 0.01,
        'krec_b1': 0.005,
        'krec_b2': 0.05
    }
    dual_parameters = {
        'kint_a': 0.00052,
        'kSOCSon': 6e-07,
        'kint_b': 0.00052,
        'krec_a1': 0.001,
        'krec_a2': 0.1,
        'krec_b1': 0.005,
        'krec_b2': 0.05
    }
    scale_factor = 1.227

    Mixed_Model = DualMixedPopulation('Mixed_IFN_ppCompatible', 0.8, 0.2)
    Mixed_Model.model_1.set_parameters(initial_parameters)
    Mixed_Model.model_1.set_parameters(dual_parameters)
    Mixed_Model.model_1.set_parameters({'R1': 12000.0, 'R2': 1511.1})
    Mixed_Model.model_2.set_parameters(initial_parameters)
    Mixed_Model.model_2.set_parameters(dual_parameters)
    Mixed_Model.model_2.set_parameters({'R1': 6755.56, 'R2': 1511.1})

    # ---------------------------------
    # Make theory dose response curves
    # ---------------------------------
    # Make predictions
    times = np.arange(0, 120, 0.5)  # [2.5, 5.0, 7.5, 10.0, 20.0, 60.0]
    alpha_doses_20190108 = [0, 10, 100, 300, 1000, 3000, 10000, 100000]
    beta_doses_20190108 = [0, 0.2, 6, 20, 60, 200, 600, 2000]

    # 1 uL
    ka1 = Mixed_Model.model_1.parameters['ka1']
    ka2 = Mixed_Model.model_1.parameters['ka2']
    k_a1 = Mixed_Model.model_1.parameters['k_a1']
    k_a2 = Mixed_Model.model_1.parameters['k_a2']
    Mixed_Model.set_global_parameters({
        'volEC': volEC1,
        'ka1': ka1 * 1E-5 / volEC1,
        'ka2': ka2 * 1E-5 / volEC1,
        'k_a1': k_a1 * 1E-5 / volEC1,
        'k_a2': k_a2 * 1E-5 / volEC1
    })
    dradf = Mixed_Model.mixed_dose_response(times,
                                            'TotalpSTAT',
                                            'Ia',
                                            list(logspace(1, 5.2)),
                                            parameters={'Ib': 0},
                                            sf=scale_factor)
    drbdf = Mixed_Model.mixed_dose_response(times,
                                            'TotalpSTAT',
                                            'Ib',
                                            list(logspace(-1, 4)),
                                            parameters={'Ia': 0},
                                            sf=scale_factor)

    dra15uL = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb15uL = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    # 1 mL
    Mixed_Model.set_global_parameters({
        'volEC': volEC2,
        'ka1': ka1 * 1E-5 / volEC2,
        'ka2': ka2 * 1E-5 / volEC2,
        'k_a1': k_a1 * 1E-5 / volEC2,
        'k_a2': k_a2 * 1E-5 / volEC2
    })
    dradf = Mixed_Model.mixed_dose_response(times,
                                            'TotalpSTAT',
                                            'Ia',
                                            list(logspace(1, 5.2)),
                                            parameters={'Ib': 0},
                                            sf=scale_factor)
    drbdf = Mixed_Model.mixed_dose_response(times,
                                            'TotalpSTAT',
                                            'Ib',
                                            list(logspace(-1, 4)),
                                            parameters={'Ia': 0},
                                            sf=scale_factor)

    dra5mL = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb5mL = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    # -------------------------------
    # Plot model dose response curves
    # -------------------------------
    alpha_palette = sns.color_palette("deep", 6)
    beta_palette = sns.color_palette("deep", 6)

    new_fit = DoseresponsePlot((2, 2))

    alpha_mask = [2.5, 5.0, 10.0, 20.0, 60.0]
    beta_mask = [2.5, 5.0, 10.0, 20.0, 60.0]
    # Add fits
    color_counter = -1
    for idx, t in enumerate(times):
        if t in alpha_mask:
            color_counter += 1
            new_fit.add_trajectory(dra15uL,
                                   t,
                                   'plot',
                                   alpha_palette[color_counter], (0, 0),
                                   'Alpha',
                                   label=str(t) + ' min',
                                   linewidth=2)
            new_fit.add_trajectory(dra5mL,
                                   t,
                                   'plot',
                                   alpha_palette[color_counter], (1, 0),
                                   'Alpha',
                                   label=str(t) + ' min',
                                   linewidth=2)

        if t in beta_mask:
            new_fit.add_trajectory(drb15uL,
                                   t,
                                   'plot',
                                   beta_palette[color_counter], (0, 1),
                                   'Beta',
                                   label=str(t) + ' min',
                                   linewidth=2)
            new_fit.add_trajectory(drb5mL,
                                   t,
                                   'plot',
                                   beta_palette[color_counter], (1, 1),
                                   'Beta',
                                   label=str(t) + ' min',
                                   linewidth=2)

    dr_fig, dr_axes = new_fit.show_figure()
    dr_axes[0][0].set_title(r'IFN$\alpha$ at {} L'.format(volEC1))
    dr_axes[0][1].set_title(r'IFN$\beta$ at {} L'.format(volEC1))
    dr_axes[1][0].set_title(r'IFN$\alpha$ at {} L'.format(volEC2))
    dr_axes[1][1].set_title(r'IFN$\beta$ at {} L'.format(volEC2))
    dr_fig.tight_layout()
    dr_fig.savefig('varying_reaction_volume_dr.pdf')

    # -------------------------------
    # Plot model dose response curves
    # -------------------------------
    tc_figure = TimecoursePlot((1, 2))

    alpha_testdose = list(logspace(1, 5.2))[24]
    beta_testdose = list(logspace(-1, 4))[17]
    print("Using {} for IFNalpha".format(alpha_testdose))
    print("Using {} for IFNbeta".format(beta_testdose))

    tc_figure.add_trajectory(dra15uL,
                             'plot',
                             '-',
                             subplot_idx=(0, 0),
                             label=r'IFN$\alpha$ at {} L'.format(volEC1),
                             doseslice=alpha_testdose,
                             dose_species='Alpha',
                             color=alpha_palette[1])
    tc_figure.add_trajectory(dra5mL,
                             'plot',
                             '-',
                             subplot_idx=(0, 0),
                             label=r'IFN$\alpha$ at {} L'.format(volEC2),
                             doseslice=alpha_testdose,
                             dose_species='Alpha',
                             color=alpha_palette[4])

    tc_figure.add_trajectory(drb15uL,
                             'plot',
                             '-',
                             subplot_idx=(0, 1),
                             label=r'IFN$\beta$ at {} L'.format(volEC1),
                             doseslice=beta_testdose,
                             dose_species='Beta',
                             color=beta_palette[0])
    tc_figure.add_trajectory(drb5mL,
                             'plot',
                             '-',
                             subplot_idx=(0, 1),
                             label=r'IFN$\beta$ at {} L'.format(volEC2),
                             doseslice=beta_testdose,
                             dose_species='Beta',
                             color=beta_palette[2])
    tc_figure.show_figure(save_flag=True,
                          save_dir='varying_reaction_volume_tc.pdf')

    # ------------------------------------
    # Now let's quickly look at IFN levels
    # ------------------------------------
    # 1 uL
    Mixed_Model.set_global_parameters({
        'volEC': volEC1,
        'ka1': ka1 * 1E-5 / volEC1,
        'ka2': ka2 * 1E-5 / volEC1,
        'k_a1': k_a1 * 1E-5 / volEC1,
        'k_a2': k_a2 * 1E-5 / volEC1
    })
    dradf = Mixed_Model.mixed_dose_response(times,
                                            'Free_Ia',
                                            'Ia',
                                            list(logspace(1, 5.2)),
                                            parameters={'Ib': 0},
                                            sf=scale_factor)
    drbdf = Mixed_Model.mixed_dose_response(times,
                                            'Free_Ib',
                                            'Ib',
                                            list(logspace(-1, 4)),
                                            parameters={'Ia': 0},
                                            sf=scale_factor)

    dra15uL = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb15uL = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    # 1 mL
    Mixed_Model.set_global_parameters({
        'volEC': volEC2,
        'ka1': ka1 * 1E-5 / volEC2,
        'ka2': ka2 * 1E-5 / volEC2,
        'k_a1': k_a1 * 1E-5 / volEC2,
        'k_a2': k_a2 * 1E-5 / volEC2
    })
    dradf = Mixed_Model.mixed_dose_response(times,
                                            'Free_Ia',
                                            'Ia',
                                            list(logspace(1, 5.2)),
                                            parameters={'Ib': 0},
                                            sf=scale_factor)
    drbdf = Mixed_Model.mixed_dose_response(times,
                                            'Free_Ib',
                                            'Ib',
                                            list(logspace(-1, 4)),
                                            parameters={'Ia': 0},
                                            sf=scale_factor)

    dra5mL = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb5mL = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    tc_figure = TimecoursePlot((1, 2))

    tc_figure.add_trajectory(dra15uL,
                             'plot',
                             '-',
                             subplot_idx=(0, 0),
                             label=r'IFN$\alpha$ at {} L'.format(volEC1),
                             doseslice=alpha_testdose,
                             dose_species='Alpha',
                             color=alpha_palette[1])
    tc_figure.add_trajectory(dra5mL,
                             'plot',
                             '-',
                             subplot_idx=(0, 0),
                             label=r'IFN$\alpha$ at {} L'.format(volEC2),
                             doseslice=alpha_testdose,
                             dose_species='Alpha',
                             color=alpha_palette[4])

    tc_figure.add_trajectory(drb15uL,
                             'plot',
                             '-',
                             subplot_idx=(0, 1),
                             label=r'IFN$\beta$ at {} L'.format(volEC1),
                             doseslice=beta_testdose,
                             dose_species='Beta',
                             color=beta_palette[0])
    tc_figure.add_trajectory(drb5mL,
                             'plot',
                             '-',
                             subplot_idx=(0, 1),
                             label=r'IFN$\beta$ at {} L'.format(volEC2),
                             doseslice=beta_testdose,
                             dose_species='Beta',
                             color=beta_palette[2])
    for ax in tc_figure.axes.flatten():
        ax.set_yscale('log')
    ifn_fig, ifn_axes = tc_figure.show_figure()
    ifn_axes[0].set_ylabel('IFN-alpha2')
    ifn_axes[1].set_ylabel('IFN-beta')
    ifn_fig.savefig('varying_reaction_volume_tc_IFN.pdf')
Exemple #11
0
    ydata = [top * x**n / (k**n + x**n) for x in xdata]
    return ydata


def fit_MM(doses, responses, guesses):
    top = guesses[0]
    n = guesses[1]
    K = guesses[2]
    results, covariance = curve_fit(MM, doses, responses, p0=[top, n, K])
    top = results[0]
    n = results[1]
    K = results[2]
    return top, n, K


newdata = IfnData("MacParland_Extended")
data = np.transpose([[el[0] for el in r] for r in newdata.data_set.values])
alpha_data = [r[0:5].tolist() for r in data]
beta_data = [r[5:].tolist() for r in data]

# testModel = IfnModel('Mixed_IFN_ppCompatible')

# dra = testModel.doseresponse([0, 5, 15, 30, 60], 'TotalpSTAT', 'Ia', list(logspace(-3, 4)),
#                             parameters={'Ib': 0}, return_type='dataframe', dataframe_labels='Alpha')

exp_doses_a = [10, 90, 600, 4000, 8000]
exp_doses_b = [10, 90, 600, 3000, 11000]
alpha5 = [[], []]
alpha15 = [[], []]
alpha30 = [[], []]
alpha60 = [[], []]
Exemple #12
0
    ydata = [top * x**n / (k**n + x**n) for x in xdata]
    return ydata


def fit_MM(doses, responses, guesses):
    top = guesses[0]
    n = guesses[1]
    K = guesses[2]
    results, covariance = curve_fit(MM, doses, responses, p0=[top, n, K])
    top = results[0]
    n = results[1]
    K = results[2]
    return top, n, K


newdata = IfnData("20181113_B6_IFNs_Dose_Response_Bcells")
data = np.transpose([[el[0] for el in r] for r in newdata.data_set.values])
alpha_data = [r[1:8].tolist() for r in data]
beta_data = [r[9:].tolist() for r in data]

# testModel = IfnModel('Mixed_IFN_ppCompatible')

# dra = testModel.doseresponse([0, 5, 15, 30, 60], 'TotalpSTAT', 'Ia', list(logspace(-3, 4)),
#                             parameters={'Ib': 0}, return_type='dataframe', dataframe_labels='Alpha')

exp_doses_a = [5, 50, 250, 500, 5000, 25000, 50000]
exp_doses_b = [0.1, 1, 5, 10, 100, 200, 1000]

alpha2_5 = [exp_doses_a[2:], alpha_data[0][2:]]
alpha5 = [exp_doses_a, alpha_data[1]]
alpha7_5 = [exp_doses_a, alpha_data[2]]
Exemple #13
0
    def doseresponse(self, times, observable, dose_species, doses, parameters={}, return_type='list',
                     dataframe_labels=None, scale_factor=1, **kwargs):
        no_sigma = kwargs.get('no_sigma', False)
        return_type = return_type.lower()
        # create dose_response_table dictionary
        if type(observable) == list:
            dose_response_table = {obs: zeros((len(doses), len(times))) for obs in observable}
        else:
            dose_response_table = {observable: zeros((len(doses), len(times)))}
        # prepare custom parameters dictionary
        dose_parameters = copy.deepcopy(self.parameters)
        dose_parameters.update(parameters)
        # iterate through all doses
        picoMolar = 1E-12
        Avogadro = 6.022E23
        volEC = self.parameters['volEC']
        for idx, d in enumerate(doses):
            dose_parameters.update({dose_species: d*picoMolar*Avogadro*volEC})
            trajectories = self.timecourse(times, observable, parameters=dose_parameters, **kwargs)
            # add results to dose_response_table dictionary
            for observable_species in trajectories.keys():
                dose_response_table[observable_species][idx] = trajectories[observable_species]
        # return dose response curves
        if return_type == 'list':
            for observable_species in dose_response_table.keys():
                dose_response_table[observable_species] = dose_response_table[observable_species].tolist()
            if scale_factor == 1:
                return dose_response_table
            else:
                if type(observable) == list:
                    return [multiply(scale_factor, asarray(dose_response_table[obs])).tolist() for obs in observable]
                else:
                    return multiply(scale_factor, asarray(dose_response_table[observable])).tolist()
        elif return_type == 'dataframe' or return_type == 'ifndata':
            if type(observable) != list:
                if dataframe_labels is None:
                    dataframe_labels == dose_species
                data_dict = {'Dose_Species': [dataframe_labels for d in range(len(doses))],
                             'Dose (pM)': [d for d in doses]}
                for t in range(len(times)):
                    if no_sigma:
                        data_dict.update({str(times[t]): [dose_response_table[observable][d][t] for d in range(len(doses))]})
                    else:
                        data_dict.update({str(times[t]): [(dose_response_table[observable][d][t], nan) for d in range(len(doses))]})
                df = pd.DataFrame.from_dict(data_dict)
                df.set_index(['Dose_Species', 'Dose (pM)'], inplace=True)
                if scale_factor == 1:
                    if return_type == 'dataframe':
                        return df
                    else:
                        return IfnData('custom', df=df)
                else:
                    if no_sigma:
                        scale_data = lambda q: scale_factor * q
                    else:
                        scale_data = lambda q: (scale_factor * q[0], scale_factor * q[1])
                    if dose_species == 'Ia':
                        dose_species = 'Alpha'
                    elif dose_species == 'Ib':
                        dose_species = 'Beta'

                    for i in range(len(times)):
                        df.loc[dose_species].iloc[:, i] = df.loc[dose_species].iloc[:, i].apply(scale_data)
                    if return_type == 'dataframe':
                        return df
                    else:
                        return IfnData('custom', df=df)
            else:
                if dataframe_labels is None:
                    dataframe_labels == dose_species
                total_df = pd.DataFrame()
                for obs in observable:
                    data_dict = {'Observable_Species': [obs for _ in range(len(doses))],
                                 'Dose_Species': [dataframe_labels for _ in range(len(doses))],
                                 'Dose (pM)': [d for d in doses]}
                    for t in range(len(times)):
                        data_dict.update({str(times[t]): [(dose_response_table[obs][d][t], nan) for d in range(len(doses))]})
                    df = pd.DataFrame.from_dict(data_dict)
                    total_df = total_df.append(df)
                total_df.set_index(['Observable_Species', 'Dose_Species', 'Dose (pM)'], inplace=True)
                if scale_factor == 1:
                    if return_type == 'dataframe':
                        return total_df
                    else:
                        return IfnData('custom', df=total_df)

                else:
                    scale_data = lambda q: (scale_factor * q[0], scale_factor * q[1])
                    if dose_species == 'Ia':
                        dose_species = 'Alpha'
                    elif dose_species == 'Ib':
                        dose_species = 'Beta'
                    for obs in observable:
                        for i in range(len(times)):
                            total_df.loc[obs].loc[dose_species].iloc[:, i] = total_df.loc[obs].loc[dose_species].iloc[:, i].apply(scale_data)
                    if return_type == 'dataframe':
                        return total_df
                    else:
                        return IfnData('custom', df=total_df)
Exemple #14
0
from ifnclass.ifndata import IfnData
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import Trajectory, TimecoursePlot, DoseresponsePlot
from numpy import linspace, logspace, log10, nan
import seaborn as sns
from ifnclass.ifnfit import StepwiseFit

if __name__ == '__main__':
    raw_data = IfnData("20190121_pSTAT1_IFN_Bcell")
    Mixed_Model = IfnModel('Mixed_IFN_ppCompatible')

    alpha_palette = sns.color_palette("Reds", 6)
    beta_palette = sns.color_palette("Greens", 6)

    times = [2.5, 5, 7.5, 10, 20, 60]
    alpha_doses_20190108 = [0, 10, 100, 300, 1000, 3000, 10000, 100000]
    beta_doses_20190108 = [0, 0.2, 6, 20, 60, 200, 600, 2000]

    Mixed_Model.set_parameters({
        'R2': 4140,
        'R1': 4920,
        'k_a1': 2.49e-15,
        'k_a2': 1.328e-12,
        'k_d3': 7.5e-06,
        'k_d4': 0.06,
        'kSOCSon': 5e-08,
        'kpu': 0.0024,
        'kpa': 2.08e-06,
        'ka1': 5.3e-15,
        'ka2': 1.22e-12,
        'kd4': 0.86,
from ifnclass.ifndata import IfnData, DataAlignment
from ifnclass.ifnplot import DoseresponsePlot, TimecoursePlot
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd


if __name__ == '__main__':
    # ------------
    # Process data
    # ------------
    small_1 = IfnData("20190108_pSTAT1_IFN_Small_Bcells")
    small_2 = IfnData("20190119_pSTAT1_IFN_Small_Bcells")
    small_3 = IfnData("20190121_pSTAT1_IFN_Small_Bcells")
    small_4 = IfnData("20190214_pSTAT1_IFN_Small_Bcells")

    large_1 = IfnData("20190108_pSTAT1_IFN_Large_Bcells")
    large_2 = IfnData("20190119_pSTAT1_IFN_Large_Bcells")
    large_3 = IfnData("20190121_pSTAT1_IFN_Large_Bcells")
    large_4 = IfnData("20190214_pSTAT1_IFN_Large_Bcells")


    small_alignment = DataAlignment()
    small_alignment.add_data([small_4, small_3, small_2, small_1])
    small_alignment.align()
    small_alignment.get_scaled_data()
    mean_small_data = small_alignment.summarize_data()

    large_alignment = DataAlignment()
    large_alignment.add_data([large_4, large_3, large_2, large_1])
    large_alignment.align()
Exemple #16
0
    drbdf = Mixed_Model.doseresponse(times,
                                     'TotalpSTAT',
                                     'Ib',
                                     list(logspace(-2, 4)),
                                     parameters={'Ia': 0},
                                     return_type='dataframe',
                                     dataframe_labels='Beta')

    for i in range(len(times)):
        dradf.loc['Alpha'].iloc[:, i] = dradf.loc['Alpha'].iloc[:, i].apply(
            scale_data)
        drbdf.loc['Beta'].iloc[:,
                               i] = drbdf.loc['Beta'].iloc[:,
                                                           i].apply(scale_data)

    dra = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    dose_response_plot = DoseresponsePlot((3, 2))
    alpha_mask = []
    beta_mask = []
    # Add fits
    for idx, t in enumerate([str(el) for el in times]):
        if t not in [str(el) for el in alpha_mask]:
            dose_response_plot.add_trajectory(dra,
                                              t,
                                              'plot',
                                              alpha_palette[idx], (0, 0),
                                              'Alpha',
                                              label='Alpha ' + t,
                                              linewidth=2.0)
Exemple #17
0
from ifnclass.ifndata import IfnData
from ifnclass.ifnplot import DoseresponsePlot, TimecoursePlot
import seaborn as sns
import matplotlib.pyplot as plt

if __name__ == '__main__':
    #olddata = IfnData("20181113_B6_IFNs_Dose_Response_Bcells")
    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    times = [2.5, 5, 7.5, 10, 20, 60]
    alpha_doses = [0, 10, 100, 300, 1000, 3000, 10000, 100000]
    beta_doses = [0, 0.2, 6, 20, 60, 200, 600, 2000]
    #beta_doses_20181113 = [0.1, 1, 5, 10, 100, 200, 1000]
    #alpha_doses_20181113 = [5, 50, 250, 500, 5000, 25000, 50000]

    alpha_palette_new = sns.color_palette("Reds", 6)
    beta_palette_new = sns.color_palette("Greens", 6)
    alpha_palette_old = sns.color_palette("Reds", 6)
    beta_palette_old = sns.color_palette("Greens", 6)

    data_plot_dr = DoseresponsePlot((4, 2))
    alpha_mask = []
    beta_mask = []

    # Add data
    for idx, t in enumerate(times):
        if t not in alpha_mask:
            data_plot_dr.add_trajectory(newdata_4,
Exemple #18
0
def aggregate_response(model,
                       method,
                       model_type,
                       plist,
                       times=[60],
                       scale_factor=1.5):
    if model_type == 'MEDIAN':
        alpha_traj = []
        beta_traj = []
        for i in tqdm(range(len(plist))):
            p = plist[i]
            # simulate IFN alpha-2
            tempP = copy.deepcopy(p)
            tempP.update({'Ib': 0})
            tempA = method(times,
                           'TotalpSTAT',
                           'Ia',
                           list(logspace(-2, 5, num=30)),
                           parameters=tempP,
                           return_type='DataFrame',
                           dataframe_labels='Alpha',
                           scale_factor=scale_factor,
                           no_sigma=True)

            # simulate IFN beta
            tempP = copy.deepcopy(p)
            tempP.update({'Ia': 0})
            tempB = method(times,
                           'TotalpSTAT',
                           'Ib',
                           list(logspace(-2, 5, num=30)),
                           parameters=tempP,
                           return_type='DataFrame',
                           dataframe_labels='Beta',
                           scale_factor=scale_factor,
                           no_sigma=True)

            # add to record of trajectories
            alpha_traj.append(copy.deepcopy(tempA))
            beta_traj.append(copy.deepcopy(tempB))

        # get aggregate predictions
        dose_species = 'Alpha'
        dra60 = IfnData('custom',
                        df=copy.deepcopy(alpha_traj[0]),
                        conditions={'Alpha': {
                            'Ib': 0
                        }})
        mean_alpha_predictions = np.mean([
            alpha_traj[i].loc[dose_species].values
            for i in range(len(alpha_traj))
        ],
                                         axis=0)
        for didx, d in enumerate(dra60.get_doses()['Alpha']):
            for tidx, t in enumerate(dra60.get_times()['Alpha']):
                dra60.data_set.loc['Alpha'][str(
                    t)].loc[d] = mean_alpha_predictions[didx][tidx]

        dose_species = 'Beta'
        drb60 = IfnData('custom',
                        df=copy.deepcopy(beta_traj[0]),
                        conditions={'Beta': {
                            'Ia': 0
                        }})
        mean_beta_predictions = np.mean([
            beta_traj[i].loc[dose_species].values
            for i in range(len(beta_traj))
        ],
                                        axis=0)
        for didx, d in enumerate(drb60.get_doses()['Beta']):
            for tidx, t in enumerate(drb60.get_times()['Beta']):
                drb60.data_set.loc['Beta'][str(
                    t)].loc[d] = mean_beta_predictions[didx][tidx]

    elif model_type == 'SINGLE_CELL':
        dradf = method(times,
                       'TotalpSTAT',
                       'Ia',
                       list(logspace(-2, 5)),
                       parameters={'Ib': 0},
                       return_type='DataFrame',
                       dataframe_labels='Alpha',
                       scale_factor=scale_factor)

        drbdf = method(times,
                       'TotalpSTAT',
                       'Ib',
                       list(logspace(-2, 5)),
                       parameters={'Ia': 0},
                       return_type='DataFrame',
                       dataframe_labels='Beta',
                       scale_factor=scale_factor)
        dra60 = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
        drb60 = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})

    else:
        raise ValueError("Model type must be MEDIAN or SINGLE_CELL")

    return dra60, drb60
Exemple #19
0
def run_smooth_trajectories(cell_densities,
                            IFNAlpha_panel,
                            IFNBeta_panel,
                            times,
                            IFN_in_concentration=True):
    # Experimental parameters
    volume_panel = [1 / i for i in cell_densities]
    # --------------------
    # Set up Model
    # --------------------
    # Parameters found by stepwise fitting GAB mean data
    # Note: can remove multiplicative factors on all K1, K2, K4 and still get very good fit to data (worst is 5 min beta)
    initial_parameters = {
        'k_a1': 4.98E-14 * 2,
        'k_a2': 8.30e-13 * 2,
        'k_d4': 0.006 * 3.8,
        'kpu': 0.00095,
        'ka2': 4.98e-13 * 2.45,
        'kd4': 0.3 * 2.867,
        'kint_a': 0.000124,
        'kint_b': 0.00086,
        'krec_a1': 0.0028,
        'krec_a2': 0.01,
        'krec_b1': 0.005,
        'krec_b2': 0.05
    }
    dual_parameters = {
        'kint_a': 0.00052,
        'kSOCSon': 6e-07,
        'kint_b': 0.00052,
        'krec_a1': 0.001,
        'krec_a2': 0.1,
        'krec_b1': 0.005,
        'krec_b2': 0.05
    }
    scale_factor = 1.227

    Mixed_Model = DualMixedPopulation('Mixed_IFN_ppCompatible', 0.8, 0.2)
    Mixed_Model.model_1.set_parameters(initial_parameters)
    Mixed_Model.model_1.set_parameters(dual_parameters)
    Mixed_Model.model_1.set_parameters({'R1': 12000.0, 'R2': 1511.1})
    Mixed_Model.model_2.set_parameters(initial_parameters)
    Mixed_Model.model_2.set_parameters(dual_parameters)
    Mixed_Model.model_2.set_parameters({'R1': 6755.56, 'R2': 1511.1})

    ka1 = Mixed_Model.model_1.parameters['ka1']
    ka2 = Mixed_Model.model_1.parameters['ka2']
    k_a1 = Mixed_Model.model_1.parameters['k_a1']
    k_a2 = Mixed_Model.model_1.parameters['k_a2']

    # ---------------------------------
    # Make theory dose response curves
    # ---------------------------------
    # Make predictions
    predictions = {}
    for vidx, volume in enumerate(volume_panel):
        Mixed_Model.set_global_parameters({
            'volEC': volume,
            'ka1': ka1 * 1E-5 / volume,
            'ka2': ka2 * 1E-5 / volume,
            'k_a1': k_a1 * 1E-5 / volume,
            'k_a2': k_a2 * 1E-5 / volume
        })
        dradf = Mixed_Model.mixed_dose_response(times,
                                                'TotalpSTAT',
                                                'Ia',
                                                IFNAlpha_panel,
                                                parameters={'Ib': 0},
                                                sf=scale_factor)
        drbdf = Mixed_Model.mixed_dose_response(times,
                                                'TotalpSTAT',
                                                'Ib',
                                                IFNBeta_panel,
                                                parameters={'Ia': 0},
                                                sf=scale_factor)
        drIadf = Mixed_Model.mixed_dose_response(times,
                                                 'Free_Ia',
                                                 'Ia',
                                                 IFNAlpha_panel,
                                                 parameters={'Ib': 0},
                                                 sf=scale_factor)
        drIbdf = Mixed_Model.mixed_dose_response(times,
                                                 'Free_Ib',
                                                 'Ib',
                                                 IFNBeta_panel,
                                                 parameters={'Ia': 0},
                                                 sf=scale_factor)

        if IFN_in_concentration:
            for d in drIadf.loc['Alpha'].index:
                for t in drIadf.loc['Alpha'].columns:
                    drIadf.loc['Alpha', t][d] = (drIadf.loc['Alpha', t][d][0] /
                                                 (6.022E23 * volume * 1E-9),
                                                 drIadf.loc['Alpha', t][d][1])
            for d in drIbdf.loc['Beta'].index:
                for t in drIbdf.loc['Beta'].columns:
                    drIbdf.loc['Beta', t][d] = (drIbdf.loc['Beta', t][d][0] /
                                                (6.022E23 * volume * 1E-9),
                                                drIbdf.loc['Beta', t][d][1])

        draIfnData = IfnData('custom',
                             df=dradf,
                             conditions={'Alpha': {
                                 'Ib': 0
                             }})
        drbIfnData = IfnData('custom',
                             df=drbdf,
                             conditions={'Beta': {
                                 'Ia': 0
                             }})
        drIaIfnData = IfnData('custom',
                              df=drIadf,
                              conditions={'Alpha': {
                                  'Ib': 0
                              }})
        drIbIfnData = IfnData('custom',
                              df=drIbdf,
                              conditions={'Beta': {
                                  'Ia': 0
                              }})
        predictions[cell_densities[vidx]] = [
            draIfnData, drbIfnData, drIaIfnData, drIbIfnData
        ]
    return predictions
Exemple #20
0
from ifnclass.ifndata import IfnData
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import Trajectory, TimecoursePlot, DoseresponsePlot
from numpy import linspace, logspace, log10, nan
import seaborn as sns

if __name__ == '__main__':
    Sagar_data = IfnData("MacParland_Extended")
    #Sagar_data.data_set.drop(labels=[4000, 8000], level=1, inplace=True)
    Mixed_Model = IfnModel('Mixed_IFN_ppCompatible')
    '''
    fit_parameters = OrderedDict(
        [('kd4', 1.0), ('krec_a1', 3.0000000000000001e-05), ('krec_a2', 0.050000000000000003), ('krec_b2', 0.01),
         ('krec_b1', 0.001), ('k_d4', 0.00059999999999999995), ('kSOCSon', 1e-08), ('kd3', 0.001),
         ('k_d3', 2.3999999999999999e-06)])
    Mixed_Model.set_parameters(fit_parameters)
    Mixed_Model.save_model('fitting_2_5.p')
    '''
    #Mixed_Model.load_model('fitting_2_5.p')

    alpha_palette = sns.color_palette("Reds", 6)
    beta_palette = sns.color_palette("Greens", 6)

    # ---------------------------
    # Now try to improve the fit:
    # ---------------------------
    """
    Results of the 5 minute stepwise fit
    OrderedDict([('R2', 500.0), ('kpu', 0.0001), ('R1', 821.42857142857144), ('k_d4', 0.10000000000000001), ('kd4', 0.21642857142857141), ('kd3', 0.00021642857142857143), ('k_d3', 0.00040000000000000002)])
    10.6992020307
    # Previous attempt                 
Exemple #21
0
from ifnclass.ifndata import IfnData
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import Trajectory, TimecoursePlot, DoseresponsePlot
from ifnclass.ifnfit import StepwiseFit
from numpy import linspace, logspace, log10, nan
import seaborn as sns
from smooth_B6_IFN import *  # Imports smoothed data to fit to

if __name__ == '__main__':
    newdata = IfnData("20181113_B6_IFNs_Dose_Response_Bcells")
    Mixed_Model = IfnModel('')
    Mixed_Model.load_model('fitting_2_5.p')

    Mixed_Model.set_parameters({
        'kpu': 0.0028,
        'R2': 2300 * 2.5,
        'R1': 1800 * 1.8,
        'k_d4': 0.06,
        'kint_b': 0.0003,
        'krec_b1': 0.001,
        'k_a1': 4.98E-14,
        'k_a2': 8.30e-13 * 4,
        'kSOCSon': 0.9e-8,
        'ka1': 3.321155762205247e-14 * 0.3,
        'ka2': 4.98173364330787e-13 * 0.3,
        'kint_a': 0.0014,
        'krec_a1': 9e-03
    })
    scale_factor = 0.036
    alpha_palette = sns.color_palette("Reds", 9)
    beta_palette = sns.color_palette("Greens", 9)
Exemple #22
0
        logp_ctotal = np.sum(like_ctot.logpdf(sim_data))

        # If model simulation failed due to integrator errors, return a log probability of -inf.
        if np.isnan(logp_ctotal):
            logp_ctotal = -np.inf

        return logp_ctotal

    return likelihood


if __name__ == '__main__':
    # --------------------
    # Import data
    #---------------------
    Moraga_data = IfnData("2015_pSTAT5_Epo")

    # --------------------
    # Set up Model
    # --------------------
    model = IfnModel('Epo_model')

    # ---------------------------------
    # Make theory dose response curves
    # ---------------------------------
    IC_names = ['Epo_IC', 'EMP1_IC', 'EMP33_IC']
    # Make predictions
    response_species = 'T_Epo'
    dose_species = 'Epo_IC'
    times = [60.0]  # min
    Epo_doses = Moraga_data.get_doses()['T_Epo']  # pM
Exemple #23
0
            scale_data)
        drbdf.loc['Beta'].iloc[:,
                               i] = drbdf.loc['Beta'].iloc[:,
                                                           i].apply(scale_data)
        dradf_int.loc['Alpha'].iloc[:, i] = dradf_int.loc[
            'Alpha'].iloc[:, i].apply(scale_data)
        drbdf_int.loc['Beta'].iloc[:,
                                   i] = drbdf_int.loc['Beta'].iloc[:, i].apply(
                                       scale_data)
        dradf_rec.loc['Alpha'].iloc[:, i] = dradf_rec.loc[
            'Alpha'].iloc[:, i].apply(scale_data)
        drbdf_rec.loc['Beta'].iloc[:,
                                   i] = drbdf_rec.loc['Beta'].iloc[:, i].apply(
                                       scale_data)

    dra60 = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb60 = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})
    dra60_int = IfnData('custom',
                        df=dradf_int,
                        conditions={'Alpha': {
                            'Ib': 0
                        }})
    drb60_int = IfnData('custom', df=drbdf_int, conditions={'Beta': {'Ia': 0}})
    dra60_rec = IfnData('custom',
                        df=dradf_rec,
                        conditions={'Alpha': {
                            'Ib': 0
                        }})
    drb60_rec = IfnData('custom', df=drbdf_rec, conditions={'Beta': {'Ia': 0}})

    dr_plot = DoseresponsePlot((3, 2))
from ifnclass.ifndata import IfnData, DataAlignment
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import DoseresponsePlot, TimecoursePlot
import seaborn as sns
import numpy as np
import pandas as pd
from ifnclass.ifnfit import StepwiseFit, MCMC, Prior

if __name__ == '__main__':
    # ------------------------------
    # Align all data
    # ------------------------------
    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    alignment = DataAlignment()
    alignment.add_data([newdata_4, newdata_3, newdata_2, newdata_1])
    alignment.align()
    alignment.get_scaled_data()
    mean_data = alignment.summarize_data()

    # -------------------------------
    # Initialize model
    # -------------------------------
    times = newdata_4.get_times('Alpha')
    doses_alpha = newdata_4.get_doses('Alpha')
    doses_beta = newdata_4.get_doses('Beta')
    Mixed_Model = IfnModel('Mixed_IFN_ppCompatible')
    Mixed_Model.set_parameters({
                                         parameters={'Ia': 0}, return_type='dataframe', dataframe_labels='Beta',
                                         scale_factor=scale_factor)

    # Show SOCS effects
    Mixed_Model.reset_parameters()
    Mixed_Model.set_parameters({'kIntBasal_r1': 0, 'kIntBasal_r2': 0, 'kint_a': 0, 'kint_b': 0})
    # Uncomment this line to tune IFN alpha internalization to match SOCS
    #Mixed_Model.set_parameters({'kSOCS': Mixed_Model.parameters['kSOCS'] * 2.5})
    dradf_rec = Mixed_Model.doseresponse(times, 'TotalpSTAT', 'Ia', list(logspace(-2, 8)),
                                         parameters={'Ib': 0}, return_type='dataframe', dataframe_labels='Alpha',
                                         scale_factor = scale_factor)
    drbdf_rec = Mixed_Model.doseresponse(times, 'TotalpSTAT', 'Ib', list(logspace(-2, 8)),
                                         parameters={'Ia': 0}, return_type='dataframe', dataframe_labels='Beta',
                                         scale_factor=scale_factor)

    dra60 = IfnData('custom', df=dradf, conditions={'Alpha': {'Ib': 0}})
    drb60 = IfnData('custom', df=drbdf, conditions={'Beta': {'Ia': 0}})
    dra60_int = IfnData('custom', df=dradf_int, conditions={'Alpha': {'Ib': 0}})
    drb60_int = IfnData('custom', df=drbdf_int, conditions={'Beta': {'Ia': 0}})
    dra60_rec = IfnData('custom', df=dradf_rec, conditions={'Alpha': {'Ib': 0}})
    drb60_rec = IfnData('custom', df=drbdf_rec, conditions={'Beta': {'Ia': 0}})

    dr_plot = DoseresponsePlot((1, 1))
    alpha_mask = []
    beta_mask = []
    # Add fits
    for idx, t in enumerate([el for el in times]):
        if t not in alpha_mask:
            dr_plot.add_trajectory(dra60, t, 'plot', alpha_palette[5], (0, 0), 'Alpha', label='Alpha - No Feedback', linewidth=2.0)
            dr_plot.add_trajectory(dra60_int, t, 'plot', '--', (0, 0), 'Alpha', color=alpha_palette[3],
                                   label='Internalization only', linewidth=2.0, )
Exemple #26
0
                      parameters={'Ib': 0},
                      sf=scale_factor,
                      **DR_KWARGS)

    drb60 = DR_method(times,
                      'TotalpSTAT',
                      'Ib',
                      list(logspace(-1, 4)),
                      parameters={'Ia': 0},
                      sf=scale_factor,
                      **DR_KWARGS)

    # ----------------------------------
    # Get all data set EC50 time courses
    # ----------------------------------
    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    # 20190108
    ec50_20190108 = newdata_1.get_ec50s()

    # 20190119
    ec50_20190119 = newdata_2.get_ec50s()

    # 20190121
    ec50_20190121 = newdata_3.get_ec50s()

    # 20190214
    ec50_20190214 = newdata_4.get_ec50s()
Exemple #27
0
Mixed_Model.model_1.set_parameters({'R1': 12000.0, 'R2': 1511.1})
Mixed_Model.model_2.set_parameters(initial_parameters)
Mixed_Model.model_2.set_parameters(dual_parameters)
Mixed_Model.model_2.set_parameters({'R1': 6755.56, 'R2': 1511.2})

Mixed_Model.model_1.default_parameters = Mixed_Model.model_1.parameters
Mixed_Model.model_2.default_parameters = Mixed_Model.model_2.parameters

tspan = [2.5, 5.0, 7.5, 10.0, 20.0, 60.0]
alpha_doses = [10, 100, 300, 1000, 3000, 10000, 100000]
beta_doses = [0.2, 6, 20, 60, 200, 600, 2000]

# Load experimental data to which model will be fit.
# The "experimental data" is the TotalpSTAT trajectory for Alpha, then Beta, at each dose.
# Standard deviations are kept separate but match the same order.
newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

alignment = DataAlignment()
alignment.add_data([newdata_4, newdata_3, newdata_2, newdata_1])
alignment.align()
alignment.get_scaled_data()
mean_data = alignment.summarize_data()
exp_data = np.array([[el[0] for el in dose]
                     for dose in mean_data.data_set.values]).flatten()
exp_data_std = np.array([[el[1] for el in dose]
                         for dose in mean_data.data_set.values]).flatten()

#Create scipy normal probability distributions for data likelihoods
Exemple #28
0
from ifnclass.ifndata import IfnData
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import Trajectory, TimecoursePlot, DoseresponsePlot
from ifnclass.ifnfit import StepwiseFit
from numpy import linspace, logspace, log10, nan
import seaborn as sns
from smooth_B6_IFN import * # Imports smoothed data to fit to
import pickle

if __name__ == '__main__':
    newdata = IfnData("20181113_B6_IFNs_Dose_Response_Bcells")
    Mixed_Model = IfnModel('Mixed_IFN_ppCompatible')
    alpha_palette = sns.color_palette("Reds", 6)
    beta_palette = sns.color_palette("Greens", 6)

    # Stepwise fitting
    # ----------------
    # First fit the 2.5 minute data
    stepfit25 = StepwiseFit(Mixed_Model, smooth5IfnData,
                            {'kpu': (0.001, 0.006), 'kd4': (0.03, 0.1), 'k_d4': (0.03, 0.1),
                             'R1': (3000, 4000), 'R2': (4000, 5000),
                             'ka1': (3.321e-14 * 0.5, 3.321e-14 * 2),
                             'ka2': (4.9817e-13 * 0.5, 4.9817e-13 * 2)}, n=2)
    best_parameters, best_scale_factor = stepfit25.fit()
    print("The fit for 5 minutes was:")
    print(best_parameters)
    print(best_scale_factor)
    scale_data = lambda q: (best_scale_factor*q[0], best_scale_factor*q[1])

    # Generate a figure of this fit
    #   First simulate continuous dose-response curve
Exemple #29
0
from ifnclass.ifndata import IfnData, DataAlignment
from ifnclass.ifnmodel import IfnModel
from ifnclass.ifnplot import DoseresponsePlot, TimecoursePlot
import seaborn as sns
import numpy as np
import pandas as pd
from ifnclass.ifnfit import StepwiseFit

if __name__ == '__main__':
    # ------------------------------
    # Align all data
    # ------------------------------
    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    alignment = DataAlignment()
    alignment.add_data([newdata_4, newdata_3, newdata_2, newdata_1])
    alignment.align()
    alignment.get_scaled_data()
    mean_data = alignment.summarize_data()

    # -------------------------------
    # Initialize model
    # -------------------------------
    times = newdata_4.get_times('Alpha')
    doses_alpha = newdata_4.get_doses('Alpha')
    doses_beta = newdata_4.get_doses('Beta')
    Mixed_Model = IfnModel('Mixed_IFN_ppCompatible')
    Mixed_Model.set_parameters({
Exemple #30
0
if __name__ == '__main__':
    # ----------------------
    # Set up figure layout
    # ----------------------
    spec_fig = DoseresponsePlot((3, 2))
    spec_fig.fig.set_size_inches(12, 8)
    # ---------------------------
    # Set up data for comparison
    # ---------------------------
    alpha_palette = sns.color_palette("Reds", 6)
    beta_palette = sns.color_palette("Greens", 6)
    data_palette = sns.color_palette("muted", 6)
    marker_shape = ["o", "v", "s", "P", "d", "1", "x", "*"]
    dataset_names = ["20190108", "20190119", "20190121", "20190214"]

    newdata_1 = IfnData("20190108_pSTAT1_IFN_Bcell")
    newdata_2 = IfnData("20190119_pSTAT1_IFN_Bcell")
    newdata_3 = IfnData("20190121_pSTAT1_IFN_Bcell")
    newdata_4 = IfnData("20190214_pSTAT1_IFN_Bcell")

    # Aligned data, to get scale factors for each data set
    alignment = DataAlignment()
    alignment.add_data([newdata_4, newdata_3, newdata_2, newdata_1])
    alignment.align()
    alignment.get_scaled_data()
    mean_data = alignment.summarize_data()

    # --------------------
    # Set up Model
    # --------------------
    # Parameters found by stepwise fitting GAB mean data