الإحصاء وتحليل البياناتالبرمجة بلغة بايثونمنهجية البحث العلمي

كيفية حساب معامل التحديد المعدل في بايثون

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

تاريخ النشر

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

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

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

1. الأسس النظرية لمعامل التحديد (R-Squared) في النمذجة الإحصائية

1.1 تعريف معامل التحديد ومفهوم تباين المتغير التابع

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

يرتكز الحساب الرياضي لمعامل التحديد التقليدي على تفكيك مجموع المربعات، حيث يتحدد مجموع المربعات الكلي (Total Sum of Squares – SST) كمعيار أساسي يمثل المقدار الإجمالي لتشتت القيم الفعلية للمتغير التابع حول متوسطها الحسابي. وفي المقابل، يمثل مجموع مربعات البواقي (Residual Sum of Squares – SSR أو ما يُعرف أحياناً بـ SSE) مجموع الفروق المربعة بين القيم الفعلية المشاهدة والقيم التنبؤية التي قدرها النموذج الخطي. وتتحدد الصيغة الرياضية الأساسية لمعامل التحديد وفق المعادلة الآتية:

R² = 1 – (SSR / SST)

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

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

1.2 القصور الهيكلي لمعامل التحديد التقليدي عند تعدد المتغيرات

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

ينبع هذا السلوك المضلل من طبيعة خوارزمية المربعات الصغرى العادية (Ordinary Least Squares – OLS)، التي تسعى بطبيعتها الحسابية الصرفة إلى تصغير قيمة مجموع مربعات البواقي (SSR). إن إضافة أي متغير عشوائي—حتى لو كان أرقاماً عشوائية مولدة آلياً لا تمت بصلة للمتغير التابع—تمنح النموذج درجات حرية إضافية لاستغلال التقلبات والارتباطات العرضية والضوضاء المتواجدة في عينة البيانات، مما يؤدي بالضرورة إلى انخفاض طفيف في قيمة SSR أو بقائها دون تغيير، وبالتالي ترتفع قيمة R² بشكل زائف دون أن يقابل هذا الارتفاع أي تحسن حقيقي في القدرة التعميمية للنموذج.

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

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

2. مفهوم معامل التحديد المعدل (Adjusted R-Squared) وأهميته الإحصائية

2.1 التعريف العلمي لمعامل التحديد المعدل

يُمثل معامل التحديد المعدل (Adjusted R-Squared)، والذي يُرمز له تقليدياً بالرمز R̄² أو R²_adj، تطويراً منهجياً ورياضياً حاسماً لمعامل التحديد الكلاسيكي. صُمم هذا المقياس خصيصاً للتغلب على ظاهرة التضخم المصطنع لقيمة التباين المفسر الناتجة عن تعقيد النموذج، وذلك من خلال إدراج آلية ضبط إحصائية صارمة تفرض “عقوبة” أو جزاءً رياضياً يتناسب طردياً مع عدد المتغيرات المستقلة المضافة، مع الأخذ في الاعتبار حجم العينة الإجمالي الخاضع للدراسة.

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

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

يُعد معامل التحديد المعدل أداة مفاضلة موضوعية وموثوقة عند المقارنة بين النماذج التنبؤية المختلفة التي تسعى لتفسير نفس المتغير التابع، سواء كانت تلك النماذج متداخلة (Nested Models)—أي يشكل أحدها مجموعة فرعية من الآخر—أو غير متداخلة (Non-nested Models) وتعتمد على مجموعات مختلفة كلياً من المتغيرات التنبؤية، مما يجعله حجر الزاوية في ممارسات الانتقاء والنمذجة الرصينة.

2.2 مقارنة تفصيلية بين R-Squared و Adjusted R-Squared

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

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

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

وجه المقارنة معامل التحديد التقليدي (R-Squared) معامل التحديد المعدل (Adjusted R-Squared)
النطاق الرياضي للقيم محصور دائماً بين 0.0 و 1.0 (في نماذج OLS مع الحد الثابت). يمكن أن يتخذ قيماً سالبة، والحد الأقصى هو 1.0.
الاستجابة لإضافة متغيرات عشوائية يتزايد دائماً أو يظل ثابتاً في أسوأ الأحوال الحسابية. يتناقص مباشرة بسبب العقوبة المفروضة على درجات الحرية.
معاقبة التعقيد (Model Complexity) معدومة؛ يفضل النماذج الأكبر والأكثر تعقيداً تلقائياً. نشطة وفعالة؛ يفرض جزاءً رياضياً على كل متغير غير مجدٍ.
التأثر بحجم العينة (Sample Size) متحيز تصاعدياً ولا يبالي بحجم العينة في معادلته. حساس جداً لحجم العينة، ويفرض عقوبات أشد في العينات الصغيرة.
السياق المنهجي الأمثل للاستخدام البحث الاستكشافي الأولي وفهم نسبة التشتت المحسوبة كلياً. المفاضلة بين النماذج المتنافسة واختيار النماذج التفسيرية النهائية.

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

3. الصيغة الرياضية الدقيقة لحساب معامل التحديد المعدل

3.1 تفكيك المعادلة الرياضية لمعامل التحديد المعدل

ترتكز البنية الرياضية لمعامل التحديد المعدل على إعادة صياغة دقيقة للعلاقة بين التباينات المتبقية والتباين الكلي. تُكتب الصيغة الرياضية القياسية المعتمدة عالمياً في المراجع الإحصائية وبرمجيات الحوسبة على النحو التالي:

R̄² = 1 – [ (1 – R²) * ( (n – 1) / (n – k – 1) ) ]

