Суббота, 04.04.2026, 21:47Приветствуем вас Гость | RSS
Решение задач в среде R
Главная | regression ggplot2 | Регистрация | Вход
» Меню сайта

» R практикум

» R кодинг

» Rmatem

» Опрос
Сколько вам лет?
Всего ответов: 9

» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Регрессивный анализ в ggplot2 

Формулируем основную задачу. Нам нужен скрипт, который максимально просто, удобно и наглядно проводил регрессионный анализ и выводил график на котором отображалось уравнение регрессии и коэффициент корреляции. То есть необходимо провести анализ данных, и по возможности подбирать необходимые модели регрессии от линейной до полиномной. Рассмотрим несколько задач, и не забудьте подключить необходимые библиотеки:

library(ggplot2)
library(ggpubr)

Задача 1. Пример линейной регрессии. 

Poly = 1 #степень полинома
x = 1:5 ; y = c(1, 3, 7, 10, 14)

datas1 = data.frame(x, y)
md = lm(y ~ poly(x, degree = Poly, raw = T))
# извлекаем значение R-Sqaured
RSq = round(summary(md)$r.squared, 5)
RSQ = paste(' R-Sqaured: ', RSq)
# строим график
ggplot(data=datas1, aes (x=x, y=y)) +
  geom_smooth(method = lm, formula = y ~ poly(x, Poly, raw = TRUE),
              fill = "grey50", color='red',linetype = 'longdash', size = 1.4) +
  geom_point(size = 2, shape = 1) +
  stat_regline_equation(label.x = min(x), label.y = max(y), size = 8,color = 'red',
        formula = y ~ poly(x, Poly, raw = TRUE)) +
  labs(x=' X Values ', y=' Y Values ', title=' Linear Regression Plot ') +
  annotate("text", x = min(x)+0.5, y = max(y)-2, size = 8,color = 'red',
           label = RSQ) +
  theme(plot.title = element_text(hjust=0.5, size=15, face='bold'))  +
  
  theme(
    panel.background = element_rect(fill = "white",
                                    color = "black",
                                    size = 0.5, linetype = "solid"),
    panel.grid.major = element_line(size = 0.5, linetype = 'longdash', color = "grey50"),
    panel.grid.minor = element_line(size = 0.25, linetype = 'longdash', color = "grey50") 
    
  )

summary(md)

> summary(md)

Call:
lm(formula = y ~ poly(x, degree = Poly, raw = T))

Residuals:
 1 2 3 4 5 
 6.000e-01 -7.000e-01 -4.996e-16 -3.000e-01 4.000e-01 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) -2.9000 0.6351 -4.566 0.019699 * 
poly(x, degree = Poly, raw = T) 3.3000 0.1915 17.234 0.000426 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6055 on 3 degrees of freedom
Multiple R-squared: 0.99, Adjusted R-squared: 0.9867 
F-statistic: 297 on 1 and 3 DF, p-value: 0.0004257

 Задача 2. Кубическая регрессия.

Несмотря на то что функция y = 0.25*x^3 - x^2 + 2*x + 5 является кубической, мы начнем анализ со степенью полинома равным двум. Так же добавим небольшую погрешность y = 0.25*x^3 - x^2 + 2*x + 5 + rnorm(length(x), 5, 30). Вот теперь проведем регрессивный анализ данных предположив что они исходят от квадратической функции (Poly = 2 #степень полинома)

set.seed(454)
x = seq(-8, 10, 0.1)
y = 0.25*x^3 - x^2 + 2*x + 5 + rnorm(length(x), 0, 10)

Poly = 2 #степень полинома

datas1 = data.frame(x, y)
md = lm(y ~ poly(x, degree = Poly, raw = T))
# извлекаем значение R-Sqaured
RSq = round(summary(md)$r.squared, 5)
RSQ = paste(' R-Sqaured: ', RSq)
# строим график
ggplot(data=datas1, aes (x=x, y=y)) +
  geom_smooth(method = lm, formula = y ~ poly(x, Poly, raw = TRUE),
              fill = "grey50", color='red',linetype = 'longdash', size = 1.4) +
  geom_point(size = 2, shape = 1) +
  stat_regline_equation(label.x = min(x), label.y = max(y), size = 8,color = 'red',
        formula = y ~ poly(x, Poly, raw = TRUE)) +
  labs(x=' X Values ', y=' Y Values ', title=' Linear Regression Plot ') +
  annotate("text", x = min(x)+2, y = max(y)-25, size = 8,color = 'red',
           label = RSQ) +
  theme(plot.title = element_text(hjust=0.5, size=15, face='bold'))  +
  
  theme(
    panel.background = element_rect(fill = "white",
                                    color = "black",
                                    size = 0.5, linetype = "solid"),
    panel.grid.major = element_line(size = 0.5, linetype = 'longdash', color = "grey50"),
    panel.grid.minor = element_line(size = 0.25, linetype = 'longdash', color = "grey50") 
    
  )

Видим, что найденная функция все же недостаточно хорошо описала зависимость (о чем говорит коэффициент корреляции 83%) и еще более наглядно показывает график, который проходит то ниже, то снова выше и в конце опять ниже точек. Поэтому увеличиваем степень полинома на единичку (Poly = 3 #степень полинома) и снова выполняем ту же конструкцию еще раз. 

Вот теперь все действительно описывается точно. 

Задача 3. Полином 5 степени.

set.seed(454)
x = seq(-4, 4, 0.1)
y = 2*x^5 + x^4 + 0.25*x^3 - 2*x^2 + 2*x + 5 + rnorm(length(x), 0, 10)

Poly = 4 #степень полинома

datas1 = data.frame(x, y)
md = lm(y ~ poly(x, degree = Poly, raw = T))
# извлекаем значение R-Sqaured
RSq = round(summary(md)$r.squared, 5)
RSQ = paste(' R-Sqaured: ', RSq)
# строим график
ggplot(data=datas1, aes (x=x, y=y)) +
  geom_smooth(method = lm, formula = y ~ poly(x, Poly, raw = TRUE),
              fill = "grey50", color='red',linetype = 'longdash', size = 1.4) +
  geom_point(size = 2, shape = 1) +
  stat_regline_equation(label.x = min(x), label.y = max(y), size = 8,color = 'red',
        formula = y ~ poly(x, Poly, raw = TRUE)) +
  labs(x=' X Values ', y=' Y Values ', title=' Linear Regression Plot ') +
  annotate("text", x = min(x)+1.2, y = max(y)-285, size = 8,color = 'red',
           label = RSQ) +
  theme(plot.title = element_text(hjust=0.5, size=15, face='bold'))  +
  
  theme(
    panel.background = element_rect(fill = "white",
                                    color = "black",
                                    size = 0.5, linetype = "solid"),
    panel.grid.major = element_line(size = 0.5, linetype = 'longdash', color = "grey50"),
    panel.grid.minor = element_line(size = 0.25, linetype = 'longdash', color = "grey50") 
    
  )

А вот какой результат получается если мы задаем полином пятой степени Poly = 5 #степень полинома

 

 

» Вход на сайт

» Поиск

» Работа с файлами

» Вся графика

» Гистогра́мма

» Теория вероятности

» Сравнение групп

» Дисперс анализ

» Блог

» Календарь
«  Апрель 2026  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930

» Архив записей


Copyright MyCorp © 2026
uCoz