Skip to content

Commit 910b9a2

Browse files
committed
Add non-centered paramaterization in skygrid
1 parent c4f79ff commit 910b9a2

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

phylostan/generate_script.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,16 +1118,25 @@ def get_model(params):
11181118
model_priors.append('tau ~ gamma(0.001, 0.001);')
11191119
elif params.coalescent == 'skygrid':
11201120
functions_block.append(skygrid_coalescent())
1121-
transformed_parameters_declarations.append('vector[G] deltaThetas = thetas[2:] - thetas[:G];')
11221121

11231122
data_block.append('int G; // number of grid interval')
11241123
data_block.append('vector<lower=0>[G] grid;')
11251124

1126-
parameters_block.append('vector[G+1] thetas; // log space')
11271125
parameters_block.append('real<lower=0> tau;')
11281126

1127+
if params.non_centered:
1128+
parameters_block.append('real theta1;')
1129+
parameters_block.append('vector[G] deltaThetas;')
1130+
transformed_parameters_declarations.append('real<lower=0> sigma = 1.0/sqrt(tau);')
1131+
transformed_parameters_declarations.append('vector[G+1] thetas;')
1132+
transformed_parameters_block.append('thetas = cumulative_sum(append_row(theta1, sigma * deltaThetas));')
1133+
model_priors.append('deltaThetas ~ normal(0.0, 1.0);')
1134+
else:
1135+
parameters_block.append('vector[G+1] thetas; // log space')
1136+
transformed_parameters_declarations.append('vector[G] deltaThetas = thetas[2:] - thetas[:G];')
1137+
model_priors.append('deltaThetas ~ normal(0.0, 1.0/sqrt(tau));')
1138+
11291139
model_priors.append('heights ~ skygrid_coalescent(thetas, map, grid);')
1130-
model_priors.append('deltaThetas ~ normal(0.0, 1.0/sqrt(tau));')
11311140
model_priors.append('tau ~ gamma(0.001, 0.001);')
11321141
else:
11331142
parameters_block.append('vector<lower=0> [bcount] blens; // branch lengths')

phylostan/phylostan.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def create_build_parser(subprasers, prog, help):
8989
help="""Speciation model (birth-death or Yule)""")
9090
parser.add_argument('--grid', metavar='I', required=False, type=int, help="""Number of grid points in skygrid""")
9191
parser.add_argument('--cutoff', metavar='G', required=False, type=float, help="""a cutoff for skygrid""")
92+
parser.add_argument('--non_centered', action="store_true",
93+
help="""Use non centered parameterization for population size parameters (skygrid only)""")
9294
parser.add_argument('--time_aware', action="store_true", help="""Use time-aware GMRF (skyride only)""")
9395
parser.add_argument('--compile', action="store_true", help="""Compile Stan script""")
9496
parser.add_argument('--rescaling', action="store_true", help="""Use rescaling in DNA tree likelihood calculation""")
@@ -99,7 +101,7 @@ def create_build_parser(subprasers, prog, help):
99101

100102
def create_compile_parser(subprasers, prog, help):
101103
parser = subprasers.add_parser(prog, help=help)
102-
parser.add_argument('-s', '--script', required=True, type=argparse.FileType('r'), help="""Stan script file""")
104+
parser.add_argument('-s', '--script', required=True, help="""Stan script file""")
103105
return parser
104106

105107

@@ -164,15 +166,19 @@ def build(arg):
164166
fp.write(script)
165167

166168
if arg.compile:
167-
compile_script(arg.script.name)
169+
compile_script_func(arg.script)
168170

169171

170172
def compile_script(arg):
171-
binary = arg.script.name.replace('.stan', '.pkl')
173+
compile_script_func(arg.script)
174+
175+
176+
def compile_script_func(script_name):
177+
binary = script_name.replace('.stan', '.pkl')
172178
# arg.script does not end with .stan
173-
if binary == arg.script.name:
174-
binary = arg.script.name + '.pkl'
175-
sm = pystan.StanModel(file=arg.script.name)
179+
if binary == script_name:
180+
binary = script_name + '.pkl'
181+
sm = pystan.StanModel(file=script_name)
176182
with open(binary, 'wb') as f:
177183
pickle.dump(sm, f)
178184

0 commit comments

Comments
 (0)