def test_mean_without_pop_variance(n: int, target_mean: float, sample_mean: float, sample_stdev: float, significance: float, side: stats_test.Side) -> (bool, float): """ 平均値に関するt検定を行う. ## Parameters `n`: 標本の大きさ `target_mean`: 帰無仮説において等しいと仮定する平均値 `sample_mean`: 標本平均 `sample_stdev`: 標本標準偏差 `significance`: 有意水準 `side`: 棄却域の取り方 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `t`: 実現値 """ t = (sample_mean - target_mean) / (sample_stdev / math.sqrt(n - 1)) df = n - 1 bottom = stats.t.ppf(significance / 2, df) top = stats.t.ppf(1 - significance / 2, df) bottom_left = stats.t.ppf(1 - significance, df) top_right = stats.t.ppf(significance, df) is_reject = stats_test.is_reject( t, side, bottom, top, bottom_left, top_right) return (is_reject, t)
def test_mean_with_pop_variance(n: int, target_mean: float, sample_mean: float, pop_stdev: float, significance: float, side: stats_test.Side) -> (bool, float): """ 母分散既知において平均値に関するz検定を行う. ## Parameters `n`: 標本の大きさ `target_mean`: 帰無仮説において等しいと仮定する平均値 `sample_mean`: 標本平均 `sample_stdev`: 既知の標本標準偏差 `significance`: 有意水準 `side`: 棄却域の取り方 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `z`: 実現値 """ z = (sample_mean - target_mean) / (pop_stdev / math.sqrt(n)) bottom = stats.norm.ppf(significance / 2) top = stats.norm.ppf(1 - significance / 2) bottom_left = stats.norm.ppf(1 - significance) top_right = stats.norm.ppf(significance) is_reject = stats_test.is_reject( z, side, bottom, top, bottom_left, top_right) return (is_reject, z)
def test_mean_diff_without_pop_variance(n1: int, mean1: float, variance1: float, n2: int, mean2: float, variance2: float, significance: float) -> (bool, float): """ 平均値の差に関するt検定を行う. ## Parameters `n1`: 1つめの標本の大きさ `mean1`: 1つめの標本の標本平均 `variance1`: 1つめの標本の標本分散 `n2`: 2つめの標本の大きさ `mean2`: 2つめの標本の標本平均 `variance2`: 2つめの標本の標本分散 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `t`: 実現値 """ df = n1 + n2 - 2 u = (n1 * variance1 + n2 * variance2) / df t = (mean1 - mean2) / math.sqrt(u * (1 / n1 + 1 / n2)) bottom = stats.t.ppf(significance / 2, df) top = stats.t.ppf(1 - significance / 2, df) side = "double" is_reject = stats_test.is_reject(t, stats_test.side_from_str(side), bottom, top, None, None) return (is_reject, t)
def test_mean_diff_with_pop_variance(n1: int, mean1: float, pop_variance1: float, n2: int, mean2: float, pop_variance2: float, significance: float) -> (bool, float): """ 母分散既知において平均値の差に関するz検定を行う. ## Parameters `n1`: 1つめの標本の大きさ `mean1`: 1つめの標本の標本平均 `pop_variance1`: 1つめの標本の既知の母分散 `n2`: 2つめの標本の大きさ `mean2`: 2つめの標本の標本平均 `pop_variance2`: 2つめの標本の既知の母分散 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `z`: 実現値 """ z = (mean1 - mean2) / math.sqrt(pop_variance1 / n1 + pop_variance2 / n2) bottom = stats.norm.ppf(significance / 2) top = stats.norm.ppf(1 - significance / 2) side = "double" is_reject = stats_test.is_reject(z, stats_test.side_from_str(side), bottom, top, None, None) return (is_reject, z)
def test_var_ratio(n1: int, sample_variance1: float, n2: int, sample_variance2: float, significance: float) -> (bool, float): """ 分散比に関するF検定を行う. ## Parameters `n1`: 1つめの標本の大きさ `sample_variance1`: 1つめの標本の既知の母分散 `n2`: 2つめの標本の大きさ `sample_variance2`: 2つめの標本の既知の母分散 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `z`: 実現値 """ f = n1 * (n2 - 1) * sample_variance1 / (n2 * (n1 - 1) * sample_variance2) df1 = n1 - 1 df2 = n2 - 1 bottom = stats.f.ppf(significance / 2, df1, df2) top = stats.f.ppf(1 - significance / 2, df1, df2) side = "double" is_reject = stats_test.is_reject(f, stats_test.side_from_str(side), bottom, top, None, None) return (is_reject, f)
def test_no_correl(n: int, r: float, significance: float) -> (bool, float): """ 無相関かどうかのt検定を行う. ## Parameters `n`: 標本の大きさ `r`: 標本相関係数 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `t`: 実現値 """ df = n - 2 t = r * math.sqrt(df) / math.sqrt(1 - math.pow(r, 2)) bottom = stats.t.ppf(significance / 2, df) top = stats.t.ppf(1 - significance / 2, df) side = stats_test.side_from_str("double") is_reject = stats_test.is_reject(t, side, bottom, top, None, None) return (is_reject, t)
def test_variance(n: int, target_variance: float, sample_variance: float, significance: float) -> (bool, float): """ 分散に関するカイ2乗検定を行う. ## Parameters `n`: 標本の大きさ `target_variance`: 帰無仮説において等しいと仮定する分散 `sample_variance`: 標本分散 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `x`: 実現値 """ x = n * sample_variance / target_variance df = n - 1 bottom = stats.chi2.ppf(significance / 2, df) top = stats.chi2.ppf(1 - significance / 2, df) side = "double" is_reject = stats_test.is_reject(x, stats_test.side_from_str(side), bottom, top, None, None) return (is_reject, x)
def test_correl_diff(n1: int, n2: int, r1: float, r2: float, significance: float) -> (bool, float): """ 相関係数に関するz検定を行う. ## Parameters `n`: 標本の大きさ `target_r`: 帰無仮説で等しいと仮定する相関係数 `r`: 標本相関係数 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `z`: 実現値 """ x1 = math.log((1 + r1) / (1 - r1)) / 2.0 x2 = math.log((1 + r2) / (1 - r2)) / 2.0 z = (x1 - x2) / math.sqrt(1 / (n1 - 3) + 1 / (n2 - 3)) bottom = stats.norm.ppf(significance / 2) top = stats.norm.ppf(1 - significance / 2) side = stats_test.side_from_str("double") is_reject = stats_test.is_reject(z, side, bottom, top, None, None) return (is_reject, z)
def test_correl(n: int, target_r: float, r: float, significance: float) -> (bool, float): """ 相関係数に関するz検定を行う. ## Parameters `n`: 標本の大きさ `target_r`: 帰無仮説で等しいと仮定する相関係数 `r`: 標本相関係数 `significance`: 有意水準 ## Returns `is_reject`: 帰無仮説が棄却されるかどうか `z`: 実現値 """ x = math.log((1 + r) / (1 - r)) / 2.0 xi = math.log((1 + target_r) / (1 - target_r)) / 2.0 z = (x - xi) * math.sqrt(n - 3) bottom = stats.norm.ppf(significance / 2) top = stats.norm.ppf(1 - significance / 2) side = stats_test.side_from_str("double") is_reject = stats_test.is_reject(z, side, bottom, top, None, None) return (is_reject, z)