التحليل الإحصائي, لغة R, مناهج البحث النفسي

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


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

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

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

1. المدخل المفاهيمي: ماهية المتوسط المقتطع (Trimmed Mean) وأهميته الإحصائية

1.1 تعريف المتوسط المقتطع ومبدأ عمله الرياضي

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

تعتمد آلية الاقتطاع على تحديد ما يُعرف بـ “نسبة الاقتطاع” (Trimming Fraction)، والتي يُرمز لها عادة بالرمز الإغريقي ألفا ($\alpha$) أو الحرف ($g$). يتم تقسيم هذه النسبة بالتساوي على طرفي التوزيع؛ فإذا اختار الباحث مثلاً نسبة اقتطاع إجمالية قدرها 20%، فهذا يعني حذف أدنى 10% من القيم وحذف أعلى 10% من القيم، ثم احتساب المتوسط للمشاهدات المتبقية التي تمثل 80% من قوام العينة المركزية. وتجدر الإشارة إلى أن الأدبيات الإحصائية تميز اصطلاحياً بين الإشارة إلى نسبة الاقتطاع للطرف الواحد أو للطرفين معاً؛ ففي لغة R والعديد من المراجع الحديثة مثل مؤلفات راند ويلكوكس (Rand Wilcox)، يشير المعامل الممرر إلى نسبة الاقتطاع من كل طرف على حدة، وبالتالي فإن تمرير القيمة 0.1 يعني إزالة 10% من القاع و10% من القمة (أي اقتطاع إجمالي بنسبة 20%).

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

تتحدد الصيغة الرياضية العامة للمتوسط المقتطع لعينة مرتبة تصاعدياً تتألف من $n$ من المشاهدات: $x_{(1)} le x_{(2)} le dots le x_{(n)}$، وبنسبة اقتطاع $\alpha$ من كل طرف، على النحو التالي:

أولاً، يتم حساب عدد المشاهدات الواجب استبعادها من كل طرف، وهو العدد الصحيح $k = \lfloor n \alpha \rfloor$.

ثانياً، تُطبق المعادلة الحسابية للقيم المتبقية المحصورة بين الرتبة $k+1$ والرتبة $n-k$:

$$\bar{x}_{\alpha} = \frac{1}{n – 2k} \sum_{i=k+1}^{n-k} x_{(i)}$$

حيث يمثل $n – 2k$ حجم العينة الفعال المتبقي بعد عملية الاستبعاد الثنائي، وتوفر هذه الصيغة مرونة فائقة تسمح بالتدرج من المتوسط الحسابي التام عندما تكون $\alpha = 0$، وصولاً إلى مقاربة الوسيط الإحصائي عندما تقترب $\alpha$ من 0.5 (أو 50%).

1.2 أسباب اللجوء إلى المتوسط المقتطع كأداة إحصائية متينة (Robust Statistic)

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

علاوة على ذلك، تفترض النماذج الإحصائية البارامترية الكلاسيكية أن البيانات تتبع التوزيع الطبيعي (Gaussian Normal Distribution). بيد أن التوزيعات التجريبية الواقعية تنتهك هذا الافتراض بانتظام؛ حيث تظهر التواءات موجبة أو سالبة وتفرطحات حادة مصحوبة بذيول ثقيلة (Heavy-tailed Distributions). في هذه البيئات غير المثالية، يفقد المتوسط الحسابي كفاءته الإحصائية بشكل دراماتيكي، ويتضخم خطؤه المعياري (Standard Error)، مما يترتب عليه اتساع غير مبرر في فترات الثقة وضعف شديد في القدرة على اكتشاف التأثيرات الحقيقية عبر اختبارات الفرضيات.

يحقق المتوسط المقتطع توازناً منهجياً عبقرياً وفريداً بين مقاييس النزعة المركزية المختلفة؛ فبينما يتمتع المتوسط الحسابي بكفاءة مطلقة تحت شروط التوزيع الطبيعي المثالي بنسبة 100% ولكنه ينهار تماماً عند أدنى تلوث، وبينما يتميز الوسيط بمقاومة قصوى للقيم الشاذة ولكنه يعاني من انخفاض الكفاءة الإحصائية (تصل كفاءته النسبية إلى نحو 64% فقط في التوزيع الطبيعي)، يقف المتوسط المقتطع (بنسبة اقتطاع تتراوح بين 10% إلى 20%) ليمنح الباحث كفاءة تقارب 95% تحت التوزيع الطبيعي، مع احتفاظه بمناعة فائقة ومقاومة صلبة في مواجهة التوزيعات الملوثة وذات الذيول الثقيلة، مما يجعله الخيار الأمثل للتحليلات الإحصائية المتينة.

1.3 المصطلحات والمفاهيم الأساسية المرتبطة باقتطاع العينات

لفهم الآليات العميقة للمتوسط المقتطع، يجب الإحاطة بمجموعة من المفاهيم التأسيسية في الإحصاء الرياضي، ويأتي في مقدمتها مفهوم “نقطة الانهيار” (Breakdown Point). تُعرف نقطة الانهيار بأنها أصغر نسبة مئوية من البيانات الملوثة أو الشاذة التي يمكن أن تجعل المقياس الإحصائي ينهار تماماً، أي يتجه نحو المالانهاية الموجبة أو السالبة أو يعطي قيماً لا معنى لها. تبلغ نقطة انهيار المتوسط الحسابي التقليدي $1/n$ (والتي تقترب من 0% في العينات الكبيرة)، مما يعني أن قيمة شاذة واحدة كفيلة بتدميره. في المقابل، تبلغ نقطة انهيار الوسيط 50%، بينما تعادل نقطة انهيار المتوسط المقتطع نسبة الاقتطاع $\alpha$ المطبقة من كل جانب؛ فالمتوسط المقتطع بنسبة 20% يمتلك نقطة انهيار تبلغ 20%، وهي حصانة مرتفعة تكفي لحماية التحليل من معظم أنماط التلوث الشائعة في الأبحاث الميدانية.

تتعدد نسب الاقتطاع المعيارية المعتمدة في الأدبيات الإحصائية الرصينة؛ وتبرز ثلاث نسب رئيسية تحظى بإجماع تطبيقي واسع:

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

كما ينبغي التمييز المنهجي بين “الاقتطاع المتماثل” (Symmetric Trimming) و”الاقتطاع غير المتماثل” (Asymmetric Trimming). في الاقتطاع المتماثل، وهو النمط القياسي والمعياري المطبق في غالبية التطبيقات، يتم حذف نفس النسبة تماماً من الطرفين الأدنى والأعلى للتوزيع للحفاظ على الاتساق النظري ومراعاة مركزية البيانات. أما الاقتطاع غير المتماثل، فيلجأ إليه الباحثون في سياقات خاصة جداً تكون فيها البيانات مقيدة هيكلياً من أحد الأطراف (Bounded from below) مثل أزمنة رد الفعل التي تمتلك حداً أدنى فسيولوجياً صارماً وتتلاشى نحو التواء لا نهائي في الطرف الأعلى، حيث يقتطع الباحث نسبة أكبر من الذيل الطويل لتصحيح الالتواء واستعادة توازن التقدير.

