مقدمه
ANOVA (Analysis of Variance) ابزاری آماری است که برای مقایسه میانگینها بین دو یا چند گروه استفاده میشود. ایدهٔ پایه این است که آیا واریانس «بینگروهی» نسبت به واریانس «درونگروهی» بزرگتر است یا نه — اگر بزرگتر باشد، احتمالاً میانگینها اختلاف معنیداری دارند. ANOVA از زمان رونالد فیشر بهعنوان یک روش مرکزی در طراحی آزمایش و تحلیل داده مطرح شده است.
چرا از ANOVA استفاده میکنیم؟
وقتی بیش از دو گروه وجود دارد و بخواهیم میانگینها را مقایسه کنیم (برای جلوگیری از خطای نوع I که با انجام چند t-test رخ میدهد).
امکان بررسی اثرات متقابل (interaction) دو یا چند عامل (Two-way ANOVA و بالاتر).
در مطالعات تجربی و بالینی و علوم زیستی بسیار رایج و سازگار با چارچوب طراحی آزمایش است.
انواع رایج ANOVA و کدهای پایتون
1) One-way ANOVA (یکطرفه)
زمان استفاده:یک متغیر مستقل (نوع تمرین) با سه سطح یا بیشتر و یک متغیر وابسته پیوسته (مانند قدرت یا توان) مورد بررسی قرار میگیرد. بنابراین، طرح پژوهش از نوع تکعاملی (One-way ANOVA) است و در آن اثر سطوح مختلف متغیر مستقل بر متغیر وابسته از طریق آزمون تحلیل واریانس یکطرفه مقایسه و تحلیل میشود
کتابخانهها: scipy.stats یا statsmodels
مثال:
سه گروه ورزشکار داریم با سه نوع تمرین مختلف و میخواهیم ببینیم آیا تفاوت قدرت بین آنها معنیدار است یا نه.
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
# داده نمونه
data = {'Group A': [23, 21, 19, 24, 22],
'Group B': [30, 29, 31, 32, 28],
'Group C': [25, 26, 24, 23, 27]}
df = pd.DataFrame(data)
# اجرای One-way ANOVA
f_stat, p_val = stats.f_oneway(df['Group A'], df['Group B'], df['Group C'])
print("F-Statistic:", round(f_stat, 3))
print("P-Value:", round(p_val, 4))
if p_val < 0.05:
print("✅ تفاوت میانگینها معنیدار است.")
else:
print("❌ تفاوت میانگینها معنیدار نیست.")
# رسم نمودار میلهای
df.mean().plot(kind='bar', color=['#66b3ff', '#99ff99', '#ffcc99'])
plt.title('میانگین عملکرد گروهها')
plt.ylabel('قدرت عضلانی')
plt.show()
📊 تفسیر:
اگر مقدار p-value < 0.05 باشد یعنی تفاوت معنیداری بین حداقل یکی از گروهها وجود دارد.
(توضیح: برای فرضیات نرمال بودن و همسانی واریانس (Homoscedasticity) قبل از ANOVA باید بررسی شوند؛ در صورت نقض، روشهای ناپارامتریک مانند Kruskal-Wallis مدنظر قرار میگیرند.)
2) Two-way ANOVA (دوعاملۀ ساده) — با امکان تعامل (interaction)
زمان استفاده: دو عامل مستقل (مثلاً Training و Diet) و یک متغیر وابسته؛ اگر بخواهیم تعامل(interaction) دو عامل و همچنین اثر ترکیبی آنها را هم بررسی کنیم.
کتابخانهها: statsmodels.formula.api.ols و statsmodels.stats.anova_lm
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
import seaborn as sns
import matplotlib.pyplot as plt
# داده نمونه
data = {'Strength': [23,21,19,24,22, 30,29,31,32,28, 25,26,24,23,27],
'Training': ['A']*5 + ['B']*5 + ['C']*5,
'Diet': ['Low']*5 + ['High']*5 + ['Medium']*5}
df = pd.DataFrame(data)
# مدل دوطرفه ANOVA
model = ols('Strength ~ C(Training) + C(Diet) + C(Training):C(Diet)', data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)
# نمودار میانگین Strength برای Training و Diet
plt.figure(figsize=(10,6))
sns.barplot(x='Training', y='Strength', hue='Diet', data=df, ci='sd', palette='pastel')
plt.title('Mean Strength by Training Type and Diet')
plt.ylabel('Strength')
plt.xlabel('Training Type')
plt.legend(title='Diet')
plt.show()
📊 تفسیر:
در خروجی جدول، ستون PR(>F) همان p-value است.
اگر مقدار آن کمتر از 0.05 باشد، یعنی آن عامل یا تعاملش اثر معنیدار دارد.
(توضیح: ستونهای مهم جدول ANOVA شامل sum_sq, df, F و PR(>F) هستند؛ مقدار p کوچک برای یک عامل یا تعامل نشاندهندهٔ اثر معنیدار است.)
3) Repeated-measures ANOVA (ANOVA با اندازهگیریهای تکراری)
زمان استفاده: وقتی یک گروه از افراد را در چند زمان مختلف اندازهگیری میکنیم (مثلاً قبل، بعد، و یک ماه پس از تمرین).
import pandas as pd
from statsmodels.stats.anova import AnovaRM
import seaborn as sns
import matplotlib.pyplot as plt
# داده نمونه
df = pd.DataFrame({
'id': [1]*3 + [2]*3 + [3]*3,
'time': ['pre','post','follow']*3,
'score': [10,12,11, 9,10,12, 11,13,12]
})
# آنالیز واریانس با اندازهگیری مکرر
aov = AnovaRM(df, 'score', 'id', within=['time']).fit()
print(aov)
# نمودار تغییرات score در طول زمان
plt.figure(figsize=(8,5))
sns.lineplot(x='time', y='score', hue='id', data=df, marker='o', palette='tab10')
sns.pointplot(x='time', y='score', data=df, ci='sd', color='black', markers='D') # میانگین و SD
plt.title('Score Changes Over Time')
plt.ylabel('Score')
plt.xlabel('Time')
plt.legend(title='Subject ID')
plt.show()
📊 تفسیر:
اگر مقدار p-value کمتر از 0.05 باشد، یعنی تغییرات بین زمانها معنیدار است (مثلاً عملکرد شرکتکنندگان واقعاً بهتر شده است).
(توضیح: در ANOVA تکراری فرض عدم وجود اتصالات پیچیده بین سطوح باید بررسی شود؛ در صورت لزوم میتوان از مدلهای مخلوط (mixed models) استفاده کرد.)
4) MANOVA (چندمتغیره ANOVA)
زمان استفاده: وقتی استفاده میشود که بخواهیم همزمان چند نتیجه یا متغیر وابسته مثل قدرت، استقامت و انعطافپذیری را بررسی کنیم. این روش نشان میدهد که تغییرات متغیر مستقل روی همه این متغیرها چه تأثیری دارد و الگوی کلی
کتابخانه: statsmodels.multivariate.manova.MANOVA
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.multivariate.manova import MANOVA
import matplotlib.pyplot as plt
import seaborn as sns
# داده نمونه
df = pd.DataFrame({
'y1':[2,3,4,5,6,7],
'y2':[5,4,3,6,7,8],
'group':['A','A','A','B','B','B']
})
# ===== MANOVA کلی =====
maov = MANOVA.from_formula('y1 + y2 ~ group', data=df)
print("=== MANOVA ===")
print(maov.mv_test())
# ===== ANOVA تکمتغیره برای هر متغیر وابسته =====
for var in ['y1','y2']:
model = ols(f'{var} ~ C(group)', data=df).fit()
aov_table = sm.stats.anova_lm(model, typ=2)
print(f"\n=== ANOVA تکمتغیره برای {var} ===")
print(aov_table)
# رسم نمودار جعبهای (Boxplot) برای نمایش تفاوت گروهها
plt.figure(figsize=(6,4))
sns.boxplot(x='group', y=var, data=df)
sns.swarmplot(x='group', y=var, data=df, color=".25") # نمایش نقاط داده
plt.title(f'مقایسه گروهها برای {var}')
plt.show()
📊 تفسیر:
Wilks’ Lambda کوچکتر = اثر گروهها روی متغیرهای وابسته قویتر است.
Pillai’s Trace بزرگتر = تفاوتهای گروهها معنیدارتر است.
Significance (p-value):
اگر p < 0.05 → گروهها روی متغیرهای وابسته تفاوت معنیدار دارند.
اگر p ≥ 0.05 → تفاوت معنیدار نیست.
(توضیح: MANOVA فرضیات مستقل بودن، نرمالityِ چندمتغیره و هموژن بودن ماتریس کوواریانس را دارد.)
مقایسه Anova با T-test
t-test (Student’s t-test) برای مقایسه میانگینِ دو گروه بهکار میرود.
One-way ANOVA برای مقایسه میانگینِ سه گروه یا بیشتر مناسب است.
اگر فقط 2 گروه داشته باشیم، ANOVA و t-test معادل هستند (نتایج آماری یکسانی میدهند)، اما برای 3 گروه و بیشتر انجام چند t-test خطر افزایش احتمال خطای نوع I را دارد؛ ANOVA این مشکل را حل میکند.
| ویژگی | t-test | ANOVA |
|---|---|---|
| تعداد گروهها | دو گروه | سه یا بیشتر |
| خطای نوع I در چند مقایسه | زیاد میشود | کنترلشده |
| بررسی تعامل عوامل | ندارد | دارد |
| خروجی آماری | t و p | F و p |
“برای درک بهتر تفاوت بین آزمون t-test و ANOVA و کاربرد هرکدام، به مقاله آزمون t-test مراجعه کنید.”
نکات مهم پیش از اجرای ANOVA
قبل از اجرای آزمون ANOVA باید چند فرض آماری را بررسی کنیم:
نرمال بودن دادهها – با آزمون Shapiro-Wilk یا Q-Q plot
برابری واریانسها (Homoscedasticity) – با آزمون Levene
استقلال دادهها – هر مشاهده باید مستقل از دیگری باشد
اگر این فرضها نقض شوند، باید از نسخههای ناپارامتریک مثل Kruskal-Wallis یا مدلهای Mixed استفاده کنید.
کاربردهای ANOVA در علم ورزش و داده
-
بررسی اثر انواع تمرین بر قدرت عضلانی
-
مقایسه عملکرد ورزشکاران در رژیمهای مختلف
-
تحلیل اثرات تمرینات ترکیبی (قدرتی + هوازی)
-
بررسی نتایج پیشآزمون و پسآزمون در پژوهشهای آموزشی
نتیجهگیری
تحلیل واریانس (ANOVA) یکی از ابزارهای اساسی در تحلیل دادههاست.
با استفاده از پایتون و کتابخانههایی مثل SciPy و Statsmodels میتوان آن را بهسادگی پیادهسازی و تفسیر کرد.
با کمک ANOVA، پژوهشگران و مربیان میتوانند تصمیمهای علمی و مبتنی بر داده بگیرند.
منابع
WTF. Taekwondo competition rules. World Taekwondo Federation; 2020.
Kazemi M, Pieter W. Injuries at a Canadian national taekwondo championships: a prospective study. BMC Musculoskelet Disord. 2004;5:22.
Hamill J, Knutzen K. Biomechanical basis of human movement. Lippincott Williams & Wilkins; 2015.
Kim JW, Kwon MS. Kinematic analysis of Taekwondo roundhouse kick. J Biomech. 2010;43(2):237-45.
Sale DG. Postactivation potentiation: role in human performance. Exerc Sport Sci Rev. 2002;30(3):138-43.
Hodgson M, Docherty D, Robbins D. Post-activation potentiation: underlying physiology and implications for motor performance. Sports Med. 2005;35(7):585-95.
Seitz LB, Haff GG. Factors modulating post-activation potentiation of jump, sprint, throw, and upper-body ballistic performances: a systematic review with meta-analysis. Sports Med. 2016;46(2):231-40.
Wilson JM, Duncan NM, Marin PJ, et al. Meta-analysis of post-activation potentiation and power: effects of conditioning activity, volume, gender, rest periods, and training status. J Strength Cond Res. 2013;27(3):854-9.
Sánchez J, González-Badillo JJ. Post-activation potentiation and sports performance: a brief review. J Hum Sport Exerc. 2018;13(2):444-50.
Chiodo S, Tessitore A, Cortis C, et al. Effects of post-activation potentiation on kick performance in Taekwondo athletes. J Strength Cond Res. 2012;26(6):1484-91.