مدخل إلى لغة r المخططات البيانية الإحصائية في لغة R


م. خالد الشمعة

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

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

للتذكير فقط، تستطيع أن تقوم بتحميل لغة R من الموقع الرسمي لها على الرابط http://www.r-project.org، وعملية تنصيب هذه اللغة تخلو من التعقيدات وبانتهاءها يمكنك تشغيل سطر الأوامر الخاص بها من خلال النقر على أيقونة اللغة على سطح المكتبة، وكل مانكتبه تاليا يكون داخل سطر الأوامر هذا، علما أننا نستخدم في كل أمثلتنا إطار البيانات المدعو mtcars والذي يأتي محزوما مع اللغة بشكل إفتراضي، وللحصول على معلومات إضافية عن طبيعة محتوى هذه البيانات يمكنك كتابة الأمر التالي في سطر الأوامر mtcars? ولاختصار طريقة الوصول إلى المعلومات ضمن إطار البيانات ننفذ الأمر (attach(mtcars فنصبح قادرين على استخدام التسمية mpg بدلا من استخدام الطريقة المفصلة mtcars$mpg للدلالة على عدد الأميال المقطوعة بغالون البنزين الواحد.

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

لدى لغة R تعليمة بسيطة بالصيغة لكنها في ذات الوقت تقدم خدمة عظيمة في إطار عرض ما لدينا من بيانات وتوضيح ما فيها من علاقات محتملة، تدعى هذه التعليمة pairs وتقبل كدخل لها إسم إطار البيانات الذي لدينا كاملا، لتقوم بعدها برسم مصفوفة من المخططات البيانية لكل زوج ممكن من هذه البيانات على شكل مخطط مبعثر (scatter plot) بحيث يظهر كل زوج في مخططين بيانيين يتبادلان فيه مكان التمثيل على المحورين x و y، يظهر الشكل التالي مثالا عن ناتج تنفيذ هذه التعليمة عند تطبيقها على إطار mtcars للبيانات:

pairs(mtcars);

9k=

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

