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

كيفية حساب R-Squared في بايثون (مع مثال)

دليل أكاديمي شامل يوضح كيفية حساب معامل التحديد (R-Squared) في لغة بايثون باستخدام مكتبات Scikit-Learn وStatsmodels وNumPy مع أمثلة تطبيقية تفصيلية.

تاريخ النشر

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

مع التطور التقني المتسارع والاعتماد الواسع على لغة بايثون (Python) كبيئة برمجية رائدة في الحوسبة العلمية ومعالجة البيانات، أصبحت عملية حساب واستخراج معامل التحديد ممارسة برمجية متعددة الأوجه والمسارات. توفر منظومة بايثون الغنية، ممثلة في حزم مثل Scikit-Learn وStatsmodels بالإضافة إلى المكتبات الحسابية الأساسية مثل NumPy وPandas، أدوات مرنة تتراوح بين التطبيق الرياضي المباشر من المبادئ الأولية، والأتمتة الإحصائية المتقدمة المدمجة ضمن جداول التحليل الشاملة. يتيح هذا التنوع للمحلل البرمجي الانتقال بسلاسة من الفهم النظري العميق للمعادلات الجبرية إلى التطبيق الميداني الفعّال على مجموعات البيانات المعقدة والضخمة.

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

1. مقدمة نظرية: مفهوم معامل التحديد (R-Squared) وأهميته الإحصائية

1.1 التعريف الإحصائي لمعامل التحديد (R²)

يُعرَّف معامل التحديد، والذي يُرمز له إحصائياً بالرمز (ويُنطق R-Squared)، بأنه مقياس إحصائي نسبي يحدد نسبة التباين (Proportion of Variance) في المتغير التابع (Dependent Variable) التي يمكن تفسيرها والتنبؤ بها من خلال المتغير أو المتغيرات المستقلة (Independent Variables) المدرجة في نموذج الانحدار. في السياق الإحصائي الكلاسيكي، يُمثل التباين مقدار تشتت المشاهدات الفردية حول متوسطها الحسابي، وتكمن الغاية الأساسية لأي نموذج انحداري في تقليص عدم اليقين المحيط بهذا التشتت عبر تقديم معلومات منهجية مستمدة من الخصائص التفسيرية. بالتالي، عندما يُقال إن قيمة لنموذج ما تساوي 0.75، فإن ذلك يعني بدقة أن 75% من التغيرات الملاحظة في الظاهرة المدروسة تعود بنيوياً إلى تأثير المتغيرات المستقلة المضمنة في المعادلة، بينما تظل النسبة المتبقية (25%) خاضعة لتأثير عوامل عشوائية غير مقاسة أو متضمنة في حد الخطأ.

يلعب هذا المقياس دوراً محورياً في تقييم ما يُعرف بجودة التوافق (Goodness of Fit)، وهي الدرجة التي يتطابق بها النموذج النظري المفترض مع البيانات التجريبية الفعلية المجمعة من الواقع. ومن الأهمية بمكان التمييز بين معامل الارتباط الخطي البسيط (Pearson’s r) ومعامل التحديد (R²). فبينما يقيس معامل الارتباط r قوة واتجاه العلاقة الخطية الثنائية بين متغيرين ويتراوح بين -1 و +1، فإن معامل التحديد في سياق الانحدار الخطي البسيط يمثل مربع هذا المعامل، مما يجرده من إشارة الاتجاه ويحوله إلى مقياس كمي صريح لمقدار الطاقة التفسيرية، ليعبر عن نسبة التباين المشترك بين المتغيرين.

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

1.2 السياق المعرفي لتطبيق معامل التحديد في تحليل البيانات

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

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

2. الأسس الرياضية لحساب معامل التحديد ومكوناته الأساسية

2.1 مجموع المربعات الكلي (TSS – Total Sum of Squares)

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

$$TSS = \sum_{i=1}^{n} (y_i – \bar{y})^2$$

حيث تمثل y_i القيمة الفعلية للمشاهدة ذات الترتيب i، بينما تمثل bar{y} المتوسط الحسابي للقيم الفعلية، ويمثل n إجمالي حجم العينة. يكتسب TSS أهمية استثنائية بوصفه نقطة المرجعية الأساسية أو ما يُعرف في الأدبيات الإحصائية بـ “النموذج الصفري” (Null Model)؛ وهو النموذج البدائي الساذج الذي يتنبأ بأن قيمة أي مشاهدة مستقبلية ستكون دائماً مساوية للمتوسط الحسابي، دون الاستعانة بأي متغيرات تفسيرية مستقلة. وبالتالي، يقيس TSS مقدار الخطأ الكلي غير المعالج الذي يسعى نموذج الانحدار إلى تقليصه وتفسيره.

2.2 مجموع مربعات البواقي (RSS – Residual Sum of Squares)

المكون الثاني في البنية الرياضية هو مجموع مربعات البواقي (RSS)، والذي يُعرف أحياناً بمجموع مربعات الخطأ (SSE – Sum of Squared Errors). تُمثل البواقي (Residuals) الفروق اللحظية بين القيم الحقيقية المرصودة في الواقع والقيم التقديرية التي ينتجها نموذج الانحدار لكل مشاهدة على حدة، معبرةً عن الجزء العشوائي أو المجهول الذي عجز النموذج عن استيعابه. تُحسب قيمة RSS من خلال المعادلة الرياضية:

