يمثل استكشاف البيانات الإحصائية والتحقق من خصائصها البنيوية ركيزة جوهرية لا غنى عنها في أي مسار تحليلي متقدم، سواء كان ذلك في سياق العلوم السلوكية والاجتماعية أو في مجالات نمذجة البيانات وتعلم الآلة. لسنود طويلة، ظل التركيز الأكبر في الإحصاء الوصفي مقتصرًا على مقاييس النزعة المركزية ومقاييس التشتت، إلا أن الممارسة التطبيقية والبحثية الرصينة أثبتت أن الاكتفاء بالمتوسط الحسابي والانحراف المعياري يُعد بمثابة اختزال مخل لطبيعة البيانات الحقيقية؛ فالظواهر الواقعية نادراً ما تتبع توزيعات متماثلة ومثالية، بل تتسم بخصائص شكلية معقدة تتجلى في درجات متفاوتة من عدم التناظر وسلوك الذيول الاحتمالية.
من هذا المنطلق، يبرز معاملا الالتواء (Skewness) والتفرطح (Kurtosis) كأداتين رياضيتين حاسمتين لفهم العزوم الإحصائية العليا (العزمين الثالث والرابع) لتوزيع المتغيرات الرقمية. إن فهم هذين المفهومين لا يقتصر على مجرد التوصيف الشكلي لمنحنى التوزيع، بل يرتبط ارتباطاً وثيقاً بمدى مطابقة البيانات لافتراضات النماذج الإحصائية المعلمية (Parametric Models)، مثل تحليل التباين، والانحدار الخطي، والنمذجة بالمعادلات البنائية، والتي تتطلب جميعها درجات محددة من الاعتدالية التوزيعية لضمان سلامة الاستدلالات ودقة الاختبارات الفرضية وصحة اتخاذ القرارات التحليلية.
مع التطور المتسارع للحوسبة الإحصائية ولغات البرمجة المفتوحة المصدر، أصبحت لغة Python البيئة الأكثر مرونة وقوة لإجراء هذه الحسابات واستكشاف بنية البيانات بعمق ودقة متناهية. بفضل منظومتها الغنية بالمكتبات العلمية المتخصصة مثل SciPy وPandas وNumPy وStatsmodels، توفر بايثون للباحثين ومحللي البيانات قدرات استثنائية لحساب معاملات الالتواء والتفرطح بمختلف الصيغ الرياضية (مثل تصحيحات فيشر وبيرسون)، فضلاً عن إمكانية تصورها بيانيًا ومعالجة التوزيعات الملتوية بأحدث تقنيات التحويل الإحصائي، وهو ما سنستعرضه بالتفصيل الدقيق والمنهجي عبر هذا الدليل الشامل.
- 1. مقدمة نظرية حول الأشكال التوزيعية في الإحصاء الوصفي والتحليلي
- 2. مفهوم الالتواء (Skewness): التأصيل الرياضي والأنواع والتفسير
- 3. مفهوم التفرطح (Kurtosis): القياس والتصنيفات والتعريفات المختلفة
- 4. إعداد بيئة العمل البرمجية في بايثون وتجهيز المكتبات الأساسية
- 5. حساب الالتواء (Skewness) في بايثون باستخدام مكتبات متعددة
- 6. حساب التفرطح (Kurtosis) في بايثون والتمييز بين تعريفي بيرسون وفيشر
- 7. التطبيق العملي على مجموعات بيانات سيكومترية وسلوكية
- 8. التصور البياني المتقدم للتوزيعات اللامتماثلة والتفرطح في بايثون
- 9. اختبارات الدلالة الإحصائية للالتواء والتفرطح واعتدالية البيانات
- 10. معالجة البيانات غير الاعتدالية: تقنيات التحويل الإحصائي في بايثون
- 11. الأخطاء الشائعة والاعتبارات المنهجية المتقدمة في الحساب البرمجي
- 12. دراسة حالة متكاملة واستراتيجيات صياغة التقارير الإحصائية
- References
1. مقدمة نظرية حول الأشكال التوزيعية في الإحصاء الوصفي والتحليلي
1.1 أهمية دراسة شكل التوزيع الإحصائي في التحليل المتقدم
في الممارسات الإحصائية الكلاسيكية، يميل الكثير من الباحثين إلى تلخيص مجموعات البيانات الرقمية من خلال مؤشرين رئيسيين: المتوسط الحسابي كمقياس للموقع المركزي، والانحراف المعياري كمقياس لانتشار القيم حول هذا المركز. ورغم الفائدة الأساسية لهذين المقياسين، إلا أنهما يفشلان بنيوياً في تمييز الفروق الجوهرية بين التوزيعات التي قد تتطابق تماماً في متوسطاتها وانحرافاتها المعيارية ولكنها تختلف اختلافاً جذرياً في هيئتها الهندسية وسلوك قيمها الطرفية. إن فحص شكل التوزيع يتجاوز هذه النظرة الضيقة ليميط اللثام عن كيفية توزيع البيانات عبر مداها الكامل، كاشفاً عما إذا كانت الملاحظات تتجمع في جانب معين من المقياس أو تتشتت عبر ذيول ممتدة تتضمن قيماً شاذة ذات تأثير تضليلي على المؤشرات الإجمالية.
تكتسب دراسة الشكل التوزيعي أهمية مضاعفة عند الانتقال من الإحصاء الوصفي إلى الإحصاء الاستدلالي والنماذج المتقدمة؛ حيث إن الغالبية العظمى من الاختبارات البارامترية الرصينة، كاختبارات “ت” (t-tests) وتحليلات التباين (ANOVA) ونماذج الانحدار الخطي المتعدد، تستند إلى فرضية مفادها أن البيانات أو أخطاء التقدير (البواقي) تتوزع توزيعاً طبيعياً معتدلاً. يؤدي انتهاك هذه الفرضيات التوزيعية عبر وجود التواء شديد أو تفرطح حاد إلى تضخيم معدلات الخطأ من النوع الأول (Type I Error) أو انخفاض القوة الإحصائية للاختبار (Statistical Power)، مما يقود الباحث إلى استنتاجات خاطئة تماماً حول الدلالة الإحصائية للفروق أو العلاقات المفحوصة.
يتجلى هذا التحدي بوضوح بالغ في مجالات البحوث السيكومترية والاجتماعية والعلوم العصبية، حيث تتسم البيانات النفسية والسلوكية بالتعقيد المتأصل والحساسية لخصائص العينات وأدوات القياس. فالسمات النفسية المقاسة، كالاضطرابات السلوكية أو الاتجاهات القيمية، نادراً ما تظهر توزيعات متماثلة في البيئات الطبيعية. وعليه، فإن الفحص المنهجي للشكل التوزيعي يشكل الخطوة الأولى والحاسمة التي تحدد ما إذا كان التحليل سيمضي قدماً باستخدام الأساليب البارامترية الكلاسيكية، أم يتطلب إجراء تحويلات رياضية للبيانات، أم يستوجب التحول الكامل نحو الاختبارات اللابارامترية (Non-parametric Tests) والنماذج الحصينة (Robust Statistics).
1.2 التوزيع الطبيعي المعياري كمرجع أساسي للمقارنة
يمثل التوزيع الطبيعي (Normal Distribution)، المعروف تاريخياً بمنحنى غاوس (Gaussian Curve)، النموذج النظري والمعياري الأهم في النظرية الإحصائية الكلاسيكية. يتميز هذا التوزيع رياضياً بأنه توزيع متصل ثنائي المعلمات يتحدد تماماً بمتوسطه الحسابي ($\mu$) وتباينه ($\sigma^2$). تتخذ دالة الكثافة الاحتمالية لهذا التوزيع شكلاً جرسياً متماثلاً تماثلاً تاماً حول نقطة المنتصف، حيث يتطابق المتوسط الحسابي والوسيط والمنوال في نقطة واحدة تمثل قمة المنحنى ومركزه الهندسي.
في التوزيع الطبيعي المتماثل، تتبع المساحات تحت المنحنى قاعدة تجريبية دقيقة تعرف بالقاعدة التجريبية (Empirical Rule 68-95-99.7)، حيث تقع حوالي 68.27% من الملاحظات ضمن نطاق انحراف معياري واحد من المتوسط ($\mu \pm 1\sigma$)، وتقع 95.45% ضمن نطاق انحرافين معياريين ($\mu \pm 2\sigma$)، بينما تستوعب ثلاثة انحرافات معيارية ($\mu \pm 3\sigma$) ما يقارب 99.73% من إجمالي الملاحظات. تضمن هذه الخصائص الهندسية انحدار ذيلي المنحنى بانسيابية تدريجية متناظرة نحو الصفر دون أن يلامسا المحور الأفقي، مما يجعل احتمالية ظهور القيم المتطرفة متدنية للغاية ومحكومة بالاحتمالات الرياضية الصارمة.
لفهم التباين بين التوزيعات التجريبية الحقيقية وهذا النموذج النظري المثالي، تستند النظرية الإحصائية إلى مفهوم العزوم الإحصائية الأربعة حول المتوسط (Statistical Moments):
- العزم الأول: المتوسط الحسابي (Mean)، ويحدد موقع أو مركز ثقل التوزيع.
- العزم الثاني: التباين (Variance) والانحراف المعياري، ويقيس درجة تشتت وانتشار البيانات حول المتوسط.
- العزم الثالث: الالتواء (Skewness)، ويقيس درجة ومقدار عدم التناظر أو الميلان في شكل المنحنى.
- العزم الرابع: التفرطح (Kurtosis)، ويقيس طبيعة وثقل الذيول وتركيز الملاحظات في الأطراف مقارنة بالمركز.
يشكل هذان العزمان الأخيران محور المعايير الإحصائية الحديثة لتقييم مدى ابتعاد البيانات الواقعية عن فرضية التوزيع الطبيعي، وتحديد درجات التشويه البنيوي التي تتطلب معالجة منهجية خاصة.
1.3 السياق الحسابي: لماذا نستخدم بايثون في الحسابات التوزيعية؟
أحدثت لغة بايثون تحولاً جذرياً في ممارسات تحليل البيانات والبحث العلمي بفضل مرونتها الفائقة وبنيتها البرمجية الواضحة التي تجمع بين سهولة التطوير والأداء الحسابي العالي. في السياق الحسابي لتحليل الأشكال التوزيعية، توفر بايثون بيئة موحدة تجمع بين إجراء العمليات الحسابية المتطورة وتطبيق الاختبارات الاستدلالية المتقدمة وتوليد التمثيلات المرئية فائقة الدقة، مما يلغي الحاجة إلى التنقل بين برمجيات متعددة ومغلقة المصدر.
تتميز بايثون بمنظومة برمجية متكاملة تتصدرها مكتبة SciPy وموديلها الفرعي المتقدم scipy.stats، الذي يحتوي على أحدث الخوارزميات الرياضية لحساب العزوم الإحصائية المعدلة وتطبيق اختبارات الاعتدالية الصارمة. كما توفر مكتبة Pandas هياكل بيانات فائقة الكفاءة مثل DataFrame وSeries، تتيح للمحلل حساب الالتواء والتفرطح عبر آلاف المتغيرات ومجموعات البيانات الضخمة بأوامر برمجية موجزة ومعالجة تلقائية ذكية للقيم المفقودة، بينما تتولى مكتبة NumPy تسريع العمليات الحسابية على المصفوفات متعددة الأبعاد عبر المعالجة المتجهة عالية الكفاءة.
علاوة على ذلك، تسمح بايثون بأتمتة خطوط المعالجة الإحصائية (Data Pipelines)؛ حيث يمكن للباحث بناء دوال مخصصة تقوم بفحص شكل التوزيع لمئات المتغيرات تلقائياً، وتحديد المقاييس التي تعاني من اختلالات في التناظر أو ثقل الذيول، واتخاذ قرارات تحويلية فورية قبل تغذية النماذج التنبؤية أو التحليلية. هذا التكامل البرمجي، المدعوم بمكتبات التصور البياني المتقدمة مثل Matplotlib وSeaborn، يجعل من بايثون الخيار القياسي والمعياري للباحثين والمحللين الساعين إلى تحقيق أعلى درجات الدقة والشفافية وقابلية إعادة الإنتاج (Reproducibility) في تحليلاتهم التوزيعية.
2. مفهوم الالتواء (Skewness): التأصيل الرياضي والأنواع والتفسير
2.1 التعريف الرياضي للعزم الإحصائي الثالث
يُعرَّف الالتواء (Skewness) في النظرية الإحصائية بأنه مقياس لعدم التناظر في دالة الكثافة الاحتمالية لمتغير عشوائي حقيقي حول متوسطه الحسابي. رياضياً، يستند الالتواء إلى العزم الثالث المركزي القياسي (Standardized Third Central Moment). يُحسب العزم المركزي الثالث النظري لمجتمع إحصائي كقيمة متوقعة لمكعب انحرافات القيم عن المتوسط الحسابي، وتُعطى صيغة معامل الالتواء للمجتمع ($\gamma_1$) بالمعادلة الرياضية التالية:
$$\gamma_1 = \mathbb{E}\left[\left(\frac{X – \mu}{\sigma}\right)^3\right] = \frac{\mathbb{E}[(X – \mu)^3]}{(\mathbb{E}[(X – \mu)^2])^{3/2}} = \frac{\mu_3}{\sigma^3}$$
حيث تمثل $\mu$ المتوسط الحسابي للمجتمع، و$\sigma$ الانحراف المعياري، و$\mu_3$ العزم المركزي الثالث. يؤدي رفع الانحرافات إلى الأس التكعيبي ($3$) إلى خاصية رياضية حاسمة: الاحتفاظ بإشارة الانحراف (موجبة للقيم الأعلى من المتوسط، وسالبة للقيم الأقل منه) مع مضاعفة وزن الانحرافات الكبيرة بشكل هائل مقارنة بالعزم الثاني؛ مما يجعل هذا المقياس حساساً للغاية لموقع وطول الذيول التوزيعية.
عند التعامل مع العينات الإحصائية المسحوبة من مجتمعات مجهولة، فإن تطبيق الصيغة السابقة بشكل مباشر يعطي تقديراً متحيزاً (Biased Estimate) للالتواء، خاصة في العينات الصغيرة والمتوسطة. للتغلب على ذلك، طور الإحصائي رونالد فيشر صيغة معامل الالتواء المصحح للعينة والمعروف بمعامل فيشر-بيرسون المعدل للعزم التراكمي ($G_1$)، والذي يُحسب وفق المعادلة:
$$G_1 = \frac{n}{(n-1)(n-2)} \sum_{i=1}^{n} \left(\frac{x_i – \bar{x}}{s}\right)^3 = \frac{\sqrt{n(n-1)}}{n-2} \left[ \frac{\frac{1}{n}\sum_{i=1}^n (x_i – \bar{x})^3}{\left(\frac{1}{n}\sum_{i=1}^n (x_i – \bar{x})^2\right)^{3/2}} \right]$$
حيث يمثل $n$ حجم العينة، و$\bar{x}$ متوسط العينة، و$s$ انحرافها المعياري. يزيل هذا التعديل التحيز الإحصائي في تقدير عزم المجتمع، وهو المعيار الرياضي المعتمد افتراضياً في معظم الحزم الإحصائية المتقدمة والبيئات البرمجية كـ Pandas وSPSS.
2.2 أنواع الالتواء وتفسير إشاراته الرقمية
ينقسم الالتواء بناءً على قيمته العددية وإشارته الجبرية إلى ثلاثة تصنيفات رئيسية تعكس التوزيع الهندسي للبيانات حول مركزها:
- الالتواء الموجب (Positive Skewness / Right-skewed): وتكون فيه قيمة المعامل أكبر من الصفر ($Skewness > 0$). يشير هذا النمط إلى أن ذيل التوزيع يمتد طويلاً نحو اليمين باتجاه القيم الرقمية المرتفعة، بينما تتكدس غالبية الملاحظات والبيانات في الجانب الأيسر المنخفض من المقياس. في التوزيعات الملتوية التواءً موجباً، يتأثر المتوسط الحسابي بشدة بالقيم المرتفعة في الذيل الأيمن وينسحب باتجاهها، مما ينتج عنه علاقة ترتيبية كلاسيكية بين مقاييس النزعة المركزية: المتوسط الحسابي > الوسيط > المنوال.
- الالتواء السالب (Negative Skewness / Left-skewed): وتكون فيه قيمة المعامل سالبة أقل من الصفر ($Skewness < 0$). يدل هذا النمط على امتداد ذيل التوزيع نحو اليسار باتجاه القيم المتدنية جداً، بينما تتمركز معظم الملاحظات وتتكتل في الجانب الأيمن المرتفع من المقياس. يؤدي السحب الشديد للقيم المتطرفة المنخفضة إلى جذب المتوسط الحسابي نحو الأسفل، بحيث تصبح العلاقة الترتيبية: المنوال > الوسيط > المتوسط الحسابي.
- الالتواء الصفري أو التماثل التام (Zero Skewness / Symmetrical): وتكون فيه قيمة المعامل مساوية للصفر تماماً ($Skewness = 0$) أو قريبة منه جداً ضمن حدود الخطأ العشوائي. يعكس هذا النمط تماثلاً شكلياً متطابقاً على جانبي المنتصف، وتتساوى فيه مقاييس النزعة المركزية الثلاثة تماماً: المتوسط الحسابي = الوسيط = المنوال.
يوضح الجدول التالي المقارنة البنيوية الشاملة بين هذه الأنماط التوزيعية الثلاثة:
| نوع الالتواء | الإشارة الرقمية | امتداد الذيل | موقع تركز البيانات | العلاقة بين مقاييس النزعة المركزية |
|---|---|---|---|---|
| ملتوٍ لليمين (موجب) | قيمة موجبة ($> 0$) | يمتد نحو القيم المرتفعة (اليمين) | تمركز في القيم المنخفضة (اليسار) | المتوسط > الوسيط > المنوال |
| متماثل تماماً | صفر تقريباً ($= 0$) | ذيول متساوية ومتطابقة هندسياً | تمركز منتظم في المنتصف حول المركز | المتوسط = الوسيط = المنوال |
| ملتوٍ لليسار (سالب) | قيمة سالبة ($< 0$) | يمتد نحو القيم المنخفضة (اليسار) | تمركز في القيم المرتفعة (اليمين) | المنوال > الوسيط > المتوسط |
2.3 التفسير السيكومتري لالتواء البيانات في المقاييس النفسية
يحمل الالتواء دلالات جوهرية بالغة الحساسية في القياس النفسي والسلوكي (Psychometrics)؛ حيث يكشف انحراف التوزيع عن خصائص الأداة المقاسة وتفاعلها مع العينة المستهدفة. من أبرز هذه الظواهر ما يُعرف بـ تأثير السقف (Ceiling Effect) وتأثير الأرضية (Floor Effect). يحدث تأثير السقف عندما تكون بنود الاختبار أو المقياس النفسي سهلة للغاية أو مرغوبة اجتماعياً بصورة مفرطة، مما يدفع غالبية الأفراد إلى الحصول على درجات قصوى في أقصى المقياس، منتجاً التواءً سالباً حاداً يعكس عجز المقياس عن التمييز بين المستويات العليا من السمة المقاسة.
في المقابل، يحدث تأثير الأرضية عندما تكون فقرات المقياس شديدة الصعوبة أو تقيس ظواهر نادرة الحدوث في المجتمع العام (مثل درجات الاكتئاب السريري الحاد أو الأفكار الانتحارية في عينات غير إكلينيكية)، حيث تسجل الغالبية العظمى من الأفراد درجات تقارب الصفر أو الحد الأدنى للمقياس، بينما ينفرد عدد قليل من الحالات بدرجات مرتفعة، وهو ما يولد بالضرورة التواءً موجباً شديداً. في مثل هذه الحالات، لا يُعد الالتواء عيباً في القياس بل انعكاساً دقيقاً لطبيعة الظاهرة المدروسة في المجتمع السكاني.
فيما يخص المعايير الإحصائية لقبول الالتواء في العلوم السلوكية والنفسية، أقر الباحثون المنهجيون (مثل George & Mallery، وKline) قواعد إرشادية لتحديد مدى ملاءمة البيانات للتحليلات البارامترية:
- المجال المثالي للاعتدالية: عندما تقع قيمة معامل الالتواء بين $-0.5$ و $+0.5$، يُعتبر التوزيع متماثلاً تقريباً ومطابقاً للفرضيات الكلاسيكية.
- المجال المقبول عموماً: عندما يقع المعامل بين $-1.0$ و $+1.0$، يُعتبر الالتواء معتدلاً ولا يشكل تهديداً خطيراً لصحة اختبارات الاستدلال البارامترية.
- الحد الأقصى للنماذج البنائية المتقدمة: في نماذج المعادلات البنائية (SEM) والتحليل العاملي التوكيدي (CFA)، يقبل الكثير من المنهجيين نطاقاً يتراوح بين $-2.0$ و $+2.0$ كحد أقصى مسموح به قبل اعتبار البيانات ملتوية بشدة وموجبة للتحويل الإحصائي أو استخدام مقدرات لا تتطلب التوزيع الطبيعي مثل (Robust Maximum Likelihood – MLR).
3. مفهوم التفرطح (Kurtosis): القياس والتصنيفات والتعريفات المختلفة
3.1 التعريف الرياضي للعزم الإحصائي الرابع
يمثل التفرطح (Kurtosis) العزم المركزي القياسي الرابع للتوزيع الاحتمالي، وهو مقياس إحصائي عانى طويلاً من سوء الفهم في الأدبيات المبكرة؛ حيث كان يُفسر خطأً بأنه مجرد مقياس لمدى “حدّة قمة المنحنى” (Peakedness). أثبتت الدراسات الرياضية والإحصائية المعاصرة (لا سيما أبحاث Westfall وDeCarlo) أن التفرطح هو في المقام الأول مقياس لسلوك وثقل الذيول (Tail Weight / Heavy-tailedness) ومعدل توليد القيم المتطرفة والشاذة (Outlier Propensity)، وليس لارتفاع القمة بحد ذاتها.
يُحسب العزم المركزي القياسي الرابع النظري لمجتمع إحصائي برفع انحرافات القيم المعيارية عن المتوسط إلى القوة الرابعة ($4$)، وتُعطى معادلة التفرطح المطلق لبيرسون ($\beta_2$) على النحو التالي:
$$\beta_2 = \mathbb{E}\left[\left(\frac{X – \mu}{\sigma}\right)^4\right] = \frac{\mathbb{E}[(X – \mu)^4]}{(\mathbb{E}[(X – \mu)^2])^2} = \frac{\mu_4}{\sigma^4}$$
نظراً لأن الأس الرابع يضاعف الانحرافات الكبيرة بصورة أسية مفرطة، فإن القيم البعيدة عن المتوسط الحسابي حتى لو كانت نادرة تسهم بالحصة العظمى في قيمة هذا العزم. في التوزيع الطبيعي المعياري، تتكامل دالة الكثافة الاحتمالية لتنتج قيمة تفرطح مطلق تساوي تماماً $3$ ($\beta_2 = 3$). وعليه، فإن أي توزيع تتجاوز قيمة عزمه الرابع $3$ يمتلك ذيولاً أثقل من التوزيع الطبيعي وقدرة أكبر على توليد أحداث متطرفة، بينما تعكس القيم الأقل من $3$ ذيولاً خفيفة ونادرة الملاحظات الشاذة.
3.2 التفرطح الإضافي (Excess Kurtosis) وصيغة فيشر
لتسهيل المقارنة المباشرة مع التوزيع الطبيعي وجعل نقطة المرجع تساوي الصفر تماماً، اقترح الإحصائي رونالد فيشر مفهوم التفرطح الإضافي (Excess Kurtosis)، والذي يُرمز له أحياناً بـ ($\gamma_2$). يُعرَّف التفرطح الإضافي ببساطة بأنه التفرطح المطلق لبيرسون مطروحاً منه الرقم $3$:
$$\text{Excess Kurtosis} = \gamma_2 = \beta_2 – 3 = \frac{\mu_4}{\sigma^4} – 3$$
وفق هذا التعريف، يصبح التفرطح الإضافي للتوزيع الطبيعي مساوياً للصفر تماماً ($\gamma_2 = 0$). يُعد هذا التعديل جوهرياً في تبسيط قراءة المخرجات الإحصائية؛ فالقيم الموجبة تدل مباشرة على ذيول ثقيلة مقارنة بالطبيعي، والقيم السالبة تدل على ذيول خفيفة.
عند تقدير التفرطح الإضافي من عينة بيانات فعلية بحجم $n$، تُستخدم صيغة فيشر غير المتحيزة للعينة ($g_2$) لتعديل درجات الحرية وتجنب التقليل من شأن العزم الرابع للمجتمع:
$$g_2 = \frac{n-1}{(n-2)(n-3)} \left[ (n+1) \left( \frac{\sum_{i=1}^n (x_i – \bar{x})^4}{\left(\sum_{i=1}^n (x_i – \bar{x})^2\right)^2} \right) – 3(n-1) \right]$$
تعتمد معظم لغات البرمجة والبيئات الإحصائية الحديثة، بما في ذلك مكتبتا SciPy وPandas في بايثون، وحزم R الإحصائية، صيغة التفرطح الإضافي كصيغة قياسية وافتراضية للمخرجات، مما يستلزم وعياً دقيقاً من الباحث عند تفسير النتائج ومقارنتها.
3.3 التصنيفات الثلاثة للتفرطح ودلالاتها الإحصائية
تُصنف التوزيعات التكرارية والاحتمالية استناداً إلى قيمة التفرطح الإضافي إلى ثلاثة أنماط هندسية متميزة تحمل دلالات استدلالية وسيكومترية عميقة:
- التوزيع مدبب التفرطح (Leptokurtic): ويكون فيه التفرطح الإضافي موجباً ($\gamma_2 > 0$ أو تفرطح بيرسون المطلق $> 3$). يتميز هذا التوزيع بذيول ثقيلة وطويلة وتمركز حاد للبيانات حول المركز، مع انخفاض ملحوظ في الأكتاف المتوسطة للتوزيع. إحصائياً، يشير هذا النمط إلى وجود مخاطر عالية لتكرار القيم المتطرفة الشاذة (Fat-tail Risk). في المقاييس النفسية، قد يدل التفرطح المدبب على أن أداة القياس حساسة للغاية لفئة ضيقة في المنتصف بينما تسجل تشتتاً غير متوقع في الحالات الطرفية.
- التوزيع مسطح التفرطح (Platykurtic): ويكون فيه التفرطح الإضافي سالباً ($\gamma_2 < 0$ أو تفرطح بيرسون المطلق $< 3$). يمتلك هذا التوزيع ذيولاً رفيعة وخفيفة وأكتافاً ممتلئة وقمة عريضة مسطحة، مع ندرة واضحة في القيم الشاذة. يقترب هذا الشكل في حدوده القصوى من التوزيع المنتظم (Uniform Distribution). سيكومترياً، قد يعكس التفرطح المسطح تشتتاً واسعاً ومتجانساً لاستجابات المفحوصين عبر جميع خيارات المقياس دون تركز في منطقة محددة.
- التوزيع متوسط التفرطح (Mesokurtic): ويكون فيه التفرطح الإضافي صفراً أو قريباً جداً منه ($\gamma_2 \approx 0$ أو تفرطح بيرسون المطلق $\approx 3$). يتطابق هذا التوزيع تماماً مع المنحنى الطبيعي المعياري من حيث ثقل الذيول ومعدل انحدار الكثافة الاحتمالية نحو الأطراف.
في معايير العلوم الاجتماعية والسلوكية، يُعد التفرطح الإضافي المحصور بين $-2.0$ و $+2.0$ مقبولاً في معظم التطبيقات المتقدمة، بينما تتطلب القيم التي تتجاوز $\pm 3.0$ أو $\pm 7.0$ (وفق معايير Kline الأكثر صرامة) معالجة جذرية لتفادي تشويه نتائج النمذجة البارامترية.
4. إعداد بيئة العمل البرمجية في بايثون وتجهيز المكتبات الأساسية
4.1 تثبيت وضبط المكتبات الإحصائية والبيانية
لبدء الحسابات التوزيعية بدقة وكفاءة، يتطلب الأمر إعداد بيئة برمجية متكاملة تتضمن الحزم الإحصائية القياسية المعتمدة في مجتمع علوم البيانات. يمكن تثبيت هذه الحزم بسهولة باستخدام أداة إدارة الحزم pip عبر تنفيذ الأمر التالي في بيئة الأوامر (Terminal):
pip install numpy scipy pandas statsmodels matplotlib seaborn
بعد اكتمال التثبيت، يتم استيراد هذه المكتبات في مطلع البرنامج الإحصائي وضبط خيارات التنسيق لضمان اتساق المخرجات الرقمية وقابليتها للقراءة الأكاديمية الرصينة:
import numpy as np
import pandas as pd
import scipy.stats as stats
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
# ضبط خيارات عرض الأرقام العشرية في بانداس
pd.set_option('display.float_format', lambda x: '%.4f' % x)
# ضبط النمط البياني الافتراضي لسيبرون
sns.set_theme(style="whitegrid", palette="muted")
يضمن هذا الضبط الأولي توحيد معايير التقريب إلى أربع خانات عشرية، وهو المعيار الإحصائي الأمثل لعرض معاملات العزوم العليا والاختبارات المرتبطة بها دون فقدان الدقة الرياضية.
4.2 استيراد البيانات وتجهيز هياكل البيانات (DataFrames & Series)
تتعامل مكتبة Pandas مع مجموعات البيانات عبر هيكلين رئيسيين: Series للمتغيرات الفردية أحادية البعد، وDataFrame للمصفوفات الجدولية متعددة المتغيرات. يمكن استيراد البيانات من مصادر متنوعة مثل ملفات CSV أو Excel أو قواعد البيانات SQL بكل سهولة:
# تحميل مجموعة بيانات سيكومترية افتراضية من ملف CSV
df = pd.read_csv('psychometric_assessment_data.csv')
# فحص الأبعاد الأساسية لمصفوفة البيانات وأنواع المتغيرات
print(f"أبعاد البيانات: {df.shape[0]} صفاً (مشاركاً) و {df.shape[1]} عموداً (متغيراً)")
print(df.dtypes)
print(df.head())
من الضروري في هذه المرحلة التأكد من تحويل المتغيرات الرقمية إلى الأنواع البرمجية المناسبة (مثل float64 أو int64)، واستبعاد أو ترميز المتغيرات الاسمية والوصفية لضمان عدم حدوث أخطاء حسابية أثناء استدعاء دوال العزوم الإحصائية.
4.3 معالجة القيم المفقودة وتأثيرها على العزوم العليا
تُعد معالجة القيم المفقودة (Missing Values) خطوة منهجية حرجة تسبق حساب معاملات الالتواء والتفرطح. نظراً لأن حساب العزمين الثالث والرابع يعتمد على رفع الفروق إلى الأس التكعيبي والرباعي، فإن أي خلل في اكتمال البيانات أو سوء معالجة للقيم المفقودة يمكن أن يؤدي إلى تحيزات جسيمة في تقدير ثقل الذيول ودرجة التماثل.
توفر بايثون آليات مرنة للتعامل مع البيانات المفقودة، إما عبر الحذف المباشر (Listwise/Pairwise Deletion) أو عبر تقنيات التعويض الإحصائي (Imputation):
# فحص عدد ونسبة القيم المفقودة في كل متغير
missing_summary = df.isnull().sum()
missing_percentage = (df.isnull().sum() / len(df)) * 100
print(pd.concat([missing_summary, missing_percentage], axis=1, keys=['المفقود', 'النسبة المئوية %']))
# خيار 1: حذف الصفوف التي تحتوي على قيم مفقودة للتحليل النقي
df_cleaned = df.dropna()
# خيار 2: استخدام معالجات مكتبة ساي باي المدمجة للقيم المفقودة
# تدعم دوال scipy المعامل nan_policy وخياراته: 'propagate', 'raise', 'omit'
skew_val = stats.skew(df['anxiety_score'], nan_policy='omit')
يضمن ضبط الوسيط nan_policy='omit' في دوال مكتبة SciPy استبعاد القيم الفارغة تلقائياً أثناء الحساب وتجنب إنتاج مخرجات غير معرفة (NaN)، مما يتيح استمرار التحليل الاستكشافي دون انقطاع.
5. حساب الالتواء (Skewness) في بايثون باستخدام مكتبات متعددة
5.1 الحساب باستخدام مكتبة SciPy (الدالة scipy.stats.skew)
تُعد دالة scipy.stats.skew الأداة الرياضية الأكثر مرونة ودقة لحساب معامل الالتواء لمصفوفات NumPy وسلاسل البيانات. تتيح هذه الدالة للمحلل تحكماً كاملاً في الصيغة الرياضية المستخدمة من خلال معلمات دقيقة:
import scipy.stats as stats
# توليد بيانات تجريبية ذات التواء موجب
np.random.seed(42)
data_pos = np.random.exponential(scale=2.0, size=1000)
# حساب الالتواء غير المصحح (المتحيز للمجتمع: bias=True وهو الافتراضي في SciPy)
skew_biased = stats.skew(data_pos, bias=True)
# حساب الالتواء المصحح للعينة (غير المتحيز: bias=False، متوافق مع صيغة فيشر-بيرسون)
skew_unbiased = stats.skew(data_pos, bias=False)
print(f"معامل الالتواء المتحيز (SciPy الافتراضي): {skew_biased:.4f}")
print(f"معامل الالتواء المصحح للعينة (Unbiased): {skew_unbiased:.4f}")
عند تطبيق الدالة على مصفوفات متعددة الأبعاد (2D Arrays)، يتيح معامل axis تحديد اتجاه الحساب عبر الصفوف (axis=1) أو الأعمدة (axis=0)، مما يسهل معالجة مئات المتغيرات التجريبية في خطوة حسابية واحدة وفائقة السرعة.
5.2 الحساب باستخدام مكتبة Pandas (الدالة DataFrame.skew)
تتميز مكتبة Pandas بتوفير واجهة برمجية فائقة السهولة لحساب الالتواء مباشرة على كائنات Series وDataFrame عبر الدالة المدمجة skew(). على عكس SciPy، فإن Pandas تطبق افتراضياً تصحيح فيشر-بيرسون للعينات (Unbiased Estimator) دون الحاجة لضبط معلمات إضافية:
# إنشاء جدول بيانات افتراضي يحتوي على عدة متغيرات سيكومترية
data_dict = {
'Depression': np.random.exponential(scale=1.5, size=500),
'Self_Esteem': np.random.normal(loc=30, scale=5, size=500),
'Life_Satisfaction': 50 - np.random.exponential(scale=3, size=500),
'Gender': np.random.choice(['Male', 'Female'], size=500)
}
df_psych = pd.DataFrame(data_dict)
# حساب الالتواء لكافة الأعمدة الرقمية دفعة واحدة
skewness_all = df_psych.skew(numeric_only=True)
print("معاملات الالتواء لكافة المتغيرات:")
print(skewness_all)
# حساب الالتواء مجمعاً حسب المجموعات التجريبية أو الفئات (groupby)
skewness_by_gender = df_psych.groupby('Gender')[['Depression', 'Self_Esteem']].skew()
print("nمعاملات الالتواء مصنفة حسب النوع الاجتماعي:")
print(skewness_by_gender)
يتيح هذا الأسلوب استخراج مؤشرات الالتواء لشرائح العينة المختلفة ومقارنة درجات التماثل التوزيعي بين المجموعات التجريبية والضابطة بكل سهولة وتنظيم.
5.3 مقارنة النتائج الحسابية بين المكتبات المختلفة
قد يلاحظ الباحث وجود اختلافات رقمية طفيفة عند حساب معامل الالتواء لنفس مجموعة البيانات بين دالة pandas.Series.skew() ودالة scipy.stats.skew(). يرجع هذا الاختلاف بالكامل إلى المعامل الافتراضي للتحيز (Bias Parameter)؛ حيث تعتمد Pandas صيغة التصحيح غير المتحيزة للعينة ($n-1, n-2$) افتراضياً، بينما تعتمد SciPy صيغة العزم الإحصائي النظري للمجتمع ما لم يتم ضبط bias=False صراحةً.
يوضح المثال التالي التطابق التام بين المكتبات عند توحيد صيغ الحساب:
# مقارنة حسابية دقيقة على عينة صغيرة الحجم لإظهار أثر التصحيح
sample_data = np.array([12, 15, 14, 18, 19, 22, 29, 35, 48])
pandas_result = pd.Series(sample_data).skew()
scipy_biased = stats.skew(sample_data, bias=True)
scipy_unbiased = stats.skew(sample_data, bias=False)
print(f"مخرجات Pandas الافتراضية: {pandas_result:.6f}")
print(f"مخرجات SciPy (مع bias=False): {scipy_unbiased:.6f}")
print(f"مخرجات SciPy (مع bias=True): {scipy_biased:.6f}")
assert np.isclose(pandas_result, scipy_unbiased), "النتائج متطابقة رياضياً!"
يوصى دائماً في الدراسات الأكاديمية والتقارير النفسية باستخدام الصيغة غير المتحيزة (bias=False في SciPy أو مخرجات Pandas المباشرة) لضمان موثوقية التقدير الإحصائي لبيانات العينات.
6. حساب التفرطح (Kurtosis) في بايثون والتمييز بين تعريفي بيرسون وفيشر
6.1 الحساب باستخدام مكتبة SciPy (الدالة scipy.stats.kurtosis)
توفر دالة scipy.stats.kurtosis إمكانية حساب التفرطح مع التحكم التام في تعريف التفرطح المستخدم ومعامل التحيز الإحصائي من خلال وسيطين رئيسيين: fisher وbias:
# حساب التفرطح الإضافي لفيشر (Fisher's Excess Kurtosis: الوضع الافتراضي fisher=True)
# في التوزيع الطبيعي تكون النتيجة = 0
kurt_fisher = stats.kurtosis(sample_data, fisher=True, bias=False)
# حساب التفرطح المطلق لبيرسون (Pearson's Kurtosis: ضبط fisher=False)
# في التوزيع الطبيعي تكون النتيجة = 3
kurt_pearson = stats.kurtosis(sample_data, fisher=False, bias=False)
print(f"التفرطح الإضافي لفيشر (Fisher's Excess): {kurt_fisher:.4f}")
print(f"التفرطح المطلق لبيرسون (Pearson's Absolute): {kurt_pearson:.4f}")
print(f"الفرق الرياضي الدقيق: {kurt_pearson - kurt_fisher:.4f} (يساوي دائماً 3)")
يُعد إدراك هذا التمييز أمراً محورياً لتجنب الخلط الشائع في تفسير النتائج، حيث إن قراءة قيمة $3$ في مقياس فيشر تعني تفرطحاً مدبباً شديداً، بينما تعني القيمة نفسها في مقياس بيرسون توزيعاً طبيعياً معتدلاً تماماً.
6.2 الحساب باستخدام مكتبة Pandas (الدالة DataFrame.kurt)
تتيح مكتبة Pandas حساب التفرطح عبر الدالتين المترادفتين kurt() وkurtosis(). تحسب Pandas افتراضياً التفرطح الإضافي المصحح للعينة (Sample Excess Kurtosis)، حيث يُطرح الرقم $3$ تلقائياً وتُطبق تعديلات درجات الحرية للعينات:
# حساب التفرطح الإضافي لكافة المتغيرات في جدول البيانات النفسي
kurtosis_summary = df_psych.kurt(numeric_only=True)
# دمج معاملات الالتواء والتفرطح في تقرير وصفي موحد
shape_metrics = pd.DataFrame({
'Skewness (G1)': df_psych.skew(numeric_only=True),
'Excess Kurtosis (g2)': df_psych.kurt(numeric_only=True)
})
# إضافة تصنيف وصفي للشكل التوزيعي برمجياً
shape_metrics['Kurtosis Class'] = shape_metrics['Excess Kurtosis (g2)'].apply(
lambda x: 'Leptokurtic (مدبب)' if x > 0.5 else ('Platykurtic (مسطح)' if x < -0.5 else 'Mesokurtic (معتدل)')
)
print("جدول التقرير الوصفي للشكل التوزيعي:")
print(shape_metrics)
يوفر هذا الدمج البرمجي رؤية شاملة وسريعة لبنية المتغيرات المتعددة، مما يسهل عملية إعداد التقارير الإحصائية والجداول الوصفية للنشر الأكاديمي.
6.3 حساب التفرطح باستخدام مكتبة Statsmodels
تُعد مكتبة Statsmodels المنصة الرائدة لبناء النماذج الخطية المتقدمة، وتتضمن أدوات تشخيصية مدمجة لفحص تفرطح والتواء بواقي النماذج (Model Residuals). عند بناء نموذج انحدار خطي، تُدرج Statsmodels مقاييس الشكل التوزيعي للبواقي تلقائياً ضمن جدول المخرجات الشامل:
# بناء نموذج انحدار خطي افتراضي
X = sm.add_constant(df_psych['Self_Esteem'])
y = df_psych['Depression']
model = sm.OLS(y, X).fit()
# استخراج تقرير الانحدار وتلخيص مؤشرات البواقي
print(model.summary())
# استخراج معاملات الالتواء والتفرطح للبواقي مباشرة عبر الدوال المتخصصة
residuals = model.resid
resid_skew = stats.skew(residuals, bias=False)
resid_kurt = stats.kurtosis(residuals, fisher=True, bias=False)
print(f"nالتواء البواقي (Residual Skewness): {resid_skew:.4f}")
print(f"تفرطح البواقي الإضافي (Residual Kurtosis): {resid_kurt:.4f}")
يُعد التحقق من اعتدالية وتفرطح البواقي شرطاً أساسياً لضمان عدم تحيز فترات الثقة لمعاملات الانحدار وصحة اختبارات الفرضيات الاستدلالية ($t$-tests & $F$-tests).
7. التطبيق العملي على مجموعات بيانات سيكومترية وسلوكية
7.1 تحليل استجابات مقياس ليكرت (Likert Scale Data)
تمثل مقاييس ليكرت (Likert Scales) العمود الفقري لأدوات القياس في العلوم النفسية والتربوية والإدارية. ورغم أن بيانات ليكرت تُصنف نظرياً كبيانات ترتيبية (Ordinal Data)، إلا أن الممارسة السيكومترية المتقدمة تعامل المجاميع والمتوسطات المركبة كبيانات فئوية تقريبية، مما يستوجب فحص التواء وتفرطح كل فقرة من فقرات المقياس لتشخيص أدائها السيكومتري وقدرتها التمييزية.
يوضح الكود التالي كيفية فحص فقرات مقياس الرضا الوظيفي المكون من 5 فقرات متدرجة من 1 (غير موافق بشدة) إلى 5 (موافق بشدة):
# محاكاة استجابات 300 مفحوص على مقياس ليكرت خماسي (5 بنود)
np.random.seed(101)
likert_data = {
'Item_1': np.random.choice([1, 2, 3, 4, 5], p=[0.05, 0.10, 0.20, 0.45, 0.20], size=300), # التواء سالب معتدل
'Item_2': np.random.choice([1, 2, 3, 4, 5], p=[0.50, 0.30, 0.10, 0.05, 0.05], size=300), # التواء موجب شديد (تأثير أرضية)
'Item_3': np.random.choice([1, 2, 3, 4, 5], p=[0.05, 0.05, 0.10, 0.30, 0.50], size=300), # التواء سالب شديد (تأثير سقف)
'Item_4': np.random.choice([1, 2, 3, 4, 5], p=[0.10, 0.20, 0.40, 0.20, 0.10], size=300), # توزيع متماثل
'Item_5': np.random.choice([1, 2, 3, 4, 5], p=[0.25, 0.10, 0.30, 0.10, 0.25], size=300) # تفرطح مسطح
}
df_likert = pd.DataFrame(likert_data)
# حساب الإحصاءات الوصفية ومقاييس الشكل لكل فقرة
item_analysis = pd.DataFrame({
'المتوسط': df_likert.mean(),
'الانحراف المعياري': df_likert.std(),
'الالتواء (Skewness)': df_likert.skew(),
'التفرطح (Kurtosis)': df_likert.kurt()
})
# تحديد الفقرات المشوهة التي تتجاوز حدود القبول (|الالتواء| > 1.5)
item_analysis['قرار الفحص السيكومتري'] = item_analysis['الالتواء (Skewness)'].apply(
lambda x: 'مراجعة أو استبعاد (التواء حاد)' if abs(x) > 1.5 else 'مقبولة سيكومترياً'
)
print(item_analysis)
تساعد هذه التقييمات الآلية مطوري المقاييس النفسية في تحديد الفقرات ذات الصياغات المضللة أو الحساسة التي قد تولد استجابات متحيزة ومفتقرة للقدرة التمييزية، مما يوجه قرارات تنقيح الاختبار وإعادة بنائه.
7.2 تحليل أزمنة الرجع (Reaction Time Data) في علم النفس المعرفي
تُعد بيانات زمن الرجع (Reaction Time – RT) في علم النفس المعرفي والتجريبي النموذج الكلاسيكي الأبرز للتوزيعات ذات الالتواء الموجب الشديد؛ حيث تكون غالبية استجابات المشاركين سريعة ومحصورة في مدى زمني ضيق، بينما تتوزع استجابات قليلة ممتدة عبر ذيل طويل جداً نحو اليمين بسبب لحظات التشتت الذهني أو المعالجة الإدراكية المعقدة.
يوضح الكود التالي محاكاة دقيقة لأزمنة الرجع باستخدام التوزيع اللوغاريتمي الطبيعي (Lognormal Distribution) وتحليل شكل التوزيع قبل وبعد تطبيق المعالجات التجريبية:
# محاكاة أزمنة استجابة 1000 تجربة معرفية (بالمللي ثانية)
np.random.seed(202)
reaction_times = np.random.lognormal(mean=5.8, sigma=0.45, size=1000)
# حساب مقاييس النزعة والشكل التوزيعي
rt_mean = np.mean(reaction_times)
rt_median = np.median(reaction_times)
rt_skew = stats.skew(reaction_times, bias=False)
rt_kurt = stats.kurtosis(reaction_times, fisher=True, bias=False)
print(f"المتوسط الحسابي لزمن الرجع: {rt_mean:.2f} ms")
print(f"الوسيط لزمن الرجع: {rt_median:.2f} ms")
print(f"معامل الالتواء: {rt_skew:.4f} (التواء موجب واضح: المتوسط > الوسيط)")
print(f"معامل التفرطح الإضافي: {rt_kurt:.4f} (ذيول ثقيلة جداً)")
يبرهن هذا التحليل الرياضي على سبب عدم جواز استخدام المتوسط الحسابي بمفرده لتلخيص أزمنة الاستجابة المعرفية، مما يفرض استخدام الوسيط أو تطبيق التحويلات اللوغاريتمية قبل التحليل البارامتري.
7.3 بناء دالة بايثون مخصصة لحساب وتلخيص مقاييس الشكل التوزيعي
لتعزيز كفاءة التحليل وتطبيق أفضل ممارسات هندسة البرمجيات القابلة لإعادة الاستخدام، يوضح الكود التالي بناء دالة شاملة تستقبل أي مصفوفة بيانات أو جدول Pandas وتعيد تقريراً إحصائياً متكاملاً يتضمن جميع العزوم وفترات الثقة والتفسيرات السيكومترية الآلية:
def comprehensive_distributional_report(data, column_name=None, alpha=0.05):
"""
دالة متكاملة لحساب وتلخيص مقاييس الشكل التوزيعي واختبارات الاعتدالية.
"""
if isinstance(data, pd.DataFrame) and column_name:
vec = data[column_name].dropna().values
elif isinstance(data, pd.Series):
vec = data.dropna().values
else:
vec = np.asarray(data)
vec = vec[~np.isnan(vec)]
n = len(vec)
mean_val = np.mean(vec)
median_val = np.median(vec)
std_val = np.std(vec, ddof=1)
skew_val = stats.skew(vec, bias=False)
kurt_val = stats.kurtosis(vec, fisher=True, bias=False)
# حساب الأخطاء المعيارية المقاربة (Asymptotic Standard Errors)
se_skew = np.sqrt((6.0 * n * (n - 1)) / ((n - 2) * (n + 1) * (n + 3)))
se_kurt = 2.0 * se_skew * np.sqrt((n**2 - 1.0) / ((n - 3) * (n + 5)))
# الدرجات المعيارية Z-scores
z_skew = skew_val / se_skew
z_kurt = kurt_val / se_kurt
# اختبار داغوستينو الشامل للاعتدالية
norm_stat, norm_p = stats.normaltest(vec)
report = pd.DataFrame({
'المؤشر الإحصائي': [
'حجم العينة (N)', 'المتوسط الحسابي', 'الوسيط', 'الانحراف المعياري',
'معامل الالتواء (Skewness G1)', 'الخطأ المعياري للالتواء (SE_skew)', 'الدرجة المعيارية للالتواء (Z_skew)',
'التفرطح الإضافي (Excess Kurtosis g2)', 'الخطأ المعياري للتفرطح (SE_kurt)', 'الدرجة المعيارية للتفرطح (Z_kurt)',
'إحصاء اختبار داغوستينو (K2)', 'القيمة الاحتمالية للاعتدالية (p-value)'
],
'القيمة': [
n, mean_val, median_val, std_val,
skew_val, se_skew, z_skew,
kurt_val, se_kurt, z_kurt,
norm_stat, norm_p
]
})
return report
# تطبيق الدالة على بيانات أزمنة الرجع
custom_report = comprehensive_distributional_report(reaction_times)
print(custom_report.to_string(index=False))
توفر هذه الدالة مخرجات شاملة تجمع بين التقديرات النقطية ومؤشرات الدلالة الإحصائية، مما يجعلها أداة معيارية متكاملة للتقييم الإحصائي السريع والموثوق.
8. التصور البياني المتقدم للتوزيعات اللامتماثلة والتفرطح في بايثون
8.1 رسم المدرجات التكرارية ومنحنيات الكثافة (Histograms & KDE)
يُعد التمثيل المرئي للبيانات الخطوة المكملة للحسابات العددية؛ إذ يتيح للمحلل التحقق المباشر من مطابقة الأرقام للواقع الهندسي للمنحنى. يوفر الجمع بين المدرج التكراري (Histogram) وتقدير الكثافة النواة (Kernel Density Estimation – KDE) عبر مكتبة Seaborn رؤية بصرية بالغة الدقة لشكل التوزيع.
يوضح الكود التالي كيفية رسم توزيع ملتوٍ مع إسقاط خطوط مقاييس النزعة المركزية ومقارنته بمنحنى التوزيع الطبيعي النظري المقابل:
# تجهيز البيانات وتحديد الأبعاد البيانية
fig, ax = plt.subplots(figsize=(10, 6), dpi=300)
# رسم المدرج التكراري ومنحنى الكثافة KDE
sns.histplot(reaction_times, kde=True, stat="density", color="#2b5c8f", bins=40, alpha=0.4, ax=ax, label='الكثافة التجريبية (Empirical KDE)')
# رسم منحنى التوزيع الطبيعي النظري المطابق في المتوسط والتباين
x_axis = np.linspace(np.min(reaction_times), np.max(reaction_times), 500)
normal_fit = stats.norm.pdf(x_axis, loc=np.mean(reaction_times), scale=np.std(reaction_times))
ax.plot(x_axis, normal_fit, 'r--', lw=2.5, label='المنحنى الطبيعي النظري المطابق')
# إسقاط خطوط النزعة المركزية لإيضاح الالتواء بيانياً
ax.axvline(np.mean(reaction_times), color='red', linestyle='-', lw=2, label=f'المتوسط: {np.mean(reaction_times):.1f}')
ax.axvline(np.median(reaction_times), color='green', linestyle='-.', lw=2, label=f'الوسيط: {np.median(reaction_times):.1f}')
# ضبط العناوين والمحاور وفق معايير النشر العلمي
ax.set_title("شكل التوزيع التكراري لأزمنة الرجع موضحاً الالتواء الموجب", fontsize=14, fontweight='bold', pad=15)
ax.set_xlabel("زمن الرجع (مللي ثانية)", fontsize=12)
ax.set_ylabel("الكثافة الاحتمالية", fontsize=12)
ax.legend(loc='upper right', frameon=True)
plt.tight_layout()
plt.show()
يكشف هذا الرسم التباعد الواضح بين خط المتوسط (المنسحب نحو اليمين بفعل الذيل) وخط الوسيط، مما يرسخ الفهم البصري لمعنى الالتواء الموجب.
8.2 استخدام المخططات الصندوقية ومخططات الكميات (Boxplots & Q-Q Plots)
توفر المخططات الصندوقية (Boxplots) ومخططات الكميات-الكميات (Quantile-Quantile Plots / Q-Q Plots) أدوات تشخيصية بالغة الحساسية لتشخيص عدم التناظر وثقل الذيول ووجود القيم الشاذة المتطرفة:
fig, axes = plt.subplots(1, 2, figsize=(14, 5), dpi=300)
# المخطط الصندوقي (Boxplot)
sns.boxplot(x=reaction_times, color="#7293CB", ax=axes[0], flierprops={"marker": "o", "markersize": 4, "markerfacecolor": "red"})
axes[0].set_title("المخطط الصندوقي (يوضح عدم التناظر والقيم الشاذة الطرفية)", fontsize=12, fontweight='bold')
axes[0].set_xlabel("زمن الرجع (ms)")
# مخطط الكميات-الكميات (Q-Q Plot)
stats.probplot(reaction_times, dist="norm", plot=axes[1])
axes[1].get_lines()[0].set_markerfacecolor('#2b5c8f')
axes[1].get_lines()[0].set_markersize(4.0)
axes[1].get_lines()[1].set_color('red')
axes[1].get_lines()[1].set_linewidth(2.0)
axes[1].set_title("مخطط الكميات الطبيعي (Q-Q Plot)", fontsize=12, fontweight='bold')
axes[1].set_xlabel("الكميات النظرية الطبيعية")
axes[1].set_ylabel("كميات البيانات الفعلية")
plt.tight_layout()
plt.show()
في مخطط Q-Q، يظهر الالتواء الموجب على شكل انحناء تقوّسي صاعد واضح فوق خط المرجع الأحمر عند الأطراف العليا، بينما تعكس انحرافات النقاط عند أقصى اليمين وأقصى اليسار ثقل الذيول ودرجة التفرطح المدبب.
8.3 تخصيص الرسوم البيانية للنشر الأكاديمي وفق معايير APA
تشترط المجلات العلمية المحكمة المنضوية تحت معايير جمعية علم النفس الأمريكية (APA Style) معايير بصرية صارمة تشمل وضوح التباين، واستخدام الخطوط القياسية (مثل Arial أو Times New Roman)، وتجنب الألوان الفاقعة غير الضرورية، وتضمين المؤشرات الإحصائية مباشرة في الشكل، وتصدير الصور بدقة طباعية فائقة (Vector Formats أو 300+ DPI):
# ضبط معلمات Matplotlib لتتوافق مع معايير APA 7th Edition
plt.rcParams.update({
'font.sans-serif': 'DejaVu Sans',
'axes.edgecolor': '#333333',
'axes.linewidth': 1.0,
'grid.color': '#e0e0e0',
'grid.linestyle': '--',
'grid.alpha': 0.7
})
fig, ax = plt.subplots(figsize=(8, 5), dpi=300)
sns.histplot(df_psych['Self_Esteem'], kde=True, stat="density", color="#4D4D4D", bins=25, alpha=0.3, ax=ax)
# إضافة صندوق نصي يحتوي على المعاملات الوصفية داخل الرسم
textstr = 'n'.join((
r'$N = 500$',
r'$\text{Mean} = 30.12$',
r'$SD = 4.95$',
r'$\text{Skewness } (G_1) = 0.04$',
r'$\text{Excess Kurt } (g_2) = -0.11$'
))
props = dict(boxstyle='round,pad=0.6', facecolor='white', alpha=0.9, edgecolor='#999999')
ax.text(0.05, 0.95, textstr, transform=ax.transAxes, fontsize=10, verticalalignment='top', bbox=props)
ax.set_title("Figure 1. Distribution of Self-Esteem Assessment Scores", fontsize=12, fontweight='bold', loc='left', pad=15)
ax.set_xlabel("Self-Esteem Composite Score", fontsize=11)
ax.set_ylabel("Probability Density", fontsize=11)
# حفظ الرسم بصيغة PDF عالية الدقة للنشر
plt.savefig("APA_Distribution_Figure.pdf", format='pdf', dpi=300, bbox_inches='tight')
plt.show()
يضمن هذا التخصيص جاهزية الأشكال البيانية للإدراج المباشر في المخطوطات العلمية والأطروحات الأكاديمية بأعلى مستويات الجودة الاحترافية.
9. اختبارات الدلالة الإحصائية للالتواء والتفرطح واعتدالية البيانات
9.1 اختبار داغوستينو-بيرسون الشامل (D’Agostino’s K-squared Test)
يُعد اختبار داغوستينو-بيرسون ($K^2$) أحد أقوى وأشمل الاختبارات الإحصائية لفحص التوزيع الطبيعي؛ حيث يقوم الاختبار بحساب تحويلات معيارية لمعامل الالتواء ($Z(g_1)$) ومعامل التفرطح ($Z(g_2)$)، ثم يدمجهما معاً في إحصاء كاي تربيع ($\chi^2$) بدرجتي حرية ($df=2$):
$$K^2 = Z^2(g_1) + Z^2(g_2) \sim \chi^2(2)$$
تتمثل ميزة هذا الاختبار في قدرته على اختبار فرضية العدم (التي تنص على أن البيانات مسحوبة من مجتمع يتوزع توزيعاً طبيعياً) مع تحديد مصدر الانتهاك بدقة (سواء كان ناجماً عن عدم التناظر أو عن ثقل الذيول أو كلاهما معاً). في بايثون، يُطبق هذا الاختبار عبر دالة scipy.stats.normaltest:
# تطبيق اختبار داغوستينو على متغير أزمنة الرجع
k2_stat, p_val = stats.normaltest(reaction_times)
print(f"إحصاء داغوستينو (K2 Statistic): {k2_stat:.4f}")
print(f"القيمة الاحتمالية (p-value): {p_val:.4e}")
alpha = 0.05
if p_val < alpha:
print("القرار: نرفض فرضية العدم (البيانات تنتهك التوزيع الطبيعي بدلالة إحصائية).")
else:
print("القرار: نقبل فرضية العدم (البيانات تتبع التوزيع الطبيعي).")
يُفضل هذا الاختبار على نطاق واسع في العينات المتوسطة والكبيرة ($N > 50$) نظراً لقوته الإحصائية العالية ومقاومته للتحيزات الطفيفة مقارنة بالاختبارات التقليدية القديمة كاختبار كولموجروف-سميرنوف.
9.2 اختبار جارك-بيرا (Jarque-Bera Test) للعينات المقارنة
يُعد اختبار جارك-بيرا (Jarque-Bera Test) اختباراً كلاسيكياً شائع الاستخدام في الاقتصاد القياسي والسلاسل الزمنية والبيانات المالية. يعتمد الاختبار مباشرة على مربعات معاملات الالتواء والتفرطح الإضافي للعينة:
$$JB = \frac{n}{6} \left( S^2 + \frac{(K – 3)^2}{4} \right) = \frac{n}{6} \left( G_1^2 + \frac{g_2^2}{4} \right) \sim \chi^2(2)$$
حيث يمثل $n$ حجم العينة، و$S$ الالتواء، و$K$ التفرطح المطلق. يمكن تطبيق الاختبار في بايثون بسهولة باستخدام دالة scipy.stats.jarque_bera:
# تطبيق اختبار جارك-بيرا
jb_stat, jb_p_value = stats.jarque_bera(reaction_times)
print(f"إحصاء جارك-بيرا (JB Statistic): {jb_stat:.4f}")
print(f"القيمة الاحتمالية: {jb_p_value:.4e}")
من المهم الإشارة إلى أن اختبار جارك-بيرا هو اختبار مقاربي (Asymptotic Test) تم تصميمه للعينات الكبيرة، وقد يعاني من تضخيم معدل الخطأ من النوع الأول في العينات الصغيرة ($N < 50$)، حيث يتفوق عليه في هذه الحالة اختبار شابيرو-ويلك (Shapiro-Wilk Test).
9.3 حساب الخطأ المعياري والدرجة المعيارية (Z-score) للالتواء والتفرطح
في العينات الصغيرة والمتوسطة ($30 < N < 300$)، يعتمد المنهجيون الإحصائيون على تحويل معاملات الالتواء والتفرطح إلى درجات معيارية ($Z$-scores) عبر قسمة المعامل المحسوب على خطئه المعياري النظري:
$$SE_{\text{skew}} \approx \sqrt{\frac{6}{n}}, \quad Z_{\text{skew}} = \frac{G_1}{SE_{\text{skew}}}$$
$$SE_{\text{kurt}} \approx \sqrt{\frac{24}{n}}, \quad Z_{\text{kurt}} = \frac{g_2}{SE_{\text{kurt}}}$$
تتم مقارنة الدرجة المعيارية الناتجة بالقيم الحرجة للتوزيع الطبيعي المعياري:
- عند مستوى دلالة $\alpha = 0.05$: إذا كانت $|Z| > 1.96$، يُعد الالتواء أو التفرطح دالاً إحصائياً (غير معتدل).
- عند مستوى دلالة $\alpha = 0.01$: إذا كانت $|Z| > 2.58$، يُعد الانحراف عن الاعتدالية شديد الدلالة.
- في العينات الكبيرة جداً ($N > 500$)، تفقد هذه النسب المعيارية فائدتها التطبيقية لأن أدنى انحراف طفيف سيظهر كدال إحصائياً، ويصبح التركيز منصباً على القيمة المطلقة للمعامل وليس على قيمته الاحتمالية.
10. معالجة البيانات غير الاعتدالية: تقنيات التحويل الإحصائي في بايثون
10.1 تحويلات اللوغاريتم والجذر التربيعي والمقلوب للبيانات الملتوية
عندما تُظهر البيانات التواءً شديداً ينتهك افتراضات النماذج البارامترية، يلجأ المحلل إلى التحويلات الرياضية (Mathematical Transformations) لتقليص الذيول وتعديل التوزيع نحو التماثل. تعتمد صيغة التحويل المختارة على اتجاه وشدة الالتواء:
- تحويل اللوغاريتم الطبيعي ($log(x)$ أو $log1p(x)$): التحويل الأمثل للالتواء الموجب الشديد (مثل أزمنة الرجع والدخل المالي). يُفضل استخدام
np.log1pفي بايثون لمعالجة القيم التي قد تقترب من الصفر ($log(1+x)$). - تحويل الجذر التربيعي ($\sqrt{x}$): مثالي لمعالجة الالتواء الموجب المعتدل وبيانات العد والترددات (Count Data).
- تحويل المقلوب ($1/x$): تحويل جذري قوي يُستخدم للالتواء الموجب المفرط جداً.
- عكس المتغير للالتواء السالب (Reflect Transformation): للتعامل مع الالتواء السالب، يتم أولاً عكس اتجاه المتغير بطرح كل قيمة من (أعلى قيمة + 1)، ثم تطبيق التحويل اللوغاريتمي أو الجذري، ثم إعادة الترتيب.
يوضح المثال التالي تطبيق هذه التحويلات ومقارنة معاملات الشكل قبل وبعد التحويل:
# تطبيق التحويلات على بيانات أزمنة الرجع الملتوية موجباً
rt_log = np.log(reaction_times)
rt_sqrt = np.sqrt(reaction_times)
rt_reciprocal = 1.0 / reaction_times
transformation_comparison = pd.DataFrame({
'التحويل الإحصائي': ['البيانات الأصلية (Original)', 'اللوغاريتمي (Log)', 'الجذر التربيعي (Square Root)', 'المقلوب (Reciprocal)'],
'معامل الالتواء': [stats.skew(reaction_times), stats.skew(rt_log), stats.skew(rt_sqrt), stats.skew(rt_reciprocal)],
'التفرطح الإضافي': [stats.kurtosis(reaction_times), stats.kurtosis(rt_log), stats.kurtosis(rt_sqrt), stats.kurtosis(rt_reciprocal)]
})
print(transformation_comparison)
10.2 تحويل بوكس-كوكس (Box-Cox Transformation)
يمثل تحويل بوكس-كوكس (Box-Cox) أسلوباً بارامترياً متقدماً يبحث خوارزمياً عن معامل التحويل الأفضل ($lambda$) الذي يقلل عدم الاعتدالية إلى أدنى حد ممكن، وفق الدالة التحويلية المعرفة كالتالي:
$$y^{(\lambda)} = \begin{\cases} \frac{y^\lambda – 1}{\lambda} &a\mp; \text{if } \lambda \neq 0 \ \ln(y) &a\mp; \text{if } \lambda = 0 \end{\cases}$$
يشترط تحويل بوكس-كوكس أن تكون جميع قيم المتغير موجبة تماماً ($y > 0$). في بايثون، يُطبق التحويل ويُستخرج معامل $lambda$ الأمثل عبر دالة scipy.stats.boxcox:
# تطبيق تحويل بوكس-كوكس واسترجاع قيمة لامدا المثلى
rt_boxcox, optimal_lambda = stats.boxcox(reaction_times)
print(f"قيمة Lambda المثلى لتحقيق الاعتدالية: {optimal_lambda:.4f}")
print(f"معامل الالتواء بعد بوكس-كوكس: {stats.skew(rt_boxcox):.4f}")
print(f"معامل التفرطح بعد بوكس-كوكس: {stats.kurtosis(rt_boxcox):.4f}")
تؤدي هذه المعالجة الآلية إلى تحويل التوزيع الملتوي إلى توزيع متماثل ومعتدل تماماً، مما يجعله جاهزاً للنمذجة الخطية دون أي قلق من انتهاك الفرضيات.
10.3 تحويل يو-جونسون (Yeo-Johnson Transformation)
يتميز تحويل يو-جونسون (Yeo-Johnson) بأنه تطوير عبقري لتحويل بوكس-كوكس يتغلب على شرط الإيجابية التامة؛ حيث يمكن تطبيقه مباشرة على مجموعات البيانات التي تحتوي على قيم صفرية وقيم سالبة دون الحاجة إلى إضافة ثوابت عشوائية مسبقة.
يمكن تنفيذ تحويل يو-جونسون بكفاءة عالية باستخدام مكتبة Scikit-Learn عبر فئة PowerTransformer:
from sklearn.preprocessing import PowerTransformer
# إنشاء بيانات تحتوي على قيم سالبة وموجبة والتواء غير منتظم
mixed_data = np.random.exponential(scale=2.0, size=(500, 1)) - 2.5
# تطبيق محول القوى يو-جونسون
pt = PowerTransformer(method='yeo-johnson', standardize=True)
transformed_data = pt.fit_transform(mixed_data)
print(f"الالتواء قبل التحويل: {stats.skew(mixed_data.flatten()):.4f}")
print(f"الالتواء بعد تحويل يو-جونسون: {stats.skew(transformed_data.flatten()):.4f}")
print(f"التفرطح بعد تحويل يو-جونسون: {stats.kurtosis(transformed_data.flatten()):.4f}")
# إمكانية إعادة البيانات إلى مقياسها الأصلي لتفسير النتائج (Inverse Transform)
original_scale_data = pt.inverse_transform(transformed_data)
تُعد خاصية التحويل العكسي (inverse_transform) ميزة بالغة الأهمية للباحثين؛ إذ تتيح إجراء التحليلات والنمذجة على البيانات المحولة ثم إعادة التنبؤات والتقديرات إلى مقياس الدرجات الأصلي لتسهيل التفسير الميداني والسيكومتري.
11. الأخطاء الشائعة والاعتبارات المنهجية المتقدمة في الحساب البرمجي
11.1 الخلط بين التفرطح المطلق والتفرطح الإضافي (Excess Kurtosis)
يُعد الخلط بين التفرطح المطلق لبيرسون والتفرطح الإضافي لفيشر الخطأ المنهجي الأكثر شيوعاً في تقارير البحوث النفسية والتحليلات البرمجية. ينشأ هذا الخطأ عندما يقرأ المحلل قيمة تفرطح ناتجة عن بيئة تحليلية (مثل دالة فيشر الافتراضية في بايثون أو SPSS والتي تطرح الرقم 3) ويفسرها استناداً إلى معيار بيرسون المطلق.
لتجنب هذا التضارب، يجب على الباحث الالتزام الدقيق بالقواعد التوثيقية التالية:
- التصريح الصريح في منهجية البحث بالصيغة المعتمدة: كتابة “تم حساب التفرطح الإضافي لفيشر (Fisher’s Excess Kurtosis) حيث يساوي التوزيع الطبيعي 0”.
- عند تبادل الأكواد البرمجية بين بيئات مختلفة (كالمقارنة بين حزم R وحزم بايثون)، يجب التأكد من ضبط وسائط التحيز والتفرطح؛ فحزمة
e1071في R توفر 3 أنواع مختلفة من الصيغ (Types 1, 2, 3)، بينما توفر دالةscipy.stats.kurtosisالتحكم عبرfisherوbias.
11.2 تأثير حجم العينة على موثوقية تقديرات الالتواء والتفرطح
تتسم العزوم الإحصائية العليا بحساسية مفرطة لحجم العينة ($N$). في العينات الصغيرة ($N < 50$)، تفتقر تقديرات الالتواء وخاصة التفرطح إلى الاستقرار الرياضي وتتأثر بشكل حاد بالتقلبات العشوائية، مما يجعل التقديرات النقطية غير كافية بمفردها لاتخاذ قرارات حاسمة.
للتغلب على ذلك، يُوصى باستخدام أسلوب إعادة العينات بالبوتستراب (Bootstrapping) في بايثون لتقدير فترات الثقة (Confidence Intervals) لمعاملات الشكل التوزيعي عبر آلاف التكرارات:
def bootstrap_metric_ci(data, metric_func, n_boot=2000, ci=95):
"""حساب فترات الثقة البوتسترابية لأي مقياس إحصائي."""
boot_stats = []
n = len(data)
np.random.seed(42)
for _ in range(n_boot):
sample = np.random.choice(data, size=n, replace=True)
boot_stats.append(metric_func(sample))
lower_bound = np.percentile(boot_stats, (100 - ci) / 2)
upper_bound = np.percentile(boot_stats, 100 - (100 - ci) / 2)
return lower_bound, upper_bound
# حساب فترة ثقة 95% لمعامل التفرطح الإضافي
ci_low, ci_high = bootstrap_metric_ci(reaction_times, lambda x: stats.kurtosis(x, fisher=True, bias=False))
print(f"تقدير التفرطح النقطي: {stats.kurtosis(reaction_times, fisher=True, bias=False):.4f}")
print(f"فترة الثقة 95% بالبوتستراب: [{ci_low:.4f}, {ci_high:.4f}]")
يوفر هذا النهج تقديراً رصيناً لمدى استقرار المعامل ومداه الحقيقي في المجتمع المستهدف.
11.3 حساسية المقاييس للقيم الشاذة المتطرفة (Outlier Sensitivity)
نظراً لأن حساب التفرطح يعتمد على رفع الفروق إلى الأس الرابع ($4$) والالتواء إلى الأس التكعيبي ($3$)، فإن وجود نقطة بيانات شاذة واحدة متباعدة بدرجة كبيرة يمكن أن يقلب قيمة التفرطح من قيمة سالبة إلى قيمة موجبة ضخمة، مما يعطي انطباعاً زائفاً حول بنية التوزيع بأكمله.
كحل منهجي متقدم، يمكن اللجوء إلى مقاييس الشكل الحصينة (Robust Skewness & Kurtosis) القائمة على المئينات (Quantiles) ونطاقات الأرباع، والتي لا تتأثر بالقيم الشاذة الطرفية، مثل مقياس التواء باولِي (Bowley’s Skewness) ومقياس مورز للتفرطح (Moors’ Kurtosis):
def robust_skewness_bowley(data):
"""حساب التواء باولي الحصين المعتمد على الأرباع."""
q1 = np.percentile(data, 25)
q2 = np.percentile(data, 50) # الوسيط
q3 = np.percentile(data, 75)
return (q3 + q1 - 2 * q2) / (q3 - q1)
def robust_kurtosis_moors(data):
"""حساب تفرطح مورز الحصين المعتمد على الأثمان (Octiles)."""
o1, o2, o3, o4, o5, o6, o7 = [np.percentile(data, p) for p in [12.5, 25, 37.5, 50, 62.5, 75, 87.5]]
return ((o7 - o5) + (o3 - o1)) / (o6 - o2)
print(f"الالتواء الكلاسيكي (المتأثر بالشواذ): {stats.skew(reaction_times):.4f}")
print(f"التواء باولي الحصين (Robust Bowley Skew): {robust_skewness_bowley(reaction_times):.4f}")
print(f"تفرطح مورز الحصين (Robust Moors Kurtosis): {robust_kurtosis_moors(reaction_times):.4f}")
تسمح مقارنة المقاييس الكلاسيكية بالمقاييس الحصينة بتشخيص ما إذا كان الالتواء والتفرطح سمة بنيوية أصيلة في مجمل البيانات، أم أنهما نتاج ملاحظات متطرفة محدودة بحاجة إلى عزل أو تنقيح.
12. دراسة حالة متكاملة واستراتيجيات صياغة التقارير الإحصائية
12.1 تطبيق عملي شامل من استيراد البيانات حتى تفسير النتائج
لتجسيد كافة الخطوات المشروحة، يوضح الكود التالي بناء خط معالجة تحليلي متكامل (End-to-End Pipeline) على مجموعة بيانات سيكومترية تحاكي تقييم مقياس القلق الوظيفي (Job Anxiety Inventory):
# 1. توليد بيانات سيكومترية تحاكي درجات 400 موظف
np.random.seed(303)
raw_anxiety_scores = np.random.gamma(shape=2.5, scale=4.0, size=400) + 10
df_case = pd.DataFrame({'Anxiety_Score': raw_anxiety_scores})
# 2. الفحص الوصفي وحساب العزوم المصححة
n_obs = len(df_case)
mean_sc = df_case['Anxiety_Score'].mean()
sd_sc = df_case['Anxiety_Score'].std()
skew_sc = df_case['Anxiety_Score'].skew()
kurt_sc = df_case['Anxiety_Score'].kurt()
# 3. اختبار الدلالة الإحصائية للاعتدالية
norm_stat, norm_p = stats.normaltest(df_case['Anxiety_Score'])
# 4. اتخاذ القرار التحويلي وتنفيذه
if abs(skew_sc) > 1.0 or abs(kurt_sc) > 1.0 or norm_p < 0.05:
df_case['Anxiety_Transformed'], opt_lambda = stats.boxcox(df_case['Anxiety_Score'])
trans_skew = df_case['Anxiety_Transformed'].skew()
trans_kurt = df_case['Anxiety_Transformed'].kurt()
print(f"تم تطبيق تحويل بوكس-كوكس بنجاح (Lambda = {opt_lambda:.3f})")
print(f"الالتواء بعد التحويل: {trans_skew:.4f} | التفرطح بعد التحويل: {trans_kurt:.4f}")
يقوم هذا المسار البرمجي بتقييم البيانات آلياً، وتطبيق المعالجة الرياضية الملائمة عند ثبوت انتهاك فرضية الاعتدالية، مع توثيق التحسن الناتج في معاملات الشكل التوزيعي.
12.2 صياغة وتوثيق نتائج الالتواء والتفرطح وفق دليل APA (الإصدار السابع)
يتطلب توثيق النتائج الإحصائية وفق دليل الجمعية الأمريكية لعلم النفس (APA 7th Edition) دمج المؤشرات الوصفية والأخطاء المعيارية وصيغ التفرطح بدقة ووضوح داخل متن البحث والجداول المرفقة.
نموذج الصياغة الأكاديمية القياسية في متن البحث:
“أظهر الفحص الوصفي الأولي لدرجات مقياس القلق الوظيفي ($N = 400$) وجود انحراف ملحوظ عن التوزيع الطبيعي المعياري؛ حيث بلغ المتوسط الحسابي $19.98$ ($SD = 6.27$). وسجل المتغير التواءً موجباً دالاً إحصائياً ($G_1 = 0.96$, $SE = 0.12$, $Z = 7.87$, $p < .001$)، وتفرطحاً إضافياً موجباً يعكس ذيولاً ثقيلة ($g_2 = 1.34$, $SE = 0.24$, $Z = 5.51$, $p < .001$). أكد اختبار داغوستينو-بيرسون انتهاك فرضية الاعتدالية التوزيعية ($\chi^2(2) = 64.21, p < .001$). وبناءً على ذلك، تم تطبيق تحويل بوكس-كوكس البارامتري ($lambda = 0.312$)، مما نجح في إعادة التوزيع إلى النطاق الطبيعي المتماثل ($G_1 = 0.03$, $g_2 = -0.08$) قبل المضي قدماً في اختبار الفرضيات عبر تحليل التباين المتعدد."
يوضح الجدول التالي النموذج المعتمد لعرض الإحصاءات الوصفية ومؤشرات الشكل التوزيعي وفق معايير APA:
| المتغير النفسي | $N$ | $M$ | $SD$ | الالتواء ($G_1$) | $SE_{\text{skew}}$ | التفرطح الإضافي ($g_2$) | $SE_{\text{kurt}}$ | قرار الاعتدالية |
|---|---|---|---|---|---|---|---|---|
| القلق الوظيفي (الخام) | 400 | 19.98 | 6.27 | +0.96 | 0.12 | +1.34 | 0.24 | غير معتدل ($p < .001$) |
| القلق الوظيفي (المحوَّل) | 400 | 4.82 | 0.89 | +0.03 | 0.12 | -0.08 | 0.24 | معتدل تماماً ($p = .824$) |
12.3 الخلاصة وأفضل الممارسات للباحثين ومحللي البيانات
نختتم هذا الدليل بتقديم قائمة فحص منهجية سريعة (Checklist) تلخص أفضل الممارسات التي ينبغي على كل باحث ومحلل بيانات مراعاتها عند دراسة الأشكال التوزيعية في بايثون:
- تجاوز النزعة المركزية دائماً: لا تعتمد مطلقاً على المتوسط والانحراف المعياري بمفردهما لوصف المتغيرات الرقمية المتصلة دون التحقق الصريح من الالتواء والتفرطح.
- الوعي بالفروق الاصطلاحية والبرمجية: تذكر دائماً أن SciPy تستخدم الصيغة المتحيزة افتراضياً ($bias=True$) وتعتمد تفرطح فيشر ($fisher=True$)، بينما تستخدم Pandas الصيغة المصححة للعينة ($bias=False$) وتطرح الرقم 3 تلقائياً.
- الجمع بين الأرقام والرؤية البصرية: لا تتخذ قرارات تحويلية بناءً على الأرقام الصماء فقط؛ ادعم تحليلك برسم المدرجات التكرارية، ومنحنيات KDE، ومخططات الكميات الطبيعية Q-Q plots.
- مراعاة حجم العينة: في العينات الكبيرة ($N > 500$)، ركز على الحجم المطلق لمعاملي الالتواء والتفرطح (نطاق $\pm 1$ أو $\pm 2$) وتجاهل القيم الاحتمالية الصغرى الناتجة عن تضخم القوة الإحصائية. في المقابل، استخدم البوتستراب والمقاييس الحصينة للعينات الصغيرة.
- التوثيق المنهجي الصارم: صرح بوضوح في تقاريرك عن الصيغ الرياضية المستخدمة، ودرجات التحيز، والمعاملات التحويلية ($lambda$) لضمان قابلية إعادة الإنتاج والامتثال لأعلى معايير النشر العلمي الدولي.
References
- Cain, M. K., Zhang, Z., & Yuan, K. H. (2017). Univariate and multivariate skewness and kurtosis for measuring nonnormality: Clinical considerations and recommendations. Behavior Research Methods, 49(5), 1716–1735. https://doi.org/10.3758/s13428-016-0814-1
- DeCarlo, L. T. (1997). On the meaning and use of kurtosis. Psychological Methods, 2(3), 292–307. https://doi.org/10.1037/1082-989X.2.3.292
- George, D., & Mallery, P. (2020). IBM SPSS Statistics 26 Step by Step: A Simple Guide and Reference (16th ed.). Routledge. https://doi.org/10.4324/9780429056765
- Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., … & Oliphant, T. E. (2020). Array programming with NumPy. Nature, 585(7825), 357–362. https://doi.org/10.1038/s41586-020-2649-2
- Joanes, D. N., & Gill, C. A. (1998). Comparing measures of sample skewness and kurtosis. The Statistician, 47(1), 183–189. https://doi.org/10.1111/1467-9884.00122
- Kline, R. B. (2016). Principles and Practice of Structural Equation Modeling (4th ed.). Guilford Publications.
- McKinney, W. (2010). Data structures for statistical computing in Python. In Proceedings of the 9th Python in Science Conference (Vol. 445, pp. 51–56). https://doi.org/10.25080/Majora-92bf1921-003
- Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., … & Duchesnay, É. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12, 2825–2830.
- Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., … & 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
- Waskom, M. L. (2021). Seaborn: statistical data visualization. Journal of Open Source Software, 6(60), 3021. https://doi.org/10.21105/joss.03021
- Westfall, P. H. (2014). Kurtosis as peakedness, 1905–2014. R.I.P. The American Statistician, 68(3), 191–195. https://doi.org/10.1080/00031305.2014.917055