Пример построения экспоненциальной регрессии в среде R
Воспользуемся набором данных, содержащие цены, размеры другие атрибуты почти 54тыс. бриллиантов. Данные уже содержаться в пакете ggplot2. Всего в наборе 53940 записи.
Ссылка на описание данных: http://ggplot2.tidyverse. org/reference/diamonds. html
Нас интересуют следующие атрибуты:
- carat – вес бриллиантов в каратах; price – цена в долларах США.
Извлечем данные:
# Выгрузка данных из пакета
data( diamonds, package = "ggplot2")
Теперь данные записаны в переменную diamonds.
Найдем зависимость между стоимости бриллианта от его массы. Построим облако точек:
# Построение облака точек
plot(x = diamonds$carat, y = diamonds$price, col="blue",type = "p", pch=16,
xlab="carat", ylab="price", main="Зависимость между весом и
ценой бриллианта")
Получим график:

Рис. 1. Облако точек, характеризующих зависимость стоимости бриллиантов
от количества карат.
Видно, что темп роста цены на бриллиант возрастает с увеличением количества карат. Это дает нам основание полагать, что уместно воспользоваться экспоненциальной регрессией.
Для нахождения коэффициентов линейной регрессии воспользуемся встроенной функцией lm() для прологарифмируемой переменной отклика (в данном случае цены на бриллианта).
expR <- lm(log(price) ~ carat, data=diamonds)
expR
Получим результат, показанный на Рис.2.

Рис. 2. Результат вызова функции lm().
Как видно из Рис.2, свободный коэффициент модели (т. е. значение линейной функции в нуле) равен примерно – 6,215, коэффициент при переменной «carat» (т. е. угол наклона прямой) равен примерно 1,97.
По полученным коэффициентам модели построим предсказания для исходного множества точек (с помощью функции predict) и не забудем возвести результат в степень экспоненты. Присвоим полученные значения переменной отклика переменной out1.
out1 <- exp(predict(expR))
Подробнее о функции predict: https://www. rdocumentation. org/packages/raster/versions/2.6-7/topics/predict
Нанесем полученные точки на наш график:
points(x = diamonds$carat, y = out1)
Результат:

Рис. 3. Облако точек, характеризующих зависимость стоимости бриллиантов
от количества карат и точки, полученные экспоненциальной регрессией.
Для сравнения построим линейную регрессию и нанесем полученную прямую на график.
# добавим линейную регрессию
linearM <- lm(price ~ carat, data=diamonds)
abline(linearM, col="red",lwd="3")
Итоговый результат:

Рис. 4. Итоговый график
Как видно из Рис. 4, данные имеют больше экспоненциальный характер, нежели линейный.
Полный код:
# Выгрузка данных из пакета
data( diamonds, package = "ggplot2")
# Построение облака точек
plot(x = diamonds$carat, y = diamonds$price, col="blue",type = "p", pch=16,
xlab="carat",ylab="price",main="Зависимость между весом и ценой бриллианта")
expR <- lm(log(price) ~ carat, data=diamonds)
expR
# Построим переменную отклика для полученной модели регрессии
out1<-exp(predict(expR))
points(x = diamonds$carat, y = out1)
# добавим линейную регрессию
linearM <- lm(price ~ carat, data=diamonds)
abline(linearM, col="red",lwd="3")
Ссылки на источники
Экспоненциальная регрессия:
- Galit Shmueli,? Peter C. Bruce,? Inbal Yahav, Nitin R. Patel, Kenneth C. Lichtendahl. Книга “Data mining for business analytics. Concepts, techniques and applications in R”. БСЭ. Статья “Регрессия”: https://dic. academic. ru/dic. nsf/bse/126697
Постановка задачи построения однофакторной линейной регрессии:
- https://edu. kpfu. ru/mod/resource/view. php? id=35155
Пример построения уравнения однофакторной линейной регрессии в R:
- https://edu. kpfu. ru/mod/resource/view. php? id=101624
Описание данных:
- http://ggplot2.tidyverse. org/reference/diamonds. html
Функция lm():
- https://www. rdocumentation. org/packages/stats/versions/3.4.3/topics/lm
Функция predict():
- https://www. rdocumentation. org/packages/raster/versions/2.6-7/topics/predict


