ANOVA

2.1.7. ANOVA#

Giả định của ANOVA

  • Normal distribution

  • Independent observations

  • Equivalent variance

SST: Total sum of squares $\(SST = \sum_{i=1}^n (y_i - \bar{y})^2\)$

SSW: Sum of squares within $\(SSW = \sum_{i=1}^k \sum_{j=1}^{n_i} (x_{ij} - \bar{x}_i)^2\)$

SSB: Sum of squares between $\(SSB = n \sum_{i=1}^k \sum_{j=1}^n (\bar{x}_i - \bar{x})^2\)$

f-statistics $\(SST = SSW + SSB\)\( \)\(F-stat = \frac{\frac{SSB}{m - 1}}{\frac{SSW}{n_t - m}}\)$

Đánh giá các bộ phim có giống nhau?

  • H0: đánh giá các bộ phim là như nhau

  • Ha: đánh giá các bộ phim là khác nhau

film_A = np.asarray([5, 3, 5, 3])
film_B = np.asarray([8, 3, 4, 5])
film_C = np.asarray([5, 6, 5, 8])
film_D = np.asarray([4, 6, 8, 2])

# SST: Total sum of squares
mean_A = film_A.mean()
mean_B = film_B.mean()
mean_C = film_C.mean()
mean_D = film_D.mean()

mean_collect = np.asarray([mean_A, mean_B, mean_C, mean_D])
grand_mean = mean_collect.mean()
print( "Grand mean:", grand_mean)

ss_A = np.inner(film_A - grand_mean, film_A - grand_mean)
ss_B = np.inner(film_B - grand_mean, film_B - grand_mean)
ss_C = np.inner(film_C - grand_mean, film_C - grand_mean)
ss_D = np.inner(film_D - grand_mean, film_D - grand_mean)
SST = ss_A + ss_B + ss_C + ss_D
print( "Total sum of squares:", SST)
Grand mean: 5.0
Total sum of squares: 52.0
# SSW: Sum of squares within
sw_A = np.inner(film_A - mean_A, film_A - mean_A)
sw_B = np.inner(film_B - mean_B, film_B - mean_B)
sw_C = np.inner(film_C - mean_C, film_C - mean_C)
sw_D = np.inner(film_D - mean_D, film_D - mean_D)
SSW = sw_A + sw_B + sw_C + sw_D
print( "Sum of squares within:", SSW)
Sum of squares within: 44.0
# SSB: Sum of squares between
n = film_A.size
SSB = n * np.inner(mean_collect - grand_mean, mean_collect - grand_mean)
print( "Sum of squares between:", SSB)
Sum of squares between: 8.0
n = film_A.size + film_B.size + film_C.size + film_D.size
m = mean_collect.size
f_stat = (SSB / (m - 1)) / (SSW / (n - m))
print( "F statistics:", f_stat)

# get critical value
dfn = m - 1
dfd = n - m
critical_value = stats.f.ppf(0.95, dfn, dfd)
print( "Critical value:", critical_value)

if f_stat > critical_value:
    print("Reject H0 => đánh giá các bộ phim là khác nhau")
else:
    print("Reject Ha => đánh giá các bộ phim là như nhau")
F statistics: 0.7272727272727273
Critical value: 3.490294819497605
Reject Ha => đánh giá các bộ phim là như nhau