آمار، داده کاوی ۲۶۵۵ بازدید

یکی از روش‌های چند متغیره به منظور کاهش ابعاد یک مسئله با متغیرهای زیاد، استفاده از «تحلیل عاملی» (Factor Analysis) است. در این روش با استفاده از رابطه‌ای که بین متغیرهای قابل مشاهده وجود دارد، متغیرهای جدید ایجاد شده و مدل‌سازی و تحلیل‌ها، براساس آن‌ها صورت می‌گیرد. به چنین متغیرهایی «عامل» (Factor) گقته می‌شود. نوع انتخاب این متغیرها به شکلی است که بیشترین «تغییرات» (Variation) را توجیه کنند. در نتیجه با استفاده از تجزیه واریانس یا معیارهای پراکندگی، این عامل‌ها شناسایی شده و به کار گرفته می‌شوند. در این نوشتار به معرفی و آشنایی با تحلیل عاملی و نحوه پیاده‌سازی آن در پایتون می‌پردازیم و به کمک مثال‌های کاربردی، شیوه اجرای آن را فرا می‌گیریم.

برای آشنایی بیشتر با موضوع تحلیل عاملی بهتر است مطالب تحلیل مولفه اساسی (PCA)  و متغیر پنهان در مدل‌ ساختاری — به زبان ساده را مطالعه کنید. همچنین خواندن نوشتارهای هم خطی در مدل رگرسیونی — به زبان ساده و تحلیل واریانس (Anova) — مفاهیم و کاربردها نیز خالی از لطف نیست.

آشنایی با تحلیل عاملی و پیاده‌ سازی آن در پایتون

تحلیل عاملی یا به اختصار FA یکی از روش‌های تحلیل اکتشافی (Exploratory) در آمار محسوب می‌شود. به کمک این تحلیل قادر هستیم متغیرهای پنهان (Latent Variables) را با استفاده از متغیرهای قابل مشاهده (Observable Variables) جستجو و محاسبه کنیم. به این ترتیب با استفاده از تکنیک FA می‌توانیم ابعاد یا متغیرهای مربوط به مدل‌سازی در یک مسئله پیچیده را کاهش دهیم. در نتیجه FA را یک روش برای کاهش بُعد (Dimension Reduction) یک مسئله پیچیده نیز می‌توان در نظر گرفت.

از تحلیل عاملی در حوزه‌های مختلفی استفاده می‌شود. برای مثال در تحقیقات بازار، روان‌شناسی، علوم مالی و تحقیق در عملیات تحلیل عاملی به کار گرفته می‌شود. به عنوان نمونه در حوزه علوم مرتبط با تحقیقات بازار، تحلیل عاملی می‌تواند میزان حساسیت مشتریان نسبت به تغییرات قیمت را برآورد کند. همچنین از این تکنیک برای شناخت تمایل مشتری برای خرید از یک نام تجاری خاص می‌توان استفاده کرد.

در این نوشتار با عناوین زیر آشنا خواهیم شد:

  • تحلیل عاملی (Factor Analysis)
  • انواع روش‌های تحلیل عاملی
  • محاسبات در تحلیل عاملی
  • تعیین تعداد عامل‌ها
  • تحلیل عاملی و تحلیل مولفه‌های اصلی
  • آزمون کفایت
  • تفسیر نتایج حاصل از تحلیل عاملی

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

تحلیل عاملی

یکی از انواع تحلیل‌های مربوط به «مدل‌های خطی» (Linear Model) در آمار، «تحلیل عاملی» (Factor Analysis) است. با استفاده از تحلیل عاملی، قادر به تفسیر و البته تفکیک واریانس مشاهدات به واریانس عوامل یا متغیرهای پنهان خواهیم بود. متغیرهای قابل مشاهده، متغیرهایی هستند که مقدارهای آن‌ها با توجه به نمونه‌گیری، اندازه‌گیری شده و قابل استفاده هستند. در مقابل، عامل یا متغیرهای پنهان با ترکیب خطی خود متغیرهای قابل مشاهده را می‌سازند.

هر عامل میزان مشخصی از تغییرات یا واریانس کل مدل را توصیف می‌کند. از طرفی متغیرهای پنهان یا عامل‌ها قادر به کاهش ابعاد یک مسئله نیز هستند. در زیر یک مدل تحلیل عاملی برای توصیف تغییرات متغیر $$Y$$ را با استفاده از دو عامل $$F_1$$ و $$F_2$$ را مشاهده می‌کنید. همانطور که دیده می‌شود متغیر قابل مشاهده $$Y$$، توسط ترکیب خطی از این متغیرهای پنهان ایجاد شده است.

