متغیر فاکتور (Factor) یا متغیر عامل در R — راهنمای کاربردی
اغلب با نام متغیر در برنامهنویسی یا ریاضیات برخورد کردهاید. هنگامی که به مقدار یا دادهای دسترسی نداریم ولی میخواهیم از آن در بیان فرمولها یا رابطهها استفاده کنیم، از علامت یا نماد استفاده میکنیم. این نام یا علامت، نماینده همه مقدارهایی است مشخص نیستند ولی ممکن است در آینده (دور یا نزدیک) به کمک اندازهگیری یا محاسبات و ... برای آن مقداری مشخص شود. از آنجایی که قبل از چنین اندازهگیری یا انجام محاسبات، مقداری برای در دسترس نیست به آنها متغیر میگویند. همچنین ممکن است در زمان یا مکان یا موقعیتهای مختلف دیگر، مقدارهای مختلفی برای متغیر بدست آید. «متغیر فاکتور» یا «متغیر عامل» (Factor)، نوع خاصی از متغیرها هستند که در «تحلیلهای آماری» (Statistical Data Analysis) و بخصوص «یادگیری ماشین» (Machine Learning) کاربرد مهمی دارند.
با توجه به نوع مقدارهایی که یک متغیر میتواند داشته باشد، آنها را به دو گروه «کمی» (Quantity) و «کیفی» (Quality) دستهبندی کردهاند. متغیرهای کمی اغلب بوسیله اعداد نشان داده میشوند در حالیکه بیشتر متغیرهای کیفی به صورت متنی، مقدار دهی میشوند. البته ممکن است برای نمایش مقدار متغیر کیفی از اعداد نیز استفاده کرد ولی این اعداد فقط به معنی کد یا شماره در نظر گرفته میشوند. به این ترتیب براساس مقدارهای عددی، طبقات یا سطوح متغیرهای کیفی را نمایش میدهیم.
در این نوشتار به بررسی متغیرهای کیفی میپردازیم که ابزاری برای تفکیک انجام محاسبات در مدلهای آماری هستند. این متغیرها را عامل یا فاکتور مینامیم. برای آشنایی بیشتر با انواع دیگر دادهها و متغیرها، بهتر است مطلب جامعه آماری — انواع داده و مقیاسهای آنها را مطالعه کنید. البته خواندن مطلب توابع Apply در زبان برنامه نویسی R — راهنمای کاربردی نیز خالی از لطف نیست.
متغیر فاکتور یا عامل
برای مباحث آمار و برنامهنویسی، «متغیر عامل» یا «فاکتور» (Factor)، دارای مقدارهای عددی محدود است. این اعداد و ارقام معمولا به صورت اعداد صحیح ثبت یا نمایش داده میشوند. گاهی به متغیرهای فاکتور یا عامل، «متغیرهای طبقهای» (Categorical) نیز میگویند. معمولا مقدارهای عددی به کار رفته برای متغیرهای طبقهای زیرمجموعهای با پایان از اعداد طبیعی هستند. برای مثال میتوان کشور محل تولد، جنسیت، سمت اداری و ... را از دسته متغیرهای طبقهای در نظر گرفت.
معمولا در «مجموعه داده» (Dataset) متغیرهای کمی و کیفی در کنار یکدیگر حضور دارند. متغیرهای کمی معمولا دارای مقدارهایی از اعداد حقیقی هستند. برای مثال قد و وزن متغیرهایی هستند که مقدارشان به وسیله ابزار اندازهگیری بدست آمده و ممکن است در یک بازه از اعداد قرار گیرند. مثلا قد یک فرد ممکن است برابر با 1.96 متر باشد. از آنجایی که مجموعه اعداد حقیقی دارای خاصیت پیوستگی هستند (یعنی بین هر دو عدد حقیقی بینهایت عدد حقیقی دیگر وجود دارد) به متغیرهای کمی از این دست، «متغیرهای پیوسته» (Continuous Variable) نیز میگویند.
وجود هر دو این متغیرها در مجموعه داده کمک میکند که شاخصهای آماری را بین دو یا چند طبقه از جامعه آماری مقایسه کرد. به این ترتیب براساس متغیرهای طبقهای جامعه دستهبندی شده و برای هر طبقه یک شاخص آماری یکسان به منظور مقایسه محاسبه میشود.
متغیر فاکتور یا عامل در R
در زبان برنامه نویسی R، مقدارهای متغیرهای طبقهای را در یک متغیر عامل یا فاکتور ذخیره میکنند. البته ممکن است چنین مقدارهایی را در متغیرهای پپوسته نیز ذخیره کرد ولی کارایی و مفهوم طبقهای بودن در چنین حالتی از آنها گرفته میشود.
در بسیاری از الگوریتمهای «یادگیری ماشین» (Machine Learning)، متغیرهای کیفی با مقدارهای متنی قابل استفاده نیستند. با استفاده از نسبت دادن آنها به عنوان متغیر فاکتور در R، به طور خودکار کدهای عدد برای هر سطح از متغیر کیفی یا طبقهای ایجاد میشود. بنابراین از این پس به راحتی در الگوریتمهای یادگیری ماشین یا مدلسازی قابل استفادهاند. این کار به کمک تابع صورت میپذیرد. شکل دستوری این تابع به صورت زیر است.
1factor(x = character(), levels, labels = levels, ordered = is.ordered(x))
2Arguments:
3- x: A vector of data. Need to be a string or integer, not decimal.
4- Levels: A vector of possible values taken by x. This argument is optional. The default value is the unique list of items of the vector x.
5- Labels: Add a label to the x data. For example, 1 can take the label `male` while 0, the label `female`.
6- ordered: Determine if the levels should be ordered.
بنابراین با چهار پارامتر در این تابع روبرو هستیم. جدول زیر به معرفی این پارامترها پرداخته است.
پارامتر | عملکرد |
x | برداری که شامل مقدارهای متنی یا عددی است و باید به متغیر عامل تبدیل شود. |
levels | سطوح متغیر x که باید در طبقه بندی نقش داشته باشند. (اختیاری) |
labels | برچسب برای مقدارهای متغیر عامل (مثلا مقدار کد «۱» برای «مردان» و «۰» برای «زنان» |
ordered | تعیین مرتبسازی سطوح متغیر عامل |
برای روشن شدن موضوع بهتر است از یک مثال کمک بگیریم.
مثال ۱
براساس کد زیر جنسیت ۵ نفر که در یک متغیر کیفی (متنی) ثبت شده، تبدیل به متغیر عامل می شود.
1# Create gender vector
2gender_vector <- c("Male", "Female", "Female", "Male", "Notrecognize")
3class(gender_vector)
4# Convert gender_vector to a factor
5factor_gender_vector <- factor(gender_vector)
6factor_gender_vector1 <-factor(gender_vector,levels = c("Male","Female"))
7factor_gender_vector
8factor_gender_vector1
9class(factor_gender_vector)
10class(factor_gender_vector1)
مشخص است که بوسیله تابع factor در متغیر factor_gender_vector متغیر متنی به متغیر عامل یا فاکتور تبدیل شده است که در خروجی سطوح متغیر عامل را به صورت Female, Male, Notrecognize خواهیم دید. همچنین در متغیر factor_gender-vector1 نیز فقط دو مقدار Male و Female به عنوان سطوح متغیر عامل در نظر گرفته شدهاند.
1> factor_gender_vector
2[1] Male Female Female Male Notrecognize
3Levels: Female Male Notrecognize
4> factor_gender_vector1
5[1] Male Female Female Male <NA>
6Levels: Male Female
7> class(factor_gender_vector)
8[1] "factor"
9> class(factor_gender_vector1)
10[1] "factor"
نکته: از متغیر عامل میتوان در تحلیل واریانس، رگرسیون طبقهای، آزمون فرض دو جامعه مستقل و ... استفاده کرد. اگر متغیر طبقهای از نوع فاکتور یا عامل نباشد، برنامه نوشته شده برای چنین تحلیلهایی در R دچار خطا خواهد شد.
ایجاد متغیر فاکتور براساس مقدارهای اسمی و ترتیبی
همانطور که در مطلب جامعه آماری — انواع داده و مقیاسهای آنها خواندید، متغیرهای کیفی به دو گروه متغیرهای کیفی با «مقیاس اسمی» (Nominal) و متغیرهای کیفی با «مقیاس ترتیبی» (Ordinal) دستهبندی میشوند.\
زمانی که از مقیاس اسمی استفاده کنیم، هیچ ترتیبی برای مقدارهای متغیر عامل در R ایجاد نمیشود.
مثال ۲
در کد زیر، برای متغیر «عامل رنگ» یا factor_color ترتیبی برای قرارگیری رنگها در نظر گرفته نشده است.
1# Create a color vector
2color_vector <- c('blue', 'red', 'green', 'white', 'black', 'yellow')
3# Convert the vector to factor
4factor_color <- factor(color_vector)
5factor_color
به این ترتیب خروجی به صورت زیر خواهد بود.
1> factor_color
2[1] blue red green white black yellow
3Levels: black blue green red white yellow
در مقابل مقدارها یا دادههای کیفی اسمی، مقدارهای کیفی از نوع ترتیبی قرار دارند که ذاتا دارای ترتیب هستند. این ترتیب ممکن است به صورت «صعودی» (Ascending) یا «نزولی» (Descending) باشد. منظور از ترتیب صعودی برای اعداد، قرارگیری از کمترین مقدار در اولین مکان و بزرگترین مقدار در انتها است. همچنین در ترتیب نزولی، قرارگیری بیشترین مقدار در ابتدا و کوچکترین مقدار در انتهای لیست مورد نظر است. برای مرتب سازی صعودی یا نزولی دادهها یا مقدارهی متنی، ملاک ترتیب حروف الفبا هر عبارت است که از حروف ابتدایی کلمه آغاز میشود.
مثال ۳
فرض کنید رخداد زلزله در اوقات مختلف روز در یک متغیر ثبت شدهاند. برای تبدیل آنها به متغیر عامل از دستورات زیر استفاده کردهایم.
1# Create Ordinal categorical vector
2day_vector <- c('evening', 'morning', 'afternoon', 'midday', 'midnight', 'evening')
3# Convert `day_vector` to a factor with ordered level
4factor_day <- factor(day_vector, order = TRUE, levels =c('morning', 'midday', 'afternoon', 'evening', 'midnight'))
5# Print the new variable
6factor_day
با اجرای این کد متغیر day_vector تبدیل به یک متغیر عامل شده و سطوح مرتب شده نیز در قسمت Levels دیده میشوند.
1[1] evening morning afternoon midday midnight evening
2Levels: morning < midday < afternoon < evening < midnight
حال میتوانیم جمع تعداد زلزلهها را در مقاطع مختلف روز به کمک تابع دریافت کنیم.
1## Levels: morning < midday < afternoon < evening < midnight
2# Append the line to above code
3# Count the number of earthquake of each level
4summary(factor_day)
خروجی به صورت زیر خواهد بود. مشخص است که R، تعداد زلزلهها را به ترتیب معرفی شده در قسمت Levels محاسبه کرده است.
1> summary(factor_day)
2 morning midday afternoon evening midnight
3 1 1 1 2 1
ایجاد متغیر فاکتور براساس مقدارهای متغیر پیوسته
به منظور ایجاد متغیر عامل براساس یک متغیر پیوسته باید ابتدا آن را با استفاده از فاصلههای تعریف شده به یک متغیر ترتیبی تبدیل کرده، سپس از آن یک متغیر فاکتور ساخت.
هر دو این اعمال در R به کمک تابع صورت میگیرد.
1cut(x, breaks, labels = NULL,
2 include.lowest = FALSE, right = TRUE, dig.lab = 3,
3 ordered_result = FALSE, …)
جدول زیر به معرفی پارامترهای این تابع پرداخته است.