التحليل الإحصائيبرمجة Rتصور البيانات

كيفية إنشاء مخططات الصندوق المتجاورة في R (مع أمثلة)

دليل أكاديمي شامل يوضح كيفية إنشاء وتخصيص مخططات الصندوق المتجاورة في لغة R باستخدام Base R ومكتبة ggplot2 مع أمثلة تطبيقية تفصيلية.

تاريخ النشر

تعد عملية استكشاف البيانات وتحليل بنيتها التوزيعية الركيزة الأساسية التي يستند إليها أي تحليل إحصائي رصين أو نموذج تنبؤي دقيق في بيئات البحث العلمي وعلوم البيانات المعاصرة. ومن بين مختلف الأدوات والأساليب البيانية المتاحة للمحللين والباحثين، تبرز المخططات الصندوقية، أو ما يُعرف بمخططات الصندوق وشاربيه (Box and Whisker Plots)، كواحدة من أكثر التقنيات غير المعلمية كفاءة وقدرة على تلخيص التوزيعات الاحتمالية المعقدة في شكل بصري مبسط ومكثف يسهل استيعابه وتفسيره. تتيح هذه المخططات للمحلل استخلاص رؤى جوهرية وسريعة حول النزعة المركزية، والتشتت، ودرجة التماثل أو الالتواء، فضلًا عن الكشف الفوري والموثوق عن القيم المتطرفة والشاذة التي قد تشوه النتائج إذا لم تُعالج بالطرق المنهجية الصحيحة.

وعندما تتسع مساحة التحليل لتشمل دراسة ظاهرة محددة عبر مجموعات تجريبية أو فئات تصنيفية متعددة، تظهر القوة التحليلية الاستثنائية للمخططات الصندوقية المتجاورة (Side-by-Side Boxplots). إن وضع الصناديق الإحصائية جنبًا إلى جنب ضمن نظام إحداثي موحد يمنح الباحث قدرة فورية على إجراء مقارنات بصرية مباشرة ومتقاطعة بين المجموعات الفرعية، وتحديد ما إذا كانت الفروق الظاهرة في المتوسطات أو الوسائط مصحوبة بتباينات متكافئة أو متباعدة، وهو ما يمثل خطوة تمهيدية بالغة الأهمية قبل الشروع في تطبيق الاختبارات الاستدلالية المعلمية مثل تحليل التباين (ANOVA) أو الاختبارات اللامعلمية المقابلة مثل اختبار كروسكال-واليس (Kruskal-Wallis).

توفر بيئة الحوسبة الإحصائية ولغة البرمجة R Project for Statistical Computing منظومة برمجية فريدة ومتكاملة لبناء وتخصيص هذه المخططات بمستويات فائقة من الدقة والجمالية. فمن خلال محرك الرسوميات الأساسي (Base R)، يستطيع المحلل توليد رسومات سريعة وفعالة ومباشرة بأقل قدر من الشيفرات البرمجية، بينما تفتح حزمة ggplot2 المعتمدة على فلسفة “قواعد بناء الرسوم البيانية” (Grammar of Graphics) آفاقًا غير محدودة للتحكم الدقيق في كافة التفاصيل التنسيقية والطبقات البصرية، مما يجعلها الخيار الأمثل لإعداد المخرجات الرسومية الموجهة للنشر الأكاديمي والتقارير التنفيذية رفيعة المستوى. يهدف هذا الدليل الموسع والشامل إلى استعراض كافة المفاهيم الرياضية والتقنيات البرمجية المتقدمة لإنشاء وتخصيص المخططات الصندوقية المتجاورة في لغة R من الصفر وحتى الاحتراف.

1. مقدمة إلى المخططات الصندوقية المتجاورة وأهميتها في التحليل الاستكشافي للبيانات

1.1 مفهوم المخطط الصندوقي (Boxplot) ومكوناته الرياضية الخمسة

ابتكر عالم الإحصاء الأمريكي الشهير جون توكي (John Tukey) المخطط الصندوقي في عام 1977 كأداة بصرية جوهرية ضمن منهجيته الرائدة في التحليل الاستكشافي للبيانات (Exploratory Data Analysis). يعتمد المخطط الصندوقي في جوهره الرياضي على ما يُعرف بـ “ملخص الأرقام الخمسة” (Five-Number Summary)، وهو مقياس إحصائي وصفي متين لا يتأثر بالقيم الشاذة والمتطرفة مقارنة بالمقاييس التقليدية المعتمدة على المتوسط الحسابي والانحراف المعياري. يتألف هذا الملخص من: الحد الأدنى الإحصائي (Minimum)، والربع الأول أو المئين الخامس والعشرين (Q1 / 25th Percentile)، والوسيط أو المئين الخمسين (Median / Q2)، والربع الثالث أو المئين الخامس والسبعين (Q3 / 75th Percentile)، والحد الأقصى الإحصائي (Maximum).

يمثل الصندوق المستطيل المركزي في الرسم المسافة الفاصلة بين الربع الأول (Q1) والربع الثالث (Q3)، وتُعرف هذه المسافة الحيوية باسم المدى الربيعي (Interquartile Range – IQR)، وتُحسب بالمعادلة الرياضية: IQR = Q3 – Q1. يضم هذا الصندوق داخله نسبة 50% الدقيقة من البيانات المركزية للمجتمع أو العينة، بينما يقسم الخط العريض الموجود داخل الصندوق البيانات إلى نصفين متساويين، وهو خط الوسيط الرياضي. يُعد المدى الربيعي مقياسًا فائق المتانة لقياس التشتت الإحصائي؛ حيث يقيس مدى تقارب أو تباعد نصف البيانات الأوسط دون التأثر بالذيول الطويلة للتوزيعات.

تمتد من حافتي الصندوق خطوط مستقيمة تُعرف باسم “الشاربين” (Whiskers) لتصل إلى أبعد نقطة بيانات تقع ضمن الأسوار الإحصائية المحددة مسبقًا. تُحدد هذه الأسوار بالاعتماد على قاعدة جون توكي الشهيرة: السور الداخلي السفلي يساوي Q1 – (1.5 * IQR)، بينما يساوي السور الداخلي العلوي Q3 + (1.5 * IQR). تُعتبر أي نقطة بيانات تتجاوز هذين السورين قيمة متطرفة أو شاذة (Outlier) وتُمثل في المخطط كنقاط منفصلة ومستقلة، مما يمنح المحلل القدرة على فحصها بشكل منعزل. كما يتيح المخطط الصندوقي تقييم تماثل والتواء التوزيع الاحتمالي؛ فإذا كان خط الوسيط يقسم الصندوق إلى جزأين متساويين وكان الشاربان متساويين في الطول، فإن التوزيع يعتبر متماثلًا وطبيعيًا، بينما يدل انزياح الوسيط نحو أحد طرفي الصندوق أو استطالة أحد الشاربين على وجود التواء موجب (يميني) أو سالب (يساري).

1.2 القيمة المضافة للمخططات المتجاورة (Side-by-Side) في المقارنات الإحصائية

تكتسب المخططات الصندوقية أبعادًا تحليلية أعمق عندما تُعرض في نسق متجاور (Side-by-Side Boxplots)، حيث يتم محاذاة الصناديق المتعددة على طول محور فئوي مشترك، مما يخلق بيئة مقارنة بصرية متعددة الأبعاد. تتيح هذه المقارنة للمحلل الإحصائي مقارنة مقاييس النزعة المركزية (الوسائط) ومقاييس التشتت (المدى الربيعي والمدى الكلي) عبر مجموعات تجريبية أو بيئية أو سلوكية متعددة في آن واحد ودون الحاجة إلى التنقل بين جداول رقمية معقدة.

تسهم المخططات المتجاورة في تسريع وتيرة الفحص الاستكشافي الأولي للبيانات قبل بناء وتطبيق النماذج الإحصائية المتقدمة. فعلى سبيل المثال، تساعد المقارنة الفورية لأطوال الصناديق في التحقق من الفرضيات الأساسية المتعلقة بتجانس التباين (Homogeneity of Variance)، وهي فرضية جوهرية لتطبيق اختبارات تحليل التباين المعلمية. كما يكشف المخطط فورًا عن وجود تباين غير متكافئ أو اختلافات جذرية في أشكال التوزيعات بين المجموعات، مما يوجه الباحث نحو اختيار التحويلات الرياضية المناسبة للمتغيرات أو اللجوء إلى البدائل اللامعلمية الرصينة.

في الأبحاث الكمية والعلوم السلوكية والطبية، تسهل المخططات الصندوقية المتجاورة تفسير التباينات المعقدة والتشابهات الخفية بين مجموعات الضبط والمجموعات العلاجية المختلفة. كما تبرز بوضوح ما إذا كان التأثير التجريبي ناتجًا عن إزاحة عامة في كافة قيم المجموعة المعالجة أو بسبب تأثير استثنائي اقتصر على مجموعة فرعية محددة ولّد قيماً متطرفة في ذيل التوزيع، وهو تمييز جوهري لا يمكن للمتوسطات الحسابية المجردة إظهاره.

1.3 المقارنة بين النظام الأساسي (Base R) ومكتبة (ggplot2)

