Простая линейная регрессия — это статистическая методология, используемая для оценки связи междудвумя количественными переменными, чтобы можно было оценить или спрогнозировать зависимую переменную с использованием независимой переменной. Вы можете использовать простую линейную регрессию, когда хотите узнать: (1)насколько сильна связь между двумя переменными; (2)Значение зависимой переменной при определенном значении независимой переменной.

Этот метод широко используется в экономике, социальных и биомедицинских науках. Примером применения регрессии является: (i)Продолжительность пребывания в больнице хирургического пациента можно предсказать, используя взаимосвязь между временем пребывания в больнице и тяжестью состояния. операции.(ii) Продажи продукта можно предсказать, используя взаимосвязь между продажами и суммой расходов на рекламу.

Модель регрессии

Регрессионные модели описывают взаимосвязь между переменными путем подгонки линии к наблюдаемым данным. В моделях линейной регрессии используется прямая линия, а в моделях логистической и нелинейной регрессии — кривая. Регрессия позволяет оценить, как изменяется зависимая переменная по мере изменения независимой переменной (переменных).

Постановка задачи

В контексте, когда производитель пива ежегодно инвестирует в среднем 8 миллионов метиков в телевизионную рекламу и 4 миллиона в спонсорство спортивных и культурных мероприятий. Среднегодовой доход после инвестиций в телевизионную рекламу, скидки и спонсорство достигает 2,4 млрд. метик. В этом случае хочет ли производитель знать, какой рекламный сегмент приносит наибольший доход? Можно ли спрогнозировать выручку на ближайшие годы с учетом рекламного сегмента, который приносит наибольшую выручку?

Стратегия продаж

Анализируемый набор данных beer относится к 24-месячному периоду с 4 изучаемыми переменными, а именно: Доходы, телепередачи, скидки и спонсорство. Эти данные показывают доходы в миллиардах метиков от продаж различных марок пива в результате бюджета в миллионах метиков, выделенного на телевизионную рекламу, скидки и спонсорство.

Цель

Чтобы разработать стратегический план, способный предсказать увеличение дохода в ближайшие годы, случай будет проанализирован, чтобы проверить, если: (1) Существует ли связь между доходом и рекламной сегменты? (2) Если ответ на первый вопрос утвердительный, насколько сильна взаимосвязь между прибылью и рекламными сегментами? (3) Какая акция приносит наибольший доход? (4) Существует ли линейная связь между независимой переменной и откликом? (5) Насколько точно можно прогнозировать будущие доходы?

Чтобы ответить на каждый из приведенных выше вопросов, мы будем использовать статистический метод, называемый Простая линейная регрессия, который может предоставить объяснительную модель инвестиций и доходов и прогнозировать будущие доходы, имея уравнение:

Исследовательский анализ

Перефразируя John Wilder Tukey (1977), исследовательский анализ — это метод, в котором используется широкий спектр количественных и графических методов для максимального получения информации от рассматриваемых переменных.

Во-первых, этот шаг применяется для ознакомления с набором данных для анализа.

import pandas as pd
import numpy as np
import matplotlib.pylab as plb
import statsmodels.api as sm
from statsmodels.formula.api import ols
import seaborn as sns
from statsmodels.graphics.gofplots import ProbPlot
plb.style.use('seaborn')
plb.rc('axes', titlesize=10) 
#Data loading
dados = pd.read_csv("beers.csv")
dados.head(4)

После загрузки данных видно, что колонка Месяц неактуальна для анализа, поэтому она будет удалена.

#Descriptive Statistics
df = dados.drop(columns=['Month'])
df.describe()

#Correlation between the variables under study
sns.heatmap(df.corr(), annot=True, cbar=False, cmap="Blues")

Переменная спонсорство имеет высокую корреляцию (78%) с переменной rдоход, что может означать, что связь между sспонсорством и r Доход ближе к линейной зависимости.

Простой линейный регрессионный анализ

Оценка коэффициента

Этот шаг состоит в получении коэффициентов (отрезка и наклона) таким образом, чтобы вы могли найти линию, которая соответствует модели данных.