$$\large Y_i=\beta_{i0}+\beta_{i1}F_1+\beta_{i2}F_2+e_i$$

رابطه ۱

تحلیل عاملی را می‌توان به صورت تبدیل متغیرهای مربوط به یک مدل از $$X_1,X_2,\cdots, X_l$$ به $$F_1,F_2,\cdots,F_k$$ در نظر گرفت که مسلما مقدار $$k$$ بسیار کوچکتر از $$l$$‌ است. به این معنی که تعداد عامل‌ها از تعداد متغیرهای قابل مشاهده کمتر است. این امر می‌تواند توجیهی برای استفاده از کاهش بُعد در تحلیل عاملی در نظر گرفته شود.

تصویر زیر گویایی چنین ترکیبی است. همانطور که دیده می‌شود متغیرهای قابل مشاهده از نظرسنجی یک رستوران را می‌توان با منشا یک متغیر پنهان به نام «رضایت غیرخوراکی» در نظر گرفت که یک متغیر پنهان است. به عنوان یک متغیر پنهان دیگر با نام «رضایت خوراکی»، می‌توان متغیرهای قابل مشاهده «میزان رضایت از مزه غذا»، «دمای غذای سرو شده»، «تازگی غذا»، را تولید کند. واضح است که «رضایت خوراکی» و «رضایت غیرخوراکی» غیر قابل اندازه‌گیری (پنهان) ولی متغیرهای دیگر مانند «زمان انتظار»، «تمیزی ظروف»، «مزه غذا»، «دمای غذار سرو شده» و … قابل اندازه‌گیری (قابل مشاهده) هستند.

factor creating
شکل ۱- ایجاد متغیرهای پنهان و ارتباط آن‌ها با متغیرهای قابل اندازه‌گیری

متغیرهای پنهان تولید شده در شکل ۱ می‌توانند به کمک تکنیک تحلیل عاملی ایجاد شوند.

فرضیه‌های اولیه در روش تحلیل عاملی

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

  • داده‌ها نباید شامل مشاهده پرت یا «دورافتاده» (Outlier) باشند.
  • اندازه نمونه (Sample Size) باید از تعداد عامل‌ها بیشتر باشد.
  • «همخطی کامل» (Perfect Milticollinearity) بین متغیرها وجود نداشته باشد.
  • پراکندگی داده‌ها در بین متغیرها نباید یکنواخت باشد. این خاصیت را به نام «یکنواختی» (Homoscedasticity) می‌شناسند. به این ترتیب متغیرها نباید به یک شکل توزیع شده باشند.

انواع روش‌های تحلیل عاملی

روش تحلیل عاملی را به دو شیوه می‌توان پیاده‌سازی کرد. روش «تحلیل عاملی اکتشافی» (Explanatory Factor Analysis) یا EFA که یکی از معمول‌ترین روش‌ها در حوره تحقیقات مدیریتی و علوم اجتماعی محسوب می‌شود. در این شیوه فرض مرتبط بودن یا عامل‌پذیر بودن همه متغیرهای قابل مشاهده در نظر گرفته می‌شود. به این ترتیب هر متغیر قابل مشاهده ترکیب خطی از همه عوامل خواهد بود.

روش دیگر که به «تحلیل عاملی تاییدی» (Confirmatory Factor Analysis) یا CFA معروف است، براساس ارتباط بین گروهی از متغیرهای قابل مشاهده با هر عامل استوار است. به این ترتیب مثلا اگر ۲۰ عامل وجود داشته باشد، متغیر قابل مشاهده اول فقط با متغیرهای پنهان ۱ تا ۵ قابل توصیف بوده و متغیر قابل مشاهده ۲ با متغیرهای پنهان یا عامل‌های ۶ تا ۹ و متغیر قابل مشاهده شماره ۳ با متغیرهای پنهان بعدی در ارتباط است. این روش به استخراج عوامل اصلی و پایه‌ای می‌پردازد.

محاسبات در تحلیل عاملی

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

  • استخراج عوامل‌: در این گام، تعداد عامل‌ها و شیوه استخراج عامل‌ها بوسیله تفکیک واریانس انجام می‌شود. این کار ممکن است بوسیله تحلیل مولفه‌های اصلی یا تحلیل عاملی با واریانس مشترک انجام شود.
  • چرخش عامل‌ها: در گام دوم به منظور ایجاد عدم وابستگی (متعامد سازی) بین عامل‌ها، آن‌ها را چرخش می‌دهیم. هدف اصلی برای انجام این کار می‌تواند تفسیرپذیری بهتر عامل‌های ایجاد شده باشد. روش‌های مختلفی برای متعامد سازی عامل‌ها وجود دارد. برای مثال می‌توان به روش‌های چرخش Varimax, Quartimax یا Promax اشاره کرد.

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

