منبع اصلی این پست، دوره آمار و احتمال مهندسی دکتر علی شریفی زارچی از آکادمی مکتبخونه میباشد. لطفاً برای حفظ حقوق منتشر کننده اصلی، ویدیوهارو از منبع اصلی دنبال کنید. همچنین، در انتهای هر جلسه، به ویدیو مربوط به آن جلسه ارجاع داده شده است.
سعی کردم هرچیزی که از ویدیوها فهمیدم رو به صورت متن در بیارم و در این پلتفورم با بقیه به اشتراک بذارم. کل ویدیوها 27 تاست که سعی میکنم هفتهای یک الی دو جلسه رو منتشر کنم. تا جایی که تونستم سعی کردم خوب و کامل بنویسم، اما اگر جایی ایرادی داشت، حتما تو کامنتها بهم بگید تا درستش کنم.
پیشنهاد میکنم قبل از خوندن ادامه مطلب، یک کاغذ و قلم جلو دستتون باشه تا بتونید روابط ارائه شده رو در جاهایی که لازم هست برای خودتون تو کاغذ بنویسید و محاسبات لازم رو خودتون هم انجام بدین تا بهتر متوجه بشید که در هر مرحله چه اتفاقی میفته.
در جلسات گذشته با انواع تستهای آماری آشنا شدیم و دیدیم که به چه صورت تعریف میشن. نکته خوبی که در مورد این تستهای آماری وجود داره اینکه قرار نیست هر دفعه این تستهارو از صفر خودمون بنویسیم و در زبانهای برنامه نویسی مختلف از قبل پیادهسازی شدن و فقط کافیه که ازشون روی دیتای ورودی مد نظرمون استفاده کنیم.
برای مثال دیتاست Iris رو که در چند جلسه گذشته باهاش آشنا شدیم در نظر بگیرید. فرض کنید میخوایم این رو بررسی کنیم که آیا sepal length گروه Setosa از گروه Versicolor بیشتر هست یا نه.
فرض کنید میایم به ازای هر گونه میانگین sepal length رو محاسبه میکنیم و داریم:
و سوالی که بوجود میاد اینکه آیا تفاوت در میانگین گونهها تفاوت معناداری هست یا نه.
اگر بیایم نمودار جعبهای رو به ازای sepal length در هر گونه رسم کنیم به صورت زیر در میاد:
نمودار دیگهای هست که بهش نمودار violin گفته میشه و اگر به ازای sepal length رسم کنیم خواهیم داشت:
این نمودار در واقع میاد توزیع sepal length رو به ازای هر گونه رسم میکنه. مثلاً بیشترین مقادیر sepal length برای گونه setosa حدود 5 بوده.
میتونیم بیایم حتی دو نموداری که تا اینجا کشیدیم رو باهم ترکیب کنیم و داشته باشیم:
حالا در ادامه میایم یک t-test میزنیم روی sepal length دو گونه تا ببینیم تفاوتی که در توزیعهاشون وجود داره تفاوت معناداری هست یا صرفاً رندوم به این صورت در اومده.
میایم دو گروه نمونه در نظر میگیریم. یکی sepal length گونه setosa رو داره و گروه دیگه sepal length گونه versicolor رو:
و در ادامه فقط کافیه تابع t.test رو از R روی دو گروهی که داریم صدا بزنیم تا مقادیر p-value رو برامون حساب کنه:
نتیجه به صورت زیر در میاد و چون مقدار p-value خیلی کوچیک میشه، فرض H0 رو میتونیم رد کنیم و به این معنی هست که تفاوت بین میانگین و توزیعهای دو گونه setosa و versicolor در sepal length معنی دار هست و به صورت رندوم توزیعهاشون به اون صورت در نیومده:
در جلسه گذشته دیدیم که برای اینکه بتونیم t-test رو روی دیتای ورودی اعمال کنیم یک سری فرضها وجود دارن و اگر اون فرضها نقض بشن نمیتونیم از t-test استفاده کنیم. حالا اگر دیتای ورودی ما به صورتی باشه که فرضهای در نظر گرفته شده رو نقض کنه، در این صورت آیا دیگه نمیتونیم تست آماری انجام بدیم؟ اگر بخوایم تست آماری انجام بدیم باید چه کنیم؟ در ادامه این جلسه قراره با تستهایی در آمار آشنا بشیم که در این شرایط میتونیم ازشون استفاده کنیم.
تا الان هرچی تست دیدیم و باهاشون آشنا شدیم آزمونهای پارامتری بودن. یک دسته دیگه از آزمونهای آماری وجود داره که بهشون آزمونهای ناپارامتری گفته میشه که محدودیتها و فرضهای آزمونهای پارامتری رو ندارن و دستمون رو خیلی بازتر میذارن. ممکنه سوال پیش بیاد که وقتی تستهای ناپارامتری رو داریم پس اصلاً چرا میریم سراغ تستهای پارامتری که یکم محدودترن؟ دلیلش اینکه در یک سری مواقع نتیجهای که از t-test به دست میاد خیلی معنادار تره نسبت به نتیجهای که میشه از تستهای ناپارامتری گرفت.
یک دسته از آزمونهای ناپارامتری به این صورت هستن که میان شبیه t-test عمل میکنن با این تفاوت که با خود اعداد کار داشته باشن با رنکشون کار میکنن. در قالب یک مثال توضیح میدیم.
فرض کنید دو دسته عدد داریم به صورت زیر هستن:
در گام بعدی برای این اعداد رنک تعریف میشه. به این صورت که کوچیکترین عدد رو به عدد 1 مپ میکنن و به ترتیب از کوچیک به بزرگ بقیه اعداد رو با رنگ 2 و 3 و 4 و ... مشخص میکنن. تو این مثالی که زدیم، فارغ از اینکه اعداد تو کدوم دسته هستن اول از کوچیک به بزرگ مرتب میشن و بعد از 1 تا n (تعداد عددها) رنگ بهشون تعلق میگیره. رنک هر عدد با مارکر آبی کنارش مشخص شده:
در گام بعد میان اعداد رو به ترتیب رنک در نظر میگیرن، به گروه اول یک رنگ (مثلاً آبی) و به گروه دوم یک رنگ دیگه (مثلاً قرمز) اختصاص میدن و در نتیجه نمودار زیر به دست میاد:
مثلاً عددی که رنک 7 داشته برابر بوده با عدد2.8 که در گروه دوم قرار داشته و رنگش هم قرمز بوده.
حالا در نهایت، اگر نقاط آبی و قرمز خیلی در هم باشن، به این معنی هست که این دو گروه تفاوتی باهم ندارن ولی اگر پراکندگی نقاط به صورت زیر بود، در اون صورت میتونستیم با قاطعیت بیشتری بگیم که تفاوت معناداری بین دو گروه قرمز و آبی وجود داشت:
و در ادامه میشه روی رنکها آماره تعریف کرد و p-value محاسبه کرد.
دسته دیگری از تستهای ناپارامتری وجود داره که بهش آزمون جایگشت گفته میشه. در ادامه جزییات بیشتری از این تست رو بررسی خواهیم کرد.
علی و حسن رو در نظر بگیرید. هر دو خیلی به قهوه علاقه دارن و تصمیم گرفتن که تعداد فنجون قهوههایی که خوردن رو در طی شیش روز متوالی ثبت کنن تا در نهایت ببینیم کدوم یکیشون بیشتر قهوه خورده. فرض کنید تعداد فنجون قهوهای که در طی شیش روز متوالی توسط این دو نفر خورده شده به صورت زیر باشه:
میخوایم این مسئله رو با تست جایگشت حل کنیم و حالا گامهایی که پیش رو داریم به شرح زیره:
حالا این گامهایی که تعریف کردیم به صورت دقیقتر یعنی چی؟ اول اینکه آماره یک تابع هست که خودمون تعریف میکنیم. فرض کنید دو دسته نمونه داشته باشیم، دسته A و دسته B. آماره رو تعریف کنیم میانگین دادههای دسته A منهای میانگین دادههای دسته B. بعد میایم اعدادی که از هر دسته داریم رو بهم میریزیم و مجدداً آماره رو براش حساب میکنیم (یعنی ممکنه دسته نمونهها بهم بریزه و هر دفعه تقسیم نمونهها در دستهها متفاوت باشه). این کار رو 10000 بار انجام میدیم. در نهایت هم p-value حساب میکنیم و میتونیم نتیجه بگیریم.
بیایم برای همین مثال علی و حسن گامهارو به کمک R جلو ببریم.
اول از همه میایم دادههای دو دسته و بعد آماره رو تعریف میکنیم:
با توجه به همین دستهبندی اولیه اگر آماره رو حساب کنیم عدد 0.7833 رو خواهیم داشت.
حالا در ادامه قراره بیایم به تعداد دفعات خیلی زیادی یک کاری رو انجام بدیم. در مجموع 12 تا عدد داریم، هر دفعه بیایم این 12 تا عدد رو به طور تصادفی در دسته یک و دسته دو قرار بدیم و به ازای اعداد موجود در هر دسته، آماره رو محاسبه کنیم:
حالا اومدیم آماره رو هر دفعه محاسبه کردیم و اگر نمودار هیستوگرامش رو بکشیم داریم:
در ادامه میایم یه نمودار دیگه میکشیم:
نمودار بالا چی رو نشون میده؟ نمودار داره توزیع آماره رو به ازای 1000 دفعهای که تکرارش کردیم نشون میده (شبیه همون نمودار هیستوگرام) و خط عمودی هم مشخص کننده شروع مقدار p-value هست. یعنی از جایی که خط عمودی رسم شده تا چپ معادل هست با مقدار p-value. همونطور که واضحه مقدار p-value خیلی بزرگه. بزرگ بودن p-value به این معنیه که حسن و علی هیچ کدوم نسبت به اون یکی بیشتر قهوه نخورده و هر دو تقریباً شبیه هم بودن.
اگر بیایم ورودی رو تغییر بدیم و نمونههای دسته اول رو بیشتر کنیم (نه از نظر تعداد، بلکه خود ارقام رو عوض کنیم) و همه محاسبات رو انجام بدیم، نمودار نهایی به صورت زیر در میاد:
مقدار p-value به شدت کمتر میشه نسبت به حالت قبل و به این معنی خواهد بود که مثلاً علی نسبت به حسن بیشتر قهوه خورده.
تا اینجا هرچی تست دیدیم به این صورت بوده که میخواستیم یک فرضیه رو بسنجیم. اگر بخوایم چند تا فرضیه رو باهم بسنجیم نیازه که تست چندگانه انجام بدیم. در ادامه با جزییاتش بیشتر آشنا میشیم.
فرض کنید m فرد سالم داریم و w فرد بیمار. در بدن هر فردی چه سالم و چه بیمار n ژن وجود داره. یه ویژگی از این ژنهارو اندازه گرفتیم و در نهایت به دو تا جدول رسیدیم. جدول اول نشون دهنده ویژگی ژنهای افراد سالمه (یک جدول m در n) و جدول دوم نشون دهنده ویژگی ژنهای افراد بیمار (یک جدول w در n).
حالا، اینجا میشه تعداد زیادی فرضیه رو برای تست در نظر گرفت. مثلاً:
مثلاً برای فرضیه 1 میشه اومد سطرهای اول رو از هر جدول در نظر گرفت و باهم سنجید و روش t-test یا هر تست دیگهای رو اعمال کرد. تا اینجا خیلی مشکلی وجود نداره و همه چیز رواله. قضیه سر alpha بوجود میاد.
یک مقداری رو با عنوان alpha از جلسات گذشته تعریف کرده بودیم با عنوان احتمال خطای نوع اول و اگر مقدار alpha رو 0.05 در نظر بگیریم به این معنی هست که فقط میتونیم ژنهایی رو که p-value کمتر از alpha دارن در موردشون فرض صفر رو رد کنیم و بگیم تفاوتی که بین ژنهای افراد سالم و بیمار وجود داره معنی دار هست.
حالا وقتی در مورد یک ژن این فرضیه رو بررسی میکنیم احتمال خطای نوع اول 0.05 هست. اگه بیایم در مورد n ژن این فرضیه رو بررسی کنیم احتمال خطای نوع اول چقدر هست؟ چقدر ممکنه که در گزارش نهایی نتایجمون، حداقل یک بار دچار خطای نوع یک بشیم؟ این احتمال برابر هست با:
فرض کنید n مقدارش 100 باشه، نمودار احتمالِ دست کم یک بار خطای نوع یک به صورت زیر میشه:
نمودار بالا داره میگه از یه جایی به بعد با احتمال 1 دچار خطای نوع اول میشیم. یعنی چی این حرف؟ یعنی به احتمال نزدیک به 1 حتماً ژنی رو به اشتباه گزارش خواهیم کرد که بین نمونههای سالم و بیمار دچار تفاوت معنی دار هست در حالیکه در واقعیت چنین تفاوتی وجود نداره. (یعنی به اشتباه اومدیم فرض H0 رو رد کردیم در حالیکه برقرار بوده).
حالا چطور میشه از این اشتباه جلوگیری کرد؟ یه راه اینکه به جای اینکه alpha رو به صورت ثابت معادل با 0.05 در نظر بگیریم، بیایم به صورت زیر در نظر بگیریم:
حالا اگر داریم 100 تا فرضیه رو باهم در نظر میگیریم تو حالتی که n=100 هست، آلفا به جای اینکه 0.05 باشه، برابر میشه با 0.000005.
حالا اگر تو این حالت بیایم نمودار خطارو بکشیم داریم:
یعنی همواره خطا تو این حالت زیر 0.05 میمونه.
روش دیگهای وجود داره برای این که مشکلی که در مورد خطا مطرح شد به وجود نیاد و اینکه بیایم آلفا رو ثابت نگه داریم اما هر دفعه به جای سنجیدن خود مقدار p-value و آلفا، بیایم p-value رو در n ضرب کنیم و حاصلش رو با 1 مینمم و بعد اون عدد به دست اومده رو با آلفا بسنجیم:
بعنوان مثال فرض کنید میخوایم 6 تا فرضیه رو باهم بسنجیم و مقادیر p-value محاسبه شده به صورت زیر باشه:
روشی که معرفی کردیم (ضرب n که در این مثال برابر با 6 هست در مقدار p-value و سپس مینمم گرفتن بین حاصل ضرب به دست اومده و 1) رو بهش bonferroni میگن. فرض کنید بیایم با این روش مقادیر p بالا رو اصلاح کنیم:
مقادیر اصلاح شده p-value به صورت بالا در میاد و به این معنی هست که فرض H0 رو میشه در مورد 2 فرضیه اول رد کرد و گفت که تفاوت بین ژنها معنیدار هست اما نشه در مورد 3 فرضیه آخر رد کرد.
با آزمونهای ناپارامتری آشنا شدیم و دیدیم که چگونه میشه ازشون استفاده کرد. فهمیدیم که چطور میشه روی n فرضیه باهم تست انجام داد و جلوی ایجاد خطای نوع اول رو هم گرفت.
اگر جایی ایراد یا مشکلی بود، حتما بهم بگید تا تصحیحش کنم. همچنین، پیشنهاد میکنم که حتماً صفحه گیتهاب این دوره رو مورد بررسی قرار بدین. حتماً به دردتون میخوره.
صفحه گیتهاب مرتبط با این دوره