الإحصاء التطبيقيتحليل البياناتلغة R

لغة R: كيفية تغيير عدد الفئات في المدرج التكراري

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

تاريخ النشر

يُعد الاستكشاف البصري للبيانات حجر الزاوية في التحليل الإحصائي الحديث وعلم البيانات؛ إذ لا يمكن لأي باحث أو محلل بيانات الشروع في بناء النماذج التنبؤية أو استنباط الاستدلالات الإحصائية دون فهم متعمق للبنية التوزيعية للمتغيرات قيد الدراسة. وفي هذا السياق، يقف المدرج التكراري (Histogram) كأحد أقدم وأقوى الأدوات الرسومية غير المعلمية (Non-parametric) لتقدير دالة كثافة الاحتمال وتلخيص التوزيعات التكرارية للبيانات المستمرة. وتبرز لغة البرمجة الإحصائية R كبيئة رائدة عالمياً توفر ترسانة برمجية غنية تمكن المحللين من تشريح البيانات وتطويع تمثيلاتها البصرية بأعلى درجات الدقة والتحكم المنهجي.

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

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

1. المقدمة والأسس النظرية للمدرجات التكرارية في لغة R

1.1 تعريف المدرج التكراري ودوره في تمثيل التوزيعات الإحصائية

يُعرَّف المدرج التكراري في علم الإحصاء الرياضي بأنه تمثيل بياني غير معلمي يعتمد على تقطيع المدى الكلي لمتغير مستمر إلى فترات متجاورة غير متداخلة تُعرف بالفئات أو الحاويات (Bins)، ثم حساب عدد المشاهدات التي تقع داخل كل فترة فاصلة. من الناحية الرياضية، يعمل المدرج التكراري كأداة لتقدير دالة كثافة الاحتمال (Probability Density Function – PDF) للمجتمع الإحصائي المسحوبة منه العينة؛ حيث يمثل ارتفاع كل عمود (أو مساحته في حالة التوزيعات النسبية) التكرار النسبي أو الكثافة الاحتمالية لتلك الفترة الزمنية أو القياسية المحددة.

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

من الضروري منهجياً التمييز القاطع بين المدرج التكراري (Histogram) والمخطط الشريطي (Bar Plot)، وهو خطأ شائع يقع فيه العديد من الباحثين. المخطط الشريطي يُستخدم حصرياً للبيانات النوعية أو الفئوية (Categorical/Discrete Data)، حيث تفصل بين الأشرطة مسافات فارغة للدلالة على عدم وجود استمرارية بين الفئات المستقلة، وتكون مواضع الأشرطة قابلة للترتيب العشوائي دون الإخلال بالمعنى الإحصائي. في المقابل، يُخصص المدرج التكراري للمتغيرات الكمية المستمرة (Continuous Quantitative Variables)، وتكون الأعمدة فيه متلاصقة تماماً لتعكس الاستمرارية الرياضية للمحور الأفقي، بحيث يمثل موضع كل عمود نطاقاً عددياً حقيقياً مقيداً بترتيب رياضي صارم.

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

1.2 بنية دالة hist() الأساسية في بيئة R

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

التركيب النحوي العام للدالة يتضمن مجموعة من المعاملات المحورية: hist(x, breaks = “Sturges”, freq = NULL, include.lowest = TRUE, right = TRUE, density = NULL, angle = 45, col = “lightgray”, border = NULL, main = paste(“Histogram of”, xname), xlim = range(breaks), ylim = NULL, xlab = xname, ylab, …). المعامل x يمثل المتجه العددي المدخل الخالي من القيم المفقودة غير المعالجة، بينما يمثل المعامل breaks العنصر الأكثر حساسية؛ إذ يتحكم في كيفية وعدد نقاط التقطيع الرياضي التي ستحدد أبعاد الفئات التكرارية على المحور الأفقي.

عند تنفيذ الدالة وتخزين مخرجاتها في كائن برمجي (مثل h <- hist(x, plot = FALSE))، تُنتج R كائناً مركباً من الصنف S3 يسمى hist object. يحتوي هذا الكائن على قائمة غنية بالمعلومات الإحصائية المنهجية التي تم حسابها في الخلفية؛ وتشمل متجهة breaks التي تسرد جميع نقاط القطع الفاصلة، ومتجهة counts التي تتضمن التكرارات المطلقة لكل فئة، ومتجهة density التي تحتوي على قيم الكثافة الاحتمالية النسبية المحسوبة كحاصل قسمة التكرار النسبي على اتساع الفئة، ومتجهة mids التي تحدد مراكز الفئات الإحصائية، بالإضافة إلى معاملات التسمية والسمات المنطقية المرتبطة بخصائص الفترات المغلقة والمفتوحة.

1.3 تأثير اختيار عدد الفئات على التفسير البصري والإحصائي للبيانات

يمثل اختيار عدد الفئات معضلة كلاسيكية في التحليل الإحصائي توازي معضلة الموازنة بين التحيز والتباين (Bias-Variance Tradeoff) في نظرية تعلم الآلة. يحدد اتساع الفئة دقة الملاحظة البصرية، وبالتالي فإن الانحراف نحو أي من الطرفين المتطرفين (الزيادة المفرطة أو النقصان المفرط) يقود إلى استنتاجات تحليلية مضللة تشوه الحقيقة الكامنة وراء البيانات المرصودة.

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

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

2. الخوارزمية الافتراضية في لغة R: قاعدة ستورجس (Sturges’ Rule)

2.1 الأساس الرياضي لقاعدة ستورجس

تعتمد لغة R بصورة افتراضية على قاعدة ستورجس (Sturges’ Formula) لحساب عدد الفئات التكرارية عند استدعاء دالة hist() دون تحديد صريح للمعامل breaks. صيغت هذه القاعدة الرياضية بواسطة الإحصائي هربرت ستورجس في عام 1926، وتنطلق من فكرة نمذجة البيانات المتجمعة وفق التوزيع ذي الحدين (Binomial Distribution) المتماثل بوصفه تقريباً متقطعاً للتوزيع الطبيعي المعياري المستمر.

تُعطى الصيغة الرياضية لقاعدة ستورجس بالمعادلة التالية: k = 1 + log2(n) أو بصيغتها المكافئة باستخدام اللوغاريتم العشري: k = 1 + 3.322 * log10(n)، حيث يمثل k العدد المقترح للفئات التكرارية، ويمثل n حجم العينة الكلي (عدد المشاهدات المستقلة). يعتمد المنطق الرياضي لستورجس على أن تكرارات الفئات الناتجة من توسيع مفكوك ذي الحدين من الدرجة (k – 1) تقترب من شكل التوزيع الطبيعي عندما يكون حجم العينة n مساوياً لمجموع معاملات ذي الحدين، أي n = 2^(k – 1).

