برمجة Rتحليل البيانات

كيفية إجراء تنظيف البيانات في R (مع مثال)

دليل أكاديمي شامل يوضح كيفية إجراء تنظيف البيانات في R مع أمثلة عملية لمعالجة القيم المفقودة، التكرار، والبيانات الشاذة لضمان دقة التحليل الإحصائي.

Mohammed looti أكاديمي وباحث متخصص في علم النفس
تاريخ النشر
تمت المراجعة العلمية · د. مروة عبد العظيم · 11 سبتمبر، 2026
مراجعة وتدقيق علمي معتمد تاريخ التدقيق: 11 سبتمبر، 2026
د. مروة عبد العظيم دكتوراه
أستاذة علم النفس جامعة كربلاء
معايير التدقيق والاعتماد السريري

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

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

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

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

1. مقدمة إلى تنظيف البيانات في بيئة R وأهميته المنهجية

1.1 مفهوم تنظيف البيانات (Data Cleaning) في البحث العلمي

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

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

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

1.2 الآثار المترتبة على البيانات غير النظيفة في التحليلات الإحصائية

يترتب على التهاون في تنظيف البيانات عواقب وخيمة تمس عمق التحليلات الإحصائية وتفسد مخرجاتها الرياضية. وتأتي في طليعة هذه المخاطر مشكلة انخفاض القوة الإحصائية (Statistical Power) للاختبارات؛ إذ إن وجود قيم مفقودة بصورة عشوائية يؤدي إلى تقليص الحجم الفعلي للعينة المتاحة للتحليل، مما يُضعف قدرة النماذج على اكتشاف الفروق المعنوية أو التأثيرات الحقيقية بين المتغيرات في حال وجودها، ويقود بالتالي إلى الوقوع في الخطأ من النوع الثاني (Type II Error). فضلاً عن ذلك، فإن وجود فجوات في البيانات يؤدي إلى اختلال التوازن في التصاميم التجريبية متعددة العوامل، مما يعقّد العمليات الحسابية ويفرض استخدام تقريبات إحصائية قد تقلل من دقة التقديرات المقدرة للمعالم السكانية.

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

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

1.3 دور لغة R وحزم Tidyverse في تبسيط معالجة البيانات

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

وقد بلغت قوة R ذروتها مع نشوء وتطور منظومة حزم Tidyverse التي وضع أسسها المنهجية العالم Hadley Wickham ورفاقه. تقوم الفلسفة البرمجية لهذه المنظومة على مفهوم البيانات الأنيقة (Tidy Data)، حيث يُمثل كل صف ملاحظة فردية مستقلة، ويمثل كل عمود متغيراً علمياً فريداً، وتحتوي كل خلية على قيمة قياسية واحدة محددة. يضمن هذا التوحيد الصارم لسياقات الدوال وتسمياتها سهولة تتبع الخطوات المنطقية للتحويلات، حيث تعتمد المنظومة على أفعال لغوية صريحة ومعبرة دلالياً مثل filter، mutate، select، وsummarise، مما يجعل الشفرة البرمجية بمثابة نص سردي يشرح ذاته بذاته، ويسهل مراجعته وتنقيحه والتحقق من سلامته المنهجية.

تتجلى هذه الأفضلية عند المقارنة بين الدوال التأسيسية القاعدية للغة R (Base R) والأدوات المعاصرة داخل Tidyverse. فبينما تعتمد دوال Base R الكلاسيكية على أنماط فهرسة معقدة تعتمد على الأقواس المربعة والتكرار الممل لأسماء الكائنات (مثل data[data$var > 5, ])، توفر دوال Tidyverse صياغة مقروءة وواضحة ترتبط بسلاسة من خلال مشغلات الربط التسلسلي. هذا النهج يقلل من احتمالية ارتكاب الأخطاء البرمجية التافهة كإسقاط الفواصل أو الخلط بين المتجهات والمصفوفات، فضلاً عن تقديم أداء حوسبي متفوق عند التعامل مع أحجام بيانات ضخمة، مما يجعل مسار معالجة البيانات تجربة علمية محكمة تجمع بين الكفاءة البرمجية والوضوح الدلالي.

2. إعداد بيئة العمل واستيراد الحزم البرمجية الأساسية في R

2.1 تثبيت وتحميل حزمة dplyr للتعامل مع هياكل البيانات

تُمثل حزمة dplyr حجر الزاوية في منظومة معالجة وتدقيق أطر البيانات في لغة R، حيث صُممت خصيصاً لتوفير نحو نحوي مبسط وفعال يختصر أعقد العمليات التعديلية في مجموعة من الدوال الأساسية المتجانسة. تبدأ عملية تهيئة بيئة العمل عبر تثبيت الحزمة مباشرة من المستودع الرسمي المعتمد لشبكة أرشيف R الشاملة (CRAN). يتم التثبيت من خلال استدعاء الأمر النظامي المخصص لذلك، لتقوم البيئة تلقائياً بتنزيل الحزمة مع كافة الاعتماديات البرمجية المرتبطة بها:

install.packages("dplyr")

وبمجرد اكتمال عملية التثبيت بنجاح داخل النظام، يتعين على المحلل استدعاء الحزمة إلى مساحة الذاكرة النشطة للجلسة البرمجية عبر استخدام دالة التحميل المرجعية:

library(dplyr)

تتيح حزمة dplyr للمحلل ترسانة برمجية متكاملة تسمى في الأدبيات بـ “أفعال معالجة البيانات” (Verbs of Data Manipulation). تتضمن هذه الأفعال دالة select المخصصة لاقتطاع وعزل متغيرات وأعمدة محددة بالاسم أو النوع، ودالة filter التي تتيح استخلاص صفوف معينة بناءً على شروط ومعايير منطقية صارمة، ودالة mutate المستخدمة لحساب وإضافة متغيرات جديدة أو تعديل قيم الأعمدة القائمة، ودالة arrange لترتيب وتصنيف المشاهدات تصاعدياً أو تنازلياً وفق محددات رقمية أو أبجدية، فضلاً عن دالتي group_by وsummarise اللتين تمكّنان الباحث من تقسيم البيانات إلى مجموعات فرعية واستخراج المقاييس الإحصائية التلخيصية لكل فئة على حدة بأعلى درجات الدقة والكفاءة.

من أهم المزايا المنهجية التي تمنحها حزمة dplyr للمحللين هو توظيف مشغل الربط التسلسلي للأنابيب (Pipe Operator)، والذي يُرمز له بالرمز %>% في حزمة magrittr، أو المشغل الأصيل المدمج حديثاً في الإصدارات المتقدمة من R ورمزه |>. يعمل هذا المشغل كوسيط تدفق ينقل مخرجات الدالة البرمجية السابقة لتصبح مدخلاً مباشراً للدالة البرمجية اللاحقة دون الحاجة إلى إنشاء متغيرات وكائنات وسيطة تثقل الذاكرة العشوائية وتزيد من فوضى بيئة العمل. إن الاعتماد على مشغل الربط التسلسلي يُحوّل كود التنظيف إلى مسار متدفق متماسك يُقرأ من اليسار إلى اليمين ومن الأعلى إلى الأسفل، مما يعزز سهولة صيانة الكود، ويسرع اكتشاف الأخطاء البرمجية (Debugging)، ويوفر وثيقة إجرائية واضحة المعالم لكافة التدخلات التي طرأت على البيانات.

2.2 توظيف حزمة tidyr لإعادة هيكلة البيانات المفقودة وتنظيمها

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

install.packages("tidyr")
library(tidyr)

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

وعلاوة على إعادة الهيكلة الهندسية، تلعب حزمة tidyr دوراً استثنائياً في إدارة وتنقية البيانات المفقودة (Missing Data)، إذ تحتوي على دوال متخصصة وعالية الكفاءة لمعالجة الفراغات غير المعرفة داخل المتغيرات الرقمية والفئوية. ومن أبرز هذه الأدوات دالة drop_na التي تتيح إسقاط المشاهدات التي تتضمن قيماً مفقودة بناءً على عمود محدد أو عبر مصفوفة البيانات بأكملها، ودالة replace_na التي تمكّن المحلل من استبدال وتمرير قيم تعويضية محددة سلفاً لملء الفراغات المفقودة، ودالتي fill وcomplete الموجهتين للتعامل مع الفقد في البيانات المتسلسلة زمنياً أو التصاميم التجريبية المتوازنة.

يُحقق التكامل الوظيفي المباشر بين حزمتي tidyr وdplyr بيئة متجانسة تمكّن الباحث من تشكيل وتنقية البيانات ضمن مسار برمجي موحد لا ينقطع. فعلى سبيل المثال، يستطيع المحلل البدء بعملية إعادة هيكلة لأبعاد الجدول عبر pivot_longer، ثم تمرير النتائج مباشرة عبر مشغل الأنابيب لتنقية القيم المفقودة عبر replace_na، يعقب ذلك فرز وتعديل المتغيرات باستخدام mutate وfilter. هذا التعاضد بين الحزمتين يلغي التنافر النحوي والاصطلاحي الذي يعيب استخدام حزم برمجية متعددة المصادر، ويؤسس لنهج عمل موحد يتسم بالانضباط والجمال المنهجي والسرعة الفائقة.

2.3 تهيئة مساحة العمل وضبط معايير المعالجة المسبقة

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

rm(list = ls())

كما يُستحسن تنظيف واجهة الأوامر وشاشات الرسوم لضمان بيئة عمل خالية من المشتتات والمدخلات المهملة، واستدعاء دالة جمع المهملات البرمجية gc() لتحرير مساحات الذاكرة المحجوزة لدى نظام التشغيل.

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

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

set.seed(123)

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

3. إنشاء وفحص إطار البيانات التجريبي (Data Frame)

3.1 بناء إطار البيانات الخاص بلاعبي كرة السلة

لتجسيد كافة المفاهيم المنهجية لتنظيف البيانات في قالب تطبيقي واقعي، سنقوم ببناء إطار بيانات تجريبي (Data Frame) يحاكي مصفوفة بيانات واقعية مستقاة من سجلات الأداء الفني للاعبي كرة السلة في إحدى الدوريات التنافسية. يتم تشييد هذا الإطار من خلال دالة data.frame التأسيسية، ليشمل أربعة متغيرات أساسية تغطي الأبعاد الوصفية والمهارية للرياضيين: اسم الفريق التابع له اللاعب (team)، وعدد النقاط المسجلة (points)، والمتابعات الدفاعية والهجومية للكرات المرتدة (rebounds)، والتمريرات الحاسمة التي أدت إلى تسجيل مباشر (assists).

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

df <- data.frame(
  team = c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
  points = c(12, 12, 15, 22, 19, 86, 14, 18, NA, 24),
  rebounds = c(7, 7, NA, 8, 11, 6, 9, NA, 5, 8),
  assists = c(3, 3, 5, 4, 6, 7, NA, 4, 8, 10)
)

نلاحظ من خلال التدقيق في تركيبة هذا المصفوفة أن الصفين الأول والثاني متطابقان تماماً في كافة القيم لكافة المتغيرات (الفريق A، النقاط 12، المتابعات 7، التمريرات 3)، مما يمثل حالة نموذجية للسجلات المكررة غير المشروعة. كما نلاحظ غياب نقطة بيانات في متغير النقاط لدى اللاعب التاسع، وغياب قيمتين في متغير المتابعات لدى اللاعبين الثالث والثامن، وقيمة مفقودة في التمريرات الحاسمة لدى اللاعب السابع. أما اللاعب السادس، فقد سُجل له رصيد هائل من النقاط بلغ 86 نقطة، وهو رقم مريب يبتعد بشكل غير طبيعي عن باقي درجات التوزيع التي تدور حول متوسط يتراوح بين 12 و24 نقطة، مما يجعله نموذجاً متكاملاً لاختبار استراتيجيات التنظيف الصارمة في R.

3.2 الفحص الاستكشافي الأولي لمصفوفة البيانات

بمجرد اكتمال بناء إطار البيانات أو استيراده من مصدر خارجي، تبدأ المرحلة المنهجية الأولى والمتمثلة في الفحص الاستكشافي الأولي للأعمدة والصفوف لتشخيص الواقع الميداني للمصفوفة. تُعد دالة str(df) الأداة التحليلية الأكثر أهمية في هذه العتبة، حيث تعرض بنية الكائن البرمجي الداخلي (Internal Structure)، موضحة عدد الصفوف الكلي (10 مشاهدات) وعدد الأعمدة (4 متغيرات)، بالإضافة إلى إيضاح النمط التخزيني لكل متغير (سواء كان سلسلة نصية chr أو متجهاً رقمياً num أو صحيحاً int). إن التحقق من مطابقة نوع التخزين البرمجي مع الطبيعة الرياضية للبيانات يمثل خط الدفاع الأول لتفادي مشكلات انهيار الدوال الحسابية لاحقاً.

تلي خطوة الفحص البنيوي مرحلة استخلاص الملخص الإحصائي التلخيصي الشامل عبر استدعاء دالة summary(df). توفر هذه الدالة لقطة بانورامية سريعة لمقاييس النزعة المركزية والتشتت الخاصة بكل متغير رقمي، حيث تظهر القيمة الصغرى (Minimum)، والربيع الأول (1st Quartile)، والوسيط الحسابي (Median)، والمتوسط الحسابي (Mean)، والربيع الثالث (3rd Quartile)، والقيمة العظمى (Maximum). علاوة على ذلك، تتميز دالة summary بقدرتها التلقائية على حصر وتذييل عدد القيم المفقودة صراحة في نهاية جدول كل متغير تحت وسم NA's، مما يمنح الباحث تقييماً أولياً فورياً لحجم الفقد الإحصائي داخل كل بعد على حدة.

