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

كيفية حساب القيمة المتوقعة في لغة R (مع أمثلة)

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

تاريخ النشر

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

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

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

1. مفهوم القيمة المتوقعة في نظرية الاحتمالات والإحصاء الرياضي

1.1 التعريف النظري للقيمة المتوقعة (Expected Value)

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

يكمن الفرق الجوهري بين المتوسط الحسابي البسيط (Sample Mean) والمتوسط المرجح بالاحتمالات (Expected Value) في طبيعة الأوزان الممنوحة لكل قيمة؛ فبينما يفترض المتوسط الحسابي البسيط تكراراً متساوياً أو أوزاناً متكافئة لجميع المشاهدات المتاحة في العينة، تأخذ القيمة المتوقعة في الاعتبار الثقل الاحتمالي النظري لكل حدث في فضاء العينة. ويُرمز للقيمة المتوقعة في الأدبيات الإحصائية والرياضية بالرمز E(X) أو بالحرف اليوناني μ (ميو)، ليدل بوضوح على أنه مَعلمة مجتمعية نظرية (Population Parameter) تقيس المركز المرجح للتوزيع الاحتمالي.

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

1.2 الخصائص الجبرية للقيمة المتوقعة

تتميز القيمة المتوقعة بمجموعة من الخصائص الجبرية الصارمة التي تجعلها أداة مرنة للغاية في الاستدلال الرياضي والاشتقاق الإحصائي. تأتي في مقدمة هذه الخصائص خاصية الخطية (Linearity of Expectation)، والتي تنص على أن القيمة المتوقعة لدالة خطية مطبقة على متغير عشوائي تساوي الدالة الخطية نفسها مطبقة على القيمة المتوقعة للمتغير، وتُصاغ رياضياً كما يلي: E(aX + b) = aE(X) + b، حيث يمثل a و b ثوابت عددية حقيقية. تمتد هذه الخاصية لتشمل أي تركيب خطي لمجموعة من المتغيرات العشوائية، بغض النظر عما إذا كانت تلك المتغيرات مستقلة أو مرتبطة.

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

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

1.3 القيمة المتوقعة في سياق المتغيرات المنفصلة والمستمرة

يتحدد الأسلوب الرياضي لحساب القيمة المتوقعة بناءً على الطبيعة المقياسية للمتغير العشوائي؛ حيث تُقسم المتغيرات العشوائية في الإحصاء الرياضي إلى نوعين رئيسيين: المتغيرات المنفصلة (Discrete Random Variables) والمتغيرات المستمرة (Continuous Random Variables). يتخذ المتغير العشوائي المنفصل قيماً عددية محددة وقابلة للعد، سواء كانت منتهية أو لانهائية قابلة للعد، مثل عدد الإجابات الصحيحة في اختبار معرفي أو عدد المكالمات الهاتفية المستقبلة، ويُوصف توزيعه الاحتمالي عبر دالة الكتلة الاحتمالية (Probability Mass Function – PMF) التي تعطي احتمالية حدوث كل قيمة بعينها.

في المقابل، يأخذ المتغير العشوائي المستمر أي قيمة تقع ضمن نطاق عددي متصل وغير منقطع، مثل قياسات الزمن بالمللي ثانية، أو درجات الحرارة، أو تركيزات الهرمونات في الدم. ولا يمكن تخصيص احتمال غير صفري لنقطة مفردة في حالة المتغير المستمر؛ بل يتم توصيف سلوكه الاحتمالي عبر دالة الكثافة الاحتمالية (Probability Density Function – PDF)، وتُحسب الاحتمالات باعتبارها المساحة المحصورة تحت منحنى الكثافة ضمن فترة محددة.

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

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

2.1 الصيغة الرياضية للتوزيعات الاحتمالية المنفصلة

تُصاغ المعادلة القياسية لحساب القيمة المتوقعة لمتغير عشوائي منفصل X يأخذ قيماً x1, x2, …, xk باحتمالات مناظرة P(X = xi) وفق المعادلة الرياضية الصريحة التالية:

μ = E(X) = Σ [xi · P(X = xi)]

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

  • شرط عدم السلبية: يجب أن يكون احتمال كل قيمة مفردة غير سالب، أي: P(X = xi) ≥ 0 لجميع قيم i.
  • شرط الاكتمال الاحتمالي: يجب أن يكون المجموع الكلي للاحتمالات عبر كامل فضاء العينة مساوياً للواحد الصحيح بدقة، أي: Σ P(X = xi) = 1.

من الناحية الميكانيكية والفيزيائية، يُفسر ناتج هذه المعادلة بوصفه “نقطة التوازن” أو “مركز الثقل” (Center of Mass) للتوزيع الاحتمالي. فإذا تخيلنا أن خط الأعداد عبارة عن رافعة خالية من الوزن، ووُضعت كتل احتمالية تتناسب مع P(x) عند كل نقطة x، فإن النقطة الوحيدة التي ستتزن عندها الرافعة تماماً دون أن تميل لأي جانب هي القيمة المتوقعة E(X).

2.2 مثال توضيحي يدوي قبل الانتقال للبرمجة

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

  • 0 أهداف: باحتمال مقداره 0.18
  • 1 هدف: باحتمال مقداره 0.34
  • 2 أهداف: باحتمال مقداره 0.35
  • 3 أهداف: باحتمال مقداره 0.11
  • 4 أهداف: باحتمال مقداره 0.02

أولاً، نتحقق من اكتمال التوزيع الاحتمالي بجمع الاحتمالات المذكورة:

0.18 + 0.34 + 0.35 + 0.11 + 0.02 = 1.00

بما أن المجموع يساوي 1.00 وجميع القيم موجبة، نقوم بإجراء الحساب الرياضي التراكمي لضرب كل قيمة في وزنها الاحتمالي المناظر:

