public static ICA fit(double[][] data, int p) {
        return fit(data, p, new Properties());
    }
@Test
    public void test() throws Exception {
        System.out.println("ICA");
        MathEx.setSeed(19650218); // to get repeatable results.

        CSVFormat format = CSVFormat.Builder.create().build();
        CSV csv = new CSV(format);
        double[][] data = csv.read(Paths.getTestData("ica/ica.csv")).toArray(false, CategoricalEncoder.DUMMY);

        ICA ica = ICA.fit(MathEx.transpose(data), 2);
        assertEquals(2, ica.components.length);
        assertEquals(data.length, ica.components[0].length);
        assertEquals( 0.02003, ica.components[0][0], 1E-5);
        assertEquals(-0.03275, ica.components[1][0], 1E-5);
        assertEquals(-0.01140, ica.components[0][1], 1E-5);
        assertEquals(-0.01084, ica.components[1][1], 1E-5);
    }