Подготовлено в рамках курса “Анализ данных в бизнесе”, МГУ им. М.В. Ломоносова.
Авторы: Мирзоян А.Г., Щукина П.О.
Линейная регрессия используется для моделирования зависимости между одной зависимой переменной (целевой переменной) и одной или несколькими независимыми переменными (предикторами).
Модель представляет собой уравнение линейной зависимости, которое можно записать как:
# Линейная регрессия на mtcars
library(ggplot2)
data(mtcars)
# Модель множественной линейной регрессии: mpg как функция веса автомобиля, мощности и числа цилиндров
model_mtcars <- lm(mpg ~ wt + hp + cyl, data = mtcars)
summary(model_mtcars)
##
## Call:
## lm(formula = mpg ~ wt + hp + cyl, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.9290 -1.5598 -0.5311 1.1850 5.8986
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 38.75179 1.78686 21.687 < 2e-16 ***
## wt -3.16697 0.74058 -4.276 0.000199 ***
## hp -0.01804 0.01188 -1.519 0.140015
## cyl -0.94162 0.55092 -1.709 0.098480 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.512 on 28 degrees of freedom
## Multiple R-squared: 0.8431, Adjusted R-squared: 0.8263
## F-statistic: 50.17 on 3 and 28 DF, p-value: 2.184e-11
# Визуализация
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", col = "red") +
labs(title = "Множественная линейная регрессия: MPG vs Weight, Horsepower, Cylinders",
x = "Вес автомобиля (1000 lbs)", y = "Расход топлива (MPG)") + theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
# Линейная регрессия на Boston
library(MASS)
data(Boston)
# Модель множественной линейной регрессии: медв как функция lstat, возраст и rm (количество комнат)
model_boston <- lm(medv ~ lstat + age + rm, data = Boston)
summary(model_boston)
##
## Call:
## lm(formula = medv ~ lstat + age + rm, data = Boston)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18.210 -3.467 -1.053 1.957 27.500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.175311 3.181924 -0.369 0.712
## lstat -0.668513 0.054357 -12.298 <2e-16 ***
## age 0.009091 0.011215 0.811 0.418
## rm 5.019133 0.454306 11.048 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.542 on 502 degrees of freedom
## Multiple R-squared: 0.639, Adjusted R-squared: 0.6369
## F-statistic: 296.2 on 3 and 502 DF, p-value: < 2.2e-16
# Визуализация
ggplot(Boston, aes(x = lstat, y = medv)) +
geom_point() +
geom_smooth(method = "lm", col = "blue") +
labs(title = "Множественная линейная регрессия: MEDV vs LSTAT, Age, Rooms",
x = "Процент населения низкого социального статуса", y = "Медианная стоимость домов ($1000)") + theme_minimal()
# Линейная регрессия на AirQuality
data(airquality)
# Модель множественной линейной регрессии: Ozone как функция температуры, солнечных часов и ветра
model_airquality <- lm(Ozone ~ Temp + Solar.R + Wind, data = airquality, na.action = na.exclude)
summary(model_airquality)
##
## Call:
## lm(formula = Ozone ~ Temp + Solar.R + Wind, data = airquality,
## na.action = na.exclude)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40.485 -14.219 -3.551 10.097 95.619
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -64.34208 23.05472 -2.791 0.00623 **
## Temp 1.65209 0.25353 6.516 2.42e-09 ***
## Solar.R 0.05982 0.02319 2.580 0.01124 *
## Wind -3.33359 0.65441 -5.094 1.52e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.18 on 107 degrees of freedom
## (42 пропущенных наблюдений удалены)
## Multiple R-squared: 0.6059, Adjusted R-squared: 0.5948
## F-statistic: 54.83 on 3 and 107 DF, p-value: < 2.2e-16
# Визуализация
ggplot(airquality, aes(x = Temp, y = Ozone)) +
geom_point() +
geom_smooth(method = "lm", col = "green") +
labs(title = "Множественная линейная регрессия: Ozone vs Temperature, Solar Radiation, Wind",
x = "Температура (градусы Фаренгейта)", y = "Уровень озона") + theme_minimal()
В линейной регрессии каждый коэффициент показывает ожидаемое изменение зависимой переменной при изменении независимой переменной на одну единицу.
Логлинейная модель (Log-Linear Model)
Описание: Логлинейная модель применяется для моделирования зависимости между логарифмом зависимой переменной и одной или несколькими независимыми переменными.
\(\ln(y)\) = \(\beta _0\) + \(\beta _1\)*\(x\) + \(\epsilon\)
Пример в R:
# Логлинейная модель на mtcars
model_log_linear <- lm(log(mpg) ~ wt, data = mtcars)
summary(model_log_linear)
##
## Call:
## lm(formula = log(mpg) ~ wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.210346 -0.085932 -0.006136 0.061335 0.308623
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.83191 0.08396 45.64 < 2e-16 ***
## wt -0.27178 0.02500 -10.87 6.31e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1362 on 30 degrees of freedom
## Multiple R-squared: 0.7976, Adjusted R-squared: 0.7908
## F-statistic: 118.2 on 1 and 30 DF, p-value: 6.31e-12
Линейно-логарифмическая модель (Linear-Logarithmic Model)
Описание: Линейно-логарифмическая модель применяется для моделирования зависимости между зависимой переменной и логарифмом независимой переменной.
\(y\) = \(\beta _0\) + \(\beta _1\)*\(\ln(x)\) + \(\epsilon\)
Пример в R:
# Линейно-логарифмическая модель на mtcars
model_linear_log <- lm(mpg ~ log(wt), data = mtcars)
summary(model_linear_log)
##
## Call:
## lm(formula = mpg ~ log(wt), data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7440 -2.0954 -0.3672 1.0709 6.6150
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.257 1.758 22.32 < 2e-16 ***
## log(wt) -17.086 1.510 -11.31 2.39e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.669 on 30 degrees of freedom
## Multiple R-squared: 0.8101, Adjusted R-squared: 0.8038
## F-statistic: 128 on 1 and 30 DF, p-value: 2.391e-12
Логарифмическая модель (Log-Log Model)
Описание: Логарифмическая модель применяется для моделирования зависимости между логарифмами зависимой и независимых переменных.
\(ln(y)\) = \(\beta _0\) + \(\beta _1\)*\(\ln(x)\) + \(\epsilon\)
Пример в R:
# Логарифмическая модель на mtcars
model_log_log <- lm(log(mpg) ~ log(wt), data = mtcars)
summary(model_log_log)
##
## Call:
## lm(formula = log(mpg) ~ log(wt), data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.18141 -0.10681 -0.02125 0.08109 0.26930
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.90181 0.08790 44.39 < 2e-16 ***
## log(wt) -0.84182 0.07549 -11.15 3.41e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1334 on 30 degrees of freedom
## Multiple R-squared: 0.8056, Adjusted R-squared: 0.7992
## F-statistic: 124.4 on 1 and 30 DF, p-value: 3.406e-12
Логистическая регрессия используется для моделирования вероятностей наступления определенных событий, особенно когда зависимая переменная является бинарной (например, “да/нет”, “успех/неуспех”). В отличие от линейной регрессии, логистическая регрессия прогнозирует вероятность, что зависимая переменная принимает значение 1 (или “истина”), используя логистическую функцию.
Модель представляет собой уравнение логистической зависимости, которое можно записать как: \[\text{logit}(p) = \ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n\]
# Логистическая регрессия на Titanic
library(titanic)
library(dplyr)
data("titanic_train")
# Преобразование данных
titanic_clean <- titanic_train %>%
select(Survived, Pclass, Sex, Age, Fare) %>%
na.omit()
titanic_clean$Sex <- factor(titanic_clean$Sex, levels = c("male", "female"))
# Модель логистической регрессии: Survived как функция Pclass, Sex, Age и Fare
model_titanic <- glm(Survived ~ Pclass + Sex + Age + Fare, data = titanic_clean, family = binomial)
summary(model_titanic)
##
## Call:
## glm(formula = Survived ~ Pclass + Sex + Age + Fare, family = binomial,
## data = titanic_clean)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.4698435 0.5246627 4.707 2.51e-06 ***
## Pclass -1.2697410 0.1586252 -8.005 1.20e-15 ***
## Sexfemale 2.5181969 0.2078562 12.115 < 2e-16 ***
## Age -0.0367073 0.0076795 -4.780 1.75e-06 ***
## Fare 0.0005373 0.0021821 0.246 0.805
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 964.52 on 713 degrees of freedom
## Residual deviance: 647.23 on 709 degrees of freedom
## AIC: 657.23
##
## Number of Fisher Scoring iterations: 5
# Интерпретация коэффициентов
exp(coef(model_titanic))
## (Intercept) Pclass Sexfemale Age Fare
## 11.8205962 0.2809044 12.4062063 0.9639582 1.0005375
# Логистическая регрессия на Default
library(ISLR)
data(Default)
# Преобразование данных
default_clean <- Default
# Модель логистической регрессии: default как функция balance, income и student
model_default <- glm(default ~ balance + income + student, data = default_clean, family = binomial)
summary(model_default)
##
## Call:
## glm(formula = default ~ balance + income + student, family = binomial,
## data = default_clean)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.087e+01 4.923e-01 -22.080 < 2e-16 ***
## balance 5.737e-03 2.319e-04 24.738 < 2e-16 ***
## income 3.033e-06 8.203e-06 0.370 0.71152
## studentYes -6.468e-01 2.363e-01 -2.738 0.00619 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2920.6 on 9999 degrees of freedom
## Residual deviance: 1571.5 on 9996 degrees of freedom
## AIC: 1579.5
##
## Number of Fisher Scoring iterations: 8
В логистической регрессии коэффициенты интерпретируются с точки зрения логитов; для преобразования в вероятности можно использовать экспоненцию \(exp(\beta)\).
Если \(\beta_1 = 0.5\), то \(e^{\beta_1} = e^{0.5} \approx 1.65\) означает, что при увеличении \(x\) на одну единицу, шансы того, что зависимая переменная примет значение 1, увеличиваются в 1.65 раза.
ROC-кривая (Receiver Operating Characteristic curve) — это графический способ оценки качества бинарного классификатора, такого как логистическая регрессия. ROC-кривая показывает соотношение между чувствительностью (sensitivity, также известной как полнота или true positive rate) и специфичностью (specificity, также известной как 1 - false positive rate) при различных пороговых значениях.
Построение ROC-кривой
Пороговые значения:
График:
library(pROC)
# Построение ROC-кривой для модели Titanic
roc_titanic <- roc(titanic_clean$Survived, fitted(model_titanic))
plot(roc_titanic, col = "blue", main = "ROC-кривая для модели Titanic")
# Оценка точности модели Titanic
pred_titanic <- ifelse(fitted(model_titanic) > 0.5, 1, 0)
confusion_matrix_titanic <- table(pred_titanic, titanic_clean$Survived)
accuracy_titanic <- sum(diag(confusion_matrix_titanic)) / sum(confusion_matrix_titanic)
print(paste("Точность модели Titanic:", accuracy_titanic))
## [1] "Точность модели Titanic: 0.792717086834734"