2. الأسس الرياضية والنظرية لاقتطاع البيانات الإحصائية

2.1 الخطوات الحسابية اليدوية لاستخراج المتوسط المقتطع

لفهم ما تقوم به البرمجيات الإحصائية خلف الكواليس، من المفيد تتبع الخطوات الخوارزمية والحسابية اليدوية المتبعة لاستخراج المتوسط المقتطع من عينة تجريبية محددة. تبدأ العملية بترتيب مصفوفة أو متجه المشاهدات الخام تصاعدياً من أدنى قيمة إلى أعلى قيمة. لنفترض أن لدينا عينة تتكون من $n = 10$ مشاهدات: ${12, 14, 15, 16, 18, 19, 21, 23, 27, 85}$. نلاحظ هنا بوضوح أن القيمة الأخيرة (85) تمثل قيمة شاذة للغاية مقارنة ببقية قوام العينة.

تتمثل الخطوة الثانية في تحديد عدد المشاهدات المراد حذفها من كل طرف، بناءً على حجم العينة $n$ ونسبة الاقتطاع المرغوبة $\alpha$. فإذا حددنا نسبة اقتطاع $\alpha = 0.10$ (أي 10% من كل طرف)، نقوم بحساب حاصل الضرب: $k = n \times \alpha = 10 \times 0.10 = 1$. هذا يعني حذف أدنى مشاهدة واحدة ($x_{(1)} = 12$) وحذف أعلى مشاهدة واحدة ($x_{(10)} = 85$).

تثور هنا مسألة معالجة النواتج غير الصحيحة للضرب؛ فماذا يحدث إذا كان حجم العينة $n = 12$ ونسبة الاقتطاع $\alpha = 0.10$؟ يكون الناتج $k = 1.2$. في الإحصاء التطبيقي المعتمد في معظم خوارزميات الحوسبة القياسية (بما في ذلك لغة R الأساسية)، يتم اعتماد دالة الجزء الصحيح الأدنى أو دالة التقريب لأسفل $\lfloor n \alpha \rfloor$ (Floor Function)، مما يجعل $k = 1$. ومع ذلك، توجد بعض المقاربات النظرية البديلة المتقدمة التي تلجأ إلى “الاقتطاع الكسري الموزون” (Fractional Trimming)، حيث يتم إعطاء المشاهدة الحدودية وزناً جزئياً يتناسب مع الكسر المتبقي، إلا أن خوارزمية الحذف المباشر بعد التقريب لأسفل تظل هي المنهجية المعتمدة لسهولتها واستقرارها البرمجي.

تتمثل الخطوة الثالثة والنهائية في جمع المشاهدات المتبقية وقسمتها على عددها الفعلي. في مثالنا الأول، بعد حذف القيمتين (12 و 85)، تصبح المشاهدات المتبقية ثماني قيم: ${14, 15, 16, 18, 19, 21, 23, 27}$. يبلغ مجموع هذه القيم 153. وبقسمة المجموع على حجم العينة الفعال الجديد ($n – 2k = 10 – 2 = 8$):

$$\bar{x}_{0.10} = \frac{153}{8} = 19.125$$

بينما لو حسبنا المتوسط الحسابي التقليدي لنفس العينة دون اقتطاع، لوجدنا أنه يساوي $250 / 10 = 25.0$، وهو انحراف كبير يعكس كيف استطاعت القيمة الشاذة سحب المتوسط بعيداً، بينما قدم المتوسط المقتطع قيمة (19.125) تقع تماماً في قلب التركيز البصري والحسابي للبيانات.

2.2 الخصائص الرياضية ومؤشرات المتانة (Robustness Properties)

يتميز المتوسط المقتطع بخصائص رياضية متقدمة تجعله محط اهتمام منظري الإحصاء الرياضي. عند دراسة سلوك المتوسط المقتطع كدالة تابعة لنسبة الاقتطاع ألفا $\alpha in [0, 0.5]$، نجد أنه يمثل دالة متصلة وناعمة تنتقل بسلاسة عبر فضاء العينة، وتوفر تحكماً دقيقاً في درجة الحصانة الإحصائية المطلوبة تبعاً لمستوى التلوث المتوقع في المجتمع الإحصائي المدروس.

تعتبر “دالة التأثير” (Influence Function – IF)، التي طورها الإحصائي الفذ فرانك هامبل، الأداة النظرية المركزية لقياس مدى حساسية أي مقياس إحصائي لإضافة كمية متناهية في الصغر من التلوث عند نقطة معينة في التوزيع. تكون دالة التأثير للمتوسط الحسابي التقليدي غير محدودة (Unbounded)، بمعنى أن إدخال قيمة متطرفة متزايدة نحو المالانهاية يؤدي إلى استجابة خطية لا نهائية في قيمة المتوسط. في المقابل، تتميز دالة التأثير للمتوسط المقتطع بأنها محدودة تماماً (Bounded)؛ حيث تظل دالة التأثير ثابتة عند الصفر لأي قيمة شاذة تقع خارج نطاق حدود الاقتطاع، مما يثبت رياضياً أن القيم الشاذة المتطرفة مهما بلغت ضخامتها لن يكون لها أي تأثير إضافي على قيمة التقدير المحسوبة.

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

$$SE(\bar{x}_{\alpha}) = \frac{s_w}{(1 – 2\alpha) \sqrt{n}}$$

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

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

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

تتسم البيانات المجمعة في حقول علم النفس التجريبي، والعلوم العصبية الإدراكية، والأبحاث السلوكية بخصائص بنيوية تجعل تطبيق الإحصاء الكلاسيكي محفوفاً بالمخاطر المنهجية. من أبرز الأمثلة على ذلك بيانات “أزمنة الاستجابة أو رد الفعل” (Reaction Times – RTs) في التجارب النفسية المعرفية؛ حيث يُطلب من المشارك الضغط على زر استجابة لمحفز بصري أو سمعي. تتبع هذه الأزمنة حتماً توزيعات ملتوية التواءً إيجابياً حاداً (Positively Skewed) وتوزيعات من نمط “إكس-غاوسي” (Ex-Gaussian) أو “ويبل” (Weibull)، حيث توجد دائماً ذيول طويلة ناتجة عن حالات تشتت الانتباه المؤقت أو السهو أو التردد لدى المشاركين.

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

  • تضخم معدل الخطأ من النوع الأول (Type I Error Rate Inflation): في بعض السيناريوهات المتعلقة بعدم تجانس التباين بين المجموعات، قد تؤدي القيم الشاذة إلى جعل الاختبارات الكلاسيكية مفرطة في التساهل، مما يقود الباحثين إلى استنتاج وجود فروق وهمية لا وجود لها في الواقع.
  • التدهور الحاد في القوة الإحصائية (Dramatic Loss of Statistical Power): يؤدي انتفاخ الخطأ المعياري الكلاسيكي بفعل الذيول الثقيلة إلى العجز عن رفض الفرضية الصفرية الخاطئة، مما يسبب الوقوع في الخطأ من النوع الثاني (Type II Error) وضياع تأثيرات تجريبية حقيقية بذل الباحثون جهداً كبيراً لاختبارها.

