در آمار شاخصهای شکل (Shape Measures) بازتابدهنده طرح کلی توزیع دادهها است. شاخصهای شکل بهویژه برای متغیرهای پیوسته بکار میرود. دو شاخص مهم شکل، چولگی (Skewness) و کشیدگی (Kurtosis) هستند.
چولگی
چولگی میزان متقارن بودن توزیع را میسنجد. یک توزیع متقارن مانند توزیع نرمال (Normal Distribution) دارای چولگی صفر است. توزیعی که یک دنباله بلند در سمت راست آن دارد، دارای چولگی مثبت است. در مقابل، چولگی توزیعی که یک دم بلند در سمت چپ دارد، منفی است (شکل-۱).

برای محاسبه چولگی، گشتاور دوم و سوم توزیع بکار میرود. گشتاور r ام یک توزیع، میانگین انحراف توزیع نسبت به میانگین () به توان r ام را میسنجد. گشتاور r ام یک توزیع از رابطه زیر به دست میآید:
چولگی جامعه نسبت گشتاور سوم به واریانس به توان ۱٫۵ است و از رابطه زیر محاسبه میگردد:
در رابطه بالا، و
به ترتیب گشتاور دوم و سوم توزیع هستند. توجه کنید گشتاور دوم، همان واریانس توزیع است. چولگی توزیع نرمال صفر است. برای چنین توزیع متقارنی، میانگین، میانه و مد دادهها با یکدیگر برابر است. درحالیکه برای دادههای دارای چولگی، چنین نیست. برای نمونه، در یک توزیع با چولگی مثبت ازآنجاکه میانگین بیشترین تأثیر را از دادههای پرت (دادههای واقع در انتهای دنباله سمت راست) میگیرد، بیشتر از میانه و مد به سمت راست متمایل میشود (شکل-۲).

کشیدگی
کشیدگی میزان قلهگی (Peakedness) نسبی توزیع را سنجش میکند. بهعنوان یک ملاک مقایسه، توزیع نرمال دارای کشیدگی متوسط (Mesokurtic) است. توزیع متقارنی که قله منحنی آن بالاتر از منحنی نرمال است و دنبالههای پهنتری از توزیع نرمال دارد، در اصطلاح کشیده (Leptokurtic) نامیده میشود. در مقابل، توزیع متقارن که قله منحنی آن پایینتر از منحنی نرمال است و دنبالههای نازکتری از توزیع نرمال دارد، در اصطلاح پخ (Platykurtic) نامیده میشود (شکل-۳).

کشیدگی جامعه از نسبت گشتاور چهارم به واریانس به توان ۲ است و از رابطه زیر محاسبه میگردد:
در رابطه بالا، و
به ترتیب گشتاور دوم و چهارم توزیع هستند. توجه کنید کشیدگی توزیع نرمال ۳ است.
محاسبه چولگی و کشیدگی در R
در این مثال من برداری مانند x با ۲۰۰ درایه ایجاد کردم که درایههای آن بهصورت تصادفی از توزیع ویبول (Weibull) با پارامترهای shape = 1.5 و scale = 3 بهدستآمدهاند. توجه کنید x میتواند هر نمونه دادهای باشد. هیستوگرام دادهها در شکل-۴ آمده است. برای محاسبه چولگی و کشیدگی در نرم افزار R، یک تابع به اسم moments_func نوشتم، تا بتوانم گشتاور r ام را محاسبه کنم و سپس از آن برمبنای روابط بالا، برای محاسبه شاخصهای شکل استفاده کردم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | > #Create Synthetic Data > set.seed(123) > x <- rweibull(200, shape = 1.5, scale = 3) > #Histogram of Data > hist(x, breaks = 25) > #Calculate Moments > moments_func <- function(x, r = 2) sum((x-mean(x)) ^ r) / length(x) > #Skewness > moments_func(x, r = 3) / moments_func(x, r = 2) ^ 1.5 [1] 1.237006 > #Kurtosis > moments_func(x, r = 4) / moments_func(x, r = 2) ^ 2 [1] 6.377893 |
راه حل دیگر، استفاده از کتابخانه moments است. توابع skewness و kurtosis برای محاسبه چولگی و کشیدگی بکار می روند.
1 2 3 4 5 6 7 8 | > #Call Moments Library > library('moments') > #Calculate Skewness and Kurtosis > skewness(x) [1] 1.237006 > kurtosis(x) [1] 6.377893 |
محاسبه چولگی و کشیدگی در پایتون
در پایتون من آرایهای مانند x با ۲۰۰ درایه ایجاد کردم که درایههای آن بهصورت تصادفی از توزیع ویبول (Weibull) با پارامترهای shape = 1.5 و scale = 3 بهدستآمدهاند. توجه کنید x میتواند هر نمونه دادهای باشد. برای محاسبه چولگی و کشیدگی در نرم افزار پایتون، یک تابع به اسم moments_func نوشتم، تا بتوانم گشتاور r ام را محاسبه کنم و سپس از روابط بالا، برای محاسبه شاخصهای شکل استفاده کردم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #Required Libraries import numpy as np import matplotlib.pyplot as plt #Create Synthetic Data np.random.seed(123) x = 3 * np.random.weibull(1.5, size = 200) #scale = 3, shape = 1.5 #Histogram of Data plt.hist(x, bins = 25) #Calculate Moments def moments_func(x, r = 2): return(sum((x - x.mean()) ** r) / len(x)) #Skewness moments_func(x, r = 3) / moments_func(x, r = 2) ** 1.5 1.1228409503894643 #Kurtosis moments_func(x, r = 4) / moments_func(x, r = 2) ** 2 4.7557234298978885 |
راه حل دیگر، استفاده از کتابخانه scipy در پایتون است. در این کتابخانه، ماژول stats حاوی توابع skew و kurtosis است که برای محاسبه چولگی و کشیدگی بکار می روند.
1 2 3 4 5 6 7 8 9 10 | #Calculate Skewness and Kurtosis from scipy.stats import skew, kurtosis print(skew(x, bias = True)) 1.122840950389464 print(kurtosis(x, fisher = False, bias = True)) 4.755723429897887 |
منابع:
Levine, D. M., Berenson, M. L., & Stephan, D. (1999). “Statistics for Managers Using Microsoft Excel”, Upper Saddle River, NJ: Prentice Hall
Weiers, R. M. (2010). “Introduction to Business Statistics”, Cengage Learning