Коэффициенты пересечения и наклона можно получить из функции OLS библиотеки statsmodels, существующей на языке python, чтобы найти модель, которая соответствует данным, с помощью метода наименьших квадратов.

modelo = sm.OLS(Y, sm.add_constant(X)).fit()
print(modelo.summary())

Предполагаемая модель для коэффициентов в приведенном выше выводе:

Согласно приближению, увеличение расходов на спонсорство на 1 миллион метикалов связано с доходом в размере 300 000 дополнительных единиц.

p-значение для Pr(>|t|<0.05), при этом можно констатировать, что коэффициент наклона значительно отличается от нуля, то есть спонсорство значительно связано с доходом. Далее мы рассмотрим 95% доверительный интервал коэффициента наклона, который для линейной регрессии принимает приблизительно вид:

Это означает, что вероятность того, что указанный выше интервал содержит истинное значение наклона, составляет примерно 95 %.

Для коэффициента пересечения доверительный интервал 95% равен [1.531;3.245], а для коэффициента наклона доверительный интервал 95% равен [0.197;0.410], это означает, что если спонсорство равно нулю, средний доход будет составлять от 1,5 до 3,2 миллиарда метикал и для каждого увеличения на 1 миллионов метикалов в спонсорстве средний доход увеличится от 197,000 до 410,000 единиц.

Оценка точности модели

Сначала будет оцениваться качество уравнивания линии регрессии, полученное с помощью Суммы квадратов остатков и R2. Кроме того, вы можете использовать F-статистику, которая используется для проверки того, имеет ли хотя бы одна переменная-предиктор коэффициент, отличный от нуля (очень интересно при множественной линейной регрессии).

Сумма квадратов остатков (SSR)

SSR — это оценка стандартного отклонения ошибки. Эту статистику можно рассчитать по формуле:

sm.stats.anova_lm(ols('Revenue ~ Sponsorship', data=df).fit())

Следовательно, SSR = 1612, то есть средняя ошибка прогнозирования дохода от спонсорства в этой модели. Процентная погрешность составляет 33% при среднем доходе примерно в 4,8 миллиарда метик.

Коэффициент детерминации (R2)

Cкоэффициент детерминации или R2 измеряет долю общей изменчивости зависимой переменной, которая может быть объяснена линия линейной регрессии с независимой переменной в качестве объясняющей переменной и всегда принимает значения 0 и 1.

Если R2 ≃ 1, это означает, что большая часть изменчивости ответа объясняется регрессией и R2 ≃ 0 указывает на то, что регрессия не объясняет большую часть изменчивости отклика.

Для этого исследования R2 = 0,615, где мы можем предположить, что 61,5% от общей вариации дохода составляет объясняется оценочным уравнением регрессии со спонсорством в качестве объясняющей переменной.

Линия регрессии

plb.figure(figsize=(8, 4))
plb.scatter(X,Y)
plb.plot(X, modelo.predict(), color="r")
plb.xlabel("Sponsorship (Millions of Metical)")
plb.ylabel("Revenue (Billions of Metical)")

Анализ остатков

Предположения подобранной модели должны быть проверены, чтобы результаты были надежными. Анализ остатков исследует соответствие регрессионной модели на основе остатков, которые определяются разницей между наблюдаемой переменной отклика (Yi) и оценочной переменной отклика (Yˆi).

Основная идея анализа остатков заключается в том, что, если модель подходит, остатки должны отражать допущения, налагаемые ошибкой модели, а именно:

Допущения простой линейной регрессии

  1. Линейность — соотношение между x и y является линейным;
  2. Гомоскедастичность — предполагается, что остатки имеют постоянную дисперсию;
  3. Независимость — предполагается, что члены ошибки независимы;
  4. Нормальность — предполагается, что остатки нормально распределены;

В процессе остаточного анализа могут возникнуть потенциальные проблемы, такие как: нелинейность, непостоянная вариация членов ошибки, наличие в данных влиятельных значений, таких как: выбросы и экстремальные значения.

В данном случае мы будем использовать неформальные тесты (графические методы анализа остатков).