3.2 توصيات رواد الإحصاء النفسي الكلاسيكي والحديث

قاد عالم الإحصاء النفسي البارز البروفيسور راند ويلكوكس (Rand R. Wilcox) ثورة منهجية كبرى على مدار العقود الثلاثة الماضية، مؤكداً عبر مئات الدراسات المنشورة والمحاكاة المكثفة بطريقة مونت كارلو (Monte Carlo Simulations) أن التحليلات البارامترية القياسية (مثل اختبار t وتحليل التباين ANOVA) تفشل فشلاً ذريعاً في حماية الباحثين السلوكيين عند وجود أدنى انحراف عن التوزيع الطبيعي. ودعا ويلكوكس بإلحاح إلى إحلال المتوسطات المقتطعة بديلاً قياسياً لمقاييس الموضع في النماذج الخطية العامة.

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

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

4. مقارنة منهجية: المتوسط الحسابي، الوسيط، والمتوسط المقتطع

4.1 المقارنة من حيث نقطة الانهيار والكفاءة الإحصائية

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

يوضح التحليل الإحصائي المقارن المعالم التالية:

  • المتوسط الحسابي (Mean): يمتلك نقطة انهيار صفرية ($0%$)، مما يجعله هشاً للغاية أمام القيم الشاذة. ومع ذلك، فإنه يحقق كفاءة إحصائية كاملة بنسبة 100% تحت التوزيع الطبيعي المثالي النظري. ولكن بمجرد تلوث هذا التوزيع الطبيعي بنسبة ضئيلة جداً (مثل 1% إلى 5% من المشاهدات الشاذة أو ما يعرف بنموذج Contaminated Normal Distribution)، تنهار كفاءته النسبية وتهبط إلى مستويات متدنية جداً قد تصل إلى أقل من 30%.
  • الوسيط الإحصائي (Median): يتمتع بأعلى نقطة انهيار ممكنة لأي مقياس موضعي وهي 50%، مما يعني أنه قادر على الصمود حتى لو كان نصف العينة ملوثاً بالكامل. غير أن ثمن هذه المتانة الفائقة هو التضحية بالكفاءة الإحصائية؛ حيث تبلغ كفاءته النسبية تحت التوزيع الطبيعي نحو 63.7% فقط، مما يعني الحاجة إلى عينات أكبر بكثير للحصول على نفس الدقة التقديرية التي يوفرها المتوسط.
  • المتوسط المقتطع (Trimmed Mean – بنسبة 20% مثلاً): يمتلك نقطة انهيار متينة تعادل 20%، وتصل كفاءته النسبية في التوزيع الطبيعي النقي إلى ما يقارب 85% إلى 90%، بينما ترتفع كفاءته لتتفوق بوضوح على كل من المتوسط الحسابي والوسيط في جميع التوزيعات الملوثة وذات الذيول الثقيلة الشائعة تجريبياً.

4.2 جدول المفاضلة التطبيقية واتخاذ القرار المنهجي

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

المعيار الإحصائي / المنهجي المتوسط الحسابي التقليدي الوسيط الإحصائي (Median) المتوسط المقتطع (20% Trimmed)
نقطة الانهيار (Breakdown Point) 0% (حساس جداً لأي قيمة شاذة) 50% (مقاومة قصوى مطلقة) 20% (مقاومة ممتازة متوازنة)
الكفاءة تحت التوزيع الطبيعي النقي 100% (المقياس الأمثل رياضياً) ~64% (منخفضة نسبياً) ~88% (عالية جداً ومقاربة للمثالية)
الكفاءة تحت الذيول الثقيلة والتلوث شديدة التدهور والانحدار متوسطة إلى مقبولة عالية جداً (المقياس الأكثر كفاءة)
الحساسية لهيكل القيم المركزية يستخدم كامل القيم الرياضية يعتمد على رتبة المشاهدات فقط يستخدم القيم الفعلية لغالبية العينة
الاستخدام الموصى به علمياً بيانات طبيعية نقية وخالية تماماً من الشذوذ بيانات رتبية أو ذات شذوذ ساحق يتجاوز 30% البيانات التجريبية والنفسية والسلوكية الميدانية

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

5. بنية واستخدام الدالة mean() الأساسية في لغة R

5.1 التشريح البرمجي لمعاملات الدالة mean()

توفر بيئة لغة R الدالة القياسية mean() المدمجة في حزمة base الأساسية، والتي تم تصميمها بمرونة فائقة لتنفيذ حسابات المتوسط البسيط والمتوسط المقتطع دون الحاجة إلى تثبيت حزم إضافية للعمليات المباشرة. يظهر التوقيع البرمجي (Function Signature) العام للدالة على النحو التالي:

mean(x, trim = 0, na.rm = FALSE, ...)

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

  • المعامل x: يمثل الكائن البرمجي المدخل الذي يحتوي على البيانات؛ ويجب أن يكون متجهاً رقمياً (Numeric Vector)، أو متجهاً منطقياً (Logical Vector حيث تُعامل TRUE كـ 1 و FALSE كـ 0)، أو كائناً زمنياً وتاريخياً معتمداً. وإذا تم تمرير مصفوفة أو إطار بيانات مباشرة دون تحديد العمود، فإن الدالة قد تعيد أخطاء أو نتائج غير متوقعة في الإصدارات الصارمة.
  • المعامل trim: هو المعامل الجوهري المسؤول عن تفعيل الاقتطاع الرياضي. يقبل هذا المعامل قيمة كسرية عائمة تقع حصرياً في المدى الرياضي المغلق بين 0 و 0.5 (أي من $0.0$ إلى $0.50$). القيمة الافتراضية هي trim = 0، والتي تعني حساب المتوسط الحسابي العادي. تشير القيمة الممررة إلى نسبة المشاهدات المراد حذفها من كل طرف من طرفي التوزيع المرتب؛ وبالتالي فإن تمرير trim = 0.1 يعني استبعاد 10% من أدنى القيم و10% من أعلى القيم (اقتطاع كلي قدره 20%). أما تمرير الحد الأقصى trim = 0.5، فإنه يحذف 50% من كل طرف، مما يؤدي خوارزمياً إلى تحويل الدالة لإنتاج الوسيط الإحصائي للعينة.
  • المعامل na.rm: متغير منطقي يتحكم في كيفية إدارة القيم المفقودة (Missing Values المصنفة كـ NA). القيمة الافتراضية هي FALSE، والتي تجعل الدالة تعيد NA فوراً إذا كان المتجه يحتوي على أي قيمة مفقودة واحدة حفاظاً على سلامة التقدير. وعند ضبطه على na.rm = TRUE، توجه الدالة مترجم R لحذف المشاهدات المفقودة أولاً قبل الشروع في تحديد العينة وحساب نسب الاقتطاع.