لفهم هذه المعادلة فهماً شاملاً يتيح للمحلل استيعاب منطقها الداخلي، يتعين تفكيك الرموز والمتغيرات المكونة لها تحليلياً:

  • R²: يمثل معامل التحديد التقليدي المحسوب من النسبة بين مجموع مربعات البواقي إلى مجموع المربعات الكلي (1 – SSR/SST). يمثل المقدار (1 – R²) نسبة التباين غير المفسر بواسطة النموذج.
  • n: يشير إلى حجم العينة الإجمالي، أي العدد الكلي للمشاهدات أو الحالات الفردية الخاضعة للتحليل في مصفوفة البيانات بعد استبعاد القيم المفقودة.
  • k: يمثل عدد المتغيرات المستقلة أو التنبؤية المتضمنة في نموذج الانحدار (دون احتساب الحد الثابت/Intercept).
  • (n – 1): يمثل درجات الحرية الكلية المصاحبة لمجموع المربعات الكلي (SST)، حيث تُفقد درجة حرية واحدة لحساب المتوسط الحسابي العام للمتغير التابع.
  • (n – k – 1): يمثل درجات حرية الخطأ أو البواقي (Residual Degrees of Freedom) المصاحبة لـ SSR، حيث تُفقد (k) من درجات الحرية لتقدير معاملات الانحدار لكل متغير مستقل، وتُفقد درجة حرية إضافية لتقدير الحد الثابت (Intercept).

يتضح من هذا التفكيك أن المقدار الكسري ((n – 1) / (n – k – 1)) يعمل كـ “معامل جزاء إحصائي” (Correction Factor). بما أن عدد المتغيرات k دائماً موجب في نماذج الانحدار، فإن المقام (n – k – 1) سيكون دائماً أصغر من البسط (n – 1)، مما يعني أن قيمة هذا الكسر ستكون دائماً أكبر تماماً من الواحد الصحيح (طالما أن n > k + 1). وبناءً على ذلك، يتم ضرب نسبة التباين غير المفسر (1 – R²) في قيمة أكبر من الواحد، مما يضخم نسبة التباين غير المفسر عند حساب المعامل المعدل، ويؤدي بالتالي إلى خفض القيمة النهائية لـ R̄² مقارنة بـ R² الأصلية.

3.2 الاشتقاق الإحصائي من تباين البواقي وتباين العينة

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

يُعرف متوسط مربعات الخطأ (Mean Squared Error – MSE) بأنه المقدر غير المتحيز لتباين الأخطاء العشوائية للمجتمع (σ²_ε)، ويُحسب بالصيغة:

MSE = SSR / (n – k – 1)

وبالمثل، يُعرف تباين العينة الكلي غير المتحيز للمتغير التابع (Total Sample Variance – s²_y) بالصيغة:

s²_y = SST / (n – 1)

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

R̄² = 1 – (MSE / s²_y) = 1 – [ (SSR / (n – k – 1)) / (SST / (n – 1)) ]

وبإجراء إعادة ترتيب جبري بسيط للكسور المتداخلة، نصل إلى:

R̄² = 1 – [ (SSR / SST) * ((n – 1) / (n – k – 1)) ]

وبما أن (SSR / SST) = (1 – R²)، فإن التعويض المباشر يقودنا بالضرورة إلى المعادلة القياسية التي تم تفكيكها أعلاه.

لتوضيح هذه الآلية بحساب يدوي ملموس: لنفترض أن باحثاً أجرى تحليلاً على عينة مكونة من 50 فرداً (n = 50)، باستخدام 4 متغيرات تنبؤية (k = 4)، وبلغت قيمة معامل التحديد التقليدي R² = 0.55. لحساب المعامل المعدل خطوة بخطوة:

  1. حساب نسبة التباين غير المفسر: 1 – R² = 1 – 0.55 = 0.45.
  2. حساب بسط معامل الجزاء: n – 1 = 50 – 1 = 49.
  3. حساب مقام معامل الجزاء: n – k – 1 = 50 – 4 – 1 = 45.
  4. حساب قيمة معامل الجزاء: 49 / 45 ≈ 1.0889.
  5. ضرب التباين غير المفسر في معامل الجزاء: 0.45 * 1.0889 ≈ 0.4900.
  6. طرح الناتج من الواحد الصحيح للحصول على المعامل المعدل: R̄² = 1 – 0.4900 = 0.5100 (أي 51.0%).

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

4. أهمية معامل التحديد المعدل في نمذجة البيانات النفسية والسلوكية

4.1 التعامل مع التعقيد والضوضاء في القياسات السيكولوجية

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

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

هنا يبرز دور معامل التحديد المعدل كأداة لا غنى عنها لتحقيق مبدأ البساطة والتقتير العلمي، والمعروف في فلسفة العلوم بمبدأ شفرة أوكام (Occam’s Razor) أو (Parsimony). يقضي هذا المبدأ بأن التفسير الأبسط الذي يعتمد على أقل عدد ممكن من الافتراضات والمتغيرات هو دائماً التفسير الأرجح علمياً. يحمي Adjusted R-Squared الدراسات السلوكية من الانحياز التأكيدي عن طريق إظهار انخفاض مباشر في جودة النموذج كلما حاول الباحث حشو النموذج بمقاييس فرعية لا تسهم بشكل جوهري في إحداث تباين حقيقي في المتغير السلوكي التابع.

4.2 تحديد مساهمة المقاييس الفرعية في الاختبارات النفسية

في سياق بناء وتطوير أدوات القياس النفسي (Psychometric Scale Development)، يواجه مطورو المقاييس معضلة تقييم الصدق التنبؤي المتزايد (Incremental Predictive Validity). تتمثل هذه المعضلة في الإجابة عن السؤال المنهجي: هل إضافة مقياس فرعي جديد (Subscale) يبرر زيادة طول الاستبيان وإرهاق المفحوص؟ على سبيل المثال، عند التنبؤ باضطراب ما بعد الصدمة (PTSD)، قد يتساءل الباحث عما إذا كان قياس بُعد “اليقظة المفرطة” كمتغير مستقل إضافي يقدم قيمة تنبؤية حقيقية تتجاوز ما يفسره بُعدا “تجنب المثيرات” و”استرجاع الذكريات المؤلمة”.

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

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

5. إعداد بيئة العمل البرمجية في بايثون وتحميل الحزم اللازمة

5.1 تثبيت واستيراد المكتبات الأساسية لتحليل البيانات

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

تتمثل الحزم الأساسية الأولى في مكتبة NumPy، وهي الركيزة الحسابية المركزية في بايثون لمعالجة المصفوفات متعددة الأبعاد وإجراء العمليات الجبرية الخطية عالية السرعة. تليها مكتبة Pandas، التي تقدم هياكل بيانات مرنة مثل DataFrames و Series، مما يسهل عمليات استيراد البيانات من ملفات CSV أو قواعد البيانات، وتنظيف السلاسل الإحصائية، والتعامل مع القيم المفقودة والتحويلات الرياضية للمتغيرات. ولأغراض التمثيل البياني واستكشاف البيانات وتوزيع البواقي، يتم الاعتماد على مكتبتي Matplotlib و Seaborn لبناء مخططات احترافية تفي بمتطلبات النشر العلمي.

يمكن تثبيت هذه الحزم عبر مدير الحزم القياسي (pip) بتنفيذ الأمر المباشر التالي في سطر الأوامر:

pip install numpy pandas matplotlib seaborn statsmodels scikit-learn

وفي الكود المصدري لبايثون، يتم استيراد وتكوين هذه الحزم وفق الصيغة المعيارية الشائعة عالمياً:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

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

5.2 تجهيز مكتبات النمذجة الإحصائية وتعلم الآلة

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

المكتبة الأولى هي Statsmodels، وتعد الخيار الأكاديمي الأول للتحليل الإحصائي القياسي الكلاسيكي في بايثون؛ إذ تتبنى فلسفة مستوحاة من بيئة R الإحصائية، وتقدم جداول تلخيصية متكاملة تتضمن كافة الاختبارات التشخيصية، قيم الاختبارات المعلمية مثل t-tests و F-tests، فترات الثقة، وبالطبع حساب معامل التحديد ومعامل التحديد المعدل بشكل مباشر وتلقائي. يتم استيراد وحدة الانحدار من هذه المكتبة عبر الكود:

import statsmodels.api as sm
import statsmodels.formula.api as smf

المكتبة الثانية هي Scikit-Learn، وهي المنصة القياسية العالمية لتعلم الآلة والنمذجة التنبؤية في بايثون. تتميز بتصميم برمجي موحد يعتمد على الواجهات البرمجية (Estimators and Transformers) وخطوط المعالجة المجمعة (Pipelines). يتم استيراد نموذج الانحدار الخطي ومقاييس الأداء ذات الصلة عبر الكود التالي:

from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
from sklearn.model_selection import train_test_split, cross_val_score

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

6. حساب معامل التحديد المعدل باستخدام مكتبة Statsmodels

6.1 بناء نموذج الانحدار الخطي العادي (OLS)

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

لتطبيق ذلك عملياً، نقوم بإنشاء مصفوفة المتغيرات المستقلة (X) والمتغير التابع (y)، ثم نستخدم الدالة المساعدة sm.add_constant(X) لإدراج عمود من الآحاد يمثل الحد الثابت. بعد ذلك، يتم تهيئة كائن النموذج باستخدام sm.OLS(y, X_with_const) وملاءمته عبر استدعاء التابع .fit() الذي يقوم بتنفيذ العمليات الحسابية الجبرية لتقدير المعلمات وتوليد كائن النتائج الإحصائية الشاملة.

يوضح السياق البرمجي التالي الآلية الكاملة لبناء النموذج واستخراج ملخصه الإحصائي في بايثون:

# توليد بيانات افتراضية أو تحميل مصفوفة البيانات
# إضافة الحد الثابت لمصفوفة المتغيرات التنبؤية
X_with_const = sm.add_constant(X)
# بناء وملاءمة نموذج المربعات الصغرى العادية
ols_model = sm.OLS(y, X_with_const)
results = ols_model.fit()
# طباعة جدول الملخص الإحصائي الشامل
print(results.summary())

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

6.2 تحليل وتفكيك مخرجات Statsmodels المتقدمة

يحتوي الجزء العلوي الأيمن من جدول مخرجات Statsmodels على المؤشرات العامة لجودة التوفيق، حيث تظهر قيمة R-squared إلى جانب قيمة Adj. R-squared بشكل متجاور، مما يتيح للمحلل إجراء مقارنة لحظية سريعة. إذا لوحظ وجود هوة واسعة بين القيمتين، فإن ذلك يُعد مؤشراً حاسماً وفورياً على أن النموذج يحتوي على متغيرات زائدة تفتقر إلى الأهمية الإحصائية التفسيرية، أو أن حجم العينة غير كافٍ لدعم هذا العدد من المتغيرات التنبؤية.

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

# الوصول البرمجي المباشر للمؤشرات الإحصائية
r_squared = results.rsquared
adj_r_squared = results.rsquared_adj
f_stat = results.fvalue
f_pvalue = results.f_pvalue
aic = results.aic
bic = results.bic
print(f”R-Squared: {r_squared:.4f}”)
print(f”Adjusted R-Squared: {adj_r_squared:.4f}”)

يتكامل تقييم Adjusted R-Squared داخل Statsmodels مع مؤشرات إحصائية موازية شديدة الأهمية؛ ومن أبرزها اختبار F العام لدلالة النموذج ومستوى الدلالة المقترن به (Prob > F)، الذي يؤكد ما إذا كانت القدرة التفسيرية المشتركة للمتغيرات ذات دلالة إحصائية تختلف جوهرياً عن الصفر. كما يُستعان بمعياري أكايكي للمعلومات (Akaike Information Criterion – AIC) ومعيار المعلومات البايزي (Bayesian Information Criterion – BIC)، واللذين يفرضان عقوبات لوغاريتمية على تعقيد النماذج؛ حيث يشير انخفاض قيم AIC و BIC بالتوازي مع ارتفاع قيمة Adjusted R-Squared إلى الوصول للنموذج الأمثل والأكثر كفاءة توازنية بين الدقة التفسيرية والبساطة البنائية.