Диагностические графики остаточных ошибок

Ниже приведены диагностические графики для остаточных ошибок:

  1. Остатки против подобранных — указывает на наличие нелинейных шаблонов в остатках. Одним из математических предположений при построении модели с использованием метода наименьших квадратов является то, что данные могут быть сопоставлены линией. Если это предположение верно и данные могут быть аппроксимированы линейной моделью, на графике появится приблизительно горизонтальная линия без шаблонов.
  2. Normal Q-Q — проверяет, нормально ли распределены остатки. Хорошо, если остатки следуют прямой линии.
  3. Гомоскедастичность — проверяет однородность дисперсии остатков. Горизонтальная линия с одинаково рассредоточенными точками является хорошим показателем гомоскедастичности.
  4. Остатки и кредитное плечо – определяет влиятельные случаи, т. е. экстремальные значения, которые могут повлиять на результаты регрессии при включении или исключении из анализа.

Прежде чем строить графики, мы сначала строим остаточную модель для каждого диагноза.

# Building diagnostics for graphs

modelo_ajust_y = modelo.fittedvalues # Fitted model values
modelo_residuos = modelo.resid # Residues
modelo_norm_resid = modelo.get_influence().resid_studentized_internal # Standardised residues
modelo_norm_resid_abs = np.sqrt(np.abs(modelo_norm_resid)) # Squares of the normalised residuals
modelo_outliers = modelo.get_influence().hat_matrix_diag # Outliers
distancia_cook = modelo.get_influence().cooks_distance[0] # Distance of Cook
dataframe = pd.concat([df['Sponsorship'], df['Revenue']], axis=1)

Проверка линейности

На этом графике наличие шаблона в остатках может указывать на проблему с некоторым аспектом линейной модели.

plot_lm_1 = plb.figure()
plot_lm_1.axes[0] = sns.residplot(modelo_ajust_y, dataframe.columns[-1], data=dataframe,
                          scatter_kws={'alpha': 0.5},
                          line_kws={'color': 'red', 'lw': 1, 'alpha': 0.8})
                          
plot_lm_1.axes[0].set_title('Residuals vs Fitted')
plot_lm_1.axes[0].set_xlabel('Fitted values')
plot_lm_1.axes[0].set_ylabel('Residuals')

Остатки не показывают закономерности на остаточном графике, а линия находится на нуле, поэтому мы можем предположить наличие линейности между ответом и переменной-предиктором.

Тест на нормальность

QQ-график остатков можно использовать для визуальной проверки предположения о нормальности. Чтобы признать, что остатки распределены нормально, она должна приблизительно следовать прямой линии.

QQ = ProbPlot(modelo_norm_resid)
plot_lm_2 = QQ.qqplot(line='45', alpha=0.5, color='#4C72B0', lw=1)
plot_lm_2.axes[0].set_title('Normal Q-Q')
plot_lm_2.axes[0].set_xlabel('Theoretical Quantiles')
plot_lm_2.axes[0].set_ylabel('Standardized Residuals')

На графике показаны все точки, находящиеся примерно на опорной линии, так что можно предположить нормальность.

Тест гомоскедастичности

График Scale-Location показывает остатки, которые равномерно распределены по интервалам предиктора. Горизонтальная линия с одинаково рассредоточенными точками — это хорошо.

plot_lm_3 = plb.figure()
plb.scatter(modelo_ajust_y, modelo_norm_resid_abs, alpha=0.5);
sns.regplot(modelo_ajust_y, modelo_norm_resid_abs,
            scatter=False,
            ci=False,
            line_kws={'color': 'red', 'lw': 1, 'alpha': 0.8});
plot_lm_3.axes[0].set_xlim(4, max(modelo_ajust_y)+0.05)

plot_lm_3.axes[0].set_ylim(0, 2)

plot_lm_3.axes[0].set_title('Scale-Location')
plot_lm_3.axes[0].set_xlabel('Fitted values')
plot_lm_3.axes[0].set_ylabel('$\sqrt{|Standardized Residuals|}$')