E(X) = (0 × 0.18) + (1 × 0.34) + (2 × 0.35) + (3 × 0.11) + (4 × 0.02)

E(X) = 0.00 + 0.34 + 0.70 + 0.33 + 0.08 = 1.45

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

3. إعداد بيئة العمل البرمجية في لغة R

3.1 تهيئة المتجهات (Vectors) في R

تعتمد لغة R في بنيتها التحتية على المتجهات (Vectors) كبنية بيانات أساسية وأولية لتخزين السلاسل الرقمية. لتمثيل التوزيع الاحتمالي المنفصل برمجياً، نقوم بإنشاء متجهين رقميين متناظرين: الأول يحتوي على قيم المتغير العشوائي (Values Vector) ويُنشأ باستخدام دالة التجميع المتجهي c()، والثاني يضم الاحتمالات المناظرة المقترنة بتلك القيم (Probabilities Vector).

تتم عملية الإنشاء البرمجي في سطر الأوامر عبر تعريف المتجه vals ليمثل الأهداف: vals <- c(0, 1, 2, 3, 4)، والمتجه probs ليمثل الاحتمالات: probs <- c(0.18, 0.34, 0.35, 0.11, 0.02). من الضروري جداً التأكد من أن كلا المتجهين يحملان النوع الرقمي (Numeric Type)، ويمكن فحص ذلك عبر استدعاء الدالة is.numeric(vals) و is.numeric(probs) للتأكد من عدم وجود قيم نصية غير مقصودة تؤدي إلى تشويه العمليات الحسابية اللاحقة.

علاوة على ذلك، يجب التحقق الصارم من تطابق أطوال المتجهات عبر الدالة length(vals) == length(probs)؛ حيث تطبق لغة R قاعدة التدوير المتجهي (Recycling Rule) إذا كانت المتجهات غير متساوية في الطول. وإذا تباينت الأطوال دون تنبيه المحلل، فقد تقوم R بتكرار عناصر المتجه الأقصر لإكمال العملية الحسابية، مما يترتب عليه نتائج إحصائية مضللة وغير صحيحة رياضياً بالمرة.

3.2 التحقق البرمجي من قيود التوزيع الاحتمالي

قبل الشروع في تطبيق خوارزميات الحساب، تقتضي قواعد البرمجة الإحصائية الرصينة بناء مرحلة تحقق آلي من صحة التوزيع الاحتمالي. الفحص الأول هو التحقق من أن مجموع متجه الاحتمالات يساوي الواحد الصحيح. ومع ذلك، قد تفشل المقارنة المنطقية المباشرة sum(probs) == 1 في بعض الأحيان بسبب ظاهرة أخطاء التمثيل الثنائي العشري والفاصلة العائمة في بنية الحواسيب (Floating-Point Arithmetic Issues).

لتفادي الوقوع في هذا الفخ الحاسوبي، توفر بيئة R الدالة المتخصصة all.equal() للتحقق من التساوي العددي مع التسامح مع الفروق الحاسوبية الميكروسكوبية، فيكون الفحص الصحيح برمجياً هو:

isTRUE(all.equal(sum(probs), 1))

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

all(probs >= 0) && all(probs <= 1)

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

4. الطريقة الأولى: حساب القيمة المتوقعة باستخدام دالة sum() في R

4.1 آلية الضرب العنصري والجمع التراكمي

تعتمد الطريقة الأولى والأكثر بديهية لحساب القيمة المتوقعة في R على استغلال ميزة العمليات المتجهية العنصرية (Vectorized Element-wise Operations) التي تتفوق بها لغة R على لغات البرمجة التقليدية كـ C أو Java؛ حيث لا يتطلب ضرب المتجهات كتابة حلقات تكرارية صريحة (for loops).

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

4.2 تطبيق برمجي مفصل للطريقة الأولى

لتطبيق هذه المنهجية خطوة بخطوة، نستعرض الشفرة البرمجية المباشرة المنفذة للمثال الرياضي المذكور سابقاً:

# تعريف قيم المتغير العشوائي والاحتمالات المقترنة
vals <- c(0, 1, 2, 3, 4)
probs <- c(0.18, 0.34, 0.35, 0.11, 0.02)

# التحقق من شرط المجموع الاحتمالي
stopifnot(isTRUE(all.equal(sum(probs), 1)))

# حساب القيمة المتوقعة عبر الضرب العنصري والجمع التراكمي
expected_val_sum <- sum(vals * probs)

# طباعة النتيجة النهائية على شاشة المخرجات
print(expected_val_sum)

عند تشغيل هذا المقطع البرمجي في محطة RStudio أو مفسر R القياسي، ستظهر النتيجة العددية [1] 1.45، وهي النتيجة التي تتطابق تطابقاً مطلقاً مع الحساب اليدوي النظري الذي تم إجراؤه في القسم 2.2، مما يؤكد دقة التنفيذ البرمجي وموثوقية المعالجة الحسابية.

4.3 حالات الاستخدام والمزايا التقنية لدالة sum()

