├── .gitignore ├── LICENSE ├── README.md ├── Rsbc ├── generate_plots_sbc_inla.R ├── generate_space.R ├── output_sbc_inla.RData ├── run_sbc_inla.R └── sbc_inla.RData └── pysbc ├── sbc.py ├── schools-centered.ipynb ├── schools-thin.ipynb ├── schools-unthinned.ipynb ├── stan_utility.py └── wide_lin_regr.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # simulation-based-calibration 2 | Repo for code from the SBC paper 3 | -------------------------------------------------------------------------------- /Rsbc/generate_plots_sbc_inla.R: -------------------------------------------------------------------------------- 1 | library(bayesplot) 2 | library(ggplot2) 3 | 4 | ppc_ecdf_overlay_2 <- function (y, yrep, ..., pad = TRUE, size = 0.25, alpha = 0.7) 5 | { 6 | 7 | y <- bayesplot:::validate_y(y) 8 | yrep <- bayesplot:::validate_yrep(yrep, y) 9 | ggplot(bayesplot:::melt_yrep(yrep), aes_(x = ~value)) + hline_at(c(0, 10 | 0.5, 1), size = c(0.2, 0.1, 0.2), linetype = 2, color = bayesplot:::get_color("dh")) + 11 | stat_ecdf(mapping = aes_(group = ~rep_id, color = "yrep"), 12 | geom = "step", size = size, alpha = alpha, pad = pad) + 13 | stat_ecdf(data = data.frame(value = y), mapping = aes_(color = "y"), 14 | geom = c("step"), size = 1, pad = pad) + bayesplot:::scale_color_ppc_dist() + 15 | xlab(bayesplot:::y_label()) + 16 | scale_x_continuous(limits=c(0,100),expand=c(0,0)) + scale_y_continuous(limits=c(0,1),expand=c(0,0),breaks = c(0, 0.5, 17 | 1)) + yaxis_title(FALSE) + xaxis_title(FALSE) + yaxis_ticks(FALSE) 18 | } 19 | 20 | 21 | load(file = "output_sbc_inla.RData") 22 | 23 | 24 | for(i in 1:5) { 25 | fname = paste("adm",i,".samples",sep="") 26 | write(rrr[,i],ncolumns = 1,file = fname) 27 | 28 | samps = matrix(sample(c(1:100),size = 1000*500, replace=T),500,1000) 29 | ppc_ecdf_overlay_2(rrr[,i],samps) + geom_abline(slope=1/100,intercept=0,colour="grey45",linetype="dashed") 30 | fname2=paste("adm",i,"_ecdf.eps",sep="") 31 | ggsave(filename = fname2,device = "cairo_ps",family="serif") 32 | 33 | 34 | 35 | } 36 | 37 | 38 | if(FALSE) { 39 | #ggplot version of the gnuplot histograms 40 | 41 | rr = data.frame(adm11 = rrr[,1]) 42 | n_breaks=101 43 | 44 | #approximate CI (slightly conservative) 45 | mean=1000/n_breaks 46 | sd = sqrt(mean) 47 | ggplot(rr,aes(x=adm11)) + geom_segment(aes(x=0,y=mean,xend=100,yend=mean),colour="grey25") + 48 | geom_polygon(data=data.frame(x=c(-5,0,-5,105,100,105,-5),y=c(mean-3*sd,mean,mean+3*sd,mean+3*sd,mean,mean-3*sd,mean-3*sd)),aes(x=x,y=y),fill="grey45",color="grey25",alpha=0.5) + 49 | geom_histogram(breaks=seq(-1,100,by=100/n_breaks),fill="#A25050",colour="black") 50 | 51 | #exact CI 52 | CI = qbinom(c(0.005,0.5,0.995), size=1000,prob = 1/101) 53 | 54 | ggplot(rr,aes(x=adm11)) + geom_segment(aes(x=0,y=mean,xend=100,yend=mean),colour="grey25") + 55 | geom_polygon(data=data.frame(x=c(-5,0,-5,105,100,105,-5),y=c(CI[1],CI[2],CI[3],CI[3],CI[2],CI[1],CI[1])),aes(x=x,y=y),fill="grey45",color="grey25",alpha=0.5) + 56 | geom_histogram(breaks=seq(-1,100,by=100/n_breaks),fill="#A25050",colour="black") 57 | 58 | } 59 | 60 | -------------------------------------------------------------------------------- /Rsbc/generate_space.R: -------------------------------------------------------------------------------- 1 | generate_data = function(spde, A.gen, N,m ) 2 | { 3 | #generate field from pcmatern 4 | #NB: tHis REALLY assumes spde was made with inla.spde2.pcmatern 5 | #It will fail WEIRDLY if this is not true!!!! 6 | params = spde$f$hyper.default$theta1$param[1:2] 7 | lambda_range = params[1] 8 | lambda_sigma = params[2] 9 | 10 | sigma = rexp(1,lambda_sigma) 11 | range = 1/rgamma(1,shape=1,rate=lambda_range) 12 | #browser() 13 | Q = INLA::inla.spde2.precision(spde,c(log(range),log(sigma))) 14 | 15 | 16 | field = as.numeric(INLA::inla.qsample(1,Q)) 17 | 18 | #generate logit intercept 19 | #quantiles of inv.logit(rnorm(100000,-2.5,1.5)) 20 | #This is weakly informative based on global incence from 0.3%-20% 21 | #incidence in Kenya is 5-7% (depending on the year (5% in 2016, 7% in 2003)) 22 | # 1% 10% 50% 90% 99% 23 | # 0.002469285 0.011752410 0.075601298 0.357199965 0.727354083 24 | logit_intercept = rnorm(1,-2.5,1.5) 25 | 26 | 27 | ## generate iid noise 28 | # PC prior with alpha=0.05, U=1 29 | ##generate data 30 | lam_iid = -log(0.05)/1 31 | sigma_iid = rexp(1,lam_iid) 32 | v = rnorm(sum(m), sd = sigma_iid) 33 | 34 | 35 | ## generate logit_p 36 | 37 | logit.prev= rep( rep(logit_intercept, 38 | length(dim(loc.data)[1]))+as.numeric(A.gen%*%field),times=m) + v 39 | 40 | y = rbinom(sum(m),N,exp(logit.prev)/(1+exp(logit.prev))) 41 | 42 | 43 | 44 | return( 45 | list( 46 | hyper = list(log_range=log(range),log_sigma = log(sigma),log_prec = -2*log(sigma_iid)), 47 | logit_intercept = logit_intercept, 48 | field = field, 49 | v=v, 50 | y=y 51 | ) 52 | ) 53 | } 54 | 55 | functionals = function(field,mesh,points.mc) { 56 | 57 | ## Field may be a matrix! 58 | 59 | K =length(points.mc) 60 | out = list() 61 | 62 | inv.logit = function(x) {exp(x)/(1+exp(x))} 63 | 64 | 65 | for ( k in 1:K ) { 66 | A.mc = inla.spde.make.A(mesh,points.mc[[k]]) 67 | int_vals = inv.logit(A.mc%*%field) 68 | out[[k]] = apply(X=int_vals,MARGIN=2,FUN = mean) 69 | } 70 | 71 | return(out) 72 | } 73 | 74 | rank_functionals = function(y,N,spde,A.est,m,functional_true,inla_seed) { 75 | 76 | ## Set up INLA formula and data 77 | formula = y ~ -1 + intercept + f(field, model=spde) + f(eps,model="iid",hyper = list(prec=list(hyper="pc.prec",param=c(1,0.05)))) 78 | spde.index = inla.spde.make.index("field",spde$n.spde) 79 | stack.est = inla.stack( data = list(y = y,N=N), A = list(A.est,1), effects=list(c(spde.index,list(intercept=1)), list(eps = seq_len(length(y)) ))) 80 | 81 | 82 | #This takes about 1 minute 83 | result = inla(formula, family="binomial", Ntrials=N, 84 | data=inla.stack.data(stack.est), 85 | control.predictor = list(compute=TRUE, 86 | A=inla.stack.A(stack.est)), 87 | control.fixed = list(mean.intercept = -2.15 ,prec.intercept =1.5^(-2) ), 88 | verbose=FALSE,control.compute = list(config=TRUE),num.threads = 1) 89 | 90 | 91 | #This takes about 10 secs 92 | samps = inla.posterior.sample(100,result,seed = inla_seed) 93 | index.field=grep(x = row.names(samps[[1]]$latent),pattern="field*") 94 | index.intercept = which(row.names(samps[[1]]$latent)=="intercept") 95 | 96 | ## I hope this works 97 | 98 | logit_prev = sapply(X=samps, FUN = function(samp) as.numeric(samp$latent[index.field]+ samp$latent[index.intercept])) 99 | functionals = (functionals(logit_prev,mesh,points.mc)) 100 | 101 | rank = rep(NA,length(functional_true)) 102 | for(i in 1:length(functional_true)) { 103 | rank[i] = sum(functionals[[i]] < functional_true[[i]]) 104 | } 105 | 106 | return(rank) 107 | } 108 | 109 | 110 | sbc = function() { 111 | dat = generate_data(spde, A.gen, N, m) 112 | logit_prev_true = dat$logit_intercept+ dat$field 113 | functional_true = functionals(logit_prev_true,mesh,points.mc) 114 | ranks = rank_functionals(dat$y,N,spde,A.est,m,functional_true,0L) 115 | return(ranks) 116 | } 117 | 118 | -------------------------------------------------------------------------------- /Rsbc/output_sbc_inla.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seantalts/simulation-based-calibration/7ace506c903cd12fee36d7f59f76ee94ea9b4070/Rsbc/output_sbc_inla.RData -------------------------------------------------------------------------------- /Rsbc/run_sbc_inla.R: -------------------------------------------------------------------------------- 1 | #setwd("~/Documents/sbc/Rcode") 2 | set.seed(666) 3 | 4 | 5 | library(doParallel) 6 | library(foreach) 7 | 8 | cl <- makeCluster(50) 9 | registerDoParallel(cl) 10 | 11 | print(getDoParWorkers()) 12 | 13 | load("sbc_inla.RData") 14 | source("generate_space.R") 15 | rrr=foreach(dummy=c(1:1000), .combine = rbind) %dopar% { 16 | library(INLA) 17 | sbc() 18 | } 19 | 20 | stopCluster(cl) 21 | 22 | save(rrr, file = "output.RData") 23 | 24 | # 25 | # n_rep=10 26 | # 27 | # 28 | # for (j in 6:95){ 29 | # ranks = matrix(NA,n_rep,length(points.mc)) 30 | # print(j) 31 | # for (i in 1:n_rep) { 32 | # 33 | # inla_seed = as.integer(runif(1)*.Machine$integer.max) 34 | # 35 | # dat = generate_data(spde, A.gen, N, m) 36 | # logit_prev_true = dat$logit_intercept+ dat$field 37 | # functional_true = functionals(logit_prev_true,mesh,points.mc) 38 | # ranks[i,] = rank_functionals(dat$y,N,spde,A.est,m,functional_true,0L) 39 | # } 40 | # 41 | # assign(paste("ranks_",j,"_10",sep=""),ranks) 42 | # rr = rbind(rr,ranks) 43 | # save(list=paste("ranks_",j,"_10",sep=""),file=paste("rank",j,"_10.RData",sep="")) 44 | # } 45 | -------------------------------------------------------------------------------- /Rsbc/sbc_inla.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seantalts/simulation-based-calibration/7ace506c903cd12fee36d7f59f76ee94ea9b4070/Rsbc/sbc_inla.RData -------------------------------------------------------------------------------- /pysbc/sbc.py: -------------------------------------------------------------------------------- 1 | import stan_utility 2 | import pystan 3 | import pandas as pd 4 | import numpy as np 5 | from pathos.multiprocessing import Pool, cpu_count 6 | 7 | from collections import Counter 8 | import re 9 | import os.path 10 | from functools import wraps, reduce 11 | import time 12 | 13 | 14 | SEED = 1234 15 | ### 16 | # 1. Run DGP model to generate draws. (num_replications, 17 | # 2. Get a fit for each set of data drawn, but can't save them. (control dict, 18 | # 3. Optionally thin 19 | # 4. Rank prior theta within samples 20 | # 5. Return prior thetas, ranks, some fits for 21 | 22 | def timed(fn): 23 | @wraps(fn) 24 | def timed_wrapped(*args, **kwargs): 25 | start = time.time() 26 | r = fn(*args, **kwargs) 27 | end = time.time() 28 | print("{0} took {1}s".format(fn.__name__, end-start)) 29 | return r 30 | return timed_wrapped 31 | 32 | def _model_name(filename): 33 | return os.path.basename(filename).replace(".stan", "") 34 | 35 | def _dict_to_filename(dict_): 36 | if hasattr(dict_, "items"): 37 | return "(" + "_".join("%s=%s" % (k, _dict_to_filename(v)) 38 | for k, v in dict_.items()) + ")" 39 | else: 40 | return dict_ 41 | 42 | def _params(data, fit_df): 43 | return set(data.keys()) & (set(fit_df.keys()) - set(["lp__"])) 44 | 45 | def _run_result(prior_data, stats, params): 46 | stats.update((k + "_prior", prior_data[k]) for k in prior_data if k in params) 47 | return stats 48 | 49 | def _compute_param_stat(data, fit_df, stat): 50 | params = _params(data, fit_df) 51 | return {k: stat(data[k], fit_df[k]) for k in params} 52 | 53 | def _group_params(agg, df): 54 | params = [re.sub("\[\d+\]$", "", x, 1) for x in df.keys() 55 | if x.endswith("]")] 56 | param_counts = Counter(params) 57 | for param_name, count in param_counts.items(): 58 | df[param_name] = agg([df["{}[{}]".format(param_name, i)] 59 | for i in range(1, count)]) 60 | return df 61 | 62 | def fit_to_df(fit): 63 | od = fit.extract() 64 | return od 65 | #return pd.DataFrame({k: od[k].tolist() for k in od}) 66 | 67 | def fit_summary(fit): 68 | summary0 = fit.summary() 69 | summary = summary0["summary"] 70 | return pd.DataFrame({"n_eff": [x[-2] for x in summary], 71 | "rhat": [x[-1] for x in summary]}, 72 | index=summary0["summary_rownames"]).T 73 | 74 | #################################### 75 | ## Handy stat functions for SBC 76 | #################################### 77 | 78 | def order_stat(prior_val, posterior_samples): 79 | return np.sum(prior_val < posterior_samples, axis=0) 80 | 81 | def mean_stat(prior_val, posterior_samples): 82 | return np.mean(prior_val < posterior_samples, axis=0) 83 | 84 | def rmse_mean(prior, samples): 85 | return np.sqrt(np.square(np.mean(samples) - prior)) 86 | 87 | def rmse_averaged(prior, samples): 88 | return np.sqrt(np.sum(np.square(samples - prior)) / len(samples)) 89 | 90 | 91 | 92 | class SBC(object): 93 | """This class provides SBC's replication statistics facilities. You can pass 94 | in additional stats to calculate on each replication with stats=[]. 95 | This class can be subclassed to overriding check_fit to look for diagnostics and 96 | optionally write fits to disk (or wherever). Also can override xform_fit to 97 | do something like thinning. 98 | """ 99 | 100 | default_stats = [order_stat] 101 | 102 | def __init__(self, dgp_model_name, fit_model_name, 103 | sampler_args, stats=[], seed=SEED): 104 | self.fit_model_name = fit_model_name 105 | self.fit_model = stan_utility.compile_model(fit_model_name) 106 | self.dgp_model_name = dgp_model_name 107 | self.dgp_model = stan_utility.compile_model(dgp_model_name) 108 | self.sampler_args = sampler_args 109 | self.stats = self.default_stats + stats 110 | self.seed = seed 111 | 112 | def _map(self, fn, coll): 113 | print("Using ", cpu_count(), " cores.") 114 | pool = Pool(cpu_count()) 115 | return pool.imap_unordered(fn, coll, 4) 116 | 117 | #def _map(self, fn, coll): return map(fn, coll) 118 | 119 | def __str__(self): 120 | return "{cls}_{gen}_{fit}_{args}_seed={seed}".format( 121 | cls=self.__class__.__name__, 122 | gen=_model_name(self.dgp_model_name), 123 | fit=_model_name(self.fit_model_name), 124 | args=_dict_to_filename(self.sampler_args), 125 | seed=self.seed) 126 | 127 | 128 | @staticmethod 129 | def _save_fit(fit): 130 | pass 131 | 132 | @staticmethod 133 | def _gen_data_iter(original_data, datasets): 134 | params = list(datasets.keys()) 135 | for i in range(len(datasets[params[0]])): 136 | og = original_data.copy() 137 | og.update({k: datasets[k][i] for k in params}) 138 | yield og 139 | 140 | def run_DGP(self, data, num_datasets): 141 | fit = self.dgp_model.sampling(data=data, iter=num_datasets, 142 | warmup=0, chains=1, algorithm='Fixed_param', 143 | seed=self.seed) 144 | return self._gen_data_iter(data, fit.extract()) 145 | 146 | def fit_data(self, fit_data, sampler_args=None): 147 | if sampler_args: 148 | kwargs = self.sampler_args.copy() 149 | kwargs.update(sampler_args) 150 | else: 151 | kwargs = self.sampler_args 152 | return self.fit_model.sampling(data=fit_data, seed=self.seed, **kwargs) 153 | 154 | def check_fit(self, fit, summary): 155 | #XXX use stan_utility diagnostics here to check. 156 | pass 157 | 158 | def xform_fit(self, fit, summary): # could be used for thinning 159 | return fit, fit_to_df(fit), summary 160 | 161 | def compute_stats(self, data, fit_df): 162 | stat_dicts = [{"{}_{}".format(k, stat.__name__): v 163 | for k, v in _compute_param_stat(data, fit_df, stat).items()} 164 | for stat in self.stats] 165 | return reduce(lambda a, e: a.update(e) or a, stat_dicts, {}) 166 | 167 | def get_summary_stats(self, summary, pars): 168 | result = {} 169 | for p in pars: 170 | flatnames = [p2 for p2 in summary if p2.startswith(p + "[")] 171 | result[p + "_rhat"] = [summary[fn]["rhat"] for fn in flatnames]\ 172 | or summary[p][1] 173 | result[p + "_n_eff"] = [summary[fn]['n_eff'] for fn in flatnames]\ 174 | or summary[p][0] 175 | return result 176 | 177 | #@timed 178 | def replication(self, fit_data): 179 | fit = self.fit_data(fit_data) 180 | summary = fit_summary(fit) 181 | self.check_fit(fit, summary) 182 | fit, df, summary = self.xform_fit(fit, summary) 183 | stats = self.compute_stats(fit_data, df) 184 | params = _params(fit_data, df) 185 | summary_stats = self.get_summary_stats(summary, params) 186 | stats.update(summary_stats) 187 | return _run_result(fit_data, stats, params) 188 | 189 | @timed 190 | def run(self, data, num_replications): 191 | gdata = self.run_DGP(data, num_replications) 192 | return pd.DataFrame(list(self._map(self.replication, gdata))) 193 | 194 | class CGR(SBC): 195 | default_stats = [mean_stat] 196 | 197 | 198 | class ThinSBC(SBC): 199 | def __init__(self, desired_ranks, *args, **kwargs): 200 | self.desired_ranks = desired_ranks 201 | super().__init__(*args, **kwargs) 202 | 203 | def xform_fit(self, fit, summary): 204 | N = fit.sim["iter"] 205 | skip = N / summary.loc["n_eff"] 206 | _group_params(np.max, skip) # XXX Choice of aggregation here 207 | needed = int(max(skip * self.desired_ranks + fit.sim["warmup"])) 208 | if needed > N: 209 | print("Redoing! needed {}".format(needed)) 210 | self.sampler_args 211 | fit = self.fit_data(fit.data, sampler_args=dict(iter=needed)) 212 | summary = fit_summary(fit) 213 | df = fit_to_df(fit) 214 | for p in df.keys(): 215 | df[p] = df[p][np.arange(0, len(df[p]), int(skip[p]))] 216 | else: 217 | df = fit_to_df(fit) 218 | for p in df.keys(): 219 | df[p] = df[p][:self.desired_ranks] 220 | return fit, df, summary 221 | 222 | 223 | def vanilla_sbc_8schools(num_reps): 224 | school_data = dict(J=8, K=2, sigma = [15, 10, 16, 11, 9, 11, 10, 18]) 225 | sbc = SBC("../code/gen_8schools.stan", "../code/8schools.stan", 226 | dict(chains=1, iter=2000, control=dict(adapt_delta=0.98)), 227 | stats=[rmse_mean, rmse_averaged]) 228 | stats = sbc.run(school_data, num_reps) 229 | timed(stats.to_csv)(str(sbc) + ".csv") 230 | print(stats.head()) 231 | 232 | def thin_sbc_8schools(num_reps): 233 | school_data = dict(J=8, K=2, sigma = [15, 10, 16, 11, 9, 11, 10, 18]) 234 | sbc = ThinSBC(1000, 235 | "../code/gen_8schools.stan", "../code/8schools.stan", 236 | dict(chains=1, iter=9000, warmup=1000, 237 | control=dict(adapt_delta=0.98)), 238 | stats=[rmse_mean, rmse_averaged]) 239 | stats = sbc.run(school_data, num_reps) 240 | timed(stats.to_csv)(str(sbc) + ".csv") 241 | print(stats.head()) 242 | 243 | def thin_lin_regr_wide(num_reps): 244 | N=25 245 | data = dict(N=N, X=np.random.normal(0, 5, N)) 246 | sbc = ThinSBC(1000, "../code/gen_lin_regr_c.stan", "../code/lin_regr_c_wide.stan", 247 | dict(chains=1, iter=5000, warmup=1000), stats=[rmse_mean, rmse_averaged]) 248 | reps = sbc.run(data, num_reps) 249 | timed(reps.to_csv)(str(sbc) + ".csv") 250 | 251 | 252 | if __name__ == "__main__": 253 | #### SBC 8 254 | import sys 255 | num_reps = int(sys.argv[1]) 256 | thin_lin_regr_wide(num_reps) 257 | -------------------------------------------------------------------------------- /pysbc/schools-centered.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%load_ext autoreload\n", 10 | "%autoreload 2\n", 11 | "%matplotlib inline" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from sbc import SBC, rmse_mean, rmse_averaged\n", 21 | "import numpy as np\n", 22 | "import pandas as pd\n", 23 | "import matplotlib as mpl\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "mpl.rcParams[\"figure.figsize\"] = \"20, 10\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stderr", 35 | "output_type": "stream", 36 | "text": [ 37 | "INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_0f82723c5c43ac8140f6c1b95a308459 NOW.\n" 38 | ] 39 | }, 40 | { 41 | "name": "stdout", 42 | "output_type": "stream", 43 | "text": [ 44 | "Using cached StanModel\n", 45 | "Using 24 cores.\n" 46 | ] 47 | }, 48 | { 49 | "name": "stderr", 50 | "output_type": "stream", 51 | "text": [ 52 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 53 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 54 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 55 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 56 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 57 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 58 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 59 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 60 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 61 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 62 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 63 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 64 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 65 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 66 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 67 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 68 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 69 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 70 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 71 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 72 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 73 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 74 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 75 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 76 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 77 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 78 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 79 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 80 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 81 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 82 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 83 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 84 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 85 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 86 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 87 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 88 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 89 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 90 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 91 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 92 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 93 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 94 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 95 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 96 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 97 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 98 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 99 | " elif np.issubdtype(np.asarray(v).dtype, float):\n" 100 | ] 101 | }, 102 | { 103 | "name": "stdout", 104 | "output_type": "stream", 105 | "text": [ 106 | "run took 252.21365880966187s\n" 107 | ] 108 | } 109 | ], 110 | "source": [ 111 | "num_reps = 10000\n", 112 | "data = dict(J=8, K=2, sigma = [15, 10, 16, 11, 9, 11, 10, 18])\n", 113 | "sbc = SBC(\"../code/gen_8schools.stan\", \"../code/8schools_centered.stan\",\n", 114 | "\n", 115 | " dict(chains=1, iter=1100, warmup=1000), stats=[rmse_mean, rmse_averaged])\n", 116 | "reps = sbc.run(data, num_reps)\n", 117 | "reps.to_csv(str(sbc) + \".csv\")" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 4, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/html": [ 128 | "
\n", 129 | "\n", 142 | "\n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | "
mu_n_effmu_order_statmu_priormu_rhatmu_rmse_averagedmu_rmse_meantau_n_efftau_order_stattau_priortau_rhattau_rmse_averagedtau_rmse_meantheta_n_efftheta_order_stattheta_priortheta_rhattheta_rmse_averagedtheta_rmse_mean
022.0100-4.9293051.0865157.9074657.37343611.0742.2437351.1902593.3027232.116431[22.0, 21.0, 55.0, 47.0, 52.0, 17.0, 75.0, 65.0][91, 69, 96, 94, 97, 79, 87, 96][-6.016123707682268, -1.8805191802782897, -4.1...[1.087930805108158, 1.129267479969085, 0.99234...24.541178[8.697354304972805, 4.561749777568826, 6.84439...
119.085.7152241.0231685.5504544.65660215.009.1692820.9924416.6062566.393447[21.0, 27.0, 28.0, 23.0, 38.0, 40.0, 30.0, 31.0][83, 67, 84, 34, 0, 3, 0, 46][-5.007475845092317, -0.3081024040860152, -3.3...[0.995409953307638, 1.0355761296788397, 1.0095...20.550289[6.095121292751217, 1.3957478517449147, 4.4358...
223.037-0.6467330.9973193.8499881.3722255.0166.0019631.3570933.2385192.372864[60.0, 52.0, 48.0, 40.0, 68.0, 54.0, 26.0, 48.0][75, 2, 81, 11, 90, 9, 57, 13][-6.759835420026633, 8.510909298035367, -6.525...[1.0410507891268463, 0.9909731408513559, 0.998...22.405784[4.7665177919785995, 10.5042269260834, 4.53175...
346.092-5.6377700.9963415.4654054.45457135.0615.1042060.9942332.5784820.744665[85.0, 67.0, 92.0, 87.0, 96.0, 79.0, 57.0, 61.0][79, 79, 41, 46, 94, 47, 90, 66][-8.050461761736795, -3.703311299633374, -1.34...[0.9933653132378608, 0.9929366438213028, 0.990...22.085812[6.625477435192238, 2.2783269730888165, 0.0819...
418.095-7.0845941.0650916.9128355.94382022.0136.4248050.9976423.0204332.253544[49.0, 17.0, 41.0, 19.0, 53.0, 21.0, 30.0, 100.0][95, 94, 90, 95, 87, 60, 80, 70][-6.673213800241708, -11.276464391402932, -7.0...[1.0132924012411308, 1.084987719455118, 1.0417...22.727717[5.7379073443328155, 10.341157935494039, 6.116...
\n", 274 | "
" 275 | ], 276 | "text/plain": [ 277 | " mu_n_eff mu_order_stat mu_prior mu_rhat mu_rmse_averaged \\\n", 278 | "0 22.0 100 -4.929305 1.086515 7.907465 \n", 279 | "1 19.0 8 5.715224 1.023168 5.550454 \n", 280 | "2 23.0 37 -0.646733 0.997319 3.849988 \n", 281 | "3 46.0 92 -5.637770 0.996341 5.465405 \n", 282 | "4 18.0 95 -7.084594 1.065091 6.912835 \n", 283 | "\n", 284 | " mu_rmse_mean tau_n_eff tau_order_stat tau_prior tau_rhat \\\n", 285 | "0 7.373436 11.0 74 2.243735 1.190259 \n", 286 | "1 4.656602 15.0 0 9.169282 0.992441 \n", 287 | "2 1.372225 5.0 16 6.001963 1.357093 \n", 288 | "3 4.454571 35.0 61 5.104206 0.994233 \n", 289 | "4 5.943820 22.0 13 6.424805 0.997642 \n", 290 | "\n", 291 | " tau_rmse_averaged tau_rmse_mean \\\n", 292 | "0 3.302723 2.116431 \n", 293 | "1 6.606256 6.393447 \n", 294 | "2 3.238519 2.372864 \n", 295 | "3 2.578482 0.744665 \n", 296 | "4 3.020433 2.253544 \n", 297 | "\n", 298 | " theta_n_eff \\\n", 299 | "0 [22.0, 21.0, 55.0, 47.0, 52.0, 17.0, 75.0, 65.0] \n", 300 | "1 [21.0, 27.0, 28.0, 23.0, 38.0, 40.0, 30.0, 31.0] \n", 301 | "2 [60.0, 52.0, 48.0, 40.0, 68.0, 54.0, 26.0, 48.0] \n", 302 | "3 [85.0, 67.0, 92.0, 87.0, 96.0, 79.0, 57.0, 61.0] \n", 303 | "4 [49.0, 17.0, 41.0, 19.0, 53.0, 21.0, 30.0, 100.0] \n", 304 | "\n", 305 | " theta_order_stat \\\n", 306 | "0 [91, 69, 96, 94, 97, 79, 87, 96] \n", 307 | "1 [83, 67, 84, 34, 0, 3, 0, 46] \n", 308 | "2 [75, 2, 81, 11, 90, 9, 57, 13] \n", 309 | "3 [79, 79, 41, 46, 94, 47, 90, 66] \n", 310 | "4 [95, 94, 90, 95, 87, 60, 80, 70] \n", 311 | "\n", 312 | " theta_prior \\\n", 313 | "0 [-6.016123707682268, -1.8805191802782897, -4.1... \n", 314 | "1 [-5.007475845092317, -0.3081024040860152, -3.3... \n", 315 | "2 [-6.759835420026633, 8.510909298035367, -6.525... \n", 316 | "3 [-8.050461761736795, -3.703311299633374, -1.34... \n", 317 | "4 [-6.673213800241708, -11.276464391402932, -7.0... \n", 318 | "\n", 319 | " theta_rhat theta_rmse_averaged \\\n", 320 | "0 [1.087930805108158, 1.129267479969085, 0.99234... 24.541178 \n", 321 | "1 [0.995409953307638, 1.0355761296788397, 1.0095... 20.550289 \n", 322 | "2 [1.0410507891268463, 0.9909731408513559, 0.998... 22.405784 \n", 323 | "3 [0.9933653132378608, 0.9929366438213028, 0.990... 22.085812 \n", 324 | "4 [1.0132924012411308, 1.084987719455118, 1.0417... 22.727717 \n", 325 | "\n", 326 | " theta_rmse_mean \n", 327 | "0 [8.697354304972805, 4.561749777568826, 6.84439... \n", 328 | "1 [6.095121292751217, 1.3957478517449147, 4.4358... \n", 329 | "2 [4.7665177919785995, 10.5042269260834, 4.53175... \n", 330 | "3 [6.625477435192238, 2.2783269730888165, 0.0819... \n", 331 | "4 [5.7379073443328155, 10.341157935494039, 6.116... " 332 | ] 333 | }, 334 | "execution_count": 4, 335 | "metadata": {}, 336 | "output_type": "execute_result" 337 | } 338 | ], 339 | "source": [ 340 | "reps.head()" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 11, 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "data": { 350 | "image/png": "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\n", 351 | "text/plain": [ 352 | "" 353 | ] 354 | }, 355 | "metadata": {}, 356 | "output_type": "display_data" 357 | } 358 | ], 359 | "source": [ 360 | "reps[\"tau_order_stat\"].hist(bins=101)\n", 361 | "plt.savefig(\"sbac_8schoolscp_tau_100.eps\")" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": 12, 367 | "metadata": {}, 368 | "outputs": [ 369 | { 370 | "data": { 371 | "image/png": "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\n", 372 | "text/plain": [ 373 | "" 374 | ] 375 | }, 376 | "metadata": {}, 377 | "output_type": "display_data" 378 | } 379 | ], 380 | "source": [ 381 | "#reps[\"theta_order_stat\"] = reps[\"theta_order_stat\"].apply(lambda s: list(map(int, s[1:-1].split())))\n", 382 | "pd.Series(([x[0] for x in reps[\"theta_order_stat\"]])).hist(bins=101)\n", 383 | "plt.savefig(\"sbac_8schoolscp_theta1_100.eps\")" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": null, 389 | "metadata": {}, 390 | "outputs": [], 391 | "source": [] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": null, 396 | "metadata": {}, 397 | "outputs": [], 398 | "source": [] 399 | } 400 | ], 401 | "metadata": { 402 | "kernelspec": { 403 | "display_name": "Python 3", 404 | "language": "python", 405 | "name": "python3" 406 | }, 407 | "language_info": { 408 | "codemirror_mode": { 409 | "name": "ipython", 410 | "version": 3 411 | }, 412 | "file_extension": ".py", 413 | "mimetype": "text/x-python", 414 | "name": "python", 415 | "nbconvert_exporter": "python", 416 | "pygments_lexer": "ipython3", 417 | "version": "3.6.3" 418 | } 419 | }, 420 | "nbformat": 4, 421 | "nbformat_minor": 2 422 | } 423 | -------------------------------------------------------------------------------- /pysbc/schools-thin.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%load_ext autoreload\n", 10 | "%autoreload 2\n", 11 | "%matplotlib inline" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from sbc import ThinSBC, rmse_mean, rmse_averaged\n", 21 | "import numpy as np\n", 22 | "import pandas as pd\n", 23 | "import matplotlib as mpl\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "mpl.rcParams[\"figure.figsize\"] = \"20, 10\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "Using cached StanModel\n", 38 | "Using cached StanModel\n", 39 | "Using 24 cores.\n" 40 | ] 41 | }, 42 | { 43 | "name": "stderr", 44 | "output_type": "stream", 45 | "text": [ 46 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 47 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 48 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 49 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 50 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 51 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 52 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 53 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 54 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 55 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 56 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 57 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 58 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 59 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 60 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 61 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 62 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 63 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 64 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 65 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 66 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 67 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 68 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 69 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 70 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 71 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 72 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 73 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 74 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 75 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 76 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 77 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 78 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 79 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 80 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 81 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 82 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 83 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 84 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 85 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 86 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 87 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 88 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 89 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 90 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 91 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 92 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 93 | " elif np.issubdtype(np.asarray(v).dtype, float):\n" 94 | ] 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "Redoing! needed 6227\n", 101 | "Redoing! needed 2402\n", 102 | "Redoing! needed 3129\n", 103 | "run took 243.29010343551636s\n" 104 | ] 105 | } 106 | ], 107 | "source": [ 108 | "num_reps = 10000\n", 109 | "data = dict(J=8, K=2, sigma = [15, 10, 16, 11, 9, 11, 10, 18])\n", 110 | "sbc = ThinSBC(100, \"../code/gen_8schools.stan\", \"../code/8schools.stan\",\n", 111 | "\n", 112 | " dict(chains=1, iter=2300, warmup=1000), stats=[rmse_mean, rmse_averaged])\n", 113 | "reps = sbc.run(data, num_reps)\n", 114 | "reps.to_csv(str(sbc) + \".csv\")" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 4, 120 | "metadata": {}, 121 | "outputs": [ 122 | { 123 | "data": { 124 | "text/html": [ 125 | "
\n", 126 | "\n", 139 | "\n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | "
mu_n_effmu_order_statmu_priormu_rhatmu_rmse_averagedmu_rmse_meantau_n_efftau_order_stattau_priortau_rhattau_rmse_averagedtau_rmse_meantheta_n_efftheta_order_stattheta_priortheta_rhattheta_rmse_averagedtheta_rmse_mean
01190.097-4.9293050.9993597.6647196.738852697.0742.2437351.0029504.9128213.127857[1052.0, 1300.0, 1175.0, 974.0, 1300.0, 1021.0...[88, 67, 93, 91, 96, 79, 76, 94][-6.016123707682268, -1.8805191802782897, -4.1...[1.0003324487959957, 0.9992826606420109, 1.002...26.717726[8.568925055836274, 4.433320528432295, 6.71596...
11117.065.7152241.0005716.2955755.268112853.049.1692821.0007965.9320785.357075[741.0, 1118.0, 1300.0, 1300.0, 1300.0, 1197.0...[73, 63, 71, 35, 0, 13, 6, 50][-5.007475845092317, -0.3081024040860152, -3.3...[1.0028600969337476, 0.999240113351865, 0.9993...22.307597[5.668118363353889, 0.9687449223475869, 4.0088...
21300.061-0.6467331.0002853.3530340.6068861056.0166.0019631.0014134.1007742.623398[1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300....[90, 2, 90, 22, 91, 11, 77, 17][-6.759835420026633, 8.510909298035367, -6.525...[0.999490704503755, 1.0007045492101114, 0.9992...21.706093[6.709172222915808, 8.56157249514619, 6.474407...
31300.088-5.6377700.9999636.0010374.891134922.0375.1042060.9996273.0698460.685756[1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300....[85, 79, 59, 63, 96, 62, 88, 82][-8.050461761736795, -3.703311299633374, -1.34...[1.0003586948509076, 0.9994922687953228, 0.999...21.294522[7.302253722757999, 2.955103260654578, 0.59484...
41300.096-7.0845941.0000356.5723775.7773001300.0146.4248050.9998413.9919063.108676[1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300....[91, 98, 85, 95, 93, 71, 87, 54][-6.673213800241708, -11.276464391402932, -7.0...[0.9992600843575189, 0.9994533949830621, 1.000...20.815104[5.124729869689766, 9.72798046085099, 5.503149...
\n", 271 | "
" 272 | ], 273 | "text/plain": [ 274 | " mu_n_eff mu_order_stat mu_prior mu_rhat mu_rmse_averaged \\\n", 275 | "0 1190.0 97 -4.929305 0.999359 7.664719 \n", 276 | "1 1117.0 6 5.715224 1.000571 6.295575 \n", 277 | "2 1300.0 61 -0.646733 1.000285 3.353034 \n", 278 | "3 1300.0 88 -5.637770 0.999963 6.001037 \n", 279 | "4 1300.0 96 -7.084594 1.000035 6.572377 \n", 280 | "\n", 281 | " mu_rmse_mean tau_n_eff tau_order_stat tau_prior tau_rhat \\\n", 282 | "0 6.738852 697.0 74 2.243735 1.002950 \n", 283 | "1 5.268112 853.0 4 9.169282 1.000796 \n", 284 | "2 0.606886 1056.0 16 6.001963 1.001413 \n", 285 | "3 4.891134 922.0 37 5.104206 0.999627 \n", 286 | "4 5.777300 1300.0 14 6.424805 0.999841 \n", 287 | "\n", 288 | " tau_rmse_averaged tau_rmse_mean \\\n", 289 | "0 4.912821 3.127857 \n", 290 | "1 5.932078 5.357075 \n", 291 | "2 4.100774 2.623398 \n", 292 | "3 3.069846 0.685756 \n", 293 | "4 3.991906 3.108676 \n", 294 | "\n", 295 | " theta_n_eff \\\n", 296 | "0 [1052.0, 1300.0, 1175.0, 974.0, 1300.0, 1021.0... \n", 297 | "1 [741.0, 1118.0, 1300.0, 1300.0, 1300.0, 1197.0... \n", 298 | "2 [1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300.... \n", 299 | "3 [1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300.... \n", 300 | "4 [1300.0, 1300.0, 1300.0, 1300.0, 1300.0, 1300.... \n", 301 | "\n", 302 | " theta_order_stat \\\n", 303 | "0 [88, 67, 93, 91, 96, 79, 76, 94] \n", 304 | "1 [73, 63, 71, 35, 0, 13, 6, 50] \n", 305 | "2 [90, 2, 90, 22, 91, 11, 77, 17] \n", 306 | "3 [85, 79, 59, 63, 96, 62, 88, 82] \n", 307 | "4 [91, 98, 85, 95, 93, 71, 87, 54] \n", 308 | "\n", 309 | " theta_prior \\\n", 310 | "0 [-6.016123707682268, -1.8805191802782897, -4.1... \n", 311 | "1 [-5.007475845092317, -0.3081024040860152, -3.3... \n", 312 | "2 [-6.759835420026633, 8.510909298035367, -6.525... \n", 313 | "3 [-8.050461761736795, -3.703311299633374, -1.34... \n", 314 | "4 [-6.673213800241708, -11.276464391402932, -7.0... \n", 315 | "\n", 316 | " theta_rhat theta_rmse_averaged \\\n", 317 | "0 [1.0003324487959957, 0.9992826606420109, 1.002... 26.717726 \n", 318 | "1 [1.0028600969337476, 0.999240113351865, 0.9993... 22.307597 \n", 319 | "2 [0.999490704503755, 1.0007045492101114, 0.9992... 21.706093 \n", 320 | "3 [1.0003586948509076, 0.9994922687953228, 0.999... 21.294522 \n", 321 | "4 [0.9992600843575189, 0.9994533949830621, 1.000... 20.815104 \n", 322 | "\n", 323 | " theta_rmse_mean \n", 324 | "0 [8.568925055836274, 4.433320528432295, 6.71596... \n", 325 | "1 [5.668118363353889, 0.9687449223475869, 4.0088... \n", 326 | "2 [6.709172222915808, 8.56157249514619, 6.474407... \n", 327 | "3 [7.302253722757999, 2.955103260654578, 0.59484... \n", 328 | "4 [5.124729869689766, 9.72798046085099, 5.503149... " 329 | ] 330 | }, 331 | "execution_count": 4, 332 | "metadata": {}, 333 | "output_type": "execute_result" 334 | } 335 | ], 336 | "source": [ 337 | "reps.head()" 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": 19, 343 | "metadata": {}, 344 | "outputs": [ 345 | { 346 | "data": { 347 | "image/png": "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\n", 348 | "text/plain": [ 349 | "" 350 | ] 351 | }, 352 | "metadata": {}, 353 | "output_type": "display_data" 354 | } 355 | ], 356 | "source": [ 357 | "reps[\"tau_order_stat\"].hist(bins=101)\n", 358 | "plt.savefig(\"sbac_8schoolsncp_tau_100_thin.eps\")" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 20, 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "data": { 368 | "image/png": "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\n", 369 | "text/plain": [ 370 | "" 371 | ] 372 | }, 373 | "metadata": {}, 374 | "output_type": "display_data" 375 | } 376 | ], 377 | "source": [ 378 | "#reps[\"theta_order_stat\"] = reps[\"theta_order_stat\"].apply(lambda s: list(map(int, s[1:-1].split())))\n", 379 | "pd.Series(([x[0] for x in reps[\"theta_order_stat\"]])).hist(bins=101)\n", 380 | "plt.savefig(\"sbac_8schoolsncp_theta1_100_thin.eps\")" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": null, 386 | "metadata": {}, 387 | "outputs": [], 388 | "source": [ 389 | "reps" 390 | ] 391 | } 392 | ], 393 | "metadata": { 394 | "kernelspec": { 395 | "display_name": "Python 3", 396 | "language": "python", 397 | "name": "python3" 398 | }, 399 | "language_info": { 400 | "codemirror_mode": { 401 | "name": "ipython", 402 | "version": 3 403 | }, 404 | "file_extension": ".py", 405 | "mimetype": "text/x-python", 406 | "name": "python", 407 | "nbconvert_exporter": "python", 408 | "pygments_lexer": "ipython3", 409 | "version": "3.6.3" 410 | } 411 | }, 412 | "nbformat": 4, 413 | "nbformat_minor": 2 414 | } 415 | -------------------------------------------------------------------------------- /pysbc/schools-unthinned.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%load_ext autoreload\n", 10 | "%autoreload 2\n", 11 | "%matplotlib inline" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from sbc import SBC, rmse_mean, rmse_averaged\n", 21 | "import numpy as np\n", 22 | "import pandas as pd\n", 23 | "import matplotlib as mpl\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "mpl.rcParams[\"figure.figsize\"] = \"20, 10\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "Using cached StanModel\n", 38 | "Using cached StanModel\n", 39 | "Using 24 cores.\n" 40 | ] 41 | }, 42 | { 43 | "name": "stderr", 44 | "output_type": "stream", 45 | "text": [ 46 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 47 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 48 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 49 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 50 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 51 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 52 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 53 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 54 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 55 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 56 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 57 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 58 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 59 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 60 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 61 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 62 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 63 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 64 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 65 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 66 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 67 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 68 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 69 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 70 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 71 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 72 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 73 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 74 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 75 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 76 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 77 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 78 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 79 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 80 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 81 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 82 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 83 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 84 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 85 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 86 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 87 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 88 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 89 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 90 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 91 | " elif np.issubdtype(np.asarray(v).dtype, float):\n", 92 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 93 | " elif np.issubdtype(np.asarray(v).dtype, float):\n" 94 | ] 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "run took 243.31674766540527s\n" 101 | ] 102 | } 103 | ], 104 | "source": [ 105 | "num_reps = 10000\n", 106 | "data = dict(J=8, K=2, sigma = [15, 10, 16, 11, 9, 11, 10, 18])\n", 107 | "sbc = SBC(\"../code/gen_8schools.stan\", \"../code/8schools.stan\",\n", 108 | "\n", 109 | " dict(chains=1, iter=1100, warmup=1000), stats=[rmse_mean, rmse_averaged])\n", 110 | "reps = sbc.run(data, num_reps)\n", 111 | "reps.to_csv(str(sbc) + \".csv\")" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 4, 117 | "metadata": {}, 118 | "outputs": [ 119 | { 120 | "data": { 121 | "text/html": [ 122 | "
\n", 123 | "\n", 136 | "\n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | "
mu_n_effmu_order_statmu_priormu_rhatmu_rmse_averagedmu_rmse_meantau_n_efftau_order_stattau_priortau_rhattau_rmse_averagedtau_rmse_meantheta_n_efftheta_order_stattheta_priortheta_rhattheta_rmse_averagedtheta_rmse_mean
0100.098-4.9293050.9970907.6922106.953882100.0932.2437351.0183884.5261483.616654[100.0, 94.0, 65.0, 100.0, 100.0, 71.0, 71.0, ...[94, 65, 98, 98, 97, 72, 80, 93][-6.016123707682268, -1.8805191802782897, -4.1...[1.045135582615253, 0.9902355918562057, 1.0050...26.629293[8.852983774309878, 4.7173792469059, 7.0000222...
1100.085.7152240.9910166.1265964.918640100.009.1692820.9975446.0821595.679118[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100...[78, 68, 77, 38, 1, 12, 1, 43][-5.007475845092317, -0.3081024040860152, -3.3...[1.0023263260492055, 0.9933519949599755, 0.992...22.657220[6.0343087469543155, 1.3349353059480134, 4.375...
2100.050-0.6467330.9901563.2117150.095391100.0136.0019630.9906063.9251893.240480[100.0, 100.0, 100.0, 100.0, 94.0, 100.0, 100....[86, 0, 95, 15, 94, 13, 74, 13][-6.759835420026633, 8.510909298035367, -6.525...[0.9914340946647286, 0.9902784919005728, 0.989...21.179769[6.084184028419844, 9.186560689642155, 5.84941...
3100.088-5.6377700.9901255.6665954.50509451.0395.1042060.9986272.8579250.992576[89.0, 100.0, 100.0, 100.0, 100.0, 65.0, 100.0...[85, 81, 50, 49, 97, 57, 88, 78][-8.050461761736795, -3.703311299633374, -1.34...[1.0162032644177093, 0.9905011323258114, 0.992...20.218864[6.9013568223177035, 2.554206360214282, 0.1939...
472.096-7.0845940.9967596.1236295.257099100.0126.4248050.9908284.1818323.107334[100.0, 100.0, 91.0, 95.0, 100.0, 100.0, 86.0,...[90, 92, 90, 96, 88, 64, 81, 50][-6.673213800241708, -11.276464391402932, -7.0...[0.9909900893264033, 0.9906094266694454, 0.989...20.598659[4.786091356446108, 9.389341947607331, 5.16451...
\n", 268 | "
" 269 | ], 270 | "text/plain": [ 271 | " mu_n_eff mu_order_stat mu_prior mu_rhat mu_rmse_averaged \\\n", 272 | "0 100.0 98 -4.929305 0.997090 7.692210 \n", 273 | "1 100.0 8 5.715224 0.991016 6.126596 \n", 274 | "2 100.0 50 -0.646733 0.990156 3.211715 \n", 275 | "3 100.0 88 -5.637770 0.990125 5.666595 \n", 276 | "4 72.0 96 -7.084594 0.996759 6.123629 \n", 277 | "\n", 278 | " mu_rmse_mean tau_n_eff tau_order_stat tau_prior tau_rhat \\\n", 279 | "0 6.953882 100.0 93 2.243735 1.018388 \n", 280 | "1 4.918640 100.0 0 9.169282 0.997544 \n", 281 | "2 0.095391 100.0 13 6.001963 0.990606 \n", 282 | "3 4.505094 51.0 39 5.104206 0.998627 \n", 283 | "4 5.257099 100.0 12 6.424805 0.990828 \n", 284 | "\n", 285 | " tau_rmse_averaged tau_rmse_mean \\\n", 286 | "0 4.526148 3.616654 \n", 287 | "1 6.082159 5.679118 \n", 288 | "2 3.925189 3.240480 \n", 289 | "3 2.857925 0.992576 \n", 290 | "4 4.181832 3.107334 \n", 291 | "\n", 292 | " theta_n_eff \\\n", 293 | "0 [100.0, 94.0, 65.0, 100.0, 100.0, 71.0, 71.0, ... \n", 294 | "1 [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100... \n", 295 | "2 [100.0, 100.0, 100.0, 100.0, 94.0, 100.0, 100.... \n", 296 | "3 [89.0, 100.0, 100.0, 100.0, 100.0, 65.0, 100.0... \n", 297 | "4 [100.0, 100.0, 91.0, 95.0, 100.0, 100.0, 86.0,... \n", 298 | "\n", 299 | " theta_order_stat \\\n", 300 | "0 [94, 65, 98, 98, 97, 72, 80, 93] \n", 301 | "1 [78, 68, 77, 38, 1, 12, 1, 43] \n", 302 | "2 [86, 0, 95, 15, 94, 13, 74, 13] \n", 303 | "3 [85, 81, 50, 49, 97, 57, 88, 78] \n", 304 | "4 [90, 92, 90, 96, 88, 64, 81, 50] \n", 305 | "\n", 306 | " theta_prior \\\n", 307 | "0 [-6.016123707682268, -1.8805191802782897, -4.1... \n", 308 | "1 [-5.007475845092317, -0.3081024040860152, -3.3... \n", 309 | "2 [-6.759835420026633, 8.510909298035367, -6.525... \n", 310 | "3 [-8.050461761736795, -3.703311299633374, -1.34... \n", 311 | "4 [-6.673213800241708, -11.276464391402932, -7.0... \n", 312 | "\n", 313 | " theta_rhat theta_rmse_averaged \\\n", 314 | "0 [1.045135582615253, 0.9902355918562057, 1.0050... 26.629293 \n", 315 | "1 [1.0023263260492055, 0.9933519949599755, 0.992... 22.657220 \n", 316 | "2 [0.9914340946647286, 0.9902784919005728, 0.989... 21.179769 \n", 317 | "3 [1.0162032644177093, 0.9905011323258114, 0.992... 20.218864 \n", 318 | "4 [0.9909900893264033, 0.9906094266694454, 0.989... 20.598659 \n", 319 | "\n", 320 | " theta_rmse_mean \n", 321 | "0 [8.852983774309878, 4.7173792469059, 7.0000222... \n", 322 | "1 [6.0343087469543155, 1.3349353059480134, 4.375... \n", 323 | "2 [6.084184028419844, 9.186560689642155, 5.84941... \n", 324 | "3 [6.9013568223177035, 2.554206360214282, 0.1939... \n", 325 | "4 [4.786091356446108, 9.389341947607331, 5.16451... " 326 | ] 327 | }, 328 | "execution_count": 4, 329 | "metadata": {}, 330 | "output_type": "execute_result" 331 | } 332 | ], 333 | "source": [ 334 | "reps.head()" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": 16, 340 | "metadata": {}, 341 | "outputs": [ 342 | { 343 | "data": { 344 | "image/png": "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\n", 345 | "text/plain": [ 346 | "" 347 | ] 348 | }, 349 | "metadata": {}, 350 | "output_type": "display_data" 351 | } 352 | ], 353 | "source": [ 354 | "reps[\"tau_order_stat\"].hist(bins=101)\n", 355 | "plt.savefig(\"sbac_8schoolsncp_tau_100.eps\")" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": 17, 361 | "metadata": {}, 362 | "outputs": [ 363 | { 364 | "data": { 365 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABIcAAAJCCAYAAABahKemAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XGMpHd93/HPt3chMb7WhjhaUdvtucIicnGT4BUloor2cKQeMcJWhSiIJjYlOlUiiZs4Ckf6B+ofqI5akhKSIlmY2lEsLtShtYUhjeXgpvnDbnwhigGHYjkGbBkfkY0TwAq59tc/dtwsx9k7tzNzM7vf10tCt/PsszO/2Z3fPus3z/ObGmMEAAAAgJ7+1rIHAAAAAMDyiEMAAAAAjYlDAAAAAI2JQwAAAACNiUMAAAAAjYlDAAAAAI2JQwAAAACNiUMAAAAAjYlDAAAAAI3tX/YAkuSCCy4YBw8eXPYw5uIb3/hGzj333GUPA1aeuQLTMVdgOuYKTMdcge3tpXly/PjxPx9jfN92+61EHDp48GAeeOCBZQ9jLu69995sbGwsexiw8swVmI65AtMxV2A65gpsby/Nk6r64jT7uawMAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgsf3LHgAAAABw9h08etdU+z1641ULHgnL5swhAAAAgMbEIQAAAIDGxCEAAACAxqw5xExcowoAsPf4Gw+gl23PHKqqD1fViar6zJZt/76q/rSq/qSq/mtVnb/lc++uqoer6vNV9U8XNXAAAAAAZjfNZWW3JDl8yra7k7xyjPGPkvzvJO9Okqq6LMlbkvzDydf8p6raN7fRAgAAADBX28ahMcbvJ3nqlG2/O8Y4Obl5X5KLJh9fneTYGOOvxhh/luThJK+e43gBAAAAmKN5LEj9L5N8cvLxhUm+vOVzj022AQAAALCCaoyx/U5VB5N8fIzxylO2/5sk60n+2RhjVNWvJblvjPGbk8/fnOSTY4zbT3OfR5IcSZK1tbUrjh07NuNTWQ1f//rXc+DAgWUP46x58PFnptrv8gvPW/BI2G26zRXYKXMFpmOuzJe/8fYuc4WtzPXT20vz5NChQ8fHGOvb7bfjdyurquuSvCHJleNvCtPjSS7esttFk23fYYxxU5KbkmR9fX1sbGzsdCgr5d57781eeS7TuG7ad7J428ZiB8Ku022uwE6ZKzAdc2W+/I23d5krbGWun17HebKjy8qq6nCSX0jyxjHGN7d86s4kb6mq766qS5JcmuR/zT5MAAAAABZh2zOHquojSTaSXFBVjyV5Tzbfney7k9xdVcnmpWT/aozx2ar6aJLPJTmZ5J1jjP+zqMEDAAAAMJtt49AY462n2XzzC+z/3iTvnWVQAAAAAJwd83i3MgAAAAB2KXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgsf3LHsBe8+Djz+S6o3dtu9+jN151FkYDAACwcwen+G+bxH/fsMnrZfdy5hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAY+IQAAAAQGP7lz0A6O7g0bum2u/RG69a8EgA5sfvNgCA3cOZQwAAAACNiUMAAAAAjYlDAAAAAI2JQwAAAACNiUMAAAAAjYlDAAAAAI2JQwAAAACN7V/2AAAAAGCrg0fvmmq/R2+8asEjgR6cOQQAAADQmDgEAAAA0Jg4BAAAANCYOAQAAADQmAWpAQBYOovPAszPtL9T4TnOHAIAAABoTBwCAAAAaEwcAgAAAGjMmkNwBs7k2l1rIgAAALAbOHMIAAAAoDFxCAAAAKAxcQgAAACgMWsO7RHTroVjHRwAAABgK2cOAQAAADQmDgEAAAA0Jg4BAAAANGbNoSWxRhAAAOyMv6WhB3P97HHmEAAAAEBj4hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAY/uXPQAAAFh1B4/eNdV+j9541YJHAnQ27e8iOFPOHAIAAABoTBwCAAAAaEwcAgAAAGjMmkOc1ryvZXWdPtCd34OcCa8X9hqvaYDV5swhAAAAgMbEIQAAAIDGxCEAAACAxqw5BMDcWFMCejiTtQnNdzrqeDzs+JxhL3HmEAAAAEBj4hAAAABAY+IQAAAAQGPWHAIA9gxrXgA74XcH9DDtXL/l8LkLHsnqceYQAAAAQGPiEAAAAEBj4hAAAABAY+IQAAAAQGMWpG5m2gW4oCsLUtKV1z4AQF/OHAIAAABoTBwCAAAAaEwcAgAAAGjMmkMArKwzWSfNWjhnh7Xr9jY/X6A7a/DRlTOHAAAAABoThwAAAAAaE4cAAAAAGrPmEHBWPXcd9w2Xn8x1L3BNt+u4AcD6J7DbmcPsFtueOVRVH66qE1X1mS3bXlpVd1fVFyb/vmSyvarqV6vq4ar6k6p61SIHDwAAAMBsprms7JYkh0/ZdjTJPWOMS5PcM7mdJK9Pcunkf0eSfHA+wwQAAABgEbaNQ2OM30/y1Cmbr05y6+TjW5Ncs2X7b4xN9yU5v6peNq/BAgAAADBfNcbYfqeqg0k+PsZ45eT218YY508+riRPjzHOr6qPJ7lxjPEHk8/dk+RdY4wHTnOfR7J5dlHW1tauOHbs2Hye0ZKdeOqZPPnsskexe11+4XlLedwHH39m7vc57XOZ9rGX9b2Zt+ee79o5ecG5suqvhb3y85i3eX//zmRurvrPZKffm69//es5cODAIob0bRbxe3Aa8/657ZU5vKznsZuPh4ueK6v+M1n1x90r9zdvi/hdtN1zee5vsFX/3kzLa//sWPXnO+/7u+S8fWfl76+z4dChQ8fHGOvb7TdzHJrcfnqM8ZIziUNbra+vjwceeMFddo0P3HZH3vegdb53alkLsU27UNyZmPa5dFukbuuC1C80V1b9tbBXfh7zNu/v35nMzVX/mez0e3PvvfdmY2NjASP6dov4PTiNef/c9socXtbz2M3Hw0XPlVX/maz64+6V+5u3Rfwu2u65PPc32Kp/b6bltX92rPrznff93XL43LPy99fZUFVTxaGdvpX9k89dLjb598Rk++NJLt6y30WTbQAAAACsoJ3GoTuTXDv5+Nokd2zZ/hOTdy17TZJnxhhPzDhGAAAAABZk2+ufquojSTaSXFBVjyV5T5Ibk3y0qt6R5ItJ3jzZ/RNJfizJw0m+meTtCxgzAAAAAHOybRwaY7z1eT515Wn2HUneOeugALrZK+ukMLtTXws3XH4y153m9eG1QOJ3x2626uu4LIvvC8By7PSyMgAAAAD2AHEIAAAAoDFxCAAAAKCxbdccgrPJ2gnAovk9wzJZTwUA5s/xdXbOHAIAAABoTBwCAAAAaEwcAgAAAGjMmkMAsAvtlbWT9srzYPV4bQHA9Jw5BAAAANCYOAQAAADQmDgEAAAA0Jg1hwBgBtOua7Isqz6+VWfdmr3PHIEezPXZ+P7tfc4cAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGjMgtQAbGveixAuYlFDCyVyJrxegFWwzEXv/R4EtnLmEAAAAEBj4hAAAABAY+IQAAAAQGPWHAKA07AWAwAAXThzCAAAAKAxcQgAAACgMXEIAAAAoDFrDsGCWK+E3cDrFADYzfbK3zJ75XmwezlzCAAAAKAxcQgAAACgMXEIAAAAoDFrDrGnuXb3+U37vXn0xqsWPJLTW/XxAcDp+NuDRfC6AhbNmUMAAAAAjYlDAAAAAI2JQwAAAACNiUMAAAAAjVmQGnYJCzSfnu/L6Vm4EgBgcfytNRvfv9XjzCEAAACAxsQhAAAAgMbEIQAAAIDGrDkEsIu4PhtWk7nJbtHttdrt+QLslDOHAAAAABoThwAAAAAaE4cAAAAAGrPmEACw8qwbwnOe77Vww+Unc53XCQDsiDOHAAAAABoThwAAAAAaE4cAAAAAGrPmEMACWScFAABYdc4cAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGjMgtSwxyxrAWQLLwPA8jgOAzALZw4BAAAANCYOAQAAADQmDgEAAAA0Zs0hgB2wtgMAALBXOHMIAAAAoDFxCAAAAKAxcQgAAACgMWsOAS9or6yts1eeBwAAwLw5cwgAAACgMXEIAAAAoDFxCAAAAKAxaw4BAOxx1l0DAF6IM4cAAAAAGhOHAAAAABoThwAAAAAaE4cAAAAAGrMgNQAAC2Mx7L3Nzxdgb3DmEAAAAEBj4hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAY+IQAAAAQGPiEAAAAEBj4hAAAABAYzPFoar62ar6bFV9pqo+UlXfU1WXVNX9VfVwVf1WVb1oXoMFAAAAYL52HIeq6sIkP5NkfYzxyiT7krwlyS8l+ZUxxsuTPJ3kHfMYKAAAAADzN+tlZfuTnFNV+5O8OMkTSV6X5PbJ529Ncs2MjwEAAADAgtQYY+dfXHV9kvcmeTbJ7ya5Psl9k7OGUlUXJ/nk5MyiU7/2SJIjSbK2tnbFsWPHdjyOVXLiqWfy5LPLHsXed/mF502134OPP7PgkbBTa+fEXIEpmCswHXMFpmOuwPYuOW9fDhw4sOxhzMWhQ4eOjzHWt9tv/04foKpekuTqJJck+VqS/5Lk8LRfP8a4KclNSbK+vj42NjZ2OpSV8oHb7sj7Htzxt5UpPfq2jan2u+7oXYsdCDt2w+UnzRWYgrkC0zFXYDrmCmzvlsPnZq80imnNclnZjyb5szHGV8cYf53kY0lem+T8yWVmSXJRksdnHCMAAAAACzJLHPpSktdU1YurqpJcmeRzST6V5E2Tfa5NcsdsQwQAAABgUXYch8YY92dz4ek/SvLg5L5uSvKuJD9XVQ8n+d4kN89hnAAAAAAswEwXm44x3pPkPadsfiTJq2e5XwAAAADOjlnfyh4AAACAXUwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhs/7IHADtx8Ohdyx4CAAAA7AnOHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABobKY4VFXnV9XtVfWnVfVQVf1wVb20qu6uqi9M/n3JvAYLAAAAwHzNeubQ+5P8zhjj+5P8QJKHkhxNcs8Y49Ik90xuAwAAALCCdhyHquq8JD+S5OYkGWN8a4zxtSRXJ7l1stutSa6ZdZAAAAAALEaNMXb2hVU/mOSmJJ/L5llDx5Ncn+TxMcb5k30qydPP3T7l648kOZIka2trVxw7dmxH41g1J556Jk8+u+xRwOpbOyfmCkzBXIHpmCswHXMFtnfJefty4MCBZQ9jLg4dOnR8jLG+3X6zxKH1JPclee0Y4/6qen+Sv0jy01tjUFU9PcZ4wXWH1tfXxwMPPLCjcayaD9x2R9734P5lDwNW3g2XnzRXYArmCkzHXIHpmCuwvVsOn5uNjY1lD2MuqmqqODTLmkOPJXlsjHH/5PbtSV6V5MmqetlkEC9LcmKGxwAAAABggXYch8YYX0ny5ap6xWTTldm8xOzOJNdOtl2b5I6ZRggAAADAwsx6PuFPJ7mtql6U5JEkb89mcPpoVb0jyReTvHnGxwAAAABgQWaKQ2OMP05yumvXrpzlfgEAAAA4O2ZZcwgAAACAXU4cAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaGzmOFRV+6rq01X18cntS6rq/qp6uKp+q6peNPswAQAAAFiEeZw5dH2Sh7bc/qUkvzLGeHmSp5O8Yw6PAQAAAMACzBSHquqiJFcl+dDkdiV5XZLbJ7vcmuSaWR4DAAAAgMWpMcbOv7jq9iT/LsnfTvLzSa5Lct/krKFU1cVJPjnGeOVpvvZIkiNJsra2dsWxY8d2PI5VcuKpZ/Lks8seBay+tXNirsAUzBWYjrkC0zFXYHuXnLcvBw4cWPYw5uLQoUPHxxjr2+23f6cPUFVvSHJijHG8qjbO9OvHGDcluSlJ1tfXx8bGGd/FSvrAbXfkfQ/u+NsKbdxw+UlzBaZgrsB0zBWYjrkC27vl8LnZK41iWrP8VnhtkjdW1Y8l+Z4kfyfJ+5OcX1X7xxgnk1yU5PHZhwkAAADAIux4zaExxrvHGBeNMQ4meUuS3xtjvC3Jp5K8abLbtUnumHmUAAAAACzEPN6t7FTvSvJzVfVwku9NcvMCHgMAAACAOZjLxaZjjHuT3Dv5+JEkr57H/QIAAACwWIs4cwgAAACAXUIcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABoTBwCAAAAaEwcAgAAAGhMHAIAAABobMdxqKourqpPVdXnquqzVXX9ZPtLq+ruqvrC5N+XzG+4AAAAAMzTLGcOnUxywxjjsiSvSfLOqrosydEk94wxLk1yz+Q2AAAAACtox3FojPHEGOOPJh//ZZKHklyY5Ookt052uzXJNbMOEgAAAIDFmMuaQ1V1MMkPJbk/ydoY44nJp76SZG0ejwEAAADA/NUYY7Y7qDqQ5H8kee8Y42NV9bUxxvlbPv/0GOM71h2qqiNJjiTJ2traFceOHZtpHKvixFPP5Mlnlz0KWH1r58RcgSmYKzAdcwWmY67A9i45b18OHDiw7GHMxaFDh46PMda322//LA9SVd+V5LeT3DbG+Nhk85NV9bIxxhNV9bIkJ073tWOMm5LclCTr6+tjY2NjlqGsjA/cdkfe9+BM31Zo4YbLT5orMAVzBaZjrsB0zBXY3i2Hz81eaRTTmuXdyirJzUkeGmP88pZP3Znk2snH1ya5Y+fDAwAAAGCRZknGr03y40kerKo/nmz7xSQ3JvloVb0jyReTvHm2IQIAAACwKDuOQ2OMP0hSz/PpK3d6vwAAAACcPXN5tzIAAAAAdidxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoLGFxaGqOlxVn6+qh6vq6KIeBwAAAICdW0gcqqp9SX49yeuTXJbkrVV12SIeCwAAAICdW9SZQ69O8vAY45ExxreSHEty9YIeCwAAAIAdWlQcujDJl7fcfmyyDQAAAIAVUmOM+d9p1ZuSHB5j/OTk9o8n+cdjjJ/ass+RJEcmN1+R5PNzH8hyXJDkz5c9CNgFzBWYjrkC0zFXYDrmCmxvL82Tvz/G+L7tdtq/oAd/PMnFW25fNNn2/40xbkpy04Ief2mq6oExxvqyxwGrzlyB6ZgrMB1zBaZjrsD2Os6TRV1W9odJLq2qS6rqRUnekuTOBT0WAAAAADu0kDOHxhgnq+qnkvz3JPuSfHiM8dlFPBYAAAAAO7eoy8oyxvhEkk8s6v5X2J67VA4WxFyB6ZgrMB1zBaZjrsD22s2ThSxIDQAAAMDusKg1hwAAAADYBcShOamqw1X1+ap6uKqOLns8sCqq6uKq+lRVfa6qPltV10+2v7Sq7q6qL0z+fcmyxwqroKr2VdWnq+rjk9uXVNX9k+PLb03e6AFaq6rzq+r2qvrTqnqoqn7YcQW+U1X97OTvr89U1Ueq6nscVyCpqg9X1Ymq+syWbac9jtSmX53MmT+pqlctb+SLIw7NQVXtS/LrSV6f5LIkb62qy5Y7KlgZJ5PcMMa4LMlrkrxzMj+OJrlnjHFpknsmt4Hk+iQPbbn9S0l+ZYzx8iRPJ3nHUkYFq+X9SX5njPH9SX4gm3PGcQW2qKoLk/xMkvUxxiuz+UZBb4njCiTJLUkOn7Lt+Y4jr09y6eR/R5J88CyN8awSh+bj1UkeHmM8Msb4VpJjSa5e8phgJYwxnhhj/NHk47/M5h/wF2Zzjtw62e3WJNcsZ4SwOqrqoiRXJfnQ5HYleV2S2ye7mCu0V1XnJfmRJDcnyRjjW2OMr8VxBU5nf5Jzqmp/khcneSKOK5Axxu8neeqUzc93HLk6yW+MTfclOb+qXnZ2Rnr2iEPzcWGSL2+5/dhkG7BFVR1M8kNJ7k+yNsZ4YvKpryRZW9KwYJX8xyS/kOT/Tm5/b5KvjTFOTm47vkBySZKvJvnPk0swP1RV58ZxBb7NGOPxJP8hyZeyGYWeSXI8jivwfJ7vONLiv/fFIeCsqKoDSX47yb8eY/zF1s+NzbdN9NaJtFZVb0hyYoxxfNljgRW3P8mrknxwjPFDSb6RUy4hc1yBZLJeytXZDKp/N8m5+c7LaIDT6HgcEYfm4/EkF2+5fdFkG5Ckqr4rm2HotjHGxyabn3zudMzJvyeWNT5YEa9N8saqejSblye/Lpvrqpw/uRwgcXyBZPP/sX1sjHH/5Pbt2YxFjivw7X40yZ+NMb46xvjrJB/L5rHGcQVO7/mOIy3+e18cmo8/THLpZOX/F2Vzobc7lzwmWAmTNVNuTvLQGOOXt3zqziTXTj6+NskdZ3tssErGGO/S0FaBAAABPElEQVQeY1w0xjiYzePI740x3pbkU0neNNnNXKG9McZXkny5ql4x2XRlks/FcQVO9aUkr6mqF0/+HnturjiuwOk933HkziQ/MXnXstckeWbL5Wd7Rm2eLcWsqurHsrlWxL4kHx5jvHfJQ4KVUFX/JMn/TPJg/mYdlV/M5rpDH03y95J8McmbxxinLgoHLVXVRpKfH2O8oar+QTbPJHppkk8n+RdjjL9a5vhg2arqB7O5cPuLkjyS5O3Z/D89HVdgi6r6t0n+eTbfPfbTSX4ym2ulOK7QWlV9JMlGkguSPJnkPUn+W05zHJnE1V/L5mWZ30zy9jHGA8sY9yKJQwAAAACNuawMAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKAxcQgAAACgMXEIAAAAoDFxCAAAAKCx/wd56Jgm2dtdowAAAABJRU5ErkJggg==\n", 366 | "text/plain": [ 367 | "" 368 | ] 369 | }, 370 | "metadata": {}, 371 | "output_type": "display_data" 372 | } 373 | ], 374 | "source": [ 375 | "#reps[\"theta_order_stat\"] = reps[\"theta_order_stat\"].apply(lambda s: list(map(int, s[1:-1].split())))\n", 376 | "pd.Series(([x[0] for x in reps[\"theta_order_stat\"]])).hist(bins=101)\n", 377 | "plt.savefig(\"sbac_8schoolsncp_theta1_100.eps\")" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": null, 383 | "metadata": {}, 384 | "outputs": [], 385 | "source": [] 386 | } 387 | ], 388 | "metadata": { 389 | "kernelspec": { 390 | "display_name": "Python 3", 391 | "language": "python", 392 | "name": "python3" 393 | }, 394 | "language_info": { 395 | "codemirror_mode": { 396 | "name": "ipython", 397 | "version": 2 398 | }, 399 | "file_extension": ".py", 400 | "mimetype": "text/x-python", 401 | "name": "python", 402 | "nbconvert_exporter": "python", 403 | "pygments_lexer": "ipython2", 404 | "version": "2.7.10" 405 | } 406 | }, 407 | "nbformat": 4, 408 | "nbformat_minor": 2 409 | } 410 | -------------------------------------------------------------------------------- /pysbc/stan_utility.py: -------------------------------------------------------------------------------- 1 | import pystan 2 | import pickle 3 | import numpy 4 | import sys 5 | 6 | def get_div(fit): 7 | sampler_params = fit.get_sampler_params(inc_warmup=False) 8 | return [x for y in sampler_params for x in y['divergent__']] 9 | 10 | def check_div(fit): 11 | """Check transitions that ended with a divergence""" 12 | n = sum(get_div) 13 | N = len(divergent) 14 | print('{} of {} iterations ended with a divergence ({}%)'.format(n, N, 15 | 100 * n / N)) 16 | if n > 0: 17 | print(' Try running with larger adapt_delta to remove the divergences') 18 | 19 | def check_treedepth(fit, max_depth = 10): 20 | """Check transitions that ended prematurely due to maximum tree depth limit""" 21 | sampler_params = fit.get_sampler_params(inc_warmup=False) 22 | depths = [x for y in sampler_params for x in y['treedepth__']] 23 | n = sum(1 for x in depths if x == max_depth) 24 | N = len(depths) 25 | print(('{} of {} iterations saturated the maximum tree depth of {}' 26 | + ' ({}%)').format(n, N, max_depth, 100 * n / N)) 27 | if n > 0: 28 | print(' Run again with max_depth set to a larger value to avoid saturation') 29 | 30 | def check_energy(fit): 31 | """Checks the energy Bayesian fraction of missing information (E-BFMI)""" 32 | sampler_params = fit.get_sampler_params(inc_warmup=False) 33 | no_warning = True 34 | for chain_num, s in enumerate(sampler_params): 35 | energies = s['energy__'] 36 | numer = sum((energies[i] - energies[i - 1])**2 for i in range(1, len(energies))) / len(energies) 37 | denom = numpy.var(energies) 38 | if numer / denom < 0.2: 39 | print('Chain {}: E-BFMI = {}'.format(chain_num, numer / denom)) 40 | no_warning = False 41 | if no_warning: 42 | print('E-BFMI indicated no pathological behavior') 43 | else: 44 | print(' E-BFMI below 0.2 indicates you may need to reparameterize your model') 45 | 46 | def check_n_eff(fit): 47 | """Checks the effective sample size per iteration""" 48 | fit_summary = fit.summary(probs=[0.5]) 49 | n_effs = [x[4] for x in fit_summary['summary']] 50 | names = fit_summary['summary_rownames'] 51 | n_iter = len(fit.extract()['lp__']) 52 | 53 | no_warning = True 54 | for n_eff, name in zip(n_effs, names): 55 | ratio = n_eff / n_iter 56 | if (ratio < 0.001): 57 | print('n_eff / iter for parameter {} is {}!'.format(name, ratio)) 58 | print('E-BFMI below 0.2 indicates you may need to reparameterize your model') 59 | no_warning = False 60 | if no_warning: 61 | print('n_eff / iter looks reasonable for all parameters') 62 | else: 63 | print(' n_eff / iter below 0.001 indicates that the effective sample size has likely been overestimated') 64 | 65 | def check_rhat(fit): 66 | """Checks the potential scale reduction factors""" 67 | from math import isnan 68 | from math import isinf 69 | 70 | fit_summary = fit.summary(probs=[0.5]) 71 | rhats = [x[5] for x in fit_summary['summary']] 72 | names = fit_summary['summary_rownames'] 73 | 74 | no_warning = True 75 | for rhat, name in zip(rhats, names): 76 | if (rhat > 1.1 or isnan(rhat) or isinf(rhat)): 77 | print('Rhat for parameter {} is {}!'.format(name, rhat)) 78 | no_warning = False 79 | if no_warning: 80 | print('Rhat looks reasonable for all parameters') 81 | else: 82 | print(' Rhat above 1.1 indicates that the chains very likely have not mixed') 83 | 84 | def check_all_diagnostics(fit): 85 | """Checks all MCMC diagnostics""" 86 | check_n_eff(fit) 87 | check_rhat(fit) 88 | check_div(fit) 89 | check_treedepth(fit) 90 | check_energy(fit) 91 | 92 | def _by_chain(unpermuted_extraction): 93 | num_chains = len(unpermuted_extraction[0]) 94 | result = [[] for _ in range(num_chains)] 95 | for c in range(num_chains): 96 | for i in range(len(unpermuted_extraction)): 97 | result[c].append(unpermuted_extraction[i][c]) 98 | return numpy.array(result) 99 | 100 | def _shaped_ordered_params(fit): 101 | ef = fit.extract(permuted=False, inc_warmup=False) # flattened, unpermuted, by (iteration, chain) 102 | ef = _by_chain(ef) 103 | ef = ef.reshape(-1, len(ef[0][0])) 104 | ef = ef[:, 0:len(fit.flatnames)] # drop lp__ 105 | shaped = {} 106 | idx = 0 107 | for dim, param_name in zip(fit.par_dims, fit.extract().keys()): 108 | length = int(numpy.prod(dim)) 109 | shaped[param_name] = ef[:,idx:idx + length] 110 | shaped[param_name].reshape(*([-1] + dim)) 111 | idx += length 112 | return shaped 113 | 114 | def partition_div(fit): 115 | """ Returns parameter arrays separated into divergent and non-divergent transitions""" 116 | sampler_params = fit.get_sampler_params(inc_warmup=False) 117 | div = numpy.concatenate([x['divergent__'] for x in sampler_params]).astype('int') 118 | params = _shaped_ordered_params(fit) 119 | nondiv_params = dict((key, params[key][div == 0]) for key in params) 120 | div_params = dict((key, params[key][div == 1]) for key in params) 121 | return nondiv_params, div_params 122 | 123 | def compile_model(filename, model_name=None, **kwargs): 124 | """This will automatically cache models - great if you're just running a 125 | script on the command line. 126 | 127 | See http://pystan.readthedocs.io/en/latest/avoiding_recompilation.html""" 128 | from hashlib import md5 129 | 130 | with open(filename) as f: 131 | model_code = f.read() 132 | code_hash = md5(model_code.encode('ascii')).hexdigest() 133 | py_version = sys.version_info[0] 134 | if model_name is None: 135 | cache_fn = 'cached-model-{}-{}.pkl'.format(code_hash, py_version) 136 | else: 137 | cache_fn = 'cached-{}-{}.pkl'.format(model_name, code_hash, 138 | py_version) 139 | try: 140 | with open(cache_fn, 'rb') as cache_f: 141 | sm = pickle.load(cache_f) 142 | except: 143 | sm = pystan.StanModel(model_code=model_code) 144 | with open(cache_fn, 'wb') as cache_f: 145 | pickle.dump(sm, cache_f) 146 | else: 147 | print("Using cached StanModel") 148 | return sm 149 | -------------------------------------------------------------------------------- /pysbc/wide_lin_regr.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%load_ext autoreload\n", 10 | "%autoreload 2\n", 11 | "%matplotlib inline" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from sbc import ThinSBC, rmse_mean, rmse_averaged\n", 21 | "import numpy as np\n", 22 | "import pandas as pd\n", 23 | "import matplotlib as mpl\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "mpl.rcParams[\"figure.figsize\"] = \"20, 10\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 7, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "data {\n", 38 | " int N;\n", 39 | " real X[N];\n", 40 | "}\n", 41 | "\n", 42 | "generated quantities {\n", 43 | " real beta;\n", 44 | " real alpha;\n", 45 | " real y[N];\n", 46 | "\n", 47 | " beta = normal_rng(0, 10);\n", 48 | " alpha = normal_rng(0, 10);\n", 49 | "\n", 50 | " for (n in 1:N)\n", 51 | " y[n] = normal_rng(X[n] * beta + alpha, 1.2);\n", 52 | "}\n", 53 | "\n", 54 | "data {\n", 55 | " int N;\n", 56 | " vector[N] X;\n", 57 | " vector[N] y;\n", 58 | "}\n", 59 | "\n", 60 | "parameters {\n", 61 | " real beta;\n", 62 | " real alpha;\n", 63 | "}\n", 64 | "\n", 65 | "model {\n", 66 | " beta ~ normal(0, 1);\n", 67 | " alpha ~ normal(0, 10);\n", 68 | "\n", 69 | " y ~ normal(X * beta + alpha, 1.2);\n", 70 | "}\n", 71 | "\n", 72 | "Using cached StanModel\n", 73 | "Using cached StanModel\n", 74 | "Using 24 cores.\n" 75 | ] 76 | }, 77 | { 78 | "name": "stderr", 79 | "output_type": "stream", 80 | "text": [ 81 | "/home/sean/vsbc/lib/python3.6/site-packages/pystan/misc.py:399: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", 82 | " elif np.issubdtype(np.asarray(v).dtype, float):\n" 83 | ] 84 | }, 85 | { 86 | "name": "stdout", 87 | "output_type": "stream", 88 | "text": [ 89 | "Redoing! needed 2063\n", 90 | "Redoing! needed 2142\n", 91 | "Redoing! needed 2136\n", 92 | "Redoing! needed 2047\n", 93 | "Redoing! needed 2020\n", 94 | "Redoing! needed 2010\n", 95 | "Redoing! needed 2212\n", 96 | "Redoing! needed 2025\n", 97 | "Redoing! needed 2005\n", 98 | "Redoing! needed 2282\n", 99 | "Redoing! needed 2418\n", 100 | "Redoing! needed 2265\n", 101 | "Redoing! needed 2025\n", 102 | "Redoing! needed 2069\n", 103 | "Redoing! needed 2156\n", 104 | "Redoing! needed 2010\n", 105 | "Redoing! needed 2226\n", 106 | "Redoing! needed 2104\n", 107 | "Redoing! needed 2104\n", 108 | "Redoing! needed 2176\n", 109 | "Redoing! needed 2036\n", 110 | "Redoing! needed 2069\n", 111 | "Redoing! needed 2183\n", 112 | "Redoing! needed 2015\n", 113 | "run took 239.0561821460724s\n" 114 | ] 115 | } 116 | ], 117 | "source": [ 118 | "N=25\n", 119 | "num_reps = 10000\n", 120 | "data = dict(N=N, X=np.random.normal(0, 5, N))\n", 121 | "with open(\"../code/gen_lin_regr_c.stan\") as f: print(f.read())\n", 122 | "with open(\"../code/lin_regr_c_wide.stan\") as f: print(f.read())\n", 123 | "sbc = ThinSBC(100, \"../code/gen_lin_regr_c.stan\", \"../code/lin_regr_c_wide.stan\",\n", 124 | "\n", 125 | " dict(chains=1, iter=2000, warmup=1000), stats=[rmse_mean, rmse_averaged])\n", 126 | "reps = sbc.run(data, num_reps)\n", 127 | "reps.to_csv(str(sbc) + \".csv\")" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 8, 133 | "metadata": {}, 134 | "outputs": [ 135 | { 136 | "data": { 137 | "text/html": [ 138 | "
\n", 139 | "\n", 152 | "\n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | "
alpha_n_effalpha_order_statalpha_prioralpha_rhatalpha_rmse_averagedalpha_rmse_meanbeta_n_effbeta_order_statbeta_priorbeta_rhatbeta_rmse_averagedbeta_rmse_mean
0456.0671.2828041.0030780.2774880.123257440.032-8.3050831.0018020.0694720.031298
1437.042-5.3180370.9990850.2685420.069781308.0270.6210400.9995950.0793720.042689
2437.015-6.9891370.9991650.3410740.223744320.095-4.1108860.9996540.1211460.105319
3678.0339.0572961.0002270.2916470.114833579.042-6.8540631.0068330.0680170.018860
4503.04511.7239390.9991280.2735650.037714510.0267.1326230.9995610.0676340.033192
\n", 248 | "
" 249 | ], 250 | "text/plain": [ 251 | " alpha_n_eff alpha_order_stat alpha_prior alpha_rhat \\\n", 252 | "0 456.0 67 1.282804 1.003078 \n", 253 | "1 437.0 42 -5.318037 0.999085 \n", 254 | "2 437.0 15 -6.989137 0.999165 \n", 255 | "3 678.0 33 9.057296 1.000227 \n", 256 | "4 503.0 45 11.723939 0.999128 \n", 257 | "\n", 258 | " alpha_rmse_averaged alpha_rmse_mean beta_n_eff beta_order_stat \\\n", 259 | "0 0.277488 0.123257 440.0 32 \n", 260 | "1 0.268542 0.069781 308.0 27 \n", 261 | "2 0.341074 0.223744 320.0 95 \n", 262 | "3 0.291647 0.114833 579.0 42 \n", 263 | "4 0.273565 0.037714 510.0 26 \n", 264 | "\n", 265 | " beta_prior beta_rhat beta_rmse_averaged beta_rmse_mean \n", 266 | "0 -8.305083 1.001802 0.069472 0.031298 \n", 267 | "1 0.621040 0.999595 0.079372 0.042689 \n", 268 | "2 -4.110886 0.999654 0.121146 0.105319 \n", 269 | "3 -6.854063 1.006833 0.068017 0.018860 \n", 270 | "4 7.132623 0.999561 0.067634 0.033192 " 271 | ] 272 | }, 273 | "execution_count": 8, 274 | "metadata": {}, 275 | "output_type": "execute_result" 276 | } 277 | ], 278 | "source": [ 279 | "reps.head()" 280 | ] 281 | }, 282 | { 283 | "cell_type": "code", 284 | "execution_count": 14, 285 | "metadata": {}, 286 | "outputs": [ 287 | { 288 | "data": { 289 | "image/png": "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\n", 290 | "text/plain": [ 291 | "" 292 | ] 293 | }, 294 | "metadata": {}, 295 | "output_type": "display_data" 296 | } 297 | ], 298 | "source": [ 299 | "reps[\"alpha_order_stat\"].hist(bins=31)\n", 300 | "plt.savefig(\"wide_alpha.eps\")" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 13, 306 | "metadata": {}, 307 | "outputs": [ 308 | { 309 | "data": { 310 | "image/png": "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\n", 311 | "text/plain": [ 312 | "" 313 | ] 314 | }, 315 | "metadata": {}, 316 | "output_type": "display_data" 317 | } 318 | ], 319 | "source": [ 320 | "reps[\"beta_order_stat\"].hist(bins=31)\n", 321 | "plt.savefig(\"wide_beta.eps\")" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": null, 327 | "metadata": {}, 328 | "outputs": [], 329 | "source": [] 330 | } 331 | ], 332 | "metadata": { 333 | "kernelspec": { 334 | "display_name": "Python 3", 335 | "language": "python", 336 | "name": "python3" 337 | }, 338 | "language_info": { 339 | "codemirror_mode": { 340 | "name": "ipython", 341 | "version": 2 342 | }, 343 | "file_extension": ".py", 344 | "mimetype": "text/x-python", 345 | "name": "python", 346 | "nbconvert_exporter": "python", 347 | "pygments_lexer": "ipython2", 348 | "version": "2.7.10" 349 | } 350 | }, 351 | "nbformat": 4, 352 | "nbformat_minor": 2 353 | } 354 | --------------------------------------------------------------------------------