محاسبات آماری در متلب
به نام خدا و سلام.
به جلسه سی و ششم از سری جلسات آموزش متلب خوش آمدید. آموزش نرم افزار متلب از وبسایت متلبپلاس به صورت حرفهای ارائه میشود. در این جلسه به آموزش محاسبات آماری در متلب میپردازیم. مباحث اساسی آمار شامل؛ میانگین، میانه، مد، واریانس، انحراف معیار و… به طور کامل ارائه میشود. دستوراتی مثل std در متلب، دستور var، دستور mean و… در متلب. البته پیش از پرداختن به این مباحث در متلب، ابتدا یک مقدمه کوتاه ریاضی ارائه میشود.
با متلب پلاس همراه باشید.
مقدمهای بر محاسبات آماری در متلب
پیش از پرداختن به مباحث آماری در متلب، ابتدا توضیحاتی درباره مباحث پایه آماری در ریاضی ارائه میکنیم. اگر یک مجموعه (جامعه آماری) را درنظر بگیریم، چند شاخص مهم برای آن قابل تعریف است. این شاخصها در دو دسته اصلی، از نظر آماری بررسی میشوند. شاخصهای مرکزی و شاخصهای پراکندگی. شاخصهای مرکزی شامل میانگین، میانه و مد میباشند. شاخصهای پراکندگی شامل واریانس، انحراف معیار و… میباشند. بجز این دو دسته شاخص اصلی، موارد دیگری نظیر کمینه (مینیمم)، بیشینه (ماکزیمم) و… نیز داریم.
اولین شاخص، میانگین است. میانگین براساس عملگر امید ریاضی، به صورت مجموع تقسیم بر تعداد تعریف میشود. اگر یک جامعه آماری را به دو بخش 50 درصد بالایی و پایینی تقسیم کنیم. میانه در وسط قرار میگیرد. مد نیز به نمونهای میگویند که بیشترین تکرار را در کل داشته باشد.
شاخصهای واریانس و انحراف معیار نیز پراکندگی دادهها نسبت به میانگین را نشان میدهند. هرچه انحراف معیار بیشتر باشد، دادههای پراکندهتری خواهیم داشت. برعکس، هرچه مقدار انحراف معیار کمتر باشد، دادههای متمرکز خواهیم داشت. در ادامهی آموزش matlab، فرمولهای محاسبه واریانس و انحراف معیار ارائه میشود.
محاسبه میانگین در متلب (دستور mean در متلب)
محاسبه میانگین در متلب با دستور mean انجام میشود. دستور mean(A) در متلب، میانگین دادههای A را محاسبه میکند. اگر A یک بردار باشد، میانگین دادههای آن را به عنوان خروجی میدهد. اما اگر A ماتریس باشد، میانگین هر ستون را محاسبه میکند. برای درک بهتر به مثالهای زیر دقت کنید.
ابتدا میانگین یک بردار را در متلب محاسبه میکنیم.
A = randi(100,[1,10])
A =
9 22 53 67 46 22 23 90 31 26
mean(A)
ans =
38.9000
حال یک ماتریس از اعداد صحیح تصادفی ایجاد کرده و میانگین آن را محاسبه میکنیم. نحوه ایجاد ماتریس تصادفی در جلسه آموزش اعداد تصادفی در متلب ارائه شده. برای مشاهده روی عبارت قرمز رنگ کلیک نمائید.
A = randi(100,[5,3])
A =
42 15 50
97 50 16
66 85 70
78 68 21
42 45 68
mean(A)
ans =
65.0000 52.6000 45.0000
خب همانطور که گفتیم، اگر دستور mean روی ماتریس بکار رود، میانگین هر ستون را میدهد. برای اینکه میانگین کل دادههای ماتریس را محاسبه کنیم، عبارت ‘all’ را در انتهای دستور mean اضافه میکنیم.
mean(A,'all')
ans =
54.2000
در حالت پبشفرض دستور mean میانگین ستونهای یک ماتریس را محاسبه میکند. اگر بخواهیم میانگین دادههای ماتریس A را روی سطرها محاسبه کنیم، mean(A,2) را اجرا میکنیم.
mean(A,2)
ans =
35.6667
54.3333
73.6667
55.6667
51.6667
اگر ماتریس یا برداری که میانگین آن را محاسبه میکنیم دارای درایه NaN باشد، میانگین محاسبه نمیشود. NaN یا nan در متلب به معنای تعریف نشدهاست. در این حالت عبارت ‘omitnan’ را در دستور mean اضافه میکنیم. به مثال زیر دقت کنید.
u = [1 nan 4 8 9 4 16];
mean(u)
ans =
NaN
mean(u,'omitnan')
ans =
7
محاسبه میانه و مد در متلب
دستور median و mode در متلب به ترتیب میانه و مد را محاسبه میکنند. اگر دادههای آماری را از کوچک به بزرگ مرتب کنیم، میانه دادهای است که در وسط قرار میگیرد. مد نیز نمونهای است که بیشترین تکرار را داشته باشد. دادههای زیر را درنظر گرفته و میانه و مد را برای آنها محاسبه میکنیم.
دستور median در متلب
دستور median(A) میانه دادههای A را محاسبه میکند. مشابه با mean، اگر A ماتریس باشد، میانه هر ستون را محاسبه میکند. median(A,’all’) میانه کل دادهها و median(A,2) میانه ماتریس A را روی سطرها محاسبه میکند. حال میانه دادههای شکل بالا را محاسبه میکنیم.
A = [15 9 16 9 20 14 10 9 10 19];
median(A)
ans =
12
دقت کنید که اگر بخواهیم میانه را به صورت دستی محاسبه کنیم، ابتدا دادهها را مرتب میکنیم. دادهای که در وسط قرار بگیرد، میانه خواهد بود. اگر تعداد زوج باشد و دو عدد در وسط داشته باشیم، میانگین آن دو عدد برابر با میانه است. مثلا برای محاسبه دستی میانه دادههای شکل بالا داریم:
مشاهده میکنیم که پاسخ محاسبه شده به صورت دستی با پاسخ متلب برابر است.
مشابه با mean، اگر درایهی nan در بردار یا ماتریس داشته باشیم، میانه محاسبه نمیشود. در این حالت عبارت ‘omitnan’ را به دستور median اضافه میکنیم.
دستور mode در متلب
دستور mode(A) مد دادههای A را محاسبه میکند. اگر A ماتریس باشد، mode(A) مد هر ستون را محاسبه میکند. mode(A,’all’) مد کل دادهها و mode(A,2) مد ماتریس A را روی سطرها محاسبه میکند. گفتیم که مد، دادهای است که بیشترین تکرار را دارد. حال اگر بخواهیم تعداد تکرار را هم ببینیم، دستور mode را با دو خروجی بکار میبریم. مد دادههای شکل بالا را محاسبه میکنیم.
A = [15 9 16 9 20 14 10 9 10 19];
mode(A)
ans =
9
چون عدد 9 بیشترین تکرار را داشته، پاسخ مد برابر با 9 است. برای این تعداد تکرار را هم ببینیم، به صورت زیر عمل میکنیم.
A = [15 9 16 9 20 14 10 9 10 19];
[M F] = mode(A)
M =
9
F =
3
که تکرار آن برابر با 3 بار است.
محاسبه مینیمم و ماکزیمم در متلب
کمینه (مینیمم) و بیشینه (ماکزیمم) یک مجموعهی آماری یک شاخص مهم است. در زیر به دستوراتی که مینیمم و ماکزیمم مجموعهی آماری را محاسبه میکند، میپردازیم.
دستور min در متلب
برای محاسبه مینیمم (کمینه) در متلب از دستور min استفاده میکنیم. حالتهای مختلفی که این دستور دارد را در زیر بررسی میکنیم.
- دستور min(A) کمینه مقدار دادههای A را میدهد. اگر A ماتریس باشد، کمترین مقدار هر ستون را محاسبه میکند.
- دستور min(A,B) کمترین مقدار بین A و B را محاسبه میکند. اگر A و B ماتریس و بردار باشند، کمترین مقدار هر درایه را میدهد.
- اگر A ماتریس باشد، min(A,[ ],’all’) کمترین مقدار در کل درایههای A را میدهد.
- اگر A ماتریس باشد، min(A,[ ],2) کمترین مقادیر هر سطر A را میدهد.
برای درک بهتر، ماتریس A را درنظر گرفته و مینیمم را روی ستونها، سطرها و کل محاسبه میکنیم.
A = randi(100,[5,3])
A =
36 29 8
84 76 6
59 76 54
55 39 78
92 57 94
min(A)
ans =
36 29 6
min(A,[],2)
ans =
8
6
54
39
57
min(A,[],'all')
ans =
6
دستور mink در متلب
دستور mink(A,k) از A تعداد k درایهی کمینه را میدهد. K مقدار کمینه A با استفاده از این دستور بدست میآیند. مثلا برای بدست آوردن 3 درایهی کمینه از A دستور mink(A,3) را اجرا میکنیم. برای مثال، یک بردار درنظر گرفته و 3 مقدار کمینه آن را محاسبه میکنیم.
u = [1 6 3 8 9 10 12];
mink(u,3)
ans =
1 3 6
دستور max در متلب
برای محاسبه ماکزیمم در متلب از دستور max استفاده میکنیم. حالتهای مختلفی که این دستور دارد را در زیر بررسی میکنیم.
- دستور max(A) بیشینه مقدار دادههای A را میدهد. اگر A ماتریس باشد، بیشترین مقدار هر ستون را محاسبه میکند.
- دستور max(A,B) بیشترین مقدار بین A و B را محاسبه میکند. اگر A و B ماتریس و بردار باشند، بیشترین مقدار هر درایه را میدهد.
- اگر A ماتریس باشد، max(A,[],’all’) بیشترین مقدار در کل درایههای A را میدهد.
- اگر A ماتریس باشد، max(A,[],2) بیشترین مقادیر هر سطر A را میدهد.
برای درک بهتر، ماتریس A را درنظر گرفته و ماکزیمم را روی ستونها، سطرها و کل محاسبه میکنیم.
A =
36 29 8
84 76 6
59 76 54
55 39 78
92 57 94
max(A)
ans =
92 76 94
max(A,[],2)
ans =
36
84
76
78
94
max(A,[],'all')
ans =
94
دستور maxk در متلب
دستور maxk(A,k) از A تعداد k درایهی بیشینه را میدهد. K مقدار ماکزیمم A با استفاده از این دستور بدست میآیند. مثلا برای بدست آوردن 3 درایهی ماکزیمم از A دستور maxk(A,3) را اجرا میکنیم. برای مثال، یک بردار درنظر گرفته و 3 مقدار ماکزیمم آن را محاسبه میکنیم.
u = [1 6 3 8 9 10 12];
maxk(u,3)
ans =
12 10 9
دستور bounds در متلب
دستور bounds(A) که باید با دو خروجی بکار رود، مینیمم و ماکزیمم A را میدهد. در واقع این دستور برای محاسبه ابتدا و انتهای بازه اعداد A بکار میرود. مثال زیر را درنظر بگیرید.
w = [13 18 17 5 31 9 12 8];
[S L] = bounds(w)
S =
5
L =
31
محاسبه واریانس در متلب (دستور var در متلب)
واریانس شاخصی است که مقدار پراکندگی دادهها از میانگین را نشان میدهد. برای محاسبه واریانس در متلب از دستور var استفاده میکنیم. دستور var(A) در متلب، واریانس A را محاسبه میکند. اگر A بردار باشد، پاسخ var(A) یک عدد (که همان واریانس است) خواهد بود. اما اگر A ماتریس باشد، واریانس دادههای روی ستونها را محاسبه میکند. برای محاسبه واریانس در ریاضی دو فرمول داریم. که در متلب هر کدام با یک عدد صفر یا یک در دستور var تعیین میشوند. به شکل زیر دقت کنید.
اگر صفر یا یک را وارد نکنیم، متلب به طور پیشفرض آن را صفر درنظر میگیرد. یعنی از رابطه اول (مخرج n-1) استفاده میکند. گفتیم که اگر A ماتریس باشد، var(A) واریانس هر ستون را محاسبه میکند. برای محاسبه واریانس هر سطر از دستور var(A,w,2) استفاده میکنیم. که w صفر یا یک است. دستور var(A,w,’all’) نیز واریانس کل دادههای ماتریس A را محاسبه میکند. w هم صفر یا یک است.
در مثال زیر، واریانس روی ستونها، سطرها و واریانس کل دادههای ماتریس A را محاسبه میکنیم.
A = randi(100,[4,3])
A =
86 41 19
63 8 24
36 24 42
52 13 5
var(A)
ans =
440.9167 213.6667 233.6667
var(A,0,2)
ans =
1.0e+03 *
1.1663
0.8003
0.0840
0.6323
var(A,0,'all')
ans =
578.8106
انحراف معیار در متلب (دستور std در متلب)
انحراف معیار برابر با جذر واریانس است. انحراف معیار پراکندگی را نشان میدهد و از جنس خود دادههای آماری است. مثلا اگر دادههای قد برحسب سانتی متر را داشته باشیم، انحراف معیار نیز از جنس سانتی متر است. برای محاسبه انحراف معیار در متلب از دستور std (مخفف Standard Deviation) استفاده میکنیم. دستور std(A) در متلب، انحراف معیار دادههای A را محاسبه میکند. باتوجه به اینکه برای واریانس 2 فرمول داشتیم، انحراف معیار نیز دو حالت دارد.
عدد صفر برای رابطه اول واریانس و عدد یک برای رابطه دوم واریانس است. البته اگر عدد صفر وارد نشود، به طور پیشفرض متلب رابطه اول را مبنا قرار میدهد. اگر A ماتریس باشد، std(A) انحراف معیار هر ستون را محاسبه میکند. برای محاسبه انحراف معیار هر سطر از دستور std(A,w,2) استفاده میکنیم. که w صفر یا یک است. دستور std(A,w,’all’) نیز انحراف معیار کل دادههای ماتریس A را محاسبه میکند. w هم صفر یا یک است.
در مثال زیر، انحراف معیار روی ستونها، سطرها و انحراف معیار کل دادههای ماتریس A را محاسبه میکنیم.
A =
86 41 19
63 8 24
36 24 42
52 13 5
std(A)
ans =
20.9980 14.6173 15.2862
std(A,0,2)
ans =
34.1516
28.2902
9.1652
25.1462
std(A,0,'all')
ans =
24.0585
دقت کنید که اگر بردار یا ماتریس دارای nan باشد، انحراف معیار آن محاسبه نخواهد شد. در این حالت برای محاسبه انحراف معیار، عبارت ‘omitnan’ را در دستور std اضافه میکنیم.
محاسبه میانگین و انحراف معیار از روی نمودار در متلب
تا به اینجا با استفاده از دستورات متلب، به محاسبه شاخصهای آماری پرداختیم. اما متلب به طور خودکار شاخصهای مهم آماری مثل میانگین، میانه، مد، انحراف معیار و… را محاسبه میکند. در واقع اگر یک نمودار را در متلب رسم کنیم، متلب به طور خودکار به دادههای آن را تحلیل میکند. برای درک بهتر، یک مثال ارائه میکنیم.
یک بردار تصادفی درنظر گرفته و با استفاده از plot آن را رسم میکنیم. آموزش کامل رسم انواع نمودار در متلب در جلسه 21 تا 27 ارائه شدهاست. برای مشاهده، روی عبارت قرمز رنگ کلیک کنید.
y = randi(100,[25,1]);
plot(y)
پس از اجرا نمودار زیر رسم خواهد شد.
حال بر روی Tools کلیک کرده و از منوی آن، گزینه را انتخاب میکنیم. مطابق شکل زیر:
پس از آن یک پنجره جدید به نام Data Statistics – 1 باز میشود. از این پنجره، گزینههای موردنظر را انتخاب میکنیم. مینیمم، ماکزیمم، میانه، مد، میانگین و انحراف معیار جزو گزینهها میباشند. مثلا میانگین، میانه و انحراف معیار را انتخاب میکنیم.
نتیجه به صورت زیر خواهد بود.
در این نمودار، میانگین (خط سبز رنگ)، میانه (خط قرمز رنگ) و انحراف معیار (دو خط صورتی رنگ) مشخص شدهاست.
محاسبه کواریانس در متلب (دستور cov در متلب)
فرمول کواریانس دو بردار تصادفی A و B به صورت زیر تعریف میشود.
در واقع پاسخ cov(A,B) یک ماتریس 2 در 2 است که درایههای قطر اصلی، واریانس A و B هستند.
برای درک بهتر، دو ماتریس تصادفی A و B درنظر میگیریم. کواریانس این دو ماتریس را محاسبه میکنیم.
A = randi(100,[4,3]);
B = randi(100,[4,3]);
cov(A,B)
ans =
1.0e+03 *
1.2952 -0.5706
-0.5706 1.0271
var(A,0,'all')
ans =
1.2952e+03
var(B,0,'all')
ans =
1.0271e+03
حال مقادیر واریانس A و B را نیز محاسبه میکنیم.
مشاهده میکنید که واریانس A و B همان مقادیر روی قطر اصلی ماتریس کواریانس هستند.
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) میانگین، مد، میانه، واریانس و انحراف معیار را برای یک بردار تصادفی 100 عضوی محاسبه کنید.
تمرین دوم) انحراف معیار و واریانس یک ماتریس تصادفی 5 در 5 را محاسبه کنید. محاسبات برای کل ماتریس انجام شود (نه روی سطر یا ستون).
تمرین سوم) در یک بردار تصادفی ستونی (50 عضوی)، 4 مینیمم و ماکزیمم اول را بیابید.
جمعبندی
جلسه سی و ششم از سری جلسات آموزش متلب به پایان رسید. این جلسه درباره محاسبات آماری در متلب صحبت کردیم. شاخصهای آماری اساسی مانند میانگین، میانه، مد، واریانس و انحراف معیار را در متلب محاسبه کردیم. برای هر مورد جزئیات و مثالهای متنوع ارائه شد. همچنین روش بدون نیاز به کدنویسی برای محاسبه شاخصهای آماری که براساس رسم نمودار است، ارائه شد. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
7 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام وقتتون بخیر.
ببخشید اگه ماتریس ما بیشتر از یک سطر باشه برای هر سطر باید میانگین، واریانس، انحراف معیار و .. رو جدا محاسبه کنه یا برای کل درایه های سطر اول و دوم رو بگیره؟
سلام و عرض ادب
همانطور که در متن بالا اشاره شده، دستورات آماری اگر روی ماتریس بکار روند، عملیات را روی هر ستون انجام میدهند.
برای محاسبه روی سطر یا کل درایهها باید در هنگام اجرای دستور، یک مورد اضافه کنیم.
مثلا برای اینکه میانگین کل دادههای ماتریس را محاسبه کنیم، عبارت ‘all’ را در انتهای دستور mean اضافه میکنیم.
mean(A,’all’)
همچنین برای محاسبه میانگین روی سطرهای یک ماتریس، دستور mean(A,2) را در متلب اجرا میکنیم.
سلام و عرض احترام
اگر ما یک جامعه اماری 52 نفره داشته باشیم و 42 فاکتور را روی انها بررسی کنیم انگاه باید برای گرفتن واریانس (ANOVA) در متلب چه دستوری را بنویسم؟
با سلام و احترام
برای استفاده از دستورات محاسبه واریانس anova بایستی تولباکس آمار و یادگیری ماشین (Statistics and Machine Learning Toolbox) رو هنگام نصب متلب، نصب کرده باشید.
دستوراتی که برای محاسبه واریانس به این روش هست، عبارتند از:
anova1(y,group)
anova2(y,reps)
anovan(y,group)
تشریح کامل طرز استفاده از این دستورات و مثالهای حل شده در راهنمای متلب وجود داره. میتونید این دستورات رو در راهنما سرچ کنید.
بازهم اگر سوالی بود، در خدمتیم.
با سلام و ارادت.من نمیخوام از دستور اصلی استفاده بشه و میخوام که فرمول اماری ان را کد نویسی کنم. اطلاع دارید چطور میتوان این کار را انجام داد؟ یک فرمول ساده ی سیگمایی هست
سلام مجدد. خیلی ممنون از پاسخگویی دقیق و حرفهای تون.
سلام اگر بخواهیم روی یک ماتریس فراوانی و درصد فراونی را محاسبه کنیم چکار باید کرد.