7. حساب معامل التحديد المعدل باستخدام مكتبة Scikit-Learn

7.1 تدريب نموذج LinearRegression واستخراج R-Squared

تختلف فلسفة مكتبة Scikit-Learn المعمارية عن Statsmodels؛ إذ تركز بصورة أساسية على هندسة التعلم الآلي والتنبؤ التعميمي وتقييم الأداء على بيانات الاختبار المستقلة بدلاً من استخراج الجداول الإحصائية التقليدية. تبدأ العملية بتهيئة كائن النموذج من الفئة LinearRegression()، ثم تدريبه عبر التابع .fit(X, y)، حيث تتكفل المكتبة بإضافة الحد الثابت تلقائياً ضمن مصفوفاتها الحسابية ما لم يُحدد المعامل fit_intercept=False.

بعد إتمام عملية التدريب، يتم توليد التنبؤات باستخدام التابع .predict(X). ولتقييم النموذج، توفر المكتبة دالة r2_score(y_true, y_pred) داخل وحدة sklearn.metrics، والتي تقوم بحساب معامل التحديد التقليدي بدقة رياضية متناهية. ومع ذلك، يواجه المستخدمون حقيقة أن Scikit-Learn لا تحتوي على دالة مباشرة أو مدمجة لحساب معامل التحديد المعدل بشكل فوري.

لتجاوز هذا الغياب البنيوي، يتعين على المحلل استخراج الأبعاد الهندسية لمصفوفة البيانات المدخلة؛ حيث يتم الحصول على حجم العينة الكلي (n) عبر فحص عدد الصفوف في المصفوفة باستخدام X.shape[0]، بينما يتم تحديد عدد المتغيرات التنبؤية (k) من خلال فحص عدد الأعمدة باستخدام X.shape[1]. تتيح هذه الخطوة تأمين كافة المعطيات العددية اللازمة لتطبيق معادلة التعديل الإحصائي يدوياً وبرمجياً في الخطوات اللاحقة.

7.2 تطبيق المعادلة الرياضية على مخرجات Scikit-Learn

بمجرد استخراج قيمة R² وحساب الأبعاد n و k، يتم تنفيذ الصيغة الرياضية القياسية للضبط مباشرة عبر بايثون. يوضح الكود التالي التطبيق العملي الكامل لبناء النموذج في Scikit-Learn وحساب Adjusted R-Squared رياضياً:

# تهيئة وتدريب النموذج الخطي
model = LinearRegression()
model.fit(X, y)
# توليد التنبؤات وحساب R-Squared
y_pred = model.predict(X)
r2 = r2_score(y, y_pred)
# استخراج أبعاد مصفوفة المتغيرات المستقلة
n = X.shape[0] # عدد المشاهدات الكلي
k = X.shape[1] # عدد المتغيرات المستقلة
# تطبيق معادلة معامل التحديد المعدل
adj_r2 = 1 – ((1 – r2) * (n – 1) / (n – k – 1))
print(f”Scikit-Learn R-Squared: {r2:.4f}”)
print(f”Calculated Adjusted R-Squared: {adj_r2:.4f}”)

لضمان دمج هذه العملية بسلاسة ضمن خطوط أنابيب التعلم الآلي المتقدمة (Scikit-Learn Pipelines) ومصفوفات البحث الشبكي لضبط المعلمات الفائقة (GridSearchCV)، يمكن للمطورين صياغة دالة تقييم مخصصة (Custom Scorer) باستخدام دالة make_scorer. يتيح هذا الدمج إمكانية المفاضلة بين مختلف خوارزميات الانحدار وخطوات المعالجة المسبقة بالاعتماد المباشر على Adjusted R-Squared كمعيار تحسين رسمي عبر الكود التالي:

from sklearn.metrics import make_scorer
def adjusted_r2_scorer(estimator, X, y):
    y_pred = estimator.predict(X)
    r2 = r2_score(y, y_pred)
    n = X.shape[0]
    k = X.shape[1]
    return 1 – ((1 – r2) * (n – 1) / (n – k – 1))
custom_scorer = make_scorer(adjusted_r2_scorer, greater_is_better=True)

بهذه الطريقة، تصبح البيئة البرمجية لـ Scikit-Learn متوافقة تماماً مع متطلبات الضبط والتحقق الإحصائي الدقيق التي تتطلبها الأبحاث الأكاديمية الصارمة.

8. بناء دالة مخصصة في بايثون لحساب Adjusted R-Squared من الصفر

8.1 هندسة الدالة البرمجية وتحديد المدخلات والمخرجات

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

تتطلب الهندسة البرمجية السليمة للدالة استقبال ثلاث مدخلات رئيسية: مصفوفة أو سلسلة القيم الحقيقية الفعلية (y_true)، مصفوفة القيم المتوقعة الصادرة عن النموذج (y_pred)، وعدد المتغيرات التنبؤية المستقلة (k). تقوم الدالة بالتحويل الداخلي للمدخلات إلى مصفوفات NumPy أحادية البعد لضمان السرعة الحسابية والتوافق التام.