عند استدعاء الدالة في بيئة R، لا تكتفي الدالة الرياضية بحساب القيمة النظرية لـ k عبر الدالة الداخلية nclass.Sturges(x)، بل تمرر هذه القيمة إلى خوارزمية إضافية تُعرف باسم خوارزمية الأرقام الجميلة عبر دالة pretty(). تهدف هذه الخطوة الوسيطة إلى تعديل الفواصل الرياضية بحيث تقع حدود الفئات عند أرقام مقروءة وسهلة الفهم للمراقب البشري (مثل مضاعفات 1 أو 2 أو 5 أو قوى العدد 10)، مما يؤدي في كثير من الأحيان إلى إنتاج عدد فعلي من الفئات يختلف قليلاً عن الناتج الحسابي المباشر لمعادلة ستورجس الرياضية المجردة.

2.2 محددات وقصور قاعدة ستورجس في التطبيقات العملية

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

يتجلى العيب الأبرز لقاعدة ستورجس عند التعامل مع مجموعات البيانات الضخمة (Big Data / Large Datasets)؛ حيث إن النمو اللوغاريتمي البطيء لعدد الفئات بالنسبة لحجم العينة (log2(n)) يجعل الخوارزمية شديدة التحفظ؛ فعلى سبيل المثال، إذا كان حجم العينة مليون مشاهدة (n = 1,000,000)، فإن قاعدة ستورجس تقترح حوالي 21 فئة فقط، وهو عدد بالغ الصغر يؤدي حتماً إلى إفراط هائل في التنعيم (Severe Over-smoothing) وطمس ملامح التباين والأنماط المعقدة داخل مجموعات البيانات الكبرى.

علاوة على ذلك، تفشل قاعدة ستورجس بشكل ذريع عند تطبيقها على التوزيعات غير الطبيعية؛ مثل التوزيعات شديدة الالتواء (Highly Skewed) كبيانات الدخل أو مطالبات التأمين، والتوزيعات ذات الذيول الثقيلة (Heavy-tailed Distributions) كظواهر الأسواق المالية، والتوزيعات متعددة القمم (Multimodal Distributions)؛ إذ تؤدي الفئات العريضة التي تقترحها الخوارزمية إلى دمج القمم المتجاورة وإلغاء الفجوات الجوهرية، مما يعطي انطباعاً كاذباً بتجانس المجتمع المدروس وتناغمه الإحصائي.

2.3 مبررات تجاوز الإعدادات الافتراضية في الأبحاث والتحليلات المتقدمة

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

أحد أهم مبررات تجاوز الإعدادات الافتراضية هو الحاجة المنهجية لتوحيد الفئات والمقاييس عند إجراء المقارنات البصرية بين مجموعات أو تجارب بحثية متعددة (Comparative Analysis)؛ فإذا اعتمد الباحث على التحديد التلقائي لـ R لكل مجموعة على حدة، ستستخدم R حدوداً واتساعات فئوية مختلفة لكل رسم وفقاً لاختلاف أحجام العينات والمدى الرقمي، مما يجعل المقارنة المباشرة بين المدرجات أمراً مستحيلاً ومضللاً منهجياً.

كما تبرز الحاجة لتخصيص الفئات تلبيةً للمعايير القياسية والاتفاقيات الاصطلاحية المعمول بها في مجالات علمية متخصصة؛ فعلى سبيل المثال، تتطلب البحوث الوبائية والديموغرافية تقسيم الأعمار إلى فئات خماسية أو عشرية محددة بدقة (مثل: [0-5), [5-10))، وتتطلب التحليلات التعليمية تقسيم درجات الطلاب وفق سلالم تقييم قياسية محددة مسبقاً، وهو ما لا يمكن إنجازه إلا من خلال التدخل المباشر للتحكم في نقاط القطع الرياضية للمعامل breaks داخل لغة R.

3. التحكم في عدد الفئات عبر المعامل breaks

3.1 الأشكال والأنماط المتعددة لمدخلات المعامل breaks

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

النمط الأول يتمثل في تمرير قيمة عددية مفردة (Single Numeric Value)، مثل breaks = 15، والتي تشير ظاهرياً إلى رغبة المستخدم في تقسيم المدى إلى 15 فئة تكرارية تقريباً. النمط الثاني يتضمن تمرير متجهة عددية صريحة (Numeric Vector) تمثل نقاط القطع الفعلية والدقيقة للفئات، مثل breaks = c(0, 10, 20, 30, 40, 50)، وهي الطريقة التي تمنح الباحث سيطرة رياضية مطلقة على بدايات ونهايات واتساعات كل فئة بمفردها.

النمط الثالث يتيح تمرير سلسلة نصية تحدد اسماً لخوارزمية إحصائية بديلة لحساب الفئات؛ حيث تدعم لغة R المدمجة ثلاثة خيارات خوارزمية رئيسية هي: “Sturges” و “Scott” و “Freedman-Diaconis” (أو اختصاراً “FD”). أما النمط الرابع والأخير فيسمح بتمرير دالة مخصصة (Custom Function) يكتبها المستخدم بنفسه، بحيث تستقبل متجه البيانات كمدخل وتقوم بحساب وإرجاع نقاط القطع المناسبة ديناميكياً، مما يمنح المبرمج قدرة لا نهائية على التخصيص والأتمتة الإحصائية.

3.2 سلوك R عند إدخال قيمة عددية مفردة لمعامل breaks

من أكثر الجوانب التي تثير إرباك المبتدئين في لغة R هو السلوك غير المتوقع للدالة hist() عند تزويدها بقيمة عددية مفردة عبر المعامل breaks؛ فعلى سبيل المثال، عند كتابة الكود hist(data, breaks = 20)، يلاحظ المستخدم في معظم الحالات أن المدرج التكراري الناتج لا يحتوي على 20 عموداً كما هو متوقع، بل قد ينتج 16 أو 18 أو 23 عموداً، مما يثير تساؤلات حول مدى استجابة البيئة للأوامر المباشرة.

يرجع هذا السلوك المنهجي إلى أن لغة R تتعامل مع القيمة العددية المفردة المدخلة إلى breaks بوصفها اقتراحاً إرشادياً (Suggestion / Hint) وليس أمراً تنفيذياً حتمياً وقاطعاً. تستقبل R هذا الرقم الموجه وتمرره داخلياً إلى دالة pretty()، وهي دالة مصممة لتوليد متوالية من القيم التي يسهل على العين البشرية قراءتها وفهمها كأرقام قياسية مستديرة تعتمد على قوى العدد 10 ومضاعفات الأعداد الصحيحة (1، 2، 5).

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

3.3 التحكم الإلزامي في حدود الفئات لضمان الدقة الحسابية

لتحقيق الإلزام البرمجي والرياضي الكامل وفرض عدد فئات دقيق دون أدنى تدخل أو تقريب من خوارزمية pretty()، يتعين على المحلل الإحصائي تجاوز إدخال الأرقام المفردة، واللجوء حصرياً إلى تمرير متجهة عددية صريحة تحتوي على جميع نقاط القطع (Breakpoints) المطلوبة من البداية إلى النهاية بصورة تفصيلية كاملة.