تحظى طريقة sum(vals * probs) بتفضيل واسع في الأوساط الأكاديمية والتدريسية نظراً لعدة اعتبارات تقنية ومنهجية:

  • التوافق المباشر مع التعبير الرياضي: تعكس هذه الصياغة البرمجية الرمز الرياضي الأصيل Σ x · P(x) بصورة بصرية واضحة ومباشرة، مما يسهل على المتعلمين والباحثين قراءة الكود وفهم منطق الحساب دون الحاجة لفك تشفير دوال مجردة.
  • المرونة العالية في تطبيق الدوال التحويلية: تتيح هذه الطريقة تطبيق أي دالة غير خطية g(X) على المتغير العشوائي لحساب القيمة المتوقعة للدالة التحويلية E[g(X)] ببساطة متناهية، كأن نكتب لحساب العزم الثاني (Second Moment): sum((vals^2) * probs) أو لحساب دالة تحويلية لوغاريتمية: sum(log(vals + 1) * probs)، دون الحاجة لتغيير هيكل الدالة الأساسية.
  • الأداء السريع في المتجهات المتوسطة: نظراً لأن الدالة sum() مكتوبة بلغة C المنخفضة المستوى داخل بنية R الأساسية، فإنها تنفذ الجمع بسرعة فائقة تفي باحتياجات الغالبية العظمى من التطبيقات التحليلية القياسية.

5. الطريقة الثانية: حساب القيمة المتوقعة باستخدام دالة weighted.mean()

5.1 الأساس النظري للمتوسط المرجح في R

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

تتعامل الدالة weighted.mean() مع المدخلات عبر استيعاب متجهين: الأول يمثل قيم البيانات المراد حساب متوسطها، والثاني يمثل مصفوفة أو متجه الأوزان (Weights). وتتميز هذه الدالة بقدرتها الذاتية على إجراء عملية “المعايرة والتطبيع” (Normalization) للأوزان بصورة تلقائية في خلفية التنفيذ، مما يمنحها ميزة أمان إضافية في حال كانت الأوزان المدخلة تمثل تكرارات نسبية أو نسباً مئوية لم تُقسم مسبقاً على مجموعها الإجمالي.

5.2 تطبيق برمجي مفصل لدالة weighted.mean()

تأتي الصيغة البرمجية العامة للدالة بالشكل التالي: weighted.mean(x, w, na.rm = FALSE, ...)، حيث يمثل المعامل x القيم العددية، ويمثل w الأوزان الاحتمالية المناظرة. لتنفيذ ذلك على نموذجنا الإحصائي، نكتب الشفرة التالية:

# تعريف المتجهات
vals <- c(0, 1, 2, 3, 4)
probs <- c(0.18, 0.34, 0.35, 0.11, 0.02)

# حساب القيمة المتوقعة باستخدام دالة المتوسط المرجح
expected_val_wm <- weighted.mean(x = vals, w = probs)

# استعراض النتيجة
print(expected_val_wm)

يُنتج هذا السطر البرمجي المباشر القيمة 1.45، وهي مطابقة تماماً للمخرجات السابقة. وإذا احتوت البيانات على قيم مفقودة (Missing Values)، تتيح هذه الدالة معالجة فورية عبر تفعيل المعامل na.rm = TRUE، والذي يقوم تلقائياً بحذف المشاهدات الناقصة مع الأوزان المقترنة بها وإعادة ترجيح المتبقي دون توقف الكود أو ظهور أخطاء حسابية.

5.3 مقارنة سلوك دالة weighted.mean() مع الأوزان غير المعايرة

تظهر القوة الوظيفية لدالة weighted.mean() عند التعامل مع التكرارات الخام غير المحولة إلى نسب احتمالية. لنفترض أن الباحث قام بجمع عينة مسحية لـ 100 مباراة ووجد التكرارات المباشرة كالتالي: 18 مباراة بدون أهداف، 34 مباراة بهدف واحد، 35 مباراة بهدفين، 11 مباراة بثلاثة أهداف، ومباراتان بأربعة أهداف.

counts <- c(18, 34, 35, 11, 2)
# الحساب المباشر بالأوزان الخام غير المقسمة على 100
res_raw <- weighted.mean(vals, counts)
print(res_raw) # الناتج: 1.45

تقوم الدالة داخلياً بقسمة كل تكرار على المجموع الكلي: wi / Σ wi قبل تطبيق الجمع، في حين أن محاولة تطبيق الطريقة الأولى sum(vals * counts) مباشرة على التكرارات ستعطي 145 (إجمالي الأهداف الكلية) بدلاً من القيمة المتوقعة 1.45، ما لم يقم الباحث بقسمتها يدوياً على sum(counts). هذا السلوك يجعل weighted.mean() الدالة الأكثر أماناً عند العمل مع بيانات مسحية تتضمن أوزاناً ديموغرافية أو تكرارات غير معيارية.

6. الطريقة الثالثة: حساب القيمة المتوقعة عبر الجبر الخطي والضرب المصفوفي (%*%)

6.1 المفهوم الرياضي للضرب النقطي للمتجهات (Dot Product)

في فضاء الجبر الخطي (Linear Algebra)، يمكن تمثيل المتغير العشوائي والتوزيع الاحتمالي المقترن به كمتجهين رياضيين في فضاء إقليدي متعدد الأبعاد Rk. إذا مثلنا قيم المتغير العشوائي كمتجه صف X = [x1, x2, …, xk] ومتجه الاحتمالات كمتجه عمود P = [p1, p2, …, pk]T، فإن القيمة المتوقعة تصبح مكافئة رياضياً للضرب النقطي (Dot Product) أو الجداء القياسي بين هذين المتجهين:

E(X) = X · P = X %*% P

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

6.2 تطبيق برمجي مفصل باستخدام معامل %*%

عند استخدام المعامل %*% في لغة R لضرب متجهين من نفس البعد، يتم احتساب الناتج المصفوفي مباشرة وفق الشفرة التالية:

# تعريف المتجهات
vals <- c(0, 1, 2, 3, 4)
probs <- c(0.18, 0.34, 0.35, 0.11, 0.02)

# إجراء الضرب المصفوفي (Dot Product)
expected_val_mat <- vals %*% probs

# فحص البنية ونوع المخرجات
print(expected_val_mat)
print(class(expected_val_mat))