$$RSS = \sum_{i=1}^{n} (y_i – \hat{y}_i)^2$$

حيث تمثل hat{y}_i القيمة المتوقعة الناتجة عن تعويض قيم المتغيرات المستقلة للمشاهدة i في معادلة خط الانحدار المقدر. ترتبط هذه القيمة ارتباطاً عضوياً بجودة النموذج؛ إذ إن الهدف الجوهري لطريقة المربعات الصغرى العادية (OLS – Ordinary Least Squares) هو تقليص قيمة RSS إلى أدنى حد ممكن برمجياً ورياضياً. وكلما اقتربت قيمة RSS من الصفر، دل ذلك على أن المسافات الرأسية الفاصلة بين النقاط الفعلية ومستوى الانحدار قد تلاشت تقريباً، مما يعكس دقة تنبؤية فائقة وملاءمة هيكلية محكمة للبيانات المعالجة.

2.3 الصيغة الرياضية النهائية لمعامل التحديد

يتحقق الاشتقاق الرياضي لمعامل التحديد من خلال الربط بين مقادير التباين المذكورة سابقاً. يقوم التفكيك الكلاسيكي للتباين في نماذج الانحدار الخطي على البديهية الجبرية التي تنص على أن مجموع المربعات الكلي ينقسم إلى جزأين أساسيين: مجموع مربعات الانحدار المفسر (ESS – Explained Sum of Squares)، ومجموع مربعات البواقي غير المفسر (RSS)، بحيث تتحقق العلاقة: TSS = ESS + RSS. بالاعتماد على هذا التفكيك، يُعرَّف بأنه النسبة المئوية للتباين المفسر منسوباً إلى التباين الكلي، وتأخذ الصيغة الرياضية الشائعة الشكل الآتي:

$$R^2 = 1 – \frac{RSS}{TSS} = 1 – \frac{\sum_{i=1}^{n} (y_i – \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i – \bar{y})^2}$$

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

3. تفسير قيم معامل التحديد والمدى الإحصائي للنتائج

3.1 تفسير المدى المعياري من 0 إلى 1

في الحالات القياسية لنماذج الانحدار الخطي المدربة بطريقة المربعات الصغرى والمحتوية على حد ثابت، يقع معامل التحديد ضمن مدى مغلق يتراوح بين 0 و 1 (أو بين 0% و 100% عند التعبير عنه كنسبة مئوية). يحمل طرفا هذا المدى دلالات إحصائية حاسمة؛ فالقيمة 0 تشير إلى الغياب التام لأي قدرة تفسيرية لدى النموذج، مما يعني رياضياً أن RSS = TSS، وأن استخدام المتغيرات التفسيرية لم يقدم أي قيمة مضافة مقارنة بالاكتفاء بالمتوسط الحسابي البسيط للبيانات في التنبؤ.

في المقابل، تدل القيمة 1 على التوافق التام (Perfect Fit) بين النموذج والبيانات، حيث تنعدم أخطاء التنبؤ كلياً وتصبح RSS = 0، مما يعني وقوع جميع نقاط البيانات المرصودة بدقة متناهية على خط أو سطح الانحدار المتولد. أما القيم البينية، والتي تمثل الغالبية العظمى من التطبيقات الواقعية (مثل 0.40 أو 0.65 أو 0.85)، فتُفسر مباشرة كحصة نسبية من التباين؛ فالقيمة 0.65 تعني بوضوح أن 65% من التباين في المتغير التابع مفسر بالنموذج، بينما يرجع 35% من التباين إلى تقلبات عشوائية أو متغيرات كامنة لم تدخل في صياغة النموذج الإحصائي.

3.2 حالات ظهور قيم سالبة لمعامل التحديد

على الرغم من الاعتقاد الشائع بأن لا يمكن أن يكون سالباً استناداً إلى كونه مربعاً لمعامل الارتباط في الحالات البسيطة، إلا أن التطبيقات الحوسبية والمعادلة الجبرية العامة R² = 1 – (RSS / TSS) قد تسفر في بعض الحالات غير القياسية عن قيم سالبة تماماً. يحدث ذلك رياضياً عندما يتجاوز مجموع مربعات البواقي (RSS) مجموع المربعات الكلي (TSS)، مما يؤدي إلى جعل الكسر (RSS / TSS) أكبر من الواحد الصحيح، وبالتالي تصبح النتيجة سالبة بعد الطرح.

تتجسد هذه الظاهرة غير المرغوبة في سيناريوهات محددة، أبرزها:

  • إجبار خط الانحدار على المرور عبر نقطة الأصل وإسقاط الحد الثابت (Fit without Intercept)، وهو ما يخل بالافتراضات التراكمية لطريقة المربعات الصغرى.
  • تقييم نموذج مدرب مسبقاً على بيانات اختبار جديدة ومستقلة (Out-of-sample Testing)، حيث يكون أداء النموذج سيئاً لدرجة تجعل تنبؤاته أبعد عن القيم الحقيقية مقارنة بمتوسط تلك البيانات نفسها.
  • استخدام نماذج انحدار غير خطية غير ملائمة أو خوارزميات تحسين لم تتقارب بالشكل الكافي للوصول إلى الحل الرياضي الأمثل.

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

