Menu
flag Ar iconالعربيةdown icon

المتوسط والوسيط والانحراف المعياري في R

كيفية تلخيص البيانات في R: ‏mean() وmedian() وsd() وvar() وsummary() وquantile()، وما تحسبه كل منها، وتفصيلة n−1 خلف sd()، ولماذا تُعد mode() في R مصيدة.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

المتوسط والوسيط

أكثر ملخصين استخدامًا في الإحصاء كله هما استدعاء دالة واحد لكل منهما:

تجمع mean() كل شيء وتقسم على العدد. وترتب median() القيم وتختار الوسطى منها (أو تحسب متوسط الوسطيين حين يكون العدد زوجيًا). وفي السيارات الاثنتين والثلاثين في mtcars يبلغ متوسط اقتصاد الوقود نحو 20.1 ميل لكل غالون، والوسيط 19.2، وهما متقاربان، ما يخبرك بأن البيانات غير ملتوية بشدة. وحين يتباعدان كثيرًا فتلك معلومة أيضًا، وسنصل إليها في النهاية.

وثمة أمر يفاجئ الجميع: إذا احتوى المتجه ولو على قيمة NA واحدة، أرجعت كلتا الدالتين NA:

وهذا مقصود، فـ R يرفض التظاهر بهدوء بأن القيمة المفقودة غير موجودة. وتقول na.rm = TRUE: "احسب على القيم المتوفرة لديك". وتقبلها كل دالة تلخيص في هذه المقالة تقريبًا. أما القصة الكاملة لكيفية انتشار NA ففي القيم المفقودة.

الانحراف المعياري والتباين

تقيس sd() التشتت، أي تقريبًا كم تبعد القيمة النمطية عن المتوسط، بوحدات البيانات نفسها. وvar() هي مربعها:

انحراف معياري يبلغ نحو 6 أميال لكل غالون يعني أن السيارات تقع عادةً ضمن نحو 6 وحدات من المتوسط 20.1. ولأن sd() بوحدات البيانات نفسها فهي التي تُبلَّغ في التقارير، بينما تظهر var() غالبًا داخل صيغ أخرى.

وإليك التفصيلة التي تهم في المقررات الدراسية: تحسب sd() وvar() إحصاء العينة، إذ تقسمان مجموع مربعات الانحرافات على n − 1 لا على n:

ولماذا n − 1؟ لأنك قدّرت المتوسط من البيانات نفسها، فتكون الانحرافات حول ذلك المتوسط المقدَّر أصغر قليلًا بشكل منهجي، والقسمة على n − 1 تصحح ذلك. ولأن بياناتك تكون دائمًا تقريبًا عينة من شيء أكبر، فإن صيغة n − 1 هي ما تريده. وإذا كنت تملك فعلًا المجتمع بأكمله (كل طالب في الصف، كل منتج في الفهرس)، فاضرب: var(x) * (n - 1) / n.

الخطأ المعياري للمتوسط

يُخلط باستمرار بين الانحراف المعياري والخطأ المعياري، فأبقِهما متمايزين: الانحراف المعياري يصف البيانات، والخطأ المعياري يصف تقديرك للمتوسط. ولا يملك R دالة se() مدمجة، لكن الصيغة سطر واحد:

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

‏summary(): نظرة عامة في استدعاء واحد

تعطيك summary() الملخص الخماسي إضافة إلى المتوسط دفعة واحدة، وتعمل على أطر البيانات كاملة:

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

المئينات والمدى والمدى الربيعي

تعمّم quantile() الوسيط إلى أي نقطة قطع:

وبلا وسائط تُرجع القيمة الصغرى والربيعات والقيمة الكبرى. ومرّر probs = لنقاط قطع محددة، فالمئينان العاشر والتسعون أعلاه يحصران المكان الذي يعيش فيه معظم البيانات. وIQR()، أي المسافة بين المئينين الخامس والعشرين والخامس والسبعين، مقياس تشتت لا تجرّه القيم الشاذة خلافًا لـ sd(). وتُرجع range() القيمتين الصغرى والكبرى معًا.

