الإحصاء وتحليل البياناتبايثون للعلوم النفسية

كيفية إجراء اختبار غرابز في بايثون

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

تاريخ النشر

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

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

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

1. المقدمة والأسس النظرية لاختبار غرابز للكشف عن القيم الشاذة

1.1 مفهوم القيم الشاذة وتأثيرها على التحليلات الإحصائية

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

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

1.2 تاريخ اختبار غرابز وسياقه الإحصائي

يعود التأصيل التاريخي لاختبار غرابز إلى الورقة العلمية المفصلية التي نشرها عالم الإحصاء الأمريكي فرانك إدوارد غرابز (Frank E. Grubbs) عام 1950 في دورية Annals of Mathematical Statistics تحت عنوان “Sample Criteria for Testing Outlying Observations”. كان الهدف الأساسي لغرابز هو تقديم معيار إحصائي صارم يستند إلى نظرية العينات الصغيرة، لمعالجة المعضلة التي واجهت علماء المقذوفات ومراقبة الجودة في القطاع العسكري والصناعي، حيث كانت الطرق التقليدية تعتمد على أحكام ذاتية تفتقر إلى التوزيعات الاحتمالية الدقيقة لتحديد مستويات الدلالة الموثوقة.

يُصنف اختبار غرابز منهجياً ضمن عائلة “اختبارات الانحراف القصوى المعيارية” (Maximum Normed Residual Tests). وعلى النقيض من الاختبارات العامة التي تفحص شكل التوزيع الإجمالي، تم تصميم صيغة غرابز الأساسية لتكون اختباراً بارامترياً متخصصاً في رصد وتأكيد شذوذ “قيمة مفردة واحدة” (Single Outlier) تقع في أقصى أطراف التوزيع (الطرف الأيمن أو الأيسر). تتميز هذه الطريقة بأنها تستخدم التوزيع التائي (Student’s t-distribution) كأساس لاشتقاق التوزيع الاحتمالي للنسبة بين أقصى انحراف والانحراف المعياري العيني، مع مراعاة أن قيمة المشاهدة المفحوصة نفسها تدخل في حساب كل من المتوسط والتباين، وهو ما كان يمثل معضلة رياضية تجاوزها غرابز بحساب التوزيع التابع المشترك للعينات المرتبة.

1.3 حالات الاستخدام ومجالات التطبيق

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

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

2. الافتراضات الإحصائية والشروط المسبقة لتطبيق اختبار غرابز

2.1 شرط التوزيع الطبيعي التقريبي (Normality Assumption)

يستند اختبار غرابز في جوهره الرياضي إلى افتراض صارم وغير قابل للتفاوض، وهو أن البيانات الأصلية غير الملوثة تتبع التوزيع الطبيعي (Gaussian Distribution) ذي المعلمات النمطية $(\mu, \sigma^2)$. إن اشتقاق القيمة الحرجة لإحصائية غرابز يعتمد مباشرة على خصائص التوزيع التائي والارتباط البيني بين المشاهدات المرتبة المستمدة من جمهرة غاوسية. بناءً على ذلك، فإن الاختبار يظهر حساسية شديدة ومفرطة لأي انتهاك لهذا الشرط، وخاصة عند وجود التواء ملحوظ (Skewness) أو تفرطح شاذ (Kurtosis) في بنية التوزيع الأصلية.

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

2.2 حجم العينة والحد الأدنى للملاحظات

يفرض التصميم الرياضي لاختبار غرابز حدوداً دقيقة على حجم العينة المستخدمة ($N$). من الناحية النظرية والعملية، يشترط الاختبار توفر سبع مشاهدات على الأقل ($N ge 7$) لاعتبار نتائجه ذات مغزى وصلاحية إحصائية. يرجع هذا القيد إلى أن درجات الحرية المرتبطة بحساب القيمة الحرجة عبر توزيع$t$ هي $(N – 2)$؛ فعندما يكون حجم العينة صغيراً جداً (أقل من 6 مشاهدات)، تصبح القيمة الحرجة المطلوبة لرفض الفرضية الصفرية مرتفعة رياضياً إلى درجة تقترب من الحد الأقصى النظري للتباين الممكن، مما يفقد الاختبار قوته التمييزية ويجعله عاجزاً عن اكتشاف حتى أشد القيم شذوذاً.

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

2.3 استقلالية المشاهدات وتجانس التباين

تتمثل الفرضية الهيكلية الثالثة لاختبار غرابز في الاستقلالية التامة والتطابق التوزيعي لجميع المشاهدات، وهو ما يُعرف في الأدبيات الإحصائية بشرط (Identically and Independently Distributed – i.i.d). يُفترض في هذا السياق أن كل نقطة بيانات قد سُحبت عشوائياً وبشكل مستقل عن النقاط الأخرى، دون وجود أي ارتباط ذاتي (Autocorrelation) زمني أو مكاني، ودون تداخل ناتج عن القياسات المكررة المأخوذة من نفس المفحوص أو الوحدة التجريبية عبر الزمن.

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

3. الصيغة الرياضية والفرضيات الإحصائية لاختبار غرابز

3.1 صياغة الفرضيات الصفرية والبديلة

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

  • الفرضية الصفرية ($H_0$): لا توجد أي قيم شاذة في مجموعة البيانات؛ أي أن جميع المشاهدات $x_1, x_2, dots, x_N$ تنتمي إلى نفس الجمهرة التي تتبع توزيعاً طبيعياً واحداً ذا متوسط $\mu$ وتباين $\sigma^2$.
  • الفرضية البديلة ($H_1$): توجد قيمة شاذة واحدة على الأقل في العينة تنحرف انحرافاً ذا دلالة إحصائية عن التوزيع الغاوسي المشترك، سواء كانت هذه القيمة تمثل الحد الأقصى أو الحد الأدنى للعينة.

أما في الحالات التي تستند إلى خلفية نظرية محددة تبرر فحص طرف واحد فقط، تُصاغ الفرضيات إما كاختبار للحد الأقصى (حيث تنص $H_1$ على أن القيمة العظمى $x_{(N)}$ هي قيمة شاذة)، أو كاختبار للحد الأدنى (حيث تنص $H_1$ على أن القيمة الصغرى $x_{(1)}$ هي قيمة شاذة). يتم ضبط مستوى الدلالة ($\alpha$)، وعادة ما يُحدد عند $0.05$ أو $0.01$، ليمثل الحد الأقصى المسموح به لاحتمال ارتكاب الخطأ من النوع الأول ورفض الفرضية الصفرية الصحيحة.

3.2 معادلة حساب إحصائية غرابز (G-Statistic)

تعتمد آلية الاختبار على حساب إحصائية معيارية تُعرف بإحصائية غرابز ($G$). بالنسبة للاختبار ثنائي الطرف، تُعرّف الإحصائية بأنها أقصى انحراف مطلق لأي مشاهدة عن المتوسط الحسابي للعينة مقسوماً على الانحراف المعياري العيني، وتُعطى بالصيغة الرياضية التالية:

$$G = \frac{\max_{i=1,dots,N} |x_i – \bar{x}|}{s}$$

حيث يمثل $\bar{x}$ المتوسط الحسابي لمجموعة المشاهدات البالغ عددها $N$، والمحسوب بالصيغة:

$$\bar{x} = \frac{1}{N} \sum_{i=1}^{N} x_i$$

بينما يمثل $s$ الانحراف المعياري العيني المصحح بدرجات حرية العينة ($N-1$) وفق الصيغة:

$$s = \sqrt{\frac{1}{N-1} \sum_{i=1}^{N} (x_i – \bar{x})^2}$$

وفي الاختبارات أحادية الطرف، تُحسب الإحصائية باستهداف الطرف المراد اختباره مباشرة دون تطبيق القيمة المطلقة:

  • إحصائية اختبار الحد الأقصى: $$G_{\max} = \frac{\max(x) – \bar{x}}{s} = \frac{x_{(N)} – \bar{x}}{s}$$
  • إحصائية اختبار الحد الأدنى: $$G_{\min} = \frac{\bar{x} – \min(x)}{s} = \frac{\bar{x} – x_{(1)}}{s}$$

3.3 حساب القيمة الحرجة وتفسير النتيجة

لكي يُتخذ القرار برفض الفرضية الصفرية أو قبولها، يجب مقارنة قيمة $G$ المحسوبة بالقيمة الجدولية الحرجة ($G_{critical}$) عند مستوى دلالة $\alpha$ وحجم عينة $N$. اشتق غرابز الصيغة الرياضية الدقيقة للقيمة الحرجة باستخدام التوزيع التائي (t-distribution) بدرجات حرية قدرها$(nu = N – 2)$، حيث تُعطى القيمة الحرجة للاختبار ثنائي الطرف بالمعادلة التالية:

$$G_{critical} = \frac{N-1}{\sqrt{N}} \sqrt{\frac{t_{\alpha / (2N),, N-2}^2}{N – 2 + t_{\alpha / (2N),, N-2}^2}}$$

حيث يمثل $t_{\alpha / (2N),, N-2}$ القيمة الحرجة الأعلى للتوزيع التائي عند درجات حرية $N-2$ ومستوى دلالة مصحح قدره $\frac{\alpha}{2N}$. يظهر هنا بوضوح كيف أدمج غرابز مبدأ تصحيح بونفيروني ضمن المعادلة من خلال قسمة $\alpha$ على $2N$ للاختبار الثنائي (وعلى $N$ للاختبار الأحادي)، وذلك للتحكم في معدل الخطأ المتراكم الناتج عن فحص جميع المشاهدات البالغ عددها $N$ لاختيار أقصاها انحرافاً.

قاعدة اتخاذ القرار تكون حاسمة ومباشرة: إذا كانت قيمة $G$ المحسوبة من البيانات أكبر قطيعة من $G_{critical}$ (أو إذا كانت القيمة الاحتمالية $p\text{-value} le \alpha$)، فإننا نرفض الفرضية الصفرية بثقة إحصائية $(1 – \alpha)$، ونستنتج رسمياً أن النقطة الأكثر تطرفاً في العينة هي قيمة شاذة إحصائياً ولا تنتمي لنفس التوزيع الطبيعي الأصلي لبقية البيانات.

4. إعداد بيئة العمل في بايثون وتثبيت المكتبات الضرورية

4.1 تثبيت وتجهيز مكتبة outlier_utils

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

يتم تثبيت المكتبة في بيئة العمل الافتراضية عبر أداة إدارة الحزم القياسية pip بتنفيذ الأمر التالي في الطرفية:

pip install outlier_utils

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

4.2 استيراد المكتبات الإحصائية والحسابية المساندة

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

  • numpy: المكتبة الحسابية الجوهرية للتعامل مع المصفوفات العددية السريعة والعمليات الرياضية المتجهة.
  • pandas: أداة معالجة البيانات الجدولية، وبناء السلاسل الزمنية، وإدارة السجلات واستبعاد القيم الشاذة.
  • scipy.stats: الوحدة الإحصائية الشاملة من مشروع SciPy، وتُستخدم لحساب التوزيعات الاحتمالية، والقيم الحرجة، وإجراء اختبارات الحالة الطبيعية المسبقة.
  • matplotlib.pyplot و seaborn: مكتبات التصور البصري المتقدم لإنشاء المخططات الصندوقية، ومخططات الكثافة، والمدرجات التكرارية الأكاديمية بجودة النشر.

يتم تضمين هذه المكتبات في مستهل النص البرمجي على النحو التالي:

import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import seaborn as sns
from outliers import smirnov_grubbs as grubbs

4.3 هيكلة البيانات وتحويلها إلى مصفوفات رقمية

قبل تمرير البيانات إلى خوارزميات اختبار غرابز، يجب التأكد من نظافة وهيكلة مصفوفات الإدخال. يتطلب الاختبار مصفوفة أحادية البعد (1D Array) من القيم الرقمية المستمرة (Continuous Numeric Data). تكمن الخطوة الأولى في تحويل القوائم أو أعمدة أطر بيانات pandas إلى كائنات من نوع np.ndarray مع التحقق الصارم من عدم وجود قيم مفقودة (NaNs) أو قيم لانهائية (Infs)، حيث تؤدي هذه القيم غير المحددة إلى فشل حسابات المتوسط والانحراف المعياري.