يتطلب بناء متجهة الفواصل الإلزامية مراعاة شروط إحصائية دقيقة؛ حيث يجب أن يغطي النطاق المحدد بالمتجهة المدى الكامل للبيانات (Full Range of Data)، بمعنى أن تكون نقطة البداية الأولى أصغر من أو تساوي القيمة الصغرى للبيانات (min(x))، وأن تكون نقطة النهاية الأخيرة أكبر من أو تساوي القيمة العظمى للبيانات (max(x)). إذا سقطت مشاهدة واحدة خارج هذا النطاق، ستتوقف لغة R فوراً عن التنفيذ وتطلق رسالة خطأ صريحة تفيد بأن بعض القيم تقع خارج حدود الفواصل المحددة (some ‘x’ not counted; maybe ‘breaks’ do not span range of ‘x’).

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

4. استخدام دالة seq() لتحديد عدد دقيق من الفئات

4.1 الصياغة الرياضية والبرمجية لدالة seq() مع hist()

تُعد دالة seq() (اختصاراً لـ Sequence Generation) في لغة R الأداة الرياضية والبرمجية المعيارية الأكثر كفاءة وأناقة لتوليد متجهات عددية منتظمة تُستخدم لتحديد نقاط التقطيع بدقة متناهية داخل المعامل breaks. يتيح دمج الدالتين معاً صياغة أمر تحكم صارم يفرض على المدرج التكراري إنتاج العدد المطلوب بالضبط من الفئات دون الخضوع لتقريبات دالة pretty() التلقائية.

تتخذ الصيغة القياسية الأكثر استخداماً في هذا السياق البنية النحوية التالية: hist(x, breaks = seq(from = min(x), to = max(x), length.out = k + 1)). في هذه المعادلة البرمجية، يقوم المعامل from بتثبيت البداية عند القيمة الصغرى الدقيقة للمتجه العددي، بينما يثبت المعامل to النهاية عند القيمة العظمى، في حين يتولى المعامل length.out تحديد إجمالي عدد نقاط القطع الفاصلة المطلوبة لبناء الفئات.

تفسير العلاقة الرياضية بين المعامل length.out وعدد الفئات الناتج (Bins) يقوم على مبدأ هندسي بسيط وراسخ في الرياضيات: لتقسيم خط مستقيم إلى عدد k من الأجزاء المتجاورة والمتساوية، نحتاج دائماً إلى عدد (k + 1) من النقاط الفاصلة المحيطة بتلك الأجزاء. وبالتالي، إذا رغب الباحث في الحصول على 10 فئات متطابقة تماماً، فعليه تعيين length.out = 11، وإذا رغب في 25 فئة، يعين length.out = 26، وهكذا دواليك لتحقيق التطابق الحسابي المطلق.

4.2 آلية حساب عرض الفئة بناءً على length.out

عند تنفيذ دالة seq() باستخدام المعامل length.out، تقوم لغة R بحساب خطوة الانتقال الداخلي أو ما يُعرف باتساع الفئة (Step Size / Bin Width) بصورة آلية متسقة عبر تطبيق المعادلة الرياضية الأساسية لحساب فترات الاستكمال الداخلي: h = (to – from) / (length.out – 1)، والتي تكافئ في سياقنا الإحصائي: h = (max(x) – min(x)) / k.

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

مع ذلك، يجب الانتباه إلى أن قسمة المدى الكلي على عدد الفئات قد تسفر في كثير من الحالات الواقعية عن كسور عشرية غير منتهية أو أرقام غير دورية معقدة. على الرغم من أن لغة R تتعامل مع هذه الكسور الحسابية بدقة برمجية فائقة تبلغ 64 بت وفق معيار الفاصلة العائمة (IEEE 754 Floating-point Standard)، إلا أن التسميات الرقمية الناتجة على المحور الأفقي قد تصبح غير مريحة للقراءة ما لم يتم التعامل معها بضبط احترافي لنقاط البداية والنهاية كما سنوضح لاحقاً.

4.3 التحكم المتقدم بالحدود لتفادي استبعاد القيم القصوى

عند بناء الفواصل باستخدام الدالة المباشرة seq(min(x), max(x), length.out = k + 1)، قد يواجه المحلل الإحصائي مشكلة تقنية خفية ترتبط بطبيعة انغلاق وانفتاح الفترات الرياضية وتأثير أخطاء التقريب العشري الدقيق للآلة (Machine Precision Issues)، مما قد يؤدي في ظروف استثنائية إلى استبعاد القيمة الصغرى أو القيمة الكبرى للبيانات وإطلاق تحذيرات برمجية غير مرغوبة.

لتفادي هذه الإشكالية بأسلوب منهجي رصين، يوصى دائماً بتوسيع نطاق البداية والنهاية بهامش أمان طفيف يضمن وقوع جميع البيانات بصرامة داخل الفواصل. يتم ذلك عبر تعديل نقطة البداية لتكون أقل قليلاً من القيمة الصغرى ونقطة النهاية لتكون أكبر قليلاً من القيمة العظمى، كأن نستخدم: seq(from = min(x) – 0.001 * sd(x), to = max(x) + 0.001 * sd(x), length.out = k + 1)، أو استخدام دوال التقريب الصحيح مثل floor() و ceiling() عند التعامل مع الأرقام الصحيحة.

بالإضافة إلى ذلك، توفر دالة hist() معاملاً منطقياً حاسماً وهو include.lowest = TRUE، والذي يتم تفعيله افتراضياً في النظام. يضمن هذا المعامل إغلاق الفترة الطرفية الأولى (أو الأخيرة بحسب اتجاه الانغلاق) تلقائياً، بحيث تندرج أصغر قيمة في المتجه ضمن الفئة الأولى حتى وإن كانت الفترات اللاحقة مفتوحة من اليسار، مما يوفر حماية برمجية متكاملة تضمن الشمولية الإحصائية التامة لجميع المشاهدات دون أي فقد في حجم العينة الأصلي.

5. تطبيقات وأمثلة عملية خطوة بخطوة في لغة R

5.1 المثال الأول: إنشاء مدرج تكراري افتراضي وتحليل مخرجاته

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

يمكن تمثيل هذا السيناريو من خلال الكود التوضيحي التالي: نقوم أولاً بتثبيت الجذر العشوائي لضمان قابلية إعادة الإنتاجية عبر set.seed(123)، ثم نولد البيانات باستخدام x <- rnorm(100, mean = 50, sd = 10). بعد ذلك نستدعي الدالة ونخزن المخرجات دون رسمها مبدئياً: h_default <- hist(x, plot = FALSE). عند فحص الكائن الناتج h_default، نكتشف التفاصيل الإحصائية المدمجة التي اختارتها بيئة R التلقائية وفق قاعدة ستورجس وخوارزمية الأرقام الجميلة.

عند طباعة عناصر الكائن عبر h_default$breaks، سنجد أن R اختارت مثلاً فواصل تمتد من 20 إلى 80 بزيادات متساوية قدرها 5 أو 10 وحدات، منتجة عدداً من الفئات يقارب 8 أو 9 فئات على الرغم من أن معادلة ستورجس الصافية تعطي k = 1 + \log2(100) = 7.64 (أي 8 فئات تقريباً). هذا التطابق المقارب يوضح كيف عدلت دالة pretty() الفواصل لتجعل نهايات الأعمدة أرقاماً متناسقة ومقروءة مثل 20، 30، 40، 50، 60، 70، 80، مع تخزين تكرار كل فئة بانتظام داخل المتجه h_default$counts.