واضح است که تعداد عامل‌ها حداکثر می‌تواند همان تعداد متغیرهای قابل مشاهده باشد. هر عامل میزان مشخصی از تغییرات یک متغیر قابل مشاهده را نشان می‌دهد. از آنجایی که هدف استفاده از عامل‌ها در یک مسئله مدل‌سازی، کاهش تعداد متغیرها است، در یک تحلیل FA، عامل یا عواملی که کمترین میزان واریانس را برای هر متغیر قابل مشاهده داشته باشند، حذف می‌شوند.

ترکیبی خطی متغیرهای قابل مشاهده برای ایجاد عامل‌ها، دارای ضرایب یا پارامترهایی است که به آن‌ها «بارهای عاملی» (Factor Loading) گفته می‌شود.

نکته: به متغیرهای عامل (Factor) گاهی «متغیر پنهان» (Latent Variable)، متغیر «غیرقابل مشاهده» (Unobserved Variable) و «متغیر فرضیه‌ای» (Hypothetical variable) نیز می‌گویند.

بارهای عاملی

همانطور که گفته شد، بارهای عاملی پارامترهای مدل خطی هستند که رابطه بین متغیرهای قابل مشاهده و عامل‌ها را بیان می‌کند. این پارامترها را می‌توان به صورت یک ماتریس نمایش داد که به آن ماتریس بارها (Loading Matrix) گفته می‌شود. این بارها نمایانگر میزان ارتباط یا همان ضریب همبستگی بین متغیر قابل مشاهده و عامل‌ها است. از طرفی می‌توان میزان واریانس توصیف شده توسط عامل‌ها را برای هر متغیر قابل مشاهده توسط بارهای عاملی تعیین کرد.

مقادیر ویژه ماتریس بارهای عاملی

مقادیر ویژه (Eigen Value) مربوط به ماتریس بارهای عاملی، بیانگر میزان واریانس یا پراکندگی است که هر عامل نسبت به متغیر قابل مشاهده بیان می‌کند. گاهی این مقادیر ویژه را ریشه‌های معادله مشخصه نیز می‌نامند.

مقادیر مشترک (Commonalities)

واریانس مشترک یا مقادیر مشترک، مجموع مربعات بارهای عاملی برای هر متغیر قابل مشاهده است. این مقدار همان سهمی یا درصدی است که یک عامل از واریانس متغیر قابل مشاهده با دیگر عامل‌ها به اشتراک گذاشته است. مقدار سهم واریانس مشترک می‌توان بین صفر تا یک تغییر کند. مقادیر نزدیک به ۱ نشانگر سهم بیشتر در بیان واریانس توسط هر عامل‌ است. بنابراین اگر فرض کنید ۵ متغیر قابل مشاهده داشته باشیم، و ضریب عامل $$j$$ام برای آن‌ها به صورت $$L_{ij}$$ باشد، مقدار مشترک یا واریانس مشترک توسط عامل $$j$$ام به صورت زیر خواهد بود.

$$\large h_{j}=\sum_{i=1}^l L_{ij}$$

رابطه ۲

مشخص است که در اینجا $$l$$ همان تعداد متغیرهای قابل مشاهده است. در این صورت $$h_j$$ میزان یا سهم عامل $$j$$ام از واریانس کل است.

تعیین تعداد عامل‌ها

با توجه به تعداد عامل‌هایی که سهم بیشتری از واریانس کل را بیان می‌کنند، می‌توان تعداد عامل‌های مناسب را انتخاب کرد. در روشی که به نام «معیار کایسر» (Kaiser) معروف است، مقادیر ویژه ماتریس بارها، محاسبه شده و تغییرات مقدارهای ویژه رصد می‌شوند. زمانی که این تغییرات قابل اغماض باشد، تعداد عامل‌ها شناسایی می‌شوند. در تصویر زیر نموداری به نام نمودار scree plot‌ یا نمودار قطعه‌ای را مشاهده می‌کنید که در آن سه عامل با بزرگترین مقدارها ویژه انتخاب شده‌اند، زیرا تغییرات مقدارهای ویژه از سومین عامل به بعد محسوس نیست.

Screeplot

تحلیل عاملی و مقایسه آن با تحلیل مولفه‌های اصلی

