Идея: прямая наименьших квадратов
Линейная регрессия проводит прямую сквозь облако точек: y = свободный член + наклон × x. Из всех возможных прямых lm() выбирает ту, что минимизирует сумму квадратов остатков, где остаток — это вертикальный зазор между точкой и прямой. Возведение в квадрат заставляет крупные промахи весить непропорционально много, поэтому один дикий выброс способен наклонить всю подгонку.
Там, где корреляция даёт одно безразмерное число на вопрос «насколько плотно они движутся вместе», регрессия даёт уравнение — с единицами измерения, интерпретируемым наклоном и механикой для прогнозов.
Читайте формулу как «моделировать mpg как функцию от wt». Два коэффициента и есть подогнанная прямая: mpg ≈ 37.3 − 5.3 × вес. У наклона есть настоящие единицы: каждая дополнительная тысяча фунтов веса машины (wt измеряется в тысячах фунтов) стоит около 5.3 мили на галлон. Свободный член (37.3 мили на галлон при нулевом весе) — это просто место, где прямая пересекает ноль; ни одна машина не весит ничего, так что не вчитывайтесь в него.
Разбор summary()
summary(fit) — это тот вывод, который вас просят интерпретировать на любом курсе статистики. Запустите его, а затем разберите блок за блоком:
Call — повторяет подогнанную вами модель. Сейчас это мелочь, но спасение, когда вы жонглируете шестью объектами моделей.
Residuals — пятичисловая сводка остатков (наблюдённое − предсказанное). Вам нужна медиана около 0 и грубая симметрия между Min/Max и 1Q/3Q; сильная асимметрия намекает, что прямолинейная модель чего-то не улавливает.
Coefficients — сердце вывода, по строке на член модели:
- Estimate — подогнанное значение. Для
wtэто −5.34: каждая дополнительная тысяча фунтов связана примерно с 5.3 мили на галлон меньше. Всегда переводите наклон в предложение с единицами измерения; это предложение и есть всё практическое содержание модели. - Std. Error — насколько оценка колебалась бы от выборки к выборке. Оценки в пределах пары стандартных ошибок от нуля шатки.
- t value — Estimate ÷ Std. Error: на сколько стандартных ошибок коэффициент отстоит от нуля (здесь −9.56).
- Pr(>|t|) — p-значение для вопроса «может ли этот коэффициент действительно быть нулём?». Для
wtоно около 1.3e-10: если бы у веса действительно не было линейной связи с расходом, столь крутой наклон практически никогда не появился бы в выборке из 32. Малое p-значение = свидетельство того, что связь существует, а не доказательство правильности модели и не мера важности (крошечный, но точно оценённый эффект тоже получит крошечное p-значение). - Signif. codes / звёздочки — визуальное сокращение для столбца p-значений. Удобно; информации не добавляет.
Residual standard error: 3.05 on 30 degrees of freedom — типичный размер промаха прогноза в собственных единицах отклика: предсказания обычно ошибаются примерно на 3 мили на галлон. Оценивайте это относительно масштаба mpg (диапазон примерно 10–34).
Multiple R-squared: 0.75 — вес объясняет около 75% дисперсии расхода. Adjusted R-squared (0.74) пересчитывает это со штрафом за каждый предиктор, потому что сырая версия может только расти при добавлении переменных — даже случайного шума. При сравнении моделей с разным числом предикторов честной является скорректированная. И не поддавайтесь рефлексу «хорошая модель = высокий R²»: по-настоящему полезный эффект может жить в модели с низким R² (шумный отклик, один из многих факторов), тогда как высокий R² может происходить от переобучения или просочившейся переменной.
F-statistic: 91.4 ... p-value: 1.29e-10 — проверка модели целиком: обыгрывает ли она вариант «просто предсказывать среднее всем»? С одним предиктором она дублирует t-критерий наклона (заметьте, 9.56² ≈ 91.4); с несколькими предикторами она становится совместной проверкой того, что хотя бы один коэффициент ненулевой. Её механика — то же разложение дисперсии, что и в дисперсионном анализе.
Множественная регрессия: при прочих равных
Добавляйте предикторы через +:
Интерпретация меняется одним ключевым образом. Каждая Estimate теперь является эффектом этого предиктора при фиксированных остальных: коэффициент при wt (около −3.9, снизившийся с −5.3) — это расходная цена лишнего веса при сравнении машин с одинаковой мощностью. Значение −5.3 из простой регрессии молча включало в себя тот факт, что более тяжёлые машины к тому же обычно мощнее; множественная регрессия это разделяет. Поэтому же коэффициенты сдвигаются при добавлении переменных: если новый предиктор коррелирует со старым, должностная инструкция старого меняется. R-квадрат поднимается примерно до 0.83, и здесь именно скорректированная версия даёт справедливое сравнение с моделью на одном предикторе.
Прогнозы: predict()
Подогнанная модель — это функция; predict() её вычисляет. Постройте датафрейм newdata, чьи имена столбцов в точности совпадают с предикторами:
Два типа интервалов отвечают на разные вопросы, и их путаница — классическая экзаменационная ошибка:
interval = "confidence"— неопределённость относительно среднего: «для всех машин весом 2500 фунтов, где находится средний расход?» Узкий и сужается с ростом объёма данных.interval = "prediction"— диапазон, куда, вероятно, попадёт отдельная новая машина такого веса. Гораздо шире, потому что одна машина несёт собственный разброс вокруг прямой — разброс, который не усредняется никаким объёмом данных.
Сообщение доверительного интервала там, где вопрос про одно новое наблюдение, драматически преувеличивает вашу точность.
Диагностика и ловушка экстраполяции
summary() говорит, что модель оценивает; графики остатков говорят, стоит ли ей верить. В интерактивной сессии:
par(mfrow = c(2, 2))
plot(fit) # four diagnostic plots
На что смотреть: Residuals vs Fitted должен быть бесформенным облаком — кривая означает, что связь не прямая; воронка (разброс растёт вместе с предсказанными значениями) означает непостоянство дисперсии, и ваши стандартные ошибки неверны. Точки на Q-Q plot должны льнуть к прямой — тяжёлые хвосты означают, что выбросы искажают подгонку. Scale-Location — снова проверка на воронку. Residuals vs Leverage помечает влиятельные точки — наблюдения, которые в одиночку тянут коэффициенты (в mtcars здесь обычно всплывают экзотические машины вроде Chrysler Imperial). Быстрая диаграмма рассеяния сырых данных до подгонки ловит большую часть этого заранее.
Наконец, ловушка, которую не поймает никакая диагностика, — экстраполяция. Модель училась на машинах весом примерно от 1500 до 5400 фунтов. Скормите predict() значение wt, равное 8, — и она бодро вернёт отрицательный расход: математика продолжает прямую бесконечно, но свидетельства заканчиваются на краю данных. Прогнозируйте только внутри (или вблизи) того диапазона, на котором вы подгоняли.
Что вы уносите с собой
fit <- lm(y ~ x, data = df)подгоняет прямую наименьших квадратов;coef(fit)— это уравнение,summary(fit)— полный отчёт.- Читайте Estimate как предложения с единицами измерения;
Pr(>|t|)спрашивает «может ли это быть нулём?», а не «важно ли это?». - Residual standard error — типичный промах в реальных единицах; adjusted R-squared — честное число для сравнения моделей.
- В множественной регрессии каждый коэффициент означает «при прочих равных» — и коэффициенты сдвигаются, когда добавляются коррелированные предикторы.
predict(fit, newdata, interval = ...): «confidence» для среднего, «prediction» для одного нового случая — широкий.- Проверяйте
plot(fit)на кривые, воронки и влиятельные точки; никогда не доверяйте прогнозам за пределами диапазона данных.
Дальше: когда отклик является «да/нет», а не числом, — логистическая регрессия через glm().
Часто задаваемые вопросы
Как построить линейную регрессию в R?
С помощью lm() и формулы: fit <- lm(mpg ~ wt, data = mtcars) регрессирует mpg на вес. Затем summary(fit) печатает коэффициенты, их p-значения, R-квадрат и F-статистику. Добавляйте предикторы через +: lm(mpg ~ wt + hp, data = mtcars).
Как интерпретировать вывод summary lm в R?
В блоке Coefficients каждая Estimate — это ожидаемое изменение отклика при увеличении данного предиктора на единицу (при фиксированных остальных); Pr(>|t|) проверяет, может ли этот коэффициент правдоподобно быть нулевым. Multiple R-squared — доля объяснённой дисперсии. F-статистика внизу проверяет модель целиком против модели только со свободным членом.
В чём разница между Multiple и Adjusted R-squared?
Multiple R-squared — сырая доля объяснённой дисперсии, и она может только расти при добавлении предикторов, даже бесполезных. Adjusted R-squared начисляет штраф за каждый предиктор, поэтому растёт, только когда новая переменная оправдывает своё место. Сравнивайте модели по скорректированной версии.
Как спрогнозировать новые значения по регрессии в R?
Постройте датафрейм, чьи имена столбцов совпадают с предикторами, а затем вызовите predict(fit, newdata = ...). Добавьте interval = "confidence" для неопределённости относительно среднего отклика или interval = "prediction" для (гораздо более широкого) диапазона, куда, вероятно, попадёт отдельное новое наблюдение.