تتم معالجة البيانات الخام واستبعاد القيم المفقودة باستخدام دوال pandas المدمجة مثل dropna() أو باستخدام دوال التصفية في NumPy عبر data[~np.isnan(data)]. كما يُفضل دائماً فحص النوع البياني (Data Type) والتأكد من تحويله إلى أرقام عشرية دقيقة (float64)، وذلك لتجنب أخطاء التقريب الرياضي أثناء حساب الفروق التربيعية في المقام والوسط الحسابي في البسط.

5. تنفيذ اختبار غرابز ثنائي الطرف (Two-Sided) في بايثون

5.1 بناء الكود الأساسي وتطبيق الدالة smirnov_grubbs.test

يُعد الاختبار ثنائي الطرف التطبيق الأكثر أماناً وموثوقية في معظم الدراسات الاستكشافية، حيث يفحص طرفي التوزيع بالتوازي ليكتشف أبعد قيمة عن المتوسط الحسابي سواء كانت قيمة بالغة الكبر أو بالغة الصغر. باستخدام مكتبة outlier_utils، يتم استدعاء الدالة grubbs.test() وتمرير مصفوفة البيانات ومستوى الدلالة المرغوب (الافتراضي هو $\alpha = 0.05$).

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

يوضح المثال البرمجي التالي كيفية استدعاء الدالة وتطبيقها على مجموعة بيانات رقمية مفترضة تمثل قياسات مخبرية:

data = np.array([198, 201, 203, 202, 199, 200, 204, 197, 202, 285])
cleaned_data = grubbs.test(data, alpha=0.05)
print("البيانات بعد تصفية القيمة الشاذة:", cleaned_data)

5.2 استخراج مؤشرات ومواقع القيم الشاذة برمجياً

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

تُرجع هذه الدالة قائمة تحتوي على المواقع الفهرسية (0-based indices) للقيم التي صُنفت كقيم شاذة بموجب الاختبار. يتيح هذا الربط الفهرسي دمج النتائج بسهولة مع أطر بيانات pandas الأصلية، مما يسمح بعزل المشاهدات الشاذة في جدول مستقل للتدقيق والتحليل النوعي:

outlier_indices = grubbs.test_indices(data, alpha=0.05)
print("فهارس القيم الشاذة المكتشفة:", outlier_indices)
print("القيم الشاذة المستبعدة:", data[outlier_indices])

5.3 دراسة حالة عملية وتحليل المخرجات بالتفصيل

لفهم الأثر الرياضي العميق لاستبعاد القيمة الشاذة، دعنا نحلل مخرجات المثال السابق بالتفصيل. تتكون العينة من 10 مشاهدات ($N = 10$). تسع مشاهدات منها تتمركز حول القيمة 200 (بين 197 و204)، بينما المشاهدة العاشرة هي 285.

قبل تطبيق الاختبار:

  • المتوسط الحسابي الأصلي: $\bar{x} = 209.1$
  • الانحراف المعياري الأصلي: $s = 26.78$
  • أقصى انحراف مطلق هو للنقطة 285: $|285 – 209.1| = 75.9$
  • إحصائية غرابز المحسوبة: $G = \frac{75.9}{26.78} = 2.834$
  • القيمة الحرجة للاختبار ثنائي الطرف عند $N=10$ و $alpha=0.05$ هي $G_{critical} \approx 2.290$

بما أن $G = 2.834 > G_{critical} = 2.290$، يرفض الاختبار الفرضية الصفرية بحسم ويصنف القيمة 285 كقيمة شاذة. بعد حذف هذه القيمة وتحديث الحسابات على المشاهدات التسع المتبقية، ينخفض المتوسط إلى $200.67$ ويهبط الانحراف المعياري إلى $2.35$ فقط. يُبرز هذا الهبوط الهائل في التشتت كيف كانت نقطة واحدة تشوه تقديرات التباين وتوحي بوجود عدم استقرار وهمي في عملية القياس.

6. تنفيذ اختبار غرابز أحادي الطرف (One-Sided) في بايثون

6.1 فحص القيم الشاذة الصغرى عبر min_test

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

توفر مكتبة outliers الدالة grubbs.min_test() والدالة المقابلة لاستخراج الفهارس grubbs.min_test_indices(). تركز هذه الدوال فقط على فحص المسافة بين المتوسط والقيمة الصغرى $x_{(1)}$، متجاهلة أي تطرف في الجانب الأيمن. يُنفذ الكود على النحو التالي:

min_cleaned = grubbs.min_test(data, alpha=0.05)
min_indices = grubbs.min_test_indices(data, alpha=0.05)

تكمن الميزة الرياضية للاختبار أحادي الطرف في تركيز القوة الإحصائية (Statistical Power) على جهة واحدة؛ فالقيمة الحرجة المطلوبة لرفض الفرضية الصفرية في الاختبار الأحادي تكون أقل قليلاً من نظيرتها في الاختبار الثنائي (نظراً لاستخدام $\alpha / N$ بدلاً من $\alpha / 2N$ في تصحيح بونفيروني)، مما يجعله أكثر قدرة على رصد القيم الشاذة الصغرى الحدية التي قد تفلت من الاختبار الثنائي.

6.2 فحص القيم الشاذة العظمى عبر max_test

في المقابل، يُطبق اختبار غرابز أحادي الطرف للحد الأقصى (One-Sided Maximum Test) للكشف الموجه عن القيم الشاذة المتطرفة كبراً. يبرز هذا الاحتياج في دراسات أزمنة الاستجابة الحركية والإدراكية، حيث تمثل الأزمنة الطويلة بشكل غير منطقي دليلاً على انقطاع الاتصال أو تشتت الانتباه المؤقت للمشارك.

يتم تنفيذ الاختبار عبر استدعاء الدالة grubbs.max_test() ومحدد الفهارس grubbs.max_test_indices():

max_cleaned = grubbs.max_test(data, alpha=0.05)
max_indices = grubbs.max_test_indices(data, alpha=0.05)

