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);
|
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)
|
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.
|
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 */
|
/* Parallel sampling */
|
||||||
void sampler_parallel(double (*sampler)(uint64_t* seed), double* results, int n_threads, int n_samples);
|
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 {
|
typedef struct ci_t {
|
||||||
double low;
|
double low;
|
||||||
double high;
|
double high;
|
||||||
} ci;
|
} ci;
|
||||||
ci array_get_ci(ci interval, double* xs, int n);
|
ci array_get_ci(ci interval, double* xs, int n);
|
||||||
ci array_get_90_ci(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_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);
|
ci sampler_get_90_ci(double (*sampler)(uint64_t*), int n, uint64_t* seed);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user