ولاستكمال النظرة الاستكشافية المباشرة، يعتمد المحلل على دالتي head(df, n = 5) وtail(df, n = 5) لمعاينة المقاطع العلوية والسفلية من إطار البيانات بالعين المجردة. تتيح هذه المعاينة الميدانية السريعة رصد التناقضات السافرة في تسجيل الرموز، كوجود مسافات فارغة غير مرئية في حقول النصوص، أو ظهور قيم سالبة شاذة، أو ملاحظة تماثل الإدخالات المتتالية بالعين المجردة قبل تشغيل دوال الفحص الحسابي الآلي، مما يمهد لبناء استراتيجية التنظيف بصورة منهجية ومنظمة دون قفز على المراحل التأسيسية.

3.3 تشخيص المشكلات الهيكلية الأولية في المجموعة التجريبية

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

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

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

4. تشخيص واكتشاف القيم المفقودة (Missing Values) في R

4.1 التمييز المنهجي بين أنماط الفقد الإحصائي

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

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

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

4.2 حصر وتحديد مواقع القيم المفقودة برمجياً

توفر بيئة R ترسانة برمجية صارمة تمكن المحلل من كشف وتتبع القيم المفقودة وتحديد إحداثياتها داخل المصفوفات بدقة فائقة. تبدأ هذه العملية بالدالة المنطقية التأسيسية is.na()، والتي تقوم بفحص كل عنصر أو خلية داخل الكائن البرمجي وتوليد مصفوفة مطابقة من القيم المنطقية (Boolean)، تأخذ القيمة TRUE إذا كانت الخلية مفقودة (NA)، والقيمة FALSE إذا كانت الخلية تحتوي على قيمة صالحة. ولأن لغة R تعامل القيمة TRUE حسابياً كرقم 1 والقيمة FALSE كرقم 0، فإن دمج هذه الخاصية مع العمليات التجميعية يفتح آفاقاً رحبة للتدقيق الإحصائي السريع.

لحساب التكرار المطلق للقيم المفقودة في كل متغير من متغيرات إطار البيانات على حدة، يقوم المحلل بتطبيق دالة الجمع على الأعمدة colSums() بالاقتران المباشر مع الدالة المنطقية is.na()، وفق التركيب البرمجي التالي:

colSums(is.na(df))

يُنتج هذا السطر البرمجي متجهاً يوضح العدد الدقيق للفراغات في كل عمود، ليُظهر لنا فوراً أن متغير team خالٍ تماماً من الفقد (0)، في حين يحتوي points على قيمة مفقودة واحدة (1)، وrebounds على قيمتين مفقودتين (2)، وassists على قيمة مفقودة واحدة (1). كما يمكن حساب إجمالي الفراغات في كامل مصفوفة البيانات عبر استدعاء sum(is.na(df))، مما يمنح إحصاءً كلياً لحجم الفجوات في النسيج البياني قيد المعالجة.

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

colMeans(is.na(df)) * 100

تكشف هذه النسب عن مدى تجاوز الفقد للعتبات الإحصائية المقبولة؛ فبينما يُعد فقدان 10% من بيانات النقاط هامشياً نسبياً، فإن فقدان 20% من متغير المتابعات يُعتبر مؤشراً حرجاً يتطلب حذراً بالغاً في التعامل المنهجي، إذ تشير الأدبيات إلى أن تجاوز الفقد لعتبة 5% يستلزم تحليلاً إحصائياً معمقاً لتفادي المخاطر الناتجة عن الحذف العشوائي.

4.3 التمثيل البصري للبيانات المفقودة لتقييم عمق المشكلة

لا يكتفي المحلل الإحصائي المتمكن بالجداول الرقمية المجردة لحصر الفقد، بل يستعين بالتمثيل البصري الاستكشافي للبيانات المفقودة بوصفه وسيلة تحليلية فائقة الفعالية تكشف عن الأنماط والتكتلات الهيكلية المشتركة بين المتغيرات. تساعد الرسوم البيانية الاستكشافية في الإجابة عن سؤال منهجي حاسم: هل تتزامن الفجوات المفقودة في متغير معين مع فجوات في متغيرات أخرى في ذات الصفوف والمشاهدات؟ إن اكتشاف تكتلات الفقد المشترك (Co-occurrence of Missingness) يلقي ضوءاً كاشفاً على آليات جمع البيانات وظروف تسجيلها في الميدان التجريبي.

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

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

5. الطريقة الأولى: إزالة الصفوف المحتوية على قيم مفقودة (Listwise Deletion)

5.1 التطبيق البرمجي لدالة na.omit في بيئة R

تُعد إزالة الصفوف غير المكتملة، والمعروفة في الأدبيات المنهجية بحذف الحالات الكامل (Listwise Deletion أو Complete-Case Analysis)، أقدم وأبسط الاستراتيجيات المتبعة للتعامل مع البيانات المفقودة في برمجيات الحوسبة الإحصائية. في البيئة القاعدية للغة R، يتم تنفيذ هذا الإجراء عبر الدالة القياسية na.omit(). عند تمرير إطار البيانات إلى هذه الدالة، فإنها تقوم بمسح مصفوفي لكافة الصفوف، وتستبعد على الفور أي صف يحتوي على قيمة مفقودة واحدة (NA) على الأقل في أي عمود من أعمدته، محتفظة فقط بالصفوف النقية بالكامل والمكتملة العناصر:

df_clean_omit <- na.omit(df)

كما يمكن تحقيق ذات النتيجة بدقة وبصياغة متوافقة مع منظومة الأنابيب في حزمة tidyr باستخدام دالة drop_na()، كالتالي:

df_clean_drop <- df %>% drop_na()

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

تجدر الإشارة إلى أن دالة drop_na() تتميز بمرونة منهجية تتفوق بها على na.omit()، حيث تتيح للمحلل حصر عملية الإسقاط في متغيرات محددة وحرجة للغاية للدراسة دون المساس بالصفوف التي تتضمن فقداً في متغيرات ثانوية أخرى. فعلى سبيل المثال، يؤدي كتابة df %>% drop_na(points) إلى إسقاط الصف التاسع فقط الذي يعاني من فقدان النقاط، مع الإبقاء على الصفوف التي تتضمن فقداً في المتابعات والتمريرات، وهو ما يمنح الباحث مساحة تحكم دقيقة في إدارة خسائر العينة وفق أولويات النمذجة المعتمدة.

5.2 المسوغات المنهجية والمزايا الإحصائية للحذف التام

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

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

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

5.3 العيوب والمحاذير المرتبطة بإسقاط الحالات الناقصة