أما لرسم مخطط مبعثر (scatter) بين أي عمودين من البيانات نستطيع استخدام الدالة plot العامة الأغراض، فمثلا (plot(wt, mpg والتي يمكن كتابتها أيضا بالصيغة (plot(mpg~wt حيث سيمثل وزن السيارات بقيم wt على محور x فيما المسافة المقطوعة بغالون البنزين الواحد والتي تعطى بقيم mpg ستمثل على المحور y ليظهر لدينا المخطط البياني كما هو موضح في الشكل التالي:

2Q==

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

9k=

لحسن الحظ فإن سلوك الدالة plot يتعدل بشكل آلي تبعا لطبيعة ونوع البيانات التي تمرر إليها، وما سنقوم به الآن هو تحويل نوع cyl إلى معاملة وذلك باستخدام الأمر (cyl <- factor(cyl، بمعنى أن لهذا المقدار قيم محددة لايستطيع أن يأخذ غيرها، وسنلاحظ طبيعة هذا التغير في طريقة تعامل توابع لغة R المختلفة مع هذا المقدار الجديد بعد تغيير توصيفه (يمكن لك أن تجرب معه الدالة summary لترى أن ماتحصل عليه من ناتج يختلف عما سبق وأن رأيت، فعوضا عن القيمة الصغرى والعظمى والمتوسط والوسيط الخ... وهي المقادير التي توصف بها عادة أي مجموعة قيم عددية، أصبحنا نرى الآن عدد القيم المحددة التي يمتلكها هذا المعامل مقدار تكرار ظهور كل من تلك القيم).

ليس هذا فحسب بل إن سلوك الدالة plot سوف يتغير كذلك، فإن حاولت الآن إعادة تنفيذ ذات الأمر السابق (plot(cyl, mpg فسوف تحصل على المخطط البياني التالي:

Z

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

هناك مخطط بياني آخر ذي طبيعة استخدام إحصائية موجود في جعبتنا ألا وهو المدرج التكراري (Histogram)، وهو يبين طبيعة توزع ما لدينا من قيم على المجال المحصور ما بين الحد الأدنى والأقصى، ففي بعض الأحيان لا يكون تلخيص البيانات بمساعدة الحد الأدنى والأقصى والمتوسط كافيا، حينها نلجأ إلى هذا المخطط البياني والذي يقسم فيه المجال الكلي ما بين الحد الأدنى والحد الأقصى إلى فئات أو مجموعات، ومن ثم نرسم أعمدة بيانية توضح عدد مرات تكرار ظهور القيم ضمن كل واحدة من هذه الفئات أو المجموعات. فعلى سبيل المثال تستطيع تجربة الأمر التالي ("hist(qsec, col="gray لتوضيح توزع معدل التسارع بين السيارات المدروسة حيث تشير القيم في qsec إلى الزمن اللازم لقطع مسافة ربع ميل مقاسا بالثواني، لاحظ أننا اخترنا اللون الرمادي الذي سترسم به الأعمدة وذلك من خلال تحديد قيمة الوسيط col.

9k=

لدينا نوع آخر من المخططات البيانية ذات الصبغة الإحصائية متاح لنا وهو المخطط الصندوقي آنف الذكر، ويمكن طلب عرض بياناتنا من خلاله باستخدام الدالة ("boxplot(qsec, col="gray حيث سنحصل بالنتيجة على الشكل التالي:

9k=

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

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

إن حجر الزاوية في تصميم أي تجربة علمية على أساس إحصائي سليم يبدأ من توليد التوزيع العشوائي لمعاملاتها حتى لايكون هناك أي تفضيل أو إنحياز لأي منها، كذلك علينا تكرار كل واحدة من تلك المعاملات لأكثر من مرة حتى تكون الاستجابة المدروسة ليست مجرد مصادفة بل تمت المصادقة عليها من خلال إعادتها وتكرارها، إن مجموعة الأوامر التالية تعطي مثالا على طريقة تصميم تجربة بمعاملة لها 12 قيمة مختلفة في 3 مكررات (وهو ما يطلق عليه عادة في التجارب العلمية بتصميم القطاعات العشوائية الكاملة RCBD أي Randomised Complete Block Design):

x <- 1:12;
RCBD <- replicate(3, sample(x));

حيث يشير التركيب 1:12 إلى تسلسل الأرقام من 1 وحتى 12 على التوالي، فيما تقوم الدالة sample ببعثرة عناصر الشعاع x بشكل عشوائي، في حين أن دور الدالة replicate في هذا التركيب هو تكرار ناتج تنفيذ الدالة sample لثلاث مرات، لعرض محتويات التصميم الناتج أكتب RCBD ضمن سطر الأوامر في لغة R ومن ثم إنقر على زر الإدخال (إنتبه إلى أن الأسماء في لغة R حساسة لحالة الأحرف). تجدر الإشارة إلى أنه بإمكانك حفظ مجموعة التعليمات التي تود تنفيذها ضمن ملف نصي، وعادة ما تستخدم اللاحقة R لمثل تلك الملفات (على سبيل المثال script.R)، ومن ثم تستطيع استدعاء ذلك الملف ليتم تنفيذ محتواه من تعليمات وأوامر دفعة واحدة وذلك باستخدام التعليمة ("source("script.R أو حتى من خلال الخيار Source R code في قائمة File.

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

لائحة المراجع:



2 اشخاص أعجبوا بهذا


تفاعل الأعضاء


السلام عليكم شكرا لكم وفقكم الله 

اعمل على برنامج R منذ فترةقصيرة هناك بعض الاخطأ لا اعرف كيف اتخلص منها فارجو المساعدة هذا الخطأ

names(datos)
[1] "mes.a.presion.hr.tmax.tmin.viento.insol.precip"
> par(mfrow=c(1,1))
> plot(datos$PET_tho)
Error in plot.window(...) : need finite 'xlim' values
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) : no non-missing arguments to max; returning -Inf
وهذه بعض البيانات 

mes a presion hr tmax tmin viento insol precip
1 1961 1019.4 69 12 5 3.1 4.174194 69.7
2 1961 1026 80 15.5 7.4 3.1 6.867857 0.4
3 1961 1027.9 72 16.5 6.5 3.4 7.822581 6.4
4 1961 1011.9 75 19.7 11.2 4.1 5.47 41.5
5 1961 1015.5 67 21.7 13.3 4.1 10.06129 15
6 1961 1017 71 25.2 16.7 3.7 9.62 3.7
7 1961 1016.8 68 27.9 19 4.1 10.59355 0
8 1961 1018.3 73 27.6 19 3.7 10.15484 98.6
9 1961 1017.5 79 26.3 18.4 3.4 6.76 158.9
10 1961 1015.1 76 21.7 13.3 3.5 5.951613 21.6
11 1961 1010.7 74 16.9 8.1 3.6 4.103333 133.1
12 1961 1015 71 15.7 6.7 3.3 5.883871 8.8
1 1962 1022.3 72 14.7 6.7 3.1 5.53871 52.1
2 1962 1019.4 70 13.8 5.2 4 6.164286 90.4
3 1962 1012.1 70 14.5 7 4.7 4.596774 62.7
4 1962 1015 76 17 9.6 4.4 7.51 31
5 1962 1016.8 74 19.6 11.8 4.1 7.074194 59.2

شارك هذا التعليق


رابط هذا التعليق
شارك على الشبكات الإجتماعية


يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن