متى يتم استخدام aov() مقابل anova() في r
تبدو الدالتان aov() و anova() في لغة R متشابهتين، ولكننا في الواقع نستخدمهما في سيناريوهين مختلفين.
نستخدم aov() عندما نريد ملاءمة نموذج ANOVA وعرض النتائج في جدول ملخص ANOVA.
نحن نستخدم anova() عندما نريد مقارنة ملاءمة نماذج الانحدار المتداخلة لتحديد ما إذا كان نموذج الانحدار الذي يحتوي على مجموعة معينة من المعاملات يوفر ملاءمة أفضل بكثير من النموذج الذي يحتوي على مجموعة فرعية فقط من المعاملات.
توضح الأمثلة التالية كيفية استخدام كل وظيفة عمليًا.
مثال 1: كيفية استخدام aov() في R
لنفترض أننا نريد إجراء تحليل التباين (ANOVA) أحادي الاتجاه لتحديد ما إذا كانت ثلاثة برامج تمرين مختلفة لها تأثير مختلف على فقدان الوزن.
قمنا بتجنيد 90 شخصًا للمشاركة في تجربة قمنا فيها بتعيين 30 شخصًا بشكل عشوائي لمتابعة البرنامج (أ) أو البرنامج (ب) أو البرنامج (ج) لمدة شهر.
يوضح التعليمة البرمجية التالية كيفية استخدام الدالة aov() في R لإجراء تحليل التباين أحادي الاتجاه:
#make this example reproducible set. seeds (0) #create data frame df <- data. frame (program = rep(c("A", "B", "C"), each= 30 ), weight_loss = c(runif(30, 0, 3), runif(30, 0, 5), runif(30, 1, 7))) #fit one-way anova using aov() fit <- aov(weight_loss ~ program, data=df) #view results summary(fit) Df Sum Sq Mean Sq F value Pr(>F) program 2 98.93 49.46 30.83 7.55e-11 *** Residuals 87 139.57 1.60 --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ومن نتائج النموذج يمكننا أن نرى أن القيمة الاحتمالية للبرنامج (0.0000000000755) أقل من 0.05، مما يعني أن هناك فرق ذو دلالة إحصائية في متوسط فقدان الوزن بين البرامج الثلاثة.
مثال 2: كيفية استخدام anova() في R
لنفترض أننا نريد استخدام عدد الساعات المدروسة للتنبؤ بدرجات الامتحانات للطلاب في كلية معينة. يمكننا أن نقرر تكييف نموذجي الانحدار التاليين:
النموذج الكامل: النتيجة = β 0 + B 1 (ساعات) + B 2 (ساعات) 2
النموذج المخفض: النتيجة = β 0 + B 1 (ساعات)
يوضح التعليمة البرمجية التالية كيفية استخدام وظيفة anova() في R لإجراء اختبار عدم الملاءمة لتحديد ما إذا كان النموذج الكامل يوفر ملاءمة أفضل بكثير من النموذج المصغر:
#make this example reproducible
set. seeds (1)
#create dataset
df <- data.frame(hours = runif(50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)
#view head of data
head(df)
hours score
1 7.655087 64.30191
2 8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5 7.016819 59.81595
6 13.983897 83.60510
#fit full model
full <- lm(score ~ poly(hours,2), data=df)
#fit reduced model
reduced <- lm(score ~ hours, data=df)
#perform lack of fit test using anova()
anova(full, reduced)
Analysis of Variance Table
Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
Res.Df RSS Df Sum of Sq F Pr(>F)
1 47 368.48
2 48 451.22 -1 -82.744 10.554 0.002144 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
نظرًا لأن القيمة p في جدول الإخراج (0.002144) أقل من 0.05، يمكننا رفض الفرضية الصفرية للاختبار ونستنتج أن النموذج الكامل يوفر ملاءمة إحصائية أفضل بكثير من النموذج المخفض.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في R:
كيفية إجراء ANOVA أحادي الاتجاه في R
كيفية إجراء ANOVA ثنائي الاتجاه في R
كيفية تنفيذ التدابير المتكررة ANOVA في R