الملاحظة البرمجية الأساسية هنا هي أن ناتج العملية vals %*% probs لا يُرجع قيمة عددية قياسية بسيطة (Scalar)، بل يُرجع مصفوفة ثنائية الأبعاد بأبعاد 1 × 1 من الفئة matrix أو array. ولتحويل هذه النتيجة إلى رقم قياسي بسيط يسهل دمجه في العمليات الحسابية التالية أو تضمينه في أطر البيانات (Data Frames)، يُنصح بتغليف الناتج بدالة التحويل c() أو as.numeric() أو drop():

expected_val_scalar <- as.numeric(vals %*% probs)
# أو باستخدام الدالة القياسية المباشرة
expected_val_scalar <- c(vals %*% probs)

6.3 الكفاءة الحسابية للجبر الخطي في R

تكمن الميزة الهيكلية الكبرى لاستخدام الضرب المصفوفي %*% في استفادته المباشرة من مكتبات الجبر الخطي منخفضة المستوى المدمجة مع بيئة R، وتحديداً مكتبات BLAS (Basic Linear Algebra Subprograms) و LAPACK. تم تحسين هذه المكتبات على مستوى المعالج الدقيق لاستغلال إمكانيات المعالجة المتوازية وسجلات الفيكتور السريعة (SIMD Instructions).

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

7. مقارنة تفصيلية وتحليل كفاءة الطرق الثلاث في R

7.1 مقارنة الأداء والسرعة باستخدام حزمة microbenchmark

لإجراء تقييم تجريبي صارم وموضوعي للفروق الدقيقة في سرعة المعالجة الحاسوبية بين الطرق الثلاث المذكورة (sum()، weighted.mean()، والمعامل المصفوفي %*%)، نقوم بتصميم اختبار قياس أداء معياري (Benchmarking) عالي الدقة باستخدام الحزمة المتخصصة microbenchmark، مع تكرار كل عملية 10,000 مرة لقياس التوزيع الزمني الدقيق بالميكروثانية والنانوثانية.

# تثبيت واستدعاء حزمة القياس المعياري
if(!require(microbenchmark)) install.packages("microbenchmark")
library(microbenchmark)

# إعداد بيانات اختبارية بحجم 100,000 فئة احتمالية
set.seed(42)
n <- 100000
test_vals <- seq_len(n)
raw_p <- runif(n)
test_probs <- raw_p / sum(raw_p)

# تنفيذ اختبار قياس الأداء
benchmark_results <- microbenchmark(
  Sum_Method = sum(test_vals * test_probs),
  Weighted_Mean = weighted.mean(test_vals, test_probs),
  Matrix_Product = as.numeric(test_vals %*% test_probs),
  times = 10000
)

print(benchmark_results)

تُظهر التحليلات الزمنية أن طريقة الضرب المصفوفي %*% وطريقة sum(vals * probs) تتنافسان بقوة على صدارة الكفاءة الزمنية، حيث تستفيد كلتاهما من التحسين المباشر في لغة C والمكتبات الرياضية السريعة. في المقابل، تسجل دالة weighted.mean() عادة زمناً أطول نسبياً بمقدار ضئيل؛ والسبب في ذلك يعود إلى الأعباء البرمجية الإضافية (Function Overhead) والفحوصات المنطقية الداخلية التي تجريها الدالة في كل استدعاء للتحقق من وجود القيم المفقودة وإعادة معايرة الأوزان وقسمتها على مجموعها الكلي.

7.2 سهولة القراءة والصيانة البرمجية (Readability & Maintainability)

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

  • دالة weighted.mean(): تُعد الخيار الأمثل للمشاريع البحثية التي يشارك فيها محللون متعددو التخصصات أو باحثون في العلوم الاجتماعية والسلوكية ممن لا يمتلكون خلفية متقدمة في الجبر الخطي؛ فالاسم الواضح للدالة يعبر صراحة عن الغرض الإحصائي منها ويقلل احتمالية ارتكاب أخطاء في التفسير.
  • دالة sum(vals * probs): توفر أفضل توازن بين الوضوح الرياضي والتطابق مع الصيغ النظرية المنشورة في الكتب المنهجية، وتعتبر المعيار الأكثر مرونة عند بناء نماذج العزوم الإحصائية ودوال التباين المشترك.
  • المعامل المصفوفي %*%: هو الأنسب للمبرمجين الرياضيين وعلماء البيانات العاملين في بيئات تتطلب عمليات مصفوفية متسلسلة ونمذجة مكثفة للبيانات الضخمة، حيث تكون الأولوية القصوى للكفاءة الهيكلية والأداء المعالج.

7.3 جدول مقارنة تركيبي شامل

يلخص الجدول التالي الخصائص والمحددات التقنية لكل طريقة من الطرق الثلاث لتسهيل اختيار الأداة البرمجية الأنسب لكل سيناريو تطبيقي:

المعيار المقارن دالة sum() دالة weighted.mean() الضرب المصفوفي %*%
الصيغة البرمجية sum(vals * probs) weighted.mean(vals, probs) vals %*% probs
نوع المخرجات قيمة قياسية (Scalar) قيمة قياسية (Scalar) مصفوفة بأبعاد 1×1 (Matrix)
المعايرة التلقائية غير مدعومة (تتطلب Σ p = 1) مدعومة بالكامل وتلقائية غير مدعومة (تتطلب Σ p = 1)
معالجة القيم المفقودة (NA) تتطلب فلترة مسبقة مدمجة عبر na.rm = TRUE تتطلب فلترة مسبقة
الكفاءة الحسابية عالية جداً متوسطة (بسبب الفحوصات) قصوى (تعتمد على BLAS)
أفضل استخدام تطبيقي الاشتقاقات الرياضية والتدريس المسوحات والبيانات الميدانية النمذجة الضخمة وسلاسل ماركوف