5.2 الآلية الداخلية لتنفيذ الاقتطاع في لغة R الأساسية (Base R)

تتبع لغة R خوارزمية صارمة ومكتوبة بلغة C المنخفضة المستوى لضمان السرعة الفائقة والدقة الحسابية عند استدعاء الدالة mean() مع تحديد المعامل trim. تتلخص هذه الآلية الداخلية في المراحل المتتابعة الآتية:

أولاً، إذا كان na.rm = TRUE، يتم تصفية المتجه واستبعاد كافة عناصر NA، ويُحدد حجم العينة الصالحة الفعالة $n = \text{length}(x)$. وإذا كان $n = 0$، تُرجع الدالة NaN.

ثانياً، إذا كانت قيمة trim > 0، تقوم الخوارزمية بفرز المتجه الصالح تصاعدياً. ثم يُحسب عدد العناصر الواجب استبعادها من كل طرف باستخدام دالة التقريب لأسفل البرمجية: k <- floor(n * trim).

ثالثاً، إذا كانت $k > 0$، يتم اقتطاع المتجه عبر استقطاع الفهرس الداخلي من $k+1$ إلى $n-k$ باستخدام التقطيع الفهرسي x[(k + 1):(n - k)]، ثم يُحسب المتوسط الحسابي البسيط للقيم المتبقية من خلال جمعها وقسمتها على $n – 2k$.

تضمن هذه الآلية التماثل العددي الصارم؛ فحتى لو كان ناتج ضرب $n \times trim$ كسرياً، فإن دالة floor تضمن استبعاد عدد متساوٍ ومحدد تماماً من المشاهدات من كلا الجانبين، مما يحول دون حدوث أي انحياز ترتيبي أو خلل في تناظر الاقتطاع الداخلي.

6. أمثلة عملية: حساب المتوسط المقتطع للمتجهات (Vectors) في R

6.1 المثال الأول: حساب المتوسط المقتطع بنسبة 10% لمتجه رقمي بسيط

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

في بيئة RStudio أو موجه أوامر R، نقوم بكتابة وتمرير الأوامر التالية:

# 1. إنشاء متجه أزمنة الاستجابة (بالمللي ثانية)
rt_data <- c(250, 265, 270, 275, 280, 290, 305, 310, 325, 680)

# 2. حساب المتوسط الحسابي التقليدي للمقارنة
mean_raw <- mean(rt_data)
print(paste("المتوسط الحسابي الخام:", mean_raw))

# 3. حساب المتوسط المقتطع بنسبة 10% من كل طرف
mean_trimmed_10 <- mean(rt_data, trim = 0.10)
print(paste("المتوسط المقتطع بنسبة 10%:", mean_trimmed_10))

عند تشغيل هذا الكود، تظهر المخرجات البرمجية كالتالي:

المتوسط الحسابي الخام يبلغ 345.0 مللي ثانية، بينما يبلغ المتوسط المقتطع بنسبة 10% 289.375 مللي ثانية.

لتفسير هذه النتيجة إحصائياً وبرمجياً: يتكون المتجه rt_data من $n = 10$ مشاهدات. عند تحديد trim = 0.10، تحسب R عدد القيم المحذوفة: $k = \lfloor 10 \times 0.10 \rfloor = 1$.
تستبعد الدالة تلقائياً أصغر قيمة وهي (250) وأكبر قيمة وهي القيمة الشاذة المتطرفة (680).
تتبقى في الحساب 8 مشاهدات محصورة في النطاق: c(265, 270, 275, 280, 290, 305, 310, 325).
مجموع هذه القيم الثماني هو 2315. وبقسمتها على 8 نحصل على: $2315 / 8 = 289.375$.

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

6.2 المثال الثاني: مقارنة تأثير نسب اقتطاع متعددة (5%، 10%، 20%)

في التحليلات المتقدمة، يُجري الباحثون فحصاً لحساسية البيانات (Sensitivity Analysis) عبر تطبيق مستويات اقتطاع متدرجة لمراقبة استقرار المقياس. سنقوم هنا بإنشاء متجه يحتوي على 20 مشاهدة تشمل تلوثاً في كلا الطرفين، ثم نطبق نسب اقتطاع متعددة (0%، 5%، 10%، 20%، وصولاً إلى الوسيط عند 50%).

ننفذ الكود التالي في R:

# 1. توليد متجه يحتوي على قيم متطرفة مزدوجة
experiment_scores <- c(5, 45, 48, 52, 53, 55, 56, 58, 60, 61, 62, 63, 65, 66, 68, 70, 72, 75, 78, 195)

# 2. حساب المتوسطات بنسب مختلفة وتخزينها في قائمة منظمة
trim_levels <- c(0.00, 0.05, 0.10, 0.20, 0.50)
results <- sapply(trim_levels, function(tr) mean(experiment_scores, trim = tr))

# 3. عرض النتائج المقارنة في جدول منسق
comparison_df <- data.frame(
  نسبة_الاقتطاع = paste0(trim_levels * 100, "%"),
  القيم_المحذوفة_من_كل_طرف = floor(length(experiment_scores) * trim_levels),
  قيمة_المتوسط = results
)
print(comparison_df)

يُظهر استعراض الجدول الناتج الملاحظات التحليلية الهامة التالية:

  • عند نسبة 0% (المتوسط العادي): تكون القيمة 67.35؛ حيث أدى وجود القيمة المتطرفة (195) إلى سحب المتوسط نحو الأعلى رغم وجود قيمة صغرى منخفضة (5).
  • عند نسبة 5% (trim = 0.05): يُحذف عنصر واحد من كل طرف ($k = \lfloor 20 \times 0.05 \rfloor = 1$) وهما (5 و 195). تستقر القيمة فوراً وتهبط إلى 61.38، مما يكشف الأثر الدراماتيكي لإزالة المتطرفتين المعزولين.
  • عند نسبة 10% (trim = 0.10): يُحذف عنصران من كل طرف ($k = 2$) وتصبح القيمة 61.56.
  • عند نسبة 20% (trim = 0.20): يُحذف 4 عناصر من كل طرف ($k = 4$) وتصبح القيمة 61.58.
  • عند نسبة 50% (trim = 0.50 – الوسيط): تكون القيمة 61.50.

نستخلص استنتاجاً إحصائياً بالغ الأهمية: بمجرد التخلص من القيم الشاذة الطرفية عند نسبة 5% أو 10%، تتقارب تقديرات المتوسط المقتطع (61.38، 61.56، 61.58) بصورة مذهلة مع الوسيط (61.50)، مما يؤكد استقرار التقدير ودخوله في منطقة الثبات والصلابة المنهجية (Plateau of Robust Stability).