يقوم الكود بحساب $G_{\max} = \frac{x_{(N)} – \bar{x}}{s}$ ومقارنتها بالقيمة الحرجة الأحادية. إذا أظهرت النتيجة دلالة إحصائية، تُستبعد القيمة العظمى فقط وتبقى سائر البيانات كما هي، مما يمنح الباحث أداة موجهة ومبررة نظرياً لاختبار فرضيات ذات طبيعة أحادية الاتجاه.

6.3 المفاضلة المنهجية بين الاختبارات الأحادية والثنائية

تخضع المفاضلة بين الاختبار الأحادي والثنائي لاعتبارات إبستمولوجية ومنهجية صارمة. تنص القواعد الأكاديمية الرصينة على وجوب اتخاذ قرار استخدام الاختبار الأحادي وتوثيقه في خطة البحث المسبقة (Pre-registration) قبل الشروع في فحص البيانات وتوليد النتائج. إن اللجوء للاختبار الأحادي بعد رؤية البيانات للاستفادة من انخفاض القيمة الحرجة يُعد خرقاً للنزاهة العلمية يُعرف بممارسات التنقيب عن الدلالة (p-hacking).

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

7. برمجة اختبار غرابز يدوياً من الصفر باستخدام Scipy وNumPy

7.1 بناء دالة حساب إحصائية G يدوياً

على الرغم من سهولة استخدام المكتبات الجاهزة، فإن بناء خوارزمية اختبار غرابز يدوياً بلغة بايثون يمنح الباحث فهماً برمجياً ورياضياً عميقاً لكافة خطوات الاختبار، ويلغي الاعتماد على حزم خارجية قد تتوقف صيانتها البرمجية مستقبلاً. تبدأ الخوارزمية بحساب المتوسط والانحراف المعياري بموجب درجات الحرية المصححة ($ddof=1$).

تستقبل الدالة المخصصة مصفوفة البيانات ونوع الاختبار المطلوب (ثنائي الطرف two_sided، أو أحادي أعلى max، أو أحادي أدنى min)، وتقوم بحساب الفروق المعيارية وفق الخطوات التالية في بايثون:

def calculate_grubbs_statistic(data, test_type='two_sided'):
    n = len(data)
    mean_val = np.mean(data)
    std_val = np.std(data, ddof=1)
    if test_type == 'two_sided':
        abs_diff = np.abs(data - mean_val)
        max_idx = np.argmax(abs_diff)
        g_stat = abs_diff[max_idx] / std_val
        return g_stat, max_idx, data[max_idx]
    elif test_type == 'max':
        max_idx = np.argmax(data)
        g_stat = (data[max_idx] - mean_val) / std_val
        return g_stat, max_idx, data[max_idx]
    elif test_type == 'min':
        min_idx = np.argmin(data)
        g_stat = (mean_val - data[min_idx]) / std_val
        return g_stat, min_idx, data[min_idx]

7.2 حساب القيمة الحرجة وقيمة P-value رياضياً في بايثون

تتمثل الخطوة الأكثر دقة في البرمجة اليدوية في حساب القيمة الحرجة ($G_{critical}$) والقيمة الاحتمالية الدقيقة ($p\text{-value}$) بالاعتماد على دالة التوزيع التراكمي العكسي لتوزيع ستودنت التائي المتوفرة في scipy.stats.t.ppf ودالة البقاء scipy.stats.t.sf.

تُصاغ معادلة القيمة الحرجة برمجياً كما يلي:

def grubbs_critical_value(n, alpha=0.05, two_sided=True):
    df = n - 2
    adjusted_alpha = alpha / (2 * n) if two_sided else alpha / n
    t_crit = stats.t.ppf(1 - adjusted_alpha, df)
    numerator = (n - 1) * np.sqrt(np.square(t_crit))
    denominator = np.sqrt(n) * np.sqrt(df + np.square(t_crit))
    return numerator / denominator

ولحساب القيمة الاحتمالية الدقيقة ($p\text{-value}$)، يتم عكس المعادلة لحساب قيمة $t$ المقابلة لإحصائية $G$ المحسوبة، ومن ثم استخراج الاحتمال الذيل التائي وتعديله بمضاعف بونفيروني ($2N$ للاختبار الثنائي و$N$ للاختبار الأحادي):

def grubbs_p_value(g_stat, n, two_sided=True):
    df = n - 2
    term = (n * (g_stat**2)) / ((n - 1)**2 - n * (g_stat**2))
    if term <= 0 or np.isnan(term): return 1.0
    t_val = np.sqrt(df * term)
    p_one_tail = stats.t.sf(t_val, df)
    p_val = p_one_tail * 2 * n if two_sided else p_one_tail * n
    return min(max(p_val, 0.0), 1.0)

7.3 مزايا البرمجة اليدوية وتخصيص التقارير الإحصائية

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

  • حجم العينة الأولي ($N$) ودرجات الحرية ($nu = N-2$).
  • المتوسط الحسابي والانحراف المعياري المحسوب قبل وبعد التصفية.
  • قيمة إحصائية $G$ المحسوبة، والقيمة الحرجة الدقيقة $G_{critical}$، والقيمة الاحتمالية الدقيقة $p\text{-value}$.
  • موقع القيمة المفحوصة، وقيمتها العددية، وحكم القرار الإحصائي الصريح (قيمة شاذة دالة / ليست شاذة).
  • تحذيرات منهجية تلقائية في حال انخفاض حجم العينة عن 7 مشاهدات.

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

8. الكشف عن القيم الشاذة المتعددة عبر اختبار غرابز التكراري (Iterative Test)

8.1 منهجية التكرار المتسلسل لحذف القيم الشاذة المتعددة

تم تصميم اختبار غرابز الأصلي لرصد قيمة شاذة واحدة فقط. ولكن في الممارسة العملية، نادراً ما تأتي البيانات الملوثة محتوية على خطأ مفرد؛ بل قد تحتوي على نقطتين أو ثلاث نقاط متطرفة. للتعامل مع هذا التحدي، طُوّر أسلوب “اختبار غرابز التكراري المتسلسل” (Iterative Grubbs’ Test).

تعتمد المنهجية التكرارية على إجراء تسلسلي منظم: يُطبق الاختبار أولاً على العينة الكاملة ($N$)، فإذا تم اكتشاف قيمة شاذة بدلالة إحصائية، تُحذف هذه القيمة من العينة مؤقتاً، وتُقلص درجات الحرية إلى ($N-1$). بعد ذلك، يُعاد حساب المتوسط والانحراف المعياري الجديدين للعينة المصغرة، ويُعاد تطبيق اختبار غرابز كلياً من جديد للبحث عن قيمة شاذة ثانية بقيم حرجة جديدة تناسب الحجم المحدث. تستمر هذه الحلقة التكرارية حتى يفشل الاختبار في رفض الفرضية الصفرية (أي عندما تصبح$ptext{-value} > alpha$)، أو عندما يصل حجم العينة إلى الحد الأدنى المسموح به ($N = 6$).

8.2 بناء خوارزمية تكرارية مخصصة في بايثون

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

def iterative_grubbs_test(data, alpha=0.05, max_iter=None):
    cleaned = list(data)
    outliers_detected = []
    iteration = 0
    while len(cleaned) >= 7:
        if max_iter and iteration >= max_iter: break
        n = len(cleaned)
        g_stat, idx, val = calculate_grubbs_statistic(np.array(cleaned))
        g_crit = grubbs_critical_value(n, alpha)
        if g_stat > g_crit:
            outliers_detected.append(val)
            cleaned.pop(idx)
            iteration += 1
        else:
            break
    return np.array(cleaned), outliers_detected

توفر هذه الخوارزمية تتبعاً دقيقاً لقائمة القيم المستبعدة وتضمن توقف المعالجة تلقائياً عند استعادة البيانات لانتظامها الغاوسي المستقر دون استنزاف لا مبرر له للملاحظات.

8.3 بدائل غرابز التكراري: اختبار تيتين-مور واختبار ESD المعدل

على الرغم من جاذبية غرابز التكراري، إلا أنه يعاني من ثغرة إحصائية حرجة تُعرف بـ ظاهرة التقنيع (Masking Effect). تحدث هذه الظاهرة عندما تحتوي البيانات على قيمتين شاذتين متقاربتين جداً في نفس الطرف (مثلاً 290 و295 في بيانات متوسطها 100)؛ إن وجود هاتين النقطتين معاً يؤدي إلى تضخيم الانحراف المعياري الإجمالي للعينة في المقام بشكل هائل، مما يخفض قيمة إحصائية $G$ المحسوبة ويجعلها عاجزة عن تجاوز القيمة الحرجة، وبالتالي تفشل الخوارزمية في اكتشاف أي منهما منذ الخطوة الأولى.

لتجاوز هذا القصور المنهجي، تم تطوير بدائل أكثر تقدماً:

  • اختبار تيتين-مور (Tietjen-Moore Test): وهو تعميم مباشر لاختبار غرابز مصمم للكشف عن عدد محدد مسبقاً من القيم الشاذة ($k$) في وقت واحد، حيث يُعدل حساب التباين ليتجاوز تأثير التقنيع المتزامن.
  • اختبار روزنر للقيم المتطرفة المعيارية المعممة (Rosner’s Generalized ESD Test): وهو المعيار الإحصائي الأحدث والأقوى، حيث لا يتطلب تحديد العدد الفعلي للقيم الشاذة، بل يتطلب فقط تحديد حد أقصى للقيم المشتبه بها ($k$). يقوم اختبار ESD باختبار الفرضيات تنازلياً، وهو منيع تقريباً ضد ظاهرتي التقنيع والإغراق (Swamping)، مما يجعله البديل المفضل في التحليلات المعقدة التي تحتوي على تكتلات شاذة متقاربة.

9. التحقق البرمجي من شرط التوزيع الطبيعي قبل تطبيق اختبار غرابز

9.1 الاختبارات الإحصائية الصارمة للتوزيع الطبيعي

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

  • اختبار شابيرو-ويلك (Shapiro-Wilk Test): ويُعد أقوى الاختبارات البارامترية لفحص التوزيع الطبيعي في العينات الصغيرة والمتوسطة ($N le 50$). يُنفذ عبر الدالة stats.shapiro(data)؛ حيث تشير القيمة الاحتمالية $p > 0.05$ إلى سلامة التوزيع الطبيعي للبيانات.
  • اختبار داغوستينو-بيرسون (D’Agostino’s K-squared Test): يجمع بين قياسات الالتواء والتفرطح لتقييم انحراف الشكل عن الجرس الغاوسي. يُنفذ عبر stats.normaltest(data) وهو مناسب للعينات التي تزيد عن 20 مشاهدة.
  • اختبار كولموجوروف-سميرنوف (Kolmogorov-Smirnov Test): يُنفذ عبر stats.kstest(data, 'norm', args=(mean, std)) لمقارنة دالة التوزيع التراكمي التجريبية بالمنحنى الطبيعي النظري، وهو مفيد للعينات الأكبر حجماً.

إذا أظهرت هذه الاختبارات انحرافاً دالاً إحصائياً عن الطبيعية ($p le 0.05$)، يجب التوقف عن تطبيق اختبار غرابز بصورته المباشرة حتى معالجة الالتواء.

9.2 التشخيص البصري للتوزيع الطبيعي في بايثون

لا يجب الاعتماد على الاختبارات الرقمية وحدها، فالارقام قد تخفي أنماطاً دقيقة من التشوه. يتيح التصور البصري المزدوج عبر Seaborn وMatplotlib تشخيصاً دقيقاً لطبولوجيا البيانات:

  • مخطط الاحتمال الطبيعي (Q-Q Plot): يُرسم باستخدام stats.probplot(data, plot=plt). يرسم هذا المخطط نقاط البيانات الفعلية مقابل نقاط التوزيع الطبيعي النظري المتوقعة. إذا كانت البيانات طبيعية، ستصطف النقاط بدقة على طول الخط المستقيم القطري بزاوية 45 درجة، بينما تشير الانحرافات في الأطراف العلوية والسفلية إلى ثقل الذيول أو وجود قيم شاذة حادة.
  • المدرج التكراري مع منحنى الكثافة الاحتمالية (Histogram & KDE): يُبنى عبر sns.histplot(data, kde=True) لتقييم تماثل القمة وشكل الذيول بصرياً.
  • المخطط الصندوقي (Box Plot) والمخطط الكماني (Violin Plot): يُستخدمان لرصد مدى تناظر الأرباع حول الوسيط وتحديد المشاهدات التي تتجاوز حواف الأسلاك الخارجية.