توفر لغة البرمجة الإحصائية R بيئتين رئيسيتين لإنشاء الرسوم البيانية، تختلف كل منهما في فلسفة البناء ومستوى التخصيص وسرعة التنفيذ. يتميز نظام الرسوميات الأساسي المدمج (Base R) بالسرعة الفائقة والجاهزية الفورية دون الحاجة إلى تثبيت أي حزم خارجية أو الاعتماد على مكتبات تابعة؛ حيث تُستخدم دالة boxplot() لتوليد مخرجات رسومية عالية الجودة ببضعة أسطر برمجية موجزة وبسيطة، مما يجعلها الخيار المثالي أثناء جلسات الاستكشاف السريع والتنظيف الأولي لمجموعات البيانات الضخمة.

في المقابل، تمثل حزمة ggplot2، التي طورها عالم الإحصاء هادلي ويكهام (Hadley Wickham)، ثورة في تمثيل البيانات استنادًا إلى كتاب ليلاند ويلكينسون الشهير “The Grammar of Graphics”. تعتمد الحزمة على مفهوم الطبقات المتراكمة (Layering System)، حيث يتم فصل بنية البيانات عن الجماليات البصرية والأنظمة الإحداثية والموضوعات التنسيقية. تمنح هذه الفلسفة الباحث قدرة غير محدودة على التحكم في كل بكسل داخل الرسم البياني، وتسمح بدمج طبقات متعددة مثل النقاط المبعثرة، وخطوط المتوسطات، ومؤشرات الدلالة الإحصائية فوق المخطط الصندوقي الأساسي بسلاسة مطلقة.

يعتمد الاختيار بين Base R و ggplot2 على طبيعة المهمة الإحصائية؛ فبينما يُفضل Base R للمهام البرمجية الروتينية والفحص السريع داخل الدوال المخصصة والحزم البرمجية، تُعد ggplot2 المعيار الذهبي المعتمد لإنتاج المخططات والرسوم البيانية الموجهة للأوراق البحثية المحكمة والمجلات العلمية ذات معامل التأثير العالي والتقارير التفاعلية المعقدة.

2. إعداد بيئة العمل وهيكلة البيانات في لغة R

2.1 تجهيز وتثبيت الحزم الإحصائية الضرورية

للبدء في بناء المخططات الصندوقية المتجاورة وفق أفضل الممارسات البرمجية، يجب أولاً التأكد من توافر بيئة عمل محدثة وخالية من التعارضات البرمجية. يُفضل دائمًا استخدام أحدث إصدار مستقر من لغة R وبيئة التطوير المتكاملة RStudio لضمان التوافق التام مع الحزم الإحصائية الحديثة وتجنب أخطاء معالجة الذاكرة.

يتطلب العمل المتقدم تثبيت منظومة حزم tidyverse المتكاملة، والتي تحتوي بداخلها على مكتبة ggplot2 جنبًا إلى جنب مع حزم معالجة البيانات مثل dplyr و tidyr و forcats. يتم تثبيت هذه الحزم عبر مستودع CRAN الرسمي باستخدام الأمر البرمجي: install.packages("tidyverse"). بعد اكتمال عملية التثبيت، يتم استدعاء الحزم الضرورية إلى جلسة العمل البرمجية باستخدام دالة library(ggplot2) ودالة library(dplyr).

بالإضافة إلى المنظومة الأساسية، يُنصح باستدعاء مكتبات مساعدة تعزز من الجوانب الجمالية والتحليلية للمخططات الصندوقية، مثل مكتبة RColorBrewer ومكتبة viridis لتوفير لوحات ألوان علمية متوافقة مع متطلبات النشر وسهلة القراءة لمرضى عمى الألوان، بالإضافة إلى حزمة ggpubr و ggsignif لإضافة اختبارات المعنوية الإحصائية المباشرة على الرسوم البيانية.

2.2 إنشاء إطار البيانات التجريبي (Data Frame Construction)

لكي نتمكن من تطبيق كافة المفاهيم الرياضية والبرمجية الواردة في هذا الدليل بصورة عملية وواقعية، سنقوم بإنشاء إطار بيانات تجريبي موسع ومضبوط يمثل دراسة افتراضية تقيس مستويات الأداء الرياضي (النقاط المسجلة) لمجموعة من الرياضيين ينتمون إلى أربعة فرق تدريبية مختلفة (الفريق A، والفريق B، والفريق C، والفريق D) تحت ظروف تجريبية متنوعة.

يتم بناء هذا الإطار باستخدام دالتي data.frame() و rep() لتوليد مصفوفة بيانات تتكون من متغير فئوي مستقل (المجموعات التدريبية) ومتغير كمي متصل يمثل الدرجات المسجلة. يتم ضبط البذور العشوائية باستخدام دالة set.seed(123) لضمان إمكانية إعادة إنتاج نفس النتائج والأرقام بدقة تامة لدى القارئ.

يتم استعراض البنية الداخلية لبياناتنا المولدة من خلال دالتي head() لمعاينة الصفوف الستة الأولى، ودالة str() لفحص التكوين الهيكلي للأعمدة والتأكد من أنواع المتغيرات المخزنة. إن التحقق من كون المتغير المستقل ممثلًا كعامل تصنيفي من نوع Factor والمتغير التابع ممثلًا كمتغير عددي متصل من نوع Numeric يعد شرطًا مسبقًا حاسمًا؛ حيث إن وجود المتغير الفئوي في صورة سلاسل نصية مجردة أو أرقام صحيحة قد يدفع بعض الدوال إلى معاملته بصورة خاطئة كمتغير مستمر، مما يؤدي إلى فشل إنشاء الصناديق المتجاورة وظهورها بشكل غير منضبط.

2.3 تنظيف وفحص جودة البيانات قبل التمثيل الرسومي

قبل الشروع في كتابة أوامر الرسم، تقتضي المنهجية الإحصائية الصارمة إجراء فحص شامل لجودة ونقاء إطار البيانات. تبرز القيم المفقودة (Missing Values – NA) كواحدة من أبرز التحديات التي تؤثر مباشرة على موثوقية المخططات الصندوقية؛ حيث يؤدي وجود قيم مفقودة في المتغير الفئوي إلى ظهور صناديق غير معنونة، بينما يؤدي وجودها في المتغير المتصل إلى استبعاد تلك الحالات تلقائيًا وتعديل قيم ملخص الأرقام الخمسة، وهو ما قد يغير حسابات الأسوار الإحصائية ويخفي قيماً شاذة حقيقية.

يتم التعامل مع القيم المفقودة عبر دوال حزمة dplyr مثل دالة filter(!is.na(variable)) لضمان تنقية الإطار بالكامل، أو من خلال فحص نسب الفقد باستخدام دالة summary() للتأكد من عدم وجود تشوهات بنيوية في العينة. يلي ذلك التحقق من ترميز المتغيرات الفئوية وتحديد مستويات العامل (Factor Levels) وترتيبها الصحيح عبر دالة factor() لتجنب الفوضى البصرية الناتجة عن الترتيب الأبجدي الافتراضي الذي قد لا يعكس التسلسل المنطقي للمجموعات التجريبية.

كذلك، يتعين على الباحث التحقق من توازن أحجام العينات (Sample Sizes) بين المجموعات الفرعية المختلفة عبر دالة table(). إن تفاوت أحجام العينات تفاوتاً حاداً بين المجموعات المتجاورة (Unbalanced Design) يفرض تفسيراً حذراً لعروض الصناديق والأسوار؛ إذ إن المجموعات الصغيرة تميل طبيعياً إلى إظهار مدى ربيعي أضيق مع حساسية مفرطة للقيم الشاذة، وهو ما يتطلب تدابير بصرية إضافية سنناقشها لاحقاً مثل تعديل عروض الصناديق لتتناسب مع أحجام العينات الفعلية.

3. إنشاء المخططات الصندوقية المتجاورة باستخدام حزمة Base R الأساسية

3.1 استخدام دالة boxplot() مع صيغة المعادلة (Formula Syntax)

تعتبر دالة boxplot() في نظام Base R أداة كلاسيكية فائقة الكفاءة لبناء المخططات الصندوقية المتجاورة، حيث تعتمد على نظام الصيغ الرياضية (Formula Notation) الذي يربط بين المتغيرات بأسلوب إحصائي بديهي وشائع في لغة R. تأخذ الصيغة الأساسية الشكل التالي: y ~ x، حيث يمثل y المتغير التابع الكمي المتصل المستهدف بالقياس والتلخيص، بينما يمثل x المتغير المستقل الفئوي الذي يحدد مجموعات التصنيف المتجاورة، ويتم تمرير إطار البيانات عبر المعامل data.

عند تنفيذ هذا الأمر البسيط، يقوم المحرك الداخلي لدالة boxplot() تلقائيًا بتقسيم قيم المتغير التابع بناءً على مستويات المتغير المستقل، ثم حساب ملخص الأرقام الخمسة لكل فئة بشكل مستقل ومنفصل، ورسم الصناديق الإحصائية بمحاذاة منتظمة على طول المحور الأفقي (المحور السيني)، مع تمثيل قيم القياس على المحور الرأسي (المحور الصادي).

تظهر المخرجات التلقائية للمخطط الصندوقي بدقة عالية؛ حيث يتم رسم خط عريض أسود يمثل الوسيط الإحصائي داخل كل صندوق، وتحيط به حدود الربعين الأول والثالث، وتنبثق الشوارب لتصل إلى حدود البيانات الطبيعية غير الشاذة، في حين تُرسم أي قيمة متطرفة تتجاوز الأسوار كنقاط دائرية مفرغة أعلى أو أسفل الشوارب. تضمن هذه الآلية التلقائية محاذاة رياضية دقيقة للصناديق عبر المحور السيني، مما يتيح قراءة مقارنة فورية وموثوقة لكافة المجموعات التجريبية.

