\(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\R}[1]{ {\rm #1} }\)
max_fit_option¶
View page sourceExample Using max_fit Option¶
For this example everything is constant in age and time.
Nodes¶
The following is a diagram of the node tree for this example. The root_node is n0, the fit_goal_set is {n3, n4, n5, n6}, and the leaf nodes are {n3, n4, n5, n6}:
n0
/-----/\-----\
n1 (n2)
/ \ / \
(n3) (n4) n5 n6
fit_goal_set¶
fit_goal_set = { 'n3', 'n4', 'n5', 'n6' }
Rates¶
The only non-zero dismod_at rate for this example is iota.
Covariate¶
There are no covariates for this example.
Simulated Data¶
Random Seed¶
The random seed can be used to reproduce results. If the original value of this setting is zero, the clock is used get a random seed. The actual value or random_seed is always printed.
random_seed = 0
if random_seed == 0 :
random_seed = int( time.time() )
random.seed(random_seed)
print('max_fit_option: random_seed = ', random_seed)
rate_true(rate, a, t, n, c)¶
For rate equal to iota, this is the true value for rate in node n at age a, time t, and covariate values c. The values a, t. c, are not used by this function for this example.
def rate_true(rate, a, t, n, c) :
iota_true = {
'n3' : 0.04,
'n4' : 0.05,
'n5' : 0.06,
'n6' : 0.07,
}
iota_true['n1'] = (iota_true['n3'] + iota_true['n4']) / 2.0
iota_true['n2'] = (iota_true['n5'] + iota_true['n6']) / 2.0
iota_true['n0'] = (iota_true['n1'] + iota_true['n2']) / 2.0
if rate == 'iota' :
return iota_true[n]
return 0.0
y_i¶
The only simulated integrand for this example is Sincidence which is a direct measurement of iota. This data is simulated without any noise; i.e., the i-th measurement is simulated as y_i = rate_true(‘iota’, None, None, n_i, None) where n_i is the node. The data is modeled as having noise even though there is no simulated noise.
n_i¶
Data is only simulated for the leaf nodes; i.e., each n_i is in the set { n3, n4, n5, n6 }. Since the data does not have any nose, the data residuals are a measure of how good the fit is for the nodes in the fit_goal_set.
max_fit_option¶
This is the value of the max_fit option. It is also the number of data values per leaf. Thus the leaf nodes fit all their data while the other nodes only fit a randomly chosen subset of their data.
max_fit_option = 10
perturb_optimization_scale¶
This is the value of the perturb_optimization_scale option. It is only included as an example of using this option and is not necessary.
perturb_optimization_scale = 0.2
Parent Rate Smoothing¶
This is the iota smoothing used for the fit_node. There are no dage or dtime priors because there is only one age and one time point.
Value Prior¶
The following is the value prior used for the root_node
{ 'name': 'parent_value_prior',
'density': 'gaussian',
'lower': iota_mean / 10.0,
'upper': iota_mean * 10.0,
'mean': iota_mean,
'std': iota_mean,
'eta': iota_mean * 1e-3
}
The mean and standard deviation are only used for the root_node. The create_shift_db routine replaces them for other nodes.
Child Rate Smoothing¶
This is the smoothing used for the random effect for each child of the fit_node. There are no dage or dtime priors because there is only one age and one time point in this smoothing.
Value Prior¶
The following is the value prior used for the children of the fit_node:
{ 'name': 'child_value_prior',
'density': 'gaussian',
'mean': 0.0,
'std': 10.0,
}
Checking The Fit¶
The results of the fit are checked by check_cascade_node using the avgint_table that was created by the root_node_db routine. The node_id for each row is replaced by the node_id for the fit being checked. routine uses these tables to check that fit against the truth.
Child |
Title |
|---|---|
max_fit_option.py |