5.2 المثال الثاني: الإلزام بعدد محدد من الفئات عبر دالة seq()

في هذا التطبيق، سنفرض على بيئة R بناء مدرج تكراري يحتوي بدقة على 6 فئات إحصائية متطابقة الاتساع، متجاوزين تماماً الاقتراحات التلقائية لقاعدة ستورجس ولخوارزمية pretty(). سنعتمد على نفس المتجه x السابق ليتسنى لنا مقارنة المخرجات البصرية والإحصائية بدقة منهجية واضحة.

لتحقيق ذلك، نقوم بتطبيق الكود التالي: h_custom <- hist(x, breaks = seq(min(x), max(x), length.out = 7), col = "lightblue", main = "مدرج تكراري بست فئات مخصصة", xlab = "القيم المقاسة", ylab = "التكرار المطلق"). نلاحظ هنا أننا مررنا length.out = 7 لنحصل بدقة على 6 فئات (7 فواصل محيطة). عند استعراض مصفوفة الفواصل الناتجة h_custom$breaks، نلاحظ أنها أصبحت تحتوي على 7 نقاط دقيقة تنطلق من أصغر مشاهدة حقيقية في البيانات وصولاً إلى أقصى قيمة عظمى.

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

5.3 المثال الثالث: دراسة حالة على عينات تجريبية كبرى

تتضح الأهمية القصوى للتحكم في الفئات عند التعامل مع عينات إحصائية ضخمة؛ حيث تنهار القواعد الافتراضية المبسطة وتبدو عاجزة عن استيعاب حجم المعلومات الكثيف. لتوضيح هذه الظاهرة، سنقوم بتوليد عينة كبرى تبلغ عشرة آلاف مشاهدة (n = 10,000) مسحوبة من توزيع غاوسي معياري باستخدام الكود: large_data <- rnorm(10000, mean = 0, sd = 1).

إذا اعتمدنا على الخيار الافتراضي، فإن قاعدة ستورجس ستقترح حوالي 15 فئة فقط لمعالجة عشرة آلاف نقطة بيانات (k = 1 + log2(10000) = 14.28). عند رسم هذا المدرج الافتراضي، سنحصل على أعمدة عريضة ومسطحة تفتقر إلى التفاصيل وتفشل في إبراز المنحنى الناعم للجرس الغاوسي المعياري، وهو ما يمثل حالة كلاسيكية للإفراط في التنعيم الناتج عن قصور الخوارزمية الافتراضية مع البيانات الكبيرة.

لتصحيح هذا القصور وإجراء مقارنة استكشافية متقدمة، نقوم بتطبيق ثلاث استراتيجيات مختلفة عبر تقسيم اللوحة الرسومية إلى ثلاثة أقسام باستخدام par(mfrow = c(1, 3)): أولاً نرسم المدرج باستخدام 10 فئات عبر breaks = seq(min(large_data), max(large_data), length.out = 11)، ثم باستخدام 50 فئة عبر length.out = 51، وأخيراً باستخدام 200 فئة عبر length.out = 201. تُظهر المقارنة التحليلية أن استخدام 50 فئة يوفر التوازن الأمثل والدقة الفائقة في كشف استدارة المنحنى المعياري وذيوله دون إدخال ضوضاء عشوائية، بينما أظهر المدرج ذو الـ 200 فئة بدايات ظهور تذبذبات طفيفة في قمم الأعمدة، مما يرشد الباحث لاختيار مستوى التنعيم الأكثر اتساقاً مع أهدافه العلمية.

6. التحكم في عرض الفئة (Bin Width) بدلاً من عدد الفئات

6.1 التحول المنهجي من عدد الفئات إلى اتساع الفئة

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

لتحقيق هذا التحول البرمجي في بيئة R الأساسية عبر دالة seq()، نستبدل المعامل length.out بالمعامل by، والذي يحدد صراحة حجم خطوة الانتقال المتساوية بين نقاط التقطيع المتعاقبة. تتخذ الصيغة الرياضية والبرمجية العامة البنية التالية: breaks = seq(from = start_point, to = end_point, by = width)، حيث يمثل width الاتساع الفيزيائي أو الإحصائي الثابت المرغوب لكل عمود تكراري.

لتجنب المشكلات الحسابية المرتبطة بحدود البيانات، يُنصح دائماً بمحاذاة نقطتي البداية والنهاية مع مضاعفات صحيحة لاتساع الفئة المحدد؛ كأن نستخدم الدالتين الرياضيتين floor() و ceiling() لتثبيت الحدود الدنيا والقصوى بصورة محكمة: breaks = seq(floor(min(x)), ceiling(max(x)), by = 1)، مما يضمن بناء مدرج تكراري متسق منطقياً وسهل التفسير للمتلقي.

6.2 التعامل مع الح حالات التي لا يقبل فيها المدى القسمة على عرض الفئة

تنشأ معضلة رياضية شائعة عندما يكون المدى الإجمالي للمتغير (Range = max(x) – min(x)) غير قابل للقسمة الصحيحة دون باقٍ على اتساع الفئة المختار (width). في هذه الحالة، إذا كتب المحلل الكود seq(min(x), max(x), by = width)، فإن آخر نقطة يولدها المتجه ستكون أقل حتماً من القيمة العظمى max(x)، مما يتسبب في سقوط القيم القصوى خارج نطاق الفواصل وإطلاق خطأ برمجي يوقف عملية الرسم بالكامل.

لمعالجة هذه المعضلة باحترافية، توجد استراتيجيتان برمجيتان معتمدتان؛ الاستراتيجية الأولى تعتمد على توسيع نقطة النهاية (to) بمقدار اتساع فئة إضافي لضمان تجاوز القيمة العظمى: seq(from = min(x), to = max(x) + width, by = width). تضمن هذه الخطوة احتواء جميع المشاهدات داخل آخر فئة مغلقة دون استثناء أي قيمة من العينة.

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

6.3 أمثلة برمجية لضبط اتساع الفئة بوحدات محددة

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

في التطبيق الأول، سنحدد اتساع الفئة ليكون 5 درجات متكاملة (Bin Width = 5) عبر الكود التالي: scores <- runif(200, 42.5, 98.7); breaks_5 <- seq(from = 40, to = 100, by = 5); hist(scores, breaks = breaks_5, col = "wheat", main = "توزيع الدرجات باتساع فئة = 5 درجات", xlab = "الدرجة المستحقة", ylab = "عدد الطلاب"). يضمن هذا الكود بناء فئات واضحة تماماً: [40-45), [45-50), …, [95-100]، مما يجعل قراءة الرسم متوافقة مباشرة مع معايير التقييم التربوي المعمول بها.