Side-by-side boxplots in base R
Side-by-side boxplots in base R

3.2 إضافة العناوين وتسميات المحاور لتحسين القراءة

على الرغم من كفاية المخطط التلقائي للأغراض الاستكشافية الفردية، إلا أن تحويله إلى وثيقة علمية واضحة ومقروءة يتطلب إثراءه بالعناوين الشارحة وتسميات المحاور الدقيقة. توفر دالة boxplot() مجموعة متكاملة من المعاملات النصية المباشرة لتحقيق ذلك دون الحاجة لدوال إضافية.

يُستخدم المعامل main لتمرير سلسلة نصية تمثل العنوان الرئيسي للمخطط الإحصائي، بينما يُستخدم المعاملان xlab و ylab لتسمية المحور السيني (المتغير الفئوي) والمحور الصادي (وحدات قياس المتغير التابع) على التوالي. تضمن هذه التسميات التفسير الدقيق للقارئ دون أي غموض حول طبيعة المتغيرات ووحدات القياس المستخدمة في التجربة.

للتحكم المتقدم في المظهر الطباعي لهذه النصوص، توفر لغة Base R عائلة معاملات التكبير والتصغير المعروفة باسم cex (Character Expansion). يتيح المعامل cex.main تعديل حجم خط العنوان الرئيسي، والمعامل cex.lab لتغيير حجم خطوط تسميات المحاور، والمعامل cex.axis للتحكم في أحجام نصوص الأرقام ومستويات المجموعات المعروضة على التدريجات الإحداثية، مما يضمن خروج الرسم بمظهر متناسق وجاهز للعرض في العروض التقديمية والمستندات التقنية.

3.3 تلوين المخططات الصندوقية في Base R

يلعب التلوين المنهجي دورًا حيويًا في تعزيز المقروئية البصرية والتفريق بين المجموعات المصنفة في المخططات الصندوقية المتجاورة. يتيح نظام Base R التحكم في تلوين الصناديق عبر المعامل col، والذي يقبل خيارات متعددة تتراوح بين الألوان الأحادية والمتجهات اللونية المركبة.

عند تمرير اسم لون واحد مثل col = "lightblue" أو قيمة هيكساديسيمال مثل col = "#4A90E2"، تطبق الدالة هذا اللون بصورة موحدة على كافة الصناديق في المخطط، وهو خيار مفضل عندما لا يكون هناك تقسيم فرعي داخل المجموعات لتجنب التشتيت اللوني غير الضروري، مع تلوين حدود الصناديق باللون الأسود القياسي.

أما عند الرغبة في تلوين كل صندوق تجريبي بلون فريد يميزه عن المجموعات المجاورة، يتم تمرير متجه لوني كامل يحتوي على عدد من الألوان مساوٍ لعدد مستويات المتغير الفئوي، مثل col = c("coral", "lightgreen", "skyblue", "gold"). كما يمكن دمج لوحات الألوان القياسية المتقدمة من حزمة RColorBrewer عبر استدعاء دالة brewer.pal() داخل معامل col، مما يضمن تناغم الألوان وتباينها المتوازن بصريًا وخلوها من السطوع المفرط المجهد للعين.

4. تعديل اتجاه المخطط وتخصيص المظهر المتقدم في Base R

4.1 التحويل إلى المخطط الصندوقي الأفقي (Horizontal Boxplots)

في العديد من التطبيقات العملية لتحليل البيانات، قد تكون التسميات النصية للمجموعات الفئوية طويلة نسبيًا أو قد يحتوي المخطط على عدد كبير من المجموعات المتجاورة، مما يجعل عرضها الرأسي التقليدي مسببًا لتداخل النصوص وتشوه المظهر العام للمحور السيني. يقدم المخطط الصندوقي الأفقي حلاً هندسيًا وبصريًا أنيقًا لهذه المشكلة الشائعة.

يتم تحويل المخطط الصندوقي في Base R إلى الاتجاه الأفقي ببساطة عبر تفعيل المعامل المنطقي horizontal = TRUE داخل دالة boxplot(). يؤدي تفعيل هذا الخيار إلى عكس النظام الإحداثي بالكامل؛ حيث يُنقل المتغير الفئوي المستقل إلى المحور الرأسي (الصادي سابقًا) وتُرتب المجموعات من الأسفل إلى الأعلى، بينما يمتد مقياس المتغير الكمي التابع أفقيًا على طول المحور السيني.

عند التحويل إلى الاتجاه الأفقي، يجب الانتباه الشديد إلى تبديل تسميات المحاور النصية؛ فيصبح المعامل xlab مخصصًا لوصف المتغير الرقمي التابع، بينما يصبح المعامل ylab مخصصًا للمجموعات الفئوية. يوفر هذا الاتجاه مساحة رحبة لقراءة نصوص الفئات الطويلة بصورة أفقية طبيعية ومريحة للعين البشرية دون الحاجة إلى تدوير النصوص أو تصغيرها إلى حدود غير مقروءة.

4.2 التحكم في عرض الصناديق والمسافات الفاصلة

توفر دالة boxplot() في Base R حزمة من المعاملات التنسيقية الدقيقة التي تمنح المحلل تحكمًا كاملًا في الأبعاد الهندسية للصناديق والمسافات البيئية الفاصلة بينها لضمان التوازن الجمالي والرياضي في المخطط النهائي.

يتحكم المعامل boxwex في عامل التمدد النسبي لعرض الصناديق الإحصائية، حيث يأخذ قيمة رقمية قياسية (تكون 0.8 افتراضيًا). يؤدي تصغير هذه القيمة (مثل boxwex = 0.5) إلى تضييق عرض الصناديق وزيادة المساحات الفارغة الفاصلة بينها، وهو أمر مفيد عند وجود عدد قليل من المجموعات لتجنب ضخامة الصناديق غير المبررة. في المقابل، يتحكم المعامل staplewex في عرض الشرطة العرضية المستقيمة الموجودة عند نهاية كل شارب (Staple)، والتي تمثل الحدود القصوى والدنيا للبيانات قبل الأسوار.

لإحكام السيطرة على اتجاه نصوص التدريجات والتسميات على المحاور، يُستخدم المعامل الهام las (Label Axis Style). يأخذ هذا المعامل قيماً صحيحة من 0 إلى 3؛ حيث يضمن الضبط las = 1 ظهور كافة أرقام وتسميات المحاور بصورة أفقية دائمًا بغض النظر عن اتجاه المحور نفسه، وهو ما يرفع من كفاءة القراءة ويوفر مظهرًا احترافيًا يتوافق مع أدلة النشر الإحصائي المرموقة.

4.3 تضمين الثلم (Notches) لمقارنة الوسائط إحصائياً

تعد خاصية “الثلمات الصندوقية” (Notched Boxplots) واحدة من أقوى الإضافات الإحصائية البصرية التي ابتكرها جون توكي لإجراء مقارنات استدلالية سريعة وموثوقة للوسائط دون الحاجة إلى استخراج قيم الاختبارات الرقمية في مرحلة الفحص الأولي.

يتم تفعيل هذه الخاصية في Base R عن طريق إضافة المعامل المنطقي notch = TRUE. يؤدي هذا الخيار إلى تضييق جوانب الصندوق حول خط الوسيط المركزي ليصنع ما يشبه “الخصر” أو الثلمة المنحنية. يمثل مدى هذا الثلم فترة ثقة تقريبية بنسبة 95% لوسيط المجتمع الإحصائي، ويُحسب رياضيًا عبر المعادلة القياسية: Median ± 1.58 * (IQR / sqrt(n))، حيث يمثل n حجم العينة داخل المجموعة المحددة.

تكمن الفائدة التحليلية الكبرى للثلمات في قاعدة التفسير البصري المباشرة: إذا كانت الثلمات الخاصة بصندوقين متجاورين لا تتداخلان بصريًا على المحور الرأسي، فإن هذا يوفر دليلاً إحصائيًا قويًا (بمستوى ثقة يقارب 95%) على وجود فرق ذي دلالة إحصائية معنوية بين وسيطي المجموعتين. ومع ذلك، يجب الحذر عند تطبيق الثلمات على العينات الصغيرة جدًا (حيث يكون n صغيراً)، إذ قد تتسع حدود الثلمة لتتجاوز حدود الربعين الأول أو الثالث، مما يؤدي إلى ظهور تحذير برمجي في R وتشويه شكل الصندوق بانقلاب حوافه إلى الخارج.

5. بناء المخططات الصندوقية المتجاورة المتقدمة باستخدام ggplot2

5.1 البنية الأساسية للأمر ggplot وتعيين الخصائص الجمالية (Aesthetics)

تعتمد حزمة ggplot2 في توليد الرسوم الإحصائية على فلسفة تراكمية رائدة تعتمد على فصل عناصر الرسم إلى طبقات منفصلة ومنطقية تبدأ بتعريف مجموعة البيانات، ثم تعيين العلاقات الجمالية، يليها استدعاء الأشكال الهندسية، وانتهاءً بتخصيص الأنظمة الإحداثية والموضوعات التنسيقية.

تبدأ الشفرة البرمجية القياسية باستدعاء دالة ggplot() وتمرير إطار البيانات المطلوب تحليله من خلال المعامل data. تلي ذلك خطوة تعيين الروابط الجمالية باستخدام دالة aes() (Aesthetic Mappings)، حيث يتم ربط المتغير الفئوي المستقل بالمحور السيني x = team وربط المتغير الكمي التابع المتصل بمحور الصادات y = points. يمثل هذا التعيين الهيكل الأساسي الذي ستتحرك ضمنه كافة الأشكال الهندسية اللاحقة.