7. أمثلة عملية: تطبيق المتوسط المقتطع على أعمدة إطارات البيانات (Data Frames)

7.1 المثال الثالث: حساب المتوسط المقتطع لعمود محدد في DataFrame

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

نقوم بتنفيذ الشفرة البرمجية التالية:

# 1. بناء إطار بيانات تجريبي
set.seed(42)
n_subjects <- 15
study_data <- data.frame(
  Subject_ID = paste0("SUBJ_", 101:115),
  Group = rep(c("Control", "Treatment"), length.out = n_subjects),
  Anxiety_Score = c(18, 22, 19, 21, 20, 23, 17, 24, 21, 20, 19, 22, 23, 21, 85), # 85 قيمة شاذة
  Memory_Retention = c(78, 82, 80, 85, 88, 79, 81, 84, 86, 83, 80, 87, 85, 82, 25) # 25 قيمة شاذة
)

# 2. حساب المتوسط المقتطع بنسبة 20% لعمود درجات القلق باستخدام معرّف العمود $
anxiety_trim20 <- mean(study_data$Anxiety_Score, trim = 0.20)
anxiety_raw <- mean(study_data$Anxiety_Score)

# 3. طباعة ومقارنة النتائج
print(paste("المتوسط الخام لدرجات القلق:", round(anxiety_raw, 2)))
print(paste("المتوسط المقتطع (20%) لدرجات القلق:", round(anxiety_trim20, 2)))

تُظهر المخرجات البرمجية أن المتوسط الخام لدرجات القلق بلغ 25.07 درجة، متأثراً بالمشارك الأخير ذي الدرجة (85). في حين استقر المتوسط المقتطع بنسبة 20% عند 21.00 درجة بالتمام والكمال. إحصائياً، وفر استدعاء study_data$Anxiety_Score مع المعامل trim = 0.20 استبعاداً متزناً لأعلى 3 درجات وأدنى 3 درجات من أصل 15 مشاركاً ($k = \lfloor 15 \times 0.20 \rfloor = 3$)، مما وفر تقديراً يعبر بدقة متناهية عن المستوى الحقيقي للقلق لدى غالبية أفراد العينة دون تزييف ناتج عن حالة متطرفة وحيدة.

7.2 المثال الرابع: تطبيق الاقتطاع عبر أعمدة متعددة باستخدام دوال apply و sapply

عند التعامل مع استبيانات واسعة تضم عشرات المقاييس الفرعية، يصبح استدعاء الدالة لكل عمود بشكل منفرد أمراً غير فعال برمجياً. توفر لغة R عائلة دوال التطبيق (Apply Family) لأتمتة حساب المتوسط المقتطع عبر جميع الأعمدة الرقمية دفعة واحدة وبأعلى كفاءة معالجة.

يوضح الكود التالي كيفية تطبيق ذلك باستخدام sapply() و apply() و lapply():

# 1. استخلاص الأعمدة الرقمية فقط من إطار البيانات
numeric_cols <- study_data[, c("Anxiety_Score", "Memory_Retention")]

# 2. استخدام sapply لحساب المتوسط المقتطع بنسبة 15% واسترجاع متجه مسمى
trimmed_summary_vector <- sapply(numeric_cols, mean, trim = 0.15)
print("--- نتائج sapply (متجه مسمى) ---")
print(trimmed_summary_vector)

# 3. استخدام lapply لاسترجاع النتائج في شكل قائمة منظمة (List)
trimmed_summary_list <- lapply(numeric_cols, mean, trim = 0.15)
print("--- نتائج lapply (قائمة) ---")
print(trimmed_summary_list)

# 4. استخدام apply على مصفوفة رقمية بتحديد البعد 2 (للأعمدة)
trimmed_matrix_summary <- apply(as.matrix(numeric_cols), 2, mean, trim = 0.15)
print("--- نتائج apply على مصفوفة ---")
print(trimmed_matrix_summary)

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

8. التعامل المنهجي مع القيم المفقودة (Missing Values – NA) أثناء الاقتطاع

8.1 أثر وجود NA على دالة mean() مع معامل trim

تمثل معالجة القيم المفقودة (Missing Data المرموز لها بـ NA في R) أحد أدق الجوانب المنهجية في الإحصاء الحوسبي. إذا احتوى متجه البيانات على قيمة مفقودة واحدة وتم استدعاء الدالة: mean(x, trim = 0.2) دون تمرير المعامل المنطقي الخاص بالحذف، فإن النتيجة الحتمية المرجعة من R ستكون NA. يعود هذا السلوك البرمجي إلى فلسفة لغة R الصارمة: لا يمكن تحديد ترتيب البيانات أو تحديد أي القيم تمثل أعلى وأدنى المشاهدات طالما أن هناك قيماً مجهولة الأصل والمقدار.

يثور هنا تساؤل نظري وإجرائي بالغ الأهمية: ما هو الترتيب الزمني لمعالجة البيانات عند دمج trim مع na.rm = TRUE؟
تقوم R أولاً باستبعاد كافة قيم NA من المتجه تماماً وتخفيض حجم العينة الكلي إلى ما يُعرف بـ “حجم العينة الفعال” ($N_{effective}$). بعد ذلك مباشرة، يتم تطبيق نسبة الاقتطاع $\alpha$ على هذا الحجم الفعال المتبقي. فإذا كان لدينا متجه يضم 20 عنصراً، من بينها 4 قيم مفقودة، فإن $N_{effective} = 16$. وعند طلب اقتطاع بنسبة 10%، يُحسب عدد العناصر المحذوفة بناءً على الـ 16 مشاهدة الصالحة: $k = \lfloor 16 \times 0.10 \rfloor = 1$ من كل جانب، وليس بناءً على الـ 20 الأصلية.

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

8.2 المثال الخامس: استبعاد القيم المفقودة عملياً بطريقة صحيحة

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

نقوم بتنفيذ الكود التالي في R:

# 1. إنشاء متجه قياسات يحتوي على قيم شاذة وقيم مفقودة متعددة
raw_sensor_data <- c(10.2, 11.5, NA, 12.1, 10.8, 95.0, 11.9, NA, 11.2, 10.5, 12.4, 2.1, NA, 11.8)

# 2. محاولة الحساب الخاطئ (ستعيد NA)
wrong_calc <- mean(raw_sensor_data, trim = 0.1)
print(paste("نتيجة الحساب بدون na.rm:", wrong_calc))

# 3. الحساب الصحيح المكتمل باستبعاد القيم المفقودة
correct_trim_mean <- mean(raw_sensor_data, trim = 0.10, na.rm = TRUE)
print(paste("المتوسط المقتطع الصحيح (10%):", round(correct_trim_mean, 3)))