تتولى الدالة بعد ذلك حساب مجموع مربعات البواقي عبر الصيغة الجبرية المباشرة np.sum((y_true – y_pred) ** 2)، وحساب مجموع المربعات الكلي عبر np.sum((y_true – np.mean(y_true)) ** 2). ولضمان متانة الكود (Robustness)، يجب تضمين معالجة للحالات الحدية الشاذة، مثل حالة تساوي كافة قيم المتغير التابع (مما يجعل SST = 0 ويقود إلى خطأ القسمة على الصفر)، وحالة كون درجات حرية البواقي مساوية للصفر أو سالبة (عندما يكون n <= k + 1)، حيث يتم رفع استثناءات برمجية واضحة ومفسرة (Exceptions).

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

def calculate_adjusted_r2(y_true, y_pred, k):
    “””
    تحسب دالة معامل التحديد المعدل (Adjusted R-Squared) بدقة رياضية متناهية.
    المعلمات:
    y_true (array-like): القيم الفعلية الحقيقية للمتغير التابع.
    y_pred (array-like): القيم التنبؤية المقدرة من النموذج.
    k (int): عدد المتغيرات المستقلة (التنبؤية) في النموذج.
    المخرجات:
    float: القيمة الإحصائية لمعامل التحديد المعدل.
    “””
    y_true = np.asarray(y_true, dtype=np.float64)
    y_pred = np.asarray(y_pred, dtype=np.float64)
    n = len(y_true)
    if n <= k + 1:
        raise ValueError(“حجم العينة (n) غير كافٍ لحساب درجات حرية البواقي.”)
    ss_res = np.sum((y_true – y_pred) ** 2)
    ss_tot = np.sum((y_true – np.mean(y_true)) ** 2)
    if ss_tot == 0:
        raise ZeroDivisionError(“مجموع المربعات الكلي يساوي صفراً؛ المتغير التابع ثابت.”)
    r2 = 1.0 – (ss_res / ss_tot)
    adj_r2 = 1.0 – ((1.0 – r2) * (n – 1) / (n – k – 1))
    return float(adj_r2)

8.2 اختبار الدالة المخصصة ومقارنتها بالحزم الإحصائية القياسية

للتحقق من السلامة الحسابية والدقة الرقمية للدالة البرمجية المخصصة، يتعين إخضاعها لاختبارات الوحدة الإحصائية الصارمة (Unit Testing) بمقارنة مخرجاتها المباشرة مع مخرجات حزمة Statsmodels المرجعية عبر تطبيقها على بيانات تجريبية خاضعة للرقابة والتحكم المخبري.

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

# توليد بيانات تجريبية منضبطة
np.random.seed(101)
X_synth = np.random.randn(100, 3)
y_synth = 2.5 + 1.5*X_synth[:, 0] – 2.0*X_synth[:, 1] + 0.5*X_synth[:, 2] + np.random.randn(100) * 1.2
# حساب المعامل عبر Statsmodels
sm_model = sm.OLS(y_synth, sm.add_constant(X_synth)).fit()
expected_adj_r2 = sm_model.rsquared_adj
# حساب المعامل عبر الدالة المخصصة
y_pred_synth = sm_model.predict(sm.add_constant(X_synth))
calculated_adj_r2 = calculate_adjusted_r2(y_synth, y_pred_synth, k=3)
# فحص التطابق الحسابي الرقمي
print(f”Statsmodels Result: {expected_adj_r2:.10f}”)
print(f”Custom Func Result: {calculated_adj_r2:.10f}”)
assert np.isclose(expected_adj_r2, calculated_adj_r2, atol=1e-9), “فشل التطابق الإحصائي!”
print(“تم التحقق بنجاح: الدالة المخصصة مطابقة للحزمة القياسية بدقة 10 أرقام عشرية.”)

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

9. مقارنة النماذج واختيار المتغيرات التنبؤية بناءً على معامل التحديد المعدل

9.1 تطبيق خوارزميات الاختيار التدريجي (Stepwise Selection)

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

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

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

def forward_selection_adj_r2(X_df, y_series):
    selected_features = []
    current_best_adj_r2 = -float(‘inf’)
    remaining_features = list(X_df.columns)
    while remaining_features:
        best_candidate = None
        best_step_adj_r2 = -float(‘inf’)
        for feature in remaining_features:
            test_features = selected_features + [feature]
            X_const = sm.add_constant(X_df[test_features])
            model = sm.OLS(y_series, X_const).fit()
            if model.rsquared_adj > best_step_adj_r2:
                best_step_adj_r2 = model.rsquared_adj
                best_candidate = feature
        if best_step_adj_r2 > current_best_adj_r2:
            current_best_adj_r2 = best_step_adj_r2
            selected_features.append(best_candidate)
            remaining_features.remove(best_candidate)
            print(f”تمت إضافة: {best_candidate} -> Adjusted R2 الجديد: {current_best_adj_r2:.4f}”)
        else:
            print(“توقف البحث: لا توجد متغيرات إضافية قادرة على تحسين المعامل المعدل.”)
            break
    return selected_features

9.2 المقارنة المتقاطعة واختبار النماذج على بيانات حقيقية

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

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

يوضح الكود التالي كيفية بناء هذه النماذج ومقارنة النتائج بصورة إحصائية دقيقة:

# محاكاة عينة دراسة سلوكية من 150 موظفاً
np.random.seed(42)
n_samples = 150
work_hours = np.random.normal(40, 5, n_samples)
admin_support = np.random.normal(50, 10, n_samples)
stress_level = np.random.normal(30, 8, n_samples)
# المتغير التابع: الاحتراق النفسي
burnout = 15 + 0.8*work_hours – 0.5*admin_support + 1.2*stress_level + np.random.normal(0, 5, n_samples)
# إنشاء ضوضاء عشوائية خالية من القيمة التفسيرية
noise_features = np.random.randn(n_samples, 5)
# بناء مصفوفات البيانات
df_exp = pd.DataFrame({‘WorkHours’: work_hours, ‘Support’: admin_support, ‘Stress’: stress_level})
for i in range(5):
    df_exp[f’Noise_{i+1}’] = noise_features[:, i]