9.3 خطوات التصرف البرمجي عند عدم تحقق التوزيع الطبيعي

عندما تُثبت الاختبارات البصرية والإحصائية أن البيانات الأصلية ملتوية بطبيعتها، يتاح للمحلل مساران منهجيان:

المسار الأول: التحويل الرياضي للبيانات (Data Transformation)
يتم تطبيق تحويلات القوى لجعل التوزيع متماثلاً وطبيعياً. أشهر هذه الطرق هو تحويل بوكس-كوكس (Box-Cox Transformation) الذي يبحث عن معامل التحويل الأمثل $lambda$ لتقليص الالتواء، ويُنفذ في بايثون عبر transformed_data, best_lambda = stats.boxcox(data) (يشترط أن تكون جميع البيانات موجبة قطيعة). كما يمكن استخدام التحويل اللوغاريتمي np.log(data) للبيانات ذات الالتواء الإيجابي الأيمن. بعد إجراء التحويل، يتم تطبيق اختبار غرابز على البيانات المحولة، ومن ثم استبعاد القيم الشاذة المحددة من المصفوفة الأصلية.

المسار الثاني: اللجوء إلى البدائل اللابارامترية المتينة (Non-Parametric Alternatives)
إذا فشلت التحويلات في تحقيق التوزيع الطبيعي المقبول، يُمنع تطبيق اختبار غرابز منعاً باتاً، ويجب الانتقال فوراً إلى أساليب كشف القيم الشاذة المتينة التي لا تفترض شكلاً توزيعياً محدداً، مثل طريقة المدى الربيعي (IQR) أو طريقة وسيط الانحرافات المطلقة (MAD).

10. التطبيق العملي لاختبار غرابز في أبحاث القياس النفسي وتحليل السلوك

10.1 تنقية بيانات أزمنة الاستجابة في الاختبارات المعرفية

في أبحاث علم النفس المعرفي والعلوم العصبية، يمثل قياس أزمنة الاستجابة (Reaction Times – RT) بالميلي ثانية أحد أهم المؤشرات السلوكية لتقييم كفاءة المعالجة الدماغية وسرعة اتخاذ القرار في مهمات مثل مهمة ستروب (Stroop Task) أو مهمات التمييز البصري. وتتميز هذه البيانات بكونها حساسة للغاية للأخطاء العارضة؛ فإذا استغرق المشارك 4500 ميلي ثانية في تجربة يتراوح متوسط أزمنتها الطبيعية حول 600 ميلي ثانية، فإن هذه المشاهدة تعكس انقطاعاً في التركيز أو حديثاً جانبياً وليست زمناً حقيقياً للمعالجة المعرفية.

باستخدام بايثون، يتم تحميل بيانات المهمة المعرفية عبر pandas، ثم تطبيق اختبار غرابز للحد الأقصى grubbs.max_test لتنقية التجارب على مستوى كل مشارك على حدة. يؤدي هذا الاستبعاد المبرر إحصائياً إلى إزالة التشويه من متوسطات المعالجة الفردية، مما يرفع من القوة الإحصائية لاختبارات الفروق (مثل Paired t-tests أو Repeated Measures ANOVA) ويجعل تقديرات الفروق بين الحالات التجريبية تعكس الفروق النفسية الحقيقية بدقة متناهية.

10.2 معالجة استجابات المقاييس النفسية ومؤشرات الاستجابة العشوائية

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

يُستخدم اختبار غرابز لفحص الدرجات المركبة الكلية لرواد المسح. إن تحديد المستجيب الشاذ عبر دلالة إحصائية صريحة ($p < 0.01$) يمنح الباحث الأساس الأخلاقي والمنهجي الصارم لاستبعاد استجابته من العينة النهائية دون الوقوع في شبهة "حذف البيانات الانتقائي غير المبرر" (Data Cooking). كما يُوثق هذا الإجراء في قسم المنهجية والأدوات في الأوراق البحثية، مما يعزز الصدق الداخلي وموثوقية الاتساق العام للمقاييس النفسية المستخدمة.

10.3 التصور البصري المتقدم للبيانات النفسية قبل وبعد التنقية

لتقديم النتائج بصورة احترافية للأوراق الأكاديمية والمؤتمرات العلمية، يُبنى كود تصويري متقدم يجمع بين توزيع البيانات الأصلي والبيانات بعد تنقية غرابز. يُنشئ الكود شكلاً ثنائي الألواح (Two-Panel Plot) عبر matplotlib:

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

يتم تصدير هذا الشكل البياني بدقة نقطية عالية (DPI = 300) وتنسيق متجهي متوافق مع اشتراطات المجلات المصنفة في قواعد بيانات Scopus وWeb of Science.

11. مقارنة اختبار غرابز مع طرق الكشف عن القيم الشاذة الأخرى في بايثون

11.1 المقارنة مع طريقة المدى الربيعي (IQR Method)

تُعد طريقة المدى الربيعي (Interquartile Range – IQR)، التي ابتكرها جون توكي في المخططات الصندوقية، أحد أشهر الأساليب اللابارامترية لكشف القيم الشاذة. تعتمد الطريقة على حساب الفرق بين الربيع الثالث والربيع الأول ($IQR = Q_3 – Q_1$)، واعتبار أي قيمة تقع خارج النطاق $[Q_1 – 1.5 \times IQR, Q_3 + 1.5 \times IQR]$ قيمة متطرفة.

تتمثل أوجه المقارنة الأساسية في النقاط التالية:

  • طبيعة الافتراضات: طريقة IQR خالية من التوزيعات (Distribution-Free) ولا تتأثر بالالتواء، بينما يشترط غرابز التوزيع الطبيعي التام.
  • القوة في العينات الصغيرة: يتفوق اختبار غرابز بشكل كاسح في العينات الصغيرة ($7 le N le 30$) ذات التوزيع الطبيعي، حيث يوفر قيمة احتمالية دقيقة ($ptext{-value}$) وقراراً مدعوماً بنظرية الفروض، في حين أن قاعدة $1.5 times IQR$ هي مجرد قاعدة إرشادية تقريبية (Heuristic Rule) غير مستندة إلى اختبار فرضيات احتمالي دقيق.
  • تعدد القيم: طريقة IQR قادرة على رصد قيم شاذة متعددة في خطوة واحدة دون الخضوع لظاهرة التقنيع، بينما يحتاج غرابز لتطبيق تكراري حذر.