Можно предположить, что остатки имеют постоянную дисперсию. Глядя на линию на графике видно, что она примерно горизонтальна.

Влиятельные точки и крайние значения

Отклонения:

Выброс — это наблюдение с «высокими» остатками. В простой линейной регрессии диаграмма рассеяния может показать нам, какие наблюдения не соответствуют подобранной модели. Однако для лучшего обнаружения выбросов в Y было предложено несколько «стандартизированных» форм.

Для нормализованных остатков, если ошибки имеют нормальное распределение, то примерно 95% нормализованных остатков (di) должны находиться в интервале (-2,2). Обратите внимание, что остатки за пределами этого диапазона могут указывать на наличие выбросов.

Использовать преимущества

Точки рычага — неприятные проблемы в регрессии. В отличие от выбросов, которые имеют необычно большой размер, точки кредитного плеча имеют экстремальные значения x. На первый взгляд это может выглядеть не так уж плохо, но может иметь пагубные последствия для модели, поскольку коэффициенты β очень чувствительны к точкам рычага. Цель графика «Остатки против кредитного плеча» состоит в том, чтобы выявить эти проблематичные наблюдения.

plot_lm_4 = plb.figure();
plb.scatter(modelo_outliers, modelo_norm_resid, alpha=0.5);
sns.regplot(modelo_outliers, modelo_norm_resid,
            scatter=False,
            ci=False,
            line_kws={'color': 'red', 'lw': 1, 'alpha': 0.8});
plot_lm_4.axes[0].set_xlim(0, max(modelo_outliers)+0.01)

plot_lm_4.axes[0].set_ylim(-3, 3)

plot_lm_4.axes[0].set_title('Residuals vs Leverage')
plot_lm_4.axes[0].set_xlabel('Leverage')
plot_lm_4.axes[0].set_ylabel('Standardized Residuals');

# annotations
leverage_top_3 = np.flip(np.argsort(distancia_cook), 0)[:3]
for i in leverage_top_3:
    plot_lm_4.axes[0].annotate(i,
                                 xy=(modelo_outliers[i],
                                     modelo_norm_resid[i]))

На графике (остаток против кредитного плеча) показаны три самые крайние точки (1, 14 и 15) со стандартизованными остатками выше -2. Однако расхождений, превышающих 3 стандартных отклонения, нет, что хорошо.

Затем несоответствующие значения проверяются на объясняющие переменные (значения рычага), где ошибка (ei) сравнивается с 2pn=2∗424=0,16. В случаях 1, 14 и 15 значения кредитного плеча не превышают 0,16.

Обсуждение

Приложение Python

Предысторией этого случая является демонстрация применения языка Python для анализа данных, особенно в простой линейной регрессии. Интересным сценарием для обсуждения является сравнение существующих функций в Python с языком R.

Например, размер кода для построения диагностических графиков остатков в python, но понятный и простой, а в R он упрощает этот код всего до plot(model,ngraph), что является моделью линейной регрессии и количеством графиков на диагностику, n = 1,… ,4.

Простая линейная регрессия

Простая линейная регрессия — это подходящий метод для прогнозирования отклика от одной переменной-предиктора, генерирующий модель, которая соответствует данным для возможного прогноза.

Из наблюдаемой переменной отклика (Yi) и оцененной переменной отклика (Yˆi) генерируются остатки, которые должны соответствовать предположениям скорректированной модели, которые необходимо проверить, чтобы результаты были надежными.

Отсутствие линейности между откликом и переменной-предиктором и несоответствие допущениям при регрессии, преобразованиях X и или Y, логарифмических, полиномиальных и квадратичных членах Термин, среди прочего, может применяться для корректировки данных при принятии допущений в рамках простой линейной регрессии.

Рекомендации

  1. Рибейро, Карлос (2014). Эконометрия. Escolar Editora, Лиссабон;
  2. Гуджарати, Дамодар (2011). Базовая эконометрия. V Edição. The McGraw-Hill Companies, Inc., Нова-Иорке.
  3. Тьюки, Джон (1977). Исследовательский анализ данных. Издательская компания Аддисон-Уэсли;