8. حساب القيمة المتوقعة للتوزيعات الاحتمالية المستمرة في R

8.1 الصيغة التكاملية للمتغيرات المستمرة

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

E(X) = ∫-∞+∞ x · f(x) dx

في هذا السياق الرياضي، يمثل التعبير x · f(x) dx الكتلة الاحتمالية متناهية الصغر المرجحة بقيمة المتغير عند النقطة x. ويشترط لوجود القيمة المتوقعة بالمعنى الدقيق أن يكون التكامل مطلق التقارب، أي أن: -∞+∞ |x| · f(x) dx < ∞. وتوفر حزم R الإحصائية دوالاً تحليلية جاهزة لمعظم التوزيعات القياسية المستمرة، مثل: التوزيع الطبيعي dnorm()، التوزيع الأسي dexp()، وتوزيع غاما dgamma()، والتي يمكن دمجها مباشرة داخل دوال المكاملة العددية.

8.2 استخدام دالة integrate() في R

توفر بيئة R الدالة القوية integrate() لإجراء التكامل العددي التكيفي (Adaptive Quadrature) المقتبس من خوارزميات مكتبة QUADPACK المتقدمة. يتيح هذا النهج حساب القيمة المتوقعة لأي توزيع مستمر حتى وإن لم يكن له حل تحليلي بسيط ومباشر مغلق.

لنأخذ مثالاً عملياً متقدماً: حساب القيمة المتوقعة لمتغير عشوائي يتبع توزيعاً طبيعياً بمتوسط نظري μ = 5 وانحراف معياري σ = 2. سنقوم ببناء دالة التكامل وحسابها عبر الشفرة التالية:

# تعريف دالة المكاملة: حاصل ضرب x في دالة الكثافة الاحتمالية dnorm
integrand_norm <- function(x) {
  x * dnorm(x, mean = 5, sd = 2)
}

# إجراء التكامل العددي من سالب ما لا نهاية إلى موجب ما لا نهاية
result_norm <- integrate(integrand_norm, lower = -Inf, upper = Inf)

# استعراض النتائج وتقدير الخطأ المطلق
print(result_norm)
print(result_norm$value) # استخراج القيمة المتوقعة الصافية

يُظهر استعراض الكائن result_norm القيمة 5 with absolute error < 4.4e-05، مما يؤكد أن التكامل العددي نجح في استرداد المتوسط النظري للتوزيع بدقة فائقة مع تقدير دقيق للغاية لنسبة الخطأ الحاسوبي المطلق.

وكمثال آخر في مجال تحليل البقاء والموثوقية، لنحسب القيمة المتوقعة لـ التوزيع الأسي (Exponential Distribution) بمعدل حدوث λ = 0.5 (حيث يُعرف رياضياً أن القيمة المتوقعة تساوي 1 / λ = 2):

# تعريف دالة التكامل للتوزيع الأسي على المجال الموجب [0, Inf)
integrand_exp <- function(x) {
  x * dexp(x, rate = 0.5)
}

result_exp <- integrate(integrand_exp, lower = 0, upper = Inf)
print(result_exp$value) # الناتج: 2

9. تطبيقات وأمثلة عملية متقدمة في علم النفس والعلوم السلوكية

9.1 نمذجة زمن الاستجابة في الاختبارات النفسية (Reaction Times)

في أبحاث علم النفس المعرفي والعلوم العصبية، يُعد زمن الاستجابة (Reaction Time – RT) أحد أهم المؤشرات السلوكية المستخدمة لقياس سرعة المعالجة الذهنية وكفاءة الانتباه الانتقائي. وتتسم أزمنة الاستجابة بطبيعة غير متماثلة تظهر التواءً موجباً واضحاً (Positive Skewness)، حيث تُنمذج غالباً باستخدام توزيعات احتمالية متقدمة مثل توزيع إكس-غاوسي (Ex-Gaussian Distribution) أو التوزيع اللوغاريتمي الطبيعي.

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

# الفئات الزمنية بالمللي ثانية (نقاط المنتصف)
rt_bins <- c(250, 350, 450, 550, 650, 750, 850)
# الاحتمالات المقترنة بكل فئة زمنية
rt_probs <- c(0.05, 0.28, 0.38, 0.18, 0.07, 0.03, 0.01)

# التحقق والحساب في R
expected_rt <- sum(rt_bins * rt_probs)
print(paste("زمن الاستجابة المتوقع للمفحوصين:", expected_rt, "مللي ثانية"))

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

9.2 توقع درجات مقاييس ليكرت (Likert Scales) في الاستبيانات

تعتمد معظم الدراسات السلوكية والاجتماعية على مقاييس ليكرت الخماسية أو السباعية (Likert Scales) لتقييم الاتجاهات، والسمات النفسية، والرضا الوظيفي. في كثير من الحالات المتقدمة، يرغب الباحث في حساب “الدرجة المتوقعة” لعبارة استبيان معينة عبر دمج التوزيع التكراري للاستجابات بدلاً من الاكتفاء بالوسيط أو المتوسط الرتبي البسيط.

لنأخذ استبياناً يقيس مستوى الاحتراق النفسي الوظيفي لدى الأطباء، حيث تتراوح الإجابات من (1 = أعارض بشدة) إلى (5 = أوافق بشدة)، وسجلت النسب الاحتمالية التالية:

scale_points <- 1:5
# نسب الاستجابات: 10%، 15%، 20%، 35%، 20%
response_probs <- c(0.10, 0.15, 0.20, 0.35, 0.20)

# حساب الدرجة المتوقعة لعبارة مقياس الاحتراق النفسي
expected_score <- weighted.mean(scale_points, response_probs)
print(paste("الدرجة النفسية المتوقعة على المقياس:", expected_score))

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