11.2 المقارنة مع الدرجة المعيارية المعدلة (Modified Z-Score / MAD)

تعتمد الدرجة المعيارية الكلاسيكية ($Z = \frac{x – \bar{x}}{s}$) على المتوسط والانحراف المعياري، وكلاهما يتأثر بالقيم الشاذة ذاتها. لتجاوز ذلك، طوّر بوريس إيغليفيتش وروبرت هواجين الدرجة المعيارية المعدلة المستندة إلى وسيط الانحرافات المطلقة (Median Absolute Deviation – MAD)، وتُحسب بالصيغة:

$$M_i = \frac{0.6745 \cdot |x_i – \text{median}(x)|}{\text{MAD}}$$

حيث يُعتبر أي مشاهدة تحقق $|M_i| > 3.5$ قيمة شاذة محتملة.

تتميز طريقة MAD بمتانتها الفائقة (Robustness) ضد التلوث؛ إذ تمتلك نقطة انهيار (Breakdown Point) تبلغ 50%، مما يعني أنها تستطيع كشف القيم الشاذة بكفاءة حتى لو كان نصف العينة ملوثاً، وهي محصنة تماماً ضد ظاهرتي التقنيع والإغراق التي تعيق اختبار غرابز. في المقابل، يظل اختبار غرابز هو الأفضل عندما تكون العينة نقية بنسبة عالية ومتوافقة مع التوزيع الطبيعي، حيث يوفر اختبار غرابز أعلى كفاءة مقاربة (Asymptotic Efficiency) ويثبت مستوى الخطأ من النوع الأول عند $\alpha$ بدقة متناهية لا تضمنها طريقة MAD.

11.3 المقارنة مع خوارزميات التعلم الآلي غير الخاضعة للإشراف

في فضاء علوم البيانات المعاصرة، تُستخدم خوارزميات التعلم الآلي غير الخاضع للإشراف، مثل غابة العزل (Isolation Forest) وخوارزمية عامل الشذوذ المحلي (Local Outlier Factor – LOF) المتوفرة في مكتبة scikit-learn.

تتحدد معايير المفاضلة بين غرابز وهذه الخوارزميات وفق المصفوفة المنهجية التالية:

  • أبعاد البيانات (Dimensionality): اختبار غرابز مصمم حصرياً للمتغيرات الأحادية (Univariate Analysis). في حين أن خوارزميات التعلم الآلي تتفوق في كشف الشذوذ متعدد الأبعاد (Multivariate Outliers) الناتج عن التفاعلات المعقدة بين عشرات المتغيرات المتزامنة.
  • حجم العينة والتعقيد الحسابي: اختبار غرابز سريع حسابياً وخفيف الوزن ومثالي للعينات الصغيرة، بينما تتطلب خوارزميات مثل Isolation Forest عينات كبيرة نسبياً لبناء أشجار القرار العشوائية بكفاءة.
  • قابلية التفسير العلمي (Interpretability): يوفر اختبار غرابز مخرجات إحصائية استدلالية صارمة ودقيقة (توزيع $t$، درجات حرية، قيمة حرجة، وقيمة احتمالية) يمكن توثيقها ومراجعتها بيسر في الأوساط الأكاديمية والسريرية، في حين تنتج خوارزميات التعلم الآلي درجات شذوذ تجريبية تفتقر إلى إطار الفرضيات الإحصائية الصريحة.

12. الممارسات المنهجية الفضلى والأخطاء الشائعة واستراتيجيات المعالجة

12.1 الأخطاء المنهجية الشائعة عند تطبيق اختبار غرابز

يقع العديد من الممارسين والباحثين في أخطاء منهجية خطيرة عند تطبيق اختبار غرابز، مما يؤدي إلى استنتاجات علمية باطلة. ومن أبرز هذه الأخطاء:

  1. تطبيق الاختبار على عينات بالغة الصغر: محاولة تشغيل الاختبار على عينات أقل من 7 مشاهدات ($N < 7$). في هذه الحالات، تكون القوة الإحصائية للاختبار شبه معدومة، وتكون القيمة الحرجة أعلى من أي قيمة يمكن أن يولدها التباين العيني، مما يعطي إحساساً زائفاً بعدم وجود شذوذ.
  2. تجاهل شرط التوزيع الطبيعي: استخدام الاختبار على بيانات التوزيعات اللوجستية، أو الأسية، أو الملتوية دون تحويل رياضي مسبق، مما يتسبب في تصنيف المشاهدات الطبيعية في الذيل كقيم شاذة زيفاً.
  3. الحذف الآلي الأعمى للبيانات: الاعتماد على المخرجات البرمجية لحذف المشاهدات تلقائياً دون العودة للسياق المعرفي؛ فالقيمة الشاذة قد تمثل اكتشافاً علمياً جديداً غير مسبوق (مثل اكتشاف ثقب الأوزون الذي صُنفت قراءاته الأولية كقيم شاذة)، وحذفها الأعمى يدمر القيمة المعرفية للبيانات.
  4. الإفراط في التكرار المتسلسل: تكرار تطبيق غرابز عشرات المرات على نفس العينة، مما يؤدي إلى تآكل حجم العينة واقتطاع أطراف التوزيع الطبيعي الأصلي بشكل اصطناعي وتشويه التباين الطبيعي.

