float get_opt_param_value(QSP_ARG_DECL const char *name) { Opt_Param *opp; opp=get_opt_param(name); if( opp==NULL ){ sprintf(ERROR_STRING,"No optimization parameter \"%s\"",name); warn(ERROR_STRING); return(-1.0); } return(opp->ans); }
static float u_confidence(SINGLE_QSP_ARG_DECL) /* return sq. deviation from .975 */ { int k,j; float t_p; /* trial probability */ Opt_Param *opp; sum = 0.0; opp=get_opt_param(TP_NAME); assert( opp != NULL ); t_p = opp->ans; if( n_obs > 0 ){ for(k=n_seen+1;k<=n_obs;k++){ pk = 1; for(j=0;j<k;j++) pk *= t_p; for(j=0;j<(n_obs-k);j++) pk *= (1-t_p); /* binomial coefficient */ num = 1; denom = 1; numfact = n_obs; denomfact = k; for(j=0;j<k;j++){ num *= numfact; denom *= denomfact; numfact --; denomfact --; } pk *= num / denom; sum += pk; } } else WARN("zero observations!?"); /* sum is the probability of observing n_obs or more */ fit_err = ((1-alpha)-sum)*((1-alpha)-sum); return(fit_err); }
int parse_options(int ac, char **av, t_args *args) { int i; int found; i = 0; found = 0; if (ac < 2) print_err("\nErr: invalid arguments.\n"); while (option[i].param && !found) { if (!strcmp(av[1], option[i].param) && strlen(av[1]) == 2) { if (is_in_str(av[1][1], "cv")) get_opt_param(av, args); get_str_param(av, args); return (i); } i++; } print_err("Err: couldn't find [option].\n"); return (-1); }
static float w_likelihood(SINGLE_QSP_ARG_DECL) /* called from optimize; return likelihood of guess */ { float lh=0.0,lhinc; int i; int ntt, /* number of total trials */ nc; /* number "correct" */ float pc,xv; float t_alpha, t_beta; /* trial slope and int */ Opt_Param *opp; /* compute the likelihood for this guess */ opp=get_opt_param(QSP_ARG ALPHA_NAME); //#ifdef CAUTIOUS // if( opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing alpha param"); // IOS_RETURN_VAL(0) // } //#endif assert( opp != NO_OPT_PARAM ); t_alpha = opp->ans; opp=get_opt_param(QSP_ARG BETA_NAME); //#ifdef CAUTIOUS // if( opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing beta param"); // IOS_RETURN_VAL(0) // } //#endif assert( opp != NO_OPT_PARAM ); t_beta = opp->ans; for(i=0;i<_nvals;i++){ /* calculate theoretical percent correct with this guess */ if( (ntt=DATUM_NTOTAL(DTBL_ENTRY(the_dtp,i)) ) <= 0 ) continue; nc=DATUM_NCORR( DTBL_ENTRY(the_dtp,i) ); xv = xval_array[ i ]; if( xv == 0.0 ) pc = (float) w_gamma; else { pc = (float) (1 - (1-w_gamma)*exp(-pow( xv/t_alpha, t_beta ) )); if( pc > (1-error_rate) ) pc =(float) ( 1-error_rate); } /* pc is the theoretical % correct at this xval */ lhinc = (float) (nc * log( pc ) + ( ntt - nc ) * log( 1 - pc )); lh -= lhinc; } /* return the answer */ return(lh); }
static void weibull_fit(QSP_ARG_DECL Data_Tbl *dp,int ntrac) /** maximum liklihood fit */ { Opt_Param op1, *alpha_opp=(&op1); Opt_Param op2, *beta_opp=(&op2); /* initialize global */ the_dtp = dp; /* initialize the parameters */ delete_opt_params(SINGLE_QSP_ARG); /* clear any existing parameters */ alpha_opp->op_name = ALPHA_NAME; alpha_opp->ans = xval_array[ _nvals/2 ]; if( xval_array[0] < xval_array[_nvals-1] ){ alpha_opp->maxv = xval_array[_nvals-1]; alpha_opp->minv = xval_array[0]; } else { alpha_opp->maxv = xval_array[0]; alpha_opp->minv = xval_array[_nvals-1]; } if( alpha_opp->minv < 0.0 ){ WARN("wiebull fit will blow up for negative x values"); return; } alpha_opp->delta = (float) fabs( xval_array[_nvals/2] - xval_array[ (_nvals/2)+1 ] ); alpha_opp->mindel = (float) 1.0e-30; add_opt_param(QSP_ARG alpha_opp); beta_opp->op_name = BETA_NAME; beta_opp->ans = 2; beta_opp->maxv = 10000.0; beta_opp->minv = 0.0; beta_opp->delta = 0.5; beta_opp->mindel = (float) 1.0e-30; add_opt_param(QSP_ARG beta_opp); if( fc_flag ){ w_gamma = 0.5; } else { w_gamma = error_rate; } optimize(QSP_ARG w_likelihood); alpha_opp=get_opt_param(QSP_ARG ALPHA_NAME); //#ifdef CAUTIOUS // if( alpha_opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing alpha param"); // IOS_RETURN // } //#endif assert( alpha_opp != NO_OPT_PARAM ); alpha = alpha_opp->ans; beta_opp=get_opt_param(QSP_ARG BETA_NAME); //#ifdef CAUTIOUS // if( beta_opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing beta param"); // IOS_RETURN // } //#endif assert( beta_opp != NO_OPT_PARAM ); beta = beta_opp->ans; /* clean up */ del_opt_param(QSP_ARG beta_opp); del_opt_param(QSP_ARG alpha_opp); }