Exemple #1
0
def test_anova_eq():
    "Test ANOVA against r-ez"
    r_require('ez')

    ds = datasets.get_uv(nrm=True)
    ds.to_r('ds')

    # nested random effect
    aov_explicit = test.ANOVA('fltvar', 'A + B + A%B + nrm(B) + A%nrm(B)', ds=ds)
    aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=ds)
    assert str(aov_explicit) == str(aov)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', ds)
    fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', ds)
    r_res = r('ezANOVA(ds, fltvar, nrm, A, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # sub parameter
    r1 = test.ANOVA('fltvar', 'B * rm', ds=ds.sub('A == "a1"'))
    r2 = test.ANOVA('fltvar', 'B * rm', sub='A == "a1"', ds=ds)
    assert str(r2) == str(r1)

    # not fully specified model with random effects
    with pytest.raises(IncompleteModel):
        test.anova('fltvar', 'A*rm', ds=ds)

    # unequal group size, 1-way
    sds = ds.sub("A == 'a1'").sub("nrm.isnotin(('s037', 's038', 's039'))")
    sds.to_r('sds')
    aov = test.ANOVA('fltvar', 'B * nrm(B)', ds=sds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'B * nrm(B)', sds)
    fnds = run_as_ndanova('fltvar', 'B * nrm(B)', sds)
    with r_warning_filter:  # type argument to ezANOVA
        r_res = r('ezANOVA(sds, fltvar, nrm, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # unequal group size, 2-way
    sds = ds.sub("nrm.isnotin(('s037', 's038', 's039'))")
    sds.to_r('sds')
    aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=sds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', sds)
    fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', sds)
    with r_warning_filter:  # type argument to ezANOVA
        r_res = r('ezANOVA(sds, fltvar, nrm, A, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # empty cells
    dss = ds.sub("A%B != ('a2', 'b2')")
    with pytest.raises(NotImplementedError):
        test.anova('fltvar', 'A*B', ds=dss)
    with pytest.raises(NotImplementedError):
        run_on_lm_fitter('fltvar', 'A*B', ds=dss)
    dss = ds.sub("A%B != ('a1', 'b1')")
    with pytest.raises(NotImplementedError):
        test.anova('fltvar', 'A*B', ds=dss)
    with pytest.raises(NotImplementedError):
        run_on_lm_fitter('fltvar', 'A*B', ds=dss)
def test_anova_eq():
    "Test ANOVA against r-ez"
    r_require('ez')

    ds = datasets.get_uv(nrm=True)
    ds.to_r('ds')

    # nested random effect
    aov_explicit = test.ANOVA('fltvar', 'A + B + A%B + nrm(B) + A%nrm(B)', ds=ds)
    aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=ds)
    assert str(aov_explicit) == str(aov)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', ds)
    fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', ds)
    r_res = r('ezANOVA(ds, fltvar, nrm, A, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # sub parameter
    r1 = test.ANOVA('fltvar', 'B * rm', ds=ds.sub('A == "a1"'))
    r2 = test.ANOVA('fltvar', 'B * rm', sub='A == "a1"', ds=ds)
    assert str(r2) == str(r1)

    # not fully specified model with random effects
    with pytest.raises(IncompleteModel):
        test.anova('fltvar', 'A*rm', ds=ds)

    # unequal group size, 1-way
    sds = ds.sub("A == 'a1'").sub("nrm.isnotin(('s037', 's038', 's039'))")
    sds.to_r('sds')
    aov = test.ANOVA('fltvar', 'B * nrm(B)', ds=sds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'B * nrm(B)', sds)
    fnds = run_as_ndanova('fltvar', 'B * nrm(B)', sds)
    with r_warning_filter:  # type argument to ezANOVA
        r_res = r('ezANOVA(sds, fltvar, nrm, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # unequal group size, 2-way
    sds = ds.sub("nrm.isnotin(('s037', 's038', 's039'))")
    sds.to_r('sds')
    aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=sds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', sds)
    fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', sds)
    with r_warning_filter:  # type argument to ezANOVA
        r_res = r('ezANOVA(sds, fltvar, nrm, A, between=B)')
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez')

    # empty cells
    dss = ds.sub("A%B != ('a2', 'b2')")
    with pytest.raises(NotImplementedError):
        test.anova('fltvar', 'A*B', ds=dss)
    with pytest.raises(NotImplementedError):
        run_on_lm_fitter('fltvar', 'A*B', ds=dss)
    dss = ds.sub("A%B != ('a1', 'b1')")
    with pytest.raises(NotImplementedError):
        test.anova('fltvar', 'A*B', ds=dss)
    with pytest.raises(NotImplementedError):
        run_on_lm_fitter('fltvar', 'A*B', ds=dss)
Exemple #3
0
def test_anova():
    "Test ANOVA"
    r_require('car')

    ds = datasets.get_uv(nrm=True)
    ds.to_r('ds')

    # fixed effects
    aov = test.ANOVA('fltvar', 'A*B', ds=ds)
    assert f'\n{aov}\n' == """
                SS   df      MS          F        p
---------------------------------------------------
A            28.69    1   28.69   25.69***   < .001
B             0.04    1    0.04    0.03        .855
A x B         1.16    1    1.16    1.04        .310
Residuals    84.85   76    1.12                    
---------------------------------------------------
Total       114.74   79
"""
    fs = run_on_lm_fitter('fltvar', 'A*B', ds)
    fnds = run_as_ndanova('fltvar', 'A*B', ds)
    r_res = r("Anova(lm(fltvar ~ A * B, ds, type=2))")
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova')

    # random effect
    aov = test.ANOVA('fltvar', 'A*B*rm', ds=ds)
    assert f'\n{aov}\n' == """
            SS   df      MS   MS(denom)   df(denom)          F        p
-----------------------------------------------------------------------
A        28.69    1   28.69        1.21          19   23.67***   < .001
B         0.04    1    0.04        1.15          19    0.03        .859
A x B     1.16    1    1.16        1.01          19    1.15        .297
-----------------------------------------------------------------------
Total   114.74   79
"""
    fs = run_on_lm_fitter('fltvar', 'A*B*rm', ds)
    fnds = run_as_ndanova('fltvar', 'A*B*rm', ds)
    r('test.aov <- aov(fltvar ~ A * B + Error(rm / (A * B)), ds)')
    print(r('test.summary <- summary(test.aov)'))
    r_res = r['test.summary'][1:]
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'rmaov')
def test_anova():
    "Test ANOVA"
    r_require('car')

    ds = datasets.get_uv(nrm=True)
    ds.to_r('ds')

    # fixed effects
    aov = test.ANOVA('fltvar', 'A*B', ds=ds)
    assert f'\n{aov}\n' == """
                SS   df      MS          F        p
---------------------------------------------------
A            28.69    1   28.69   25.69***   < .001
B             0.04    1    0.04    0.03        .855
A x B         1.16    1    1.16    1.04        .310
Residuals    84.85   76    1.12                    
---------------------------------------------------
Total       114.74   79
"""
    fs = run_on_lm_fitter('fltvar', 'A*B', ds)
    fnds = run_as_ndanova('fltvar', 'A*B', ds)
    r_res = r("Anova(lm(fltvar ~ A * B, ds, type=2))")
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova')

    # random effect
    aov = test.ANOVA('fltvar', 'A*B*rm', ds=ds)
    assert f'\n{aov}\n' == """
            SS   df      MS   MS(denom)   df(denom)          F        p
-----------------------------------------------------------------------
A        28.69    1   28.69        1.21          19   23.67***   < .001
B         0.04    1    0.04        1.15          19    0.03        .859
A x B     1.16    1    1.16        1.01          19    1.15        .297
-----------------------------------------------------------------------
Total   114.74   79
"""
    fs = run_on_lm_fitter('fltvar', 'A*B*rm', ds)
    fnds = run_as_ndanova('fltvar', 'A*B*rm', ds)
    r('test.aov <- aov(fltvar ~ A * B + Error(rm / (A * B)), ds)')
    print(r('test.summary <- summary(test.aov)'))
    r_res = r['test.summary'][1:]
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'rmaov')
Exemple #5
0
def test_anova_r_adler():
    """Test ANOVA accuracy by comparing with R (Adler dataset of car package)

    An unbalanced 3 by 2 independent measures design.
    """
    from rpy2.robjects import r

    # "Adler" dataset
    r_require('car')
    ds = Dataset.from_r('Adler')
    ds['rating'] = ds['rating'].astype(np.float64)

    # with balanced data
    dsb = ds.equalize_counts('expectation % instruction')
    dsb.to_r('AdlerB')
    aov = test.ANOVA('rating', 'instruction * expectation', ds=dsb)
    fs = run_on_lm_fitter('rating', 'instruction * expectation', dsb)
    fnds = run_as_ndanova('rating', 'instruction * expectation', dsb)
    print(r('a.aov <- aov(rating ~ instruction * expectation, AdlerB)'))
    print(r('a.summary <- summary(a.aov)'))
    r_res = r['a.summary'][0]
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds)

    # with unbalanced data; for Type II SS use car package
    aov = test.ANOVA('rating', 'instruction * expectation', ds=ds)
    fs = run_on_lm_fitter('rating', 'instruction * expectation', ds)
    fnds = run_as_ndanova('rating', 'instruction * expectation', ds)
    r_res = r("Anova(lm(rating ~ instruction * expectation, Adler, type=2))")
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova')

    # single predictor
    aov = test.ANOVA('rating', 'instruction', ds=ds)
    fs = run_on_lm_fitter('rating', 'instruction', ds)
    fnds = run_as_ndanova('rating', 'instruction', ds)
    r_res = r("Anova(lm(rating ~ instruction, Adler, type=2))")
    assert_f_test_equal(aov.f_tests[0], r_res, 0, fs[0], fnds[0], 'Anova')
Exemple #6
0
def test_anova():
    "Test ANOVA"
    r_require('car')

    ds = datasets.get_uv(nrm=True)
    ds.to_r('ds')

    # fixed effects
    aov = test.ANOVA('fltvar', 'A*B', ds=ds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A*B', ds)
    fnds = run_as_ndanova('fltvar', 'A*B', ds)
    r_res = r("Anova(lm(fltvar ~ A * B, ds, type=2))")
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova')

    # random effect
    aov = test.ANOVA('fltvar', 'A*B*rm', ds=ds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'A*B*rm', ds)
    fnds = run_as_ndanova('fltvar', 'A*B*rm', ds)
    r('test.aov <- aov(fltvar ~ A * B + Error(rm / (A * B)), ds)')
    print(r('test.summary <- summary(test.aov)'))
    r_res = r['test.summary'][1:]
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'rmaov')
def test_anova_r_adler():
    """Test ANOVA accuracy by comparing with R (Adler dataset of car package)

    An unbalanced 3 by 2 independent measures design.
    """
    from rpy2.robjects import r

    # "Adler" dataset
    r_require('car')
    ds = Dataset.from_r('Adler')
    ds['rating'] = ds['rating'].astype(np.float64)

    # with balanced data
    dsb = ds.equalize_counts('expectation % instruction')
    dsb.to_r('AdlerB')
    aov = test.ANOVA('rating', 'instruction * expectation', ds=dsb)
    fs = run_on_lm_fitter('rating', 'instruction * expectation', dsb)
    fnds = run_as_ndanova('rating', 'instruction * expectation', dsb)
    print(r('a.aov <- aov(rating ~ instruction * expectation, AdlerB)'))
    print(r('a.summary <- summary(a.aov)'))
    r_res = r['a.summary'][0]
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds)

    # with unbalanced data; for Type II SS use car package
    aov = test.ANOVA('rating', 'instruction * expectation', ds=ds)
    fs = run_on_lm_fitter('rating', 'instruction * expectation', ds)
    fnds = run_as_ndanova('rating', 'instruction * expectation', ds)
    r_res = r("Anova(lm(rating ~ instruction * expectation, Adler, type=2))")
    assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova')

    # single predictor
    aov = test.ANOVA('rating', 'instruction', ds=ds)
    fs = run_on_lm_fitter('rating', 'instruction', ds)
    fnds = run_as_ndanova('rating', 'instruction', ds)
    r_res = r("Anova(lm(rating ~ instruction, Adler, type=2))")
    assert_f_test_equal(aov.f_tests[0], r_res, 0, fs[0], fnds[0], 'Anova')