9.3 اتخاذ القرار السلوكي ونظرية المنفعة المتوقعة (Expected Utility)

تعتبر نظرية المنفعة المتوقعة (Expected Utility Theory) التي طورها فون نيومان ومورغنشتيرن، وتلتها التعديلات السلوكية لدانيال كانمان وآموس تفيرسكي في نظرية التوقع (Prospect Theory)، الأساس الأكاديمي لدراسة سلوك المخاطرة وصنع القرار الاقتصادي والنفسي. وتفترض النظرية أن الأفراد لا يتخذون قراراتهم بناءً على القيمة المالية المتوقعة المجردة E(X)، بل بناءً على المنفعة النفسية الذاتية المتوقعة E[U(X)]، حيث تمثل U(x) دالة المنفعة النفسية المقعرة للشخص المتجنب للمخاطر (Risk-Averse).

لنمذجة ذلك برمجياً في R، سنفترض مقامرة مالية يواجه فيها الشخص خيارين: الفوز بمبلغ 10,000 دولار باحتمال 0.30، أو الفوز بمبلغ 1,000 دولار باحتمال 0.70. لنفترض أن دالة المنفعة النفسية للمشارك هي دالة الجذر التربيعي: U(x) = √x:

# المخرجات المالية والاحتمالات المقترنة
payouts <- c(10000, 1000)
pay_probs <- c(0.30, 0.70)

# 1. حساب القيمة المالية النقدية المتوقعة E(X)
expected_monetary_value <- sum(payouts * pay_probs)

# 2. تعريف دالة المنفعة السلوكية وحساب المنفعة المتوقعة E[U(X)]
utility_func <- function(x) sqrt(x)
expected_utility <- sum(utility_func(payouts) * pay_probs)

# 3. حساب المعادل اليقيني (Certainty Equivalent: CE = U^(-1)(E[U]))
certainty_equivalent <- (expected_utility)^2

cat("القيمة المالية المتوقعة:", expected_monetary_value, "$n")
cat("المنفعة النفسية المتوقعة:", expected_utility, "n")
cat("المعادل اليقيني السلوكي:", certainty_equivalent, "$n")

تُظهر النتائج أن القيمة المالية المتوقعة للمقامرة هي 3,700 دولار، ولكن المنفعة النفسية الذاتية المتوقعة هي 52.14 وحدة منفعة، وهو ما يقابل “معادلاً يقينياً” مقداره 2,718.73 دولار. يوضح هذا الفارق الجوهري (حوالي 981 دولاراً) ما يُعرف بـ “علاوة المخاطرة” (Risk Premium)؛ أي أن الفرد مستعد نفسياً للتنازل عن مبلغ يصل إلى 981 دولاراً مقابل الحصول على مبلغ مضمون بدلاً من الدخول في مقامرة غير مؤكدة، وهو تطبيق كلاسيكي يوضح كيف تُستخدم القيمة المتوقعة في نمذجة السلوك الإنساني في لغة R.

10. التعامل مع البيانات المفقودة والحالات الخاصة في R

10.1 معالجة القيم المفقودة (NA Values)

في التطبيقات الواقعية والميدانية، نادراً ما تأتي البيانات مكتملة ونظيفة تماماً؛ إذ تتكرر مشكلة وجود القيم المفقودة المرموز لها في R بـ NA سواء في متجه القيم أو في متجه الاحتمالات. ويؤدي تمرير أي قيمة مفقودة إلى الدالتين sum() أو المعامل %*% دون معالجة مسبقة إلى انتشار القيمة المفقودة وإرجاع NA كنتيجة نهائية للحساب بأكمله.

إذا استخدمنا الدالة weighted.mean(vals, probs, na.rm = TRUE)، فإنها تتعامل مع الأمر بحذف الأزواج التي تحتوي على NA وتقوم تلقائياً بإعادة تقسيم الأوزان المتبقية على مجموعها الجديد لضمان بقاء مجموع الاحتمالات مساوياً للواحد الصحيح. أما إذا أردنا استخدام الطرق المتجهية الصارمة، فيتعين علينا إجراء تنظيف استباقي للبيانات باستخدام الدالة complete.cases() أو الدوال المنطقية للتصفية:

vals_na <- c(10, 20, NA, 40)
probs_na <- c(0.1, 0.4, 0.3, 0.2)

# استخراج الحالات المكتملة لكلا المتجهين
valid_idx <- complete.cases(vals_na, probs_na)
clean_vals <- vals_na[valid_idx]
clean_probs <- probs_na[valid_idx]

# إعادة معايرة الاحتمالات (Normalization) لضمان أن المجموع = 1
clean_probs <- clean_probs / sum(clean_probs)

# حساب القيمة المتوقعة النظيفة
clean_ev <- sum(clean_vals * clean_probs)
print(clean_ev)

10.2 التعامل مع التوزيعات المشروطة (Conditional Expectation)

تُعد القيمة المتوقعة المشروطة (Conditional Expectation)، والتي يُرمز لها رياضياً بـ E(X | A) أو E(X | X > c)، من المفاهيم المتقدمة الحيوية في التحليل الإحصائي، وتُعنى بحساب القيمة المتوقعة للمتغير العشوائي في ظل تحقق شرط أو وقوع حدث مقيد محدد. تنص النظرية على إعادة تعريف فضاء الاحتمال بحيث يتم حصر الحساب في القيم التي تستوفي الشرط فقط، مع إعادة قسمة احتمالاتها على الاحتمال الكلي لتحقق ذلك الشرط P(A):

E(X | X > c) = Σ [x · P(X = x)] / P(X > c) لجميع x > c

في لغة R، يمكن تنفيذ هذا الحساب المشروط بمنتهى القوة والسرعة باستخدام التصفية المنطقية (Logical Subsetting):