# 4. كود برمجي تشخيصي للتحقق من العمليات الحسابية الداخلية
valid_data <- raw_sensor_data[!is.na(raw_sensor_data)] # استخراج الصالح
n_eff <- length(valid_data) # حجم العينة الفعال
k_cut <- floor(n_eff * 0.10) # عدد العناصر المحذوفة من كل طرف
sorted_valid <- sort(valid_data)
final_included <- sorted_valid[(k_cut + 1):(n_eff - k_cut)]

# طباعة التقرير التشخيصي
cat("n--- التقرير التشخيصي لعملية الاقتطاع ---n",
    "الحجم الأصلي الكلي:", length(raw_sensor_data), "n",
    "عدد القيم المفقودة:", sum(is.na(raw_sensor_data)), "n",
    "حجم العينة الفعال (N_eff):", n_eff, "n",
    "عدد القيم المحذوفة من كل طرف:", k_cut, "n",
    "القيم الصالحة المعتمدة فعلياً في الحساب:", paste(final_included, collapse = ", "), "n",
    "المتوسط المحسوب يدوياً:", mean(final_included), "n")

يوفر هذا الكود التشخيصي شفافية مطلقة؛ حيث يثبت للباحث أن $N_{effective} = 11$، وأن $k = \lfloor 11 \times 0.10 \rfloor = 1$. تم استبعاد أدنى قيمة صالحة (2.1) وأعلى قيمة صالحة (95.0)، واعتمد الحساب على القيم التسع المتبقية التي تعكس بدقة استقرار قراءات المستشعر السلوكي.

9. حساب المتوسط المقتطع عبر المجموعات الفرعية باستخدام منظومة Tidyverse

9.1 المثال السادس: الاقتطاع الجماعي باستخدام dplyr (group_by و summarize)

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

سنقوم بإنشاء إطار بيانات لتجربة علاجية نفسية تقارن بين “مجموعة العلاج السلوكي المعرفي” (CBT) و”المجموعة الضابطة” (Control)، مع حساب جدول إحصائي ملخص متكامل باستخدام عامل الأنابيب الحديث في R (الرمز |> أو %>%):

library(dplyr)

# 1. إنشاء بيانات تجريبية للمجموعتين مع وجود قيم شاذة واقعية
set.seed(123)
clinical_trial <- data.frame(
  Condition = rep(c("Control", "CBT_Intervention"), each = 20),
  Depression_Reduction = c(
    rnorm(18, mean = 5, sd = 2), 28, -15, # المجموعة الضابطة مع قيمتين شاذتين
    rnorm(18, mean = 14, sd = 2.5), 45, 2 # مجموعة العلاج مع قيمتين شاذتين
  )
)

# 2. بناء خط أنابيب يلخص المقاييس الإحصائية المجمعة
robust_summary <- clinical_trial |>
  group_by(Condition) |>
  summarise(
    Sample_Size = n(),
    Raw_Mean = mean(Depression_Reduction, na.rm = TRUE),
    Trimmed_Mean_10 = mean(Depression_Reduction, trim = 0.10, na.rm = TRUE),
    Trimmed_Mean_20 = mean(Depression_Reduction, trim = 0.20, na.rm = TRUE),
    Median = median(Depression_Reduction, na.rm = TRUE),
    Raw_SD = sd(Depression_Reduction, na.rm = TRUE)
  ) |>
  mutate(across(where(is.numeric), ~ round(., 3)))

# 3. عرض جدول النتائج الملخص
print(as.data.frame(robust_summary))

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

9.2 الاستفادة من حزمة purrr وتطبيق وظائف الاقتطاع على هياكل معقدة

توفر حزمة purrr ضمن منظومة Tidyverse أدوات برمجية متفوقة للبرمجة الوظيفية (Functional Programming). تتيح دالة map_dbl() و map_dfr() توليد مصفوفات وجداول معقدة تختبر نطاقات واسعة من نسب الاقتطاع عبر متغيرات متعددة دون الحاجة إلى كتابة حلقات تكرارية (For loops) تقليدية بطيئة ومعقدة.

يوضح المثال التالي كيفية استخدام purrr لتطبيق متوالية ديناميكية من نسب الاقتطاع تبدأ من 0% وتتدرج بخطوات منتظمة حتى 25% على متغيرات الدراسة النفسية:

library(purrr)
library(tibble)

# 1. تحديد متوالية نسب الاقتطاع المراد فحصها
trim_sequence <- seq(from = 0.0, to = 0.25, by = 0.05)

# 2. تطبيق دالة الاقتطاع ديناميكياً باستخدام map_dbl
depression_scores <- clinical_trial$Depression_Reduction[clinical_trial$Condition == "CBT_Intervention"]

trim_curve <- tibble(
  Trim_Fraction = trim_sequence,
  Percent = paste0(trim_sequence * 100, "%"),
  Estimated_Center = map_dbl(trim_sequence, ~ mean(depression_scores, trim = .x))
)

# 3. طباعة الجدول الناتج الديناميكي
print(trim_curve)

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

10. التمثيل البصري لأثر الاقتطاع على التوزيعات الإحصائية باستخدام ggplot2

10.1 المثال السابع: رسم بياني لتحديد مناطق الاقتطاع في التوزيع التكراري

يمثل الاستكشاف البصري خطوة لا غنى عنها في الإحصاء الحديث لتعزيز الشفافية وفهم الكيفية التي يعيد بها الاقتطاع تشكيل العينة الفعالة. باستخدام حزمة ggplot2 العالمية، يمكننا بناء رسم بياني مزدوج يدمج المدرج التكراري (Histogram) ومنحنى الكثافة الاحتمالية (Density Plot) مع تظليل المناطق المستبعدة وتحديد نقاط القطع الرياضية بخطوط عمودية ملونة.

نقوم بتنفيذ كود الرسم البياني المتقدم التالي:

library(ggplot2)

# 1. توليد عينة بيانات ملتوية مع ذيل شاذ ممتد
set.seed(999)
visual_data <- data.frame(Value = c(rnorm(180, mean = 50, sd = 8), rnorm(20, mean = 95, sd = 5)))

# 2. حساب نقاط القطع للاقتطاع المتناظر بنسبة 10%
alpha <- 0.10
cutoffs <- quantile(visual_data$Value, probs = c(alpha, 1 - alpha))
low_cut <- cutoffs[1]
high_cut <- cutoffs[2]

# 3. بناء المخطط البياني المتقدم بواسطة ggplot2
p1 <- ggplot(visual_data, aes(x = Value)) +
  geom_histogram(aes(y = after_stat(density), fill = (after_stat(x) < low_cut | after_stat(x) > high_cut)),
                 binwidth = 3, color = "white", alpha = 0.7) +
  geom_density(color = "#2c3e50", linewidth = 1.2) +
  geom_vline(xintercept = low_cut, linetype = "dashed", color = "#c0392b", linewidth = 1) +
  geom_vline(xintercept = high_cut, linetype = "dashed", color = "#c0392b", linewidth = 1) +
  scale_fill_manual(values = c("FALSE" = "#2980b9", "TRUE" = "#e74c3c"),
                    labels = c("المشاهدات المعتمدة (80%)", "المشاهدات المقتطعة (20%)")) +
  labs(
    title = "التمثيل البصري لمناطق الاقتطاع في التوزيع الإحصائي",
    subtitle = paste("نسبة الاقتطاع = 10% من كل طرف | نقاط القطع:", round(low_cut, 1), "-", round(high_cut, 1)),
    x = "القيم المقاسة",
    y = "الكثافة الاحتمالية",
    fill = "حالة العينة"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5),
    legend.position = "bottom"
  )