في المقابل، تحفل الأدبيات الإحصائية بسيل جارف من التحذيرات المنهجية التي تندد بالإسقاط التلقائي وغير المدروس للحالات الناقصة، نظراً لما يترتب عليه من عيوب قاتلة للتحليل الاستدلالي. أول هذه العيوب وأوضحها يتمثل في التآكل الحاد للقوة الإحصائية (Statistical Power) للاختبارات؛ إذ إن خسارة نسبة معتبرة من الملاحظات—كما حدث في مثالنا التجريبي بفقدان 40% من العينة—يؤدي حتماً إلى تضخيم الخطأ المعياري للتقديرات، واتساع فترات الثقة، وفشل الاختبارات في رصد التأثيرات والعلاقات الارتباطية الدقيقة التي كانت لتظهر بوضوح لو ظلت العينة بحجمها الأصلي المتكامل.

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

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

6. الطريقة الثانية: تعويض القيم المفقودة بالوسيط الحسابي (Imputation)

6.1 تطبيق دالتي mutate و across لاستهداف الأعمدة الرقمية

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

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

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

6.2 استخدام دالة replace_na وحساب وسيط العمود

لتنفيذ عملية الاستبدال الرقمي داخل المتغيرات المستهدفة، يتم توظيف دالة replace_na() المنتمية لحزمة tidyr بالتكامل مع الدالة الإحصائية المخصصة لحساب الوسيط median(). تتطلب هذه الخطوة انتباهاً منهجياً خاصاً؛ إذ إن حساب الوسيط لعمود يحتوي على قيم مفقودة سينتج عنه تلقائياً قيمة NA غير معرفة في R ما لم يتم تمرير المعامل المنطقي الإلزامي na.rm = TRUE. يوجه هذا المعامل الدالة إلى تجريد العمود مؤقتاً من فراغاته أثناء عملية الحساب وحساب الوسيط بالاعتماد حصراً على القيم الرقمية المشاهدة والمتاحة بالفعل:

df_clean_median <- df %>%
  mutate(across(where(is.numeric), ~ replace_na(., median(., na.rm = TRUE))))

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

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

6.3 المبررات الإحصائية لاختيار الوسيط بدلاً من المتوسط الحسابي

يفرض التفكير المنهجي الرصين تقديم مبررات إحصائية واضحة للإجابة عن التساؤل المنهجي البديهي: لماذا تم اختيار الوسيط الحسابي (Median) كقيمة تعويضية في هذا السياق بدلاً من المتوسط الحسابي (Mean) التقليدي والأكثر شيوعاً؟ تكمن الإجابة في الخاصية الرياضية الجوهرية المعروفة بـ “المتانة الإحصائية” أو “المقاومة” (Robustness). فالوسيط الحسابي يُمثل النقطة الوسطى التي تقسم التوزيع التكراري إلى نصفين متساويين، وهي قيمة موقعية لا تتأثر مطلقاً بالقيم الطرفية المتطرفة أو الشاذة، بخلاف المتوسط الحسابي الذي يدخل في حسابه المجموع الجبري لكافة المشاهدات مقسوماً على عددها.

في مصفوفة البيانات التجريبية التي بين أيدينا، يحتوي متغير النقاط على قيمة شاذة للغاية بلغت 86 نقطة مسجلة للاعب السادس. لو لجأ المحلل إلى التعويض عبر المتوسط الحسابي، فإن هذه القيمة الشاذة كانت ستؤدي إلى سحب المتوسط نحو الأعلى بصورة مصطنعة ومضللة، ليرتفع المتوسط الحسابي للنقاط إلى ما يقارب 23.9 نقطة. ونتيجة لذلك، كانت القيمة المفقودة للاعب التاسع ستُعوَّض بنحو 24 نقطة، وهي قيمة مضخمة ولا تعكس الأداء النمطي لأغلب اللاعبين الذين تراوحت درجاتهم الحقيقية بين 12 و19 نقطة، مما يُدخل تشويهاً منهجياً متعمداً داخل التوزيع التكراري للبيانات.

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

7. تقنيات متقدمة للتعويض الإحصائي عن البيانات المفقودة في R

7.1 التعويض القائم على الانحدار والنمذجة التنبؤية

على الرغم من متانة التعويض بالوسيط مقارنة بالمتوسط، إلا أنه يظل أسلوباً أحادياً (Univariate) يعالج المتغير بمعزل عن شبكة علاقاته وبنيته التضامنية مع المتغيرات الأخرى في مصفوفة البيانات. لتجاوز هذا القصور المنهجي، تتجه الممارسات الإحصائية المتقدمة نحو “التعويض القائم على الانحدار” (Regression Imputation)، حيث تُبنى نماذج رياضية تنبؤية تستخدم المتغيرات المكتملة كمحددات مفسرة (Independent Variables) لتقدير وتوقع القيم المفقودة في المتغير الهدف (Dependent Variable).

في إطار دراسة حالة لاعبي كرة السلة، بدلاً من تعويض التمريرات الحاسمة المفقودة للاعب السابع بوسيط عام ثابت، يمكن صياغة نموذج انحدار خطي متعدد يتنبأ بالتمريرات استناداً إلى متغيري النقاط والمتابعات الخاصة بذلك اللاعب ذاته، عبر استدعاء دالة الانحدار الخطي lm(assists ~ points + rebounds, data = df) وتطبيق دالة التنبؤ predict() لملء الخانة الفارغة. يضمن هذا التقدير المستند إلى النمذجة أن تعكس القيمة التعويضية النسق الفني الخاص بذلك اللاعب تحديداً وتناغمه مع منظومة أدائه الفردي المقاس بدقة أكبر من مجرد فرض رقم وسيط موحد على الجميع.

ورغم القوة التفسيرية الفائقة لطريقة الانحدار، إلا أن لها حدوداً ومنزلقات إحصائية يتعين على الباحث التحوط منها بحذر؛ إذ إن التعويض الحتمي عبر معادلة الانحدار الصرفة يفترض أن القيمة المفقودة تقع تماماً فوق خط الانحدار النظري، مما يُلغي عنصر التباين العشوائي المتبقي (Residual Variance). يؤدي هذا التحديد الصارم إلى تضخيم غير واقعي لمعاملات الارتباط (Overestimation of Correlation) وتضييق وهمي للخطأ المعياري للنموذج، مما يفرض أحياناً إضافة صدمة عشوائية مشتقة من تباين البواقي (Stochastic Regression Imputation) لاستعادة التباين الطبيعي الكامن في الظواهر الإنسانية والرياضية الحية.

7.2 التعويض المتعدد عبر المعادلات المتسلسلة (MICE)

يمثل “التعويض المتعدد عبر المعادلات المتسلسلة” (Multiple Imputation by Chained Equations)، والمعروف اختصاراً بـ MICE، المعيار الذهبي المعتمد في الأوساط الأكاديمية والبحثية الرصينة للتعامل مع معضلة البيانات المفقودة. تتجاوز هذه المنهجية المتطورة عيوب التعويض الفردي من خلال الاعتراف الصريح بحالة “عدم اليقين” (Uncertainty) المحيطة بالقيمة المقدرة، حيث لا تقوم بتوليد قيمة تعويضية واحدة، بل تُنشئ عدداً (m) من مجموعات البيانات المكتملة والمتوازية (تتراوح عادة بين 5 إلى 20 مصفوفة)، تحوي كل منها قيماً تقديرية مختلفة قليلاً ومستخلصة من التوزيعات الاحتمالية الشرطية للمتغيرات قيد الدراسة.