در ادامه به طور فهرست‌وار تحلیل عاملی را با تحلیل مولفه‌‌های اصلی مقایسه کرده‌ایم. واضح است در تحلیل عاملی، واریانس مشترک باعث ایجاد عامل‌ها شده در حالیکه در تحلیل مولفه‌ای، واریانس کل بین مولفه‌ها تقسیم خواهد شد.

  • در تحلیل مولفه‌های اصلی (PCA)، در بین مولفه‌های تولید شده، اولین مولفه بیشترین میزان واریانس را توصیف می‌کند و به ترتیب مولفه‌های بعدی با توجه به تفکیک واریانس، سهم‌های کوچکتری نسبت به مولفه اول خواهند داشت. در حالیکه در تحلیل عاملی (FA)، توصیف ماتریس کوواریانس برای داده‌ها صورت می‌گیرد و میزان پراکندگی مشترکی (کوواریانس) که بین عوامل وجود دارد استخراج می‌شود.
  • مولفه‌های حاصل از PCA بر یکدیگر عمودند و به نوعی می‌توان مولفه‌ها را مستقل از یکدیگر در نظر گرفت. در حالیکه در تحلیل FA لزومی به عمود بودن عوامل بر یکدیگر وجود ندارد.
  • هر یک از مولفه‌ها در تحلیل PCA ترکیبی خطی از متغیرهای قابل مشاهده هستند. در حالیکه در تحلیل FA، متغیرهای قابل مشاهده، ترکیبی خطی از متغیرهای پنهان یا غیرقابل مشاهده هستند.
  • مولفه‌های اصلی حاصل از PCA قابل تفسیر یا نام‌گذاری نیستند. در حالیکه عامل‌های ساخته شده توسط روش FA را می‌توان به خوبی تفسیر و نام‌گذاری کرد.
  • تحلیل مولفه‌های اصلی، روشی برای کاهش بعد با استفاده از مولفه‌هایی است که بیشترین پراکندگی را بیان می‌کنند. تحلیل عاملی برای تولید متغیرهای پنهان به کار می‌رود.
  • شاید بتوان PCA را نوع خاصی از تحلیل FA نامید. PCA کار روی متغیرهای قابل مشاهده است در حالیکه هدف از FA مدل‌سازی است.

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

FA and PCA comparing

در تصویر سمت چپ، تکنیک FA به کار رفته و مولفه‌های با رنگ مشابه، عامل‌هایی هستند که دارای واریانس مشترک هستند. به این ترتیب رنگ‌های قرمز تشکیل یک عامل و رنگ‌های زرد، عامل دیگر و … خواهند بود. در مقابل تکنیک PCA کل واریانس را بین مولفه‌ها تفکیک می‌کند و هر مولفه سهمی از واریانس کل دارد که در تصویر سمت راست دیده می‌شود. البته در هر دو تصویر از چهار مولفه استفاده شده است. همانطور که مشخص است، در تصویر سمت چپ، مجموع مساحت مربوط به هر رنگ با مساحت همان رنگ در تصویر سمت راست مطابقت دارد.

تحلیل مولفه‌های اصلی در پایتون با بسته factor_analyzer

در این قسمت، به منظور انجام محاسبات و اجرای تحلیل عاملی روی یک مجموعه داده، از زبان برنامه‌نویسی پایتون و کتابخانه مرتبط با تحلیل عاملی استفاده می‌کنیم. ابتدا بسته یا کتابخانه‌های مربوطه را معرفی و بارگذاری می‌کنیم.

کتابخانه‌های مورد نیاز

برای بارگذاری کتابخانه‌های مرتبط با تحلیل عاملی از کد زیر استفاده شده است. مشخص است که تابع pd از pandas و load_iris از sklearn.datasets و FactorAnalyzer از factor_analyzer و plt نیز از matplotlib.pyolot فرخوانی و بارگذاری شده‌اند.

# Import required libraries
import pandas as pd
from sklearn.datasets import load_iris
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt

بارگذاری داده‌ها

به منظور انجام تحلیل عاملی از داده‌های مربوط به پروژه ارزیابی شخصیت (personality assessment project) به نام BFI استفاده کرده‌ایم. این مجموعه داده را می‌توانید از (+) دریافت کنید. در این مجموعه داده ویژگی‌های شخصیتی با مقیاسی در شش سطح، مورد ارزیابی قرار گرفته‌اند. طیف و سطوح این متغیرها به صورت زیر است.

برچسب مقیاس مقدار مقیاس
۱ خیلی نادقیق
۲ تقریبا نادقیق
۳ کمی نادقیق
۴ کمی دقیق
۵ تقریبا دقیق
۶ خیلی دقیق