# عرض الرسم البياني
print(p1)

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

10.2 المثال الثامن: رسم بياني مقارن لمواضع المقاييس (المتوسط، الوسيط، المقتطع)

في المخططات البيانية المعدة للنشر الأكاديمي وفق معايير الجمعية الأمريكية لعلم النفس (APA Style)، يُفضل إبراز خطوط عمودية تقارن بوضوح بين موضع المتوسط الحسابي العادي، والوسيط، والمتوسط المقتطع بنسبة 20% لتوضيح مقدار الانزياح الذي تحدثه الذيول الطويلة.

نقوم بتنفيذ كود الرسم المقارن التالي:

# 1. استخراج قيم المقاييس الثلاثة بدقة
mean_val <- mean(visual_data$Value)
median_val <- median(visual_data$Value)
trim20_val <- mean(visual_data$Value, trim = 0.20)

# 2. بناء إطار بيانات خاص بخطوط المقاييس للرسم
metrics_df <- data.frame(
  Metric = c("المتوسط الحسابي التقليدي", "المتوسط المقتطع (20%)", "الوسيط الإحصائي"),
  Value = c(mean_val, trim20_val, median_val),
  Color = c("#d35400", "#27ae60", "#8e44ad")
)

# 3. بناء المخطط المقارن المتوافق مع APA Style
p2 <- ggplot(visual_data, aes(x = Value)) +
  geom_density(fill = "#ecf0f1", color = "#7f8c8d", linewidth = 1) +
  geom_vline(data = metrics_df, aes(xintercept = Value, color = Metric),
             linetype = "solid", linewidth = 1.3) +
  scale_color_manual(values = c("المتوسط الحسابي التقليدي" = "#d35400",
                                "المتوسط المقتطع (20%)" = "#27ae60",
                                "الوسيط الإحصائي" = "#8e44ad")) +
  labs(
    title = "مقارنة مواضع مقاييس النزعة المركزية تحت التوزيع الملتوي",
    subtitle = "يوضح انزياح المتوسط التقليدي نحو الذيل الطويل وثبات المقياس المقتطع",
    x = "الدرجات المقاسة",
    y = "الكثافة",
    color = "المقياس الإحصائي"
  ) +
  theme_classic(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5),
    legend.position = "bottom",
    legend.title = element_blank()
  )

# عرض المخطط
print(p2)

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

11. الاستدلال الإحصائي المتقدم واختبار الفرضيات بالمتوسطات المقتطعة في R

11.1 التعريف بحزمة WRS2 المتخصصة في الإحصاءات المتينة

على الرغم من كفاءة الدالة mean() في الحساب الوصفي الأساسي، فإن إجراء اختبارات الفرضيات الاستدلالية (مثل مقارنة المجموعات، تحليل التباين، واستخراج فترات الثقة) المعتمدة على المتوسطات المقتطعة يتطلب خوارزميات رياضية معقدة لحساب تباين وينسور ودرجات الحرية المعدلة. هنا تبرز حزمة WRS2 (Wilcox’s Robust Statistics) التي طورها باتريك ماير وراند ويلكوكس، كأقوى حزمة إحصائية عالمية لتنفيذ هذه التحليلات في R.

تتميز حزمة WRS2 باحتوائها على ترسانة متكاملة من الاختبارات المتينة المصممة خصيصاً للتعامل مع انتهاكات التوزيع الطبيعي وعدم تجانس التباين (Heteroscedasticity). ويمكن تثبيتها واستدعاؤها بسهولة عبر الأوامر القياسية:

install.packages("WRS2")
library(WRS2)

توفر الحزمة دوال اختبارية قياسية؛ مثل دالة yuen() لمقارنة عينتين مستقلتين، ودالة ydbt() للاختبار التمهيدي بالبوتستراب، ودالة t1way() كبديل متين لتحليل التباين أحادي الاتجاه (One-Way ANOVA)، ودالة rmanova() للمقاييس المتكررة، وجميعها تعتمد افتراضياً على اقتطاع نسبة 20% من البيانات لتوفير أعلى درجات القوة والمناعة الإحصائية.

11.2 المثال التاسع: إجراء اختبار Yuen للمقارنة بين عينتين مستقلتين

يُعد اختبار يون (Yuen’s Test for Trimmed Means)، الذي طورته الإحصائية كارين يون، البديل المتين المعياري لاختبار t الكلاسيكي للعينات المستقلة (Independent Samples Student/Welch t-test). يعتمد الاختبار على مقارنة المتوسطات المقتطعة للمجموعتين مع تعديل تباين وينسور المشترك ودرجات الحرية، مما يجعله محصناً تماماً ضد تباين الذيول ووجود الشواذ.

سنقوم في هذا المثال بمقارنة درجات تحسن الذاكرة بين مجموعتين علاجيتين باستخدام دالة yuen() في حزمة WRS2:

# 1. استدعاء الحزمة وإنشاء مجموعة بيانات سريرية
library(WRS2)

set.seed(789)
group_A <- c(12, 14, 15, 15, 16, 17, 18, 19, 20, 22, 23, 25, 80) # تحتوي على قيمة شاذة 80
group_B <- c(10, 11, 12, 13, 13, 14, 15, 16, 17, 18, 19, 20, 21)

yuen_df <- data.frame(
  Score = c(group_A, group_B),
  Group = factor(rep(c("Drug_A", "Placebo"), times = c(length(group_A), length(group_B))))
)

# 2. تنفيذ اختبار يون للمتوسطات المقتطعة بنسبة 20% (tr = 0.2)
yuen_result <- yuen(Score ~ Group, data = yuen_df, tr = 0.2)

# 3. طباعة تقرير مخرجات الاختبار الكامل
print(yuen_result)

