als-statistics
Version:
A powerful and lightweight JavaScript library for descriptive statistics, regression, clustering, outlier detection, and noise analysis using a flexible table/column architecture.
30 lines (25 loc) • 1.07 kB
JavaScript
class CronbachAlpha {
static cronbachAlpha(table, obj = {}) {
const { columnsN } = table;
if (columnsN < 2) throw new Error("For Alpha Cronbach needs >=2 ratio columns.");
obj.sumOfVariances = table.descriptive('varianceSample').sum;
obj.sumColumnVariance = table.compute(row => Object.values(row).reduce((s, v) => s + v, 0)).varianceSample;
obj.bessel = columnsN / (columnsN - 1);
obj.alpha = obj.sumColumnVariance === 0 ? 0 : obj.bessel * (1 - obj.sumOfVariances / obj.sumColumnVariance);
return obj;
}
constructor(table) {
this.table = table;
CronbachAlpha.cronbachAlpha(table, this);
}
get perColumn() { return this.ifItemsDeleted(); }
ifItemsDeleted(columnFilter) {
const result = {};
for (let colName in this.table.columns) {
const filter = columnFilter || ['-' + colName];
result[colName] = CronbachAlpha.cronbachAlpha(this.table.clone(true, filter)).alpha;
}
return result;
}
}
module.exports = CronbachAlpha;