function bartlettsTest(...inputSample) {
// Number of Samples
const k = inputSample.length;
const n = inputSample.map(
(sampleData) => sampleData.length
);
// Sample calculatedMeans
const calculatedMeans = inputSample.map(
(sampleData) =>
sampleData.reduce(
(sum, value) =>
sum + value,
0
) / sampleData.length
);
// Sample Variances
const variances = inputSample.map(
(sampleData, i) =>
sampleData.reduce(
(sum, value) =>
sum +
Math.pow(
value -
calculatedMeans[i],
2
),
0
) /
(sampleData.length - 1)
);
// Overall mean
const overallMean =
calculatedMeans.reduce(
(sum, mean, i) =>
sum + (n[i] - 1) * mean,
0
) /
(n.reduce(
(sum, value) => sum + value,
0
) -
k);
// Chi-square statistic
const chiSquare =
(n.reduce(
(sum, value) => sum + value,
0
) -
k) *
Math.log(
variances.reduce(
(
prod,
variance,
i
) =>
prod *
Math.pow(
variance,
n[i] - 1
),
1
)
) -
n.reduce(
(sum, value) =>
sum + (value - 1),
0
);
// Degrees of freedom
const degreesOfFreedom = k - 1;
// P-value
const pValue =
1 -
Math.pow(
Math.E,
-chiSquare /
(2 * degreesOfFreedom)
);
return {
chiSquare: chiSquare,
degreesOfFreedom:
degreesOfFreedom,
pValue: pValue,
};
}
// Example usage
const sampleData1 = [1, 2, 3, 4, 5];
const sampleData2 = [2, 3, 4, 5, 6];
const sampleData3 = [3, 4, 5, 6, 7];
const result = bartlettsTest(
sampleData1,
sampleData2,
sampleData3
);
console.log(result);