في التطبيق الثاني، إذا رغب الباحث في فحص الاستجابات الدقيقة على مقياس كسري أدق، يمكنه تعديل اتساع الفئة ليصبح وحدة واحدة أو نصف وحدة عبر تعديل المعامل: breaks_1 <- seq(from = 42, to = 99, by = 1); hist(scores, breaks = breaks_1, col = "cadetblue", main = "توزيع الدرجات باتساع فئة = وحدة واحدة"). إن تثبيت العرض بقيم منطقية يمنح الباحث القدرة على الموازنة الواعية بين الدقة الإحصائية والتفسير العملي للنتائج، متفوقاً بصورة حاسمة على التوزيعات المبنية على عدد عشوائي غير مفسر من الفئات.

7. الخوارزميات الإحصائية البديلة لحساب الفئات المتاحة في R

7.1 قاعدة فريدمان-دياكونيس (Freedman-Diaconis Rule)

تُعد قاعدة فريدمان-دياكونيس (Freedman-Diaconis Rule)، والتي يرمز لها في لغة R بالخيار breaks = “FD”، واحدة من أقوى وأدق الخوارزميات غير المعلمية لتحديد الاتساع الأمثل للفئات التكرارية في الإحصاء الحديث. صاغ هذه القاعدة الرياضيان ديفيد فريدمان وبيرسي دياكونيس في عام 1981، وتتميز باعتمادها على مقاييس الموضع المتينة (Robust Statistics) المقاومة لتأثير القيم الشاذة والالتواءات الحادة.

تنطلق القاعدة من حساب اتساع الفئة الأمثل h بدلاً من حساب عدد الفئات مباشرة، وفق الصيغة الرياضية الدقيقة التالية: h = 2 * IQR(x) * n^(-1/3)، حيث يمثل IQR(x) المدى الربيعي للبيانات (حاصل طرح الإحداثي الربيعي الأول Q1 من الإحداثي الربيعي الثالث Q3: IQR = Q3 – Q1)، ويمثل n حجم العينة الإجمالي، والحد n^(-1/3) يمثل الجذر التكعيبي لحجم العينة مقلوباً. بعد حساب h، يتم استنتاج عدد الفئات k بقسمة المدى الكلي للبيانات على هذا الاتساع: k = (max(x) – min(x)) / h.

يكمن التفوق الجوهري لقاعدة FD في استخدامها للمدى الربيعي IQR كمعيار لقياس التشتت بدلاً من الانحراف المعياري التقليدي؛ حيث يقيس المدى الربيعي نطاق انتشار الـ 50% الوسطى من البيانات، متجاهلاً تماماً الذيول الطرفية المتطرفة. ونتيجة لذلك، إذا كانت البيانات تحتوي على قيم شاذة حادة أو تتبع توزيعات شديدة اللاتماثل (مثل توزيع لورنتز أو كوشي أو باريتو)، فإن قاعدة FD تمنع تضخيم اتساع الفئات وتولد مدرجاً تكرارياً فائق الدقة يحافظ على المعالم الحقيقية للكتلة المركزية للبيانات دون تشويه.

7.2 قاعدة سكوت (Scott’s Rule)

تُمثل قاعدة سكوت (Scott’s Rule)، والمتاحة برمجياً في بيئة R عبر الخيار breaks = “Scott”، مقاربة إحصائية معلمية استنباطية صاغها الإحصائي ديفيد سكوت في عام 1979. تستند هذه القاعدة إلى نظرية التقريب المقارب وتهدف إلى تقليل الخطأ المتوسط المربع المتكامل (Mean Integrated Squared Error – MISE) بين المدرج التكراري التجريبي ودالة كثافة الاحتمال الحقيقية للمجتمع الإحصائي.

تُعطى الصيغة الرياضية لحساب اتساع الفئة وفق خوارزمية سكوت بالمعادلة التالية: h = 3.49 * s * n^(-1/3)، حيث يمثل s الانحراف المعياري للعينة (Sample Standard Deviation)، ويمثل n حجم العينة الكلي. تُشتق القيمة الثابتة 3.49 رياضياً من تقليل دالة الخطأ MISE بافتراض أن البيانات المسحوبة تتبع التوزيع الطبيعي الغاوسي القياسي.

تتفوق قاعدة سكوت تفوقاً كاسحاً على قاعدة ستورجس الافتراضية عند التعامل مع العينات المتوسطة والكبيرة المسحوبة من توزيعات قريبة من الاعتدالية؛ حيث تضمن استجابة اتساع الفئة لمعدل التغير n^(-1/3)، مما يجعل الفئات تضيق تدريجياً مع زيادة حجم العينة لكشف المزيد من التفاصيل الدقيقة للتوزيع. ومع ذلك، ونظراً لاعتمادها المباشر على الانحراف المعياري s، فإنها تظل أكثر حساسية للقيم الشاذة مقارنة بقاعدة فريدمان-دياكونيس، مما يجعلها الخيار المثالي للبيانات المتجانسة المعتدلة، بينما تتراجع أمام FD في البيانات الملوثة بالقيم المتطرفة.

7.3 مقارنة شاملة بين الطرق التلقائية الثلاث في R (Sturges vs FD vs Scott)

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

الخوارزمية الإحصائية صيغة اتساع الفئة (Bin Width – h) صيغة عدد الفئات (Number of Bins – k) الافتراض التوزيعي الأساسي حساسية القيم الشاذة أفضل سيناريو للاستخدام
ستورجس (Sturges) h = (max – min) / (1 + log2(n)) k = 1 + log2(n) توزيع طبيعي متماثل تماماً شديدة الحساسية (تشوه النطاق) العينات الصغيرة جداً (n < 200) ذات التوزيع الطبيعي
سكوت (Scott) h = 3.49 * s * n^(-1/3) k = (max – min) / (3.49 * s * n^(-1/3)) توزيع طبيعي غاوسي مستمر متوسطة الحساسية (تعتمد على s) العينات الكبيرة والمتوسطة المعتدلة والمتجانسة
فريدمان-دياكونيس (FD) h = 2 * IQR * n^(-1/3) k = (max – min) / (2 * IQR * n^(-1/3)) لا تفترض أي توزيع محدد (غير معلمية) منيعة ومقاومة تماماً (تعتمد على IQR) البيانات الملتوية، العينات الضخمة، والبيانات ذات القيم الشاذة

لتطبيق هذه المقارنة عملياً في كود برمجي موحد، يمكن تنفيذ الأوامر التالية على متغير يحتوي على التواء وقيم متطرفة: hist(x, breaks = “Sturges”, col = “gray”); hist(x, breaks = “Scott”, col = “lightblue”); hist(x, breaks = “FD”, col = “lightgreen”). سيلاحظ الباحث بوضوح كيف تنجح قاعدة FD في إبراز قلب التوزيع وكثافته بدقة دون التأثر بالذيول الطويلة، مما يثبت تفوقها المنهجي كأفضل خوارزمية نقطة انطلاق افتراضية للتحليلات الاستكشافية الجادة.

8. إنشاء فئات غير متساوية العرض (Unequal Bin Widths)

8.1 الأساس النظري للفئات ذات الاتساعات المتغيرة

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

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