في بيئة R، تُدار هذه العملية الحسابية المتطورة عبر حزمة mice الشهيرة، والتي يتم تثبيتها واستدعاؤها بسهولة:

install.packages("mice")
library(mice)

تعتمد الحزمة على دالة النمذجة المركزية mice(df, m = 5, method = 'pmm', seed = 123)، حيث يتم تحديد أسلوب المطابقة التنبؤية (Predictive Mean Matching – PMM) للمتغيرات الرقمية، وهو أسلوب شبه معياري يضمن أن تكون القيم المعوضة واقعية ومستمدة من مشاهدات حقيقية موجودة أصلاً داخل العينة الأصلية، مما يمنع توليد أرقام كسرية أو غير منطقية لمتغيرات القياس المنفصلة كعدد النقاط أو التمريرات.

تكتمل دورة التعويض المتعدد بتطبيق النموذج الإحصائي المستهدف (كنموذج انحدار خطي أو لوجستي) على كل مصفوفة من المصفوفات الخمس المولدة بصورة مستقلة عبر دالة with()، ثم تجميع ودمج النتائج التقديرية النهائية في تقرير تركيبي موحد عبر دالة pool()، استناداً إلى قواعد روبن المعيارية (Rubin’s Rules). تقوم هذه القواعد الرياضية بحساب التباين الكلي كحاصل جمع للتباين داخل مجموعات البيانات والتباين بين مجموعات البيانات المتعددة، مما يعكس بدقة متناهية أثر البيانات المفقودة على عدم اليقين في المعالم المقدرة، ويوفر فترات ثقة وقيم معنوية (P-values) نزيهة علمياً ومحصنة ضد التزييف والتضخيم الوهمي.

7.3 تحليل الحساسية لمقارنة طرائق المعالجة المختلفة

يختتم الباحث المنهجي مرحلة التعامل مع البيانات المفقودة بتطبيق ما يُعرف في الأدبيات بـ “تحليل الحساسية” (Sensitivity Analysis)، وهو فحص إحصائي مقارن يهدف إلى اختبار مدى استقرار وثبات النتائج والمؤشرات الوصفية والاستدلالية عبر طرائق المعالجة المختلفة (الحذف التام، التعويض بالوسيط، التعويض بالانحدار، والتعويض المتعدد عبر MICE). يساعد هذا التحليل الاستقصائي في الكشف عما إذا كانت القرارات الاستنتاجية للبحث تتغير جوهرياً بتغير خوارزمية تنظيف البيانات المعتمدة، أم أنها نتائج أصيلة ومستقرة وغير حساسة لتقنية المعالجة المتبعة.

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

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

8. معالجة السجلات المكررة (Duplicate Rows) وتطهير البيانات

8.1 الكشف عن التكرارات المتطابقة عبر دالة duplicated

تُمثل السجلات المكررة (Duplicate Rows) داخل مصفوفات البيانات تشوهاً بيانياً واسع الانتشار، ينشأ غالباً عن أخطاء تقنية أثناء تصدير الجداول من قواعد البيانات، أو نتيجة الازدواجية في التسجيل اليدوي عبر الاستمارات الاستقصائية، أو التكرار العرضي أثناء عمليات دمج وتجميع الملفات الفرعية. يبدأ المسار المنهجي لمعالجة هذا الخلل بالكشف الصارم عن التكرارات المتطابقة داخل مصفوفة لاعبي كرة السلة التجريبية عبر الاستعانة بالدالة المنطقية القياسية duplicated() المتوفرة في البيئة التأسيسية للغة R.

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

sum(duplicated(df))

يُنتج هذا الأمر الرقم (1) في مثالنا التجريبي، مؤكداً وجود صف فائض مكرر بالكامل يجب الوقوف على أسبابه الميدانية.

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

df[duplicated(df), ]

يُظهر هذا السطر البرمجي الصف الثاني المخصص للاعب الفريق A بكافة بياناته المكررة (12 نقطة، 7 متابعات، 3 تمريرات). إن فحص هذا الصف المعزول يؤكد للباحث بما لا يدع مجالاً للشك أن هذا السجل هو نسخة كربونية متطابقة مع الصف الأول، وأن وجوده لا يمثل حالة قياس مستعرضة جديدة، بل هو عطب توثيقي يستوجب التطهير الحاسم لاستعادة التوازن الهيكلي للعينة الإحصائية.

8.2 إزالة التكرارات باستخدام دالة distinct في dplyr

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

df_clean_distinct <- df %>% distinct()

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

بتطبيق هذا التدخل البرمجي على إطار البيانات التجريبي الخاص بنا، نلحظ فوراً انخفاض عدد الصفوف من 10 إلى 9 صفوف، حيث تم إسقاط الصف الثاني المتطابق واحتُفظ بالصف الأول بأمان تام. وعلاوة على ذلك، توفر دالة distinct() للمحلل إمكانية التدقيق في التكرار الجزئي؛ فإذا رغب الباحث في التأكد من عدم تكرار لاعبين يحملون نفس تركيبة المتغيرات الفئوية (كالفريق والنقاط معاً)، يمكنه تمرير أسماء تلك الأعمدة كمدخلات للدالة مثل df %>% distinct(team, points, .keep_all = TRUE)، مما يمنح مسار التنظيف حصانة وقدرة تفصيلية على التعامل مع مختلف سيناريوهات التكرار الشكلي والموضوعي في قواعد البيانات.

8.3 المعايير المنهجية للتعامل مع التكرارات في التجارب المتكررة

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

لتفادي الوقوع في خطأ الحذف الجائر لمشاهدات واقعية متماثلة عن طريق الخطأ، تبرز الضرورة المنهجية القصوى لوجود “المعرف الفريد” (Unique Identifier / Primary Key)، مثل رقم تعريف اللاعب (player_id)، أو رمز الملاحظة، أو الطابع الزمني للرصد (Timestamp). إن وجود هذا المتغير المعرف يحمي البيانات من سوء التقدير، حيث لا يُعد السجل مكرراً إلا إذا تطابق المعرف الفريد مع كافة المتغيرات المرافقة، مما يتيح لخوارزميات الفرز مثل distinct(player_id, .keep_all = TRUE) التمييز بذكاء بين تسجيل متكرر لنفس الشخص وتسجيل مطابق بالصدفة لشخص آخر مستقل تماماً.

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

9. معالجة القيم الشاذة والمتطرفة (Outliers) في المتغيرات الرقمية

9.1 طرق الكشف الإحصائي عن القيم المتطرفة في R