البته متغیر‌های دیگری مانند سن، میزان تحصیلات، جنسیت نیز در این مجموعه داده وجود دارد. کد زیر به منظور بارگذاری این مجموعه داده در پایتون نوشته شده است.

df= pd.read_csv("bfi.csv")

برای نمایش اسامی متغیرها (ستون‌های مجموعه داده) از دستور زیر استفاده کنید.

df.columns

خروجی در این حالت به صورت زیر خواهد بود.

Index(['A1', 'A2', 'A3', 'A4', 'A5', 'C1', 'C2', 'C3', 'C4', 'C5', 'E1', 'E2',
       'E3', 'E4', 'E5', 'N1', 'N2', 'N3', 'N4', 'N5', 'O1', 'O2', 'O3', 'O4',
       'O5', 'gender', 'education', 'age'],
      dtype='object')

در گام بعدی متغیرهای جنسیت (gender)، تحصیلات (education) و سن (age) را از مجموعه داده خارج کرده‌ایم. همچنین «مقدارهایی گمشده» (Missings) که با na‌ یا null مشخص شده‌اند برای تحلیل در مدل در نظر گرفته نمی‌شوند.

# Dropping unnecessary columns
df.drop(['gender', 'education', 'age'],axis=1,inplace=True)

# Dropping missing values rows
df.dropna(inplace=True)
df.info()

نتیجه حاصل از این عملیات در ادامه قابل مشاهده است.

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2436 entries, 0 to 2799
Data columns (total 25 columns):
A1    2436 non-null float64
A2    2436 non-null float64
A3    2436 non-null float64
A4    2436 non-null float64
A5    2436 non-null float64
C1    2436 non-null float64
C2    2436 non-null float64
C3    2436 non-null float64
C4    2436 non-null float64
C5    2436 non-null float64
E1    2436 non-null float64
E2    2436 non-null float64
E3    2436 non-null float64
E4    2436 non-null float64
E5    2436 non-null float64
N1    2436 non-null float64
N2    2436 non-null float64
N3    2436 non-null float64
N4    2436 non-null float64
N5    2436 non-null float64
O1    2436 non-null float64
O2    2436 non-null int64
O3    2436 non-null float64
O4    2436 non-null float64
O5    2436 non-null float64
dtypes: float64(24), int64(1)
memory usage: 494.8 KB

به کمک دستور زیر چند سطر اول از محاسبات صورت گرفته ظاهر خواهد شد.

df.head()

همانطور که می‌بینید فقط متغیرهای مربوط به ارزیابی شخصیت در تحلیل به کار خواهند رفت که به شکل یک ماتریس با ۲۵ ستون خواهند بود. توجه دارید که در پایتون اولین اندیس با صفر آغاز می‌شود به همین دلیل شماره مشاهدات از صفر ظاهر شده است.

شماره مشاهده/ پارامترهای ارزیابی شخصیت A1 A2 A3 N1 N2 N3 O5
0 2.0 4.0 3.0 3.0 4.0 2.0 3.0
1 2.0 4.0 5.0 5.0 4.0 4.0 3.0
2 5.0 4.0 5.0 4.0 5.0 4.0 2.0
3 4.0 4.0 6.0 2.0 5.0 2.0 5.0
4 2.0 3.0 3.0 2.0 3.0 4.0 3.0

آزمون کفایت

قبل از اجرای تحلیل عاملی باید شرط‌ مربوط به عامل‌پذیری را بررسی کنیم. با این کار به این سوال پاسخ خواهیم داد که آیا متغیرهای مربوط به مجموعه داده قادر به تولید عوامل می‌باشند؟ برای پاسخ به این سوال می‌توان به کمک دو روش عمل کرد. اولین روش استفاده از «آزمون بارتلت» (Bartlett’s Test) و دومین روش «آزمون کایزر-مایر-اولکین» (Kaiser-Meyer-Olkin Test) است. در ادامه با هر یک از این روش‌‌ها آشنا خواهیم شد.

آزمون بارتلت

«آزمون بارتبلت» (Bartlett’s Test) یک آزمون به منظور بررسی وجود رابطه کُروی بین متغیرها است. به این ترتیب اگر متغیرها به یکدیگر وابستگی نداشته باشند و ماتریس همبستگی برابر با «ماتریس یکه» (Identical Matrix) باشد، فرض صفر که یکه بودن ماتریس همبستگی در آزمون بارتلت است رد نخواهد شد. در صورت رد شدن فرض صفر، عامل‌پذیری متغیرهای مجموعه داده مورد تایید قرار خواهد گرفت. کد زیر به منظور اجرای این آزمون برای مجموعه داده مورد نظر نوشته شده است. این تابع از کتابخانه factor_analyzer قابل استفاده است.