12.2 الخيارات المنهجية للتعامل مع القيم الشاذة المكتشفة

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

  • الحذف التام (Listwise Deletion): وهو الخيار المبرر عندما يثبت بالدليل الإجرائي أن القيمة الشاذة ناتجة عن خطأ في الجهاز، أو تلوث معملي، أو خطأ في إدخال البيانات يستحيل تصحيحه.
  • التشذيب والتقليص (Winsorization): بدلاً من حذف النقطة وتغيير حجم العينة، يتم استبدال القيمة الشاذة بأقرب قيمة مقبولة غير شاذة داخل التوزيع (مثلاً استبدال القيمة العظمى الشاذة بقيمة النسبة المئوية 95%). يُنفذ ذلك برمجياً عبر scipy.stats.mstats.winsorize.
  • التحليل المزدوج لفحص المتانة (Robustness Check): وهو المعيار الأكاديمي الأرقى للنشر؛ حيث يُجري الباحث التحليل الإحصائي الكامل مرتين: مرة بوجود القيمة الشاذة ومرة بعد حذفها، ويتم عرض النتائج المقارنة في الورقة العلمية لبيان ما إذا كانت الاستنتاجات تعتمد جوهرياً على وجود تلك النقطة أم أنها متينة ومستقرة.
  • استخدام النماذج الإحصائية المتينة (Robust Statistics): الانتقال إلى استخدام نماذج الانحدار المتين (مثل Huber Regressor أو Theil-Sen Estimator) أو اختبارات ويلكوكسون اللابارامترية التي تتعامل مع وجود القيم المتطرفة بكفاءة دون الحاجة لحذف أي مشاهدة من مجموعة البيانات.

12.3 أفضل الممارسات البرمجية لكتابة كود بايثون متين وقابل لإعادة الاستخدام

لضمان استقرار وموثوقية التحليلات في البيئات الإنتاجية والمشاريع البحثية المعقدة، ينبغي الالتزام بأفضل الممارسات البرمجية عند بناء أدوات كشف الشذوذ في بايثون:

  • التغليف البرمجي المتكامل (Encapsulation): كتابة دوال مغلفة تجمع بين التحقق التلقائي من الشروط المسبقة (حجم العينة واختبار شابيرو للتوزيع الطبيعي)، وتنفيذ اختبار غرابز، وتوليد التقرير التحليلي النهائي في كائن برمجي منظم.
  • تحديد أنواع البيانات (Type Hinting): استخدام مؤشرات النوع في بايثون مثل data: np.ndarray, alpha: float = 0.05 -> Dict[str, Any] لضمان استقرار خط المعالجة وسهولة صيانة الكود.
  • التوثيق البرمجي والتعليقات الإيضاحية (Docstrings): توثيق كل دالة بشرح وافٍ لصيغ المعادلات الإحصائية المطبقة والمصادر النظرية المستند إليها، مما يسهل المراجعة المنهجية المشتركة بين أعضاء الفريق البحثي.
  • بناء خطوط المعالجة المخصصة (Custom Transformers): بناء فئات برمجية متوافقة مع واجهة scikit-learn Transformer API تتيح دمج اختبار غرابز كخطوة مسبقة داخل كائنات Pipeline لمعالجة وتجهيز مصفوفات التعلم الآلي بشكل متسق وقابل للتكرار.

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

class GrubbsDataPipeline:
    def __init__(self, alpha: float = 0.05, auto_transform: bool = True):
        self.alpha = alpha
        self.auto_transform = auto_transform
        self.report_ = {}

    def fit_transform(self, X: np.ndarray) -> np.ndarray:
        clean_array = np.asarray(X, dtype=np.float64)
        clean_array = clean_array[~np.isnan(clean_array)]
        if len(clean_array) < 7:
            raise ValueError("حجم العينة أقل من الحد الأدنى المطلوب (N >= 7)")

        # فحص الحالة الطبيعية
        stat, p_norm = stats.shapiro(clean_array)
        self.report_['shapiro_p'] = p_norm
        if p_norm <= 0.05 and not self.auto_transform:
            raise ValueError("البيانات تنتهك شرط التوزيع الطبيعي ولم يُفعل التحويل التلقائي")

        # تنفيذ اختبار غرابز التكراري الموثق
        processed_data, outliers = iterative_grubbs_test(clean_array, alpha=self.alpha)
        self.report_['outliers_removed'] = outliers
        self.report_['final_sample_size'] = len(processed_data)
        return processed_data

خاتمة

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

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

References

  • ASTM International. (2021). Standard practice for dealing with outlying observations (ASTM E178-21). ASTM International. https://doi.org/10.1520/E0178-21
  • Barnett, V., & Lewis, T. (1994). Outliers in statistical data (3rd ed.). John Wiley & Sons.
  • Grubbs, F. E. (1950). Sample criteria for testing outlying observations. The Annals of Mathematical Statistics, 21(1), 27–58. https://doi.org/10.1214/aoms/1177729885
  • Grubbs, F. E. (1969). Procedures for detecting outlying observations in samples. Technometrics, 11(1), 1–21. https://doi.org/10.1080/00401706.1969.10490657
  • Iglewicz, B., & Hoaglin, D. C. (1993). How to detect and handle outliers. ASQC Basic References in Quality Control, Vol. 16. American Society for Quality.
  • Leys, C., Ley, C., Klein, O., Bernard, P., & Licata, L. (2013). Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of Experimental Social Psychology, 49(4), 764–766. https://doi.org/10.1016/j.jesp.2013.03.013
  • Rosner, B. (1983). Percentage points for a generalized ESD many-outlier procedure. Technometrics, 25(2), 165–172. https://doi.org/10.1080/00401706.1983.10487848
  • Shapiro, S. S., & Wilk, M. B. (1965). An analysis of variance test for normality (complete samples). Biometrika, 52(3/4), 591–611. https://doi.org/10.2307/2333709
  • Tietjen, G. L., & Moore, R. H. (1972). Some Grubbs-type statistics for the detection of several outliers. Technometrics, 14(3), 583–597. https://doi.org/10.1080/00401706.1972.10488948
  • Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., … SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. Nature Methods, 17(3), 261–272. https://doi.org/10.1038/s41592-019-0686-2

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

looti, M. (2026, أغسطس 26). كيفية إجراء اختبار غرابز في بايثون. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-perform-grubbs-test-in-python/
looti, Mohammed. “كيفية إجراء اختبار غرابز في بايثون.” عرب سايكلوجي, 26 أغسطس 2026, https://arabpsychology.com/statistics/how-to-perform-grubbs-test-in-python/.
looti, Mohammed. “كيفية إجراء اختبار غرابز في بايثون.” عرب سايكلوجي. أغسطس 26, 2026. https://arabpsychology.com/statistics/how-to-perform-grubbs-test-in-python/.