Prev
Next
Index->
contents
reference
index
search
external
Up->
dismod_at
user_example
user_age_avg_split.py
user_age_avg_split.py
@(@\newcommand{\B}[1]{ {\bf #1} }
\newcommand{\R}[1]{ {\rm #1} }
\newcommand{\W}[1]{ \; #1 \; }@)@This is dismod_at-20221105 documentation: Here is a link to its
current documentation
.
Non-uniform Age Average Grid
Purpose
Variables
Prior
Data
Fit
Predict
ode_step_size
age_avg_split
Source Code
Purpose
This example demonstrate one reason for using the
age_avg_split
option to create an
age average grid
that is not uniformly spaced.
Variables
For this case there is only one rate
omega
for the parent node
and there are no other model_variables
.
Prior
The prior for
omega
is mean 0.1
and standard deviation
.01
for ages 0.0
and 0.9
.
The prior for
omega
is mean 0.01
and standard deviation
0.001
for ages 1.1
and 100.0
.
Data
There is no data for this model; i.e., the prior is the only
information available.
Fit
A fit is done, and this should make fit_var_table
equal to the mean of the prior.
Predict
A predict is done for other cause mortality for two cases.
The first case averages over the age interval [ 0.0, 0.9 ]
.
The second case averages over the age interval [ 1.1, 100.0 ]
.
ode_step_size
The ode_step_size
is
50.0
for this example.
If there were no
age_avg_split
, a linear approximation
would be used from age 0.0 to age 50.
age_avg_split
The age average grid is split at age 1.0
; i.e.,
The age average grid points are 0.0
, 1.0
, 50.0
, and
100.0
.
A piecewise linear function of age is used between these grid points.
(Note everything is constant w.r.t time for this case.)
Source Code
# true values used to simulate data
omega_0_1 = 1e-1
omega_1_100 = 1e-2
# ------------------------------------------------------------------------
import sys
import os
import copy
test_program = 'example/user/age_avg_split.py'
if sys. argv[ 0 ] != test_program or len ( sys. argv) != 1 :
usage = 'python3 ' + test_program + '\n'
usage += 'where python3 is the python 3 program on your system\n'
usage += 'and working directory is the dismod_at distribution directory\n'
sys. exit ( usage)
print ( test_program)
#
# import dismod_at
local_dir = os. getcwd () + '/python'
if ( os. path. isdir ( local_dir + '/dismod_at' ) ) :
sys. path. insert ( 0 , local_dir)
import dismod_at
#
# change into the build/example/user directory
if not os. path. exists ( 'build/example/user' ) :
os. makedirs ( 'build/example/user' )
os. chdir ( 'build/example/user' )
# ------------------------------------------------------------------------
# Note that the a, t values are used for this example
def example_db ( file_name) :
#
def fun_omega_parent ( a, t) :
if a <= 1.0 :
return ( 'prior_0_1' , 'prior_none' , 'prior_none' )
else :
return ( 'prior_1_100' , 'prior_none' , 'prior_none' )
#
def omega_true ( a) :
if a < 1.0 :
return omega_0_1
else :
return omega_1_100
#
# ----------------------------------------------------------------------
# age table
age_list = [ 0.0 , 0.9 , 1.1 , 100.0 ]
#
# time table
time_list = [ 1995.0 , 2015.0 ]
#
# integrand table
integrand_table = [
{ 'name' : 'mtother' }
]
#
# node table: world
node_table = [ { 'name' : 'world' , 'parent' : '' } ]
#
# weight table:
weight_table = list ()
#
# covariate table:
covariate_table = list ()
#
# mulcov table
mulcov_table = list ()
#
# avgint table
avgint_table = list ()
row = {
'integrand' : 'mtother' ,
'node' : 'world' ,
'subgroup' : 'world' ,
'weight' : '' ,
}
row[ 'age_lower' ] = 0.0
row[ 'age_upper' ] = 0.9
row[ 'time_lower' ] = 2000.0
row[ 'time_upper' ] = 2000.0
avgint_table. append ( copy. copy ( row) )
row[ 'age_lower' ] = 1.1
row[ 'age_upper' ] = 100.0
row[ 'time_lower' ] = 2000.0
row[ 'time_upper' ] = 2000.0
avgint_table. append ( copy. copy ( row) )
#
# nslist_table:
nslist_table = dict ()
#
# data table:
data_table = list ()
# ----------------------------------------------------------------------
# prior_table
prior_table = [
{ # prior_none
'name' : 'prior_none' ,
'density' : 'uniform' ,
'mean' : 0.0 ,
},{ # prior_0_1
'name' : 'prior_0_1' ,
'density' : 'gaussian' ,
'mean' : omega_0_1,
'std' : 1e-1 * omega_0_1
},{ # prior_1_100
'name' : 'prior_1_100' ,
'density' : 'gaussian' ,
'mean' : omega_1_100,
'std' : 1e-1 * omega_1_100
}
]
# ----------------------------------------------------------------------
# smooth table
#
smooth_table = [
{ # smooth_omega_parent
'name' : 'smooth_omega_parent' ,
'age_id' : [ 0 , 1 , 2 , 3 ],
'time_id' : [ 0 , 1 ],
'fun' : fun_omega_parent
}
]
# ----------------------------------------------------------------------
# rate table
rate_table = [
{
'name' : 'omega' ,
'parent_smooth' : 'smooth_omega_parent'
}
]
# ----------------------------------------------------------------------
# option_table
option_table = [
{ 'name' : 'parent_node_name' , 'value' : 'world' },
{ 'name' : 'ode_step_size' , 'value' : '50.0' },
{ 'name' : 'age_avg_split' , 'value' : '1.0' },
{ 'name' : 'random_seed' , 'value' : '0' },
{ 'name' : 'rate_case' , 'value' : 'iota_zero_rho_zero' }
]
# ----------------------------------------------------------------------
# subgroup_table
subgroup_table = [ { 'subgroup' : 'world' , 'group' : 'world' } ]
# ----------------------------------------------------------------------
# create database
dismod_at. create_database (
file_name,
age_list,
time_list,
integrand_table,
node_table,
subgroup_table,
weight_table,
covariate_table,
avgint_table,
data_table,
prior_table,
smooth_table,
nslist_table,
rate_table,
mulcov_table,
option_table
)
# ----------------------------------------------------------------------
return
# ===========================================================================
file_name = 'example.db'
example_db ( file_name)
#
program = '../../devel/dismod_at'
dismod_at. system_command_prc ([ program, file_name, 'init' ] )
dismod_at. system_command_prc ([ program, file_name, 'fit' , 'both' ] )
dismod_at. system_command_prc ([ program, file_name, 'predict' , 'fit_var' ] )
# -----------------------------------------------------------------------
# connect to database
new = False
connection = dismod_at. create_connection ( file_name, new)
# -----------------------------------------------------------------------
# Results for fitting with no noise
var_table = dismod_at. get_table_dict ( connection, 'var' )
predict_table = dismod_at. get_table_dict ( connection, 'predict' )
#
parent_node_id = 1
eps = 1e-4
#
# check rates values
tolerance = 1e-10
for row in predict_table :
avgint_id = row[ 'avgint_id' ]
if avgint_id == 0 :
value_true = omega_0_1
else :
value_true = omega_1_100
value = row[ 'avg_integrand' ]
assert ( abs ( 1.0 - value / value_true) < tolerance)
# -----------------------------------------------------------------------------
print ( 'age_avg_split.py: OK' )
# -----------------------------------------------------------------------------
Input File: example/user/age_avg_split.py