methods = ({
linear: (a, q) => {
const n = a.length;
const ig = linearVI(q, n);
const i = Math.trunc(ig);
const g = ig-i;
return g > 0 ? a[i-1] + (a[i] - a[i-1]) * g : a[i-1];
},
invertedCDF : (a, q) => {
const n = a.length;
const ig = q*n
const i = Math.trunc(ig);
const g = ig-i;
return g > 0 ? a[i] : a[i-1]
},
averagedInvertedCDF : (a, q) => {
const n = a.length;
const ig = q*n
const i = Math.trunc(ig);
const g = ig-i;
return g > 0 ? a[i] : (a[i-1]+a[i])/2
},
closestObservation : (a, q) => {
const n = a.length;
const ig = q*n
const i = Math.trunc(ig);
const g = ig%1
if(g>0.001){
return a[i]
} else if(i%2 > 0.1){
return a[i]
} else {
return a[i-1]
}
},
normalUnbiased : (a, q) => {
const n = a.length;
const ig = _virtualIndex(3/8, 3/8)(q, n) -1
const j = Math.trunc(ig);
const i = j + 1;
const g = ig-j
return g > 0 ? a[i] + (a[j] - a[i]) * g : a[i];
},
})