Search in sources :

Example 6 with H2OModelBuilderIllegalArgumentException

use of water.exceptions.H2OModelBuilderIllegalArgumentException in project h2o-3 by h2oai.

the class GLMBasicTestBinomial method testPValues.

@Test
public void testPValues() {
    //    1) NON-STANDARDIZED
    //    summary(m)
    //
    //    Call:
    //    glm(formula = CAPSULE ~ ., family = binomial, data = D)
    //
    //    Deviance Residuals:
    //    Min       1Q   Median       3Q      Max
    //    -2.0601  -0.8079  -0.4491   0.8933   2.2877
    //
    //    Coefficients:
    //    Estimate Std. Error z value Pr(>|z|)
    //    (Intercept) -7.133333   2.383945  -2.992  0.00277 **
    //    ID           0.001710   0.001376   1.242  0.21420
    //    AGE         -0.003268   0.022370  -0.146  0.88384
    //    RACER2       0.068308   1.542397   0.044  0.96468
    //    RACER3      -0.741133   1.582719  -0.468  0.63959
    //    DPROSb       0.888329   0.395088   2.248  0.02455 *
    //    DPROSc       1.305940   0.416197   3.138  0.00170 **
    //    DPROSd       0.784403   0.542651   1.446  0.14832
    //    DCAPSb       0.612371   0.517959   1.182  0.23710
    //    PSA          0.030255   0.011149   2.714  0.00665 **
    //    VOL         -0.009793   0.008753  -1.119  0.26320
    //    GLEASON      0.851867   0.182282   4.673 2.96e-06 ***
    //    ---
    //      Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    //
    //    (Dispersion parameter for binomial family taken to be 1)
    //
    //    Null deviance: 390.35  on 289  degrees of freedom
    //    Residual deviance: 297.65  on 278  degrees of freedom
    //    AIC: 321.65
    //
    //    Number of Fisher Scoring iterations: 5
    //    sm$coefficients
    //                    Estimate  Std. Error     z value     Pr(>|z|)
    //    (Intercept) -7.133333499 2.383945093 -2.99223901 2.769394e-03
    //    ID           0.001709562 0.001376361  1.24208800 2.142041e-01
    //    AGE         -0.003268379 0.022369891 -0.14610616 8.838376e-01
    //    RACER2       0.068307757 1.542397413  0.04428674 9.646758e-01
    //    RACER3      -0.741133313 1.582718967 -0.46826589 6.395945e-01
    //    DPROSb       0.888329484 0.395088333  2.24843259 2.454862e-02
    //    DPROSc       1.305940109 0.416197382  3.13779030 1.702266e-03
    //    DPROSd       0.784403119 0.542651183  1.44550154 1.483171e-01
    //    DCAPSb       0.612371497 0.517959064  1.18227779 2.370955e-01
    //    PSA          0.030255231 0.011148747  2.71377864 6.652060e-03
    //    VOL         -0.009793481 0.008753002 -1.11887108 2.631951e-01
    //    GLEASON      0.851867113 0.182282351  4.67333842 2.963429e-06
    GLMParameters params = new GLMParameters(Family.binomial);
    params._response_column = "CAPSULE";
    params._standardize = false;
    params._train = _prostateTrain._key;
    params._compute_p_values = true;
    params._objective_epsilon = 0;
    params._missing_values_handling = MissingValuesHandling.Skip;
    params._lambda = new double[] { 0 };
    params._beta_epsilon = 1e-4;
    GLM job0 = null;
    try {
        params._solver = Solver.L_BFGS;
        job0 = new GLM(params);
        GLMModel model = job0.trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    try {
        params._solver = Solver.COORDINATE_DESCENT_NAIVE;
        job0 = new GLM(params);
        GLMModel model = job0.trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    try {
        params._solver = Solver.COORDINATE_DESCENT;
        job0 = new GLM(params);
        GLMModel model = job0.trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    params._solver = Solver.IRLSM;
    try {
        params._lambda = new double[] { 1 };
        job0 = new GLM(params);
        GLMModel model = job0.trainModel().get();
        assertFalse("should've thrown, p-values only supported with no regularization", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    params._lambda_search = false;
    params._lambda = new double[] { 0 };
    GLM job = new GLM(params);
    GLMModel model = null;
    Frame predictTrain = null;
    Frame predictTest = null;
    try {
        model = job.trainModel().get();
        String[] names_expected = new String[] { "Intercept", "ID", "AGE", "RACE.R2", "RACE.R3", "DPROS.b", "DPROS.c", "DPROS.d", "DCAPS.b", "PSA", "VOL", "GLEASON" };
        double[] stder_expected = new double[] { 2.383945093, 0.001376361, 0.022369891, 1.542397413, 1.582718967, 0.395088333, 0.416197382, 0.542651183, 0.517959064, 0.011148747, 0.008753002, 0.182282351 };
        double[] zvals_expected = new double[] { -2.99223901, 1.24208800, -0.14610616, 0.04428674, -0.46826589, 2.24843259, 3.13779030, 1.44550154, 1.18227779, 2.71377864, -1.11887108, 4.67333842 };
        double[] pvals_expected = new double[] { 2.769394e-03, 2.142041e-01, 8.838376e-01, 9.646758e-01, 6.395945e-01, 2.454862e-02, 1.702266e-03, 1.483171e-01, 2.370955e-01, 6.652060e-03, 2.631951e-01, 2.963429e-06 };
        String[] names_actual = model._output.coefficientNames();
        System.out.println("names actual = " + Arrays.toString(names_actual));
        HashMap<String, Integer> coefMap = new HashMap<>();
        for (int i = 0; i < names_expected.length; ++i) coefMap.put(names_expected[i], i);
        double[] stder_actual = model._output.stdErr();
        double[] zvals_actual = model._output.zValues();
        double[] pvals_actual = model._output.pValues();
        for (int i = 0; i < stder_expected.length; ++i) {
            int id = coefMap.get(names_actual[i]);
            assertEquals(stder_expected[id], stder_actual[i], stder_expected[id] * 1e-4);
            assertEquals(zvals_expected[id], zvals_actual[i], Math.abs(zvals_expected[id]) * 1e-4);
            assertEquals(pvals_expected[id], pvals_actual[i], pvals_expected[id] * 1e-3);
        }
        predictTrain = model.score(_prostateTrain);
        Vec.Reader r = predictTrain.vec("StdErr").new Reader();
        for (int i = 0; i < se_fit_train.length; ++i) assertEquals(se_fit_train[i], r.at(i), 1e-4);
        predictTest = model.score(_prostateTest);
        r = predictTest.vec("StdErr").new Reader();
        for (int i = 0; i < se_fit_test.length; ++i) assertEquals(se_fit_test[i], r.at(i), 1e-4);
    } finally {
        if (model != null)
            model.delete();
        if (predictTrain != null)
            predictTrain.delete();
        if (predictTest != null)
            predictTest.delete();
    }
    //    2) STANDARDIZED
    //    Call:
    //    glm(formula = CAPSULE ~ ., family = binomial, data = Dstd)
    //
    //    Deviance Residuals:
    //    Min       1Q   Median       3Q      Max
    //    -2.0601  -0.8079  -0.4491   0.8933   2.2877
    //
    //    Coefficients:
    //    Estimate Std. Error z value Pr(>|z|)
    //    (Intercept) -1.28045    1.56879  -0.816  0.41438
    //    ID           0.19054    0.15341   1.242  0.21420
    //    AGE         -0.02118    0.14498  -0.146  0.88384
    //    RACER2       0.06831    1.54240   0.044  0.96468
    //    RACER3      -0.74113    1.58272  -0.468  0.63959
    //    DPROSb       0.88833    0.39509   2.248  0.02455 *
    //      DPROSc       1.30594    0.41620   3.138  0.00170 **
    //    DPROSd       0.78440    0.54265   1.446  0.14832
    //    DCAPSb       0.61237    0.51796   1.182  0.23710
    //    PSA          0.60917    0.22447   2.714  0.00665 **
    //    VOL         -0.18130    0.16204  -1.119  0.26320
    //    GLEASON      0.91751    0.19633   4.673 2.96e-06 ***
    //    ---
    //      Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    //
    //    (Dispersion parameter for binomial family taken to be 1)
    //
    //    Null deviance: 390.35  on 289  degrees of freedom
    //    Residual deviance: 297.65  on 278  degrees of freedom
    //    AIC: 321.65
    //
    //    Number of Fisher Scoring iterations: 5
    //    Estimate Std. Error     z value     Pr(>|z|)
    //    (Intercept) -1.28045434  1.5687858 -0.81620723 4.143816e-01
    //    ID           0.19054396  0.1534062  1.24208800 2.142041e-01
    //    AGE         -0.02118315  0.1449847 -0.14610616 8.838376e-01
    //    RACER2       0.06830776  1.5423974  0.04428674 9.646758e-01
    //    RACER3      -0.74113331  1.5827190 -0.46826589 6.395945e-01
    //    DPROSb       0.88832948  0.3950883  2.24843259 2.454862e-02
    //    DPROSc       1.30594011  0.4161974  3.13779030 1.702266e-03
    //    DPROSd       0.78440312  0.5426512  1.44550154 1.483171e-01
    //    DCAPSb       0.61237150  0.5179591  1.18227779 2.370955e-01
    //    PSA          0.60917093  0.2244733  2.71377864 6.652060e-03
    //    VOL         -0.18129997  0.1620383 -1.11887108 2.631951e-01
    //    GLEASON      0.91750972  0.1963285  4.67333842 2.963429e-06
    params._standardize = true;
    job = new GLM(params);
    try {
        model = job.trainModel().get();
        String[] names_expected = new String[] { "Intercept", "ID", "AGE", "RACE.R2", "RACE.R3", "DPROS.b", "DPROS.c", "DPROS.d", "DCAPS.b", "PSA", "VOL", "GLEASON" };
        // do not compare std_err here, depends on the coefficients
        //      double[] stder_expected = new double[]{1.5687858,   0.1534062,   0.1449847,   1.5423974, 1.5827190,   0.3950883,   0.4161974,  0.5426512,   0.5179591,   0.2244733, 0.1620383,   0.1963285};
        //      double[] zvals_expected = new double[]{-0.81620723,  1.24208800, -0.14610616 , 0.04428674, -0.46826589 , 2.24843259,  3.13779030 , 1.44550154 , 1.18227779 , 2.71377864 ,-1.11887108 , 4.67333842};
        //      double[] pvals_expected = new double[]{4.143816e-01 ,2.142041e-01 ,8.838376e-01, 9.646758e-01, 6.395945e-01, 2.454862e-02, 1.702266e-03, 1.483171e-01, 2.370955e-01, 6.652060e-03 ,2.631951e-01, 2.963429e-06};
        //      String[] names_expected = new String[]{"Intercept", "ID", "AGE", "RACE.R2", "RACE.R3", "DPROS.b", "DPROS.c", "DPROS.d", "DCAPS.b", "PSA", "VOL", "GLEASON"};
        double[] stder_expected = new double[] { 2.383945093, 0.001376361, 0.022369891, 1.542397413, 1.582718967, 0.395088333, 0.416197382, 0.542651183, 0.517959064, 0.011148747, 0.008753002, 0.182282351 };
        double[] zvals_expected = new double[] { -2.99223901, 1.24208800, -0.14610616, 0.04428674, -0.46826589, 2.24843259, 3.13779030, 1.44550154, 1.18227779, 2.71377864, -1.11887108, 4.67333842 };
        double[] pvals_expected = new double[] { 2.769394e-03, 2.142041e-01, 8.838376e-01, 9.646758e-01, 6.395945e-01, 2.454862e-02, 1.702266e-03, 1.483171e-01, 2.370955e-01, 6.652060e-03, 2.631951e-01, 2.963429e-06 };
        String[] names_actual = model._output.coefficientNames();
        HashMap<String, Integer> coefMap = new HashMap<>();
        for (int i = 0; i < names_expected.length; ++i) coefMap.put(names_expected[i], i);
        double[] stder_actual = model._output.stdErr();
        double[] zvals_actual = model._output.zValues();
        double[] pvals_actual = model._output.pValues();
        for (int i = 0; i < zvals_expected.length; ++i) {
            int id = coefMap.get(names_actual[i]);
            //        assertEquals(stder_expected[id], stder_actual[i], stder_expected[id] * 1e-5);
            assertEquals(zvals_expected[id], zvals_actual[i], Math.abs(zvals_expected[id]) * 1e-4);
            assertEquals(pvals_expected[id], pvals_actual[i], pvals_expected[id] * 1e-3);
        }
    } finally {
        if (model != null)
            model.delete();
    }
    params = new GLMParameters(Family.binomial);
    params._response_column = "IsDepDelayed";
    params._standardize = false;
    params._train = _airlinesTrain._key;
    params._compute_p_values = true;
    params._objective_epsilon = 0;
    params._remove_collinear_columns = true;
    params._missing_values_handling = MissingValuesHandling.Skip;
    params._lambda = new double[] { 0 };
    params._beta_epsilon = 1e-4;
    job = new GLM(params);
    model = job.trainModel().get();
    String[] names = model._output.coefficientNames();
    double[] p_values = model._output.pValues();
    for (int i = 0; i < names.length; ++i) System.out.println(names[i] + ": " + p_values[i]);
    System.out.println();
    System.out.println(model.generateSummary(params._train, 10));
    System.out.println(model._output._training_metrics);
    Frame predict = model.score(_airlinesTrain);
    Vec.Reader r = predict.vec("StdErr").new Reader();
    int fails = 0;
    for (int i = 0; i < airlines_train_se_fit.length; ++i) {
        if (Math.abs(airlines_train_se_fit[i] - r.at(i)) > 1e-4) {
            // NOTE: our vcov matrix is slightly different from R's. Does not matter for most std errs but outliers do not match.
            System.out.println("Mismatch at row " + i + ": " + airlines_train_se_fit[i] + " != " + r.at(i));
            if (airlines_train_se_fit[i] < 100)
                fails++;
        }
    }
    assertEquals(0, fails);
    predict.delete();
    predict = model.score(_airlinesTest);
    r = predict.vec("StdErr").new Reader();
    fails = 0;
    for (int i = 0; i < airlines_test_se_fit.length; ++i) {
        if (Math.abs(airlines_test_se_fit[i] - r.at(i)) > 1e-4) {
            // NOTE: our vcov matrix is slightly different from R's. Does not matter for most std errs but outliers do not match.
            System.out.println("Mismatch at row " + i + ": " + airlines_test_se_fit[i] + " != " + r.at(i));
            if (airlines_test_se_fit[i] < 100)
                fails++;
        }
    }
    assertEquals(0, fails);
    predict.delete();
    model.delete();
}
Also used : HashMap(java.util.HashMap) ModelMetricsBinomialGLM(hex.ModelMetricsBinomialGLM) H2OModelBuilderIllegalArgumentException(water.exceptions.H2OModelBuilderIllegalArgumentException) GLMParameters(hex.glm.GLMModel.GLMParameters) Test(org.junit.Test)

Example 7 with H2OModelBuilderIllegalArgumentException

use of water.exceptions.H2OModelBuilderIllegalArgumentException in project h2o-3 by h2oai.

the class GLMBasicTestRegression method testPValuesGaussian.

@Test
public void testPValuesGaussian() {
    //    1) NON-STANDARDIZED
    //    summary(m)
    //
    //    Call:
    //    glm(formula = CAPSULE ~ ., family = gaussian, data = D)
    //
    //    Deviance Residuals:
    //    Min       1Q   Median       3Q      Max
    //    -0.8394  -0.3162  -0.1113   0.3771   0.9447
    //
    //    Coefficients:
    //    Estimate Std. Error t value Pr(>|t|)
    //    (Intercept) -0.6870832  0.4035941  -1.702  0.08980 .
    //      ID         0.0003081  0.0002387   1.291  0.19791
    //    AGE         -0.0006005  0.0040246  -0.149  0.88150
    //    RACER2      -0.0147733  0.2511007  -0.059  0.95313
    //    RACER3      -0.1456993  0.2593492  -0.562  0.57471
    //    DPROSb       0.1462512  0.0657117   2.226  0.02684 *
    //    DPROSc       0.2297207  0.0713659   3.219  0.00144 **
    //    DPROSd       0.1144974  0.0937208   1.222  0.22286
    //    DCAPSb       0.1430945  0.0888124   1.611  0.10827
    //    PSA          0.0047237  0.0015060   3.137  0.00189 **
    //    VOL         -0.0019401  0.0013920  -1.394  0.16449
    //    GLEASON      0.1438776  0.0273259   5.265 2.81e-07 ***
    //    ---
    //      Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    //
    //    (Dispersion parameter for gaussian family taken to be 0.1823264)
    //
    //    Null deviance: 69.600  on 289  degrees of freedom
    //    Residual deviance: 50.687  on 278  degrees of freedom
    //    AIC: 343.16
    //
    //    Number of Fisher Scoring iterations: 2
    GLMParameters params = new GLMParameters(Family.gaussian);
    params._response_column = "CAPSULE";
    params._standardize = false;
    params._train = _prostateTrain._key;
    params._compute_p_values = true;
    params._lambda = new double[] { 0 };
    params._missing_values_handling = DeepLearningModel.DeepLearningParameters.MissingValuesHandling.Skip;
    try {
        params._solver = Solver.L_BFGS;
        new GLM(params).trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    try {
        params._solver = Solver.COORDINATE_DESCENT_NAIVE;
        new GLM(params).trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    try {
        params._solver = Solver.COORDINATE_DESCENT;
        new GLM(params).trainModel().get();
        assertFalse("should've thrown, p-values only supported with IRLSM", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    params._solver = Solver.IRLSM;
    GLM glm = new GLM(params);
    try {
        params._lambda = new double[] { 1 };
        glm.trainModel().get();
        assertFalse("should've thrown, p-values only supported with no regularization", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    params._lambda = new double[] { 0 };
    try {
        params._lambda_search = true;
        glm.trainModel().get();
        assertFalse("should've thrown, p-values only supported with no regularization (i.e. no lambda search)", true);
    } catch (H2OModelBuilderIllegalArgumentException t) {
    }
    params._lambda_search = false;
    GLMModel model = null;
    Frame predict = null;
    try {
        model = new GLM(params).trainModel().get();
        String[] names_expected = new String[] { "Intercept", "ID", "AGE", "RACE.R2", "RACE.R3", "DPROS.b", "DPROS.c", "DPROS.d", "DCAPS.b", "PSA", "VOL", "GLEASON" };
        double[] stder_expected = new double[] { 0.4035941476, 0.0002387281, 0.0040245520, 0.2511007120, 0.2593492335, 0.0657117271, 0.0713659021, 0.0937207659, 0.0888124376, 0.0015060289, 0.0013919737, 0.0273258788 };
        double[] zvals_expected = new double[] { -1.70241133, 1.29061005, -0.14920829, -0.05883397, -0.56178799, 2.22564893, 3.21891333, 1.22168646, 1.61119882, 3.13650800, -1.39379859, 5.26524961 };
        double[] pvals_expected = new double[] { 8.979610e-02, 1.979113e-01, 8.814975e-01, 9.531266e-01, 5.747131e-01, 2.683977e-02, 1.439295e-03, 2.228612e-01, 1.082711e-01, 1.893210e-03, 1.644916e-01, 2.805776e-07 };
        String[] names_actual = model._output.coefficientNames();
        HashMap<String, Integer> coefMap = new HashMap<>();
        for (int i = 0; i < names_expected.length; ++i) coefMap.put(names_expected[i], i);
        double[] stder_actual = model._output.stdErr();
        double[] zvals_actual = model._output.zValues();
        double[] pvals_actual = model._output.pValues();
        for (int i = 0; i < stder_expected.length; ++i) {
            int id = coefMap.get(names_actual[i]);
            assertEquals(stder_expected[id], stder_actual[i], stder_expected[id] * 1e-5);
            assertEquals(zvals_expected[id], zvals_actual[i], Math.abs(zvals_expected[id]) * 1e-5);
            assertEquals(pvals_expected[id], pvals_actual[i], pvals_expected[id] * 1e-3);
        }
        predict = model.score(params._train.get());
        Vec.Reader r = predict.vec("StdErr").new Reader();
        for (int i = 0; i < 10; i++) System.out.println(fit_se[i] + " ?=? " + r.at(i));
        for (int i = 0; i < fit_se.length; ++i) assertEquals(fit_se[i], r.at(i), 1e-4);
    } finally {
        if (model != null)
            model.delete();
        if (predict != null)
            predict.delete();
    }
    //    2) STANDARDIZED
    //    Call:
    //    glm(formula = CAPSULE ~ ., family = binomial, data = Dstd)
    //
    //    Deviance Residuals:
    //    Min       1Q   Median       3Q      Max
    //    -2.0601  -0.8079  -0.4491   0.8933   2.2877
    //
    //    Coefficients:
    //    Estimate Std. Error z value Pr(>|z|)
    //    (Intercept) -1.28045    1.56879  -0.816  0.41438
    //    ID           0.19054    0.15341   1.242  0.21420
    //    AGE         -0.02118    0.14498  -0.146  0.88384
    //    RACER2       0.06831    1.54240   0.044  0.96468
    //    RACER3      -0.74113    1.58272  -0.468  0.63959
    //    DPROSb       0.88833    0.39509   2.248  0.02455 *
    //    DPROSc       1.30594    0.41620   3.138  0.00170 **
    //    DPROSd       0.78440    0.54265   1.446  0.14832
    //    DCAPSb       0.61237    0.51796   1.182  0.23710
    //    PSA          0.60917    0.22447   2.714  0.00665 **
    //    VOL         -0.18130    0.16204  -1.119  0.26320
    //    GLEASON      0.91751    0.19633   4.673 2.96e-06 ***
    //    ---
    //      Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    //
    //    (Dispersion parameter for binomial family taken to be 1)
    //
    //    Null deviance: 390.35  on 289  degrees of freedom
    //    Residual deviance: 297.65  on 278  degrees of freedom
    //    AIC: 321.65
    //
    //    Number of Fisher Scoring iterations: 5
    //    Estimate Std. Error     z value     Pr(>|z|)
    //    (Intercept) -1.28045434  1.5687858 -0.81620723 4.143816e-01
    //    ID           0.19054396  0.1534062  1.24208800 2.142041e-01
    //    AGE         -0.02118315  0.1449847 -0.14610616 8.838376e-01
    //    RACER2       0.06830776  1.5423974  0.04428674 9.646758e-01
    //    RACER3      -0.74113331  1.5827190 -0.46826589 6.395945e-01
    //    DPROSb       0.88832948  0.3950883  2.24843259 2.454862e-02
    //    DPROSc       1.30594011  0.4161974  3.13779030 1.702266e-03
    //    DPROSd       0.78440312  0.5426512  1.44550154 1.483171e-01
    //    DCAPSb       0.61237150  0.5179591  1.18227779 2.370955e-01
    //    PSA          0.60917093  0.2244733  2.71377864 6.652060e-03
    //    VOL         -0.18129997  0.1620383 -1.11887108 2.631951e-01
    //    GLEASON      0.91750972  0.1963285  4.67333842 2.963429e-06
    params._standardize = true;
    try {
        model = new GLM(params).trainModel().get();
        String[] names_expected = new String[] { "Intercept", "ID", "AGE", "RACE.R2", "RACE.R3", "DPROS.b", "DPROS.c", "DPROS.d", "DCAPS.b", "PSA", "VOL", "GLEASON" };
        // do not compare std_err here, depends on the coefficients
        //      double[] stder_expected = new double[]{1.5687858,   0.1534062,   0.1449847,   1.5423974, 1.5827190,   0.3950883,   0.4161974,  0.5426512,   0.5179591,   0.2244733, 0.1620383,   0.1963285};
        //      double[] zvals_expected = new double[]{1.14158283,  1.29061005, -0.14920829, -0.05883397, -0.56178799, 2.22564893,  3.21891333,  1.22168646,  1.61119882,  3.13650800, -1.39379859,  5.26524961 };
        //      double[] pvals_expected = new double[]{2.546098e-01, 1.979113e-01, 8.814975e-01, 9.531266e-01, 5.747131e-01, 2.683977e-02, 1.439295e-03, 2.228612e-01, 1.082711e-01, 1.893210e-03, 1.644916e-01, 2.805776e-07 };
        double[] stder_expected = new double[] { 0.4035941476, 0.0002387281, 0.0040245520, 0.2511007120, 0.2593492335, 0.0657117271, 0.0713659021, 0.0937207659, 0.0888124376, 0.0015060289, 0.0013919737, 0.0273258788 };
        double[] zvals_expected = new double[] { -1.70241133, 1.29061005, -0.14920829, -0.05883397, -0.56178799, 2.22564893, 3.21891333, 1.22168646, 1.61119882, 3.13650800, -1.39379859, 5.26524961 };
        double[] pvals_expected = new double[] { 8.979610e-02, 1.979113e-01, 8.814975e-01, 9.531266e-01, 5.747131e-01, 2.683977e-02, 1.439295e-03, 2.228612e-01, 1.082711e-01, 1.893210e-03, 1.644916e-01, 2.805776e-07 };
        String[] names_actual = model._output.coefficientNames();
        HashMap<String, Integer> coefMap = new HashMap<>();
        for (int i = 0; i < names_expected.length; ++i) coefMap.put(names_expected[i], i);
        double[] zvals_actual = model._output.zValues();
        double[] pvals_actual = model._output.pValues();
        for (int i = 0; i < zvals_expected.length; ++i) {
            int id = coefMap.get(names_actual[i]);
            assertEquals(zvals_expected[id], zvals_actual[i], Math.abs(zvals_expected[id]) * 1e-5);
            assertEquals(pvals_expected[id], pvals_actual[i], pvals_expected[id] * 1e-3);
        }
        predict = model.score(params._train.get());
        Vec.Reader r = predict.vec("StdErr").new Reader();
        for (int i = 0; i < 10; i++) System.out.println(fit_se[i] + " ?=? " + r.at(i));
        for (int i = 0; i < fit_se.length; ++i) assertEquals(fit_se[i], r.at(i), 1e-4);
    } finally {
        if (model != null)
            model.delete();
        if (predict != null)
            predict.delete();
    }
    // Airlines (has collinear columns)
    params._standardize = true;
    params._remove_collinear_columns = true;
    params._train = _airlines._key;
    params._response_column = "IsDepDelayed";
    params._ignored_columns = new String[] { "IsDepDelayed_REC" };
    try {
        model = new GLM(params).trainModel().get();
        String[] names_expected = new String[] { "Intercept", "fYearf1988", "fYearf1989", "fYearf1990", "fYearf1991", "fYearf1992", "fYearf1993", "fYearf1994", "fYearf1995", "fYearf1996", "fYearf1997", "fYearf1998", "fYearf1999", "fYearf2000", "fDayofMonthf10", "fDayofMonthf11", "fDayofMonthf12", "fDayofMonthf13", "fDayofMonthf14", "fDayofMonthf15", "fDayofMonthf16", "fDayofMonthf17", "fDayofMonthf18", "fDayofMonthf19", "fDayofMonthf2", "fDayofMonthf20", "fDayofMonthf21", "fDayofMonthf22", "fDayofMonthf23", "fDayofMonthf24", "fDayofMonthf25", "fDayofMonthf26", "fDayofMonthf27", "fDayofMonthf28", "fDayofMonthf29", "fDayofMonthf3", "fDayofMonthf30", "fDayofMonthf31", "fDayofMonthf4", "fDayofMonthf5", "fDayofMonthf6", "fDayofMonthf7", "fDayofMonthf8", "fDayofMonthf9", "fDayOfWeekf2", "fDayOfWeekf3", "fDayOfWeekf4", "fDayOfWeekf5", "fDayOfWeekf6", "fDayOfWeekf7", "DepTime", "ArrTime", "UniqueCarrierCO", "UniqueCarrierDL", "UniqueCarrierHP", "UniqueCarrierPI", "UniqueCarrierTW", "UniqueCarrierUA", "UniqueCarrierUS", "UniqueCarrierWN", "OriginABQ", "OriginACY", "OriginALB", "OriginATL", "OriginAUS", "OriginAVP", "OriginBDL", "OriginBGM", "OriginBHM", "OriginBNA", "OriginBOS", "OriginBTV", "OriginBUF", "OriginBUR", "OriginBWI", "OriginCAE", "OriginCHO", "OriginCHS", "OriginCLE", "OriginCLT", "OriginCMH", "OriginCOS", "OriginCRW", "OriginCVG", "OriginDAY", "OriginDCA", "OriginDEN", "OriginDFW", "OriginDSM", "OriginDTW", "OriginERI", "OriginEWR", "OriginFLL", "OriginGSO", "OriginHNL", "OriginIAD", "OriginIAH", "OriginICT", "OriginIND", "OriginISP", "OriginJAX", "OriginJFK", "OriginLAS", "OriginLAX", "OriginLEX", "OriginLGA", "OriginLIH", "OriginLYH", "OriginMCI", "OriginMCO", "OriginMDT", "OriginMDW", "OriginMFR", "OriginMHT", "OriginMIA", "OriginMKE", "OriginMLB", "OriginMRY", "OriginMSP", "OriginMSY", "OriginMYR", "OriginOAK", "OriginOGG", "OriginOMA", "OriginORD", "OriginORF", "OriginPBI", "OriginPHF", "OriginPHL", "OriginPHX", "OriginPIT", "OriginPSP", "OriginPVD", "OriginPWM", "OriginRDU", "OriginRIC", "OriginRNO", "OriginROA", "OriginROC", "OriginRSW", "OriginSAN", "OriginSBN", "OriginSCK", "OriginSDF", "OriginSEA", "OriginSFO", "OriginSJC", "OriginSJU", "OriginSLC", "OriginSMF", "OriginSNA", "OriginSRQ", "OriginSTL", "OriginSTX", "OriginSWF", "OriginSYR", "OriginTLH", "OriginTPA", "OriginTRI", "OriginTUS", "OriginTYS", "OriginUCA", "DestABQ", "DestACY", "DestALB", "DestATL", "DestAVP", "DestBDL", "DestBGM", "DestBNA", "DestBOS", "DestBTV", "DestBUF", "DestBUR", "DestBWI", "DestCAE", "DestCAK", "DestCHA", "DestCHS", "DestCLE", "DestCLT", "DestCMH", "DestDAY", "DestDCA", "DestDEN", "DestDFW", "DestDTW", "DestELM", "DestERI", "DestEWR", "DestFAT", "DestFAY", "DestFLL", "DestFNT", "DestGEG", "DestGRR", "DestGSO", "DestGSP", "DestHNL", "DestHTS", "DestIAD", "DestIAH", "DestICT", "DestIND", "DestISP", "DestJAX", "DestJFK", "DestKOA", "DestLAS", "DestLAX", "DestLEX", "DestLGA", "DestLIH", "DestLYH", "DestMCI", "DestMCO", "DestMDT", "DestMDW", "DestMHT", "DestMIA", "DestMRY", "DestMSY", "DestOAJ", "DestOAK", "DestOGG", "DestOMA", "DestORD", "DestORF", "DestORH", "DestPBI", "DestPDX", "DestPHF", "DestPHL", "DestPHX", "DestPIT", "DestPSP", "DestPVD", "DestRDU", "DestRIC", "DestRNO", "DestROA", "DestROC", "DestRSW", "DestSAN", "DestSCK", "DestSDF", "DestSEA", "DestSFO", "DestSJC", "DestSMF", "DestSNA", "DestSTL", "DestSWF", "DestSYR", "DestTOL", "DestTPA", "DestTUS", "DestUCA", "Distance" };
        double[] exp_coefs = new double[] { 3.383044e-01, -1.168214e-01, -4.405621e-01, -3.365341e-01, -4.925256e-01, -5.374542e-01, -4.149143e-01, -2.694969e-01, -2.991095e-01, -2.776553e-01, -2.921466e-01, -4.336252e-01, -3.597812e-01, -3.812643e-01, 1.024025e-02, 2.549787e-02, 3.877628e-02, 1.650942e-02, -2.981043e-02, -1.167855e-02, 1.025499e-02, -4.574083e-03, -2.502898e-02, -5.803535e-02, 7.679039e-02, -5.247306e-02, -5.918685e-02, -3.339667e-02, -2.885718e-02, -4.225694e-02, -7.500997e-02, -5.145179e-02, -7.093373e-02, -5.634115e-02, -3.643811e-02, 1.284665e-01, -8.150175e-02, -4.724434e-02, 1.511024e-01, 5.498057e-02, 4.411630e-02, 1.278961e-02, 7.276038e-03, 4.672048e-02, -2.128594e-02, 1.629933e-02, 3.721499e-02, 5.933446e-02, -2.303705e-02, 1.141451e-02, 1.258241e-04, 1.271866e-05, 7.155502e-02, 1.444990e-01, -8.685535e-02, -2.602512e-02, 4.227022e-01, 2.639493e-01, 2.600565e-01, 5.409442e-02, 5.106308e-02, -1.993041e-01, 5.663324e-01, 2.524168e-01, -8.032071e-02, 1.959854e-02, 3.110741e-01, 2.711911e-01, -1.480432e-01, 2.711969e-02, 1.298365e-01, 3.051547e-01, 1.747017e-01, -6.282101e-03, 1.542743e-01, -3.037726e-01, 3.808392e-01, 1.829607e-01, 4.841763e-02, 9.353007e-02, 2.154611e-01, 6.469679e-02, -1.950998e-01, 7.957484e-02, 2.430247e-01, 1.942201e-02, 5.701321e-02, 2.770389e-01, 1.497383e-01, 4.943089e-02, 2.598871e-01, 5.930680e-02, 3.748394e-01, 4.204685e-02, -3.574776e-01, 2.153817e-02, -1.719974e-01, 4.806820e-01, 2.678204e-01, 4.266956e-02, 6.340217e-02, -1.536324e-02, -1.294344e-02, 1.985872e-01, 4.831069e-01, 2.726364e-01, -4.813763e-01, 4.199029e-01, 3.054954e-01, 1.784330e-01, -2.500409e-02, 2.978489e-03, -9.356699e-02, 1.246280e-01, 2.858306e-01, -6.533971e-02, -1.403327e-01, -3.924693e-01, 5.947271e-02, -7.903152e-03, -2.135489e-01, -1.454085e-01, -2.049959e-01, 1.704250e-01, 1.826566e-01, 1.896976e-01, 2.541375e-01, -9.746707e-02, 1.990703e-01, 9.068512e-02, 2.848977e-01, 3.409567e-01, 8.689141e-02, -6.294297e-02, 2.402344e-02, 9.583028e-02, 4.207585e-01, 2.096370e-01, 2.184863e-01, 1.316822e-01, 4.863172e-02, 4.918303e-01, -7.990361e-02, -4.499847e-02, 6.140887e-02, 7.329919e-02, -1.658663e-01, 1.850334e-01, -2.165094e-01, -1.054388e-01, 8.943775e-02, 3.809166e-01, -9.766444e-02, 2.645371e-01, -5.147078e-02, 2.323637e-01, -3.746418e-01, 1.841517e-01, -2.121584e-01, -1.888144e-02, -8.009574e-02, 1.801828e-01, 1.216036e-01, 4.123190e-03, -4.747419e-02, -1.001471e-01, 3.611426e-02, 1.427218e-01, -1.154052e-01, -2.388724e-01, -8.097489e-03, -3.321890e-02, -8.470654e-02, 8.609431e-03, 2.278746e-02, 2.959335e-01, -8.363623e-02, -1.736324e-01, 2.140292e-01, -1.252043e-01, 2.086573e-02, 7.549936e-02, -2.339204e-01, 1.009014e-01, 1.396302e-01, -2.180753e-01, -1.118935e-02, -3.345582e-01, -1.490167e-01, -5.455654e-03, -2.884281e-02, -7.778542e-02, 1.481921e-01, -9.387787e-02, 2.894362e-01, -2.599589e-01, 1.210906e-01, 1.721670e-02, 6.271491e-02, -5.077020e-01, 2.524418e-01, -1.146321e-01, -3.418030e-01, -7.056448e-03, -1.948121e-01, -1.716377e-01, -5.915873e-02, 3.465761e-01, -3.964155e-02, 9.297146e-02, 6.840982e-02, -2.694979e-02, 3.489802e-01, 4.473631e-01, 9.045849e-02, 1.195621e-01, 8.137467e-04, -8.754947e-02, 2.089706e-02, 2.676953e-03, -1.381342e-01, 5.200934e-02, 2.208028e-01, -1.096369e-01, 4.753661e-01, 2.876296e-02, 2.256874e-02, -9.231270e-02, 2.507403e-02, 1.529442e-01, -2.173190e-02, -1.180872e-01, -3.305849e-02, 1.091687e-01, 9.174085e-02, -6.172636e-02, 5.983764e-02, 1.094581e-01, 1.537772e-01, 1.117601e-01, -9.674298e-02, 3.111324e-02, 1.404767e-01, -4.243193e-03, 9.218955e-02, 2.554272e-01, -4.434348e-02, 1.222306e-01, 1.960349e-02, 1.308767e-01, -2.830042e-03, -3.212863e-02, -1.035897e-01, -2.828326e-02, -2.452788e-01, 5.876054e-02, 6.094385e-02, -6.242541e-02, 5.535717e-05 };
        double[] stder_expected = new double[] { 8.262325e-02, 1.960654e-02, 5.784259e-02, 5.211346e-02, 5.351436e-02, 5.364119e-02, 5.377681e-02, 5.361611e-02, 5.480210e-02, 5.916530e-02, 5.924352e-02, 5.947477e-02, 5.684859e-02, 6.015367e-02, 2.359873e-02, 2.364261e-02, 2.366028e-02, 2.346965e-02, 2.331776e-02, 2.348358e-02, 2.366537e-02, 2.371736e-02, 2.353753e-02, 2.345702e-02, 2.360676e-02, 2.353096e-02, 2.352809e-02, 2.354292e-02, 2.381824e-02, 2.360087e-02, 2.357901e-02, 2.352439e-02, 2.333820e-02, 2.348150e-02, 2.349408e-02, 2.388143e-02, 2.363605e-02, 2.369714e-02, 2.384589e-02, 2.360301e-02, 2.346261e-02, 2.365805e-02, 2.377684e-02, 2.374369e-02, 1.093338e-02, 1.091722e-02, 1.094858e-02, 1.089616e-02, 1.127837e-02, 1.099223e-02, 1.243150e-05, 1.193431e-05, 6.185154e-02, 5.842257e-02, 4.797840e-02, 4.082146e-02, 6.764477e-02, 4.904281e-02, 4.661126e-02, 4.949252e-02, 7.194630e-02, 1.080608e-01, 1.000542e-01, 7.206225e-02, 6.866783e-02, 9.183712e-02, 8.937756e-02, 9.509039e-02, 1.101394e-01, 7.333840e-02, 6.976195e-02, 1.139758e-01, 7.902871e-02, 6.688118e-02, 6.842836e-02, 1.228471e-01, 1.290408e-01, 8.980176e-02, 6.808851e-02, 7.095243e-02, 6.932701e-02, 7.036599e-02, 1.021726e-01, 7.566290e-02, 7.743516e-02, 7.012655e-02, 6.722331e-02, 7.756484e-02, 2.146603e-01, 8.390956e-02, 1.138773e-01, 6.896196e-02, 8.394126e-02, 7.983643e-02, 8.101956e-02, 8.960544e-02, 8.278554e-02, 2.417453e-01, 6.988129e-02, 1.085592e-01, 9.274580e-02, 1.206031e-01, 7.400875e-02, 6.750358e-02, 1.107047e-01, 6.957462e-02, 1.139873e-01, 1.340117e-01, 7.976223e-02, 6.979235e-02, 7.837532e-02, 1.285433e-01, 1.334371e-01, 1.198966e-01, 8.332708e-02, 1.229658e-01, 1.149044e-01, 1.130423e-01, 1.090638e-01, 8.406530e-02, 9.600642e-02, 7.247142e-02, 1.140837e-01, 9.506082e-02, 6.926602e-02, 7.590418e-02, 7.459985e-02, 1.287070e-01, 6.815592e-02, 7.411458e-02, 6.592406e-02, 9.179115e-02, 7.223151e-02, 7.670526e-02, 7.764917e-02, 7.343286e-02, 1.999711e-01, 1.175572e-01, 7.108214e-02, 7.409246e-02, 6.847739e-02, 2.476394e-01, 1.080218e-01, 1.120317e-01, 8.137946e-02, 6.754660e-02, 7.897969e-02, 7.867300e-02, 1.044366e-01, 8.260141e-02, 7.542126e-02, 1.116638e-01, 7.481728e-02, 1.126226e-01, 1.286945e-01, 7.009628e-02, 1.346972e-01, 6.941736e-02, 1.228611e-01, 7.884636e-02, 1.089254e-01, 1.178960e-01, 6.487494e-02, 1.141428e-01, 6.337383e-02, 1.044082e-01, 9.881149e-02, 6.748862e-02, 7.802332e-02, 7.989152e-02, 4.877654e-02, 8.606809e-02, 6.446482e-02, 5.276630e-02, 5.072148e-02, 1.073048e-01, 1.054882e-01, 2.695275e-01, 8.023848e-02, 5.665850e-02, 5.273383e-02, 6.096450e-02, 7.907020e-02, 5.261070e-02, 5.180430e-02, 1.142093e-01, 5.580208e-02, 2.354317e-01, 2.681434e-01, 5.047968e-02, 1.029695e-01, 7.947606e-02, 6.167620e-02, 1.260100e-01, 1.094464e-01, 1.044411e-01, 6.861138e-02, 1.122694e-01, 6.168966e-02, 1.033369e-01, 9.571271e-02, 5.958640e-02, 1.168745e-01, 4.831583e-02, 7.683862e-02, 7.909215e-02, 8.397850e-02, 1.069573e-01, 5.494288e-02, 4.744649e-02, 2.133179e-01, 5.407477e-02, 1.070343e-01, 1.207816e-01, 5.898603e-02, 5.647888e-02, 1.076070e-01, 7.977657e-02, 2.690687e-01, 1.077435e-01, 3.279724e-01, 1.140342e-01, 1.154527e-01, 5.419787e-02, 1.098867e-01, 1.049436e-01, 5.082173e-02, 6.118521e-02, 2.107675e-01, 7.758130e-02, 7.001571e-02, 1.073186e-01, 4.963340e-02, 5.394587e-02, 4.612111e-02, 7.909675e-02, 7.081853e-02, 7.685204e-02, 1.132175e-01, 6.811432e-02, 1.231347e-01, 7.004574e-02, 1.089064e-01, 5.191893e-02, 2.689951e-01, 3.267575e-01, 1.008663e-01, 4.802894e-02, 6.230837e-02, 1.109208e-01, 6.627911e-02, 8.130255e-02, 1.094653e-01, 5.568541e-02, 9.874917e-02, 5.701293e-02, 7.421695e-02, 1.393040e-01, 8.828166e-06 };
        double[] zvals_expected = new double[] { 4.094542787, -5.958287216, -7.616568859, -6.457719779, -9.203616729, -10.019431514, -7.715486715, -5.026416071, -5.457993778, -4.692873330, -4.931283164, -7.290910329, -6.328761834, -6.338172537, 0.433932435, 1.078470756, 1.638876645, 0.703437006, -1.278442927, -0.497307097, 0.433333243, -0.192857977, -1.063364622, -2.474114538, 3.252898021, -2.229957876, -2.515581926, -1.418544300, -1.211558333, -1.790482149, -3.181217772, -2.187168299, -3.039383181, -2.399384279, -1.550948532, 5.379347430, -3.448197372, -1.993672779, 6.336619935, 2.329387922, 1.880280495, 0.540602946, 0.306013647, 1.967700936, -1.946876164, 1.492992904, 3.399070000, 5.445447763, -2.042586155, 1.038415698, 10.121391544, 1.065722732, 1.156883305, 2.473342141, -1.810301011, -0.637535148, 6.248852336, 5.382017137, 5.579262483, 1.092981554, 0.709738700, -1.844369286, 5.660253498, 3.502760590, -1.169699226, 0.213405474, 3.480449353, 2.851929432, -1.344144285, 0.369788430, 1.861136098, 2.677364258, 2.210610981, -0.093929275, 2.254537133, -2.472769164, 2.951309213, 2.037384116, 0.711098412, 1.318208131, 3.107896103, 0.919432700, -1.909512146, 1.051702242, 3.138428148, 0.276956565, 0.848116635, 3.571707066, 0.697559521, 0.589097196, 2.282167858, 0.859992866, 4.465496733, 0.526662485, -4.412237900, 0.240366792, -2.077626172, 1.988382134, 3.832504877, 0.393053401, 0.683612236, -0.127386732, -0.174890682, 2.941876192, 4.363924639, 3.918618005, -4.223069230, 3.133329974, 3.830075787, 2.556626718, -0.319030122, 0.023171093, -0.701206599, 1.039462023, 3.430224574, -0.531365033, -1.221299087, -3.471879279, 0.545302258, -0.094012061, -2.224318698, -2.006425249, -1.796891224, 1.792799985, 2.637030567, 2.499172484, 3.406675572, -0.757278429, 2.920806636, 1.223580021, 4.321604030, 3.714483644, 1.202957243, -0.820582100, 0.309384395, 1.305005410, 2.104096487, 1.783276250, 3.073716393, 1.777268003, 0.710186572, 1.986074319, -0.739698581, -0.401658318, 0.754599117, 1.085164836, -2.100113836, 2.351929605, -2.073117895, -1.276477554, 1.185842715, 3.411279361, -1.305372693, 2.348881190, -0.399945460, 3.314921843, -2.781362443, 2.652819094, -1.726814586, -0.239471355, -0.735326303, 1.528320564, 1.874431642, 0.036123072, -0.749113504, -0.959187862, 0.365486433, 2.114753848, -1.479111228, -2.989960091, -0.166011968, -0.385960754, -1.313996380, 0.163161548, 0.449266356, 2.757878211, -0.792848866, -0.644210444, 2.667413046, -2.209806237, 0.395680070, 1.238415063, -2.958388604, 1.917886602, 2.695339429, -1.909435881, -0.200518466, -1.421041172, -0.555735022, -0.108076244, -0.280110165, -0.978727707, 2.402743720, -0.745003303, 2.644547495, -2.489047558, 1.764876031, 0.153351678, 1.016619439, -4.913074631, 2.637495147, -1.923795851, -2.924531170, -0.146048350, -2.535340379, -2.170097247, -0.704450917, 3.240322900, -0.721504747, 1.959501429, 0.320694226, -0.498380144, 3.260451771, 3.703901572, 1.533557842, 2.116934588, 0.007562213, -1.097433427, 0.077664399, 0.024845610, -0.421176265, 0.456085590, 1.912495640, -2.022900342, 4.325966158, 0.274080250, 0.444076651, -1.508741999, 0.118965357, 1.971405595, -0.310386063, -1.100341487, -0.666053319, 2.023671705, 1.989128987, -0.780390564, 0.844943233, 1.424270602, 1.358245515, 1.640771855, -0.785668134, 0.444184574, 1.289884997, -0.081727285, 0.342718282, 0.781702452, -0.439626096, 2.544935912, 0.314620525, 1.179911368, -0.042698859, -0.395173744, -0.946324367, -0.507911593, -2.483856451, 1.030652857, 0.821158118, -0.448123713, 6.270517743 };
        double[] pvals_expected = new double[] { 4.243779e-05, 2.584251e-09, 2.700448e-14, 1.083124e-10, 3.733573e-20, 1.392306e-23, 1.251677e-14, 5.032991e-07, 4.862783e-08, 2.708701e-06, 8.223295e-07, 3.173337e-13, 2.514741e-10, 2.366114e-10, 6.643414e-01, 2.808345e-01, 1.012520e-01, 4.817902e-01, 2.011056e-01, 6.189770e-01, 6.647766e-01, 8.470718e-01, 2.876273e-01, 1.336350e-02, 1.143912e-03, 2.575939e-02, 1.189004e-02, 1.560448e-01, 2.256933e-01, 7.338895e-02, 1.468427e-03, 2.873979e-02, 2.373166e-03, 1.643019e-02, 1.209271e-01, 7.545084e-08, 5.653029e-04, 4.619905e-02, 2.390030e-10, 1.984672e-02, 6.008188e-02, 5.887863e-01, 7.595969e-01, 4.911388e-02, 5.156115e-02, 1.354521e-01, 6.772461e-04, 5.217869e-08, 4.110425e-02, 2.990870e-01, 4.958814e-24, 2.865596e-01, 2.473315e-01, 1.339242e-02, 7.026154e-02, 5.237824e-01, 4.203831e-10, 7.434137e-08, 2.441273e-08, 2.744128e-01, 4.778730e-01, 6.514157e-02, 1.528620e-08, 4.612949e-04, 2.421336e-01, 8.310125e-01, 5.014564e-04, 4.349160e-03, 1.789144e-01, 7.115434e-01, 6.273710e-02, 7.425404e-03, 2.707212e-02, 9.251661e-01, 2.417131e-02, 1.341390e-02, 3.167338e-03, 4.162244e-02, 4.770301e-01, 1.874465e-01, 1.886429e-03, 3.578785e-01, 5.620789e-02, 2.929467e-01, 1.700608e-03, 7.818158e-01, 3.963814e-01, 3.553510e-04, 4.854594e-01, 5.558016e-01, 2.248808e-02, 3.898015e-01, 8.024485e-06, 5.984328e-01, 1.027500e-05, 8.100480e-01, 3.775434e-02, 4.678071e-02, 1.271662e-04, 6.942835e-01, 4.942266e-01, 8.986354e-01, 8.611670e-01, 3.265400e-03, 1.282792e-05, 8.930334e-05, 2.418793e-05, 1.730416e-03, 1.284274e-04, 1.057531e-02, 7.497064e-01, 9.815140e-01, 4.831808e-01, 2.986003e-01, 6.040895e-04, 5.951707e-01, 2.219847e-01, 5.177320e-04, 5.855507e-01, 9.251004e-01, 2.613621e-02, 4.482202e-02, 7.236537e-02, 7.301742e-02, 8.368881e-03, 1.245495e-02, 6.586634e-04, 4.488905e-01, 3.494493e-03, 2.211226e-01, 1.555177e-05, 2.040773e-04, 2.290047e-01, 4.118924e-01, 7.570318e-01, 1.919034e-01, 3.538034e-02, 7.455389e-02, 2.116458e-03, 7.553673e-02, 4.775953e-01, 4.703635e-02, 4.594901e-01, 6.879391e-01, 4.504969e-01, 2.778595e-01, 3.572917e-02, 1.868429e-02, 3.817188e-02, 2.017990e-01, 2.356961e-01, 6.476464e-04, 1.917784e-01, 1.883792e-02, 6.892002e-01, 9.180365e-04, 5.417320e-03, 7.987482e-03, 8.421375e-02, 8.107421e-01, 4.621479e-01, 1.264461e-01, 6.088301e-02, 9.711845e-01, 4.537961e-01, 3.374737e-01, 7.147515e-01, 3.446114e-02, 1.391236e-01, 2.792949e-03, 8.681489e-01, 6.995291e-01, 1.888599e-01, 8.703926e-01, 6.532436e-01, 5.822158e-03, 4.278737e-01, 5.194451e-01, 7.648862e-03, 2.712795e-02, 6.923446e-01, 2.155742e-01, 3.095516e-03, 5.513717e-02, 7.036561e-03, 5.621772e-02, 8.410768e-01, 1.553177e-01, 5.783972e-01, 9.139361e-01, 7.793954e-01, 3.277243e-01, 1.628008e-02, 4.562770e-01, 8.185310e-03, 1.281526e-02, 7.759723e-02, 8.781222e-01, 3.093447e-01, 9.024527e-07, 8.357430e-03, 5.439191e-02, 3.452960e-03, 8.838844e-01, 1.124006e-02, 3.000919e-02, 4.811588e-01, 1.195559e-03, 4.706060e-01, 5.006557e-02, 7.484449e-01, 6.182207e-01, 1.113888e-03, 2.127814e-04, 1.251516e-01, 3.427559e-02, 9.939663e-01, 2.724629e-01, 9.380957e-01, 9.801783e-01, 6.736301e-01, 6.483325e-01, 5.582446e-02, 4.309441e-02, 1.524737e-05, 7.840253e-01, 6.569911e-01, 1.313778e-01, 9.053038e-01, 4.868889e-02, 7.562701e-01, 2.711943e-01, 5.053834e-01, 4.301493e-02, 4.669822e-02, 4.351687e-01, 3.981509e-01, 1.543811e-01, 1.743985e-01, 1.008578e-01, 4.320696e-01, 6.569131e-01, 1.971029e-01, 9.348643e-01, 7.318134e-01, 4.343971e-01, 6.602119e-01, 1.093594e-02, 7.530525e-01, 2.380471e-01, 9.659419e-01, 6.927182e-01, 3.439926e-01, 6.115200e-01, 1.300354e-02, 3.027140e-01, 4.115643e-01, 6.540679e-01, 3.659400e-10 };
        double[] stder_actual = model._output.stdErr();
        double[] zvals_actual = model._output.zValues();
        double[] pvals_actual = model._output.pValues();
        String[] names_actual = model._output.coefficientNames();
        HashMap<String, Integer> coefMap = new HashMap<>();
        for (int i = 0; i < names_expected.length; ++i) coefMap.put(names_expected[i], i);
        double[] coefs_actual = model._output._global_beta;
        for (int i = 0; i < exp_coefs.length; ++i) {
            String s = removeDot(names_actual[i]);
            if (!coefMap.containsKey(s)) {
                // removed col, check we removed it too
                assertTrue(coefs_actual[i] == 0 && Double.isNaN(zvals_actual[i]));
                System.out.println("found removed col " + s);
            } else {
                int id = coefMap.get(s);
                assertEquals(exp_coefs[id], coefs_actual[i], 1e-4);
                assertEquals(stder_expected[id], stder_actual[i], Math.abs(stder_expected[id] * 1e-4));
                assertEquals(zvals_expected[id], zvals_actual[i], Math.abs(zvals_expected[id] * 1e-4));
                assertEquals(pvals_expected[id], pvals_actual[i], pvals_expected[id] * 1e-4);
            }
        }
        predict = model.score(_airlines);
    } finally {
        if (model != null)
            model.delete();
        if (predict != null)
            predict.delete();
    }
}
Also used : Frame(water.fvec.Frame) HashMap(java.util.HashMap) ModelMetricsRegressionGLM(hex.ModelMetricsRegressionGLM) H2OModelBuilderIllegalArgumentException(water.exceptions.H2OModelBuilderIllegalArgumentException) GLMParameters(hex.glm.GLMModel.GLMParameters) NFSFileVec(water.fvec.NFSFileVec) Test(org.junit.Test)

Aggregations

H2OModelBuilderIllegalArgumentException (water.exceptions.H2OModelBuilderIllegalArgumentException)7 Test (org.junit.Test)6 Frame (water.fvec.Frame)6 SplitFrame (hex.SplitFrame)2 GLMParameters (hex.glm.GLMModel.GLMParameters)2 HashMap (java.util.HashMap)2 NFSFileVec (water.fvec.NFSFileVec)2 ConfusionMatrix (hex.ConfusionMatrix)1 ModelMetricsBinomialGLM (hex.ModelMetricsBinomialGLM)1 ModelMetricsRegressionGLM (hex.ModelMetricsRegressionGLM)1 DeepLearningParameters (hex.deeplearning.DeepLearningModel.DeepLearningParameters)1 ClassSamplingMethod (hex.deeplearning.DeepLearningModel.DeepLearningParameters.ClassSamplingMethod)1 DistributionFamily (hex.genmodel.utils.DistributionFamily)1 LinkedHashSet (java.util.LinkedHashSet)1 Random (java.util.Random)1 Vec (water.fvec.Vec)1