تُمثل القيم الشاذة والمتطرفة (Outliers) مشاهدات تبتعد بمسافات شاسعة وغير اعتيادية عن مركز الكتلة العامة لتوزيع البيانات، مما يجعلها تبدو كأنها قد تولدت بفعل آلية رياضية مختلفة تماماً عن باقي أفراد العينة. يمتلك المحلل الإحصائي في بيئة R ترسانة متكاملة من الأدوات الاستكشافية والمعيارية لكشف هذا الشذوذ بدقة متناهية. تأتي في مقدمة الطرق التوزيعية الحرة طريقة “المدى الربيعي” (Interquartile Range – IQR) التي وضع قواعدها الإحصائي الشهير جون توكي (John Tukey). يتم تطبيق هذه الطريقة عبر حساب الفرق بين الربيع الثالث (Q3) والربيع الأول (Q1)، ومن ثم وضع حدود افتراضية صارمة للشذوذ؛ حيث يُعتبر أي رقم يقل عن Q1 - 1.5 * IQR أو يزيد عن Q3 + 1.5 * IQR قيمة متطرفة خفيفة، في حين يُصنف ما يتجاوز حاجز الثلاثة أضعاف كقيمة متطرفة قصوى وشديدة الخطورة.

تتم ترجمة طريقة توكي في بيئة R عبر دوال كلاسيكية شديدة الفعالية، حيث يمكن استخراج حدود المدى الربيعي ومواضع التطرف من خلال استدعاء دالة IQR() ودالة quantile(). كما توفر الطريقة المعيارية القائمة على “الدرجات المعيارية” (Z-Scores) أسلوباً موازياً في حال كانت البيانات تتبع التوزيع الطبيعي الاعتدالي التقريبي؛ حيث يتم تحويل الدرجات الخام إلى درجات معيارية عبر دالة التنميط والتمركز scale()، ليُحكم على أي مشاهدة تتجاوز درجتها المعيارية المطلقة حاجز الثلاثة انحرافات معيارية (|Z| > 3) بأنها شذوذ إحصائي مؤكد يتطلب فحصاً تحليلياً عاجلاً.

ولأن الإدراك البصري يمثل مكملاً لا غنى عنه للحساب الجبري، يعتمد الباحث على أداة “المخطط الصندوقي” (Boxplot) كإجراء تشخيصي سريع وفائق الوضوح. يتم إنشاء هذا المخطط في R عبر الدالة القاعدية boxplot(df$points, main = "Boxplot of Points")، أو عبر حزم العرض البياني المتقدمة مثل ggplot2 عبر إضافة طبقة geom_boxplot(). يقوم المخطط الصندوقي بتمثيل الربيعات والوسيط في مستطيل وسطي مدمج، في حين تبرز القيم الشاذة المتطرفة كنقاط منفردة ومعزولة تسبح بعيداً خلف خطوط الشوارب (Whiskers)، مما يمنح المحلل تنبيهاً مرئياً فورياً يحدد موضع الشذوذ بدقة قاطعة.

9.2 تحليل القيمة المتطرفة في المثال التطبيقي (النقاط = 86)

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

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

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

9.3 استراتيجيات التعامل المنهجي مع الشذوذ الإحصائي

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

df_no_outlier <- df %>%
  mutate(points = ifelse(points > 50, NA, points))

تتمثل الاستراتيجية المنهجية الثانية في تطبيق تقنية “التهذيب الإحصائي” (Winsorization)، وهي أسلوب متين ينتمي لعائلة الإحصاءات المقاومة، ويهدف إلى تحجيم أثر التطرف دون حذف المشاهدة بالكامل. تقوم هذه التقنية بإعادة ضبط وتعديل القيم الشاذة التي تتجاوز حدوداً مئوية معينة (كالشرائح المئينية 95% أو 99%) لتتساوى قيمتها قسراً مع أعلى قيمة مقبولة تقع عند ذلك الحد الحرج. تتوفر هذه المعالجة في حزم إحصائية متعددة في R مثل حزمة DescTools عبر دالة Winsorize()، مما يحفظ للمشاهدة المتطرفة وزنها الترتيبي المرتفع كأداء مميز ولكن ضمن نطاق عددي منضبط لا يدمر معالم التباين العام.

أما الاستراتيجية المنهجية الثالثة، فتعتمد على “التحويلات الرياضية غير الخطية” (Mathematical Transformations) للمتغير بأكمله، وتحديداً التحويل اللوغاريتمي الطبيعي عبر دالة log() أو تحويل الجذر التربيعي sqrt() أو تحويلات بوكس-كوكس (Box-Cox Transformation). تعمل هذه التحويلات الجبرية على تقليص المسافات الشاسعة بين الأرقام الكبيرة في الطرف الأيمن وضغط التوزيع التكراري المنحرف إيجابياً ليعود قريباً من التوزيع الطبيعي المتماثل. تتيح هذه الاستراتيجية الاحتفاظ بكافة المشاهدات كما هي دون شطب أو تبديل، مع تمكين الباحث من استيفاء شروط الخطية والاعتدالية التي تتطلبها نماذج الانحدار المتقدمة، مما يمثل حلاً رياضياً راقياً يجمع بين الأمانة العلمية والانضباط المنهجي الصارم.

10. توحيد أنماط البيانات وتصحيح أنواع المتغيرات (Data Types)

10.1 التحقق من سلامة الأنواع البرمجية للمتغيرات

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

يقوم المحلل بفحص سلامة هذه الأنواع استناداً إلى دالة str() ومجموعة الدوال الاستعلامية المنطقية مثل is.numeric()، is.factor()، وis.character(). وعند اكتشاف أي خلل في التوصيف البنيوي، يبدأ التدخل العلاجي باستخدام عائلة دوال التحويل القياسية التأسيسية. فإذا كان هناك متغير رقمي مشفر كنص، يتم إخضاعه فوراً لدالة التحويل العددي as.numeric() لفك التشفير واستعادة الطبيعة الحسابية للأرقام، مع توخي الحذر الشديد من ظهور قيم مفقودة جديدة بالإكراه (NAs introduced by coercion) إذا احتوى العمود على محارف غير قابلة للتحويل العددي المباشر.

وفيما يتعلق بالمتغيرات التصنيفية والفئوية، كمتغير الفريق (team) في مصفوفة لاعبي كرة السلة، فإن المنهجية الرصينة تقتضي تحويله من سلسلة نصية عامة إلى متغير عاملي منضبط (Factor) عبر دالة as.factor() أو دالة factor() الأكثر تفصيلاً:

df <- df %>% mutate(team = as.factor(team))

يتيح هذا التحويل لبيئة R التعرف على المستويات التصنيفية المحددة للظاهرة (Levels: A, B, C)، وهو شرط هيكلي لا غنى عنه إذا كان الباحث يخطط لإجراء تحليلات التباين (ANOVA) أو إدخال المتغيرات المستقلة الوهمية (Dummy Variables) في نماذج الانحدار الخطي العام، مما يرفع كفاءة المعالجة ويمنع إدخال فئات وهمية غير معرفة أثناء التحليل اللاحق.

