Множинна лінійна регресія в R: проста та покрокова з прикладами
⚡ Розумний підсумок
Проста та множинна лінійна регресія в R моделюють неперервний результат як зважену суму предикторів, що підбираються за допомогою звичайних найменших квадратів. Цей посібник охоплює lm(), зчитування коефіцієнтів, предиктори факторів, діагностику залишків, прогнозування та автоматичний вибір змінних.
Де лінійна регресія підходить у машинному навчанні
Лінійна регресія є однією з найстаріших контрольованих навчання за допомогою машини алгоритми, і це досі перша модель, до якої звертається більшість аналітиків. Одним із найперших застосувань машинного навчання було спам-фільтр.
Інші поширені застосування машинного навчання включають:
- Виявлення небажаних повідомлень спаму в електронній пошті
- Сегментація поведінки клієнтів для таргетованої реклами
- Зменшення кількості шахрайських операцій з кредитними картками
- Оптимізація використання енергії в житлових будинках та офісних будівлях
- Розпізнавання обличчя
Навчання під наглядом
In Навчання під наглядом, навчальні дані, які ви подаєте в алгоритм, містять мітку.
Класифікація Ймовірно, це найпоширеніший метод навчання з учителем. Одним із перших завдань класифікації, з яким розібралися дослідники, був спам-фільтр. Метою навчання є прогнозування того, чи класифікується електронний лист як спам, чи як фальшива розсилка (хороша електронна пошта). Після етапу навчання машина може визначити клас електронної пошти.
Регресії зазвичай використовуються в галузі машинного навчання для прогнозування безперервного значення. Завдання регресії може передбачити значення залежна змінна на основі набору незалежні змінні (їх також називають предикторами або регресорами). Наприклад, лінійна регресія може передбачити курс акцій, прогноз погоди, продажі тощо.
Деякі фундаментальні алгоритми навчання з учителем:
- Лінійна регресія
- Логістична регресія
- Найближчі сусіди
- Машина опорних векторів (SVM)
- Дерева рішень і випадковий ліс
- Нейронні мережі
Навчання без нагляду
In Навчання без нагляду, дані навчання не позначені. Система намагається вчитися без посилання. Нижче наведено список алгоритмів неконтрольованого навчання.
- K-середнє
- Ієрархічна Cluster Аналіз
- Максимізація очікування
- Візуалізація та зменшення розмірності
- Аналіз основних компонентів
- Ядро PCA
- Локально-лінійне вбудовування
З урахуванням цього контексту, решта цього посібника крок за кроком будує регресійні моделі в R.
Проста лінійна регресія в R
Лінійна регресія відповідає на просте запитання: чи можна виміряти точний зв'язок між однією цільовою змінною та набором предикторів?
Найпростішою ймовірнісною моделлю є прямолінійна модель:
де
- y = залежна змінна
- x = незалежна змінна
-
= компонент випадкової помилки
-
= перехопити
-
= Коефіцієнт х
Розглянемо такий сюжет:
Рівняння таке У цьому рівнянні точка перетину з віссю дорівнює 4.77, тому, коли x дорівнює 0, підібране значення y дорівнює 4.77. Нахил показує, в якій пропорції змінюється y, коли змінюється x.
Для оцінки оптимальних значень та
, ви використовуєте метод під назвою Звичайні найменші квадрати (OLS). Цей метод намагається знайти параметри, які мінімізують суму квадратів помилок, тобто вертикальну відстань між прогнозованими значеннями y і фактичними значеннями y. Різниця відома як термін помилки.
Перш ніж оцінити модель, ви можете визначити, чи вірогідний лінійний зв’язок між y і x, побудувавши діаграму розсіювання.
Діаграма розкиду
Ми використаємо дуже простий набір даних, щоб пояснити концепцію простої лінійної регресії. Ми імпортуємо середній зріст і вагу для американських жінок. Набір даних містить 15 спостережень. Ви хочете визначити, чи зріст позитивно корелює з вагою.
library(ggplot2) path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/women.csv' df <-read.csv(path) ggplot(df,aes(x=height, y = weight))+ geom_point()
вихід:
Діаграма розсіювання показує загальну тенденцію збільшення ваги зі збільшенням зросту. На наступному кроці ви виміряєте, на скільки збільшується вага на кожну додаткову одиницю зросту.
Оцінки методом найменших квадратів
У простій регресії МНК обчислення та
це просто. У цьому посібнику формули не виводяться, а лише наводяться.
Ви хочете оцінити:
Метою регресії МНК є мінімізація наступного рівняння:
де
є фактичним значенням і
є прогнозованим значенням.
Рішення для is
Зверніть увагу, що означає середнє значення x
Рішення для is
У R ви можете використовувати функції cov() та var() для оцінки і ви можете використовувати функцію mean() для оцінки
beta <- cov(df$height, df$weight) / var (df$height) beta
вихід:
##[1] 3.45
alpha <- mean(df$weight) - beta * mean(df$height) alpha
вихід:
## [1] -87.51667
Бета-коефіцієнт означає, що на кожен додатковий дюйм зросту середня вага збільшується на 3.45 фунта.
Оцінювання лінійного рівняння вручну є повчальним, але непрактичним. R надає функцію lm(), яка зробить це за вас, і ви використовуватимете її з наступного розділу. У реальних проектах ви майже ніколи не підберете модель з одним предиктором; регресійні завдання зазвичай передбачають використання багатьох оцінок одночасно.
Множинна лінійна регресія в R
Практичне застосування регресійного аналізу використовує моделі складніші, ніж проста прямолінійна модель. Імовірнісна модель, яка включає більше однієї незалежної змінної, називається моделі множинної регресії. Загальний вигляд цієї моделі:
У матричній нотації ви можете переписати модель:
Залежна змінна y тепер є функцією k незалежних змінних. Значення коефіц визначає внесок незалежної змінної
та
.
Коротко представимо зроблене нами припущення щодо випадкової похибки з OLS:
- Середнє дорівнює 0
- Дисперсія дорівнює
- Нормальний розподіл
- Випадкові помилки незалежні (в імовірнісному сенсі)
Вам потрібно вирішити для , вектор коефіцієнтів регресії, які мінімізують суму квадратів помилок між прогнозованим і фактичним значеннями y.
Рішення закритої форми це:
з:
- вказує на транспонувати матриці X
вказує на оборотна матриця
У наведених нижче прикладах використовується вбудований набір даних mtcars. Мета полягає в тому, щоб передбачити витрату палива в милях на галон (mpg) на основі набору характеристик.
Безперервні змінні в R
На даний момент ви будете використовувати лише безперервні змінні та залишити осторонь категоричні ознаки. Змінна am є двійковою змінною, яка приймає значення 1, якщо коробка передач механічна, і 0 для автомобілів з автоматичними коробками передач; vs також є двійковою змінною.
library(dplyr) df <- mtcars %>% select(-c(am, vs, cyl, gear, carb)) glimpse(df)
вихід:
## Observations: 32 ## Variables: 6 ## $ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.... ## $ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 1... ## $ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, ... ## $ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.9... ## $ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3... ## $ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 2...
Для обчислення параметрів можна використовувати функцію lm(). Основний синтаксис цієї функції:
lm(formula, data, subset)
Arguments:
-formula: The equation you want to estimate
-data: The dataset used
-subset: Estimate the model on a subset of the dataset
Пам’ятайте, що рівняння має такий вигляд
в Р
- Символ = замінюється на ~
- Кожен x замінюється назвою змінної
- Якщо ви хочете видалити константу, додайте -1 у кінці формули
приклад:
Ви хочете оцінити вагу людей на основі їх зростання та доходу. Рівняння таке
Рівняння в R записується так:
y ~ X1+ X2+…+Xn # З перехопленням
Отже, для нашого прикладу:
- Зважте ~ зріст + дохід
Ваше завдання — оцінити милю на галон на основі набору змінних. Рівняння для оцінки таке:
Ви оціните свою першу лінійну регресію та збережете результат у відповідному об’єкті.
model <- mpg ~ disp + hp + drat + wt + qsec
fit <- lm(model, df)
fit
Code Пояснення
- model <- mpg ~ disp + hp + drat + wt + qsec: Збереження моделі для оцінки
- lm(модель, df): оцінка моделі за допомогою кадру даних df
## ## Call: ## lm(formula = model, data = df) ## ## Coefficients: ## (Intercept) disp hp drat wt ## 16.53357 0.00872 -0.02060 2.01577 -4.38546 ## qsec ## 0.64015
Вихід не надає достатньо інформації про якість підгонки. Ви можете отримати доступ до додаткових деталей, таких як значення коефіцієнтів, ступінь свободи та форма залишків за допомогою функції summary().
summary(fit)
вихід:
## return the p-value and coefficient ## ## Call: ## lm(formula = model, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.5404 -1.6701 -0.4264 1.1320 5.4996 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 16.53357 10.96423 1.508 0.14362 ## disp 0.00872 0.01119 0.779 0.44281 ## hp -0.02060 0.01528 -1.348 0.18936 ## drat 2.01578 1.30946 1.539 0.13579 ## wt -4.38546 1.24343 -3.527 0.00158 ** ## qsec 0.64015 0.45934 1.394 0.17523 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.558 on 26 degrees of freedom ## Multiple R-squared: 0.8489, Adjusted R-squared: 0.8199 ## F-statistic: 29.22 on 5 and 26 DF, p-value: 6.892e-10
Висновок із наведеної вище таблиці
- У таблиці показано сильний негативний зв'язок між вагою (wt) та витратою палива (mpg), а також позитивний коефіцієнт для витрати палива (drat).
- Тільки змінна wt має статистичний вплив на mpg. Пам’ятайте, що для перевірки гіпотези в статистиці ми використовуємо:
- H0: Відсутність статистичного впливу
- H1: предиктор має значний вплив на y
- Якщо значення p менше 0.05, це означає, що змінна є статистично значущою
- Скоригований коефіцієнт детермінації (R-квадрат): частка дисперсії y, пояснена моделлю, скоригована на кількість предикторів. Тут це 0.8199, тобто модель пояснює близько 82 відсотків дисперсії витрати пального. R-квадрат завжди знаходиться між 0 та 1, і чим вище, тим краще.
Ви можете запустити ANOVA тест для оцінки впливу кожної функції на дисперсії за допомогою функції anova().
anova(fit)
вихід:
## Analysis of Variance Table ## ## Response: mpg ## Df Sum Sq Mean Sq F value Pr(>F) ## disp 1 808.89 808.89 123.6185 2.23e-11 *** ## hp 1 33.67 33.67 5.1449 0.031854 * ## drat 1 30.15 30.15 4.6073 0.041340 * ## wt 1 70.51 70.51 10.7754 0.002933 ** ## qsec 1 12.71 12.71 1.9422 0.175233 ## Residuals 26 170.13 6.54 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Більш звичайним способом оцінки ефективності моделі є відображення залишку порівняно з різними показниками.
Ви можете використовувати функцію plot(), щоб показати чотири графіки:
– Залишки проти підігнаних значень
– Нормальний графік QQ: теоретичний квартиль проти стандартизованих залишків
– Масштаб-розташування: підігнані значення проти квадратних коренів стандартизованих залишків
– Залишки проти кредитного плеча: кредитне плече проти стандартизованих залишків
Ви додаєте код par(mfrow = c(2, 2)) перед plot(fit). Якщо ви не додасте цей рядок коду, R запропонує вам натиснути команду Enter для відображення наступного графіка.
par(mfrow = c(2, 2))
Code Пояснення
- (mfrow=c(2,2)): повертає вікно з чотирма графіками поруч.
- Перші 2 додають кількість рядків
- Другі 2 додають кількість стовпців.
- Якщо ви напишете (mfrow=c(3,2)): ви створите вікно з 3 рядками та 2 стовпцями
plot(fit)
вихід:
Формула lm() повертає список, що містить багато корисної інформації. Ви можете отримати до них доступ за допомогою створеного вами об'єкта fit, а потім знака $ та інформації, яку ви хочете отримати.tract.
– коефіцієнти: `fit$coefficients`
– залишки: `fit$residuals`
– підігнане значення: `fit$fitted.values`
Фактори регресії в R
В останній модельній оцінці ви регресуєте милі на галон лише за безперервними змінними. До моделі можна легко додати факторні змінні. Ви додаєте змінну am до своєї моделі. Важливо бути впевненим, що змінна є факторним рівнем, а не безперервною.
df <- mtcars %>%
mutate(cyl = factor(cyl),
vs = factor(vs),
am = factor(am),
gear = factor(gear),
carb = factor(carb))
model <- mpg ~ .
summary(lm(model, df))
вихід:
## ## Call: ## lm(formula = model, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.5087 -1.3584 -0.0948 0.7745 4.6251 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 23.87913 20.06582 1.190 0.2525 ## cyl6 -2.64870 3.04089 -0.871 0.3975 ## cyl8 -0.33616 7.15954 -0.047 0.9632 ## disp 0.03555 0.03190 1.114 0.2827 ## hp -0.07051 0.03943 -1.788 0.0939 . ## drat 1.18283 2.48348 0.476 0.6407 ## wt -4.52978 2.53875 -1.784 0.0946 . ## qsec 0.36784 0.93540 0.393 0.6997 ## vs1 1.93085 2.87126 0.672 0.5115 ## am1 1.21212 3.21355 0.377 0.7113 ## gear4 1.11435 3.79952 0.293 0.7733 ## gear5 2.52840 3.73636 0.677 0.5089 ## carb2 -0.97935 2.31797 -0.423 0.6787 ## carb3 2.99964 4.29355 0.699 0.4955 ## carb4 1.09142 4.44962 0.245 0.8096 ## carb6 4.47757 6.38406 0.701 0.4938 ## carb8 7.25041 8.36057 0.867 0.3995 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.833 on 15 degrees of freedom ## Multiple R-squared: 0.8931, Adjusted R-squared: 0.779 ## F-statistic: 7.83 on 16 and 15 DF, p-value: 0.000124
R використовує перший факторний рівень як базову групу. Вам потрібно порівняти коефіцієнти іншої групи з базовою групою.
Припущення лінійної регресії в R
Звичайний метод найменших квадратів дає достовірні коефіцієнти та p-значення лише за умови виконання п'яти умов. Чотири діагностичні графіки, створені за допомогою plot(fit), існують саме для їх перевірки.
- Лінійність: зв'язок між кожним предиктором та y є лінійним. Перевірте Залишки проти встановлених графік; видима крива означає, що вам потрібне перетворення або поліноміальний член.
- Незалежність: Члени помилки некорельовані. Дані, впорядковані за часом, часто порушують це, що можна перевірити за допомогою durbinWatsonTest() з пакета car.
- Гомоскедастичність: Дисперсія помилки є постійною для всіх підібраних значень. Форма воронки в Масштаб-Розташування сюжет сигналізує про порушення.
- Нормальність залишків: помилки розподіляються за нормальним законом. Точки повинні розташовуватися на діагоналі Звичайний QQ сюжет.
- Відсутність мультиколінеарності: Предиктори не є майже дублікатами один одного. Коефіцієнт інфляції дисперсії вище 5 є звичайною попереджувальною лінією.
library(car) vif(fit) # variance inflation factors shapiro.test(residuals(fit)) # normality of residuals
Порушення не завжди роблять модель недійсною, але вони змінюють рівень впевненості в p-значеннях, тому перевірте їх, перш ніж повідомляти будь-який коефіцієнт.
Як робити прогнози за допомогою моделі лінійної регресії в R
Підбір моделі – це лише половина справи. Функція predict() застосовує підібрані коефіцієнти до нових спостережень.
predict(object, newdata, interval = "none", level = 0.95) arguments: -object: The model returned by lm() -newdata: A data frame whose columns match the predictors used in the formula -interval: "none", "confidence" for the mean response, or "prediction" for a single new case -level: The confidence level, 0.95 by default
Виконайте ці три кроки.
- Створіть фрейм даних для нових випадків. Назви стовпців повинні точно збігатися з назвами предикторів у формулі, а рівні факторів повинні відповідати навчальним даним.
- Викличте predict(). Передайте підігнаний об'єкт та новий фрейм даних.
- Додайте інтервал. Оберіть «впевненість», якщо вам потрібна невизначеність щодо середньої реакції, та «прогноз», якщо вам потрібен запас ходу для одного окремого автомобіля.
new_cars <- data.frame(wt = c(2.5, 3.2), hp = c(110, 175)) fit_final <- lm(mpg ~ wt + hp, data = mtcars) predict(fit_final, newdata = new_cars) predict(fit_final, newdata = new_cars, interval = "prediction")
Зчитування результату. Прогнозується, що автомобіль вагою 2.5 тисячі фунтів (11000 кг) з потужністю 110 кінських сил (110 кінських сил) витрачатиме приблизно 24.1 милі на галон (24,1 милі на галон). Інтервал прогнозування завжди ширший за довірчий інтервал, оскільки він містить невизначеність окремого спостереження на додаток до невизначеності підібраної прямої.
Два правила забезпечують чесність прогнозів. Ніколи не екстраполюйте за межі діапазону навчальних предикторів, оскільки пряма лінія не має жодних доказів. І завжди оцінюйте на даних, які модель не бачила, інакше зареєстрована похибка є оптимістичною.
Лінійна регресія проти логістичної регресії в R
Аналітики часто вдаються до lm(), коли результат не є неперервним. У таблиці нижче показано, де пролягає межа.
| Критерії | Linear Regression | Логістична регресія |
|---|---|---|
| Змінна відповіді | безперервна | Бінарний або категоріальний |
| Прогнозований вихід | Будь-яке дійсне число | Ймовірність між 0 та 1 |
| Оцінка | Звичайні найменші квадрати | Максимальна ймовірність |
| Відповідність мірі | R-квадрат, середньоквадратичне відхилення (RMSE) | AIC, відхилення, точність |
| функція R | lm(формула, дані) | glm(формула, дані, сім'я = "біноміал") |
Якщо результат — так чи ні, перейдіть до узагальнена лінійна модель замість того, щоб провести пряму лінію через нулі та одиниці.
Покрокова лінійна регресія в R
Остання частина цього підручника присвячена ступінчаста регресія алгоритм. Метою цього алгоритму є додавання та видалення потенційних кандидатів у моделі та утримання тих, хто має значний вплив на залежну змінну. Цей алгоритм має значення, коли набір даних містить великий список предикторів. Вам не потрібно вручну додавати та видаляти незалежні змінні. Покрокова регресія побудована для вибору найкращих кандидатів, які відповідають моделі.
Давайте розглянемо, як це працює на практиці. Ви використовуєте набір даних mtcars з неперервними змінними лише для педагогічної ілюстрації. Перш ніж розпочати аналіз, гарною практикою буде перевірити зв'язки в даних за допомогою матриці кореляції. Бібліотека GGally є розширенням ggplot2.
Бібліотека містить різні функції для показу зведених статистичних даних, таких як кореляція та розподіл усіх змінних у матриці. Ми будемо використовувати функцію ggscatmat, але ви можете звернутися до віньєтка для отримання додаткової інформації про бібліотеку GGally.
Основний синтаксис для ggscatmat() такий:
ggscatmat(df, columns = 1:ncol(df), corMethod = "pearson") arguments: -df: A matrix of continuous variables -columns: Pick up the columns to use in the function. By default, all columns are used -corMethod: Define the function to compute the correlation between variable. By default, the algorithm uses the Pearson formula
Ви відображаєте кореляцію для всіх ваших змінних і вирішуєте, які з них є найкращими кандидатами для першого кроку покрокової регресії. Існують деякі сильні кореляції між вашими змінними та залежною змінною, mpg.
library(GGally) df <- mtcars %>% select(-c(am, vs, cyl, gear, carb)) ggscatmat(df, columns = 1: ncol(df))
вихід:
Приклад покрокової регресії
Вибір змінних є важливою частиною підбору моделі, і покрокова регресія виконує цей пошук автоматично. Щоб оцінити, скільки можливих варіантів є в наборі даних, потрібно обчислити де k — кількість предикторів. Кількість можливостей зростає з кількістю незалежних змінних. Тому потрібен автоматичний пошук.
Вам потрібно встановити пакет olsrr з CRAN. Пакет ще не доступний в Anaconda. Отже, ви встановлюєте його безпосередньо з командного рядка:
install.packages("olsrr")
Ви можете побудувати всі підмножини можливостей із критеріями відповідності (тобто R-квадрат, скоригований R-квадрат, критерії Байєса). Модель з найнижчими критеріями AIC буде остаточною.
library(olsrr) model <- mpg~. fit <- lm(model, df) test <- ols_all_subset(fit) plot(test)
Code Пояснення
- милі на галон ~.: Побудуйте модель для оцінки
- lm(модель, df): Запустіть модель OLS
- ols_all_subset(підгонка): Побудуйте графіки з відповідною статистичною інформацією
- ділянка (тест): Побудуйте графіки
вихід:
Моделі лінійної регресії використовують t-тест оцінити статистичний вплив незалежної змінної на залежну змінну. Дослідники зазвичай встановлюють максимальний поріг на рівні 10 відсотків, а нижчі p-значення вказують на сильніший статистичний зв'язок. Навколо цього тесту будується покрокова регресія для додавання та видалення кандидатів-предикторів. Алгоритм працює наступним чином:

- крок 1: Регресія кожного предиктора на y окремо. А саме, регресія x_1 на y, x_2 на y до x_n. Зберігайте р-значення і підтримувати регресор із значенням p, нижчим за визначене порогове значення (0.1 за замовчуванням). Предиктори зі значущістю, нижчою за порогове значення, будуть додані до остаточної моделі. Якщо жодна змінна не має p-значення, нижче за вхідний поріг, тоді алгоритм зупиняється, і ви маєте остаточну модель лише з константою.
- крок 2: Використовуйте предиктор із найнижчим p-значенням і додайте окремо одну змінну. Ви регресуєте константу, найкращий предиктор першого кроку та третьої змінної. Ви додаєте до покрокової моделі нові предиктори зі значенням, нижчим за вхідний поріг. Якщо жодна змінна не має p-значення нижче 0.1, тоді алгоритм зупиняється, і ви маєте остаточну модель лише з одним предиктором. Ви регресуєте поетапну модель, щоб перевірити значущість найкращих предикторів кроку 1. Якщо він вищий за поріг видалення, ви зберігаєте його в поетапній моделі. В іншому випадку ви виключаєте його.
- крок 3: Ви повторюєте крок 2 на новій найкращій поетапній моделі. Алгоритм додає предиктори до покрокової моделі на основі введених значень і виключає предиктор із покрокової моделі, якщо він не задовольняє порогове значення виключення.
- Алгоритм продовжує працювати, доки жодна змінна не може бути додана або виключена.
Ви можете виконати алгоритм за допомогою функції ols_stepwise() з пакету olsrr.
ols_stepwise(fit, pent = 0.1, prem = 0.3, details = FALSE) arguments: -fit: Model to fit. Need to use `lm()`before to run `ols_stepwise() -pent: Threshold of the p-value used to enter a variable into the stepwise model. By default, 0.1 -prem: Threshold of the p-value used to exclude a variable into the stepwise model. By default, 0.3 -details: Print the details of each step
⚠️ Примітка до пакету: Останні версії olsrr перейменували ці функції. Використовуйте ols_step_all_possible() замість ols_all_subset() та ols_step_both_p() замість ols_stepwise(). Аргументи та результат залишаються незмінними.
Перед цим ми покажемо вам кроки алгоритму. Нижче наведено таблицю із залежними та незалежними змінними:
| Залежна змінна | Незалежні змінні |
|---|---|
| милі на галон | розсилка |
| hp | |
| драт | |
| wt | |
| qsec |
Старт
Почнемо з того, що алгоритм починається з запуску моделі для кожної незалежної змінної окремо. У таблиці показано p-значення для кожної моделі.
## [[1]] ## (Intercept) disp ## 3.576586e-21 9.380327e-10 ## ## [[2]] ## (Intercept) hp ## 6.642736e-18 1.787835e-07 ## ## [[3]] ## (Intercept) drat ## 0.1796390847 0.0000177624 ## ## [[4]] ## (Intercept) wt ## 8.241799e-19 1.293959e-10 ## ## [[5] ## (Intercept) qsec ## 0.61385436 0.01708199
Щоб увійти в модель, алгоритм зберігає змінну з найменшим p-значенням. З наведеного вище результату це мас
крок 1
На першому кроці алгоритм незалежно запускає mpg для wt та інших змінних.
## [[1]] ## (Intercept) wt disp ## 4.910746e-16 7.430725e-03 6.361981e-02 ## ## [[2]] ## (Intercept) wt hp ## 2.565459e-20 1.119647e-06 1.451229e-03 ## ## [[3]] ## (Intercept) wt drat ## 2.737824e-04 1.589075e-06 3.308544e-01 ## ## [[4]] ## (Intercept) wt qsec ## 7.650466e-04 2.518948e-11 1.499883e-03
Кожна змінна є потенційним кандидатом для включення до остаточної моделі. Однак алгоритм залишає лише змінну з нижчим p-значенням. Виявляється, що hp має дещо нижче p-значення, ніж qsec, тому hp входить до остаточної моделі.
крок 2
Алгоритм повторює перший крок, але цього разу з двома незалежними змінними в остаточній моделі.
## [[1]] ## (Intercept) wt hp disp ## 1.161936e-16 1.330991e-03 1.097103e-02 9.285070e-01 ## ## [[2]] ## (Intercept) wt hp drat ## 5.133678e-05 3.642961e-04 1.178415e-03 1.987554e-01 ## ## [[3]] ## (Intercept) wt hp qsec ## 2.784556e-03 3.217222e-06 2.441762e-01 2.546284e-01
Жоден з кандидатів, що залишилися, не має p-значення нижче порогу входу. Алгоритм на цьому зупиняється, і це остаточна модель:
## ## Call: ## lm(formula = mpg ~ wt + hp, data = df) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.941 -1.600 -0.182 1.050 5.854 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 37.22727 1.59879 23.285 < 2e-16 *** ## wt -3.87783 0.63273 -6.129 1.12e-06 *** ## hp -0.03177 0.00903 -3.519 0.00145 ** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.593 on 29 degrees of freedom ## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148 ## F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12
Ви можете використовувати функцію ols_stepwise(), щоб порівняти результати.
stp_s <-ols_stepwise(fit, details=TRUE)
вихід:
Алгоритм знаходить рішення після двох кроків і повертає той самий результат, що й у покроковому покроковому посібнику вище.
Таким чином, остаточна модель пояснюється двома предикторами та перетином з точкою 1: кількість миль на галон негативно пов'язана як з валовою потужністю в кінських силах, так і з вагою.
## You are selecting variables based on p value... ## 1 variable(s) added.... ## Variable Selection Procedure ## Dependent Variable: mpg ## ## Stepwise Selection: Step 1 ## ## Variable wt Entered ## ## Model Summary ## -------------------------------------------------------------- ## R 0.868 RMSE 3.046 ## R-Squared 0.753 Coef. Var 15.161 ## Adj. R-Squared 0.745 MSE 9.277 ## Pred R-Squared 0.709 MAE 2.341 ## -------------------------------------------------------------- ## RMSE: Root Mean Square Error ## MSE: Mean Square Error ## MAE: Mean Absolute Error ## ANOVA ## -------------------------------------------------------------------- ## Sum of ## Squares DF Mean Square F Sig. ## -------------------------------------------------------------------- ## Regression 847.725 1 847.725 91.375 0.0000 ## Residual 278.322 30 9.277 ## Total 1126.047 31 ## -------------------------------------------------------------------- ## ## Parameter Estimates ## ---------------------------------------------------------------------------------------- ## model Beta Std. Error Std. Beta t Sig lower upper ## ---------------------------------------------------------------------------------------- ## (Intercept) 37.285 1.878 19.858 0.000 33.450 41.120 ## wt -5.344 0.559 -0.868 -9.559 0.000 -6.486 -4.203 ## ---------------------------------------------------------------------------------------- ## 1 variable(s) added... ## Stepwise Selection: Step 2 ## ## Variable hp Entered ## ## Model Summary ## -------------------------------------------------------------- ## R 0.909 RMSE 2.593 ## R-Squared 0.827 Coef. Var 12.909 ## Adj. R-Squared 0.815 MSE 6.726 ## Pred R-Squared 0.781 MAE 1.901 ## -------------------------------------------------------------- ## RMSE: Root Mean Square Error ## MSE: Mean Square Error ## MAE: Mean Absolute Error ## ANOVA ## -------------------------------------------------------------------- ## Sum of ## Squares DF Mean Square F Sig. ## -------------------------------------------------------------------- ## Regression 930.999 2 465.500 69.211 0.0000 ## Residual 195.048 29 6.726 ## Total 1126.047 31 ## -------------------------------------------------------------------- ## ## Parameter Estimates ## ---------------------------------------------------------------------------------------- ## model Beta Std. Error Std. Beta t Sig lower upper ## ---------------------------------------------------------------------------------------- ## (Intercept) 37.227 1.599 23.285 0.000 33.957 40.497 ## wt -3.878 0.633 -0.630 -6.129 0.000 -5.172 -2.584 ## hp -0.032 0.009 -0.361 -3.519 0.001 -0.050 -0.013 ## ---------------------------------------------------------------------------------------- ## No more variables to be added or removed.
Лінійна регресія в R: ключові висновки та довідник функцій
- Лінійна регресія відповідає на просте запитання: чи можна виміряти точний зв'язок між однією цільовою змінною та набором предикторів?
- Метод звичайних найменших квадратів знаходить параметри, які мінімізують суму квадратичних помилок, тобто вертикальну відстань між прогнозованими значеннями y та фактичними значеннями y.
- Імовірнісна модель, яка включає більше однієї незалежної змінної, називається моделлю множинної регресії.
- Метою алгоритму покрокової лінійної регресії є додавання та видалення потенційних кандидатів у моделі та збереження тих, хто має значний вплив на залежну змінну.
- Вибір змінних є важливою частиною підбору моделі, а покрокова регресія виконує цей пошук автоматично.
Кожна функція, що використовується в цьому посібнику, перелічена нижче:
| Library | Мета | функція | Аргументи |
|---|---|---|---|
| база | Обчисліть лінійну регресію | lm() | формула, дані |
| база | Узагальніть модель | резюме() | відповідати |
| база | Extract-коефіцієнти | lm()$коефіцієнт | |
| база | Extract залишків | lm()$залишки | |
| база | Extract-підібране значення | lm()$fitted.values | |
| olsrr | Запустіть покрокову регресію | ols_stepwise() | fit, pent = 0.1, prem = 0.3, деталі = FALSE |
Примітка:Пам'ятайте, що перед підбором моделі потрібно перетворити категоріальні змінні на фактори.