3.3 المعايير الميدانية للحكم على جودة قيمة R²

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

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

4. إعداد بيئة العمل وتجهيز مكتبات بايثون الأساسية للتحليل

4.1 تثبيت واستيراد المكتبات الأساسية

تتطلب الحوسبة الإحصائية الدقيقة في بايثون تهيئة بيئة عمل متكاملة تعتمد على حزم برمجية متخصصة ومستقرة. يُفضل إجراء هذه العمليات عبر بيئات التطوير التفاعلية المتقدمة مثل Jupyter Notebook أو بيئة Visual Studio Code المدعومة بمترجم بايثون الحديث. تبدأ مرحلة الإعداد بالتأكد من تثبيت الحزم الأساسية عبر مدير الحزم pip بتنفيذ الأوامر الخاصة بالمكتبات التالية:

تتضمن قائمة المكتبات الجوهرية للتحليل:

  • Pandas: لمعالجة البيانات، وتنظيم الجداول، واستيراد وهيكلة إطارات البيانات (DataFrames).
  • NumPy: لإجراء الحسابات الرياضية الجبرية، والتعامل مع المصفوفات، وتطبيق المعادلات الأولية بدقة وسرعة.
  • Scikit-Learn (sklearn): لبناء وتدريب نماذج التعلم الآلي والانحدار، واستخراج مقاييس الأداء التنبؤية.
  • Statsmodels: لإجراء النمذجة الإحصائية الكلاسيكية الشاملة، واستخراج ملخصات المعنوية الإحصائية واختبارات الفرضيات.

يتم استيراد هذه الحزم داخل النص البرمجي عبر الصياغة المعيارية الآتية لضمان تنظيم مساحة الأسماء البرمجية:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

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

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

علاوة على ذلك، يجب تثبيت البذور العشوائية (Random Seeds) عند توليد البيانات أو تقسيمها، باستخدام دوال مثل np.random.seed(42)، لضمان الحصول على نفس النتائج الحسابية الدقيقة في كل مرة يُنفذ فيها الكود البرمجي، وهو شرط أساسي للنزاهة العلمية والشفافية في نشر الأبحاث الحاسوبية.

5. إنشاء وهيكلة البيانات التطبيقية باستخدام مكتبة Pandas

5.1 بناء إطار البيانات (DataFrame) للمثال العملي

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

يتم تمثيل هذه البيانات وهيكلتها داخل كائن DataFrame في مكتبة Pandas عبر الشيفرة البرمجية التالية:

data = {
 'Study_Hours': [12, 15, 8, 20, 25, 14, 18, 22, 10, 30, 5, 28, 16, 24, 19],
 'Practice_Exams': [2, 3, 1, 4, 5, 2, 3, 5, 1, 6, 0, 5, 3, 4, 3],
 'Final_Score': [65, 75, 52, 82, 91, 70, 78, 88, 58, 95, 45, 93, 72, 85, 76]
}
df = pd.DataFrame(data)
print(df.head())

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

5.2 استكشاف وفحص البيانات الإحصائية الأولية

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

كذلك يتم التحقق من خلو البيانات من القيم المفقودة (Missing Values) باستخدام الدالة df.isnull().sum(). وبمجرد التأكد من سلامة البنية، تُفصل البيانات إلى مصفوفة الخصائص التفسيرية (Features Matrix) والتي يُرمز لها اصطلاحاً بالحرف الكبير X، ومتجه الهدف التابع (Target Vector) ويُرمز له بالحرف الصغير y، كخطوة إجرائية لازمة للتمرير إلى خوارزميات الانحدار:

# استكشاف الإحصاءات الوصفية
print(df.describe())
# عزل المتغيرات المستقلة والمتغير التابع
X = df[['Study_Hours', 'Practice_Exams']]
y = df['Final_Score']

6. بناء نموذج الانحدار الخطي وحساب R² عبر مكتبة Scikit-Learn

6.1 تدريب نموذج الانحدار الخطي المتعدد

تُعد حزمة Scikit-Learn المعيار الفعلي لمكتبات التعلم الآلي في بايثون. لبناء نموذج الانحدار الخطي المتعدد وتدريبه، يتم استدعاء الصنف LinearRegression من وحدة sklearn.linear_model، ومن ثم إنشاء كائن النموذج وتمرير مصفوفة المتغيرات المستقلة ومتجه الهدف إلى دالة المواءمة fit()، التي تتولى تنفيذ حسابات المربعات الصغرى العادية في الخلفية البرمجية.

عقب إتمام عملية التدريب، يمكن استخراج معلمات النموذج الناتجة، والتي تشمل أوزان الانحدار أو معاملات الميل (Coefficients) المقترنة بكل متغير تفسيري عبر السمة coef_، بالإضافة إلى الحد الثابت أو المقطع الصادي (Intercept) عبر السمة intercept_، مما يسمح بصياغة المعادلة الخطية التقديرية صراحة:

# إنشاء وتدريب النموذج
model = LinearRegression()
model.fit(X, y)
# استخراج المعاملات الرياضية
print(f"Intercept (الحد الثابت): {model.intercept_:.4f}")
print(f"Coefficients (المعاملات): {model.coef_}")

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

6.2 حساب معامل التحديد باستخدام دالة score()

توفر مكتبة Scikit-Learn آلية مدمجة وسريعة لاستخراج معامل التحديد مباشرة من كائن النموذج المدرب دون الحاجة لكتابة معادلات إضافية، وذلك عبر استدعاء التابع score(X, y). تعمل هذه الدالة داخلياً على تمرير مصفوفة الخصائص X لتوليد التنبؤات المقدرة، ومقارنتها فورياً بالقيم الحقيقية y، ثم تطبيق صيغة المعيارية.

# حساب R-Squared عبر دالة score المدمجة
r_squared_score = model.score(X, y)
print(f"R-squared (دالة score): {r_squared_score:.4f}")

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

6.3 استخدام دالة r2_score من وحدة المقاييس الإحصائية

على الرغم من سهولة استخدام الدالة score()، إلا أن الممارسات الاحترافية في علم البيانات تميل إلى الاعتماد على دالة r2_score المستقلة والموجودة داخل وحدة sklearn.metrics. تكمن القوة الحقيقية لهذه الدالة في مرونتها العالية؛ إذ إنها تفصل خطوة توليد التنبؤات عن خطوة التقييم، مما يجعلها مثالية لحساب عبر سيناريوهات التحقق المتقاطع (Cross-Validation) أو لتقييم كفاءة النموذج على بيانات الاختبار المنفصلة (Test Sets).

يتم استخدام الدالة عبر توليد متجه التنبؤات أولاً باستخدام model.predict(X)، ثم تمرير القيم الحقيقية والقيم المتوقعة كوسيطين مستقلين للدالة:

# توليد التنبؤات
y_pred = model.predict(X)
# حساب معامل التحديد عبر r2_score
r2_metric = r2_score(y, y_pred)
print(f"R-squared (دالة r2_score): {r2_metric:.4f}")

تتطابق هذه النتيجة بالكامل مع الخرج السابق، مؤكدة صحة التنفيذ البرمجي ومبرزة خيارات الاستخدام المتاحة في خطوط أنابيب التعلم الآلي المعقدة.

7. حساب معامل التحديد واستخراج ملخص النموذج عبر مكتبة Statsmodels

7.1 تهيئة وبناء نموذج المربعات الصغرى العادية (OLS)

بينما تركز مكتبة Scikit-Learn على كفاءة التنبؤ والتعلم الآلي، تبرز مكتبة Statsmodels بوصفها البيئة المفضلة للتحليل الإحصائي الأكاديمي الكلاسيكي واختبار الفرضيات المعمقة. عند استخدام Statsmodels لبناء نموذج المربعات الصغرى العادية عبر الدالة sm.OLS، يجب الانتباه إلى قاعدة برمجية جوهرية: النموذج لا يضيف الحد الثابت (Intercept) تلقائياً، بل يفترض افتراضاً أولياً أن خط الانحدار يمر بنقطة الأصل ما لم يتم توجيهه صراحة لخلاف ذلك.

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

# إضافة الحد الثابت صراحة
X_with_const = sm.add_constant(X)
# بناء ومواءمة نموذج OLS
ols_model = sm.OLS(y, X_with_const)
results = ols_model.fit()

7.2 استخراج معامل التحديد من سمات النموذج الملخص

يوفر كائن النتائج results في Statsmodels وصولاً برمجياً مباشراً إلى المعلمات الإحصائية عبر سمات مخصصة، حيث يمكن استدعاء قيمة معامل التحديد عبر السمة results.rsquared. كما تتيح المكتبة ميزة لا نظير لها تتمثل في دالة results.summary()، والتي تطبع جدولاً إحصائياً شاملاً يحاكي مخرجات البرمجيات الإحصائية الاحترافية مثل SPSS وSAS وStata.

# استخراج قيمة R-squared مباشرة
print(f"Statsmodels R-squared: {results.rsquared:.4f}")
# طباعة التقرير الإحصائي الكامل
print(results.summary())

يقدم جدول الملخص تحليلاً متعدد المستويات لجودة التوافق؛ فلا يكتفي بعرض فحسب، بل يقرنها باختبار F-statistic والمعنوية الإحصائية المقترنة به (Prob > F). يُعد هذا الاختبار المصاحب حاسماً للتأكد من أن قيمة المرتفعة تختلف معنوياً عن الصفر وليست مجرد نتاج للصدفة الإحصائية الناتجة عن تباين العينة.

8. الحساب اليدوي لمعامل التحديد في بايثون باستخدام الصيغة الرياضية وNumPy

8.1 برمجة مكونات المعادلة خطوة بخطوة

لتأكيد الفهم المفاهيمي العميق وتجريد الاعتماد على الدوال الجاهزة والمكتبات المساعدة، يمكن برمجة معادلة بالكامل من مبادئها الرياضية الأولية باستخدام مكتبة NumPy. تبدأ الخطوة الأولى بحساب المتوسط الحسابي لمتجه القيم الحقيقية y، يليه توليد مجموع المربعات الكلي (TSS) عن طريق تربيع الفروق وتجميعها باستخدام دالة np.sum().