10.2 تنظيف السلاسل النصية وتوحيد التسميات

تُعد معالجة وتنقية السلاسل النصية (String Cleaning) من أهم مراحل التدقيق الهيكلي للبيانات، حيث تتسبب الأخطاء البشرية العفوية في إدخال فوضى عارمة داخل المتغيرات الفئوية. من أشهر هذه التشوهات وجود المسافات البيضاء الزائدة (Whitespace) في بداية الكلمات أو نهايتها (كأن يُكتب الفريق “A ” بدلاً من “A”)، أو الخلط العشوائي بين الحروف الكبيرة والحروف الصغيرة (Upper and Lower Case) في اللغات الأجنبية، أو استخدام ترميزات وتسميات مترادفة ومتباينة لنفس الكيان (مثل كتابة “Team A” تارة و”team-a” تارة أخرى). إن لغة R، بحكم حساسيتها لحالة الأحرف والمحارف، ستعامل كل تنويع من هذه التنويعات كفئة تصنيفية مستقلة بذاتها، مما يؤدي إلى تفتيت العينة وتزييف التكرارات بصورة كارثية.

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

وعلاوة على ذلك، تبرز الحاجة إلى تصحيح التسميات الخاطئة والمترادفات المتباينة من خلال تقنيات استبدال الأنماط النصية الموجهة عبر دالتي str_replace() وstr_replace_all()، أو باستخدام الدالة الشرطية الموسعة case_when() التابعة لحزمة dplyr. تمكّن هذه الأدوات المتقدمة المحلل من وضع قواعد إعادة ترميز شاملة تدمج الاختصارات الشاذة في المسميات المعيارية الموحدة وتستأصل الرموز الخاصة وغير المفهومة الناتجة عن أخطاء الترميز اللغوي (Encoding Issues)، مما يعيد للمتغيرات الفئوية اتساقها الشكلي والنوعي ويجعلها جاهزة للمقارنات الإحصائية الصارمة.

10.3 فرض القيود المنطقية على فضاء القيم المقبولة

لا تتوقف جودة البيانات عند حدود ضبط التنسيقات البرمجية والنصية الظاهرة، بل تمتد لتشمل التدقيق المعرفي والموضوعي في معقولية الأرقام المسجلة، وفرض ما يُعرف بـ “القيود المنطقية ومحددات السلامة” (Logical Constraints and Validation Rules) على فضاء القيم المقبولة. ففي سياق قياس الأداء الرياضي للاعبي كرة السلة، تستحيل منطقياً وعملياً رؤية قيم سالبة لمتغيرات الأداء الميداني؛ فلا يمكن للاعب أن يسجل (-3) نقاط، أو (-2) متابعة، أو تمريرات حاسمة سالبة، كما لا يمكن أن تتجاوز نسب التسديد المئوية حاجز المئة بالمئة بأي حال من الأحوال.

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

تكتمل هذه الرقابة المنهجية ببناء قواعد تحقق صارمة عبر حزم التحقق الإحصائي المتخصصة مثل حزمة validate أو حزمة assertr في R. تتيح هذه الأدوات إمكانية كتابة “دستور للبيانات” (Data Ruleset) يحدد بوضوح النطاقات الرقمية المشروعة لكل متغير (كأن يُشترط أن تكون النقاط محصورة بين 0 و100، والمتابعات موجبة، وأسماء الفرق محصورة في قائمة محددة سلفاً). وعند تشغيل هذا الدستور، تقوم البيئة البرمجية بمسح تلقائي وإصدار تقرير فوري يفضح أي صف ينتهك هذه المحددات العقلانية، مما يمنع استمرار البيانات غير الواقعية والمنافية للمنطق العلمي داخل النموذج النهائي ويوفر ضمانة وقائية لا تقبل المساومة.

11. بناء مسار عمل متكامل ومحكم لتنظيف البيانات (Data Pipeline)

11.1 تجميع الإجراءات في شفرة برمجية موحدة باستخدام الأنابيب

تصل الممارسة الإحصائية والبرمجية إلى ذروة نضجها المنهجي عندما يتم تجميع كافة الخطوات التحويلية المتفرقة التي تم استعراضها سابقاً—من تنقية تكرارات، وتعويض فجوات الفقد، وتصحيح لأنواع المتغيرات، واحتواء الشذوذ الإحصائي—داخل شفرة برمجية موحدة وأنيقة تُعرف بـ “خط معالجة البيانات المتدفق” (Data Cleaning Pipeline). يتم بناء هذا المسار المحكم بالاعتماد الحصري على مشغل الأنابيب (%>%)، مما يُلغي الحاجة إلى كتابة أوامر مبعثرة وتوليد عشرات الكائنات الوسيطة المؤقتة التي تستهلك ذاكرة الحاسوب وتزيد من احتمالية حدوث أخطاء خفية ناجمة عن تشغيل خطوات بترتيب غير مقصود.

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

df_final_clean <- df %>%
  # المرحلة الأولى: إزالة السجلات المكررة بالكامل
  distinct() %>%
  # المرحلة الثانية: توحيد نوع المتغير التصنيفي وتجريد النصوص
  mutate(team = as.factor(trimws(team))) %>%
  # المرحلة الثالثة: احتواء وتحييد القيمة المتطرفة في النقاط
  mutate(points = ifelse(points > 50, NA, points)) %>%
  # المرحلة الرابعة: تعويض القيم المفقودة بالوسيط الحسابي للأعمدة الرقمية
  mutate(across(where(is.numeric), ~ replace_na(., median(., na.rm = TRUE))))

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

11.2 التحقق النهائي من جودة وسلامة البيانات بعد التنظيف

عقب إطلاق وتنفيذ خط التنظيف الموحد، يدخل المحلل في المرحلة المنهجية التأكيدية والمتمثلة في “إجراءات التحقق النهائي ومراقبة الجودة” (Post-Cleaning Quality Assurance). لا يجوز لأي باحث رصين الانتقال إلى مرحلة النمذجة واختبار الفرضيات دون إخضاع المصفوفة المنظفة الجديدة df_final_clean لاختبارات فحص صارمة تتأكد من أن جميع الأهداف العلاجية قد تحققت بالفعل، وأنه لم تنشأ أخطاء جانبية غير مقصودة أثناء عمليات التحويل الحسابي داخل الأنابيب.

تبدأ هذه الاختبارات بإعادة تطبيق دالة التدقيق المنطقي للقيم المفقودة sum(is.na(df_final_clean))؛ ويجب أن تكون النتيجة الرياضية هنا صفراً مطلقاً وحاسماً، بما يبرهن على نجاح خوارزمية التعويض في معالجة كافة الفجوات دون ترك أي خلية فارغة. يلي ذلك فحص أبعاد المصفوفة عبر dim(df_final_clean) للتأكد من استقرار عدد الصفوف عند تسعة صفوف (بعد إزالة التكرار الوحيد المشروع حذفه)، واستقرار عدد الأعمدة عند أربعة متغيرات متكاملة.

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