vals <- c(0, 1, 2, 3, 4)
probs <- c(0.18, 0.34, 0.35, 0.11, 0.02)

# شرط الاهتمام: حساب القيمة المتوقعة بشرط أن يسجل الفريق هدفاً واحداً على الأقل (X >= 1)
condition <- vals >= 1
cond_vals <- vals[condition]
cond_probs <- probs[condition]

# إعادة معايرة الاحتمالات المشروطة بالقسمة على مجموع احتمالات الشرط
cond_probs_normalized <- cond_probs / sum(cond_probs)

# حساب القيمة المتوقعة المشروطة E(X | X >= 1)
conditional_ev <- sum(cond_vals * cond_probs_normalized)
print(paste("القيمة المتوقعة المشروطة للأهداف:", round(conditional_ev, 3)))

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

10.3 التحقق من صحة النماذج اللانهائية وتوزيعات الذيل الثقيل

من الضروري للباحث الإحصائي الانتباه إلى أن بعض التوزيعات الاحتمالية النظرية لا تمتلك قيمة متوقعة محددة بالمعنى الرياضي التقليدي؛ بسبب ظاهرة تباعد التكامل (Divergence) أو ما يُعرف بـ “التوزيعات ذات الذيول الثقيلة” (Heavy-Tailed Distributions). ويأتي توزيع كوشي (Cauchy Distribution) وتوزيعات باريتو (Pareto Distribution) عندما يكون معامل الشكل α ≤ 1 كأبرز الأمثلة الكلاسيكية على هذه الظاهرة الرياضية.

إذا حاول الباحث تمرير دالة كثافة توزيع كوشي إلى دالة integrate() في R لحساب القيمة المتوقعة، فستصدر بيئة R تحذيراً صريحاً يشير إلى تباعد التكامل أو عدم استقراره العددي:

# محاولة مكاملة توزيع كوشي
tryCatch({
  integrate(function(x) x * dcauchy(x), lower = -Inf, upper = Inf)
}, error = function(e) {
  print(paste("فشل حساب القيمة المتوقعة رياضياً:", e$message))
})

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

11. التصور البياني للتوزيع الاحتمالي والقيمة المتوقعة باستخدام ggplot2

11.1 رسم مخطط الأعمدة الاحتمالي وإضافة خط القيمة المتوقعة

يُعد التمثيل البياني أداة لا غنى عنها لتعميق الفهم البصري للتوزيع الاحتمالي وموقع القيمة المتوقعة داخله. توفر حزمة ggplot2، المبنية على فلسفة “قواعد بناء الرسوم البيانية” (Grammar of Graphics)، إمكانيات فائقة لتصميم مخططات إحصائية احترافية متوافقة تماماً مع معايير النشر في المجلات العلمية المحكمة مثل معايير الجمعية الأمريكية لعلم النفس (APA Style).

لبناء المخطط البياني المتكامل، نقوم بتنظيم البيانات في إطار بيانات (Data Frame)، واستخدام دالة geom_col() لرسم الكتل الاحتمالية، متبوعة بإضافة خط عمودي متقطع باستخدام geom_vline() لتمييز موقع القيمة المتوقعة بدقة:

# استدعاء الحزم المطلوبة
library(ggplot2)

# إنشاء إطار البيانات
df <- data.frame(
  Goals = c(0, 1, 2, 3, 4),
  Probability = c(0.18, 0.34, 0.35, 0.11, 0.02)
)

# حساب القيمة المتوقعة
ev <- sum(df$Goals * df$Probability)

# بناء الرسم البياني الاحترافي
p <- ggplot(df, aes(x = factor(Goals), y = Probability)) +
  geom_col(fill = "#2c3e50", width = 0.6, alpha = 0.85) +
  geom_vline(xintercept = ev + 1, color = "#e74c3c", linetype = "dashed", size = 1.2) +
  annotate("text", x = ev + 1.1, y = 0.30, label = paste("القيمة المتوقعة =", ev),
           color = "#e74c3c", fontface = "bold", hjust = 0) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1)), limits = c(0, 0.4)) +
  labs(
    title = "التوزيع الاحتمالي لعدد الأهداف وموقع القيمة المتوقعة",
    subtitle = "تمثيل بياني لمركز الثقل الإحصائي للتوزيع المنفصل",
    x = "عدد الأهداف المسجلة (X)",
    y = "الاحتمال النظري P(X)"
  ) +
  theme_classic(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray30"),
    axis.title = element_text(face = "bold")
  )

# عرض المخطط البياني
print(p)

11.2 التمثيل البصري لمفهوم مركز الثقل الإحصائي

يوضح المخطط البياني الناتج بجلاء كيف تستقر القيمة المتوقعة 1.45 كنقطة ارتكاز هندسية؛ حيث تقع في المنتصف التوازني بين الكتل الاحتمالية الموزعة على جانبيها. وتُظهر دالة annotate() النص التوضيحي المباشر فوق الخط العمودي لربط المفاهيم النظرية بالشكل البصري مباشرة للجمهور المتلقي.

لتصدير الرسوم البيانية بدقة فائقة وبصيغ صالحة للطباعة والنشر الأكاديمي بجودة 300 نقطة لكل بوصة (DPI)، يُنصح باستخدام دالة ggsave() المتطورة وتحديد الأبعاد بدقة:

# حفظ الشكل البياني بجودة طباعة فائقة للنشر العلمي
ggsave("expected_value_plot.png", plot = p, width = 8, height = 5, dpi = 300)

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