تتمثل الخطوة التالية في حساب البواقي بطرح التنبؤات y_pred من القيم الفعلية y، ثم حساب مجموع مربعات هذه البواقي للوصول إلى قيمة (RSS):

# تحويل البيانات إلى مصفوفات NumPy لضمان السرعة الحوسبية
y_actual = np.array(y)
y_predicted = np.array(y_pred)
# 1. حساب المتوسط الحسابي للقيم الفعلية
y_mean = np.mean(y_actual)
# 2. حساب مجموع المربعات الكلي (TSS)
tss = np.sum((y_actual - y_mean) ** 2)
# 3. حساب مجموع مربعات البواقي (RSS)
rss = np.sum((y_actual - y_predicted) ** 2)
print(f"Total Sum of Squares (TSS): {tss:.4f}")
print(f"Residual Sum of Squares (RSS): {rss:.4f}")

8.2 تطبيق المعادلة الرياضية ومطابقة النتائج

بعد الحصول على القيمتين الأساسيتين tss و rss، يُطبق التعريف الرياضي الجبري المباشر لمعامل التحديد بطرح نسبة تباين البواقي من الواحد الصحيح:

# تطبيق الصيغة الرياضية: R^2 = 1 - (RSS / TSS)
manual_r_squared = 1 - (rss / tss)
print(f"Manually Calculated R-squared: {manual_r_squared:.4f}")
# مطابقة النتائج الحسابية مع دوال المكتبات
assert np.isclose(manual_r_squared, r_squared_score), "النتائج غير متطابقة!"
print("تم تأكيد التطابق التام بين الحساب اليدوي ومخرجات المكتبات القياسية.")

تُثبت الدالة np.isclose() التطابق الحسابي المطلق بين النتيجة اليدوية وتلك المستخرجة عبر مكتبتي Scikit-Learn وStatsmodels حتى مستوى الدقة العشرية المتناهية المتاحة للأرقام العائمة (Floating Point Precision). يعزز هذا البناء البرمجي الثقة في سلامة المنطق الرياضي الكامن خلف دوال الحزم الجاهزة، ويمنح المحلل القدرة على كتابة دوال مخصصة لتقييم نماذج غير تقليدية في أبحاثه المتقدمة.

9. معامل التحديد المعدل (Adjusted R-Squared): المفهوم وطريقة الحساب البرمجي

9.1 دواعي الحاجة إلى معامل التحديد المعدل

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

يحدث هذا التضخم لأن إضافة أي متغير جديد تمنح خوارزمية المربعات الصغرى درجة حرية إضافية لاستغلال التقلبات العشوائية اللحظية في عينة التدريب، مما يؤدي إلى خفض قيمة RSS ظاهرياً دون تحسين القدرة التنبؤية الحقيقية. للتغلب على هذه المعضلة، طُوِّر معامل التحديد المعدل (Adjusted R-Squared) ليفرض ما يُعرف بـ “عقوبة التعقيد” (Penalty for Complexity)، معدلاً المعادلة الإحصائية لتعكس درجات الحرية (Degrees of Freedom) المتبقية لكل من التباين الكلي وتباين البواقي.

9.2 الصيغة الرياضية لمعامل التحديد المعدل

يقوم التعديل الرياضي على قسمة مجموع مربعات البواقي (RSS) ومجموع المربعات الكلي (TSS) على درجات الحرية المقابلة لكل منهما، وتُصاغ المعادلة الرياضية لمعامل التحديد المعدل، ويرمز له عادة بـ R̄² أو Adj. R²، على النحو التالي:

$$\bar{R}^2 = 1 – \left[ \frac{(1 – R^2)(n – 1)}{n – k – 1} \right]$$

حيث يُمثل:

  • n: إجمالي حجم العينة (عدد المشاهدات).
  • k: عدد المتغيرات المستقلة التفسيرية المدرجة في النموذج (باستثناء الحد الثابت).
  • R²: معامل التحديد التقليدي المحسوب مسبقاً.

توضح هذه الصيغة بوضوح أنه في حال إضافة متغير جديد (زيادة k)، فإن القيمة (n – k – 1) في المقام ستتناقص، مما يؤدي إلى زيادة قيمة الكسر ككل، وبالتالي خفض قيمة Adjusted R² النهائية ما لم يكن التحسن الذي يقدمه المتغير الجديد في خفض (1 – R²) كبيراً بما يكفي لتعويض هذه العقوبة الرياضية المفروضة على التعقيد.

9.3 تنفيذ حساب Adjusted R² في بايثون

يمكن استخراج معامل التحديد المعدل بسلاسة في بايثون عبر طريقتين أساسيتين: إما استدعاؤه مباشرة من سمات كائن نتائج نموذج Statsmodels عبر السمة results.rsquared_adj، أو كتابة دالة بايثون معيارية مخصصة تطبق الصيغة السابقة بالاعتماد على مخرجات Scikit-Learn:

# 1. الاستخراج المباشر عبر Statsmodels
adj_r2_sm = results.rsquared_adj
print(f"Statsmodels Adjusted R-squared: {adj_r2_sm:.4f}")
# 2. بناء دالة مخصصة لحساب Adjusted R-squared
def calculate_adjusted_r2(r2, n, k):
 """حساب معامل التحديد المعدل بناء على R2 وحجم العينة وعدد المتغيرات."""
 return 1 - ((1 - r2) * (n - 1) / (n - k - 1))
# تطبيق الدالة على نتائجنا
n_samples = X.shape[0]
k_features = X.shape[1]
adj_r2_custom = calculate_adjusted_r2(r_squared_score, n_samples, k_features)
print(f"Custom Adjusted R-squared: {adj_r2_custom:.4f}")

يُلاحظ دائماً أن قيمة Adjusted R² تكون أقل قليلاً من قيمة التقليدية (في مثالنا بلغت 0.9839 مقارنة بـ 0.9863 لـ R² التقليدي)، وهو فارق يعكس العقوبة الرياضية العادلة التي فرضها النموذج لقاء استخدام متغيرين تفسيريين في عينة مكونة من 15 طالباً.

10. تقييم جودة النماذج ومقارنة R² بمقاييس الأداء التنبؤي الأخرى

10.1 المقارنة مع الجذر التربيعي لمتوسط مربعات الخطأ (RMSE)

لفهم الأداء الحقيقي لنموذج الانحدار، لا يمكن الاكتفاء بمقياس نسبي واحد كمعامل التحديد، بل يجب دمجه مع مقاييس أداء مطلقة. يُمثل الجذر التربيعي لمتوسط مربعات الخطأ (RMSE – Root Mean Squared Error) المقياس المعياري الأكثر استخداماً لتقييم الأخطاء التنبؤية بالوحدات الأصلية للمتغير التابع.

يكمن الاختلاف الجوهري في أن هو مقياس بلا أبعاد (Dimensionless) يتراوح معيارياً بين 0 و 1، مما يجعله مثالياً لمقارنة نماذج تطبق على ظواهر مختلفة تماماً في مجالات شتى. في المقابل، يُقاس RMSE بنفس وحدة المتغير التابع (كالدرجات، أو الدولارات، أو الكيلوغرامات)، مما يمنحه معنى تفسيرياً حسياً دقيقاً لحجم الخطأ التنبؤي المعتاد، كما أنه يتسم بحساسية مضاعفة تجاه القيم الشاذة والمتطرفة بسبب تربيع الأخطاء قبل حساب المتوسط والجذر.

from sklearn.metrics import mean_squared_error
# حساب RMSE
rmse = np.sqrt(mean_squared_error(y, y_pred))
print(f"RMSE (الجذر التربيعي لمتوسط مربعات الخطأ): {rmse:.4f} درجة")

يوفر الجمع بين = 0.986 و RMSE = 1.69 قراءة متكاملة: النموذج يفسر 98.6% من تباين الدرجات، ويكون متوسط خطأ التنبؤ في درجة الطالب الفردي بحدود 1.69 نقطة مئوية فقط، مما يؤكد جودة النموذج من الناحيتين النسبية والمطلقة.

10.2 المقارنة مع متوسط الخطأ المطلق (MAE) ومعايير المعلومات (AIC/BIC)

بالإضافة إلى RMSE، يوفر متوسط الخطأ المطلق (MAE – Mean Absolute Error) مقياساً إضافياً يتسم بالمتانة والصلابة في مواجهة القيم المتطرفة والشاذة؛ إذ يحسب متوسط القيم المطلقة للبواقي دون تربيعها، مما يجعله يعبر عن الحجم المتوسط البسيط للخطأ دون تضخيم الانحرافات المعزولة.

من ناحية أخرى، تبرز معايير المعلومات الإحصائية مثل معيار أكايكي للمعلومات (AIC – Akaike Information Criterion) ومعيار بايز للمعلومات (BIC – Bayesian Information Criterion) كأدوات أكثر دقة من معامل التحديد في المفاضلة الصارمة بين النماذج غير المتداخلة. تقوم فلسفة AIC وBIC على معاقبة تعقيد النموذج بناءً على دالة الإمكانية العظمى (Maximum Likelihood)، حيث يُفضل النموذج الذي يحقق أدنى قيمة عددية للمعايير.

from sklearn.metrics import mean_absolute_error
# حساب MAE
mae = mean_absolute_error(y, y_pred)
print(f"MAE (متوسط الخطأ المطلق): {mae:.4f}")
# استخراج AIC و BIC من Statsmodels
print(f"AIC: {results.aic:.4f}")
print(f"BIC: {results.bic:.4f}")

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

11. القيود الإحصائية، الأخطاء الشائعة، والمفاهيم الخاطئة حول R²

11.1 مفهوم الارتباط مقابل السببية ومحدودية R²

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

قد تنشأ قيم بالغة الارتفاع عن وجود متغيرات وسيطة أو مشوشة غير مرصودة في النموذج (Confounding Variables)، أو نتيجة لما يُعرف بـ “الارتباط الزائف” (Spurious Correlation) الناجم عن تزامن اتجاهات زمنية عامة دون أي رابط وظيفي بين الظواهر. إن إثبات السببية يتطلب تصميماً تجريبياً مضبوطاً (Randomized Controlled Trials)، أو استخدام أساليب الاقتصاد القياسي المتقدمة مثل المتغيرات الأداتية (Instrumental Variables)، ولا يمكن استخلاصه بمجرد معاينة رقم في تقرير الانحدار.

11.2 ظاهرة الإفراط في التخصيص (Overfitting) والارتباط غير الخطي

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

على الجانب الآخر، يرتبط الاعتماد المفرط على تعظيم بمخاطر الوقوع في فخ الإفراط في التخصيص (Overfitting)؛ حيث يشرع النموذج في حفظ ضوضاء عينة التدريب الفردية بدلاً من تعلم الأنماط الهيكلية الحقيقية. لحساب قيمة غير منحازة وقابلة للتعميم الحقيقي، تبرز ضرورة تطبيق التحقق المتقاطع (Cross-Validation) عبر دالة cross_val_score المتاحة في Scikit-Learn لقياس أداء النموذج عبر تقسيمات عينات متعددة ومستقلة:

from sklearn.model_selection import cross_val_score
# حساب R2 غير المنحاز عبر 5-Fold Cross-Validation
cv_scores = cross_val_score(model, X, y, cv=5, scoring='r2')
print(f"معدل R-squared عبر التحقق المتقاطع: {cv_scores.mean():.4f}")
print(f"انحراف درجات R-squared: {cv_scores.std():.4f}")

11.3 أثر التعددية الخطية (Multicollinearity) والقيم الشاذة

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

علاوة على ذلك، يمتلك وجود نقطة شاذة واحدة أو مشاهدة متطرفة ذات رافعة إحصائية عالية (High Leverage Point) القدرة الكاملة على تضخيم قيمة اصطناعياً أو تخفيضها نحو الصفر بصورة مفاجئة. لذلك، يجب دائماً فحص مصفوفة الارتباط وحساب عامل تضخم التباين (VIF – Variance Inflation Factor) لتشخيص التعددية الخطية، بالإضافة إلى فحص الرواسب والمسافات التشخيصية كمسافة كوك (Cook’s Distance) لضمان متانة النتائج:

from statsmodels.stats.outliers_influence import variance_inflation_factor
# حساب عامل تضخم التباين (VIF) لكل متغير
vif_data = pd.DataFrame()
vif_data["Feature"] = X.columns
vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif_data)

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

12. تطبيقات متقدمة ودراسة حالة في القياس النفسي والسلوكي باستخدام بايثون

12.1 صياغة مشكلة بحثية في العلوم السلوكية والنفسية

لإبراز التطبيق الأكاديمي الشامل لمعامل التحديد في بيئة بحثية متقدمة، سنقوم بمحاكاة مشكلة قياس سيكومتري واقعية تهدف إلى دراسة محددات الأداء الإدراكي المعرفي (Cognitive Performance Score) لدى عينة من الموظفين. يفترض النموذج النظري أن الأداء الإدراكي يتأثر بثلاثة متغيرات سلوكية ونفسية رئيسية: متوسط ساعات النوم اليومية (Sleep_Hours)، ومستوى القلق المقاس بمقياس معتمد من 10 إلى 50 نقطة (Anxiety_Level)، ومعدل ممارسة الرياضة الأسبوعية بالساعات (Exercise_Hours).

تتم صياغة الفرضيات الإحصائية باختبار الفرضية الصفرية (H0: R² = 0) التي تدعي عدم وجود أي قدرة للمتغيرات الثلاثة في تفسير الأداء الإدراكي، مقابل الفرضية البديلة (H1: R² > 0). نقوم بتوليد مجموعة بيانات سيكومترية تحاكي الواقع النفسي الميداني بحجم عينة يبلغ 100 مشارك:

np.random.seed(101)
n_participants = 100
# توليد المتغيرات النفسية والسلوكية
sleep = np.random.normal(loc=7.0, scale=1.2, size=n_participants)
anxiety = np.random.normal(loc=25.0, scale=6.0, size=n_participants)
exercise = np.random.exponential(scale=2.5, size=n_participants)
# توليد المتغير التابع بناء على علاقة بنيوية واقعية مضافا إليها ضوضاء بيئية
cognitive_performance = (
 20.0 + 
 (4.5 * sleep) - 
 (0.6 * anxiety) + 
 (1.8 * exercise) + 
 np.random.normal(loc=0, scale=4.0, size=n_participants)
)
psych_df = pd.DataFrame({
 'Sleep_Hours': sleep,
 'Anxiety_Level': anxiety,
 'Exercise_Hours': exercise,
 'Cognitive_Performance': cognitive_performance
})

12.2 التنفيذ البرمجي الكامل وتحليل المخرجات الإحصائية

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

import statsmodels.formula.api as smf
# النموذج الأول: تأثير ساعات النوم فقط
model_1 = smf.ols('Cognitive_Performance ~ Sleep_Hours', data=psych_df).fit()
# النموذج الثاني: إضافة مستوى القلق
model_2 = smf.ols('Cognitive_Performance ~ Sleep_Hours + Anxiety_Level', data=psych_df).fit()
# النموذج الثالث الكامل: إضافة ساعات ممارسة الرياضة
model_3 = smf.ols('Cognitive_Performance ~ Sleep_Hours + Anxiety_Level + Exercise_Hours', data=psych_df).fit()
print(f"نموذج 1 (النوم فقط) - R²: {model_1.rsquared:.4f} | Adj. R²: {model_1.rsquared_adj:.4f}")
print(f"نموذج 2 (النوم + القلق) - R²: {model_2.rsquared:.4f} | Adj. R²: {model_2.rsquared_adj:.4f}")
print(f"نموذج 3 (النموذج الكامل) - R²: {model_3.rsquared:.4f} | Adj. R²: {model_3.rsquared_adj:.4f}")

توضح المخرجات تزايداً مطرداً وذا دلالة إحصائية في قيمة ؛ حيث ارتفعت القدرة التفسيرية من النموذج الأول إلى النموذج الكامل لتبلغ ما يقارب 0.72 (72% من التباين مفسر)، مع ارتفاع متزامن في قيمة Adjusted R²، مما يثبت أن كل متغير مضاف قدم مساهمة تفسيرية جوهرية بررت استهلاكه لدرجة من درجات الحرية.

يُصاغ تقرير النتائج النهائي بالصيغة الأكاديمية المعتمدة وفق دليل الجمعية الأمريكية لعلم النفس (APA Style) كالتالي:

“أظهرت نتائج تحليل الانحدار الخطي المتعدد أن النموذج التنبؤي المركب من ساعات النوم، ومستوى القلق، وساعات ممارسة الرياضة نجح في تفسير نسبة معتبرة ودالة إحصائياً من التباين في الأداء الإدراكي للمشاركين، R² = .721، R̄² = .712، F(3, 96) = 82.85، p < .001. وقد بينت النتائج وجود أثر إيجابي دال لساعات النوم والرياضة مقابل أثر سلبي دال لمستويات القلق على الكفاءة الإدراكية."

12.3 أفضل الممارسات البرمجية لتوثيق وتحليل النماذج في بايثون

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

def evaluate_regression_model(model, X, y):
 """
 دالة معيارية شاملة لحساب وتوثيق مؤشرات جودة التوافق لنموذج الانحدار
 """
 y_true = np.array(y)
 y_pred = model.predict(X)
 
 n = len(y_true)
 k = X.shape[1] if len(X.shape) > 1 else 1
 
 # حساب المقاييس
 r2 = r2_score(y_true, y_pred)
 adj_r2 = 1 - ((1 - r2) * (n - 1) / (n - k - 1))
 rmse = np.sqrt(mean_squared_error(y_true, y_pred))
 mae = mean_absolute_error(y_true, y_pred)
 
 metrics_summary = pd.DataFrame({
 'Metric': ['R-Squared (R²)', 'Adjusted R-Squared (R̄²)', 'RMSE', 'MAE', 'Sample Size (n)', 'Features (k)'],
 'Value': [round(r2, 4), round(adj_r2, 4), round(rmse, 4), round(mae, 4), int(n), int(k)]
 })
 
 return metrics_summary
# استدعاء الدالة لتقييم النموذج النهائي
evaluation_table = evaluate_regression_model(model, X, y)
print(evaluation_table)

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

خاتمة

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

لقد أثبتت منظومة بايثون الحوسبية—من خلال التكامل السلس بين مكتبات NumPy وPandas وScikit-Learn وStatsmodels—أنها توفر بيئة استثنائية تمزج بين التطبيق الرياضي المباشر والأتمتة الإحصائية المتقدمة. وسواء كان الهدف هو النشر الأكاديمي الصارم وتوليد تقارير اختبار الفرضيات، أو نشر نماذج التعلم الآلي في بيئات الإنتاج الفعلية، فإن الفهم العميق لآليات حساب وتفسير معامل التحديد يُعد مهارة أساسية تُمكّن الباحث وعالم البيانات من استنطاق البيانات بدقة ونزاهة ومسؤولية علمية تامة.

References

  • American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). American Psychological Association. https://doi.org/10.1037/0000165-000
  • 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
  • James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: With applications in R (2nd ed.). Springer. https://doi.org/10.1007/978-1-0716-1418-1
  • McKinney, W. (2022). Python for data analysis: Data wrangling with Pandas, NumPy, and Jupyter (3rd ed.). O’Reilly Media.
  • 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. https://scikit-learn.org/stable/
  • Seabold, S., & Perktold, J. (2010). Statsmodels: Econometric and statistical modeling with Python. In Proceedings of the 9th Python in Science Conference (Vol. 57, pp. 61–65). https://doi.org/10.25080/Majora-92bf1922-011
  • Wooldridge, J. M. (2020). Introductory econometrics: A modern approach (7th ed.). Cengage Learning.

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

looti, M. (2026, سبتمبر 1). كيفية حساب R-Squared في بايثون (مع مثال). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-calculate-r-squared-in-python-with-example/
looti, Mohammed. “كيفية حساب R-Squared في بايثون (مع مثال).” عرب سايكلوجي, 1 سبتمبر 2026, https://arabpsychology.com/statistics/how-to-calculate-r-squared-in-python-with-example/.
looti, Mohammed. “كيفية حساب R-Squared في بايثون (مع مثال).” عرب سايكلوجي. سبتمبر 1, 2026. https://arabpsychology.com/statistics/how-to-calculate-r-squared-in-python-with-example/.