يظهر في تقرير المخرجات الإحصائية تفاصيل بالغة الأهمية تشمل:

  • قيمة إحصائي الاختبار المتين ($T_y$): تعبر عن نسبة الفارق بين المتوسطين المقتطعين مقسوماً على الخطأ المعياري المتين المشترك.
  • درجات الحرية المعدلة (Adjusted df): يتم احتسابها بناءً على تباين وينسور وأحجام العينات الفعالة، وغالباً ما تكون قيماً كسرية تعكس تعديل ويلش للتباين غير المتجانس.
  • مستوى الدلالة الإحصائية (p-value): يقدم قراراً استدلالياً دقيقاً غير مضلل بالقيم الشاذة.
  • فترة الثقة للفارق المتين (Robust Confidence Interval): توفر نطاق التقدير المعول عليه للفارق الحقيقي بين المجموعتين.
  • حجم الأثر التفسيري المتين (Explanatory Measure of Effect Size – $xi$): تقدم الحزمة مقياس حجم أثر قوي (يرمز له بـ $xi$ أو $\delta$) طوره ويلكوكس كبديل متين لمعامل كوهين $d$، ويُفسر بمستويات قياسية (0.10 صغير، 0.30 متوسط، 0.50 كبير).

11.3 المثال العاشر: فترات الثقة عبر التمهيد (Bootstrap Confidence Intervals)

في كثير من الأحيان، يفضل علماء الإحصاء عدم الاعتماد على أي افتراضات توزيعية نظرية لتقدير فترات الثقة، واللجوء بدلاً من ذلك إلى أساليب إعادة أخذ العينات بالتمهيد (Bootstrapping). توفر حزمة WRS2 الدالة yuenbt() والدالة المتقدمة trimcbt() لحساب فترات الثقة المعتمدة على البوتستراب للمتوسطات المقتطعة.

يوضح الكود التالي كيفية حساب فترة ثقة تمهيدية للمتوسط المقتطع بنسبة 20% مع 2000 عينة بوتستراب:

# 1. تنفيذ اختبار يون بالبوتستراب للمقارنة بين المجموعتين
set.seed(456)
bootstrap_yuen <- yuenbt(Score ~ Group, data = yuen_df, tr = 0.2, nboot = 2000)

# 2. طباعة نتائج فترات الثقة بالبوتستراب
print(bootstrap_yuen)

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

12. أفضل الممارسات، الأخطاء الشائعة، ودليل كتابة التقارير الإحصائية

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

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

  • الخطأ في تحديد قيمة المعامل trim كنسبة مئوية صحيحة: من أكثر الأخطاء البرمجية شيوعاً تمرير الرقم trim = 10 أو trim = 20 اعتقاداً بأن الدالة تقبل أرقاماً مئوية. يقبل معامل trim في R كسراً عائماً حصرياً بين 0 و 0.5؛ وبالتالي فإن تمرير قيمة أكبر من 0.5 سيؤدي حتماً إلى إيقاف تنفيذ الكود مع ظهور رسالة خطأ صريحة: 'trim' must be in [0, 0.5]. الصياغة الصحيحة لاقتطاع 10% هي trim = 0.10.
  • تجاهل معالجة القيم المفقودة (na.rm): نسيان إضافة na.rm = TRUE عند التعامل مع بيانات واقعية تحتوي على قيم مفقودة يؤدي إلى تدفق قيم NA عبر جميع الدوال والتحليلات اللاحقة، مما يعطل سلاسل المعالجة في خطوط أنابيب dplyr.
  • الإفراط غير المبرر في نسبة الاقتطاع: يؤدي اللجوء إلى نسب اقتطاع مفرطة (مثل اقتطاع 40% في عينات صغيرة جداً مؤلفة من 8 مشاهدات مثلاً) إلى استنزاف حجم العينة الفعال وفقدان حاد في القوة الإحصائية، مما يجعل التحليل عاجزاً عن استكشاف الخصائص الواقعية للمجتمع المدروس.
  • الخلط المفاهيمي بين اقتطاع العينة وتقليص التوزيع النظري: يخلط بعض الباحثين بين عملية الاقتطاع التجريبي للعينة (Sample Trimming) وبين النماذج الاحتمالية للتوزيعات المقتطعة نظرياً (Truncated Probability Distributions). الاقتطاع التجريبي هو أسلوب متين لتقدير المعالم المركزية للبيانات الموجودة، وليس تغييراً في النطاق المعرفي لتعريف المتغير.

12.2 معايير التوثيق المنهجي وكتابة التقارير وفق دليل APA

تفرض المعايير الدولية المعاصرة، ولا سيما الإصدار السابع من دليل النشر للجمعية الأمريكية لعلم النفس (APA 7th Edition)، الإفصاح الكامل والشفاف عن كافة الإجراءات الإحصائية المتينة المستخدمة في المعالجة. عند تقرير المتوسط المقتطع، يجب على الباحث اتباع القواعد التوثيقية التالية:

أولاً، يجب الإفصاح بوضوح في قسم المنهجية (Methodology/Statistical Analysis) عن اعتماد المتوسط المقتطع ونسبة الاقتطاع المحددة بدقة مع تقديم المبرر المنهجي (مثل: وجود التواء شديد أو انتهاك افتراضات التوزيع الطبيعي وفق اختبار شابيرو-ويلك أو فحص الرسوم البيانية).

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

“أظهرت النتائج أن الأداء المعرفي لمجموعة العلاج كان أعلى دلالة مقارنة بالمجموعة الضابطة؛ حيث بلغ المتوسط المقتطع بنسبة 20% لدرجات التحسن في مجموعة العلاج ($M_{trim} = 14.35$, $SE = 0.58$) مقابل ($M_{trim} = 5.12$, $SE = 0.62$) للمجموعة الضابطة. وأكد اختبار يون للمتوسطات المقتطعة وجود فارق إحصائي جوهري بين المجموعتين، $T_y(22.4) = 10.82$, $p < .001$, مع حجم أثر متين كبير ($xi = 0.74$, $95% \text{ CI } [0.52, 0.88]$).”

ثالثاً، انسجاماً مع مبادئ “العلم المفتوح” (Open Science) والقدرة على إعادة الإنتاج (Reproducibility)، يُنصح الباحثون بشدة بإرفاق شفرات برمجية بلغة R كملفات ملحقة، مع توضيح أسماء الدوال والمعاملات المستخدمة لضمان الشفافية الأكاديمية المطلقة.

12.3 شجرة اتخاذ القرار: متى وكيف تعتمد المتوسط المقتطع في تحليلاتك؟

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

1. فحص التوزيع المبدئي والشذوذ:
هل البيانات تتبع التوزيع الطبيعي المعياري بشكل مؤكد وخالية تماماً من القيم الشاذة المتطرفة؟
نعم: اعتمد المتوسط الحسابي التقليدي واختبارات $t$ و ANOVA الكلاسيكية (كفاءة 100%).
لا / غير متأكد: انتقل إلى الخطوة 2.

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

3. تحديد المنصة والأداة البرمجية في R:
للإحصاء الوصفي والاستكشاف البسيط: استخدم الدالة الأساسية mean(x, trim = 0.2, na.rm = TRUE) أو خطوط أنابيب dplyr.
لاختبار الفرضيات، مقارنة المجموعات، ونماذج التباين: انتقل مباشرة إلى حزمة WRS2 واستخدم الدوال المتخصصة: yuen()، t1way()، أو الدوال التمهيدية yuenbt().

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

خاتمة

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

References

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

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