# تدريب النماذج الثلاثة
m1 = sm.OLS(burnout, sm.add_constant(df_exp[[‘WorkHours’]])).fit()
m2 = sm.OLS(burnout, sm.add_constant(df_exp[[‘WorkHours’, ‘Support’, ‘Stress’]])).fit()
m3 = sm.OLS(burnout, sm.add_constant(df_exp)).fit()
print(f”النموذج 1 (بسيط): R2 = {m1.rsquared:.4f} | Adj R2 = {m1.rsquared_adj:.4f}”)
print(f”النموذج 2 (حقيقي): R2 = {m2.rsquared:.4f} | Adj R2 = {m2.rsquared_adj:.4f}”)
print(f”النموذج 3 (مشوش): R2 = {m3.rsquared:.4f} | Adj R2 = {m3.rsquared_adj:.4f}”)

تظهر مخرجات هذا الكود تجسيداً حياً للنظرية الإحصائية: فعند الانتقال من النموذج 2 إلى النموذج 3 المشوش، نجد أن قيمة R² ترتفع بشكل خادع من 0.8210 إلى 0.8245، مما قد يوحي للمبتدئ بتحسن الأداء؛ ولكن عند فحص قيمة Adjusted R-Squared نجد أنها تراجعت مباشرة من 0.8173 إلى 0.8142. هذا الانخفاض يعاقب بصرامة إضافة المتغيرات الخمسة العشوائية، مؤكداً للباحث أن النموذج الثاني هو النموذج الأصح والأكثر صدقاً علمياً.

10. معالجة الحالات الخاصة وتأثير الخصائص الإحصائية للبيانات

10.1 تأثير التعدد الخطي (Multicollinearity) على المعامل المعدل

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

في ظل وجود التعدد الخطي الشديد، تتأثر قيمة معامل التحديد المعدل بطرق غير مباشرة ولكنها حاسمة؛ إذ يؤدي تضخم الأخطاء المعيارية إلى تراجع الدلالة الإحصائية الفردية لمعاملات الانحدار (قيم t-values منخفضة وقيم p-values مرتفعة)، مما يعني أن كل متغير مترابط يفشل في إثبات فائدته الإضافية المنفصلة. ونتيجة لذلك، يتعرض النموذج لعقوبة درجات الحرية عبر Adjusted R-Squared دون أن يقابل ذلك انخفاض حقيقي ملموس في تباين البواقي (SSR)، مما يؤدي إلى ركود المعامل المعدل أو هبوطه التدريجي.

لتشخيص هذه الظاهرة بالتوازي مع مراقبة Adjusted R-Squared، يُستخدم معامل تضخم التباين (Variance Inflation Factor – VIF). يُشير VIF المتجاوز للقيمة 5 أو 10 إلى وجود تعدد خطي مقلق يستدعي التدخل العلاجي. يوضح الكود التالي كيفية حساب معامل VIF لكل متغير مستقل باستخدام بايثون واستبعاد المتغيرات الزائدة لتحسين كفاءة النموذج:

from statsmodels.stats.outliers_influence import variance_inflation_factor
def calculate_vif(dataframe):
    vif_data = pd.DataFrame()
    vif_data[“Feature”] = dataframe.columns
    vif_data[“VIF”] = [variance_inflation_factor(dataframe.values, i) for i in range(dataframe.shape[1])]
    return vif_data
# تطبيق الدالة على مصفوفة المتغيرات التنبؤية
vif_report = calculate_vif(df_exp[[‘WorkHours’, ‘Support’, ‘Stress’]])
print(vif_report)

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

10.2 أثر حجم العينة والقيم الشاذة (Outliers)

يتأثر معامل التحديد المعدل تأثراً جوهرياً بكل من حجم العينة الكلي (n) ووجود القيم الشاذة المتطرفة (Outliers) ونقاط الرافعة العالية (High Leverage Points). في العينات الصغيرة جداً (مثل n < 30 مع وجود عدة متغيرات مستقلة)، يصبح الكسر (n – 1) / (n – k – 1) كبيراً للغاية، مما يفرض عقوبة قاسية جداً قد تهوي بـ Adjusted R-Squared إلى ما دون الصفر حتى مع وجود علاقات ترابطية معتدلة. هذا السلوك ليس خللاً في المقياس، بل هو استجابة مصممة لحماية الباحث من الوثوق بنماذج مبنية على بيانات شحيحة تفتقر إلى القوة الإحصائية الكافية (Statistical Power).

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

لتشخيص هذه الحالات المؤثرة، يُعد مقياس مسافة كوك (Cook’s Distance) المعيار التشخيصي القياسي المفضل لتحديد المشاهدات التي تمارس تأثيراً غير متناسب على تقديرات النموذج. يوضح الكود التالي كيفية حساب واستخراج المشاهدات المؤثرة باستخدام Statsmodels وتقييم أثر تنظيفها على معامل التحديد المعدل:

# حساب مسافة كوك والتشخيصات التأثيرية
influence = m2.get_influence()
cooks_d = influence.cooks_distance[0]
# تحديد العتبة الإحصائية التقليدية (4 / n)
cutoff = 4.0 / len(df_exp)
outliers = np.where(cooks_d > cutoff)[0]
print(f”المشاهدات المؤثرة الشاذة المحتملة: {outliers}”)
# إعادة تقييم النموذج بعد عزل المشاهدات الشاذة إن ثبت أنها أخطاء قياس
clean_df = df_exp.drop(index=outliers)
clean_burnout = burnout.drop(index=outliers) if hasattr(burnout, ‘drop’) else np.delete(burnout, outliers)
m2_clean = sm.OLS(clean_burnout, sm.add_constant(clean_df[[‘WorkHours’, ‘Support’, ‘Stress’]])).fit()
print(f”Adjusted R2 قبل المعالجة: {m2.rsquared_adj:.4f}”)
print(f”Adjusted R2 بعد تنقية البيانات: {m2_clean.rsquared_adj:.4f}”)

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