12.1 أخطاء مطابقة الأطوال وتطبيع الاحتمالات

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

  • تجاهل اختلاف أطوال المتجهات وتفعيل قاعدة التدوير: إذا تم إدخال 5 قيم مع 4 احتمالات فقط، تقوم لغة R بتكرار العنصر الأول من الاحتمالات تلقائياً لإكمال عملية الضرب vals * probs دون إيقاف التنفيذ، مما يفسد الحساب الرياضي تماماً.
  • إغفال شرط اكتمال المجموع الاحتمالي: استخدام الدالة sum(vals * probs) في حين أن مجموع الاحتمالات لا يساوي 1 (مثلاً كان المجموع 0.80 أو 1.25)؛ حيث تفترض هذه الطريقة ضمنياً أن المتجه مقسم مسبقاً على الواحد الصحيح، مما يعطي متوسطاً مشوهاً غير معاير.
  • الخلط المفاهيمي بين القيمة المتوقعة والوسيط أو المنوال: القيمة المتوقعة حساسة للغاية للقيم المتطرفة (Outliers)، في حين أن الوسيط (Median) لا يتأثر بها، والمنوال (Mode) يمثل فقط القيمة الأكثر تكراراً أو الأعلى احتمالاً. ويجب التمييز الدقيق بين هذه المؤشرات وفق شكل التوزيع الإحصائي.

12.2 كتابة دالة مخصصة وقوية (Robust Custom Function)

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

فيما يلي الشفرة البرمجية الشاملة للدالة المخصصة والموثقة calculate_expected_value():

#' حساب القيمة المتوقعة والمؤشرات التوزيعية في لغة R
#' @param x متجه القيم الرقمية للمتغير العشوائي
#' @param p متجه الاحتمالات المناظرة
#' @param tolerance نسبة التسامح المسموحة في فحص مجموع الاحتمالات
#' @return قائمة تحتوي على القيمة المتوقعة والتباين والانحراف المعياري
calculate_expected_value <- function(x, p, tolerance = 1e-6) {
  # 1. التحقق من النوع الرقمي للمدخلات
  if (!is.numeric(x) || !is.numeric(p)) {
    stop("خطأ: يجب أن تكون المدخلات (x و p) متجهات رقمية فقط.")
  }

  # 2. معالجة القيم المفقودة
  valid_cases <- complete.cases(x, p)
  x <- x[valid_cases]
  p <- p[valid_cases]

  # 3. التحقق من تطابق الأطوال
  if (length(x) != length(p)) {
    stop("خطأ حرج: طول متجه القيم x لا يتطابق مع طول متجه الاحتمالات p.")
  }

  # 4. التحقق من شروط الاحتمالات (عدم السلبية)
  if (any(p < 0)) {
    stop("خطأ إحصائي: يحتوي متجه الاحتمالات على قيم سالبة غير جائزة.")
  }

  # 5. التحقق من مجموع الاحتمالات وإعادة المعايرة التلقائية إن لزم
  sum_p <- sum(p)
  if (abs(sum_p - 1) > tolerance) {
    warning("تنبيه: مجموع الاحتمالات لا يساوي 1 تماماً. جاري إعادة المعايرة التلقائية (Normalization)...")
    p <- p / sum_p
  }

  # 6. الحسابات الإحصائية الدقيقة
  ev <- sum(x * p)
  var_val <- sum(((x - ev)^2) * p)
  sd_val <- sqrt(var_val)

  # 7. إرجاع النتائج في كائن منظم من الفئة list
  results <- list(
    expected_value = ev,
    variance = var_val,
    sd = sd_val,
    num_observations = length(x)
  )
  class(results) <- "expected_value_model"
  return(results)
}

لتجربة هذه الدالة القوية في ظل وجود أخطاء في البيانات المجمعة (مثل عدم اكتمال المجموع):

# تجربة الدالة مع أوزان غير معايرة
sample_vals <- c(10, 20, 30, 40)
sample_weights <- c(1, 3, 4, 2) # المجموع = 10

res_model <- calculate_expected_value(sample_vals, sample_weights)
print(res_model)

تُظهر المخرجات استجابة الدالة عبر إصدار تنبيه معايرة دقيق وإرجاع القيمة المتوقعة 27، والتباين 81، والانحراف المعياري 9، مما يوفر بيئة برمجية متكاملة وآمنة بنسبة 100% للتطبيقات الأكاديمية والعملية.

خاتمة شاملة (Conclusion)

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

من الناحية البرمجية، تتيح لغة R خيارات متعددة تتراوح بين بساطة ومرونة الدالة sum() المباشرة، وأمان وموثوقية دالة weighted.mean() في التعامل مع الأوزان والبيانات الناقصة، والسرعة الخارقة للضرب المصفوفي %*% في البيئات الحسابية الضخمة، وصولاً إلى التكامل العددي التكيفي عبر integrate() للمتغيرات المستمرة. ومن خلال دمج أفضل الممارسات البرمجية، ومعالجة القيم المفقودة، واستخدام التصور البياني الجذاب عبر ggplot2، يمتلك الباحث الآن الأدوات الكاملة لبناء نماذج إحصائية وسلوكية دقيقة وقابلة لإعادة الإنتاج بكفاءة واحترافية متناهية.

المراجع (References)

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

looti, M. (2026, أغسطس 29). كيفية حساب القيمة المتوقعة في لغة R (مع أمثلة). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-calculate-expected-value-in-r-with-examples/
looti, Mohammed. “كيفية حساب القيمة المتوقعة في لغة R (مع أمثلة).” عرب سايكلوجي, 29 أغسطس 2026, https://arabpsychology.com/statistics/how-to-calculate-expected-value-in-r-with-examples/.
looti, Mohammed. “كيفية حساب القيمة المتوقعة في لغة R (مع أمثلة).” عرب سايكلوجي. أغسطس 29, 2026. https://arabpsychology.com/statistics/how-to-calculate-expected-value-in-r-with-examples/.