forked from personal/squiggle.c
add a few stats functions
This commit is contained in:
parent
5d28295a15
commit
90555bf3b3
|
@ -189,6 +189,33 @@ ci array_get_90_ci(double xs[], int n)
|
|||
return array_get_ci((ci) { .low = 0.05, .high = 0.95 }, xs, n);
|
||||
}
|
||||
|
||||
double array_get_median(double xs[], int n){
|
||||
int median_k = (int)floor(0.5 * n);
|
||||
return quickselect(median_k, xs, n)
|
||||
}
|
||||
|
||||
void array_print_stats(double xs[], int n){
|
||||
ci ci_90 = array_get_ci((ci) { .low = 0.05, .high = 0.95 }, xs, n);
|
||||
ci ci_80 = array_get_ci((ci) { .low = 0.1, .high = 0.9 }, xs, n);
|
||||
ci ci_50 = array_get_ci((ci) { .low = 0.25, .high = 0.75 }, xs, n);
|
||||
double median = array_get_median(xs, n);
|
||||
double mean = array_mean(xs, n);
|
||||
double std = array_std(xs, n);
|
||||
printf("Mean: %lf\n"
|
||||
" Std: %lf\n"
|
||||
" 5%%: %lf\n"
|
||||
" 10%%: %lf\n"
|
||||
" 25%%: %lf\n"
|
||||
" 50%%: %lf\n"
|
||||
" 75%%: %lf\n"
|
||||
" 90%%: %lf\n"
|
||||
" 95%%: %lf\n",
|
||||
mean, std, ci_90.low, ci_80.low, ci_50.low, median, ci_50.high, ci_80.high, ci_90.high);
|
||||
}
|
||||
|
||||
// Replicate some of the above functions over samplers
|
||||
// However, in the future I'll delete this
|
||||
// There should be a clear boundary between working with samplers and working with an array of samples
|
||||
ci sampler_get_ci(ci interval, double (*sampler)(uint64_t*), int n, uint64_t* seed)
|
||||
{
|
||||
UNUSED(seed); // don't want to use it right now, but want to preserve ability to do so (e.g., remove parallelism from internals). Also nicer for consistency.
|
||||
|
|
|
@ -4,13 +4,17 @@
|
|||
/* Parallel sampling */
|
||||
void sampler_parallel(double (*sampler)(uint64_t* seed), double* results, int n_threads, int n_samples);
|
||||
|
||||
/* Get 90% confidence interval */
|
||||
/* Get median and confidence intervals */
|
||||
double array_get_median(double xs[], int n);
|
||||
typedef struct ci_t {
|
||||
double low;
|
||||
double high;
|
||||
} ci;
|
||||
ci array_get_ci(ci interval, double* xs, int n);
|
||||
ci array_get_90_ci(double xs[], int n);
|
||||
void array_print_stats(double xs[], int n);
|
||||
|
||||
// Deprecated: get confidence intervals directly from samplers
|
||||
ci sampler_get_ci(ci interval, double (*sampler)(uint64_t*), int n, uint64_t* seed);
|
||||
ci sampler_get_90_ci(double (*sampler)(uint64_t*), int n, uint64_t* seed);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user