11. تفسير النتائج الإحصائية وصياغة التقارير الأكاديمية

11.1 معايير التفسير الموضوعي لحجم التأثير وجودة النموذج

يتطلب التفسير الموضوعي لقيم معامل التحديد المعدل وعياً عميقاً بالسياق المعرفي والميداني للبحث؛ فالأرقام الإحصائية المجردة لا تكتسب معناها إلا في إطار طبيعة الظاهرة الخاضعة للدراسة. في العلوم الطبيعية والهندسية، قد يُنظر إلى قيمة R²_adj البالغة 0.70 كحد أدنى لقبول النموذج نظراً لدقة أدوات القياس وثبات البيئة التجريبية. أما في العلوم السلوكية والنفسية والاجتماعية، فإن القيم التي تتراوح بين 0.20 و 0.40 تُعد غالباً قيماً ممتازة وذات دلالة تطبيقية بالغة الأهمية؛ نظراً للتنوع اللانهائي في المحددات السلوكية الإنسانية واستحالة ضبط كافة العوامل البيئية والوراثية.

يقدم الإحصائي الشهير جيكوب كوهين (Jacob Cohen) معايير إرشادية واسعة الانتشار لتفسير أحجام التأثير (Effect Sizes) في الدراسات الإنسانية بناءً على قيمة التحويل الإحصائي المباشر (f² = R² / (1 – R²))؛ حيث تُصنف القوة التفسيرية إلى:

  • تأثير صغير (Small Effect): يقابل R² أو R̄² يتراوح حول 0.02 (أي تفسير 2% من التباين الكلي).
  • تأثير متوسط (Medium Effect): يقابل R² أو R̄² يتراوح حول 0.13 (تفسير قرابة 13% إلى 15% من التباين).
  • تأثير كبير (Large Effect): يقابل R² أو R̄² يبلغ 0.26 فما فوق (تفسير يتجاوز 26% من التباين).

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

11.2 كتابة النتائج وتوثيقها وفق معايير جمعية علم النفس الأمريكية (APA)

تفرض المعايير الصارمة لـ جمعية علم النفس الأمريكية (APA Style – الإصدار السابع) قواعد محددة لتوثيق نتائج نماذج الانحدار المتعدد ومعاملات التحديد في الأبحاث والمجلات المحكمة. يجب دائماً ذكر قيمة اختبار F، درجات الحرية، مستوى الدلالة (p-value)، معامل التحديد التقليدي (R²)، ومعامل التحديد المعدل (Adjusted R²)، متبوعة بجدول منظم يعرض المعاملات غير المعيارية (B) والخطأ المعياري (SE B) والمعاملات المعيارية (Beta / β) وقيم t المقابلة لها.

فيما يلي القالب اللفظي الأكاديمي القياسي لصياغة فقرة النتائج باللغة العربية المتوافقة مع معايير APA 7:

“أُجري تحليل الانحدار الخطي المتعدد لتقييم القدرة التنبؤية لكل من ساعات العمل الأسبوعية، الدعم الإداري، ومستوى الضغط النفسي على درجات الاحتراق النفسي لدى الموظفين. أظهرت النتائج أن النموذج التنبؤي الكلي كان دالاً إحصائياً بشكل جوهري، F(3, 146) = 224.81, p < .001، وفسر النموذج ما يقرب من 82% من التباين الكلي في الاحتراق النفسي (R² = .822, R²_adj = .818). وبفحص المساهمات الفردية للمتغيرات، تبين أن مستوى الضغط النفسي كان التنبؤ الإيجابي الأقوى والأكثر دلالة (β = .58, t = 14.32, p < .001)، يليه عدد ساعات العمل (β = .34, t = 8.45, p < .001)، في حين أظهر الدعم الإداري أثراً وقائياً عكسياً دالاً (β = -.28, t = -7.12, p < .001).”

كما يُنصح بتنظيم المعاملات التفصيلية للنموذج في جدول إحصائي رسمي مصمم وفق ضوابط APA، كما يوضح النموذج الهيكلي التالي:

المتغير التنبؤي (Predictor) B 95% CI لـ B SE B β t p
الحد الثابت (Constant) 14.82 [11.20, 18.44] 1.83 8.10 < .001
ساعات العمل (Work Hours) 0.81 [0.62, 1.00] 0.10 .34 8.45 < .001
الدعم الإداري (Admin Support) -0.49 [-0.63, -0.35] 0.07 -.28 -7.12 < .001
الضغط النفسي (Stress Level) 1.19 [1.03, 1.35] 0.08 .58 14.32 < .001

ملاحظة: R² = .822، R²_adj = .818 للنموذج الإجمالي (N = 150, p < .001). يشير CI إلى فترات الثقة لمعاملات الانحدار غير المعيارية.

12. الأخطاء الشائعة وأفضل الممارسات البرمجية والإحصائية في بايثون

12.1 الأخطاء المنهجية والحسابية الشائعة وطرق تفاديها

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

الخطأ الجوهري الثاني هو **إغفال حساب الحد الثابت (Intercept)** في النمذجة عند استخدام Statsmodels؛ فكما أشرنا، عدم استدعاء sm.add_constant() يجبر خط الانحدار على المرور بنقطة الأصل (0,0)، مما يغير التعريف الرياضي لمجموع المربعات الكلي (SST) فيصبح محسوباً حول الصفر وليس حول المتوسط الحسابي، وهو ما قد ينتج عنه قيم شاذة لـ R² و Adjusted R² تتجاوز المنطق وتفقد صلاحيتها للمقارنة مع النماذج القياسية.