11.3 توثيق خطوات التنظيف لضمان قابلية إعادة الإنتاج العلمي

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

تُعد بيئة R Markdown ودفاتر Quarto المعاصرة الأداة المثلى لتحقيق هذا التوثيق التكاملي عالي الجودة؛ حيث تتيح هذه الأدوات للباحث صياغة تقرير موحد يدمج الشفرات البرمجية البرمجية المنفذة (Code Chunks) بالنتائج والجداول والرسوم البيانية المخرجة، جنباً إلى جنب مع الشروحات النظرية والسردية المكتوبة بلغة بشرية رصينة. هذا الدمج بين النص التفسيري والكود التشغيلي يقضي على مشكلة “الصندوق الأسود” (Black Box)، ويجعل مسار تنظيف البيانات كتاباً مفتوحاً يسهل على المحكمين والزملاء في المجتمع الأكاديمي مراجعته، والتحقق من افتراضاته، واختبار مدى متانة نتائجه.

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

12. أفضل الممارسات والأخطاء الشائعة في تنظيف البيانات باستخدام R

12.1 مبدأ صيانة البيانات الأصلية وعدم التعديل المباشر

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

تتم ترجمة هذا المبدأ عملياً في بيئة R عبر تأسيس بنية مجلدات معيارية للمشروع البرمجي، يتم فيها عزل البيانات الخام داخل مجلد فرعي محمي (مثل data/raw/)، مع توجيه دوال القراءة مثل read.csv() لاستيراد البيانات كنسخة مؤقتة في الذاكرة العشوائية للجلسة البرمجية دون مساس بالقرص الصلب. وعند إتمام خطوات التنظيف والتعديل، يتم تصدير مصفوفة البيانات الجديدة النظيفة وحفظها تحت مسمى مختلف تماماً وداخل مجلد مخصص للمخرجات المنقاة (مثل data/processed/clean_data.csv)، مما يضمن بقاء النسخة الخام محصنة كمرجع تاريخي دائم لا يطاله التغيير.

علاوة على ذلك، يُلزم المنهج العلمي الباحث بتطبيق نظام الفصل التام بين “سكربتات المعالجة والتنظيف المسبق” (Data Cleaning Scripts) و”سكربتات التحليل والاستدلال الإحصائي” (Statistical Analysis Scripts). إن عزل مراحل التطهير في ملف برمجي مستقل يضمن عدم تشتيت القارئ أو المحلل بتفاصيل الأكواد المعقدة لإصلاح الفقد والشذوذ أثناء فحص نتائج الانحدار ونماذج التنبؤ، كما يتيح استخدام الملف المنظف مباشرة في مشاريع وتحليلات مستقبلية متعددة دون الحاجة لإعادة تشغيل خط المعالجة التمهيدي من الصفر في كل مرة، مما يوفر جهداً حوسبياً كبيراً ويعزز النظام المؤسسي للبحث.

12.2 الأخطاء الشائعة أثناء التعامل مع حزم المعالجة في R

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

ومن الأخطاء البرمجية ذات الأبعاد المنهجية الخطيرة، إغفال تأثير “ترتيب العمليات” داخل مسار خط الأنابيب (Pipeline Operation Order). فعلى سبيل المثال، لو قام المحلل بوضع دالة تعويض الفقد بالوسيط قبل دالة تحييد القيمة الشاذة، فإن القيمة المتطرفة (كالرقم 86 في مثالنا) ستشارك حتماً في تشويه حساب الوسيط أو المتوسط، ومن ثم ستُحقن قيم تعويضية غير دقيقة داخل الخلايا المفقودة. بينما الترتيب المنهجي السليم يفرض تحييد الشذوذ أولاً أو عزله، ثم حساب المقاييس التعويضية للبيانات المفقودة ثانياً استناداً إلى البيانات النظيفة المتجانسة، مما يجنب التحليل تشوهات الترتيب الإجرائي العشوائي.

كما يبرز خطأ فادح آخر يتمثل في تطبيق عمليات التعويض الحسابي (Imputation) على مستوى مصفوفة البيانات ككل دفعة واحدة دون مراعاة “التباين والتجانس البيني للمجموعات الفرعية” (Group-Level Imputation). ففي الدراسات التجريبية التي تتضمن مجموعات تجريبية وضابطة، أو في البيانات الرياضية التي تتضمن فرقاً متباينة في القوة كالفريق A والفريق B، يمثل تعويض اللاعبين بمتوسط عام يدمج كافة الفرق تزييفاً للفروق الحقيقية؛ إذ يفرض المنهج السليم استخدام دالة group_by(team) قبل mutate وreplace_na لتعويض كل لاعب استناداً إلى وسيط الفريق الذي ينتمي إليه تحديداً، مما يحافظ على الخصائص البنيوية والتصنيفية الفريدة لكل فئة داخل النسيج الإحصائي للبيانات.

12.3 قائمة تدقيق نهائية للباحث والمحلل الإحصائي

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

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

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

خاتمة

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

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

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

المراجع

  • Endres, E., & Augustin, T. (2019). Statistical Data Cleaning and Imputation in R. Journal of Statistical Software, 91(4), 1–28. https://doi.org/10.18637/jss.v091.i04
  • Grolemund, G., & Wickham, H. (2017). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media. https://r4ds.had.co.nz/
  • Little, R. J. A., & Rubin, D. B. (2019). Statistical Analysis with Missing Data (3rd ed.). John Wiley & Sons. https://doi.org/10.1002/9781119482260
  • Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley.
  • van Buuren, S. (2018). Flexible Imputation of Missing Data (2nd ed.). Chapman and Hall/CRC. https://doi.org/10.1201/9780429492259
  • van der Loo, M., & de Jonge, E. (2018). Statistical Data Cleaning with Applications in R. John Wiley & Sons. https://doi.org/10.1002/9781118897126
  • Wickham, H. (2014). Tidy Data. Journal of Statistical Software, 59(10), 1–23. https://doi.org/10.18637/jss.v059.i10
  • 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., Vaughan, D., & Girlich, M. (2024). tidyr: Tidy Messy Data. R package version 1.3.1. https://CRAN.R-project.org/package=tidyr

تقييم هذا المحتوى

0.0 / 5 0 تقييمات

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

looti, M. (2026, سبتمبر 11). كيفية إجراء تنظيف البيانات في R (مع مثال). عرب سايكلوجي. https://arabpsychology.com/statistics/data-cleaning-in-r-example/
looti, Mohammed. “كيفية إجراء تنظيف البيانات في R (مع مثال).” عرب سايكلوجي, 11 سبتمبر 2026, https://arabpsychology.com/statistics/data-cleaning-in-r-example/.
looti, Mohammed. “كيفية إجراء تنظيف البيانات في R (مع مثال).” عرب سايكلوجي. سبتمبر 11, 2026. https://arabpsychology.com/statistics/data-cleaning-in-r-example/.