def lesions_expt(qnum): beliefs, meta, act, nom = vars_from_data(dataset="lesions") params = setup_params.init_params_demo1() params['num_qs'] = 1 params['num_responses'] = beliefs[qnum].shape[1] params['num_mh_samples'] = 200 states, indiv_states, accept, internals = do_inference(params, beliefs[qnum:qnum+1], meta[qnum:qnum+1]) mh = diagnostics.summarise_qs(states, indiv_states) return mh, beliefs, meta, act
def calibrate_mh(): num_mh = 20000 results = demo8(num_mh) (individual, actual, beliefs, meta, states, indiv_states, params, accept) = results mh = diagnostics.summarise_qs(states, indiv_states) #params['transition'] = "separate" #res_sep = do_inference(params, beliefs, meta) #states_sep, indiv_sep, _, _ = res_sep #mh_sep = diagnostics.summarise_qs(states_sep, indiv_sep) return actual, mh
def simple_mh_all(expt, num_mh, qnums=None): beliefs, meta, act, nom, qnames = vars_from_data(dataset=expt) if qnums is not None: beliefs = [beliefs[qn] for qn in qnums] meta = [meta[qn] for qn in qnums] act = [act[qn] for qn in qnums] nom = [nom[qn] for qn in qnums] params = setup_params.init_params_demo1() params['num_qs'] = len(beliefs) params['num_mh_samples'] = num_mh params['do_parallel'] = False states, indiv_states, accept, internals = do_inference(params, beliefs, meta) mh = diagnostics.summarise_qs(states, indiv_states, params) save_mh_results(qnames, mh, act, params) 1/0 return mh, beliefs, meta, act, qnames
ulinop = np.array([np.mean(b[1,:]) for b in beliefs]) ulinop_ans = np.where(ulinop > .5, 1, 0) ulinop_correct = ulinop_ans == actual_ans consensus = np.array([np.mean([ulinop[n] if nominal[n][k] == 1 else 1 - ulinop[n] for n in range(num_qs)]) for k in range(num_ppl)]) votes = np.array([nom for nom in nominal]) 1/0 return mh if __name__ == '__main__': warnings.simplefilter('error', RuntimeWarning) np.seterr(divide='ignore') #so that / 0.0 gives inf on ubuntu np.seterr(invalid='ignore') #call some demo function #diagnostics.pymc_diagnostics(states[0], actual[0]) mh = diagnostics.summarise_qs(states, indiv_states) nominal = np.array([(np.array(beliefs[k][1,:]) > .5).astype(int) for k in range(len(beliefs))]) accuracy = np.array([np.sum([nominal[n, k] == actual[n]['world'] for n in range(params['num_qs'])]) for k in range(params['num_responses'])])