from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(df)
chi_square_value, p_value

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

(18146.065577234807, 0.0)

آزمون کایزر-مایر-اولکین (KMO)

همانطور که آزمون بارتلت نشان داد، متغیرهای قابل مشاهده در مجموعه داده قابلیت ایجاد عامل را دارند ولی در اینجا شاخص KMO یا (Kaiser-Meyer-Olkin) را محاسبه می‌کنیم تا باز هم عامل‌پذیری مجموعه داده را مورد بررسی قرار دهیم. در ادامه قطعه کدی را می‌بینید که به منظور استخراج شاخص KMO‌ برای این مجموعه داده لازم است. واضح است که این کار توسط تابع calculate_kmi از کتابخانه factor.analyzer صورت گرفته است.

from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_model

حاصل اجرای این برنامه مقدار شاخص عامل‌پذیری KMO‌ است. هر چه این مقدار به یک نزدیک باشد، بیانگر عامل‌پذیری بیشتر مجموعه داده‌ها است.

0.8486452309468382

مقدار KMO برای این داده‌ها حدود  0.84 است که به نظر بسیار خوب می‌رسد و حاکی از عامل‌پذیری زیاد در این مجموعه داده است. پس بهتر است کار استخراج عامل‌ها را ادامه دهیم.

تعیین تعداد عامل‌ها

به منظور انتخاب تعداد عامل‌ها از کد زیر استفاده کرده‌ایم. ابتدا مقدارهای ویژه یا بارهای عاملی بدون دوران (Rotation) یا گردش را استخراج کرده‌ایم. سپس برحسب این مقادیر، نمودار قطعه‌ای (Scree plot) را ترسیم خواهیم کرد.

# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 25, rotation=None)
# Check Eigenvalues
ev, v = fa.get_eigenvalues()
ev

نتیجه اجرای این کد به صورت زیر خواهد بود.

کدی که در ادامه می‌بینید به منظور ترسیم نمودار قطعه‌ای ایجاد شده است. محور افقی در این نمودار تعداد عامل‌ها و محور عمودی نیز مقدارهای ویژه را نشان می‌دهد. در ادامه فقط شش مقدار ویژه که از بین بزرگترین مقدارها استخراج شده‌اند، قابل مشاهده است. به این ترتیب به نظر می رسد که احتیاج به شش عامل یا متغیر پنهان خواهیم داشت.