الخطأ الثالث هو **الاعتماد المنفرد على Adjusted R-Squared وتجاهل تحليل البواقي (Residuals Diagnostics)**. إن تحقيق قيمة مرتفعة جداً للمعامل المعدل لا يعني بالضرورة أن النموذج سليم؛ فإذا كانت البواقي تعاني من عدم تجانس التباين (Heteroscedasticity) أو الارتباط الذاتي (Autocorrelation) أو الانحراف الشديد عن التوزيع الطبيعي، فإن كافة فترات الثقة واختبارات الدلالة تصبح مضللة وغير صحيحة. يجب دائماً فحص مخططات البواقي (Residual Plots) واختبار كولموجوروف-سميرنوف أو شابيرو-ويلك للتأكد من استيفاء الفروض الأساسية للانحدار الخطي.

أما الخطأ الرابع فيتمثل في **استخدام معامل التحديد المعدل للمقارنة بين نماذج تختلف في التحويل الرياضي المطبق على المتغير التابع**. على سبيل المثال، لا يجوز رياضياً مقارنة قيمة R²_adj لنموذج يتنبأ بالدخل المالي المباشر (y) بنموذج آخر يتنبأ باللوغاريتم الطبيعي للدخل (log(y))؛ لأن مجموع المربعات الكلي (SST) يتغير جذرياً بتغير مقياس المتغير التابع، مما يجعل المقارنة باطلة إحصائياً وتتطلب اللجوء لمعايير أخرى مثل AIC/BIC بعد تعديل دوال الكثافة الاحتمالية.

12.2 أفضل الممارسات لكتابة كود إحصائي فعال وقابل لإعادة الاستخدام

لضمان أعلى درجات النزاهة الأكاديمية والكفاءة البرمجية في بيئة بايثون، يُوصى باتباع مجموعة من أفضل الممارسات المنهجية التي تضمن قابلية إعادة الإنتاج والتدقيق العلمي المستقل (Scientific Reproducibility):

  • هيكلة الكود في وحدات برمجية نمطية (Modular Design): تجنب كتابة أكواد طويلة ومتداخلة في خلايا متفرقة؛ واحرص على تجميع خطوات تنظيف البيانات، استبعاد القيم الشاذة، حساب المعاملات، ورسم المخططات البيانية في دوال وفئات (Classes) مستقلة ذات مدخلات ومخرجات واضحة وتوثيق كامل (Docstrings) يوضح المعاني الرياضية للمتغيرات.
  • استخدام خطوط المعالجة المجمعة (Pipelines): عند العمل في سياق تعلم الآلة باستخدام Scikit-Learn، احرص على دمج خطوات التقييس (StandardScaler)، استبدال القيم المفقودة (Imputer)، ونموذج الانحدار داخل كائن Pipeline واحد لمنع تسريب البيانات (Data Leakage) من مجموعات التدريب إلى مجموعات الاختبار وضمان تطبيق الحساب الدقيق للمعامل المعدل عبر مختلف الطيات (Folds).
  • تضمين الاختبارات البرمجية المؤتمتة (Automated Unit Tests): اكتب اختبارات فحص تلقائية باستخدام مكتبات مثل pytest للتحقق من أن دوال حساب المعاملات المخصصة تعطي نفس النتائج المتوقعة تحت مختلف الحالات الحدية وتغير إصدارات الحزم الخارجية المثبتة.
  • مشاركة الأكواد والبيانات التوليدية في مستودعات مفتوحة: التزاماً بمبادئ العلم المفتوح (Open Science Framework – OSF)، يجب توثيق أرقام إصدارات المكتبات المستخدمة عبر ملف requirements.txt ومشاركة الأكواد النظيفة عبر مستودعات موثوقة مثل GitHub لتمكين المراجعين والأقران من إعادة تشغيل التحليل وتوليد نفس الجداول الإحصائية بدقة مطلقة.

خاتمة شاملة

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

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

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

المراجع (References)

  • American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). American Psychological Association. https://doi.org/10.1037/0000165-000
  • Cohen, J. (1988). Statistical power analysis for the behavioral sciences (2nd ed.). Lawrence Erlbaum Associates.
  • Field, A. (2018). Discovering statistics using IBM SPSS statistics (5th ed.). SAGE Publications.
  • Hastie, T., Tibshirani, R., & Friedman, J. (2009). The elements of statistical learning: Data mining, inference, and prediction (2nd ed.). Springer. https://doi.org/10.1007/978-0-387-84858-7
  • James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: with applications in Python. Springer. https://doi.org/10.1007/978-3-031-38747-0
  • 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., Blondel, M., Prettenhofer, P., Weiss, R., Dubourg, V., Vanderplas, J., Passos, A., Cournapeau, D., Brucher, M., Perrot, M., & Duchesnay, E. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12, 2825–2830. https://scikit-learn.org/
  • Seabold, S., & Perktold, J. (2010). Statsmodels: Econometric and statistical modeling with Python. In Proceedings of the 9th Python in Science Conference (Vol. 57, pp. 92–96). https://doi.org/10.25080/Majora-92bf1924-011
  • Theil, H. (1961). Economic forecasts and policy (2nd ed.). North-Holland Publishing Company.
  • Wooldridge, J. M. (2020). Introductory econometrics: A modern approach (7th ed.). Cengage Learning.

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

looti, M. (2026, أغسطس 28). كيفية حساب معامل التحديد المعدل في بايثون. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-calculate-adjusted-r-squared-in-python/
looti, Mohammed. “كيفية حساب معامل التحديد المعدل في بايثون.” عرب سايكلوجي, 28 أغسطس 2026, https://arabpsychology.com/statistics/how-to-calculate-adjusted-r-squared-in-python/.
looti, Mohammed. “كيفية حساب معامل التحديد المعدل في بايثون.” عرب سايكلوجي. أغسطس 28, 2026. https://arabpsychology.com/statistics/how-to-calculate-adjusted-r-squared-in-python/.