لتحويل هذه الروابط الهيكلية إلى مخطط صندوقي متجاور مرئي، يتم ربط الدالة الأساسية بالطبقة الهندسية المخصصة عبر معامل الجمع (+) وإضافة الدالة geom_boxplot(). تقوم هذه الطبقة بحساب كافة المقاييس الإحصائية المعتمدة لملخص الأرقام الخمسة ورسم الصناديق المتجاورة بدقة هندسية متناهية مع ضبط المحاذاة والتباعد الرأسي والأفقي بصورة آلية متطورة تفوق الإعدادات الافتراضية للأنظمة الكلاسيكية.

5.2 إدارة الألوان والتعبئة (Color vs. Fill Aesthetics)

تتميز حزمة ggplot2 بوجود تفريق دقيق ومنهجي بين نوعين رئيسيين من المعاملات اللونية الجمالية داخل دوالها ورسوماتها، وهما معامل التعبئة الداخلية fill ومعامل تلوين الخطوط والحدود الخارجية color.

عند التعامل مع geom_boxplot()، يتحكم المعامل fill في تلوين المساحة الداخلية المستطيلة للصندوق التي تمثل المدى الربيعي، بينما يتحكم المعامل color في تلوين خطوط الحدود الخارجية للصندوق، وخط الوسيط المركزي، وخطوط الشاربين، فضلًا عن تلوين الدوائر الممثلة للقيم الشاذة. ولتلوين كل صندوق بلون مستقل يعكس مجموعته التجريبية، يتم تمرير المتغير الفئوي إلى خاصية التعبئة داخل الروابط الجمالية: aes(x = team, y = points, fill = team)، مما يولد تلقائيًا دليلاً للألوان (Legend) موضحًا على يمين المخطط.

لتعزيز المقروئية والتوازن البصري، تتيح حزمة ggplot2 إمكانية تعديل درجة الشفافية للألوان المعبأة عبر معامل الشفافية alpha داخل دالة geom_boxplot(alpha = 0.7). يفيد استخدام الشفافية بدرجة طفيفة في تخفيف حدة الألوان المصمتة، ويسمح بظهور خطوط الشبكة الإحداثية الخلفية، فضلًا عن تمهيد الرسم لدمج طبقات بيانية إضافية لاحقة مثل النقاط الفردية المبعثرة دون حدوث تشويش بصري بين الطبقات المتراكبة.

5.3 التحويل الأفقي في ggplot2 والمقارنة مع Base R

توفر مكتبة ggplot2 مرونة هندسية استثنائية عند الرغبة في تحويل المخطط الصندوقي المتجاور من الاتجاه الرأسي القياسي إلى الاتجاه الأفقي الأنيق والمناسب للمجموعات ذات المسميات الطويلة.

تتمثل الطريقة الكلاسيكية والأكثر شيوعًا في إضافة طبقة تحويل الإحداثيات coord_flip() إلى نهاية الأمر البرمجي. تعمل هذه الدالة على تدوير النظام الإحداثي الديكارتي بالكامل بمقدار 90 درجة بعد بناء كافة الطبقات؛ حيث تظل الروابط الجمالية المحددة في aes() كما هي دون تعديل، وتقوم الدالة بنقل المحور السيني ليكون رأسيًا والمحور الصادي ليكون أفقيًا مع الحفاظ الكامل على سلامة دلالات الألوان والعناوين دون أي تشوه في المقاييس.

أما في الإصدارات الحديثة من مكتبة ggplot2 (بدءًا من الإصدار 3.3.0 فما بعده)، فقد أصبح بالإمكان التبديل المباشر بين المتغيرات داخل دالة الربط الجمالي aes() نفسها؛ حيث يمكن ببساطة تعيين المتغير الكمي للمحور السيني والمتغير الفئوي للمحور الصادي: aes(x = points, y = team). تمنح هذه الميزة الحديثة كفاءة برمجية أعلى وتسمح بتطبيق طبقات وتعديلات إحداثية إضافية مثل المقاييس اللوغاريتمية دون التعارض مع دوال عكس المحاور السابقة.

6. تخصيص الجماليات والأشكال والموضوعات في ggplot2

6.1 تطبيق الموضوعات الجاهزة وتخصيص الخلفيات

يتميز المظهر الافتراضي لمكتبة ggplot2 بوجود خلفية رمادية مزودة بخطوط شبكية بيضاء، وهو نمط ابتكره هادلي ويكهام لتسهيل قراءة المواقع الإحداثية. ومع ذلك، فإن النشر في المجلات الأكاديمية والتقارير الاحترافية يتطلب مظهرًا أكثر بساطة ونقاء يركز على إبراز البيانات الإحصائية وتقليل العناصر غير الضرورية.

توفر الحزمة منظومة متكاملة من الموضوعات الجاهزة (Built-in Themes) التي يمكن تطبيقها كطبقة مستقلة لتغيير الهوية البصرية للرسم بلمسة واحدة. يُعد الموضوع theme_bw() من أكثر الموضوعات رواجًا في الأوساط العلمية، حيث يستبدل الخلفية الرمادية بخلفية بيضاء نقية مع إطار خارجي رمادي أنيق وشبكة إحداثية خفيفة. كما يوفر الموضوع theme_minimal() تصميمًا شديد التجريد يخلو من الأطر الخارجية، بينما يقدم theme_classic() مظهرًا كلاسيكيًا يتكون من محوري سينات وصادات أسودين متقاطعين دون أي خطوط شبكية داخلية.

تسهم هذه الموضوعات البسيطة في تعظيم ما يُعرف في الأدبيات الإحصائية بـ “نسبة البيانات إلى الحبر” (Data-Ink Ratio)، وهو مبدأ تصميمي رائد وضعه إدوارد تفتي (Edward Tufte) ينص على ضرورة تخصيص غالبية الحبر المستخدم في الطباعة أو البكسلات في الشاشات لتمثيل القيم والبيانات الفعلية، وإلغاء أو تخفيف كافة الزخارف والخطوط الثانوية التي قد تشتت ذهن القارئ عن فهم العلاقات الإحصائية الجوهرية.

6.2 إدارة لوحات الألوان المخصصة ودليل الألوان (Legend)

تتطلب المخططات الصندوقية المتجاورة الموجهة للنشر العلمي انتقاءً دقيقًا للوحات الألوان لتكون معبرة ومتباينة وسهلة القراءة لكافة فئات القراء بما في ذلك الأفراد المصابون بعمى الألوان.

تتيح دالة scale_fill_manual() للباحث تحديد متجهات لونية دقيقة ومخصصة عبر تمرير أكواد هيكساديسيمال المعيارية في معامل values، مما يسمح بمطابقة الهوية البصرية للمؤسسة البحثية أو قواعد التنسيق الخاصة بالمجلات العلمية. بالإضافة إلى ذلك، توفر دالة scale_fill_brewer(palette = "Set2") وصولاً مباشرًا إلى لوحات ألوان ColorBrewer الشهيرة والمصممة بعناية فائقة للأغراض الخرائطية والإحصائية. كما تُعد دالة scale_fill_viridis_d() الخيار الأحدث والأكثر علمية؛ حيث تعتمد على لوحات إدراكية متدرجة تضمن تباينًا مثاليًا حتى عند طباعة الرسم باللونين الأبيض والأسود أو عبر شاشات العرض منخفضة التباين.

تتضمن إدارة المظهر في ggplot2 أيضًا التحكم الكامل في دليل الألوان (Legend). في كثير من المخططات الصندوقية المتجاورة، يكون وجود دليل الألوان على يمين الرسم فائضًا عن الحاجة إذا كانت أسماء المجموعات مكتوبة بوضوح على المحور السيني؛ لذا يمكن إخفاء دليل الألوان تمامًا بإضافة المعامل show.legend = FALSE داخل geom_boxplot() أو من خلال theme(legend.position = "none"). وفي حال الرغبة في الاحتفاظ به، يمكن إعادة تموضعه أسفل الرسم عبر theme(legend.position = "bottom") لإفساح مساحة أفقية أوسع لعرض الصناديق.

6.3 إضافة العناوين المنسقة وتسميات المحاور عبر labs()

تمثل دالة labs() في ggplot2 الواجهة المركزية الشاملة لإدارة وتخصيص كافة النصوص الوصفية المحيطة بالمخطط الصندوقي، مما يضمن خروج الرسم كوحدة إيضاحية قائمة بذاتها ومستوفية لكافة المعايير المنهجية.

تتيح دالة labs() تمرير معلمات متعددة تشمل: العنوان الرئيسي title، والعنوان الفرعي التوضيحي subtitle، وتسمية المحور السيني x، وتسمية المحور الصادي y، بالإضافة إلى عنوان دليل الألوان fill أو color، وحاشية التوثيق والمصدر caption التي توضع أسفل الرسم وتُستخدم عادة لتوثيق حجم العينة الإجمالي أو الإشارة إلى مصدر البيانات وتاريخ جمعها.