# Create scree plot using matplotlib
plt.scatter(range(1,df.shape[1]+1),ev)
plt.plot(range(1,df.shape[1]+1),ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()

نمودار قطعه‌ای را در این تصویر مشاهده می‌کنید به «نمودار بازویی» (Elbow Plot) نیز معروف است.

scree plot

مشخص است که در این نمودار به ازای هر مقدار ویژه، خط افقی ترسیم شده و زمانی که نمودار در حدود یک خط افقی تغییرات محسوسی نداشته باشد، محل شکست روی محور افقی تعداد عامل‌ها را مشخص می‌کند. توسط نمودار بالا شش عامل اول انتخاب شده است.

# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 6, rotation="varimax")

fa.loadings
متغیرها /عوامل Factor1 Factor2 Factor3 Factor4 Factor5 Factor6
A1 0.040783 0.095220 0.048734 -0.113057 -0.530987 0.161216
A2 0.235538 0.033131 0.133714 0.063734 0.661141 -0.006244
A3 0.343008 -0.009621 0.121353 0.033990 0.605933 0.160106
A4 0.219717 -0.081518 0.235140 -0.125338 0.404594 0.086356
A5 0.414458 -0.149616 0.106382 0.030977 0.469698 0.236519
C1 0.077248 -0.004358 0.554582 0.190124 0.007511 0.095035
C2 0.038370 0.068330 0.674545 0.087593 0.057055 0.152775
C3 0.031867 -0.039994 0.551164 -0.011338 0.101282 0.008996
C4 -0.066241 0.216283 -0.638475 -0.143846 -0.102617 0.318359
C5 -0.180812 0.284187 -0.544838 0.025837 -0.059955 0.132423
E1 -0.590451 0.022280 0.053915 -0.071205 -0.130851 0.156583
E2 -0.684578 0.233624 -0.088497 -0.045561 -0.116716 0.115065
E3 0.556774 -0.000895 0.103390 0.241180 0.179396 0.267291
E4 0.658395 -0.136788 0.113798 -0.107808 0.241143 0.158513
E5 0.507535 0.034490 0.309813 0.200821 0.078804 0.008747
N1 0.068011 0.805806 -0.051264 -0.074977 -0.174849 -0.096266
N2 0.022958 0.789832 -0.037477 0.006726 -0.141134 -0.139823
N3 -0.065687 0.725081 -0.059039 -0.010664 -0.019184 0.062495
N4 -0.345072 0.578319 -0.162174 0.062916 0.000403 0.147551
N5 -0.161675 0.523097 -0.025305 -0.161892 0.090125 0.120049
O1 0.225339 -0.020004 0.133201 0.479477 0.005178 0.218690
O2 -0.001982 0.156230 -0.086047 -0.496640 0.043989 0.134693
O3 0.325954 0.011851 0.093880 0.566128 0.076642 0.210777
O4 -0.177746 0.207281 -0.005671 0.349227 0.133656 0.178068
O5 -0.014221 0.063234 -0.047059 -0.576743 -0.057561 0.135936

همانطور که دیده می‌شود عامل اول، با بزرگترین بارهای عاملی برای متغیرهای $$E1$$ تا $$E5$$ استخراج شده است. در فهرست زیر این عامل‌ها معرفی شده‌اند. واضح است که به نظر می‌رسد این عامل‌ها با گروه خاصی از متغیرهای قابل مشاهده در ارتباط هستند در نتیجه مدل تحلیل عاملی از نوع تاییدی (Confirmatory Factor Analysis – CFA) است. با توجه به مسئله مورد نظر که مرتبط با شناخت شخصیت است، عامل‌ها را می‌توان مطابق با آنچه در ادامه مشاهده می‌شود، نام‌گذاری کرد.

  • عامل اول: در ترکیب خطی با متغیرهای $$E1,E2 \cdots, E5$$ وجود دارد زیرا بزرگترین مقدار ویژه یا بار عاملی را با این متغیرها دارد. به نظر می‌رسد که این عامل را باید «برونگرایی» (Extraversion) نامید.
  • عامل دوم: در ترکیب خطی با متغیرهای $$N1,N2,\cdots,N5$$ به کار رفته است زیرا بزرگترین مقدار ویژه یا بار عاملی را با این متغیرها دارد. شاید بهتر باشد این عامل را «شاخص‌های سلامت روانی» (Neuroticism) نامید.
  • عامل سوم هم در ترکیب خطی با متغیرهای $$C1,C2,\cdots,C5$$ قرار دارد زیرا بزرگترین مقدار ویژه یا بار عاملی را با این متغیرها دارد. شاید بهتر باشد که این عامل را «وفاداری» (Conscientiousness) نام‌گذاری کرد.
  • عامل چهارم هم در ترکیب خطی با متغیرهای $$O1,O2,\cdots,O5$$ قرار دارد که دارای بزرگترین مقدار ویژه با این متغیرها را دارد. شاید بتوان این عامل را «قابلیت پذیرش» (Openness) نامید.
  • عامل پنجم هم با متغیرهای قابل مشاهده $$A1,A2,\cdots, A5$$ در ترکیب خطی ظاهر می‌شود زیرا بزرگترین مقدار ویژه را با این متغیرها خواهد داشت. شاید بتوان این عامل را «توافق‌پذیری» (Agreeableness) نامید.
  • در انتها نیز عامل ششم را نمی‌توان ترکیب خطی قوی با متغیرهای دیگر در نظر گرفت. شاید بهتر باشد که آن را حذف کنیم و با پنج عامل کار را ادامه دهیم.

نکته: منظور از بزرگی ضریب یا بار عاملی، قدر مطلق مقدار مورد نظر است. به همین علت مثلا برای متغیر $$A1$$ عامل پنجم در نظر گرفته شد زیرا بار عاملی آن قدر مطلق بزرگتری نسبت به قدر مطلق بارهای عامل دیگر دارد.

کد زیر به بررسی تحلیل عامل براساس ۵ عامل اول پرداخته است.

# Create factor analysis object and perform factor analysis using 5 factors
fa = FactorAnalyzer()
fa.analyze(df, 5, rotation="varimax")
fa.loadings
متغیرها /  عوامل Factor1 Factor2 Factor3 Factor4 Factor5
A1 0.040465 0.111126 0.022798 -0.077931 -0.428166
A2 0.213716 0.029588 0.139037 0.062139 0.626946
A3 0.317848 0.009357 0.109331 0.056196 0.650743
A4 0.204566 -0.066476 0.230584 -0.112700 0.435624
A5 0.393034 -0.122113 0.087869 0.066708 0.537087
C1 0.070184 0.010416 0.545824 0.209584 0.038878
C2 0.033270 0.089574 0.648731 0.115434 0.102782
C3 0.023907 -0.030855 0.557036 -0.005183 0.111578
C4 -0.064984 0.240410 -0.633806 -0.107535 -0.037498
C5 -0.176395 0.290318 -0.562467 0.036822 -0.047525
E1 -0.574835 0.042819 0.033144 -0.058795 -0.104813
E2 -0.678731 0.244743 -0.102483 -0.042010 -0.112517
E3 0.536816 0.024180 0.083010 0.280877 0.257906
E4 0.646833 -0.115614 0.102023 -0.073422 0.306101
E5 0.504069 0.036145 0.312899 0.213739 0.090354
N1 0.078923 0.786807 -0.045997 -0.084704 -0.216363
N2 0.027301 0.754109 -0.030568 -0.010304 -0.193744
N3 -0.061430 0.731721 -0.067084 -0.004217 -0.027712
N4 -0.345388 0.590602 -0.178902 0.075225 0.005886
N5 -0.161291 0.537858 -0.037309 -0.149769 0.100931
O1 0.213005 -0.002224 0.115080 0.504907 0.061550
O2 0.004560 0.175788 -0.099729 -0.468925 0.081809
O3 0.310956 0.026736 0.076873 0.596007 0.126889
O4 -0.191196 0.220582 -0.021906 0.369012 0.155475
O5 -0.005347 0.085401 -0.062730 -0.533778 -0.010384

مشخص است که در این حالت بارها تغییر یافته و مدل متفاوتی از حالت قبلی ایجاد می‌شود. کدی که در ادامه مشاهده می‌کنید سهم هر یک از عامل‌ها را با توجه به رابطه ۲ محاسبه می‌کند.

# Get variance of each factors
fa.get_factor_variance()

با توجه به سطر آخر این جدول که سهم تجمعی هر عامل از بیان واریانس را مشخص می‌کند، واضح است که حدود ۴۲٪ واریانس کل توسط ۵ عامل با بزرگترین مقادیر ویژه، تعیین شده است.

Factor1 Factor2 Factor3 Factor4 Factor5
SS Loadings 2.473090 2.709633 2.041106 1.522153 1.844498
Proportion Var 0.098924 0.108385 0.081644 0.060886 0.073780
Cumulative Var 0.098924 0.207309 0.288953 0.349839 0.423619

نکاتی در مورد به کارگیری تحلیل عاملی

بوسیله تحلیل عاملی می‌توانیم اطلاعات زیادی را در مورد وابستگی بین متغیرها کشف کنیم. تعداد متغیرهای قابل مشاهده در مدل بوسیله تکنیک FA کاهش می‌یابد و همچنین گروهی از متغیرهایی مرتبط با یکدیگر به شناسایی شده که از ترکیب خطی آن‌ها برای ایجاد مدل استفاده می‌شود. این کار به شناسایی متغیرهای پنهان بخصوص در مدل‌های تصادفی در حوزه تحقیقات بازار کمک شایانی می‌کند. این‌ها همه مزایای به کارگیری تحلیل عاملی محسوب می‌شوند ولی بعضی از معایب تحلیل عاملی نیز در ادامه تذکر داده شده‌اند.

  • نتایج حاصل از تحلیل عاملی ممکن است بسیار بحث‌برانگیز باشد.
  • تفسیر خروجی‌های تحلیل عاملی نیز ممکن است براساس حتی یک مجموعه داده متفاوت باشد زیرا نام‌گذاری و تعیین ویژگی حاصل تولید شده براساس تحلیل عاملی بسیار به تجربه و شناخت موضوع مورد تحلیل وابسته است.

خلاصه و نتیجه‌‌گیری

در این نوشتار با تحلیل عاملی و شیوه‌های گوناگون پیاده‌سازی آن آشنا شدیم. روند و مراحل اجرای تحلیل عاملی نیز از مواردی بود که در این متن به آن پرداخته شد. همچنین تعیین تعداد عامل‌های مناسب در مدل نیز مورد بحث قرار گرفت و مقایسه‌ای نیز بین تحلیل عاملی و تحلیل مولفه‌های اصلی صورت گرفت. در هر قسمت کدهایی نیز به زبان پایتون برای روشن‌تر شدن موضوع ارائه گردید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۶ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«آرمان ری‌بد» دکتری آمار در شاخه آمار ریاضی دارد. از علاقمندی‌های او، یادگیری ماشین، خوشه‌بندی و داده‌کاوی است و در حال حاضر نوشتارهای مربوط به آمار و یادگیری ماشین را در مجله فرادرس تهیه می‌کند.