يترتب على استخدام الفئات غير المتساوية تحول رياضي ومنهجي إلزامي في قراءة وتفسير المدرج التكراري: إذ تسقط نهائياً قاعدة “الارتفاع يمثل التكرار”، وتحل محلها حصرياً قاعدة المساحة تمثل التكرار (Area Represents Frequency)؛ حيث تُحسب كثافة كل عمود بقسمة تكراره النسبي على اتساعه الأفقي الخاص، مما يمنع التضليل البصري الذي ينشأ حتماً إذا اعتمد المحلل على الارتفاعات المطلقة لأعمدة متفاوتة الاتساع.

8.2 التطبيق البرمجي للفئات غير المتساوية في R

تتيح لغة R إنشاء مدرجات تكرارية غير متساوية الفئات بسلاسة فائقة عبر تمرير متجهة عددية غير منتظمة المسافات مباشرة إلى المعامل breaks. على سبيل المثال، لدراسة توزيع الدخل، يمكننا صياغة المتجهة التالية: custom_breaks <- c(0, 1000, 2500, 5000, 10000, 25000, 100000)، ثم تنفيذ الدالة: hist(income_data, breaks = custom_breaks, col = "salmon").

عند تنفيذ هذا الأمر بمتجهة فواصل غير متساوية، تقوم لغة R تلقائياً ودون تدخل من المستخدم بضبط المعامل المنطقي freq = FALSE وتفعيل مقياس الكثافة الاحتمالية (Density Scale) على المحور الرأسي (Y-axis). ترفض لغة R برمجياً رسم التكرارات المطلقة (freq = TRUE) مع الفئات غير المتساوية وتطلق تحذيراً صريحاً؛ لأن تمثيل التكرار المطلق على المحور الرأسي في هذه الحالة سيجعل الأعمدة العريضة تبدو ضخمة ومبالغاً في أهميتها بصرياً بمجرد اتساع قاعدتها، وهو ما يتعارض مع النزاهة الرياضية للتمثيل الإحصائي.

في هذا المدرج الناتج، يُحسب ارتفاع كل مستطيل وفق المعادلة: Density = (Count in bin / Total Sample Size) / Bin Width. وبالتالي، فإن المساحة الكلية لجميع المستطيلات المحسوبة بضرب اتساع كل فئة في ارتفاعها الكثافي ستكون مساوية تماماً للواحد الصحيح (Total Area = 1.0)، محققة الشروط الرياضية الصارمة لدوال كثافة الاحتمال المستمرة.

8.3 تجنب التضليل البصري عند استخدام فئات غير متساوية

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

من أفضل الممارسات المنهجية لتعزيز وضوح هذه المخططات في لغة R هو إضافة منحنى تقدير كثافة النواة (Kernel Density Curve) فوق المدرج التكراري غير المتساوي باستخدام الأمر: lines(density(income_data), col = “darkblue”, lwd = 2). يوفر هذا المنحنى المتصل مرجعاً بصرياً انسيابياً يساعد العين البشرية على إدراك تدرج الكثافة الاحتمالية ومطابقتها مع مساحات الأعمدة المتفاوتة.

علاوة على ذلك، ينبغي طباعة وتوضيح نقاط التقطيع صراحة على المحور الأفقي باستخدام دالة المحاور المخصصة axis(side = 1, at = custom_breaks)، مما يتيح للقارئ معرفة بداية ونهاية واتساع كل فترة بدقة رقمية قاطعة، ويمنع أي خلط قد ينشأ بين الكثافة الاحتمالية والتكرار العددي المجرد.

9. تغيير وتخصيص عدد الفئات باستخدام حزمة ggplot2

9.1 مقاربة دالة geom_histogram() لتحديد الفئات

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

على النقيض من دالة hist() الأساسية، لا تعتمد ggplot2 على قاعدة ستورجس، بل تتبنى افتراضاً ثابتاً وموحداً ينشئ 30 فئة تكرارية تلقائياً (bins = 30)، مع إطلاق رسالة تنبيهية شهيرة عند التنفيذ: “stat_bin() using bins = 30. Pick better value with binwidth”. تحث هذه الرسالة المحلل صراحة على عدم الوثوق بالإعداد الافتراضي والتدخل لتعيين المعاملات بما يتناسب مع طبيعة البيانات قيد الدراسة.

توفر الدالة خيارين برمجين واضحين ومحددين للتحكم في الفئات: الأول هو المعامل bins، والذي يحدد العدد الإجمالي للفئات بشكل حتمي ومباشر دون أي تقريب بواسطة دوال إضافية؛ مثل geom_histogram(bins = 15). الخيار الثاني هو المعامل binwidth، والذي يحدد اتساع الفئة بوحدات المتغير المقاس مباشرة وبدقة متناهية؛ مثل geom_histogram(binwidth = 2.5)، وهو الخيار المفضل منهجياً في معظم التطبيقات التحليلية ضمن بيئة Tidyverse.

9.2 التحكم في محاذاة الفئات والحدود في ggplot2

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

يُستخدم المعامل center لتحديد القيمة العددية التي يجب أن تمثل المركز الدقيق (Midpoint) لإحدى الفئات؛ فعلى سبيل المثال، عند كتابة geom_histogram(binwidth = 10, center = 5)، ستقوم ggplot2 بضبط جميع الفئات لتتمركز حول القيم 5، 15، 25، 35، مما ينتج فئات تمتد من [0-10)، [10-20)، وهكذا. في المقابل، يُستخدم المعامل boundary لتحديد نقطة ارتكاز تمثل بداية أو نهاية حد فاصل حقيقي لإحدى الفئات؛ مثل geom_histogram(binwidth = 10, boundary = 0)، مما يضمن انطلاق الفئات بصرامة من الصفر لتكون [0-10)، [10-20)، [20-30).

يتميز استخدام boundary و center في ggplot2 بأنه يمنع التحول الزاوي أو المكاني غير المقصود للفئات، ويسمح للمحلل بمطابقة حدود الأعمدة الرسومية مع القيم المرجعية الطبيعية للظاهرة المدروسة، مما يرفع من جودة التفسير البصري ومطابقته للمعايير القياسية بدقة وصرامة متناهية.

9.3 أمثلة تطبيقية متقدمة باستخدام ggplot2

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

يتضمن الكود التالي تطبيقاً عملياً متكاملاً على حزمة البيانات المدمجة diamonds: نقوم أولاً بتحميل مكتبة ggplot2 عبر library(ggplot2). بعد ذلك ننشئ رسماً يوضح توزيع أسعار الماس حسب جودة القطع عبر الكود: ggplot(diamonds, aes(x = price, y = after_stat(density), fill = cut)) + geom_histogram(binwidth = 500, boundary = 0, color = “white”, alpha = 0.7) + geom_density(color = “red”, linewidth = 0.8) + facet_wrap(~ cut, scales = “free_y”) + theme_minimal() + labs(title = “توزيع أسعار الماس وفق جودة القطع”, subtitle = “تم ضبط اتساع الفئة بمقدار 500 دولار مع إضافة منحنى الكثافة الاحتمالية”, x = “السعر بالدولار الأمريكي”, y = “الكثافة الاحتمالية”).

