نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

  • یکشنبه ۲۹ خرداد ۱۴۰۱
  • بازدید ۵۴۴ نفر

تصویر normalization-box-cox-transformation-r_23868_1 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

نرمال سازی با تبدیل باکس کاکس (Box-Cox) در R

در این مقاله آموزشی به روش نرمال سازی با تبدیل باکس کاکس (Box-Cox) در محیط برنامه R می پردازیم که نوع خاصی از تبدیل های توانی (Power Transformation) می باشد. این مقاله در 5 بخش شامل توضیحات کلی از نرمال سازی با باکس کاکس ، آشنایی با خانواده Box-Cox ، تابع boxcox در R ، مثالی از Box Cox transformation و همچنین استخراج دقیق لامبدا می باشد.

نرمال سازی با تبدیل Box-Cox

روش نرمال سازی با تبدیل باکس کاکس (Box-Cox) یک شیوه جهت تبدیل متغیرهای وابسته غیرنرمال به داده هایی با توزیع نرمال می باشد. نرمال بودن چنین داده هایی فرض مهمی برای خیلی از تکنیک های آماری می باشد. در صورتی که داده های شما دارای توزیع نرمال نباشند، به کمک نرمال سازی با تبدیل Box-Cox قادر خواهید بود تا توزیع احتمالی آنها را تقریبا به توزیع نرمال نزدیک کرده و بتوانید از مزایای روش های پارامتری و آزمون های پرتوان آن جهت انجام تحلیل های آماری استفاده کنید. تبدیل باکس کاکس (Box-Cox) یک نوع تبدیل توانی است که عدم تقارن یک متغیر، واریانس های مختلف یا غیر خطی بودن بین متغیرها را تصحیح می کند. در نتیجه برای تبدیل یک متغیر و به دست آوردن یک متغیر جدید که از توزیع نرمال پیروی می کند، بسیار مفید است.

خانواده Box-Cox

تبدیل توابع Box-Cox برای مقادیر مختلف لامبدا (lambda) با عبارت زیر داده می شود:

تصویر normalization-box-cox-transformation-r_23868_2 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

در اینجا y متغیری است که باید تبدیل شود و لامبدا نیز پارامتر تبدیل است. با این حال، رایج ترین تبدیل ها در جدول زیر نشان داده شده است:

تصویر normalization-box-cox-transformation-r_23868_3 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

اگر پارامتر تبدیل تخمین زده شده نزدیک به یکی از مقادیر جدول قبلی باشد، در عمل توصیه می شود که به جای مقدار دقیق، مقدار جدول را انتخاب کنید، زیرا تفسیر مقدار از جدول آسان تر است.

تابع boxcox در R

هنگامی که از R استفاده می کنیم، می توانیم از تابع boxcox و پکیج MASS استفاده کنیم تا پارامتر تبدیل را با تخمین حداکثر احتمال تخمین بزنیم. این تابع فاصله اطمینان 95% پارامتر را نیز به ما می دهد. آرگومان های تابع به شرح زیر است:

The boxcox function

boxcox(object, # lm or aov objects or formulas
lambda = seq(-2, 2, 1/10), # Vector of values of lambda
plotit = TRUE, # Create a plot or not
interp, # Logical. Controls if spline interpolation is used
eps = 1/50, # Tolerance for lambda. Defaults to 0.02.
xlab = expression(lambda), # X-axis title
ylab = "log-Likelihood", # Y-axis title
…) # Additional arguments for model fitting

مثالی از تبدیل باکس کاکس

نمونه بردار x را در نظر بگیرید که از توزیع نرمال پیروی نمی کند:

Sample data

x <- c(0.103, 0.528, 0.221, 0.260, 0.091,
1.314, 1.732, 0.244, 1.981, 0.273,
0.461, 0.366, 1.407, 0.079, 2.266)

# Histogram of the data
hist(x)

برای محاسبه بهینه لامبدا باید یک مدل خطی را با تابع lm محاسبه کنید و به صورت زیر به تابع boxcox منتقل کنید:

تصویر normalization-box-cox-transformation-r_23868_4 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

# install.packages(MASS)
library(MASS)

boxcox(lm(x ~ 1))

خروجی تابع به صورت نمودار زیر خواهد بود:

تصویر normalization-box-cox-transformation-r_23868_5 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

توجه داشته باشید که خط عمودی خط چین نشان دهنده پارامتر تخمینی لامبدا و بقیه 95% فاصله اطمینان تخمین است. نمودار بالا نشان می دهد که 0 در داخل فاصله اطمینان لامبدای بهینه قرار دارد و از آنجایی که تخمین پارامتر در این مثال واقعاً نزدیک به 0 است، بهترین گزینه اعمال تبدیل لگاریتمی داده ها است (به جدول ارائه شده در توضیحات بالا توجه کنید).

# Transformed data
new_x <- log(x)

# Histogram
hist(new_x)

تصویر normalization-box-cox-transformation-r_23868_6 نرمال سازی با تبدیل باکس کاکس (Box-Cox) در زبان R

اکنون داده ها بیشتر شبیه به دنبال کردن یک توزیع عادی به نظر می ‌رسند، اما می توانید به عنوان مثال یک آزمایش آماری را برای بررسی آن انجام دهید، مثلا تست Shapiro-Wilk :

shapiro.test(new.x)

Output

Shapiro-Wilk normality test
data: new_x
W = 0.9, p-value = 0.2

از آنجایی که p-value بیشتر از سطوح معنا ‌دار معمول (1%، 5% و 10%) است، هیچ مدرکی برای رد فرضیه صفر نرمال بودن نداریم.

استخراج دقیق لامبدا

اگر فاصله اطمینان پارامتر تخمین زده شده با هیچ مقدار جدول مطابقت نداشته باشد، می توانید لامبدا دقیق را با استفاده از کد زیر استخراج کنید:

# install.packages(MASS)
library(MASS)

b <- boxcox(lm(x ~ 1))

# Exact lambda
lambda <- b$x[which.max(b$y)] # -0.02

اکنون می توانید با استفاده از عبارت قسمت اول، تبدیل متغیر را انجام دهید:

new_x_exact <- (x ^ lambda - 1) / lambda

 

مطالب مرتبط
ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است