def test_equivalence(self): data = self.data # compare no transform with standard anova res = smo.equivalence_scale_oneway(data, 0.5, method='unequal', center=0, transform='identity') res2 = equivalence_oneway(self.data, 0.5, use_var="unequal") assert_allclose(res.pvalue, res2.pvalue, rtol=1e-13) assert_allclose(res.statistic, res2.statistic, rtol=1e-13) assert_allclose(res.df, res2.df) res = smo.equivalence_scale_oneway(data, 0.5, method='bf', center=0, transform='identity') res2 = equivalence_oneway(self.data, 0.5, use_var="bf") assert_allclose(res.pvalue, res2.pvalue, rtol=1e-13) assert_allclose(res.statistic, res2.statistic, rtol=1e-13) assert_allclose(res.df, res2.df)
def test_equivalence_equal(self): # reference numbers from Jan and Shieh 2019, p. 5 means = self.means nobs = self.nobs stds = self.stds n_groups = self.n_groups eps = 0.5 res0 = anova_generic(means, stds**2, nobs, use_var="equal") f = res0.statistic res = equivalence_oneway_generic(f, n_groups, nobs.sum(), eps, res0.df, alpha=0.05, margin_type="wellek") assert_allclose(res.pvalue, 0.0083, atol=0.001) assert_equal(res.df, [3, 46]) # the agreement for f-stat looks too low assert_allclose(f, 0.0926, atol=0.0006) res = equivalence_oneway(self.data, eps, use_var="equal", margin_type="wellek") assert_allclose(res.pvalue, 0.0083, atol=0.001) assert_equal(res.df, [3, 46])
def test_equivalence_welch(self): # reference numbers from Jan and Shieh 2019, p. 6 means = self.means nobs = self.nobs stds = self.stds n_groups = self.n_groups vars_ = stds**2 eps = 0.5 res0 = anova_generic(means, vars_, nobs, use_var="unequal", welch_correction=False) f_stat = res0.statistic res = equivalence_oneway_generic(f_stat, n_groups, nobs.sum(), eps, res0.df, alpha=0.05, margin_type="wellek") assert_allclose(res.pvalue, 0.0110, atol=0.001) assert_allclose(res.df, [3.0, 22.6536], atol=0.0006) # agreement for Welch f-stat looks too low b/c welch_correction=False assert_allclose(f_stat, 0.1102, atol=0.007) res = equivalence_oneway(self.data, eps, use_var="unequal", margin_type="wellek") assert_allclose(res.pvalue, 0.0110, atol=1e-4) assert_allclose(res.df, [3.0, 22.6536], atol=0.0006) assert_allclose(res.f_stat, 0.1102, atol=1e-4) # 0.007) # check post-hoc power, JS p. 6 pow_ = _power_equivalence_oneway_emp(f_stat, n_groups, nobs, eps, res0.df) assert_allclose(pow_, 0.1552, atol=0.007) pow_ = power_equivalence_oneway(eps, eps, nobs.sum(), n_groups=n_groups, df=None, alpha=0.05, margin_type="wellek") assert_allclose(pow_, 0.05, atol=1e-13) nobs_t = nobs.sum() es = effectsize_oneway(means, vars_, nobs, use_var="unequal") es = np.sqrt(es) es_w0 = f2_to_wellek(es**2, n_groups) es_w = np.sqrt(fstat_to_wellek(f_stat, n_groups, nobs_t / n_groups)) pow_ = power_equivalence_oneway(es_w, eps, nobs_t, n_groups=n_groups, df=None, alpha=0.05, margin_type="wellek") assert_allclose(pow_, 0.1552, atol=0.007) assert_allclose(es_w0, es_w, atol=0.007) margin = wellek_to_f2(eps, n_groups) pow_ = power_equivalence_oneway(es**2, margin, nobs_t, n_groups=n_groups, df=None, alpha=0.05, margin_type="f2") assert_allclose(pow_, 0.1552, atol=0.007)