كيفية حساب الرتبة المئينية في لغة R (مثالان)
يُعد التحليل الإحصائي الركيزة الأساسية التي تستند إليها العلوم الحديثة لاستخلاص الدلالات وتفسير الظواهر وتفكيك تعقيدات البيانات الكمية والنوعية. وفي خضم هذا التحليل، تمثل مقاييس الموضع والموقع النسبي أدوات جوهرية لا غنى عنها في تحويل الأرقام الخام المبعثرة إلى مؤشرات ذات معنى مقارن دقيق. من بين هذه المقاييس الإحصائية المتقدمة، تبرز الرتبة المئينية (Percentile Rank) كأحد أكثر المقاييس شيوعاً واستخداماً في مجالات شتى، تمتد من القياس النفسي والتقييم التربوي إلى التحليلات الطبية الحيوية ونمذجة البيانات الضخمة في علوم الحاسوب وهندسة البرمجيات الإحصائية.
تكمن القوة التحليلية للرتبة المئينية في قدرتها الفريدة على تحديد الموقع الدقيق لمفردة ما أو ملاحظة معينة بالنسبة إلى جمهرة البيانات ككل، مجردة إياها من قيود وحدات القياس الأصلية ومن التأثيرات المضللة للقيم المتطرفة والانحرافات التوزيعية. وبدلاً من الاكتفاء بالنظر إلى الدرجة الخام كقيمة مطلقة منعزلة، توفر الرتبة المئينية سياقاً نسبياً يوضح النسبة المئوية للملاحظات التي تقع دون تلك القيمة أو تتساوى معها في إطار العينة المعيارية المدروسة. ومن هذا المنطلق، تتكامل البيئة البرمجية الإحصائية المتطورة لغة R كمنصة رائدة لتنفيذ هذه المعالجات الحسابية بكفاءة استثنائية ودقة خوارزمية بالغة.
يقدم هذا الدليل الشامل والموسع إطاراً نظرياً وعملياً متكاملاً لكيفية حساب وتفسير الرتبة المئينية باستخدام لغة R، مستعرضاً مثالين تطبيقيين متعمقين: الأول يتناول حساب الرتبة المئينية على المستوى الشامل للبيانات (Entire Dataset)، بينما يتناول الثاني حساب الرتبة المئينية وفقاً للتقسيم الطبقي والفئوي للمجموعات (Percentile Rank by Group) بالاعتماد على حزمة المعالجة المتقدمة dplyr ومنظومة tidyverse الحديثة. كما يتناول الدليل المعالجات الرياضية للقيم المتكررة، والمقارنات الخوارزمية، والتمثيل البصري البياني، وصولاً إلى أحدث التطبيقات السيكومترية والسريرية لتحليل البيانات.
- 1. مقدمة نظرية حول الرتبة المئينية وأهميتها في التحليل الإحصائي
- 2. الأسس الرياضية والمعادلات لحساب الرتبة المئينية
- 3. إعداد بيئة العمل البرمجية في لغة R
- 4. بناء مجموعة البيانات النموذجية (Sample Dataset)
- 5. المثال الأول: حساب الرتبة المئينية لكامل مجموعة البيانات (Entire Dataset)
- 6. المثال الثاني: حساب الرتبة المئينية حسب المجموعات (Percentile Rank by Group)
- 7. التعامل المتقدم مع القيم المتكررة (Ties) في لغة R
- 8. استخدام دالة percent_rank() المدمجة في حزمة dplyr
- 9. التمثيل البصري للرتب المئينية باستخدام حزمة ggplot2
- 10. التعامل مع القيم المفقودة (NA) والاستثناءات البرمجية
- 11. تطبيقات متقدمة للرتب المئينية في التحليل السيكومتري
- 12. أفضل الممارسات والأخطاء الشائعة عند حساب الرتب المئينية في R
- خاتمة
- References
1. مقدمة نظرية حول الرتبة المئينية وأهميتها في التحليل الإحصائي
1.1 تعريف الرتبة المئينية (Percentile Rank) وطبيعتها القياسية
تُعرّف الرتبة المئينية من المنظور الإحصائي القياسي بأنها النسبة المئوية لجميع الدرجات أو الملاحظات في توزيع تكراري معين والتي تقع دون درجة محددة أو تساويها. وتتسم الرتبة المئينية بكونها مقياساً لا بارامترياً رتبياً يحول المتغيرات الكمية المستمرة أو المنفصلة من مساحتها العددية الأصلية إلى مقياس نسبي موحد يتراوح نظرياً بين صفر في المئة (أو قيمة قريبة جداً منها) ومئة في المئة (100%).
من الضروري إحصائياً التمييز القاطع بين مصطلحين يقع فيهما الخلط غالباً في الأدبيات التحليلية: المئين (Percentile) والرتبة المئينية (Percentile Rank). المئين هو الدرجة الخام أو النقطة العددية على المقياس الأصلي للبيانات التي يقع دونها نسبة مئوية معينة من الملاحظات؛ فعلى سبيل المثال، إذا كان المئين التسعون في اختبار للذكاء هو 125، فإن الرقم 125 يمثل القيمة الخام. في المقابل، فإن الرتبة المئينية هي تلك النسبة المئوية ذاتها المحسوبة لدرجة خام معلومة، أي أن الدرجة 125 تمتلك رتبة مئينية تعادل 90%.
تعتمد الرتب المئينية اعتماداً وثيقاً على مفهوم التوزيعات التكرارية التراكمية، حيث يتم تجميع التكرارات تصاعدياً من أدنى قيمة إلى أعلاها، ثم تحويل هذا التراكم إلى نسبة مئوية من الحجم الإجمالي للعينة. ويُعد هذا التحويل وسيلة معيارية لإلغاء الاعتماد على وحدات القياس الأصلية (كالدرجات أو الأطوال أو الأوزان أو الأزمنة)، مما يجعل المقارنة بين مقاييس ذات خصائص توزيعية متباينة أمراً ممكناً إحصائياً بصورة علمية دقيقة وذات موثوقية عالية.
1.2 الأهمية الإحصائية والتحليلية للرتب المئينية
تكتسب الرتب المئينية أهميتها الجوهرية من قدرتها الفائقة على تيسير المقارنات المرجعية بين أداء الأفراد أو العناصر المختلفة الخاضعة للقياس. فعندما نقيم أداء طالب في اختبار للقدرات ونشير إلى أنه حصل على 45 درجة من أصل 60، تظل هذه النتيجة غامضة ما لم نعرف موقعه النسبي في مجموعته المعيارية؛ ولكن عند التعبير عن أدائه بأن رتبته المئينية هي 88%، يتضح فوراً للمحلل والمقوم أن الطالب قد تفوق على 88% من أقرانه في نفس البيئة المعيارية.
علاوة على ذلك، تتميز الرتب المئينية بمرونة تحليلية تجعلها مثالية للتعامل مع البيانات التي لا تتبع التوزيع الطبيعي (Non-parametric Data)، والتي تشهد التواءات حادة إيجابية أو سلبية. فبينما تفقد المتوسطات الحسابية والانحرافات المعيارية قدرتها التعبيرية الدقيقة في مثل هذه التوزيعات الملتوية نتيجة حساسيتها الشديدة للقيم الشاذة، تظل الرتب المئينية مقياساً متيناً ورصيناً يعتمد على الترتيب الموضعي بدلاً من التباعد الرياضي، مما يحد تماماً من التأثير المشوه للقيم المتطرفة (Outliers).
تستخدم الرتب المئينية أيضاً بشكل موسع في صياغة التقارير التشخيصية الموجهة لأصحاب المصلحة وصناع القرار والممارسين المهنيين غير المتخصصين في الرياضيات البحتة. فاللغة النسبية التي تقدمها الرتبة المئينية تسهل استيعاب المستويات المعيارية دون الحاجة إلى الخوض في تعقيدات الدرجات المعيارية المحولة مثل درجات Z أو T، مما يجعلها أداة تواصل إحصائية تجمع بين الدقة العلمية والوضوح التفسيري.
1.3 تطبيقات الرتب المئينية في القياس النفسي والتربوي
يشكل القياس النفسي والتربوي أحد أخصب الميادين التطبيقية لمفاهيم الرتب المئينية. ففي اختبارات الذكاء العالمية مثل مقياس وكسلر لذكاء البالغين (WAIS) ومقياس ستانفورد بينيه للذكاء، يتم تحويل الدرجات المركبة والدرجات الفرعية إلى رتب مئينية لتحديد الموقع المعرفي للمفحوص بدقة مقارنة بعينة التقنين الوطنية أو الإقليمية المماثلة له في الفئة العمرية والخصائص الديموغرافية.
كما تمتد التطبيقات السريرية إلى مقاييس الشخصية التشخيصية مثل اختبار الشخصية متعدد الأوجه (MMPI) ومقاييس تقييم الاضطرابات السلوكية مثل اضطراب فرط الحركة وتشتت الانتباه (ADHD) ومقاييس طيف التوحد. تتيح الرتب المئينية للأطباء النفسيين والأخصائيين الإكلينيكيين تحديد ما إذا كانت الأعراض السلوكية المقاسة تقع ضمن النطاق الطبيعي النمائي (مثل الرتب بين 25% و 75%) أو تتجاوز العتبات الإكلينيكية الحرجة (كالرتبة المئينية 95% فما فوق)، مما يشير إلى وجود اضطراب يستوجب التدخل العلاجي.
وفي النظم التربوية، تُبنى الاختبارات المعيارية عالية المخاطر واختبارات القبول الجامعي الوطنية على مصفوفات الرتب المئينية لفرز المتقدمين وتوزيع الفرص الأكاديمية والمنح الدراسية بناءً على معايير الكفاءة التنافسية. يسمح هذا المعيار بمقارنة أداء الطلاب القادمين من مدارس ذات خلفيات تعليمية وطرق تقييم متباينة على أرضية معيارية موحدة وعادلة تحكمها منهجية القياس الإحصائي الموضوعي.
2. الأسس الرياضية والمعادلات لحساب الرتبة المئينية
2.1 المعادلة الرياضية الأساسية لحساب الرتبة المئينية
تعتمد الصياغة الرياضية القياسية لحساب الرتبة المئينية لقيمة معينة في مجموعة بيانات مرتبة ترتيباً تصاعدياً على حساب النسبة المئوية للملاحظات التي تقل عن هذه القيمة أو تتطابق معها. في أبسط صورها الرياضية النظرية، يُعبر عن الرتبة المئينية بالمعادلة التالية:
الرتبة المئينية = (رتبة القيمة في البيانات المرتبة / إجمالي عدد القيم الكلي) × 100
حيث تُمثل الرتبة (Rank) الموقع التسلسلي للمشاهدة بعد ترتيب البيانات تصاعدياً من الأصغر إلى الأكبر، في حين يمثل الرمز (N) الحجم الكلي للمجتمع أو العينة المدروسة. وعند تمثيل ذلك في الحسابات البرمجية، يتم غالباً إبقاء النتيجة في صورة كسر عشري يتراوح بين 0 و 1، بحيث يُضرب الناتج في 100 فقط عند الرغبة في التعبير عنه كنسبة مئوية صريحة.
يرتبط هذا التعريف الموضعي ارتباطاً بنيوياً بما يُعرف في الإحصاء الرياضي باسم دالة التوزيع التراكمي التجريبية (Empirical Cumulative Distribution Function – ECDF). تُعرّف دالة ECDF عند نقطة معينة بأنها نسبة الملاحظات في العينة التي تقل عن أو تساوي تلك النقطة. ويمثل المنحنى البياني الناتج عن هذه الدالة دالة درجية غير متناقصة تقفز عند كل نقطة بيانية بمقدار يتناسب مع تكرار تلك القيمة بالنسبة للحجم الإجمالي للبيانات.
2.2 التعامل الرياضي مع القيم المكررة (Ties)
تنشأ معضلة إحصائية ورياضية واضحة عند احتواء مجموعة البيانات على قيم متطابقة أو مكررة (Ties). إذا حصل ثلاثة أفراد على نفس الدرجة الخام تماماً، فكيف يتم تخصيص الرتبة التسلسلية لكل منهم؟ هل يأخذ الجميع الرتبة الصغرى، أم الرتبة الكبرى، أم يتم توزيع متوسط الرتب الحسابية بينهم بالتساوي؟
توجد عدة استراتيجيات وخوارزميات رياضية متبعة لمعالجة هذا التعادل في الرتب:
- طريقة المتوسط الحسابي للرتب (Average/Mean Ties): وهي الطريقة الرياضية الأكثر شيوعاً في الإحصاء المعلمي واللامعلمي؛ حيث تُحسب الرتب المتتالية التي كانت ستشغلها هذه القيم المتطابقة ثم يُقسم مجموعها على عدد التكرارات. فإذا شغلت قيمتان متساويتان الرتبتين 2 و 3، فإن كلتيهما تحصل على الرتبة 2.5.
- طريقة الحد الأدنى (Minimum/Floor Ties): وفيها تُسند أدنى رتبة تسلسلية لجميع القيم المكررة المشتركة في نفس المستوى، مما يحافظ على التقدير التحفظي للرتبة.
- طريقة الحد الأقصى (Maximum/Ceiling Ties): وتمنح أعلى رتبة تسلسلية محتملة لكافة القيم المتساوية، مما يعكس الامتداد التراكمي الأقصى لتلك الملاحظات.
- طريقة الترتيب العشوائي أو الأسبقية (First/Random): حيث تُرتب القيم استناداً إلى أسبقية ورودها في مصفوفة البيانات الأصلية أو عشوائياً، وهي طريقة نادراً ما تُعتمد في القياس الإحصائي الوصفي لأنها تفتقر للعدالة المنهجية.
إن اختيار طريقة معالجة التعادل يؤثر بشكل مباشر على الحساب النهائي للرتبة المئينية، لا سيما في العينات الصغيرة أو البيانات الفئوية ذات التكرارات المكثفة، مما يفرض على المحلل الإحصائي فهماً عميقاً لسلوك الخوارزمية البرمجية المنفذة في بيئة التحليل.
2.3 مقارنة الطرق الرياضية المختلفة لحساب المئينات
تتبنى الأدبيات الإحصائية وبرمجيات التحليل الحسابي خوارزميات متعددة لتقدير المئينات والرتب المئينية، حيث حدد الباحثان هايندمن وفانسن (Hyndman & Fan, 1996) تسعة أنواع قياسية من الخوارزميات المستخدمة في بيئات الحوسبة الإحصائية المختلفة مثل R و SAS و SPSS و Stata و Python.
تتراوح هذه الطرق بين المعالجات المتقطعة (Discrete Empirical Quantiles) التي تلتزم بنقاط البيانات الفعلية دون استيفاء، وبين الطرق المستمرة المعتمدة على الاستيفاء الخطي (Linear Interpolation) بين النقاط المتجاورة. وتختلف المعادلات في كيفية حساب الموضع النسبي (p) بالنسبة لحجم العينة (N)، ومن أبرز هذه الصيغ:
- الصيغة المعتمدة على دالة التوزيع التراكمي التجريبية: Rank / N وهي مناسبة للرتب المئينية المباشرة.
- الصيغة الخطية المرجحة: (Rank – 1) / (N – 1) والتي تُعد المعيار الأساسي لتطبيع البيانات بحيث تمتد دائماً من الصفر المطلق إلى الواحد الصحيح.
- صيغة وايبول المتقدمة: Rank / (N + 1) والمستخدمة بكثرة في حسابات الاحتمالات والموثوقية الهندسية.
في العينات الكبيرة التي يتجاوز حجمها مئات أو آلاف المشاهدات، تتقارب نتائج هذه الخوارزميات التسع وتصبح الفروق العددية بينها مهملة عملياً. أما في العينات متناهية الصغر، فإن الفروق بين الخوارزميات قد تفرز تباينات واضحة في الرتبة المئينية المخرجة، مما يستوجب توحيد المعيار المعتمد وتوثيقه في منهجية البحث العلمي.
3. إعداد بيئة العمل البرمجية في لغة R
3.1 مقدمة عن لغة R وتطبيقاتها في التحليل الإحصائي المتقدم
تُعد لغة R البيئة البرمجية القياسية المفتوحة المصدر الأكثر قوة وانتشاراً في أوساط الإحصائيين، وعلماء البيانات، والباحثين الأكاديميين في شتى التخصصات السلوكية والطبية. توفر لغة R بيئة حوسبية متكاملة لمعالجة المتجهات (Vectors)، والمصفوفات (Matrices)، وهياكل البيانات الجدولية المتقدمة المعروفة باسم أطر البيانات (Data Frames و Tibbles).
تكمن قوة R الاستثنائية في تعاملها مع البيانات كمتجهات متكاملة (Vectorized Operations)، مما يلغي الحاجة إلى كتابة الحلقات التكرارية المعقدة والبطيئة لمعالجة كل ملاحظة على حدة. وتزداد هذه البيئة فاعلية وقوة عند اقترانها ببيئة التطوير المتكاملة الرائدة RStudio، والتي تمنح الباحث واجهة مستخدم رسومية وأدوات تفاعلية لإدارة المشاريع البرمجية، واستعراض المتغيرات، وفحص البيانات، وتوليد الرسوم البيانية التوضيحية عالية الجودة.
تتيح R كذلك للمحللين إمكانية تنفيذ العمليات الإحصائية البسيطة والمعقدة بنفس الدرجة من السلاسة، بدءاً من حساب مقاييس النزعة المركزية والتشتت وصولاً إلى النمذجة الخطية المتقدمة وتحليلات السلاسل الزمنية، مما يجعلها المنصة المثلى لتطبيق خوارزميات حساب الرتب المئينية ومقارنتها عبر السياقات التحليلية المتعددة.
3.2 تثبيت واستدعاء حزمة dplyr للمعالجة البيانية
على الرغم من احتواء بيئة R الأساسية (Base R) على ترسانة ثرية من الدوال الرياضية والإحصائية، إلا أن حزم منظومة tidyverse — وفي مقدمتها حزمة dplyr — قد أحدثت ثورة حقيقية في طريقة كتابة وتحليل وتعديل أطر البيانات في R. تقدم حزمة dplyr ما يُعرف بـ “قواعد هندسة البيانات” عبر دوال متخصصة تتميز بوضوحها النحوي وسرعتها الفائقة.
لتثبيت الحزمة في بيئة العمل، يُنفذ الأمر البرمجي التالي لمرة واحدة فقط في وحدة التحكم (Console):
install.packages("dplyr")
وبمجرد اكتمال التثبيت بنجاح، يتم استدعاء الحزمة لتحميل دوالها في جلسة العمل البرمجية الحالية عبر كتابة:
library(dplyr)
تعتمد حزمة dplyr على المشغل التسلسلي الشهير (Pipe Operator: %>%) أو المشغل الأصلي الجديد في لغة R (|>). يتيح هذا المشغل ربط العمليات الإحصائية المتسلسلة بطريقة منطقية واضحة؛ حيث يتم تمرير مخرجات كل دالة مباشرة لتكون مدخلاً للدالة التي تليها، مما يعزز من مقروئية الشفرة البرمجية ويقلل من الحاجة لإنشاء متغيرات وسيطة تستهلك الذاكرة الحوسبية للجهاز.
3.3 الدوال الإحصائية المدمجة للترتيب في بيئة R الأساسية
تشتمل بيئة R الأساسية على دالة جوهرية تُعرف باسم rank()، وهي المسؤولة عن إرجاع الرتب التسلسلية لعناصر أي متجه رقمي. تستقبل هذه الدالة وسائط متعددة تتحكم بشكل كامل في سلوك الخوارزمية، ولعل أهمها وسيط معالجة القيم المكررة ties.method الذي يقبل خيارات مثل "average" و "first" و "min" و "max" و "random"، مع اعتماد القيمة "average" كخيار افتراضي متوافق مع الأعراف الإحصائية القياسية.
عند دمج دالة rank() مع دالة length() — التي تحسب العدد الإجمالي للملاحظات في المتجه الرقمي — يصبح بإمكان المحلل صياغة معادلة الرتبة المئينية بدقة متناهية وبصورة فورية. يتيح هذا التمازج بين بيئة R الأساسية وقدرات التعديل والتخصيص في حزمة dplyr (مثل استخدام دالة mutate()) بناء أعمدة جديدة تمثل الموقع المئيني النسبي لكل سطر في جدول البيانات.
فيما يلي مقارنة موجزة بين دوال الترتيب المتوفرة في R:
rank(x): تعيد الرتب الموضعية للأرقام مع التعامل الافتراضي الحسابي للتعادل.length(x): تحسب عدد العناصر غير المقيدة في المتجه الإحصائي.dplyr::percent_rank(x): دالة مدمجة متخصصة تعيد الرتب المئينية بعد تطبيعها على المدى [0, 1].dplyr::row_number(x): تعطي رتباً فريدة متزايدة دون معالجة متساوية للقيم المتطابقة.
4. بناء مجموعة البيانات النموذجية (Sample Dataset)
4.1 هيكلة إطار البيانات (Data Frame) لأغراض الشرح
لضمان تقديم شرح عملي متكامل وتطبيقي يمكن للباحثين والمحللين تتبعه خطوة بخطوة، سنقوم بإنشاء إطار بيانات نموذجي متوازن يحاكي بيانات أداء تجريبية تحتوي على مجموعتين تصنيفيتين مختلفتين وقيم رقمية متنوعة تشمل قيماً فردية وأخرى مكررة لبيان كيفية تعامل الخوارزميات معها.
يتم بناء إطار البيانات هذا باستخدام الدالة المعيارية data.frame()، حيث نقوم بتوليد متغير نوعي تصنيفي باسم team يمثل الفرق أو المجموعات التجريبية، ومتغير كمي مستمر باسم points يمثل النقاط أو الدرجات الخام المحققة. نستخدم الدالة rep() لتكرار أسماء المجموعات بالتساوي:
df <- data.frame(team = rep(c('A', 'B'), each = 7), points = c(2, 5, 5, 7, 9, 13, 15, 11, 14, 17, 17, 24, 32, 39))
تم تصميم هذا الإطار الحسابي بعناية منهجية؛ حيث يتكون من 14 ملاحظة موزعة بالتساوي (7 ملاحظات للمجموعة A و 7 ملاحظات للمجموعة B). وتتضمن درجات المجموعة A تكراراً للدرجة (5)، بينما تتضمن درجات المجموعة B تكراراً للدرجة (17)، مما يوفر بيئة اختبارية مثالية لمراقبة أداء معادلات الرتبة المئينية في الحالتين الكلية والمجزأة.
4.2 فحص الخصائص الوصفية للبيانات المدخلة
قبل الشروع في أي معالجة إحصائية أو حسابية، تقتضي الممارسة المنهجية الرصينة إجراء فحص وصفي واستكشافي أولي للبيانات للتأكد من بنيتها وسلامة ترميز المتغيرات. يمكن معاينة الصفوف الأولى من إطار البيانات باستخدام دالة head(df)، وفحص الهيكل الداخلي للمتغيرات عبر دالة str(df) التي تؤكد أن المتغير team يُمثل متغيراً حرفياً/فئوياً، بينما يُمثل المتغير points متغيراً عددياً حقيقياً.
وعند تطبيق دالة الملخص الإحصائي summary(df)، تتضح لنا المعالم الأساسية لتوزيع النقاط:
- الحد الأدنى للنقاط (Minimum): 2.00
- الربيع الأول (1st Quartile): 6.00
- الوسيط الإحصائي (Median): 13.50
- المتوسط الحسابي (Mean): 15.00
- الربيع الثالث (3rd Quartile): 17.00
- الحد الأقصى للنقاط (Maximum): 39.00
يوضح هذا الملخص أن هناك تبايناً واضحاً في انتشار الدرجات، مع وجود قيم دنيا صغيرة (مثل 2) وقيم عليا مرتفعة نسبياً (مثل 39)، مما يجعل هذا التوزيع مرشحاً مثالياً لتحليل الرتب المئينية وتوضيح التباين في الموقع النسبي للدرجات.
4.3 السياق النفسي والإحصائي للبيانات التجريبية
يمكن إسقاط هذا النموذج الإحصائي التجريبي على تطبيقات القياس النفسي والترخيص المهني والتقييم المعرفي. فلنفترض أن المتغير points يعبر عن درجات الأداء في اختبار الذاكرة العاملة أو مقياس لسرعة المعالجة المعرفية، بينما يمثل المتغير team مجموعتين تخضعان لظروف تجريبية مختلفة، كأن تكون المجموعة A تمثل مجموعة الضبط (Control Group) والمجموعة B تمثل المجموعة التجريبية (Experimental Group) التي تلقت برنامجاً تدريبياً معرفياً مكثفاً.
في هذا السياق، يصبح الهدف الإحصائي ذو شقين رئيسيين: الشق الأول هو معرفة الرتبة المئينية العامة لكل مفحوص بالنسبة لإجمالي العينة المرجعية الشاملة (جميع المفحوصين الـ 14 بغض النظر عن مجموعاتهم). والشق الثاني هو تحديد الموقع النسبي الدقيق لكل مفحوص مقارنة بأقرانه داخل مجموعته المحددة فقط (مقارنة أفراد المجموعة A ببعضهم البعض، وأفراد المجموعة B ببعضهم البعض).
تتيح هذه المقارنة المزدوجة فهم الأثر المزدوج للسياق الجماعي؛ فالدرجة الخام نفسها قد تمنح صاحبها موقعاً مئينياً متميزاً جداً داخل بيئة ضعيفة أو متوسطة، بينما قد تنخفض رتبته المئينية لنفس الدرجة إذا وُضع ضمن مجموعة ذات كفاءة مرتفعة ومعدلات تحصيل متقدمة.
5. المثال الأول: حساب الرتبة المئينية لكامل مجموعة البيانات (Entire Dataset)
5.1 المنطق الإجرائي لحساب الرتبة على المستوى الكلي
يقوم المنطق الإجرائي لحساب الرتبة المئينية لكامل مجموعة البيانات (Overall Percentile Rank) على التعامل مع العينة كوحدة إحصائية متكاملة ومصمتة دون إجراء أي تقسيم أو تجميع فئوي. يهدف هذا التحليل إلى الإجابة عن السؤال التالي: ما هي النسبة المئوية لجميع المشاهدات في العينة الكلية التي حققت نتيجة مساوية أو أقل من نتيجة هذه الملاحظة المحددة؟
لتحقيق ذلك في بيئة لغة R باستخدام حزمة dplyr، نستخدم دالة mutate() المسؤولة عن إضافة أعمدة جديدة إلى إطار البيانات أو تعديل الأعمدة القائمة، دون التأثير على بنية الصفوف الأصلية. ندمج داخل هذه الدالة كلاً من دالة rank(points) ودالة length(points) وفق المعادلة الرياضية القياسية:
الرتبة المئينية الكلية = rank(points) / length(points)
في هذه الصيغة البرمجية، تقوم دالة rank() بحساب الترتيب الموضعي لكل درجة في كامل العمود، في حين تعيد دالة length() القيمة الثابتة (14) التي تمثل العدد الإجمالي لصفوف إطار البيانات. وتنتج عن عملية القسمة متجهة رقمية تتضمن الرتب المئينية الكسرية لكل صف في الجدول.
5.2 تنفيذ الكود البرمجي خطوة بخطوة في R
لتطبيق هذه المعالجة، نقوم بتنفيذ الشفرة البرمجية التالية في بيئة R:
df <- df %>% mutate(percent_rank = rank(points) / length(points))
عند استعراض إطار البيانات المحدث df، نحصل على جدول النتائج الإحصائية التالي:
- الصف 1: المجموعة A | النقاط: 2 | الرتبة المئينية: 0.07142857 (أو 7.14%)
- الصف 2: المجموعة A | النقاط: 5 | الرتبة المئينية: 0.17857143 (أو 17.86%)
- الصف 3: المجموعة A | النقاط: 5 | الرتبة المئينية: 0.17857143 (أو 17.86%)
- الصف 4: المجموعة A | النقاط: 7 | الرتبة المئينية: 0.28571429 (أو 28.57%)
- الصف 5: المجموعة A | النقاط: 9 | الرتبة المئينية: 0.35714286 (أو 35.71%)
- الصف 6: المجموعة A | النقاط: 13 | الرتبة المئينية: 0.50000000 (أو 50.00%)
- الصف 7: المجموعة A | النقاط: 15 | الرتبة المئينية: 0.64285714 (أو 64.29%)
- الصف 8: المجموعة B | النقاط: 11 | الرتبة المئينية: 0.42857143 (أو 42.86%)
- الصف 9: المجموعة B | النقاط: 14 | الرتبة المئينية: 0.57142857 (أو 57.14%)
- الصف 10: المجموعة B | النقاط: 17 | الرتبة المئينية: 0.75000000 (أو 75.00%)
- الصف 11: المجموعة B | النقاط: 17 | الرتبة المئينية: 0.75000000 (أو 75.00%)
- الصف 12: المجموعة B | النقاط: 24 | الرتبة المئينية: 0.85714286 (أو 85.71%)
- الصف 13: المجموعة B | النقاط: 32 | الرتبة المئينية: 0.92857143 (أو 92.86%)
- الصف 14: المجموعة B | النقاط: 39 | الرتبة المئينية: 1.00000000 (أو 100.00%)
5.3 التفسير الإحصائي لمخرجات المثال الأول
يكشف الفحص الدقيق للمخرجات عن خصائص إحصائية هامة ينبغي للمحلل استيعابها:
أولاً، حصلت الدرجة الأدنى في العينة (وهي الدرجة 2 في الصف الأول) على رتبة مئينية قدرها 1 / 14 = 0.0714 أي ما يعادل 7.14%. يفسر ذلك بأن هذه المشاهدة تمثل أول خطوة في التوزيع التراكمي وتشكل جزءاً واحداً من أصل 14 جزءاً من العينة.
ثانياً، بالنظر إلى الدرجة (5) التي ظهرت مرتين في الصفين 2 و 3، نلاحظ أن دالة rank() قد أسندت الرتبتين المتتاليتين 2 و 3 لهاتين المشاهدتين، وبما أن الخيار الافتراضي هو حساب المتوسط الحسابي، فقد تم حساب الرتبة على النحو التالي: (2 + 3) / 2 = 2.5. وعند قسمة هذه الرتبة المتوسطة على حجم العينة الكلي 14، نحصل على الرتبة المئينية الدقيقة: 2.5 / 14 = 0.1785714 (17.86%). وهذا يضمن حصول القيم المتساوية تماماً على نفس التقدير المئيني المتكافئ.
ثالثاً، حققت الدرجة القصوى في العينة (وهي الدرجة 39 في الصف الأخير) الرتبة المئينية الكاملة 14 / 14 = 1.000 أي 100%. ويعكس هذا التقدير حقيقة أن 100% من بيانات العينة تقع عند هذه القيمة أو دونها، مما يؤكد أن دالة rank/length تعبر بدقة عن دالة التوزيع التراكمي التجريبية المعيارية.
6. المثال الثاني: حساب الرتبة المئينية حسب المجموعات (Percentile Rank by Group)
6.1 الأساس النظري للتحليل الطبقي والمقارنة الفئوية
في كثير من التطبيقات العملية في العلوم السلوكية والإدارية والطبية، تصبح المقارنة الشاملة غير عادلة أو مضللة إحصائياً عند وجود فروق جوهرية بين المجموعات الفرعية ناتجة عن متغيرات ديموغرافية أو تدريبية أو تصنيفية (مثل العمر، أو الجنس، أو المستوى التعليمي، أو التدخل العلاجي). هنا يبرز دور التحليل الطبقي (Stratified Analysis) لتحديد الموقع المئيني النسبي لكل فرد داخل مجموعته المعيارية المرجعية الخاصة به حصراً (Intra-group Percentile Rank).
إذا قمنا بتقييم مفحوص في المجموعة A حصل على 15 نقطة وفق المعيار الكلي، فإن رتبته المئينية تبلغ حوالي 64.29% نظراً لوجود درجات مرتفعة جداً في المجموعة B رفعت سقف التوزيع. ولكن إذا أردنا معرفة مدى تفوق هذا المفحوص مقارنة بزملائه في المجموعة A فقط، فإن المقارنة الفئوية تصبح هي الأداة العلمية الصحيحة والمطلوبة.
تساعد هذه المنهجية الباحثين في بناء الجداول المعيارية المقننة لمختلف الفئات، مما يضمن تقييم كل فرد وفق معايير المجموعة التي ينتمي إليها ديموغرافياً أو إكلينيكياً، وهو حجر الزاوية في بناء اختبارات ومقاييس القياس النفسي الحديثة.
6.2 استخدام دالة group_by() في حزمة dplyr
توفر حزمة dplyr حلاً برمجياً متقدماً وأنيقاً لتطبيق العمليات الحسابية على مستوى المجموعات الفرعية عبر دالة group_by(). تقوم هذه الدالة بتغيير البنية المنطقية لإطار البيانات بشكل غير مرئي، بحيث تُصنف الصفوف داخلياً في بيئة الذاكرة إلى مجموعات مستقلة بناءً على قيم المتغير التصنيفي المحدد.
عند تطبيق الدوال الإحصائية اللاحقة مثل mutate() بعد دالة group_by(team)، يتم تنفيذ العمليات الحسابية بشكل معزول تماماً لكل مجموعة على حدة. وبناءً على ذلك، فإن دالة length(points) لن تعيد الحجم الكلي للعينة (14)، بل ستعيد حجم المجموعة الفرعية النشطة فقط (7 لكل من المجموعة A والمجموعة B). كما أن دالة rank(points) ستبدأ الترقيم التصاعدي من الرتبة 1 داخل كل مجموعة بصورة مستقلة.
بعد الانتهاء من الحسابات المجمعة، يُعد من أفضل الممارسات البرمجية دائماً إنهاء السلسلة بدالة ungroup() لإلغاء التجميع الداخلي للبيانات، مما يمنع حدوث أخطاء غير مقصودة في التحليلات اللاحقة التي قد تفترض أن البيانات غير مصنفة.
6.3 كتابة وتنفيذ الكود البرمجي للمثال الثاني
لتنفيذ حساب الرتبة المئينية المصنفة حسب المجموعات، نكتب الشفرة البرمجية التالية:
df_grouped <- df %>% group_by(team) %>% mutate(percent_rank_by_team = rank(points) / length(points)) %>% ungroup()
ينتج عن تنفيذ هذا الكود إطار البيانات التفصيلي التالي الذي يوضح الرتب المئينية داخل كل مجموعة:
- المجموعة A:
- النقاط: 2 | الرتبة داخل المجموعة: 0.1428571 (14.29%) | [الرتبة الكلية السابقة: 7.14%]
- النقاط: 5 | الرتبة داخل المجموعة: 0.3571429 (35.71%) | [الرتبة الكلية السابقة: 17.86%]
- النقاط: 5 | الرتبة داخل المجموعة: 0.3571429 (35.71%) | [الرتبة الكلية السابقة: 17.86%]
- النقاط: 7 | الرتبة داخل المجموعة: 0.5714286 (57.14%) | [الرتبة الكلية السابقة: 28.57%]
- النقاط: 9 | الرتبة داخل المجموعة: 0.7142857 (71.43%) | [الرتبة الكلية السابقة: 35.71%]
- النقاط: 13 | الرتبة داخل المجموعة: 0.8571429 (85.71%) | [الرتبة الكلية السابقة: 50.00%]
- النقاط: 15 | الرتبة داخل المجموعة: 1.0000000 (100.00%) | [الرتبة الكلية السابقة: 64.29%]
- المجموعة B:
- النقاط: 11 | الرتبة داخل المجموعة: 0.1428571 (14.29%) | [الرتبة الكلية السابقة: 42.86%]
- النقاط: 14 | الرتبة داخل المجموعة: 0.2857143 (28.57%) | [الرتبة الكلية السابقة: 57.14%]
- النقاط: 17 | الرتبة داخل المجموعة: 0.5000000 (50.00%) | [الرتبة الكلية السابقة: 75.00%]
- النقاط: 17 | الرتبة داخل المجموعة: 0.5000000 (50.00%) | [الرتبة الكلية السابقة: 75.00%]
- النقاط: 24 | الرتبة داخل المجموعة: 0.7142857 (71.43%) | [الرتبة الكلية السابقة: 85.71%]
- النقاط: 32 | الرتبة داخل المجموعة: 0.8571429 (85.71%) | [الرتبة الكلية السابقة: 92.86%]
- النقاط: 39 | الرتبة داخل المجموعة: 1.0000000 (100.00%) | [الرتبة الكلية السابقة: 100.00%]
6.4 التحليل المقارن لنتائج المثالين الأول والثاني
يوفر التحليل المقارن بين مخرجات المثالين الأول والثاني بصيرة إحصائية بالغة العمق حول تأثير البيئة المرجعية على تفسير الدرجات. ولتوضيح ذلك، نتأمل حالة الدرجة الخام (15) في المجموعة A:
في التحليل الكلي (المثال الأول)، حصل صاحب الدرجة 15 على رتبة مئينية تعادل 64.29%، مما يعني أن ثلث العينة الكلية تقريباً حقق نتائج أعلى منه. ولكن عند تقييم نفس الدرجة داخل سياق مجموعته الفرعية (المثال الثاني)، قفزت رتبته المئينية إلى 100.00% (1.000)، ليصبح هو المتفوق الأول والمطلق داخل مجموعته A، لأن أعلى درجة في تلك المجموعة كانت 15.
وعلى النقيض من ذلك، فإن الدرجة 11 في المجموعة B كانت تحتل رتبة مئينية كلية قدرها 42.86% متفوقة على معظم أعضاء المجموعة A؛ ولكن عند حصر المقارنة داخل المجموعة B، تراجعت رتبتها المئينية إلى 14.29% لتصبح هي الدرجة الصغرى والأدنى على الإطلاق في تلك المجموعة المتميزة.
يبرهن هذا التباين الإحصائي على أن التفسير السليم للرتبة المئينية مشروط بفهم العينة المرجعية التي حُسبت على أساسها. فالرتبة المئينية ليست صفة مطلقة ملازمة للدرجة الخام، بل هي مقياس علاقاتي نسبي يتغير جذرياً بتغير إطار المقارنة الإحصائي المعتمد.
7. التعامل المتقدم مع القيم المتكررة (Ties) في لغة R
7.1 خيارات وسيط ties.method في دالة rank()
تمنح بيئة لغة R للمحلل الإحصائي تحكماً فائقاً ودقيقاً في كيفية إدارة القيم المكررة من خلال الوسيط المتخصص ties.method ضمن دالة rank(). يحدد هذا الوسيط الخوارزمية الرياضية التي ستتبعها الدالة عند مواجهة رقمين متطابقين أو أكثر في نفس المتجه:
ties.method = "average": يقوم بحساب المتوسط الحسابي للرتب التي كانت ستشغلها القيم المتطابقة لو اختلفت قليلاً، وهو الخيار الافتراضي الأكثر موثوقية في الدراسات الأكاديمية والقياسات النفسية.ties.method = "first": يقوم بكسر التعادل عن طريق منح الرتبة الأدنى للقيمة التي تظهر أولاً في ترتيب مصفوفة البيانات الأصلية، مع تصاعد الرتب للقيم اللاحقة، مما يولد رتباً صحيحة متتالية وفريدة دون كسور.ties.method = "min": يسند أدنى رتبة متاحة لكافة القيم المكررة، وهو ما يتوافق مع المعايير الرياضية للتوزيع التراكمي السفلي الصارم.ties.method = "max": يسند أعلى رتبة متاحة لجميع القيم المتطابقة، وهو المعيار المتبع عند الرغبة في إظهار النسبة التراكمية القصوى التي تشمل كامل تكرار الفئة.ties.method = "random": يعالج التعادل بتوزيع الرتب المتنازع عليها عشوائياً بين القيم المكررة، ويستخدم في المحاكاة الإحصائية لتجنب التحيز الرتبي الناتج عن أسبقية الإدخال.
7.2 مقارنة تطبيقية بين خيارات معالجة التعادل المختلفة
لتوضيح التباين الرقمي الفعلي الناتج عن هذه الخيارات، لنطبقها على متجه الدرجات في المجموعة A: c(2, 5, 5, 7, 9, 13, 15) حيث تتكرر الدرجة (5) مرتين في الموضعين الثاني والثالث:
x <- c(2, 5, 5, 7, 9, 13, 15)
تكون مخرجات الرتب والقيم المئينية المحسوبة على النحو التالي:
- باستخدام
ties.method = "average":- الرتب: 1.0, 2.5, 2.5, 4.0, 5.0, 6.0, 7.0
- الرتب المئينية (مقسومة على 7): 0.143, 0.357, 0.357, 0.571, 0.714, 0.857, 1.000
- باستخدام
ties.method = "min":- الرتب: 1.0, 2.0, 2.0, 4.0, 5.0, 6.0, 7.0
- الرتب المئينية: 0.143, 0.286, 0.286, 0.571, 0.714, 0.857, 1.000
- باستخدام
ties.method = "max":- الرتب: 1.0, 3.0, 3.0, 4.0, 5.0, 6.0, 7.0
- الرتب المئينية: 0.143, 0.429, 0.429, 0.571, 0.714, 0.857, 1.000
- باستخدام
ties.method = "first":- الرتب: 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0
- الرتب المئينية: 0.143, 0.286, 0.429, 0.571, 0.714, 0.857, 1.000
يظهر هذا الجدول المقارن بوضوح أن الرتبة المئينية للدرجة المكررة (5) قد تغيرت من 28.6% مع الخيار min إلى 42.9% مع الخيار max، بينما استقرت عند نقطة التوازن العادلة 35.7% مع الخيار الافتراضي average.
7.3 معايير اختيار الطريقة المناسبة في البحوث الميدانية
تضع جمعية علم النفس الأمريكية (American Psychological Association – APA) والجمعية الأمريكية للأبحاث التربوية (AERA) إرشادات صارمة لتحديد المعايير المنهجية للتعامل مع الرتب المئينية في الاختبارات المقننة. تتلخص هذه المعايير في ضرورة الحفاظ على العدالة التوزيعية للمفحوصين وعدم إحداث فجوات غير مبررة في التقديرات المعيارية.
يُوصى دائماً باعتماد خيار average في التقييمات النفسية والتربوية والسريرية، نظراً لأنه يعكس القيمة المتوقعة إحصائياً للرتبة دون إجحاف بحق المفحوص (كما في حالة min) ودون تضخيم مفرط لأدائه (كما في حالة max). كما أن خيار first يُعد مرفوضاً من الناحية الأخلاقية والمهنية في القياس النفسي، لأنه يجعل الرتبة المئينية للمفحوص معتمدة على الترتيب الأبجدي لاسمه أو وقت إدخال ورقته الاختبارية في قاعدة البيانات.
أما في مجالات النمذجة الرياضية والهندسة الإحصائية حيث تتطلب الخوارزميات اللاحقة وجود رتب صحيحة متمايزة وغير مكررة، فإن خياري first أو random قد يكونان مقبولين تقنياً لتلبية المتطلبات الحوسبية الخاصة بالخوارزميات الفرعية.
8. استخدام دالة percent_rank() المدمجة في حزمة dplyr
8.1 آلية عمل دالة dplyr::percent_rank() وخوارزميتها
تحتوي حزمة dplyr على دالة مدمجة متخصصة ومصممة خصيصاً لحساب الرتب المئينية تحمل الاسم percent_rank(). ومع ذلك، هناك اختلاف جوهري في الخوارزمية الرياضية التي تعتمدها هذه الدالة مقارنة بالصيغة التراكمية اليدوية rank()/length() التي شرحناها سابقاً.
تعتمد دالة percent_rank(x) على الصيغة الرياضية التالية:
percent_rank = (min_rank(x) – 1) / (n – 1)
حيث تُمثل min_rank(x) الرتبة المحسوبة باستخدام أسلوب الحد الأدنى للتعادل، ويمثل الرمز (n) عدد الملاحظات الكلي في المتجه. تهدف هذه الخوارزمية إلى إجراء عملية “تطبيع خطي” (Linear Rescaling) للرتب المئينية، بحيث تضمن دائماً أن تكون الرتبة المئينية لأدنى قيمة في البيانات مساوية للصفر تماماً (0.000)، في حين تكون الرتبة المئينية لأعلى قيمة في البيانات مساوية للواحد الصحيح تماماً (1.000 أو 100%).
8.2 مقارنة دالة percent_rank() مع الطريقة اليدوية rank()/length()
لتوضيح الفروق العددية الدقيقة بين الطريقتين، نقوم بتطبيق الشفرة البرمجية التالية التي تحسب العمودين معاً جنباً إلى جنب على إطار بيانات المجموعة A:
df_compare <- df[1:7, ] %>% mutate(manual_pr = rank(points) / length(points), dplyr_pr = percent_rank(points))
يعرض الجدول التالي المقارنة الرقمية التفصيلية بين الطريقتين لملاحظات المجموعة A:
- الدرجة 2:
- الصيغة اليدوية
rank/length: 0.1428571 (14.29%) - دالة
percent_rank(): 0.0000000 (0.00%)
- الصيغة اليدوية
- الدرجة 5 (التكرار الأول):
- الصيغة اليدوية
rank/length: 0.3571429 (35.71%) - دالة
percent_rank(): 0.1666667 (16.67%)
- الصيغة اليدوية
- الدرجة 5 (التكرار الثاني):
- الصيغة اليدوية
rank/length: 0.3571429 (35.71%) - دالة
percent_rank(): 0.1666667 (16.67%)
- الصيغة اليدوية
- الدرجة 7:
- الصيغة اليدوية
rank/length: 0.5714286 (57.14%) - دالة
percent_rank(): 0.5000000 (50.00%)
- الصيغة اليدوية
- الدرجة 9:
- الصيغة اليدوية
rank/length: 0.7142857 (71.43%) - دالة
percent_rank(): 0.6666667 (66.67%)
- الصيغة اليدوية
- الدرجة 13:
- الصيغة اليدوية
rank/length: 0.8571429 (85.71%) - دالة
percent_rank(): 0.8333333 (83.33%)
- الصيغة اليدوية
- الدرجة 15:
- الصيغة اليدوية
rank/length: 1.0000000 (100.00%) - دالة
percent_rank(): 1.0000000 (100.00%)
- الصيغة اليدوية
8.3 تحديد السيناريو الأنسب لاستخدام كل دالة
يعد التمييز بين هاتين الصيغتين من أهم المهارات التحليلية التي يجب أن يمتلكها الممارس الإحصائي في R:
استخدم الصيغة اليدوية rank()/length(): عندما يكون الهدف هو حساب الرتبة المئينية التراكمية الحقيقية المعتمدة في القياس النفسي والتربوي، والتي تعبر بدقة عن نسبة المفحوصين الذين يقعون عند تلك النقطة أو دونها. في هذا السياق، لا يجوز منح الطالب الحاصل على أدنى درجة رتبة مئينية صفرية (0%)، لأنه يمثل جزءاً من حجم العينة وأداؤه يساوي نفسه، وبالتالي فإن تمثيله بنسبة 1/N هو التعبير السليم والأكثر اتساقاً مع دالة ECDF.
استخدم دالة dplyr::percent_rank(): في مجالات تنقيب البيانات (Data Mining)، وهندسة الميزات في التعلم الآلي (Feature Engineering for Machine Learning)، والتحليلات البارامترية التي تتطلب تطبيعاً رقمياً محصوراً بدقة وصرامة بين الصفر المطلق والواحد الصحيح [0, 1]. في هذه التطبيقات الحوسبية، يكون الهدف هو القياس النسبي للمسافة النسبية بين أدنى وأعلى نقطة بدلاً من التوزيع التراكمي الفعلي للملاحظات.
9. التمثيل البصري للرتب المئينية باستخدام حزمة ggplot2
9.1 رسم منحنيات التوزيع التراكمي التجريبية (ECDF)
يمثل التصور البياني أداة لا غنى عنها لتعزيز الفهم الإحصائي للرتب المئينية وكيفية توزعها عبر درجات العينة. وتُعد حزمة ggplot2 المعيار الأكاديمي والمهني الرائد لإنشاء الرسوم البيانية عالية الجودة في بيئة R.
لرسم دالة التوزيع التراكمي التجريبية (ECDF) التي تمثل التجسيد الهندسي المباشر للرتب المئينية، نستخدم الدالة المتخصصة stat_ecdf(). يتيح الكود التالي رسم المنحنى التراكمي لكامل العينة مع تمييز المجموعتين A و B بألوان مختلفة:
library(ggplot2)
ggplot(df, aes(x = points, color = team)) +
stat_ecdf(geom = "step", size = 1.2) +
theme_minimal() +
labs(title = "منحنى التوزيع التراكمي التجريبي (ECDF) حسب المجموعات",
x = "النقاط والدرجات الخام",
y = "الرتبة المئينية التراكمية (Fn(x))") +
scale_y_continuous(labels = scales::percent)
يولد هذا الكود منحنى درجياً تصاعدياً يوضح كيفية تراكم الرتب المئينية من 0% إلى 100%، مظهراً الفجوة البصرية الواضحة بين المجموعة A (التي تتراكم رتبها سريعاً عند الدرجات المنخفضة) والمجموعة B (التي يمتد تراكمها نحو الدرجات العليا المرتفعة).
9.2 رسم مخططات التشتت والأعمدة للرتب المئينية
تسمح مخططات التشتت (Scatter Plots) والأعمدة بتتبع العلاقة بين الدرجات الخام والرتب المئينية المحسوبة لكل مفردة من مفردات العينة، وإضافة الخطوط المرجعية المعيارية التي تحدد الربيعيات والمئينات الحرجة مثل المئين 25 (الربيع الأدنى)، والمئين 50 (الوسيط)، والمئين 75 (الربيع الأعلى).
يمكن بناء مخطط تشتت متقدم يربط بين النقاط والرتبة المئينية مع إضافة تقسيم فئوي (Faceting) باستخدام الشفرة التالية:
ggplot(df, aes(x = points, y = rank(points)/length(points), color = team)) +
geom_point(size = 3.5, alpha = 0.8) +
geom_line(aes(group = team), linetype = "dashed") +
geom_hline(yintercept = c(0.25, 0.50, 0.75), linetype = "dotted", color = "gray40") +
facet_wrap(~team) +
theme_light() +
labs(title = "موقع الدرجات الخام بالنسبة للرتب المئينية الحرجة",
x = "الدرجة الخام",
y = "الرتبة المئينية") +
scale_y_continuous(labels = scales::percent)
يوفر هذا المخطط رؤية بصرية فورية تبرز كيفية تموضع أفراد كل مجموعة قياساً على المستويات المعيارية الربيعية، مما يسهل رصد حالات التفوق أو القصور السلوكي والمعرفي بشكل بياني مقنع.
9.3 التفسير النفسي والتحليلي للرسوم البيانية المعيارية
في سياق كتابة التقارير النفسية والإكلينيكية، تلعب الرسوم البيانية المعيارية دوراً محورياً في تيسير نقل المعلومات التشخيصية المعقدة إلى المرضى أو أولياء الأمور أو الموجهين التربويين. فعندما يشاهد متخذ القرار رسماً بيانياً يوضح أن رتبة الطالب المئينية تقع دون الخط المرجعي للمئين الخامس والعشرين (25th Percentile)، يتشكل لديه إدراك بصري فوري بوجود صعوبة تعلم أو تأخر نمائي يستدعي وضع خطة دعم تربوي فردية.
كما تكشف الرسوم البيانية للرتب المئينية عن طبيعة التباعد أو التقارب بين أفراد المجموعة الواحدة. فالمناطق ذات الانحدار الحاد في منحنى ECDF تشير إلى تكدس شديد للدرجات وتقارب في الأداء (تكرارات عالية)، في حين تدل المساحات الأفقية الممتدة على وجود فجوات في الأداء وتباين واسع بين أفراد العينة، وهو ما يثري التقرير التشخيصي برؤى نوعية تتجاوز مجرد سرد الأرقام الصامتة.
10. التعامل مع القيم المفقودة (NA) والاستثناءات البرمجية
10.1 أثر القيم المفقودة على دالتي rank() و length()
تُعد مشكلة البيانات المفقودة (Missing Values والتي يُرمز لها في R بالرمز NA) من أكثر التحديات الشائعة في الأبحاث الميدانية الواقعية. وإذا لم يتم التعامل مع هذه القيم بحذر منهجي وبرمجي دقيق، فإنها قد تؤدي إلى تشويه كامل لحسابات الرتب المئينية.
تمتلك دالة rank() وسيطاً مدمجاً يُدعى na.last يتحكم في مصير القيم المفقودة:
na.last = TRUE: يضع القيم المفقودة في نهاية الترتيب ويسند إليها أعلى رتب.na.last = FALSE: يضع القيم المفقودة في بداية الترتيب ويسند إليها أدنى رتب.na.last = "keep": يحافظ على القيمة المفقودة كـNAفي متجه الرتب المخرج دون إسناد أي رتبة عددية لها، وهو الخيار الأكثر سلامة من الناحية الإحصائية.
تكمن الكارثة الحسابية الكبرى عند استخدام دالة length(x)؛ حيث تقوم هذه الدالة بعدّ جميع خانات المتجه بما في ذلك خانات NA. فإذا كان لدينا متجه يتكون من 10 عناصر من بينها 3 قيم مفقودة، فإن length() ستعيد 10، في حين أن الرتب الفعلية المحسوبة للبيانات الصالحة ستكون من 1 إلى 7 فقط، مما يجعل المقام متضخماً بشكل مصطنع ويؤدي إلى خفض جميع الرتب المئينية دون وجه حق. والحل الصحيح دائماً هو استبدال length(x) بالتعبير البرمجي الدقيق: sum(!is.na(x)) الذي يحسب عدد القيم الصالحة فعلياً فقط.
10.2 استراتيجيات تنظيف ومعالجة البيانات قبل الحساب
تقتضي الممارسة الإحصائية المتقدمة تنظيف مصفوفة البيانات قبل البدء في حساب الرتب المئينية. توفر حزمة tidyr أدوات فعالة لاستبعاد الصفوف التي تحتوي على قيم مفقودة في المتغيرات الحرجة باستخدام الدالة drop_na():
df_cleaned <- df %>% tidyr::drop_na(points)
أما في الدراسات الطبية والسيكومترية التي لا ترغب في فقدان حجم العينة عبر الاستبعاد الشامل (Listwise Deletion)، فيمكن اللجوء إلى خوارزميات التعويض الإحصائي المتقدم (Imputation) مثل التعويض بالوسيط أو استخدام خوارزميات التعويض المتعدد باستخدام حزمة mice في R، ومن ثم حساب الرتب المئينية على المصفوفات المكتملة.
كما يمكن للمحلل بناء دالة مخصصة متينة (Robust Custom Function) تتولى التحقق التلقائي من القيم المفقودة وحساب الرتبة المئينية بدقة:
safe_percent_rank <- function(x) {
valid_ranks <- rank(x, na.last = "keep", ties.method = "average")
valid_n <- sum(!is.na(x))
return(valid_ranks / valid_n)
}
10.3 التحقق البرمجي من سلامة البيانات واتساق النتائج
يجب أن تتضمن خطوط المعالجة البرمجية في R اختبارات توكيد برمجية (Unit Assertions) للتأكد من أن مخرجات الرتب المئينية تقع دائماً ضمن النطاق النظري المقبول [0, 1] أو [0%, 100%]، والتأكد من عدم وجود قيم سالبة أو قيم تتجاوز الواحد الصحيح نتيجة أخطاء القسمة.
يمكن استخدام حزمة testthat أو الدوال الشرطية مثل stopifnot() في R لتأكيد اتساق النتائج:
stopifnot(all(df$percent_rank >= 0 &a\mp; df$percent_rank <= 1, na.rm = TRUE))
كما ينبغي معالجة الحالات الحدية الخاصة برمجياً، مثل الحالات التي يكون فيها حجم العينة مساوياً لواحد فقط (N = 1)؛ حيث ستعيد دالة rank()/length() الرتبة 1.0، في حين ستعيد دالة percent_rank() القيمة غير المعرفة NaN نتيجة القسمة على صفر (1 - 1)/(1 - 1)، مما يبرز أهمية بناء دوال برمجية واعية بهذه الاستثناءات الحوسبية.
11. تطبيقات متقدمة للرتب المئينية في التحليل السيكومتري
11.1 تطوير الجداول المعيارية (Normative Tables) للاختبارات النفسية
يُمثل تطوير جداول المعايير الوطنية والمحلية الغاية الأسمى للتحليل السيكومتري في علم النفس القياسي والتربية. تعتمد هذه الجداول على إجراء مسح واسع لعينة تقنين تمثيلية، وتطبيق الاختبارات النفسية عليها، ثم تحويل كل درجة خام محتملة إلى رتبتها المئينية المقابلة وإلى درجات معيارية مشتقة أخرى.
باستخدام لغة R، يمكن بناء مصفوفة التحويل المعياري بالربط الرياضي بين الرتب المئينية ومقاييس القدرة المعيارية مثل الدرجة الزائية (Z-score) والدرجة التائية (T-score) ومقياس التساعيات (Stanines):
- الدرجة الزائية (Z-score): تُحسب من الرتبة المئينية باستخدام دالة التوزيع الطبيعي المعياري التراكمي العكسي في R:
qnorm(percentile_rank). - الدرجة التائية (T-score): تُشتق خطياً من الدرجة الزائية وفق المعادلة:
T = (Z * 10) + 50. - التساعيات (Stanines): مقياس يتكون من 9 وحدات معيارية يقسم التوزيع الطبيعي بناءً على شرائح محددة من الرتب المئينية (مثلاً: التساعي 5 يشمل الرتب المئينية من 40% إلى 59%).
يسهل هذا التحويل الرباعي في R بناء جداول معيارية متكاملة ترفق مع أدلة الاختبارات النفسية لتوجيه الممارسين الإكلينيكيين في تفسير نتائج الأفراد بدقة بالغة.
11.2 تحليل الفروق بين المجموعات الإكلينيكية والضابطة
تستخدم الرتب المئينية بشكل واسع في المقارنات اللامعلمية بين المجموعات العلاجية ومجموعات التحكم. ويُعد اختبار مان-ويتني (Mann-Whitney U Test) — المتاح في R عبر الدالة wilcox.test() — المكافئ اللامعلمي لاختبار (t-test)، حيث يعتمد في جوهره الرياضي على مقارنة متوسط الرتب للعينتين للتحقق مما إذا كان التوزيع الاحتمالي لإحدى المجموعتين يتفوق مئينياً على الأخرى دلالياً.
علاوة على ذلك، تُستخدم الرتب المئينية في تقييم فاعلية التدخلات العلاجية السلوكية والدوائية من خلال حساب مؤشر التغير ذي الدلالة الإكلينيكية (Reliable Change Index – RCI). فإذا تقدمت الرتبة المئينية لمريض يعاني من الاكتئاب من الرتبة 95% (مستوى إكلينيكي حاد) قبل العلاج إلى الرتبة 40% (مستوى طبيعي نمائي) بعد تلقي العلاج السلوكي المعرفي، فإن هذا التحول المئيني يقدم دليلاً كمياً قاطعاً على تعافي المريض واستجابته للبرنامج العلاجي.
11.3 أتمتة استخراج التقارير النفسية المعيارية باستخدام R Markdown
أتاحت منظومة R Markdown و Quarto للباحثين والمؤسسات السيكومترية إمكانية الأتمتة الكاملة لتوليد التقارير النفسية والتشخيصية الفردية والجماعية. فبدلاً من كتابة التقارير يدوياً وحساب الرتب لكل مفحوص على حدة، يتم بناء نموذج تقرير ديناميكي يربط بين قواعد البيانات وشفرات R التحليلية.
بمجرد إدخال الدرجات الخام للمفحوص الجديد، يقوم النظام البرمجي المؤتمت بما يلي:
- مقارنة الدرجة الخام بقواعد البيانات المعيارية المرجعية المناسبة لفئته العمرية.
- حساب الرتبة المئينية الدقيقة والدرجات المعيارية المشتقة (T-scores).
- توليد فقرات تشخيصية سردية تعتمد على الجمل الشرطية (مثلاً: إذا كانت الرتبة > 90%، يتم إدراج نص يوضح تمتع المفحوص بمستوى موهبة متقدم).
- رسم مخططات بيانية مخصصة للملف النفسي للمفحوص (Psychological Profile).
- تصدير التقرير النهائي التقييمي بتنسيقات متعددة مثل PDF و HTML و Word بكفاءة وسرعة فائقة.
12. أفضل الممارسات والأخطاء الشائعة عند حساب الرتب المئينية في R
12.1 الأخطاء الشائعة في كتابة الكود وتفسير النتائج
يقع العديد من المبتدئين وحتى بعض الممارسين المتقدمين في أخطاء منهجية وبرمجية عند حساب وتفسير الرتب المئينية في R. ومن أبرز هذه العثرات التحليلية:
- الخلط بين الدوال دون وعي بالفروق الرياضية: استخدام دالة
percent_rank()ظناً منها أنها تطابق صيغةrank()/length()، مما يفرز قيماً صفرية للمفردة الأولى ويؤدي لسوء تقدير النسب التراكمية الحقيقية في التقارير التربوية. - نسيان إلغاء التجميع
ungroup(): ترك إطار البيانات في حالة تجميع بعد استخدامgroup_by()، مما يتسبب في استمرار تقسيم البيانات في العمليات الحسابية اللاحقة دون قصد من الباحث، وهو ما يولد نتائج كارثية مشوهة في التحليلات التالية. - افتراض تساوي المسافات بين الرتب المئينية (Non-linearity Trap): التعامل مع الرتب المئينية كمقياس فئوي متساوي الفترات (Interval Scale) وإجراء عمليات الجمع أو حساب المتوسطات الحسابية للرتب المئينية. الحقيقة الإحصائية الصارمة هي أن الرتب المئينية مقياس رتبي؛ فالمسافة بين المئين 50 والمئين 55 في التوزيع الطبيعي تمثل درجات خام قليلة جداً لتكدس البيانات في المنتصف، بينما المسافة بين المئين 90 والمئين 95 تمثل قفزة شاسعة في الدرجات الخام، مما يجعل حساب متوسط الرتب المئينية خطأ رياضياً جسيماً.
- الاعتماد على عينات مرجعية غير ممثلة: حساب الرتب المئينية بالاستناد إلى عينة صغيرة أو منحازة جغرافياً أو ديموغرافياً، ثم تعميم هذه الرتب المئينية كما لو كانت معايير قياسية وطنية مطلقة.
12.2 تحسين الأداء البرمجي مع مجموعات البيانات الضخمة (Big Data)
عند التعامل مع قواعد بيانات ضخمة تحتوي على عشرات أو مئات الملايين من السجلات (كما في تحليلات البيانات الضخمة للمؤسسات الصحية أو منصات التجارة الإلكترونية)، قد تصبح العمليات المعتمدة على الدوال التقليدية بطيئة ومستهلكة للذاكرة. في مثل هذه السيناريوهات فائقة الحجم، تبرز حزمة data.table كبديل عالي الأداء لا يُضاهى في سرعة المعالجة الحسابية.
تستخدم حزمة data.table صيغة نحوية مدمجة تعتمد على التعديل المباشر في الذاكرة (Update by Reference: :=)، مما يقلل من استهلاك الذاكرة العشوائية إلى أدنى حد ويسرع حساب الرتب المئينية بمعدلات تصل إلى عشرات الأضعاف مقارنة بالأساليب التقليدية. كما يُوصى دائماً بتجنب استخدام الحلقات التكرارية for-loops في R لحساب الرتب، والاعتماد المطلق على المتجهات الموجهة (Vectorized Functions) التي كُتبت أصولها البرمجية بلغة C لتحقيق أعلى كفاءة حوسبية ممكنة.
12.3 قائمة التحقق الإحصائية والبرمجية الشاملة
لضمان أعلى درجات الجودة والموثوقية في تحليلاتك الإحصائية، يُوصى باتباع قائمة التحقق المنهجية التالية قبل اعتماد ونشر نتائج حساب الرتب المئينية في لغة R:
- فحص المتغيرات: هل المتغير المستهدف رقمي بالفعل وخالٍ من الأخطاء الطباعية أو الرموز النصية غير المعرفة؟
- معالجة القيم المفقودة: هل تم فحص وجود
NAواختيار المعالجة الصحيحة عبرna.last = "keep"واستخدامsum(!is.na(x))للمقام الحسابي؟ - تحديد خوارزمية التعادل: هل تم تحديد وسيط
ties.methodالمناسب لطبيعة البيانات وأهداف البحث (تفضيلaverageفي القياس النفسي)؟ - اختيار الصيغة الملائمة: هل تم اعتماد
rank()/length()للتوزيع التراكمي الفعلي، أوpercent_rank()للتطبيع الخطي؟ - التجميع الفئوي: هل تم استخدام
group_by()عند الحاجة للمقارنة داخل المجموعات المعيارية، وهل أُغلقت السلسلة بدالةungroup()؟ - التحقق والتوكيد: هل جميع قيم الرتب المئينية المخرجة محصورة بدقة بين 0 و 1 وتتبع الترتيب التصاعدي المنطقي للدرجات الأصلية؟
خاتمة
تمثل الرتبة المئينية (Percentile Rank) أداة إحصائية وتحليلية محورية وجسراً مفاهيمياً يربط بين الأرقام الخام المجردة والمعاني المعيارية النسبية للبيانات. ومن خلال هذا الدليل الشامل والموسع، استعرضنا بالتفصيل الرياضي والبرمجي الأسس النظرية والتطبيقية لحساب الرتبة المئينية في بيئة لغة R عبر مسارين رئيسيين: حساب الرتبة المئينية لكامل مجموعة البيانات، وحساب الرتبة المئينية المقسمة حسب المجموعات بالاعتماد على قدرات حزمة dplyr المتقدمة.
وقد أوضحت المقارنات التحليلية كيف يمكن لاختيار الخوارزمية الرياضية لمعالجة القيم المكررة (Ties) أو اختيار الصيغة المعتمدة بين التراكم الحقيقي rank()/length() والتطبيع الخطي percent_rank() أن ينعكس بشكل مباشر على الأرقام المخرجة وتفسيراتها السريرية والتربوية. كما برهن التحليل المقارن للمجموعات على أن السياق المرجعي هو الحاكم الفعلي لقيمة الدرجة وموقع صاحبها النسبي في مجتمع الدراسة.
ختاماً، فإن إتقان الباحث والمحلل لهذه الأدوات الإحصائية والبرمجية في R، واقترانها بمهارات التمثيل البصري الاحترافي عبر ggplot2 والوعي بمتطلبات التعامل مع البيانات المفقودة والاستثناءات الحوسبية، يشكل ركيزة لا غنى عنها لإنتاج أبحاث علمية رصينة وتقارير تشخيصية موثوقة تلبي أعلى المعايير الأكاديمية والمهنية العالمية.
References
- American Educational Research Association, American Psychological Association, & National Council on Measurement in Education. (2014). Standards for educational and psychological testing. American Educational Research Association. https://www.apa.org/science/programs/testing/standards
- Hyndman, R. J., & Fan, Y. (1996). Sample quantiles in statistical packages. The American Statistician, 50(4), 361–365. https://doi.org/10.1080/00031305.1996.10473566
- R Core Team. (2023). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.r-project.org/
- Wickham, H., François, R., Henry, L., & Müller, K. (2023). dplyr: A grammar of data manipulation (R package version 1.1.4). https://CRAN.R-project.org/package=dplyr
- Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org/
- Dowle, M., & Srinivasan, A. (2023). data.table: Extension of `data.frame` (R package version 1.14.8). https://CRAN.R-project.org/package=data.table