در این مقاله قصد دارم به آموزش رگرسیون گام به گام در R بپردازم. تا انتهای این مقاله همراه کیارا آکادمی باشید تا آموزش نرم افزار R را به صورت کاربردی دریافت نمایید.
آموزش رگرسیون گام به گام در R
رگرسیون گام به گام روشی است که میتوانیم از آن برای ساختن یک مدل رگرسیون از مجموعهای از متغیرهای پیش بینیکننده با وارد کردن و حذف پیش بینیکنندهها به صورت گام به گام در مدل استفاده کنیم تا زمانی که هیچ دلیل معتبر آماری برای وارد کردن یا حذف بیشتر وجود نداشته باشد. هدف از رگرسیون گام به گام ساختن یک مدل رگرسیونی است که شامل تمام متغیرهای پیش بینی کننده است که از نظر آماری به طور معنی داری با متغیر پاسخ مرتبط هستند.
این آموزش نحوه انجام مراحل رگرسیون گام به گام زیر را در R توضیح می دهد:
- انتخاب گام به گام به جلو (Forward Stepwise)
- انتخاب گام به گام به عقب (Backward Stepwise)
- انتخاب گام به گام هر دو جهت (Both-Direction Stepwise)
برای هر مثال از مجموعه داده داخلی mtcars استفاده می کنیم:
#view first six rows of mtcars head(mtcars) |
ما یک مدل رگرسیون خطی چندگانه را با استفاده از mpg (مایل در هر گالن) به عنوان متغیر پاسخ و همه 10 متغیر دیگر در مجموعه داده به عنوان متغیرهای پیشبینیکننده بالقوه برازش خواهیم داد.
برای هر مثال از تابع () step داخلی از بسته stats برای انجام انتخاب گام به گام استفاده می شود که از نحو زیر استفاده می کند:
step(intercept-only model, direction, scope) |
تحلیل فرمول بالا:
- مدل فقط رهگیری: فرمول مدل فقط رهگیری
- جهت: حالت جستجوی گام به گام، می تواند “هر دو”، “عقب” یا “به جلو” باشد.
- scope: فرمولی که مشخص میکند کدام پیشبینیکنندهها را میخواهیم وارد مدل کنیم
مثال 1: انتخاب گام به گام به جلو
کد زیر نحوه انجام انتخاب گام به گام رو به جلو را نشان می دهد:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) |
#define model with all predictors all <- lm(mpg ~ ., data=mtcars) |
#perform forward stepwise regression forward <- step(intercept_only, direction=’forward’, scope=formula(all), trace=0) |
#view results of forward stepwise regression forward$anova |
#view final model forward$coefficients |
نکته: آرگومان trace=0 به R می گوید که نتایج کامل انتخاب گام به گام را نمایش ندهد. اگر تعداد زیادی متغیر پیشبینیکننده وجود داشته باشد، میتواند فضای کمی را اشغال کند. در اینجا نحوه تفسیر نتایج آمده است:
- ابتدا، مدل فقط رهگیری را برازش می کنیم. این مدل دارای AIC 115.94345 بود.
- در مرحله بعد، ما هر مدل یک پیش بینی کننده ممکن را برازش می کنیم. مدلی که کمترین AIC را تولید کرد و همچنین کاهش معنیداری در AIC در مقایسه با مدل فقط رهگیری داشت از پیشبینیکننده wt استفاده کرد. این مدل دارای AIC 73.21736 بود.
- در مرحله بعد، ما هر مدل دو پیش بینی کننده ممکن را برازش می کنیم. مدلی که کمترین AIC را تولید کرد و همچنین کاهش آماری معنی داری در AIC نسبت به مدل تک پیش بینی داشت، سیکل پیش بینی کننده را اضافه کرد. این مدل دارای AIC 63.19800 بود.
- در مرحله بعد، ما هر مدل سه پیش بینی ممکن را برازش می کنیم. مدلی که کمترین AIC را تولید کرد و همچنین از نظر آماری کاهش معنی داری در AIC نسبت به مدل دو پیش بینی کننده داشت، اسب بخار پیش بینی کننده را اضافه کرد. این مدل دارای AIC 62.66456 بود.
در مرحله بعد، ما هر مدل چهار پیش بینی ممکن را برازش می کنیم. مشخص شد که هیچ یک از این مدل ها کاهش قابل توجهی در AIC ایجاد نکردند، بنابراین ما این روش را متوقف کردیم. مدل نهایی به نظر می رسد:
mpg ~ 38.75 – 3.17*wt – 0.94*cyl – 0.02*hyp |
مثال 2: انتخاب گام به گام به عقب یا Backward Stepwise
کد زیر نحوه انجام انتخاب گام به گام به عقب را نشان می دهد:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) |
#define model with all predictors all <- lm(mpg ~ ., data=mtcars) |
#perform backward stepwise regression backward <- step(all, direction=’backward’, scope=formula(all), trace=0) |
#view results of backward stepwise regression backward$anova |
#view final model backward$coefficients |
در اینجا نحوه تفسیر نتایج آمده است:
- ابتدا، مدلی را با استفاده از همه پیش بینی کننده های p برازش می کنیم. این را به صورت Mp تعریف کنید.
- بعد، برای k = p، p-1، … 1، ما همه مدلهای k را که شامل همه پیشبینیکنندهها به جز یکی از Mk هستند، برای مجموع متغیرهای پیشبینیکننده k-1 برازش میدهیم. بعد، بهترین را از بین این مدل های k انتخاب کنید و آن را Mk-1 بنامید.
- در نهایت، ما بهترین مدل را از بین M0…Mp با استفاده از AIC انتخاب می کنیم.
مدل نهایی به نظر می رسد:
mpg ~ 9.62 – 3.92*wt + 1.23*qsec + 2.94*am |
مثال 3: انتخاب گام به گام هر دو جهت Both-Direction Stepwise
کد زیر نحوه انجام انتخاب گام به گام دو جهته را نشان می دهد:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) |
#define model with all predictors all <- lm(mpg ~ ., data=mtcars) |
#perform backward stepwise regression both <- step(intercept_only, direction=’both’, scope=formula(all), trace=0) |
#view results of backward stepwise regression both$anova |
#view final model both$coefficients |
در اینجا نحوه تفسیر نتایج آمده است:
- ابتدا، مدل فقط رهگیری را برازش می کنیم.
- در مرحله بعد، پیشبینیکنندهها را بهطور متوالی به مدل اضافه کردیم، درست مانند انتخاب گامبهگام. با این حال، پس از افزودن هر پیشبینیکننده، پیشبینیکنندههایی را که دیگر بهبودی در تناسب مدل ایجاد نمیکردند، حذف کردیم.
- این روند را تا رسیدن به مدل نهایی تکرار کردیم.
مدل نهایی به نظر می رسد:
mpg ~ 9.62 – 3.92*wt + 1.23*qsec + 2.94*am |
توجه داشته باشید که انتخاب گام به گام رو به جلو و انتخاب گام به گام هر دو جهت، مدل نهایی یکسانی را تولید می کند در حالی که انتخاب گام به گام به عقب مدل متفاوتی را تولید می کند.
منابع بیشتر برای مطالعه: