Beispiel #1
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')

    # 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')
Beispiel #2
0
def test_anova_r_sleep():
    "Test ANOVA accuracy by comparing with R (sleep dataset)"
    from rpy2.robjects import r

    # "sleep" dataset
    print r('data(sleep)')
    ds = Dataset.from_r('sleep')
    ds['ID'].random = True

    # independent measures
    aov = test.ANOVA('extra', 'group', ds=ds)
    fs = run_on_lm_fitter('extra', 'group', ds)
    print r('sleep.aov <- aov(extra ~ group, sleep)')
    print r('sleep.summary <- summary(sleep.aov)')
    r_res = r['sleep.summary'][0]
    assert_f_test_equal(aov.f_tests[0], r_res, 0, fs[0])

    # repeated measures
    aov = test.ANOVA('extra', 'group * ID', ds=ds)
    fs = run_on_lm_fitter('extra', 'group * ID', ds)
    print r('sleep.aov <- aov(extra ~ group + Error(ID / group), sleep)')
    print r('sleep.summary <- summary(sleep.aov)')
    r_res = r['sleep.summary'][1][0]
    assert_f_test_equal(aov.f_tests[0], r_res, 0, fs[0])

    # unbalanced (independent measures)
    ds2 = ds[1:]
    print r('sleep2 <- subset(sleep, (group == 2) | (ID != 1))')
    aov = test.ANOVA('extra', 'group', ds=ds2)
    fs = run_on_lm_fitter('extra', 'group', ds2)
    print r('sleep2.aov <- aov(extra ~ group, sleep2)')
    print r('sleep2.summary <- summary(sleep2.aov)')
    r_res = r['sleep2.summary'][0]
    assert_f_test_equal(aov.f_tests[0], r_res, 0, fs[0])
Beispiel #3
0
def test_anova():
    "Test ANOVA"
    from rpy2.robjects import r
    r_require('car')
    r_require('ez')

    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')

    # nested random effect
    aov = test.ANOVA('fltvar', 'B + A%B + A * nrm(B)', ds=ds)
    print(aov)
    fs = run_on_lm_fitter('fltvar', 'B + A%B + A * nrm(B)', ds)
    fnds = run_as_ndanova('fltvar', 'B + A%B + A * 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')

    # not fully specified model with random effects
    assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*rm', ds=ds)

    # empty cells
    dss = ds.sub("A%B != ('a2', 'b2')")
    assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss)
    assert_raises(NotImplementedError,
                  run_on_lm_fitter,
                  'fltvar',
                  'A*B',
                  ds=dss)
    dss = ds.sub("A%B != ('a1', 'b1')")
    assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss)
    assert_raises(NotImplementedError,
                  run_on_lm_fitter,
                  'fltvar',
                  'A*B',
                  ds=dss)
Beispiel #4
0
def test_lmfitter():
    "Test the _nd_anova class"
    ds = datasets.get_uts()

    # independent, residuals vs. Hopkins
    y = ds['uts'].x

    x = ds.eval("A * B")
    lm = glm._nd_anova(x)
    f_maps = lm.map(y)
    p_maps = lm.p_maps(f_maps)

    x_full = ds.eval("A * B + ind(A%B)")
    lm_full = glm._nd_anova(x_full)
    assert isinstance(lm_full, glm._BalancedMixedNDANOVA)
    f_maps_full = lm_full.map(y)
    p_maps_full = lm_full.p_maps(f_maps)

    for f, f_full in zip(f_maps, f_maps_full):
        assert_allclose(f, f_full)
    for p, p_full in zip(p_maps, p_maps_full):
        assert_allclose(p, p_full)

    # repeated measures
    x = ds.eval("A * B * rm")
    lm = glm._nd_anova(x)
    f_maps = lm.map(y)
    p_maps = lm.p_maps(f_maps)

    aov = test.ANOVA(y[:, 0], x)
    for f_test, f_map, p_map in zip(aov.f_tests, f_maps, p_maps):
        assert f_map[0] == pytest.approx(f_test.F)
        assert p_map[0] == pytest.approx(f_test.p)
Beispiel #5
0
 def loc_ress(self):
     # McCarthy & Wood tests
     loc_ress = {}
     for t1, t2 in combinations(self.terms.values(), 2):
         for i, hemi in enumerate(['lh', 'rh']):
             y1 = self.trf_dss[t1][self.metric].sub(source=self.masks[i])
             y2 = self.trf_dss[t2][self.metric].sub(source=self.masks[i])
             dy = normalize_in_cells(y1, 'source') - normalize_in_cells(y2, 'source')
             ds_dy = table.melt_ndvar(dy, 'source', ds=self.trf_dss[t1])
             loc_ress[t1, t2, hemi] = loc_ress[t2, t1, hemi] = test.ANOVA(self.metric, 'source * subject', ds=ds_dy)
     return loc_ress
Beispiel #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)
    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')
Beispiel #7
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)
Beispiel #8
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')