المنوال: دالة mode() في R لا تفعل هذا

يقع الجميع في هذا الفخ مرة واحدة بالضبط. يملك R دالة اسمها mode()، ولا علاقة لها بالإحصاء، إذ تُبلغ عن نوع تخزين الكائن:

والصيغة الجديرة بالحفظ: تعدّ table(x) عدد مرات ظهور كل قيمة، وتجد which.max() أكبر عدد، وتستخرج names() القيمة نفسها. ولاحظ أنها تعود سلسلة نصية (فأسماء الجداول كذلك دائمًا)، فغلّفها بـ as.numeric() إن احتجت إلى الحساب بها. وإذا تعادلت قيمتان أرجعت which.max() الأولى فقط بصمت، فافحص الجدول بنفسك حين يكون التعادل واردًا.

المتوسط مقابل الوسيط: أيهما تُبلّغ عنه

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

قيمة واحدة مضافة تدفع المتوسط من نحو 49,300 إلى ما يزيد على 155,000، وهو رقم لا يصف أحدًا في البيانات، بينما ينتقل الوسيط من 48,000 إلى 49,500 فقط. ولهذا يُبلَّغ عن الدخل وأسعار المنازل ومدد الإقامة في المستشفيات بالوسيط: فالبيانات الملتوية ذات الذيل الطويل تجعل المتوسط مضللًا. أما البيانات المتماثلة تقريبًا فيتفق فيها الاثنان ويكون المتوسط مناسبًا (وأكفأ إحصائيًا). ومدرج تكراري سريع يخبرك بأي الحالتين أنت، ومقارنة متوسطك بوسيطك هي بحد ذاتها فحص التواء من سطر واحد.

الخلاصة

  • mean(x) وmedian(x)، وأضف na.rm = TRUE عند وجود قيم مفقودة.
  • تحسب sd(x) وvar(x) إحصاء العينة (بمقام n − 1)، وهو ما تريده.
  • الخطأ المعياري هو sd(x) / sqrt(length(x))، وهو يقيس مدى معرفتك بالمتوسط لا مدى تشتت البيانات.
  • استدعاء summary() على إطار بيانات جديد هو أسرع فحص سلامة في R.
  • المنوال هو names(which.max(table(x)))، أما mode() في R فتتعلق بأنواع التخزين.
  • للبيانات الملتوية أو ذات القيم الشاذة: أبلِغ عن الوسيط. وللبيانات المتماثلة: المتوسط مناسب.

في المستند التالي: قياس مدى تحرك متغيرين معًا، أي الارتباط عبر cor() وcor.test().

الأسئلة الشائعة

كيف تحسب الانحراف المعياري في R؟

باستخدام sd(x). ولاحظ أنها تحسب الانحراف المعياري للعينة، إذ تقسم على n − 1 لا على n. وهذا ما تريده في كل تحليل واقعي تقريبًا، لأن بياناتك تكون دائمًا تقريبًا عينة لا المجتمع بأكمله.

كيف تجد المتوسط والوسيط في R؟

باستخدام mean(x) وmedian(x). وإذا كان المتجه يحوي قيمًا مفقودة أرجعت كلتاهما NA، فأضف na.rm = TRUE للحساب على القيم الموجودة: mean(x, na.rm = TRUE).

كيف تجد المنوال في R؟

ليس بـ mode()، فتلك الدالة تُرجع نوع تخزين الكائن لا القيمة الأكثر تكرارًا. بل استخدم صيغة الجدول: تُرجع names(which.max(table(x))) القيمة الأكثر ظهورًا.

ما الخطأ المعياري في R؟

لا توجد دالة مدمجة له. احسبه بالصيغة sd(x) / sqrt(length(x)). فالانحراف المعياري يصف تشتت بياناتك، أما الخطأ المعياري فيصف دقة تقديرك للمتوسط، وهو يتقلص مع كبر العينة.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن