示例#1
0
 def testFitBootstrap(self):
     if IGNORE_TEST:
         return
     study = ModelStudy(th.ANTIMONY_MODEL, DATA_PATHS,
           parametersToFit=PARAMETERS_TO_FIT,
           dirStudyPath=SERIALIZE_DIR, isPlot=IS_PLOT, useSerialized=False)
     study.bootstrap(numIteration=10)
     for fitter in study.fitterDct.values():
         self.assertIsNotNone(fitter.bootstrapResult)
示例#2
0
 def setUp(self):
     self._remove()
     self.parametersToFit = list(th.PARAMETER_DCT.keys())
     self.study = ModelStudy(th.ANTIMONY_MODEL,
                             DATA_PATHS,
                             parametersToFit=PARAMETERS_TO_FIT,
                             dirStudyPath=SERIALIZE_DIR,
                             isPlot=IS_PLOT,
                             useSerialized=True)
 def runVirus(self, values):
     ANTIMONY_MODEL = '''
         // Equations
         E1: T -> E ; beta*T*V ; // Target cells to exposed
         E2: E -> I ; kappa*E ;  // Exposed cells to infected
         E3: -> V ; p*I ;        // Virus production by infected cells
         E4: V -> ; c*V ;        // Virus clearance
         E5: I -> ; delta*I      // Death of infected cells    
     
         // Parameters - from the Influenza article,
             
         beta = 3.2e-5;  // rate of transition of target(T) to exposed(E) cells, in units of 1/[V] * 1/day
         kappa = 4.0;    // rate of transition from exposed(E) to infected(I) cells, in units of 1/day
         delta = 5.2;    // rate of death of infected cells(I), in units of 1/day
         p = 4.6e-2;     // rate virus(V) producion by infected cells(I), in units of [V]/day
         c = 5.2;        // rate of virus clearance, in units of 1/day
     
         // Initial conditions
         T = 4E+8 // estimate of the total number of susceptible epithelial cells
                  // in upper respiratory tract)
         E = 0
         I = 0
         V = 0.75 // the dose of virus in TCID50 in Influenza experiment; could be V=0 and I = 20 instead for a natural infection
         
         // Computed values
         log10V := log10(V)
     
     '''
     dataSource = self.mkTimeSeries(values, "log10V")
     parameterDct = dict(
         beta=(0, 10e-5, 3.2e-5),
         kappa=(0, 10, 4.0),
         delta=(0, 10, 5.2),
         p=(0, 1, 4.6e-2),
         c=(0, 10, 5.2),
     )
     if IGNORE_TEST:
         logger = logs.Logger(logLevel=logs.LEVEL_MAX)
     else:
         logger = LOGGER
     study = ModelStudy(ANTIMONY_MODEL, [dataSource],
                        parameterDct=parameterDct,
                        selectedColumns=["log10V"],
                        doSerialize=False,
                        useSerialized=False,
                        logger=logger)
     study.bootstrap(numIteration=100)
     fitter = list(study.fitterDct.values())[0]
     if IS_PLOT and (fitter.bootstrapResult is not None):
         study.plotFitAll()
     fitter = study.fitterDct["src_1"]
     for name in parameterDct.keys():
         if fitter.bootstrapResult is not None:
             value = fitter.bootstrapResult.params.valuesdict()[name]
             self.assertIsNotNone(value)
示例#4
0
 def testConstructor1(self):
     if IGNORE_TEST:
         return
     self.assertGreater(len(self.study.fitterDct.values()), 0)
     # Ensure that ModelFitters are serialized correctly
     study = ModelStudy(th.ANTIMONY_MODEL, DATA_PATHS,
           parametersToFit=self.parametersToFit,
           dirStudyPath=SERIALIZE_DIR, isPlot=IS_PLOT)
     for name in self.study.instanceNames:
         self.assertEqual(study.fitterDct[name].modelSpecification,
               self.study.fitterDct[name].modelSpecification)
示例#5
0
def runStudy(model, dirStudyPath):
    study = ModelStudy(model,                     # Antimony model to evaluate
                   dataSourceDct,                 # Data sources to use for fitting
                   parameterDct=parameterDct,     # Parameters and their value ranges
                   dirStudyPath=dirStudyPath,     # Where to store the results of bootstrapping
                   selectedColumns=["log10V"],    # Output column is computed in the assignment rule
                   doSerialize=DO_SERIALIZE,      # Save the results of bootstrapping
                   useSerialized=USE_SERIALIZED)  # Use previously calculated bootstrap results if they are present

    study.bootstrap(numIteration=NUM_BOOTSTRAP_ITERATION)  # Do bootstrapping
    print("\n\n")
    study.plotFitAll(ylim=[0, 9])                          # Plot fitted and observed values with band plots for confidence
    print("\n\n")
    study.plotParameterEstimates()                         # Plot the parameter estimates for each data source