تُعد لغة البرمجة الإحصائية R البيئة البرمجية الأكثر رسوخاً وشيوعاً بين علماء البيانات، والإحصائيين، والباحثين الأكاديميين في مختلف الحقول المعرفية، نظراً لبنيتها المرنة المصممة خصيصاً للحوسبة الإحصائية والتمثيل البياني المتقدم. في قلب هذه البيئة البرمجية المتكاملة، تبرز الدالة العامة summary() بوصفها إحدى الركائز الأساسية التي لا غنى عنها في مرحلة التحليل الاستكشافي للبيانات (Exploratory Data Analysis – EDA). تتيح هذه الدالة للمحلل الانتقال السريع من بنية البيانات الخام المعقدة إلى فهم استدلالي ووصف رقمي شامل يختزل الخصائص الجوهرية للعينات والمتغيرات والنماذج الإحصائية بأقل قدر ممكن من التعقيد البرمجي.
تكمن القوة الاستثنائية للدالة summary() في مرونتها البنيوية واعتمادها على النموذج البرمجي الكائني التوجه من طراز S3، حيث تعيد تشكيل مخرجاتها التلخيصية تلقائياً بحسب الصنف البرمجي للكائن المُمرر إليها؛ فسواء كان المدخل متجهاً رقمياً بسيطاً، أو عاملاً فئوياً، أو إطار بيانات متعدد الأبعاد، أو حتى نموذجاً رياضياً متقدماً مثل الانحدار الخطي أو تحليل التباين، تقدم الدالة ملخصاً تحليلياً دقيقاً يعكس الأبعاد الإحصائية الأكثر صلة بطبيعة ذلك الكائن. يسهم هذا السلوك التكيفي في تقليص الوقت المستغرق في كتابة الدوال الحسابية المنفصلة، ويمنح الباحث نظرة بانورامية فورية تكشف عن معالم التوزيع، ومواضع الخلل المحتملة كالقيم المفقودة والشاذة.
يهدف هذا الدليل المرجعي الشامل إلى تقديم تفكيك منهجي وتطبيقي متقدم للدالة summary() في لغة R. سنتناول بالشرح المعمق الأسس النظرية والتطبيقية لعمل الدالة، ونستعرض سلوكها عبر مختلف الهياكل البيانية والنماذج القياسية، مع التركيز على تفسير المخرجات الإحصائية واستخراج مؤشراتها برمجياً، ومقارنتها بالبدائل الحديثة في بيئة العمل، لتمكين الباحث ومحلل البيانات من توظيفها بأقصى درجات الدقة والاحترافية العلمية.
- 1. مقدمة شاملة حول الدالة ()summary وأهميتها في التحليل الإحصائي بلغة R
- 2. بنية وصيغة استدعاء الدالة ()summary والمعاملات البرمجية الأساسية
- 3. استخدام الدالة ()summary مع المتجهات العددية (Numeric Vectors)
- 4. التعامل مع القيم المفقودة (NA) داخل الدالة ()summary في المتجهات
- 5. استخدام الدالة ()summary مع المتجهات الفئوية والنصية (Factors and Characters)
- 6. تطبيق الدالة ()summary على إطارات البيانات (Data Frames)
- 7. استخدام الدالة ()summary مع المصفوفات والقوائم (Matrices and Lists)
- 8. استخدام الدالة ()summary في تلخيص نماذج الانحدار الخطي (Linear Regression Models)
- 9. استخدام الدالة ()summary مع نماذج تحليل التباين (ANOVA Models)
- 10. تخصيص مخرجات ()summary واستخراج المؤشرات برمجياً في لغة R
- 11. مقارنة الدالة ()summary بالدوال الإحصائية البديلة في بيئة R و Tidyverse
- 12. الأخطاء الشائعة واستكشاف المشكلات وإصلاحها عند استخدام الدالة ()summary
- خاتمة
- References
1. مقدمة شاملة حول الدالة ()summary وأهميتها في التحليل الإحصائي بلغة R
1.1 مفهوم الدالة العامة (Generic Function) في نظام S3 الإحصائي
تعتمد لغة R في بنيتها التحتية على نظام البرمجة الكائنية الموجهة S3، وهو نظام مرن وبسيط يرتكز على مفهوم الدوال العامة (Generic Functions) والأساليب المرتبطة بالأصناف (Class Methods). الدالة summary() ليست دالة حسابية تقليدية ذات خوارزمية وحيدة، بل هي دالة عامة تُعرف نقطة دخول وظيفية تستخدم آلية الإرسال الديناميكي UseMethod("summary") لتحديد التابع البرمجي الخاص بكل كائن بياني بناءً على فئته الإحصائية (Class Attribute).
عند تمرير كائن رقمي، تستدعي R تلقائياً التابع summary.default()، في حين تُفعّل التابع summary.data.frame() عند تمرير جدول بيانات، وتلجأ إلى summary.lm() أو summary.aov() عند تلخيص النماذج الخطية ونماذج التباين. هذا التعدد الشكلي (Polymorphism) يسمح للدالة بالتصرف الذكي، فتوفر مقاييس النزعة المركزية والتشتت للأرقام، بينما تحسب التوزيعات التكرارية للفئات، وتستخرج معاملات التقدير ومستويات الدلالة للنماذج الإحصائية.
يمثل التلخيص الرقمي السريع الخطوة المنهجية الأولى في التحليل الاستكشافي للبيانات، إذ يزود المحلل بخريطة أولية لمعالم العينة. بدلاً من كتابة أوامر منفصلة لحساب المتوسط، والوسيط، والانحراف، والمدى الربيعي لكل متغير، تدمج الدالة summary() هذه الإحصاءات الوصفية في استدعاء برمجي واحد، مما يوفر جهداً حوسبياً كبيراً ويمنع تشتت الباحث خلال المعاينة الأولية لقواعد البيانات الضخمة.
1.2 القيمة العلمية للتلخيص الإحصائي السريع في البحوث السلوكية والبيانات التطبيقية
في مجالات العلوم السلوكية، والاجتماعية، والبحوث الإكلينيكية، تواجه الدراسات التطبيقية تحديات متعلقة بجودة البيانات المجمعة عبر الاستبانات والتجارب المعملية. يتيح الفحص السريع عبر summary() مراجعة التوزيعات التكرارية للمتغيرات الديموغرافية والنفسية، والتأكد من انطباق الشروط القياسية قبل الانتقال إلى الاختبارات البارامترية المتقدمة.
يساعد التلخيص الوصفي الفوري في كشف أخطاء الإدخال البشري والأنماط الشاذة (Outliers)؛ فإذا أظهر التلخيص أن القيمة الصغرى لمتغير العمر هي قيمة سالبة أو أن القيمة الكبرى لمقياس ليكرت الخماسي تجاوزت الرقم خمسة، يتمكن الباحث من رصد مواطن الخلل وتصحيحها مبكراً دون بناء استنتاجات خاطئة على بيانات ملوثة.
علاوة على ذلك، توفر مؤشرات النزعة المركزية ومقارنة المتوسط بالوسيط عبر المخرجات دليلاً أولياً حول مدى اعتدالية التوزيع والتوائه. هذه المؤشرات المبدئية تمكن الأكاديميين من تقييم الفرضيات الإحصائية الأولية واختيار النماذج الأكثر ملائمة لطبيعة التوزيع، مما يعزز الرصانة العلمية للبحوث المنشورة.
2. بنية وصيغة استدعاء الدالة ()summary والمعاملات البرمجية الأساسية
2.1 الصيغة الأساسية (Basic Syntax) والبارامترات المدخلة
تتخذ الدالة summary() صيغة استدعاء عامة ومباشرة في بيئة R:
summary(object, ...)
حيث يمثل object الكائن الإحصائي المراد تلخيصه، بينما تشير النقاط الثلاث ... إلى معلمات إضافية تُمرر إلى التوابع المتخصصة بحسب نوع الكائن. من أبرز هذه المعلمات نجد معامل الدقة الرقمية digits، الذي يحدد عدد الخانات العشرية المعروضة في المخرجات المطبوعة. على سبيل المثال، يقلل ضبط summary(data, digits = 2) الضوضاء البصرية الناتجة عن الأرقام العشرية الطويلة ويسهل قراءة المؤشرات المركبة.
من المعاملات الأساسية الخاصة بالمتغيرات الفئوية معامل maxsum، وهو محدد رقمي يتحكم في الحد الأقصى لعدد المستويات المعروضة لكل عامل فئوي. إذا تجاوز عدد المستويات قيمة maxsum (والتي تبلغ قيمتها الافتراضية 7 مستويات)، تقوم الدالة آلياً بدمج المستويات المتبقية ضمن فئة موحدة تسمى (Other).
أما فيما يخص إدارة القيم المفقودة، فإن الدالة summary() تتعامل معها تلقائياً دون الحاجة إلى التمرير الصريح لمعامل na.rm = TRUE كما هو متبع في دوال الحساب الفردية مثل mean() وsd(). تقوم الدالة باستبعاد القيم المفقودة من العمليات الحسابية للأرباع والمتوسطات، وتفرد سطراً مستقلاً لرصد حجم الفقد بدقة.
2.2 الفروق بين مخرجات الأنواع المختلفة من الكائنات البيانية (Data Objects)
يختلف الهيكل المخرجي للدالة summary() باختلاف التركيب الهندسي والرياضي للبيانات. عند تطبيقها على متجه أحادي البعد، تعيد الدالة متجراً وصفياً بسيطاً، بينما يؤدي تطبيقها على إطار بيانات (Data Frame) إلى مصفوفة نصية مركبة تعامل كل عمود كوحدة إحصائية مستقلة وتصفه بحسب نوعه.
من الضروري التفريق بين العرض المرئي المطبوع على وحدة التحكم (R Console) وبين الكائن الفعلي المخزن برمجياً في الذاكرة. ما يراه المستخدم على الشاشة هو ناتج دالة الطباعة print.summary() التي تعيد صياغة المؤشرات الإحصائية في جداول مقروءة، في حين أن استدعاء التلخيص وتخزينه في متغير مثل res <- summary(model) ينشئ كائناً قائماً بذاته (غالباً ما يكون على هيئة List أو Table) يمكن استخلاص عناصره وفهرستها بدقة.
يتيح هذا التمييز للمبرمج استخدام summary() ليس فقط كأداة للمعاينة البصرية السريعة، بل كأداة لاستخراج المؤشرات الرياضية برمجياً عبر الرمز $ أو عبر الفهرسة المصفوفية، لتوظيف تلك المؤشرات في إعداد تقارير آلية وحساب مؤشرات مركبة.
3. استخدام الدالة ()summary مع المتجهات العددية (Numeric Vectors)
3.1 شرح المقاييس الإحصائية الستة (The Six-Number Summary)
عند تمرير متجه عددي متصل إلى الدالة summary()، تولد الدالة إطاراً إحصائياً يعرف بالملخص السداسي (Six-Number Summary)، الذي يضم المقاييس الوصفية الجوهرية التالية:
- القيمة الصغرى (Min.): أدنى قيمة مسجلة في المتجه العددي.
- الربيع الأول (1st Qu.): المئين الخامس والعشرون (25th Percentile)، ويمثل النقطة التي تقع دونها 25% من مشاهدات العينة بعد ترتيبها تصاعدياً.
- الوسيط (Median): المئين الخمسون (50th Percentile) والقيمة المنصفة للبيانات؛ ويتميز بمقاومته العالية للقيم الشاذة والمتطرفة (Robust Statistic).
- المتوسط الحسابي (Mean): حاصل جمع كل القيم مقسوماً على عددها الإجمالي، ويعبر عن مركز الثقل التوزيعي.
- الربيع الثالث (3rd Qu.): المئين الخامس والسبعون (75th Percentile)، ويمثل النقطة التي تقع دونها 75% من البيانات.
- القيمة الكبرى (Max.): أعلى قيمة مرصودة في المتجه.
يوفر الفرق بين القيمة الكبرى والصغرى المدى المطلق (Range)، بينما يمثل الفرق بين الربيع الثالث والربيع الأول المدى الربيعي (Interquartile Range – IQR)، وهو مقياس محوري للتشتت يعتمد عليه رسم المخطط الصندوقي (Boxplot). تتيح المقارنة المباشرة بين المتوسط والوسيط تشخيص الالتواء المبدئي؛ فإذا كان المتوسط أعلى بشكل ملحوظ من الوسيط، يشير ذلك إلى التواء موجب نحو اليمين (Right-skewed)، بينما يشير انخفاض المتوسط عن الوسيط إلى التواء سالب نحو اليسار (Left-skewed).
3.2 أمثلة برمجية عملية لتلخيص متجهات عددية
لتوضيح ذلك تطبيقياً، نفترض وجود متجه يمثل درجات مجموعة من الطلاب في مقياس نفسي لتقدير القلق الأكاديمي يتراوح بين 10 و 100:
anxiety_scores <- c(22, 34, 45, 48, 52, 55, 58, 61, 65, 78, 95)
summary(anxiety_scores)
ينتج عن تنفيذ هذا الأمر المخرجات التالية الموزعة على الأبعاد الستة:
- Min.: 22.00
- 1st Qu.: 46.50
- Median: 55.00
- Mean: 55.73
- 3rd Qu.: 63.00
- Max.: 95.00
توضح هذه المخرجات تقارب المتوسط (55.73) والوسيط (55.00)، مما يدل على تماثل نسبي في توزيع درجات القلق لدى أفراد العينة، مع وجود مدى واسع يمتد من 22 إلى 95 ومجال تركيز وسطي يقع بين 46.5 و 63. تتميز الدالة بكفاءة حسابية عالية تتيح لها معالجة متجهات تضم ملايين المشاهدات في أجزاء من الثانية دون استهلاك مفرط للذاكرة العشوائية.
4. التعامل مع القيم المفقودة (NA) داخل الدالة ()summary في المتجهات
4.1 آلية الاستبعاد التلقائي والإحصاء الوصفي للبيانات المفقودة
تمثل معالجة البيانات المفقودة (Missing Values المرموز لها بـ NA في R) أحد التحديات اليومية لمحللي البيانات. تفشل الدوال الحسابية القياسية مثل mean(x) أو sd(x) في إرجاع نتائج عددية إذا احتوى المتجه على قيمة مفقودة واحدة ما لم يُمرر المعامل na.rm = TRUE، فتعيد القيمة NA مباشرة.
على النقيض من ذلك، تتميز الدالة summary() بتصميم يعزل القيم المفقودة تلقائياً لحساب المقاييس الإحصائية الستة على المشاهدات المتاحة فقط، مع إضافة عنصر إحصائي سابع يحمل اسم NA's يبين العدد الدقيق للقيم المفقودة في المتجه.
يعد هذا العرض المزدوج حيوياً لتقييم مصداقية العينة؛ إذ يمنح الباحث تقديراً مباشراً لنسبة الفقد (Missingness Rate) لمقارنتها بالحدود المنهجية المقبولة. انخفاض حجم العينة الفعلي نتيجة كثرة القيم المفقودة يؤثر سلباً على القوة الإحصائية (Statistical Power) للاختبارات اللاحقة، مما يفرض توثيق وتفسير حجم الفقد بدقة.
4.2 أمثلة تطبيقية على متجهات تحتوي على قيم غير مكتملة
نوضح سلوك الدالة من خلال متجه لدرجات اختبار مقنن يحتوي على بعض القيم المفقودة الناتجة عن غياب بعض المفحوصين:
test_scores <- c(75, 82, NA, 90, 68, NA, 88, 94, 79, NA)
summary(test_scores)
تظهر المخرجات الوصفية للأرقام السبعة الصالحة إلى جانب إحصاء دقيق لحالات الغياب:
- Min.: 68.00
- 1st Qu.: 77.00
- Median: 82.00
- Mean: 82.29
- 3rd Qu.: 89.00
- Max.: 94.00
- NA’s: 3
يكشف هذا التقرير الوصفي السريع أن 30% من أفراد العينة (3 من أصل 10) لم يكملوا الاختبار، في حين أن المشاهدات المكتملة تتركز بمتوسط 82.29. يوجه هذا الرصد الاستكشافي الباحث نحو اختيار استراتيجية المعالجة المناسبة، سواء بالاكتفاء بالتحليل الكامل للحالات المتوفرة (Complete Case Analysis) أو تطبيق تقنيات التعويض الإحصائي المتعدد (Multiple Imputation) قبل إجراء النمذجة المتقدمة.
5. استخدام الدالة ()summary مع المتجهات الفئوية والنصية (Factors and Characters)
5.1 تحليل وتلخيص المتغيرات الفئوية (Factor Variables)
تُستخدم المتغيرات الفئوية (Factors) في لغة R لتمثيل البيانات النوعية والمستويات التصنيفية مثل الجنس، والمجموعات التجريبية، والدرجات الوظيفية. عند تطبيق الدالة summary() على متجه من نوع Factor، يتغير سلوكها بالكامل مقارنة بالمتجهات الرقمية؛ حيث لا تحسب المتوسطات أو الأرباع، بل تنشئ جدول توزيع تكراري يسرد كل مستوى (Level) وعدد مرات تكراره.
gender <- factor(c("Male", "Female", "Female", "Male", "Female", "Other"))
summary(gender)
تكون المخرجات على هيئة جدول توزيع تكراري:
- Female: 3
- Male: 2
- Other: 1
إذا كان المتغير يحتوي على عدد كبير من المستويات الفئوية، يمكن استخدام المعامل maxsum للتحكم في عدد الفئات المعروضة؛ حيث تُدمج المستويات الأقل تكراراً تلقائياً في فئة جامعة تسمى (Other). وفي حالة العوامل الفئوية المرتبة (Ordered Factors)، كالرتب الأكاديمية أو مستويات التعليم، تحافظ الدالة على الترتيب الهرمي المنطقي للمستويات أثناء عرض التكرارات.
5.2 التعامل مع المتجهات النصية غير المصنفة (Character Vectors)
يتعامل المبتدئون أحياناً مع الأعمدة النصية الخام (Character Vectors) بصفتها متغيرات فئوية، إلا أن الدالة summary() تميز بدقة بين النوعين. عند تمرير متجه نصي لم يُعرف كـ Factor، لا تحسب الدالة التكرارات لكل نص، بل تقدم ملخصاً بنيوياً مجرداً يتضمن:
- Length: الطول الكلي للمتجه (عدد العناصر).
- Class: الفئة البرمجية للكائن (character).
- Mode: الوضع التخزيني للعناصر في الذاكرة (character).
cities <- c("Riyadh", "Cairo", "Riyadh", "Dubai", "Cairo", "Riyadh")
summary(cities)
تنتج مخرجات برمجية غير إحصائية:
Length: 6 | Class: character | Mode: character
للحصول على ملخص إحصائي ذي مغزى تحليلي يبين توزيع المدن وتكرارها، يتعين على المحلل تحويل المتجه النصي إلى عامل فئوي باستخدام الدالة as.factor() قبل تطبيق التلخيص:
summary(as.factor(cities))
تتحول المخرجات حينها إلى جدول تكراري يوضح أن مدينة Riyadh تكررت 3 مرات، وCairo مرتين، وDubai مرة واحدة، وهو ما يبرز أهمية تدقيق الأنواع التخزينية للمتغيرات قبل مباشرة التحليل الاستكشافي.
6. تطبيق الدالة ()summary على إطارات البيانات (Data Frames)
6.1 التلخيص المتزامن للأعمدة متعددة الأنواع (Heterogeneous Data)
يعد إطار البيانات (Data Frame) الهيكل الأساسي الأكثر استخداماً لتخزين البيانات المجدولة في لغة R، حيث يضم أعمدة غير متجانسة تجمع بين المقاييس الرقمية، والمتغيرات الفئوية، والنصوص، والقيم المنطقية. عند استدعاء summary(df) على إطار بيانات متكامل، تطبق الدالة أسلوب التلخيص المتزامن لكل عمود بحسب طبيعته التخزينية في عرض جدولي موحد.
تظهر الأعمدة الرقمية ملخصها السداسي المعتاد مع إحصاء قيم NA's، وتظهر الأعمدة الفئوية تكرارات مستوياتها، بينما تعرض الأعمدة النصية طولها وفئتها. يتيح هذا العرض الأفقي المتكامل للمحلل تكوين نظرة بانورامية شاملة على قاعدة البيانات في ثوانٍ معدودة، مما يسهل مقارنة مقاييس النزعة المركزية بين المتغيرات ورصد الأعمدة التي تعاني من اختلالات في التوزيع أو نسب فقدان عالية.
patient_data <- data.frame(
Age = c(25, 45, 38, NA, 52, 61),
Gender = factor(c("M", "F", "F", "M", "F", "M")),
Smoker = c(TRUE, FALSE, FALSE, TRUE, TRUE, FALSE)
)
summary(patient_data)
يعالج هذا الاستدعاء الأعمدة الثلاثة بأساليب مختلفة تناسب طبيعتها؛ فيلخص Age بمقاييس النزعة والمدى مع رصد حالة فقد واحدة، ويلخص Gender بجدول تكراري (3 إناث و3 ذكور)، ويلخص Smoker كمتغير منطقي بعدد القيم الصحيحة (TRUE: 3) والخاطئة (FALSE: 3).
6.2 تطبيق الدالة على مجموعات فرعية (Subsetting Data Frames)
في التحليلات المتقدمة، يحتاج الباحث إلى تلخيص أجزاء معينة من البيانات أو فحص فئات فرعية محددة دون تطبيق التلخيص على الجدول بأكمله. يمكن تحقيق ذلك من خلال تقنيات الفهرسة المصفوفية القياسية في R:
summary(patient_data[, c("Age", "Smoker")])
كما يمكن دمج الدالة مع الشروط المنطقية ودوال التصفية مثل subset() لتلخيص بيانات مجموعة تجريبية بعينها:
summary(subset(patient_data, Gender == "F"))
ولإجراء مقارنات إحصائية وصفية معمقة بين مجموعات المعالجة المختلفة، يمكن الاستعانة بالدوال التكرارية التجميعية مثل by() أو tapply(). يتيح هذا الدمج تطبيق الدالة summary() على المتغير التابع مقسماً حسب مستويات المتغير المستقل، مما يقدم قراءة وصفية مقارنة لفروق المتوسطات والتشتت بين المجموعات قبل الانتقال إلى الاختبارات الاستدلالية المتقدمة.
7. استخدام الدالة ()summary مع المصفوفات والقوائم (Matrices and Lists)
7.1 تلخيص المصفوفات ثنائية ومتعددة الأبعاد (Matrices)
تختلف المصفوفات (Matrices) عن إطارات البيانات في كونها هياكل بيانات متجانسة تحتوي على نوع بيانات موحد (غالباً ما يكون رقمياً). عند تمرير مصفوفة ثنائية الأبعاد إلى الدالة summary()، تعامل الدالة كل عمود في المصفوفة بوصفه متغيراً رقمياً مستقلاً وتجري عليه الملخص السداسي الكامل.
mat_data <- matrix(rnorm(100, mean = 50, sd = 10), nrow = 20, ncol = 5)
colnames(mat_data) <- paste0("Var_", 1:5)
summary(mat_data)
يولد هذا الكود ملخصاً إحصائياً مرتباً في خمسة أعمدة متجاورة، يعكس كل منها القيمة الصغرى، والربيعيات، والمتوسط، والقيمة العظمى للمتغير المقابل. أما إذا كانت المصفوفة عديمة الأسماء، فإن الدالة ترقم الأعمدة تلقائياً بتنسيق V1, V2, .... وفي المصفوفات متعددة الأبعاد (Arrays)، تسطح الدالة الأبعاد الإضافية أو تعامل الهيكل وفق أبعاده العمودية الأساسية لتقديم قراءة سريعة لخواص التوزيع الرقمي.
7.2 سلوك الدالة مع القوائم المعقدة (Lists)
تعد القوائم (Lists) الهيكل التخزيني الأكثر مرونة وتعقيداً في R، إذ تستطيع استيعاب عناصر متباينة في الأطوال والأنواع، كأن تحتوي القائمة على متجه رقمي، ومصفوفة، وإطار بيانات، ونموذج إحصائي معاً. نظراً لهذه الطبيعة غير المتجانسة، لا تقدم الدالة summary(my_list) ملخصاً حسابياً لمحتويات العناصر الداخلية، بل تعرض جدولاً بنيوياً فوقياً يوضح:
- اسم العنصر داخل القائمة (Name / Index).
- طول العنصر (Length).
- الفئة البرمجية للعنصر (Class).
- الوضع التخزيني للعنصر (Mode).
complex_list <- list(
scores = c(88, 92, 79),
labels = factor(c("A", "A", "B")),
weights = matrix(1:4, nrow = 2)
)
summary(complex_list)
للحصول على تلخيص إحصائي تفصيلي لمحتوى كل عنصر داخل القائمة بدلاً من التلخيص البنيوي الخارجي، يجب تطبيق الدالة بشكل تكراري باستخدام الدالة الوظيفية lapply() أو sapply():
lapply(complex_list, summary)
يضمن هذا الأسلوب استدعاء أسلوب التلخيص المناسب لكل عنصر داخل القائمة بحسب صنفه البرمجي، فيُحسب الملخص السداسي للمتجه الرقمي، وتُعرض تكرارات العامل الفئوي، وتُلخص أعمدة المصفوفة تفصيلياً.
8. استخدام الدالة ()summary في تلخيص نماذج الانحدار الخطي (Linear Regression Models)
8.1 تفكيك مخرجات نموذج الانحدار (lm Summary)
تتجلى القوة التحليلية المتقدمة للدالة summary() عند تطبيقها على كائنات النماذج الإحصائية الناتجة عن دالة الانحدار الخطي lm(). يؤدي استدعاء summary(lm_model) إلى تنشيط التابع البرمجي summary.lm()، الذي يفكك النموذج إلى تقرير قياسي متكامل يشمل المكونات الرياضية والتشخيصية الأساسية:
- صيغة الاستدعاء (Call): توثيق المعادلة الإحصائية والمتغيرات المستخدمة في بناء النموذج.
- ملخص البواقي (Residuals Summary): تلخيص سداسي لتوزيع أخطاء التقدير ($e_i = y_i – \hat{y}_i$). يساعد تقارب الوسيط من الصفر وتماثل القيمتين الصغرى والعظمى والربيعيات في تقييم فرضية اعتدالية وتماثل توزع البواقي.
- جدول المعاملات (Coefficients Table): ويضم لكل متغير مستقل وللثابت الإحصائي:
- Estimate: قيمة معامل الانحدار المقدر ($\beta$).
- Std. Error: الخطأ المعياري للتقدير الذي يقيس تشتت العينة حول المعلمة.
- t value: قيمة إحصاءة اختبار تلميذ (t-test) الناتجة عن قسمة التقدير على خطئه المعياري ($t = \text{Estimate} / \text{Std. Error}$).
- Pr(>|t|): القيمة الاحتمالية (p-value) لاختبار الفرضية الصفرية القائلة بأن المعامل يساوي صفراً.
- Signif. codes: رموز الدلالة الإحصائية بالنجوم (مثل
***للدلالة عند مستوى 0.001، و**عند 0.01، و*عند 0.05).
- الخطأ المعياري للبواقي (Residual Standard Error – RSE): مقياس لانحراف المشاهدات الفعلية عن خط الانحدار مصحوباً بدرجات الحرية (Degrees of Freedom).
- معامل التحديد (Multiple R-squared): نسبة التباين في المتغير التابع التي يفسرها النموذج الخطي.
- معامل التحديد المعدل (Adjusted R-squared): تعديل لمعامل التحديد يأخذ في الحسبان عدد المتغيرات المضافة لتفادي التوفيق الزائد (Overfitting).
- إحصاءة فيشر (F-statistic): اختبار الدلالة الكلية للنموذج وقيمته الاحتمالية المقترنة به، لاختبار الفرضية الصفرية التي تفترض أن جميع المعاملات تساوي صفراً في آن واحد.
8.2 أمثلة تطبيقية لانحدار خطي بسيط ومتعدد
لتطبيق ذلك عملياً، نبني نموذج انحدار خطي متعدد للتنبؤ باستهلاك الوقود mpg بناءً على وزن السيارة wt وقوتها الحصانية hp باستخدام قاعدة البيانات المدمجة mtcars:
model <- lm(mpg ~ wt + hp, data = mtcars)
summary(model)
تُظهر مخرجات التلخيص جدولاً يوضح أثر كل متغير مستقل؛ حيث نجد أن معامل الوزن wt سالب وذو دلالة إحصائية عالية ($p < 0.001$)، مما يعني أنه مع زيادة وزن السيارة ينخفض معدل كفاءة الوقود بشكل ملحوظ عند ثبات القوة الحصانية. كما يعرض التقرير قيمة Adjusted R-squared تبلغ حوالي 0.814، مما يشير إلى أن النموذج يفسر أكثر من 81% من التباين الكلي في استهلاك الوقود.
برمجياً، يمكن حفظ كائن التلخيص واستخراج العناصر الرياضية منه مباشرة لاستخدامها في بناء جداول مخصصة أو حسابات لاحقة:
model_summary <- summary(model)
# استخراج مصفوفة المعاملات كاملة
coef_matrix <- model_summary$coefficients
# استخراج معامل التحديد المعدل بدقة
adj_r2 <- model_summary$adj.r.squared
# استخراج الخطأ المعياري للنموذج
rse <- model_summary$sigma
يتيح هذا الوصول الهيكلي للمبرمج أتمتة التقارير الإحصائية واستخراج قيم $p$ ومعاملات الانحدار دون الحاجة إلى النسخ اليدوي للمخرجات.
9. استخدام الدالة ()summary مع نماذج تحليل التباين (ANOVA Models)
9.1 قراءة جدول تحليل التباين الأكاديمي (ANOVA Table)
يعد تحليل التباين (ANOVA) الأداة الإحصائية المعيارية للمقارنة بين متوسطات ثلاث مجموعات تجريبية أو أكثر. عند تطبيق الدالة aov() لإنشاء النموذج في R، فإن طباعة الكائن مباشرة لا تعطي سوى مجموع المربعات، بينما يؤدي استخدام summary(aov_model) إلى تنشيط التابع summary.aov() لإنتاج جدول تحليل التباين الكلاسيكي المعتمد في الأوراق الأكاديمية.
يتضمن جدول التلخيص الناتج الأعمدة الإحصائية المعيارية التالية:
- Df (Degrees of Freedom): درجات الحرية المرتبطة بكل مصدر من مصادر التباين (بين المجموعات وداخل المجموعات/الخطأ).
- Sum Sq (Sum of Squares): مجموع المربعات الذي يقيس حجم التشتت الإجمالي المنسوب لكل عامل تجريبي وللبواقي العشوائية.
- Mean Sq (Mean Squares): متوسط المربعات، ويُحسب بقسمة مجموع المربعات على درجات الحرية المقابلة ($\text{MS} = \text{SS} / \text{Df}$).
- F value: إحصاءة اختبار فيشر، وتُحسب بقسمة متوسط مربعات المعالجة على متوسط مربعات الخطأ ($\text{F} = \text{MS}_{\text{treatment}} / \text{MS}_{\text{residual}}$).
- Pr(>F): القيمة الاحتمالية المرتبطة باختبار F لتقييم الفروق بين المتوسطات.
9.2 أمثلة عملية لتحليل التباين الأحادي والثنائي (One-Way & Two-Way ANOVA)
نوضح ذلك بتطبيق تحليل التباين الأحادي لدراسة أثر ثلاثة أنواع مختلفة من الأسمدة على نمو النبات باستخدام بيانات تجريبية:
plant_data <- data.frame(
growth = c(12, 14, 15, 11, 19, 21, 20, 18, 25, 28, 24, 27),
treatment = factor(rep(c("Control", "Fertilizer_A", "Fertilizer_B"), each = 4))
)
aov_one_way <- aov(growth ~ treatment, data = plant_data)
summary(aov_one_way)
يظهر التلخيص جدول التباين مع قيمة $F$ مرتفعة وقيمة $p$ أقل من 0.001، مما يثبت وجود فروق جوهرية ذات دلالة إحصائية بين أنواع المعالجة. أما في تحليل التباين الثنائي (Two-Way ANOVA) الذي يدرس عاملين مستقلين وتفاعلهما، تبرز أهمية الدالة في تفكيك التباين الكلي إلى التأثيرات الرئيسية (Main Effects) وتأثير التفاعل (Interaction Effect):
aov_two_way <- aov(growth ~ treatment * factor(rep(c("Low_Water", "High_Water"), 6)), data = plant_data)
summary(aov_two_way)
يكشف جدول summary() في هذا السياق ما إذا كان تأثير نوع السماد يتغير بتغير مستوى الري، مما يمنح الباحث قراءة متكاملة للبنية التجريبية. وتجدر الإشارة إلى أن استدعاء summary.lm(aov_one_way) بدلاً من summary() يعيد عرض النموذج بصيغة معاملات الانحدار والمقارنة مع الفئة المرجعية (Reference Group)، وهو ما يوضح التنوع البرمجي المتاح للمحلل.
10. تخصيص مخرجات ()summary واستخراج المؤشرات برمجياً في لغة R
10.1 الوصول إلى البنية الداخلية لكائن التلخيص (Object Structure)
يتطلب التطوير البرمجي المتقدم وبناء لوحات التحكم التفاعلية استخراج المؤشرات الإحصائية الناتجة عن summary() وتضمينها في هياكل برمجية مخصصة. للتعرف على المكونات الداخلية لأي كائن تلخيص، يمكن استخدام دالة فحص البنية str():
mod_summary <- summary(lm(mpg ~ wt, data = mtcars))
str(mod_summary)
يكشف هذا الفحص أن كائن التلخيص هو في حقيقته قائمة مسماة (Named List) تحتوي على عناصر إحصائية متعددة تشمل residuals، وcoefficients، وsigma، وr.squared، وfstatistic. بناءً على هذا الهيكل، يمكن استخراج جدول المعاملات وتصفيته بسهولة:
# استخراج جدول المعاملات وتحويله إلى إطار بيانات
coef_df <- as.data.frame(mod_summary$coefficients)
# تصفية المتغيرات ذات الدلالة الإحصائية (p-value < 0.05)
significant_vars |t|)"] < 0.05, ]
10.2 إنشاء تقارير وجداول مخصصة للنشر العلمي
على الرغم من دقة مخرجات summary() في وحدة التحكم، إلا أنها لا تتوافق بصرياً مع معايير النشر العلمي المعتمدة (مثل معايير جمعية علم النفس الأمريكية APA). لتجاوز هذا القيد، توفر الحزم الإحصائية الحديثة أدوات لتحويل كائنات التلخيص إلى جداول بيانات منظمة (Tidy Data).
تعد حزمة broom الخيار القياسي لتحويل مخرجات النماذج إلى إطارات بيانات مهيكلة عبر ثلاث دوال رئيسية:
tidy(model): استخراج جدول المعاملات، والأخطاء المعيارية، والقيم الاحتمالية في إطار بيانات منظم.glance(model): استخراج مؤشرات جودة التوفيق الكلية ($R^2$, AIC, BIC, Deviance) في سطر واحد.augment(model): إضافة البواقي والقيم المتوقعة إلى بيانات العينة الأصلية.
library(broom)
library(knitr)
# توليد جدول معاملات مهيكل ومتوافق مع معايير النشر
tidy_results <- tidy(lm(mpg ~ wt + hp, data = mtcars))
kable(tidy_results, digits = 3, caption = "جدول معاملات نموذج الانحدار وفق معايير النشر")
يسمح هذا التكامل البرمجي بدمج مخرجات summary() داخل تقارير R Markdown وQuarto الديناميكية لإنتاج وثائق أكاديمية بصيغ PDF وWord وHTML بأعلى درجات التنسيق والأناقة العلمية.
11. مقارنة الدالة ()summary بالدوال الإحصائية البديلة في بيئة R و Tidyverse
11.1 المقارنة مع دوال لغة R الأساسية (Base R Alternatives)
تقدم بيئة R الأساسية مجموعة من الدوال الوصفية البديلة التي تتقاطع وظائفها مع الدالة summary()، ولكل منها غرض تحليلي محدد:
- دالة
fivenum(x): تحسب ملخص الأعداد الخمسة الخاص بجون توكي (Tukey’s Five-Number Summary)، وهي: الأدنى، والربيع الأدنى، والوسيط، والربيع الأعلى، والأقصى. تختلف عنsummary()في خوارزمية حساب الأرباع عند التعامل مع العينات الصغيرة، كما أنها لا تحسب المتوسط الحسابي ولا ترصد القيم المفقودة بصورة تفصيلية. - دالة
str(x): تركز على الهيكل التخزيني والبرمجي للكائن (النوع، والأبعاد، وعينات من القيم الأولى) دون تقديم مؤشرات إحصائية وصفية كالنزعة المركزية والتشتت. - دالة
attributes(x): تعرض البيانات الوصفية (Metadata) المرتبطة بالكائن مثل الأسماء، والمستويات الفئوية، والأصناف البرمجية.
تتميز summary() عن هذه الأدوات بكونها الأداة الأكثر توازناً وشمولاً في الجمع بين الوصف الإحصائي الرقمي والمعاينة البنيوية السريعة.
11.2 المقارنة مع أدوات الحزم الحديثة (Hmisc, psych, skimr)
مع تطور بيئة R ومنظومة Tidyverse، ظهرت حزم متخصصة تقدم بدائل موسعة للتلخيص الإحصائي تلبي متطلبات المجالات التطبيقية الدقيقة:
- حزمة
psychودالتهاdescribe(): موجهة بشكل خاص للبحوث السيكومترية والاجتماعية؛ حيث تضيف إلى المقاييس التقليدية مؤشرات متقدمة مثل معامل الالتواء (Skewness)، ومعامل التفرطح (Kurtosis)، والخطأ المعياري للمتوسط (SE)، والمتوسط المبتور (Trimmed Mean). - حزمة
skimrودالتهاskim(): تقدم تجربة بصرية فائقة للتحليل الاستكشافي عبر طباعة جداول ملونة ومدرجات تكرارية مصغرة (Sparkline Histograms) داخل سطر الأوامر لكل متغير رقمي، مما يعطي انطباعاً فورياً عن شكل التوزيع دون الحاجة لرسم بياني منفصل. - حزمة
dplyrودالتهاsummarise(): تمثل المعيار الحديث للتلخيص المخصص والمجمع حسب المجموعات ضمن سلاسل العمليات البرمجية باستخدام المعامل الأنبوبي%>%أو|>. تتيح للمحلل التحكم الكامل في المقاييس الإحصائية المطلوبة وحسابها بدقة لكل فئة.
library(dplyr)
mtcars %>%
group_by(cyl) %>%
summarise(
Mean_MPG = mean(mpg),
Median_MPG = median(mpg),
IQR_MPG = IQR(mpg),
Count = n()
)
يوضح هذا التباين أن الدالة summary() تظل الأداة الافتتاحية المثلى للفحص الأولي الشامل، بينما تتكامل معها الدوال المتخصصة في مراحل التحليل الدقيق وتوليد التقارير الموجهة.
12. الأخطاء الشائعة واستكشاف المشكلات وإصلاحها عند استخدام الدالة ()summary
12.1 أخطاء في فهم وتفسير المخرجات الإحصائية
يقع العديد من المبتدئين في أخطاء تفسيرية شائعة عند قراءة مخرجات summary()، ومن أبرزها الاعتماد الحصري على المتوسط الحسابي وتجاهل الوسيط في البيانات الملتوية بشدة؛ ففي البيانات المالية أو مقاييس الدخل، تتأثر المتوسطات بالقيم الشاذة المرتفعة، مما يجعل الوسيط والمدى الربيعي المؤشرين الأكثر تعبيراً عن النزعة المركزية والتشتت.
من الأخطاء التحليلية الشائعة أيضاً إغفال مراجعة نوع البيانات للأعمدة النصية؛ فإذا ظلت الأعمدة التصنيفية بصيغة Character دون تحويلها إلى Factors، تعرض الدالة مؤشرات الطول والنوع فقط، مما يحرم المحلل من رؤية التوزيع التكراري للفئات وتحديد الفئات النادرة أو الخاطئة.
علاوة على ذلك، قد تحتوي قواعد البيانات على قيم مفقودة مسجلة كنصوص صريحة مثل "None" أو "Unknown" أو "999" بدلاً من القيمة المعيارية NA. في هذه الحالة، تعامل R هذه المدخلات كبيانات صالحة، مما يفسد حساب المقاييس ويخفي حجم الفقد الحقيقي ما لم تُعالج تلك القيم وتحول إلى NA قبل التلخيص.
12.2 المشكلات البرمجية والأداء مع البيانات الضخمة (Troubleshooting & Performance)
عند التعامل مع قواعد بيانات ضخمة تحتوي على عشرات الملايين من الصفوف ومئات الأعمدة، قد يؤدي استدعاء summary(large_df) مباشرة إلى بطء ملحوظ واستهلاك كبير للذاكرة العشوائية؛ نظراً لقيام الدالة بحساب مقاييس متعددة لكل عمود بالتزامن. لتفادي هذا البطء، يفضل تطبيق التلخيص على عينات عشوائية ممثلة من البيانات (Sampling) أو حصر الاستدعاء على الأعمدة محل الاهتمام فقط.
من المشكلات البرمجية المتكررة أيضاً محاولة استخلاص عناصر غير موجودة داخل كائنات التلخيص المتقدمة؛ كأن يحاول المستخدم استخراج معامل التحديد من نموذج انحدار باستخدام model$r.squared مباشرة، وهو ما يعيد القيمة NULL، لأن r.squared ليس عنصراً في كائن النموذج الأصلي lm بل يُحسب ويُخزن داخل كائن التلخيص summary(model)$r.squared.
يضمن اتباع الممارسات البرمجية السليمة وفهم هندسة كائنات S3 الاستفادة القصوى من دقة وكفاءة الدالة summary() في بناء مسارات عمل إحصائية مستقرة وموثوقة.
خاتمة
تمثل الدالة summary() في لغة البرمجة الإحصائية R أداة كلاسيكية متعددة الاستخدامات تجمع بين بساطة الاستدعاء وعمق المخرجات الإحصائية. بفضل ارتكازها على بنية الدوال العامة في نظام S3، تقدم الدالة ملخصات وصفية واستدلالية متكيفة تغطي كافة الكائنات البرمجية من المتجهات البسيطة وصولاً إلى نماذج الانحدار وتحليل التباين المعقدة. يتيح التوظيف الواعي لمعاملات الدالة وفهم بنيتها التخزينية للمحللين والأكاديميين تسريع وتيرة التحليل الاستكشافي، واكتشاف الأنماط الشاذة والقيم المفقودة، واستخراج المؤشرات الرياضية لبناء تقارير علمية رصينة تتوافق مع أرقى المعايير المنهجية في مجتمع علم البيانات المعاصر.
References
- Chambers, J. M. (2008). Software for Data Analysis: Programming with R. Springer Science & Business Media. https://doi.org/10.1007/978-0-387-75936-4
- Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. SAGE Publications.
- Fox, J., & Weisberg, S. (2019). An R Companion to Applied Regression (3rd ed.). SAGE Publications. https://socialsciences.mcmaster.ca/jfox/Books/Companion/
- R Core Team. (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
- Robinson, D., Hayes, A., & Couch, S. (2023). broom: Convert Statistical Objects into Tidy Tibbles (R package version 1.0.5). https://CRAN.R-project.org/package=broom
- Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley Publishing Company.
- Wickham, H. (2019). Advanced R (2nd ed.). Chapman and Hall/CRC. https://adv-r.hadley.nz/
- Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data (2nd ed.). O’Reilly Media. https://r4ds.hadley.nz/