يوضح هذا التطبيق المتقدم كيف استطعنا من خلال ضبط binwidth = 500 و boundary = 0 توحيد دقة الفئات عبر جميع المجموعات الفرعية المقسمة بواسطة facet_wrap()، مع استخدام after_stat(density) لتحويل المحور الرأسي إلى الكثافة الاحتمالية لتسهيل مطابقتها مع طبقة geom_density()، وتعيين alpha = 0.7 و color = “white” لإبراز الحدود الفاصلة بين الأعمدة بوضوح تام، مما ينتج تمثيلاً بيانياً يجمع بين الصرامة الإحصائية والجاذبية البصرية الاحترافية.

10. تعديل الخصائص المرافقة لتحسين وضوح المدرج التكراري

10.1 ضبط التسميات ومحاور الرسم البياني

لا يكتمل التخصيص الإحصائي لعدد الفئات دون ضبط دقيق للمحاور والعناوين المرافقة للرسم البياني؛ إذ إن ترك التسميات التلقائية للدالة hist() غالباً ما ينتج عناوين برمجية مبهمة (مثل “Histogram of x”) لا تلبي متطلبات التوثيق العلمي الرصين.

تتيح المعاملات xlab و ylab في لغة R تخصيص نصوص المحاور الأفقية والرأسية بالكامل لتعكس الاسم العلمي للمتغير ووحدات القياس الدقيقة المستخدمة (مثل: xlab = “مستوى تركيز الغلوكوز (ملغ/ديسيلتر)”، ylab = “التكرار المطلق (عدد المرضى)”). كما يتيح المعامل main تعيين العنوان الرئيسي، بينما يتيح المعامل sub إضافة تعليق توضيحي أسفل المخطط يوضح المعايير الإحصائية المعتمدة مثل عدد الفئات وطريقة الحساب.

علاوة على ذلك، يمثل التحكم في حدود المحاور عبر المعاملين xlim و ylim ضرورة حتمية لمنع قص الأعمدة الرسومية أو التسميات النصية؛ فعند زيادة عدد الفئات، قد ترتفع أو تنخفض قمم التكرارات بصورة غير متوقعة، مما يستوجب ضبط الحد الأعلى لمحور الصادات يدوياً عبر ylim = c(0, max_count * 1.15) لترك مساحة كافية أعلى الأعمدة لعرض النصوص والبيانات التفسيرية المرافقة بأريحية بصرية كاملة.

10.2 التحكم في مغلقية الفترات الفاصلة (Right vs Left Closed Intervals)

تعتمد النمذجة الرياضية لتقطيع الفئات على تحديد ما إذا كانت النقطة الفاصلة المشتركة بين فئتين متجاورتين [a, b) و [b, c) تنتمي إلى الفئة السفلى أم الفئة العليا. تتحكم لغة R في هذه الخاصية المنهجية عبر المعامل المنطقي right داخل دالة hist().

القيمة الافتراضية في النظام هي right = TRUE، مما يعني أن الفترات تكون مغلقة من اليمين ومفتوحة من اليسار بالصيغة الرياضية: (a, b]. في هذا النمط، إذا سقطت قيمة عددية مطابقة تماماً لنقطة القطع b، فإنها تُحسب تلقائياً ضمن الفئة الأولى اليسارية (a, b]، ولا تنتمي للفئة اللاحقة. في المقابل، عند ضبط right = FALSE، تنعكس المعادلة لتصبح الفترات مغلقة من اليسار ومفتوحة من اليمين بالصيغة: [a, b)، بحيث تُدرج القيمة b في الفئة اللاحقة.

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

10.3 تخصيص الألوان والسمات الجمالية لإبراز الفروق

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

يتحكم المعامل col في لون تعبئة المستطيلات؛ حيث يمكن تمرير أسماء ألوان مفردة مثل col = “steelblue”، أو متجهات لونية متدرجة تُعبر عن كثافة التكرار باستخدام لوحات الألوان القياسية مثل col = heat.colors(k) أو لوحات حزمة viridis المخصصة للوضوح اللوني والطباعة الأكاديمية. في الوقت ذاته، يلعب المعامل border دوراً حاسماً في تعيين لون الإطار المحيط بكل مستطيل؛ حيث يُنصح دائماً بتعيين border = “white” أو border = “black” لإبراز الخطوط الفاصلة ومنع اندماج الأعمدة في كتلة لونية مصمتة غير مميزة.

بالإضافة إلى ذلك، يمكن تعزيز القراءة الكمية للمدرج التكراري عبر إضافة خطوط شبكية قياسية خلفية باستخدام دالة grid(nx = NA, ny = NULL, col = “gray80”, lty = “dotted”)، مع مراعاة استدعاء المدرج التكراري مرة أخرى مع المعامل add = TRUE لضمان بقاء الأعمدة فوق خطوط الشبكة، مما يمنح المخطط مظهراً احترافياً يماثل أرقى البرمجيات البيانية المعاصرة.

11. الأخطاء الشائعة والتحيزات الإحصائية عند اختيار عدد الفئات

11.1 خطأ التجميع المفرط (Over-binning) والأنماط الزائفة

يقع الباحثون في خطأ التجميع المفرط (Over-binning) عندما يختارون عدداً ضخماً جداً من الفئات يفوق بكثير القدرة الاستيعابية لحجم العينة المرصودة؛ كأن يتم استخدام 100 فئة لتمثيل عينة تتكون من 150 مشاهدة فقط. يقود هذا الخلل المنهجي إلى تشتيت البيانات وظهور أنماط بصرية مضللة لا وجود لها في الواقع.

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

لتجنب هذا التحيز، يتعين على الباحث التحقق من أن متوسط عدد المشاهدات لكل فئة (Average Bin Count = n / k) لا يقل عن حد أدنى يتراوح بين 5 إلى 10 مشاهدات في الفئات المركزية. إذا انخفض متوسط التكرارات عن هذا الحد المعياري، يجب دمج الفئات وتقليل عددها فوراً لاستعادة التوازن الإحصائي واستبعاد الضوضاء العشوائية غير المفسرة.

11.2 خطأ التجميع الناقص (Under-binning) وإخفاء البنى متعددة القمم

على النقيض من الخطأ السابق، يحدث التجميع الناقص (Under-binning) عند الإفراط في تقليل عدد الفئات بصورة تجعل اتساع كل فئة كبيراً جداً بالنسبة لتباين البيانات الداخلي؛ كأن يتم تمثيل عينة تحتوي على آلاف المشاهدات باستخدام 4 أو 5 فئات عريضة فقط.

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

لتشخيص وتفادي التجميع الناقص، يوصى دائماً بمقارنة المدرج التكراري الاستكشافي مع أدوات بيانية رديفة مكملة؛ مثل مخطط الصندوق والساعدين (Boxplot) ومخطط الكميات الطبيعية (Q-Q Plot)، أو تجربة زيادة عدد الفئات تدريجياً لمراقبة ما إذا كانت هناك قمم فرعية مخفية تبدأ في الظهور والانفصال مع زيادة الدقة التحليلية.

11.3 التحيز الناتج عن اختيار نقاط البداية والنهاية (Phase Shift Bias)

من أكثر التحيزات الإحصائية غموضاً وخطورة في تحليل المدرجات التكرارية ما يُعرف بـ “تحيز إزاحة الطور” (Phase Shift Bias / Origin Dependency). يتمثل هذا التحيز في الظاهرة المثبتة رياضياً والتي تفيد بأن شكل المدرج التكراري وتفسيره الإحصائي قد يتغير تغيراً جذرياً بمجرد تحريك نقطة البداية (Origin / Anchor Point) للفئة الأولى نحو اليمين أو اليسار بمقدار طفيف، حتى مع بقاء اتساع الفئة (Bin Width) وحجم العينة ثابتاً تماماً دون أي تغيير.

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

لمواجهة هذا التحيز البنيوي المتأصل في طبيعة التقطيع الفئوي المتقطع، يوصي الإحصائيون بالاعتماد الموازي على تقدير كثافة النواة (Kernel Density Estimation – KDE) كأداة تحقق مستقلة؛ حيث يقوم تقدير النواة برسم منحنى احتمالي ناعم ومستمر لا يعتمد على فترات تقطيع فاصلة جامدة، مما يقضي تماماً على تحيز إزاحة الطور ويوفر معياراً موضوعياً لتقييم صحة التوزيع الإحصائي المستخلص.

12. أفضل الممارسات والتوصيات المنهجية لتوثيق وتعديل الفئات

12.1 معايير الاختيار الأكاديمي للعدد الأمثل للفئات

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

يوصى كمعيار منهجي معتمد بالانطلاق دائماً من قاعدة فريدمان-دياكونيس (Freedman-Diaconis: breaks = “FD”) كنقطة بداية موضوعية؛ نظراً لقدرتها الفائقة على التكيف مع مختلف أشكال التوزيعات وحصانتها ضد تشوهات القيم المتطرفة. بعد ذلك، ينبغي على الباحث إجراء ما يُعرف بـ “تحليل الحساسية البصري” (Visual Sensitivity Analysis) من خلال اختبار ثلاثة مستويات من الفئات: المستوى القاعدي (FD)، ومستوى يقلل اتساع الفئة إلى النصف (مضاعفة عدد الفئات)، ومستوى يضاعف اتساع الفئة (تنصيف عدد الفئات).

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

12.2 بروتوكول توثيق إعدادات المدرج التكراري في التقارير العلمية

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

يتضمن البروتوكول المنهجي المعتمد للتوثيق الإفصاح الصريح في متن التقرير أو في التعليق المصاحب للشكل البياني عن: حجم العينة الكلي (n)، والعدد الفعلي للفئات المستخدمة (Bins Count)، واتساع الفئة المعتمد بوحدات القياس الحقيقية (Bin Width)، والخوارزمية الإحصائية المطبقة (مثل Sturges أو Scott أو FD)، ونمط انغلاق الفترات المعتمد (right = TRUE أم right = FALSE)، بالإضافة إلى بيان ما إذا كان المحور الرأسي يمثل التكرار المطلق (Counts) أم الكثافة الاحتمالية (Density).

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

12.3 دليل مرجعي سريع لأوامر R الخاصة بتخصيص الفئات

لتسهيل الوصول البرمجي السريع أثناء العمل التحليلي اليومي، يلخص الدليل المرجعي التالي أبرز الأوامر والصيغ المعتمدة للتحكم في فئات المدرج التكراري في بيئتي R الأساسية وحزمة ggplot2:

  • المدرج الافتراضي (قاعدة ستورجس): hist(x)
  • تطبيق قاعدة فريدمان-دياكونيس الموصى بها: hist(x, breaks = “FD”, col = “skyblue”)
  • تطبيق قاعدة سكوت للبيانات المعتدلة: hist(x, breaks = “Scott”, col = “lightgreen”)
  • تحديد عدد إلزامي دقيق من الفئات (مثلاً 10 فئات): hist(x, breaks = seq(min(x), max(x), length.out = 11))
  • تحديد اتساع ثابت للفئة (مثلاً اتساع = 2 وحدة): hist(x, breaks = seq(floor(min(x)), ceiling(max(x)) + 2, by = 2))
  • إنشاء فئات غير متساوية مع مقياس الكثافة: hist(x, breaks = c(0, 10, 25, 50, 100), freq = FALSE)
  • التحكم في عدد الفئات في ggplot2 (مثلاً 20 فئة): ggplot(df, aes(x)) + geom_histogram(bins = 20)
  • التحكم في اتساع الفئة ومحاذاتها في ggplot2: ggplot(df, aes(x)) + geom_histogram(binwidth = 5, boundary = 0)
  • إضافة منحنى الكثافة الاحتمالية في النظام الأساسي: lines(density(x), col = “red”, lwd = 2)

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

خاتمة

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

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

المراجع (References)

  • Freedman, D., & Diaconis, P. (1981). On the histogram as a density estimator: L2 theory. Zeitschrift für Wahrscheinlichkeitstheorie und verwandte Gebiete, 57(4), 453–476. https://doi.org/10.1007/BF01025868
  • Hyndman, R. J. (1995). The problem with Sturges’ rule for selecting histogram bin widths. Business and Economic Statistics Section, American Statistical Association, 1–8.
  • R Core Team. (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
  • Scott, D. W. (1979). On optimal and data-based histograms. Biometrika, 66(3), 605–610. https://doi.org/10.1093/biomet/66.3.605
  • Scott, D. W. (2015). Multivariate density estimation: Theory, practice, and visualization (2nd ed.). John Wiley & Sons.
  • Silverman, B. W. (1986). Density estimation for statistics and data analysis. Chapman and Hall/CRC.
  • Sturges, H. A. (1926). The choice of a class interval. Journal of the American Statistical Association, 21(153), 65–66. https://doi.org/10.1080/01621459.1926.10502161
  • Wickham, H. (2016). ggplot2: Elegant graphics for data analysis (2nd ed.). Springer-Verlag New York. https://ggplot2.tidyverse.org/
  • Wilkinson, L. (2005). The grammar of graphics (2nd ed.). Springer Science & Business Media.

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

looti, M. (2026, أغسطس 29). لغة R: كيفية تغيير عدد الفئات في المدرج التكراري. عرب سايكلوجي. https://arabpsychology.com/statistics/r-how-to-change-number-of-bins-in-histogram/
looti, Mohammed. “لغة R: كيفية تغيير عدد الفئات في المدرج التكراري.” عرب سايكلوجي, 29 أغسطس 2026, https://arabpsychology.com/statistics/r-how-to-change-number-of-bins-in-histogram/.
looti, Mohammed. “لغة R: كيفية تغيير عدد الفئات في المدرج التكراري.” عرب سايكلوجي. أغسطس 29, 2026. https://arabpsychology.com/statistics/r-how-to-change-number-of-bins-in-histogram/.