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

» R практикум

» R кодинг

» Rmatem

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

» Статистика

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

Нелинейная регрессия

Нелинейная регрессия — статистический метод, который используется для моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными. Некоторые примеры нелинейных регрессионных моделей: полиномиальная, экспоненциальная, логарифмическая… Чтобы выполнить нелинейную регрессию в R, используется функция nls(). Она требует начального предположения для параметров модели. Для получения информации о качестве соответствия нелинейной регрессионной модели можно применять функцию Summary().

Нелинейная регрессия — это статистический метод, который используется для моделирования взаимосвязи между зависимой переменной и одной из независимых переменных. При нелинейной регрессии взаимосвязь моделируется с использованием нелинейного уравнения. Это означает, что модель может фиксировать более сложные и нелинейные взаимосвязи между переменными, но также требует большего количества вычислительных ресурсов и более сложного подхода к оценке параметров модели.
Мы реализуем модель нелинейной регрессии на языке программирования R. 
Прежде, чем начать, убедитесь, что установлены следующие пакеты:
install.packages(“minpack.lm”)
install.packages(“ggplot2”)
Пример 1
В этом примере демонстрируется экспоненциальная регрессия в R с использованием пакетов ggplot2 и nls. 
Мы начинаем с загрузки необходимых библиотек и создания выборочных данных для независимой переменной x и зависимой переменной y. 
Затем модель подгоняется с помощью функции nls(), которая выполняет нелинейную оценку методом наименьших квадратов. В этом случае мы определяем взаимосвязь между x и y с помощью формулы: y=a⋅exp(b⋅x)
Это экспоненциальная функция с параметрами a и b. Начальные значения этих параметров задаются с помощью аргумента start в качестве list(a = 4, b = 2) для управления процессом подбора.
library(minpack.lm)
library(ggplot2)

x <- c(0, 1, 2, 3, 4, 5)
y <- c(1, 2, 4, 8, 16, 32)

start_values <- c(a=4, b=2)
fit <- nls(y ~ a * exp(b * x),
           start = start_values,
           algorithm = "port",
           control = nls.control(maxiter = 1000))
summary(fit)

> summary(fit)

Formula: y ~ a * exp(b * x)

Parameters:
 Estimate Std. Error t value Pr(>|t|) 
a 1.000e+00 6.762e-14 1.479e+13 <2e-16 ***
b 6.931e-01 1.434e-14 4.832e+13 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.498e-13 on 4 degrees of freedom

Algorithm "port", convergence message: absolute function convergence (6)

Построение линии экспоненциальной регрессии с точками

ggplot(data.frame(x, y), aes(x, y)) +
  geom_point() +
  geom_line(aes(x, predict(fit, newdata = data.frame(x)))) +
  ggtitle("Экспоненциальная регрессия") +
  xlab("x") +
  ylab("y")

Пример 2
Этот пример иллюстрирует полиномиальную регрессию второй степени в R с использованием ggplot2пакета для визуализации и lm() функции из базовой версии R для подбора модели. Независимая переменная x определяется как последовательность целых чисел от 1 до 10, а зависимая переменная y генерируется с помощью уравнения: y=x2+x+2+random noise 
Случайный шум вводится с помощью функции rnorm() со средним значением 0 и стандартным отклонением 10 для имитации реальной изменчивости. Создаётся фрейм данных df, содержащий значения x и y. Затем с помощью lm(y ~ poly(x, 2), data = df), где poly(x, 2) обозначает полином второй степени, подгоняется модель полиномиальной регрессии. 
#data
set.seed(5)
x <- 1:10
y <- x^2 + x + 2 + rnorm(10, 0, 10)
df <- data.frame(x, y)
#fitting the model
fit <- lm(y ~ poly(x, 2), data = df)
summary(fit)

> summary(fit)

Call:
lm(formula = y ~ poly(x, 2), data = df)

Residuals:
 Min 1Q Median 3Q Max 
-12.585 -5.923 -2.564 3.630 16.773 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 45.211 3.388 13.345 3.11e-06 ***
poly(x, 2)1 106.947 10.714 9.982 2.16e-05 ***
poly(x, 2)2 20.057 10.714 1.872 0.103 
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10.71 on 7 degrees of freedom
Multiple R-squared: 0.9364, Adjusted R-squared: 0.9183 
F-statistic: 51.57 on 2 and 7 DF, p-value: 6.47e-05

Построим линию регрессии

library(ggplot2)
#plotting the model
ggplot(df, aes(x, y)) +
  geom_point() +
  geom_line(aes(x, predict(fit))) +
  ggtitle("Полиномиальная регрессия")

Пример  3. Совместим в одной формуле несколько функций

library(minpack.lm)
library(ggplot2)

x <- seq(0, 10, 0.25)
y <- 4*exp(0.5*x) - 3*x^2 - 2*x + 10

start_values <- c(a=1, b=1, c=1, d=1, e=1)
fit <- nls(y ~ a*exp(b*x) + c*x^2 + d*x + e,
           start = start_values,
           algorithm = "port",
           control = nls.control(maxiter = 5000))
summary(fit)
cor(y,predict(fit))
ggplot(data.frame(x, y), aes(x, y)) +
  geom_point() +
  geom_line(aes(x, predict(fit, newdata = data.frame(x)))) +
  ggtitle("Экспоненциальная регрессия") +
  xlab("x") +
  ylab("y")

» Вход на сайт

» Поиск

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

» Вся графика

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

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

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

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

» Блог

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

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


Copyright MyCorp © 2026
uCoz