للتحكم في التفاصيل الطباعية لهذه النصوص، تُستخدم دالة theme() المتقدمة بالاقتران مع دالة element_text(). تتيح هذه المنظومة تغيير حجم الخط size، ووزنه face = "bold"، ولونه، وضبط المحاذاة الأفقية hjust (حيث تشير القيمة 0.5 إلى التوسيط المثالي). كما تُعالج مشكلة تداخل النصوص الطويلة لأسماء المجموعات على المحور السيني باحترافية من خلال تطبيق تدوير زاوي للنصوص عبر axis.text.x = element_text(angle = 45, hjust = 1)، مما يضمن عرض كافة التسميات بشكل مائل وأنيق وواضح تمامًا دون أي تداخل بصري.

7. التعامل مع القيم الشاذة وتخصيصها في كلا النظامين

7.1 الكشف الإحصائي عن القيم الشاذة عبر الدالة boxplot.stats()

قبل اتخاذ أي قرار تنفيذي بشأن تخصيص مظهر القيم الشاذة أو استبعادها من التمثيل البياني، يقتضي التحليل الإحصائي السليم الكشف الرياضي الدقيق عن تلك القيم والتعرف على مواقعها في مصفوفة البيانات الأصلية وفهم العوامل المسببة لظهورها.

توفر لغة R دالة متخصصة بالغة القوة تُدعى boxplot.stats(). عند تمرير متغير كمي محدد إلى هذه الدالة، تقوم بإرجاع قائمة إحصائية مفصلة تحتوي على عدة عناصر رئيسية: عنصر stats الذي يتضمن ملخص الأرقام الخمسة، وعنصر n الذي يمثل حجم العينة الفعلي بعد استبعاد المفقودات، وعنصر conf الذي يحدد حدود فترة الثقة للوسيط، والأهم من ذلك عنصر out الذي يستخرج قائمة رقمية صريحة بكافة القيم التي تجاوزت الأسوار الإحصائية المحددة واعتُبرت قيماً شاذة رياضياً.

تكمن الأهمية التحليلية لهذه الخطوة في التمييز الجوهري بين نوعين من القيم الشاذة: الأخطاء الإدخالية أو القياسية الناتجة عن خلل في أجهزة القياس أو أخطاء الترميز البشري (والتي يجب تصحيحها أو استبعادها مسبقًا)، والقيم المتطرفة الواقعية التي تعبر عن تباين طبيعي أصيل في الظاهرة المدروسة. إن المخطط الصندوقي لا يقوم بحذف هذه القيم بل يعزلها بصريًا لحماية النزعة المركزية من التشويه، مع تنبيه الباحث إلى ضرورة فحصها بشكل معمق.

7.2 تخصيص شكل وحجم ولون القيم الشاذة في ggplot2

تمنح طبقة geom_boxplot() في مكتبة ggplot2 المحلل تحكمًا دقيقًا ومباشرًا في كافة الخصائص الجمالية للنقاط التي تمثل القيم الشاذة، مما يسمح بتمييزها بوضوح أو تقليل بروزها البصري وفقًا لأهداف العرض التقديمي.

تتضمن دالة geom_boxplot() مجموعة من المعاملات المخصصة للقيم الشاذة تبدأ ببادئة outlier.؛ حيث يتيح المعامل outlier.color = "red" تلوين النقاط الشاذة بلون مغاير للون الصندوق (مثل اللون الأحمر الصارخ) لجذب انتباه القارئ الفوري إليها أثناء الشرح والتحليل. كما يتحكم المعامل outlier.shape في الرمز الهندسي للنقطة (وفق ترقيم أشكال R القياسي من 0 إلى 25، مثل استخدام المثلثات أو المربعات المفرغة أو المصمتة)، بينما يحدد المعامل outlier.size الحجم الفيزيائي للنقطة، والمعامل outlier.alpha درجة شفافيتها.

من الحالات التقنية الهامة جدًا عند بناء مخططات متقدمة: الرغبة في دمج طبقة نقاط البيانات الأصلية المبعثرة (Jitter Plot) فوق المخطط الصندوقي. في هذه الحالة، إذا لم يتم إخفاء القيم الشاذة الأصلية الناتجة عن الصندوق، فسوف تُرسم تلك النقاط المتطرفة مرتين في نفس الموضع (مرة من الصندوق ومرة من طبقة النقاط المبعثرة). لتفادي هذا الخطأ البصري الشائع، يتم إخفاء النقاط الشاذة من طبقة الصندوق نهائيًا عبر تعيين الشكل الهندسي إلى قيمة مفقودة: geom_boxplot(outlier.shape = NA)، مما يفسح المجال لطبقة النقاط المنفصلة لتتولى تمثيلها بدقة.

7.3 تعديل حدود الأسوار ومضاعف المدى الربيعي (IQR Multiplier)

تعتمد قاعدة جون توكي القياسية على مضاعف مقداره 1.5 من المدى الربيعي لتحديد الأسوار الإحصائية الداخلية. ومع ذلك، قد تقتضي بعض السياقات البحثية المتقدمة أو التوزيعات الاحتمالية ذات الذيول الثقيلة تعديل هذا المضاعف لزيادة أو تقليص حساسية الكشف عن القيم الشاذة.

في نظام Base R، يتم التحكم في هذا المضاعف عبر المعامل coef داخل دالة boxplot(). القيمة الافتراضية هي coef = 1.5؛ فإذا قام الباحث بتعديل القيمة إلى coef = 3، فإن الشوارب ستمتد لتصل إلى الأسوار الخارجية القصوى (Extreme Fences)، مما يؤدي إلى تضييق نطاق اعتبار القيم شاذة وحصرها في الحالات الاستثنائية والمتطرفة جدًا فقط. أما إذا عُين المعامل إلى coef = 0، فإن الشوارب ستمتد لتغطي كامل مدى البيانات من الحد الأدنى المطلق إلى الحد الأقصى المطلق دون استخراج أي قيم شاذة منفصلة.

تتيح مكتبة ggplot2 نفس هذه الإمكانية الرياضية تمامًا من خلال تمرير نفس المعامل coef داخل دالة geom_boxplot(coef = 3). يجب التأكيد على أن أي تعديل في معامل الأسوار يجب أن يستند إلى تبرير منهجي وإحصائي واضح في متن التقرير العلمي؛ حيث إن تغيير حدود الأسوار يغير بالضرورة مواقع أطراف الشوارب وعدد النقاط الشاذة الظاهرة، وهو ما قد يؤثر على المقارنة البصرية بين الدراسات المختلفة إذا لم يُوثق ذلك التعديل بدقة.

8. دمج النقاط الفردية والبيانات المبعثرة (Jittering and Overlays)

8.1 إضافة طبقة geom_jitter() لتوضيح التوزيع الحقيقي للبيانات

على الرغم من القوة التلخيصية الهائلة للمخطط الصندوقي، إلا أنه يعاني من قصور جوهري يتمثل في “إخفاء” الكثافة الحقيقية للبيانات وشكل التوزيع التفصيلي داخل الصندوق؛ فقد يتشابه صندوقان متجاوران تمامًا في ملخص الأرقام الخمسة والوسيط، في حين يكون أحدهما ناتجًا عن توزيع ثنائي القمة (Bimodal) والآخر ناتجًا عن توزيع منتظم أو وحيد القمة.

للتغلب على هذا القصور وتطبيق مبادئ الشفافية التامة في عرض البيانات، يُعد دمج طبقة النقاط الفردية المبعثرة عبر دالة geom_jitter() فوق المخطط الصندوقي الممارسة الأكثر تفضيلاً في المجلات الأكاديمية المعاصرة. تقوم تقنية التشتت العشوائي (Jittering) بإضافة إزاحة عشوائية طفيفة ومحسوبة لمواقع النقاط عبر المحور الأفقي لمنع ظاهرة تطابق وتراكب النقاط (Overplotting) الناتجة عن تساوي قيم القياس لدى عدد من أفراد العينة.

يتم التحكم في مقدار هذا التشتت الأفقي والرأسي بدقة عبر المعاملين width و height داخل geom_jitter(width = 0.2, height = 0, alpha = 0.5, color = "black"). يضمن ضبط width = 0.2 بقاء النقاط المبعثرة محصورة بدقة داخل نطاق الصندوق المخصص لها دون أن تتداخل مع شريط المجموعة المجاورة، بينما يضمن height = 0 عدم التلاعب بالقيم الحقيقية للقياسات على المحور الصادي. تتيح هذه الطبقة للقارئ معاينة حجم العينة الفعلي وكثافة النقاط وتوزيعها الداخلي جنبًا إلى جنب مع الملخص الإحصائي الصندوقي.

8.2 استخدام geom_dotplot() كبديل منظم لتمثيل النقاط

كبديل أكثر تنظيمًا وهندسة للتشتت العشوائي، توفر مكتبة ggplot2 طبقة المخطط النقطي التراكمي عبر دالة geom_dotplot(). في هذا النمط، لا تُبعثر النقاط عشوائيًا، بل يتم تجميعها في فئات رقمية دقيقة وتكديسها رأسيًا أو أفقيًا بصورة متسقة تشبه المدرج التكراري النقطي.

يتم تخصيص هذه الطبقة عبر تحديد اتجاه المحاذاة باستخدام المعامل binaxis = "y" لتكديس النقاط على طول محور المتغير الكمي، وتحديد نمط التراص عبر stackdir = "center" لتتمركز النقاط التراكمية في منتصف الصندوق الإحصائي تمامًا. كما يتحكم المعامل binwidth في العرض الفيزيائي لفئات التجميع، وهو معامل حاسم يجب ضبطه بدقة ليتناسب مع النطاق الإجمالي لبيانات التجربة وحجم العينة.

يوفر دمج geom_dotplot() مظهرًا تحليليًا فائق الأناقة يجمع بين الرصانة الهندسية والوضوح الإحصائي، حيث يمكن للقارئ عد النقاط الفردية في العينات الصغيرة والمتوسطة ومعاينة التماثل والقمم التوزيعية بصريًا دون أي تشويش عشوائي، مع الحفاظ على هيكل الصندوق والوسيط كمرجع أساسي للنزعة المركزية والتشتت.

8.3 إظهار قيمة المتوسط الحسابي بجانب الوسيط

يمثل الخط الأوسط داخل المخطط الصندوقي قيمة الوسيط الحسابي (المئين الخمسين)، وهو المقياس الأنسب للنزعة المركزية في التوزيعات الملتوية. غير أن الكثير من الباحثين والقرّاء يرغبون في الاطلاع على المتوسط الحسابي (Mean) ومقارنته بالوسيط على نفس الرسم لتقييم الالتواء اللامعلمي مباشرة.

تتيح مكتبة ggplot2 حساب وإسقاط أي دالة إحصائية تلخيصية فوق الرسم باستخدام الدالة القوية والمتقدمة stat_summary(). لحساب وعرض المتوسط الحسابي، يتم تمرير الدالة الإحصائية عبر المعامل fun = "mean"، وتحديد الشكل الهندسي المرغوب عبر geom = "point".

لتمييز نقطة المتوسط الحسابي بوضوح عن بقية نقاط البيانات وخط الوسيط، يتم تخصيص رمزها الهندسي وحجمها ولونها بدقة؛ كأن يُستخدم شكل المعين المصمت الملون عبر المعاملات: shape = 23, size = 3, fill = "red", color = "black". توفر هذه الإضافة فائدة تحليلية استثنائية فورية: فإذا انطبقت نقطة المتوسط على خط الوسيط كان التوزيع متماثلاً تماماً، وإذا ارتفعت نقطة المتوسط فوق خط الوسيط دل ذلك على وجود التواء موجب قوي نتيجة وجود قيم مرتفعة تسحب المتوسط نحو الأعلى، والعكس صحيح في حالة الالتواء السالب، مما يغني الباحث عن حساب معاملات الالتواء الرياضية المعقدة في مرحلة القراءة البصرية الأولية.

9. المخططات الصندوقية المتجاورة مع المتغيرات التفاعلية المتعددة (Grouped Boxplots)

9.1 التجميع الثنائي (Two-Way Grouped Boxplots) باستخدام متغيرين تصنيفيين

تصل قوة المخططات الصندوقية المتجاورة إلى ذروتها التحليلية عندما تمتد التجربة لتشمل دراسة تأثير متغيرين تصنيفيين مستقلين (Two Independent Categorical Variables) وتفاعلهما المشترك على متغير كمي متصل، وهو التصميم الشائع في التجارب العاملية (Factorial Designs).

في حزمة ggplot2، يتم بناء هذا المخطط المجمع المعقد بمنتهى السلاسة البرمجية عبر إدخال المتغير التصنيفي الأول على المحور السيني، وإدخال المتغير التصنيفي الثاني كمعامل لخاصية التعبئة اللونية داخل دالة الروابط الجمالية: aes(x = team, y = points, fill = gender). عند تنفيذ هذا الأمر، تقوم الحزمة تلقائيًا بتقسيم كل فئة رئيسية على المحور السيني إلى فئات فرعية متجاورة وتلوين كل فئة فرعية وفق دليل ألوان موحد.

للتحكم في الوضعية الهندسية للصناديق الفرعية المتجاورة ومنع تداخلها، يتم استخدام دالة الموضعة position_dodge() داخل طبقة geom_boxplot(position = position_dodge(0.8)). تضمن هذه الدالة محاذاة الصناديق الفرعية جنبًا إلى جنب بمسافات بينية متناسقة تمامًا، مما يتيح للباحث فحص الفروق بين المستويات الرئيسية، والفروق بين المستويات الفرعية داخل كل مجموعة، وملاحظة وجود أي تفاعل إحصائي محتمل (Interaction Effect) كأن يكون تأثير الفئة الفرعية إيجابيًا في إحدى المجموعات وسلبيًا في مجموعة أخرى.

9.2 تقسيم المخطط إلى شبكات فرعية باستخدام التقسيم الشبكي (Faceting)

عندما يتسع التصميم التجريبي ليشمل متغيرًا تصنيفيًا ثالثًا أو عند الرغبة في تجنب ازدحام الصناديق المتجاورة في مساحة رسم واحدة، تبرز تقنية التقسيم الشبكي (Faceting) كواحدة من أقوى ميزات منظومة ggplot2 لتقسيم البيانات إلى مصفوفة من اللوحات الفرعية المنفصلة والمتناسقة.

توفر الحزمة دالتين رئيسيتين للتقسيم الشبكي: دالة facet_wrap(~ condition) التي تقوم بإنشاء شبكة ملتفة من الرسوم بناءً على متغير تصنيفي محدد وتوزيعها تلقائيًا على عدد محدد من الصفوف والأعمدة عبر المعاملين nrow و ncol، ودالة facet_grid(rows ~ cols) التي تنشئ مصفوفة شبكية ثنائية الأبعاد متقاطعة تربط بين متغيرين تصنيفيين مختلفين.

من الميزات التقنية الحيوية في التقسيم الشبكي إمكانية التحكم في مقاييس المحاور الإحداثية؛ فبشكل افتراضي تكون المقاييس ثابتة وموحدة عبر كافة اللوحات (Fixed Scales) لتسهيل المقارنة المطلقة. ومع ذلك، إذا كانت نطاقات القياس متباعدة جدًا بين اللوحات، يمكن تحرير مقاييس المحور الصادي بإضافة المعامل scales = "free_y"، مما يسمح لكل لوحة فرعية بضبط نطاق محورها الصادي ليتطابق مع أدنى وأعلى قيمة خاصة ببياناتها دون التأثر بالنطاقات العامة للوحات المجاورة.

9.3 إعادة ترتيب الفئات ترتيباً منطقياً أو تصاعدياً/تنازلياً

يتمثل أحد الأخطاء الشائعة في العرض الرسومي الاستكشافي في ترك المجموعات الفئوية على المحور السيني مرتبة بالترتيب الأبجدي الافتراضي لبرنامج R. غالبًا ما يكون الترتيب الأبجدي عشوائيًا وخاليًا من أي دلالة علمية، مما يُجبر عين القارئ على القفز غير المنظم بين الصناديق لمقارنة مستويات الأداء.

تتيح لغة R إعادة ترتيب مستويات المتغير الفئوي ترتيبًا منطقيًا يستند إلى قيمة إحصائية ملخصة، مثل ترتيب الفرق تصاعديًا أو تنازليًا وفقًا لوسيط كل مجموعة أو متوسطها الحسابي. يتم ذلك باستخدام دالة reorder() الأساسية في Base R، أو من خلال تطبيق الأدوات المتقدمة لحزمة forcats (وهي جزء أصيل من منظومة tidyverse) عبر دالة fct_reorder().

تُطبق الدالة داخل تعيين الخصائص الجمالية على النحو التالي: aes(x = fct_reorder(team, points, .fun = median), y = points). يؤدي هذا السطر البرمجي إلى إعادة ترتيب الصناديق المتجاورة على طول المحور السيني بسلاسة فائقة بحيث تتصاعد الوسائط من اليسار إلى اليمين. يمنح هذا الترتيب المنظم القارئ قدرة فورية على تحديد المجموعة الأدنى أداءً، والمجموعة الأعلى، والتدرج العام بين المستويات دون بذل أي جهد ذهني في المقارنات الثنائية المشتتة.

10. تفسير المخططات الصندوقية المتجاورة وربطها بالتحليل الإحصائي الاستدلالي

10.1 التحقق البصري من فروض النماذج الإحصائية (Assumptions Checking)

لا تقتصر وظيفة المخططات الصندوقية المتجاورة على الوصف والتلخيص الأولي للبيانات فحسب، بل تمثل أداة تشخيصية لا غنى عنها للتحقق البصري المسبق من مدى استيفاء البيانات للافتراضات الإحصائية الصارمة التي تبنى عليها النماذج الخطية العامة واختبارات الفروق المعلمية كاختبار “ت” للعينات المستقلة (Independent Samples t-test) وتحليل التباين الأحادي (One-Way ANOVA).

يأتي افتراض تجانس التباين (Homoscedasticity / Homogeneity of Variance) في مقدمة هذه الفروض؛ ويتم فحصه بصريًا من خلال مقارنة الأطوال الرأسية للصناديق المتجاورة (المدى الربيعي IQR) والامتداد الكلي للشوارب عبر المجموعات المختلفة. فإذا كانت الصناديق متقاربة في أطوالها الرأسية وامتدادات شواربها، فإن هذا يوفر مؤشرًا بصريًا قويًا على استيفاء فرضية تجانس التباين. أما إذا كان أحد الصناديق أطول بمرتين أو ثلاث من الصناديق المجاورة، فإن هذا ينبه الباحث إلى انتهاك محتمل للفرضية، مما يستوجب استخدام تعديل ويلش (Welch’s ANOVA) أو تطبيق تحويلات لوغاريتمية لتثبيت التباين.

