Пример построения экспоненциальной регрессии в среде 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