كذلك، يسهم المخطط في تقييم افتراض اعتدالية التوزيع (Normality) داخل كل مجموعة فرعية. تدل المجموعات التي تظهر وسيطًا يتوسط الصندوق بدقة مع شوارب متناظرة وخلو تام من القيم الشاذة على توزيعات طبيعية متسقة. في المقابل، فإن وجود وسائط منزاحة بشدة نحو حواف الصندوق وشوارب متباينة الطول وقيم متطرفة متعددة يشير إلى التواء جوهري يعزز قرار الباحث بالاعتماد على الاختبارات اللامعلمية مثل اختبار مان-ويتني (Mann-Whitney U) أو اختبار كروسكال-واليس (Kruskal-Wallis).

10.2 استخراج الإحصاءات الوصفية ومطابقتها مع المخطط

تتطلب المعايير المنهجية الصارمة في كتابة الأطروحات العلمية والتقارير الأكاديمية تكامل التمثيل البياني البصري مع الجداول الإحصائية الرقمية الدقيقة، بحيث يتمكن القارئ من مطابقة المعالم المرئية على الصندوق بالقيم الرقمية الدقيقة المحسوبة رياضيًا.

توفر بيئة R عدة دوال لاستخراج هذه المعالم عبر المجموعات؛ ففي Base R يمكن استخدام دالة tapply() أو دالة aggregate(points ~ team, data = df, summary) لاستخراج ملخص الأرقام الخمسة والمتوسط الحسابي لكل مجموعة على حدة. أما باستخدام حزمة dplyr، فيتم توليد جداول ملخصة فائقة التنسيق والدقة عبر دمج دالتي group_by() و summarise() لحساب الوسيط، والمدى الربيعي (IQR)، والمتوسط، والانحراف المعياري، والخطأ المعياري، وحدود الربعين الأول والثالث بدقة متناهية.

تتيح هذه المطابقة الرقمية للباحث صياغة نصوص وصفية دقيقة توثق قراءات المخطط الصندوقي؛ كأن يُذكر في التقرير: “أظهر الفحص البصري للصناديق المتجاورة تفوق الفريق A على بقية الفرق، وهو ما تؤكده النتائج الرقمية حيث سجل الفريق A وسيطاً قدره (Median = 85.5, IQR = 12.0) مقارنة بالفريق B الذي سجل وسيطاً قدره (Median = 72.0, IQR = 14.5)”. يضمن هذا الربط الوثيق بين الشكل والرقم أعلى درجات الموثوقية والمصداقية العلمية في التوثيق الأكاديمي.

10.3 إضافة الدلالات الإحصائية ومستويات المعنوية (p-values) على المخطط

للارتقاء بالمخطط الصندوقي المتجاور إلى مستوى الرسوم التوضيحية المتقدمة المنشورة في كبرى الدوريات العلمية مثل مجلات Nature و Science و Elsevier، يلجأ الباحثون إلى دمج نتائج الاختبارات الاستدلالية ومستويات الدلالة الإحصائية (p-values) مباشرة فوق الصناديق المقارنة في شكل أقواس دلالية ونجوم معنوية (*, **, ***).

تتيح حزم إحصائية متخصصة مثل حزمة ggsignif وحزمة ggpubr تنفيذ هذه المهمة بأعلى درجات الدقة والامتثال لمعايير التصميم العلمي. من خلال دالة geom_signif() التابعة لحزمة ggsignif، يستطيع الباحث تحديد أزواج المجموعات المستهدفة بالمقارنة وتحديد الاختبار الإحصائي المرغوب (مثل test = "t.test" أو test = "wilcox.test")، لتقوم الدالة آليًا بإجراء الاختبار، واستخراج القيمة الاحتمالية، ورسم القوس الإحصائي في الموضع الرأسي المناسب أعلى الصناديق مع طباعة النجوم أو القيم الرقمية المعنوية.

كما توفر دالة stat_compare_means() في حزمة ggpubr إمكانية إجراء مقارنات متعددة شاملة وطباعة القيمة الاحتمالية العامة للنموذج (ANOVA أو Kruskal-Wallis) في زاوية المخطط، مع توفير خيارات متقدمة لإجراء المقارنات البعدية الثنائية (Post-hoc pairwise comparisons) وضبط مستويات المعنوية لتصحيح المقارنات المتعددة باستخدام طرق مثل تعديل بونفيروني (Bonferroni) أو توكي (Tukey HSD)، مما يجعل المخطط الصندوقي المتجاور لوحة بيانية استدلالية متكاملة تغني عن الرجوع إلى جداول الاختبارات المعقدة.

11. استكشاف الأخطاء الشائعة وحلها أثناء إنشاء المخططات الصندوقية في R

11.1 أخطاء أنواع البيانات وتصنيف المتغيرات (Data Type Mismatches)

يعد خطأ عدم تطابق أنواع البيانات (Data Type Mismatch) من أكثر الأخطاء البرمجية إحباطًا وشيوعًا بين المبتدئين في لغة R؛ حيث يتفاجأ المحلل أحيانًا عند تنفيذ أمر geom_boxplot() أو boxplot() بظهور كافة البيانات مدمجة في صندوق إحصائي واحد ضخم يمتد على كامل مساحة الرسم بدلاً من ظهور الصناديق المتجاورة المتوقعة.

ينشأ هذا الخطأ في الغالب عندما يكون المتغير الفئوي المستقل مخزنًا داخل إطار البيانات كمتغير رقمي مستمر (Numeric أو Integer)؛ كما في حالات ترميز المجموعات بالأرقام (1، 2، 3، 4) بدلاً من الأسماء النصية. في هذه الحالة، يتعامل المحرك البرمجي لـ R مع هذا المتغير كمتغير كمي متصل على المحور السيني بدلاً من تقسيمه إلى مجموعات منفصلة. يُحل هذا الإشكال ببساطة من خلال تحويل المتغير صراحة إلى عامل تصنيفي باستخدام دالة as.factor() أو factor() قبل الرسم، أو كتابة aes(x = factor(group), y = value) داخل دالة الربط الجمالي مباشرة.

من الأخطاء الهيكلية الشائعة الأخرى وجود البيانات في التنسيق العريض (Wide Format)؛ حيث تكون كل مجموعة تجريبية ممثلة في عمود منفصل ومستقل داخل إطار البيانات بدلاً من وجود عمود للتصنيف وعمود للقيم. يتطلب إنشاء الصناديق المتجاورة في ggplot2 تحويل البيانات إلى التنسيق الطويل (Long Format). يتم إنجاز هذا التحويل بكفاءة فائقة باستخدام دالة pivot_longer() من حزمة tidyr، حيث يتم تجميع أعمدة المجموعات في عمودين جديدين يمثلان المتغير الفئوي والمتغير الكمي، مما يجعل الإطار مهيأً تمامًا للرسم السليم.

11.2 أخطاء تراكب النصوص والمقاييس وتشويه المظهر

تنشأ العديد من المشاكل البصرية المزعجة عند التعامل مع المخططات الصندوقية المتجاورة متعددة الفئات، ومن أبرزها تداخل وتراكب نصوص أسماء المجموعات على المحور السيني، أو اقتطاع التسميات النصية وخروجها عن حدود نافذة العرض والإخراج النهائي.

في نظام Base R، تنشأ مشكلة خروج التسميات عن هوامش الرسم نتيجة القيود الافتراضية المفروضة على هوامش اللوحة الرسومية. يتم حل هذه المشكلة بدقة عبر تعديل معلمات البيئة الرسومية باستخدام دالة par(mar = c(bottom, left, top, right)) لزيادة حجم الهامش السفلي المخصص للتسميات قبل استدعاء دالة boxplot()، مع ضبط المعامل las = 2 لجعل النصوص عمودية بالكامل وقابلة للقراءة دون اقتطاع.

أما في مكتبة ggplot2، فيتم التغلب على تداخل النصوص بمرونة فائقة من خلال توظيف خيارات دالة theme()؛ حيث يمكن تعديل زاوية دوران النصوص إلى 45 درجة أو 90 درجة باستخدام axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1). كما يمكن الاستفادة من دالة scale_x_discrete(labels = label_wrap(10)) من حزمة scales التي تقوم بتقسيم الجمل النصية الطويلة تلقائيًا إلى أسطر متعددة ومنظمة تمنع التداخل وتحافظ على اتساق المظهر البصري العام.

11.3 تصدير وحفظ المخططات الصندوقية بجودة عالية للنشر الأكاديمي

يمثل التصدير النهائي للرسم البياني بالدقة والأبعاد القياسية الخطوة المتممة لعملية التحليل والتمثيل الإحصائي. إن تصدير المخططات بالاعتماد على خيارات النسخ واللصق التقليدية أو التقاط لقطات الشاشة يؤدي حتمًا إلى تدهور حاد في الدقة الطباعية وظهور تشوهات بكسلية واضحة تجعل العمل غير صالح للنشر في المجلات المحكمة.

في منظومة ggplot2، تُعد دالة ggsave() الأداة المعيارية المعتمدة لحفظ الرسوم البيانية بأعلى مستويات الجودة. تتيح هذه الدالة تحديد اسم الملف والامتداد، وضبط أبعاد الرسم بدقة بالسنتيمتر أو البوصة عبر المعاملين width و height، مع ضبط الدقة الطباعية الفائقة عبر المعامل dpi = 300 (أو dpi = 600 للطباعة الفاخرة). وتُعد صيغ المتجهات الرسومية المتقدمة مثل صيغة PDF وصيغة EPS وصيغة SVG الخيار المثالي للنشر الأكاديمي؛ حيث تضمن هذه الصيغ بقاء الخطوط والنقاط والرسومات حادة ولا نهائية الدقة مهما تم تكبير المخطط داخل ملف البحث النهائي.

أما في نظام Base R، فتتم عملية التصدير البرمجي عالي الجودة عبر فتح قنوات الأجهزة الرسومية المتخصصة باستخدام دوال مثل pdf("boxplot.pdf", width = 8, height = 6) أو tiff("boxplot.tiff", res = 300, width = 2400, height = 1800)، ثم كتابة أوامر الرسم وتخصيصه بالكامل، وإنهاء الجلسة البرمجية وإغلاق القناة وكتابة الملف على القرص الصلب بصورة سليمة عبر استدعاء الأمر الإلزامي dev.off().

12. دراسة حالة تطبيقية شاملة: مقارنة درجات الأداء عبر مجموعات تجريبية متعددة

12.1 وصف البيانات النفسية/التربوية وصياغة الفرضيات

لتتويج كافة المفاهيم الرياضية والبرمجية التي تم استعراضها في هذا الدليل التخصصي، سنقوم بإجراء دراسة حالة تطبيقية متكاملة تحاكي سيناريو بحثي واقعي ومضبوط في ميدان العلوم النفسية والتربوية.

تفترض دراستنا قياس مستوى القلق النفسي والأداء الأكاديمي لدى عينة عشوائية قوامها 240 طالبًا جامعيًا تم توزيعهم بالتساوي عبر ثلاثة برامج تدريبية وتدخلية مختلفة لتخفيف قلق الاختبارات: (1) مجموعة العلاج السلوكي المعرفي (CBT Group)، (2) مجموعة تدريب اليقظة الذهنية والتأمل (Mindfulness Group)، و(3) مجموعة الضبط والتحكم التي لم تتلق أي تدخل علاجي (Control Group). علاوة على ذلك، تم تصنيف الطلاب داخل كل مجموعة علاجية حسب مستوى الضغط الأكاديمي المسجل مسبقًا (منخفض مقابل مرتفع).

تتمثل الفرضية الصفرية للدراسة (H0) في عدم وجود أي فروق ذات دلالة إحصائية في وسائط ودرجات قلق الطلاب بين البرامج التدخلية الثلاثة، مع افتراض تجانس التباين عبر المجموعات. في حين تنص الفرضية البديلة (H1) على أن برامج التدخل العلاجي (CBT واليقظة الذهنية) ستؤدي إلى خفض جوهري وذي دلالة إحصائية في وسائط درجات القلق مقارنة بمجموعة الضبط، مع وجود تفاعل محتمل مع مستوى الضغط الأكاديمي.

12.2 التنفيذ البرمجي الكامل خطوة بخطوة في ggplot2

نبدأ ببناء إطار البيانات التجريبي في R باستخدام التوزيعات العشوائية المنضبطة لمحاكاة الفروق المتوقعة، مع إدخال بعض القيم المتطرفة الواقعية لفحص متانة المخطط.

تتضمن الشيفرة البرمجية المتكاملة استدعاء مكتبات tidyverse و ggpubr و rstatix. نقوم بتعريف المخطط الأساسي بربط المجموعات العلاجية بالمحور السيني x = Intervention، ودرجات القلق بمحور الصادات y = Anxiety_Score، مع تقسيم التعبئة اللونية حسب مستوى الضغط fill = Stress_Level.

نضيف طبقة geom_boxplot() مع ضبط الشفافية وتحديد موضع الصناديق المتجاورة عبر position_dodge(0.8)، وإخفاء النقاط الشاذة التلقائية عبر outlier.shape = NA. نتبع ذلك بإضافة طبقة النقاط الفردية المبعثرة geom_jitter(position = position_jitterdodge(jitter.width = 0.15, dodge.width = 0.8), alpha = 0.4) لإبراز الكثافة الحقيقية للبيانات. ثم نضيف طبقة stat_summary() لحساب المتوسطات الحسابية وإبرازها كمعينات حمراء مميزة.

نثري المخطط بتطبيق الموضوع الأكاديمي theme_bw() وتخصيص لوحة الألوان باستخدام scale_fill_brewer(palette = "Pastel1")، وضبط التسميات الكاملة عبر دالة labs() لتشمل العنوان الرئيسي، والعنوان الفرعي، وتوثيق العينات، وتدوير نصوص المحاور. ونختم بإضافة أقواس الدلالة الإحصائية المحسوبة تلقائيًا لتوثيق الفروق المعنوية بين المجموعات التدخلية ومجموعة الضبط مباشرة على الرسم.

12.3 صياغة التقرير الأكاديمي وتفسير المخرجات وفق دليل APA

تقتضي الممارسة الأكاديمية الرصينة كتابة الفقرة التفسيرية للنتائج بأسلوب علمي دقيق ومنهجي يتوافق مع الدليل التوجيهي الصادر عن جمعية علم النفس الأمريكية (APA Style – 7th Edition).

يُصاغ التقرير الأكاديمي على النحو التالي: “أوضح الفحص البصري للمخططات الصندوقية المتجاورة انخفاضًا ملحوظًا في وسائط درجات القلق لدى مجموعة العلاج السلوكي المعرفي (Mdn = 42.5, IQR = 8.0) ومجموعة اليقظة الذهنية (Mdn = 48.0, IQR = 9.5) مقارنة بمجموعة الضبط التي سجلت مستويات قلق مرتفعة وتشتتًا أوسع (Mdn = 68.0, IQR = 15.0). أظهرت الصناديق المتجاورة تجانسًا متكافئًا نسبيًا في التباينات الداخلية للمجموعات العلاجية مع استطالة طفيفة في الشارب العلوي لمجموعة الضبط تدل على التواء موجب خفيف”.

“كشفت طبقة النقاط المبعثرة المتراكبة ومقارنة المتوسطات الحسابية بالوسائط عن اتساق التوزيعات وخلوها من القيم الشاذة المشوهة باستثناء حالتين متطرفتين في مجموعة اليقظة الذهنية لم تؤثرا على النزعة العامة. وبناءً على استيفاء فروض التجانس البصري والاعتدالية التقريبية، تم تأكيد هذه الفروق عبر تحليل التباين ثنائي الاتجاه (Two-Way ANOVA) والذي أظهر تأثيرًا رئيسيًا دالًا إحصائيًا لنوع التدخل العلاجي، F(2, 234) = 45.32, p < .001, η² = .28، مما يدعم الفرضية البديلة بقوة ويؤكد الفاعلية العالية للتدخلات السلوكية في خفض حدة القلق الأكاديمي".

خاتمة

تمثل المخططات الصندوقية المتجاورة (Side-by-Side Boxplots) إحدى الركائز الأكثر نضجًا وقوة في ترسانة أدوات التحليل الاستكشافي للبيانات؛ إذ تدمج بين البساطة البصرية والعمق الرياضي المتين المستند إلى ملخص الأرقام الخمسة والمدى الربيعي والأسوار الإحصائية. ومن خلال توظيف الإمكانيات البرمجية الهائلة التي تتيحها بيئة R—سواء عبر السرعة الإجرائية لنظام Base R أو المرونة الطباعية اللامحدودة لحزمة ggplot2 والمنظومة المحيطة بها—يستطيع الباحث وعالم البيانات تحويل البيانات الأولية المعقدة إلى لوحات بيانية تفسيرية واستدلالية بالغة الدقة والأناقة. إن إتقان بناء هذه المخططات، والتعامل الحذر مع قيمها الشاذة، ودمج النقاط التوزيعية، وتوثيق مستويات الدلالة الإحصائية يمثل مهارة جوهرية لا غنى عنها لإنتاج أبحاث علمية رصينة وتقارير بيانية احترافية تلبي أعلى المعايير العالمية.

المراجع (References)

  • Chambers, J. M., Cleveland, W. S., Kleiner, B., & Tukey, P. A. (1983). Graphical Methods for Data Analysis. Wadsworth & Brooks/Cole.
  • Kassambara, A. (2020). ggpubr: ‘ggplot2’ Based Publication Ready Plots (R package version 0.4.0). https://CRAN.R-project.org/package=ggpubr
  • McGill, R., Tukey, J. W., & Larsen, W. A. (1978). Variations of box plots. The American Statistician, 32(1), 12-16. https://doi.org/10.1080/00031305.1978.10479236
  • R Core Team. (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
  • Tufte, E. R. (2001). The Visual Display of Quantitative Information (2nd ed.). Graphics Press.
  • Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley.
  • Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2-book.org/
  • Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., François, R., … & Yutani, H. (2019). Welcome to the Tidyverse. Journal of Open Source Software, 4(43), 1686. https://doi.org/10.21105/joss.01686
  • Wilkinson, L. (2005). The Grammar of Graphics (2nd ed.). Springer Science & Business Media.

اقتباس هذا المقال

looti, M. (2026, أغسطس 28). كيفية إنشاء مخططات الصندوق المتجاورة في R (مع أمثلة). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-create-side-by-side-boxplots-in-r-examples/
looti, Mohammed. “كيفية إنشاء مخططات الصندوق المتجاورة في R (مع أمثلة).” عرب سايكلوجي, 28 أغسطس 2026, https://arabpsychology.com/statistics/how-to-create-side-by-side-boxplots-in-r-examples/.
looti, Mohammed. “كيفية إنشاء مخططات الصندوق المتجاورة في R (مع أمثلة).” عرب سايكلوجي. أغسطس 28, 2026. https://arabpsychology.com/statistics/how-to-create-side-by-side-boxplots-in-r-examples/.