Лінійна регресія

Прикладний статистичний аналіз

Ігор Мірошниченко

КНУ імені Тараса Шевченка | ФІТ

Про мене

  • Мірошниченко Ігор Вікторович
  • кандидат економічних наук, доцент
  • доцент кафедри технологій управління КНУ імені Тараса Шевченка
  • доцент кафедри математичного моделювання і статистики КНЕУ
  • викладач Міжнародного інституту бізнесу (MBA)

@araprof

@datamirosh

aranaur.rbind.io

aranaur

ihormiroshnychenko

DataCamp

DataCamp

DataCamp

Як долучитися?

  1. Підписатися на канал Data Mirosh
  2. Зареєструйтесь на DataCamp
  3. Приєднайтесь до класу за посиланням

Примітка

Клас буде діяти до 11 квітня 2024 року, після чого буде буде відкрито наступний потік.

Слідкуйте за оновленнями.

Кореляція

Поняття кореляції

Коефіцієнт кореляції у своєму статистичному сенсі позначає силу і характер взаємозв’язку між двома кількісними змінними.

Коваріація

Коваріація - це міра взаємозв’язку між двома змінними, яка визначається як очікуване значення добутку відхилень від середніх значень.

Припустимо, нам потрібно розрахувати коефіцієнт кореляції для двох кількісних величин \(X\) і \(Y\). Відповідно, середнє за вибіркою для кожної з цих величин буде \(\bar{X}\) і \(\bar{Y}\). Тоді коефіцієнт коваріації:

\[ \text{cov}(X, Y) = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{N-1} \]

де \(N\) - кількість спостережень у вибірці;
\(X_i\) - значення \(X\) для \(i\)-го спостереження;
\(Y_i\) - значення \(Y\) для \(i\)-го спостереження;

Важливо

Коваріація змінюється в довільному розкиді значень => складно інтерпретувати силу взаємозв’язку.

Кореляція

Кореляція - це нормалізована міра взаємозв’язку між двома змінними, яка визначається як коваріація, поділена на стандартне відхилення кожної змінної.

\[ \text{corr}(X, Y) = \frac{\text{cov}(X, Y)}{\sigma_X \sigma_Y} \]

де \(\sigma_X\) - стандартне відхилення \(X\);
\(\sigma_Y\) - стандартне відхилення \(Y\).

Важливо

Коефіцієнт кореляції завжди лежить в діапазоні \([-1, 1]\).

Кореляція

Іноді можна зустріти таку формулу для коефіцієнта кореляції:

\[ r_{xy} = \frac{\sum{(x_i - \bar{x})(y_i - \bar{y})}}{\sqrt{\sum{(x_i - \bar{x})^2} \sum{(y_i - \bar{y})^2}}} \]

У підручниках зі статистики часто зустрічається термін кореляційний коефіцієнт Пірсона, який є частним випадком коефіцієнта кореляції. Це той самий коефіцієнт кореляції, який ми розглядаємо в цьому курсі.

Перевірка гіпотези про кореляцію

Ідея перевірки гіпотези про кореляцію полягає в тому, що ми перевіряємо, чи відрізняється коефіцієнт кореляції від нуля. Якщо нульова гіпотеза відхиляється, то ми можемо стверджувати, що між змінними існує взаємозв’язок.

Основна гіпотеза: \(H_0: r = 0\)
Альтернативна гіпотеза: \(H_1: r \neq 0\)

Статистика критерію:

\[ t = \frac{r \sqrt{n-2}}{\sqrt{1 - r^2}} \]

де \(r\) - коефіцієнт кореляції Пірсона;
\(n\) - кількість спостережень у вибірці.

Важливо

Критичне значення критерію Стьюдента для рівня значущості \(\alpha = 0.05\) і \(n-2\) ступенів свободи: \(t_{\alpha/2, n-2} = 2.045\)

Якщо \(|t| > t_{\alpha/2, n-2}\), то нульову гіпотезу відхиляють.

Умови застосування критерію Стьюдента

  1. Взаємозв’язок між змінними має бути лінійним і монотонним (зростає або спадає у одному напрямку).
  2. Відсутність викидів
  3. Нормальний розподіл змінних

У разі порушення цих припущень можуть бути корисними коефіцієнти кореляції Спірмена і Кендалла, які замість реальних значень аналізують їхні ранги.

Примітка

Ні те, ні інше не є панацеєю, і за особливо сильних порушень припущень (особливо першого) вони також можуть бути неадекватними. Уважно вивчайте свої дані та їхній характер!

Квартер Енскомба

Один із класичних прикладів необхідності перевірки припущень (і візуалізації даних перед аналізом) - квартет Енскомба.

У всіх чотирьох наборів даних однаковий коефіцієнт кореляції Пірсона, хоча їхній характер очевидно різний.

Datasaurus Dozen

Ще один класичний приклад - Datasaurus Dozen.

У всіх даних однаковий коефіцієнт кореляції Пірсона, хоча їхній характер очевидно різний.

Кореляція в Python

vgsales = pd.read_csv("https://raw.githubusercontent.com/Aranaur/aranaur.rbind.io/main/datasets/video_games_sales/vgsales.csv")
vgsales.head()
Rank Name Platform Year Genre Publisher NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales
0 1 Wii Sports Wii 2006.0 Sports Nintendo 41.49 29.02 3.77 8.46 82.74
1 2 Super Mario Bros. NES 1985.0 Platform Nintendo 29.08 3.58 6.81 0.77 40.24
2 3 Mario Kart Wii Wii 2008.0 Racing Nintendo 15.85 12.88 3.79 3.31 35.82
3 4 Wii Sports Resort Wii 2009.0 Sports Nintendo 15.75 11.01 3.28 2.96 33.00
4 5 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing Nintendo 11.27 8.89 10.22 1.00 31.37
import numpy as np

np_corr_p = np.corrcoef(vgsales['NA_Sales'], vgsales['Global_Sales'])[0, 1]
print(f'Коефіцієнт кореляції: {np_corr_p:.3f}')
Коефіцієнт кореляції: 0.941
import scipy.stats as st

st_corr_p = st.pearsonr(vgsales['NA_Sales'], vgsales['Global_Sales'])
st_corr_s = st.spearmanr(vgsales['NA_Sales'], vgsales['Global_Sales'])
st_corr_k = st.kendalltau(vgsales['NA_Sales'], vgsales['Global_Sales'])

print(f'Коефіцієнт кореляції Пірсона: {st_corr_p[0]:.3f} (p-value: {st_corr_p[1]:.3f})')
print(f'Коефіцієнт кореляції Спірмена: {st_corr_s[0]:.3f} (p-value: {st_corr_s[1]:.3f})')
print(f'Коефіцієнт кореляції Кендалла: {st_corr_k[0]:.3f} (p-value: {st_corr_k[1]:.3f})')
Коефіцієнт кореляції Пірсона: 0.941 (p-value: 0.000)
Коефіцієнт кореляції Спірмена: 0.796 (p-value: 0.000)
Коефіцієнт кореляції Кендалла: 0.676 (p-value: 0.000)
import pandas as pd

pd_corr_p = vgsales[['NA_Sales', 'Global_Sales']].corr(method='pearson').iloc[0, 1]
pd_corr_s = vgsales[['NA_Sales', 'Global_Sales']].corr(method='spearman').iloc[0, 1]
pd_corr_k = vgsales[['NA_Sales', 'Global_Sales']].corr(method='kendall').iloc[0, 1]

print(f'Коефіцієнт кореляції Пірсона: {pd_corr_p:.3f}')
print(f'Коефіцієнт кореляції Спірмена: {pd_corr_s:.3f}')
print(f'Коефіцієнт кореляції Кендалла: {pd_corr_k:.3f}')
Коефіцієнт кореляції Пірсона: 0.941
Коефіцієнт кореляції Спірмена: 0.796
Коефіцієнт кореляції Кендалла: 0.676

Maximal Information-based Nonparametric Exploration

Maximal Information-based Nonparametric Exploration (MINE) - це алгоритм, який використовується для виявлення нелінійних залежностей між змінними.

Генеральна сукупність і вибірка

Генеральна сукупність і вибірка

Генеральна сукупність - це сукупність всіх об’єктів, які ми вивчаємо.

Вибірка - це підмножина генеральної сукупності, яка використовується для отримання інформації про генеральну сукупність.

Ми запишемо просту модель генеральної сукупності

\[ y_i = \beta_0 + \beta_1 x_i + u_i \]

де \(y_i\) - залежна змінна;
\(x_i\) - незалежна змінна;
\(\beta_0\) - константа (перехоплення);
\(\beta_1\) - коефіцієнт регресії;
\(u_i\) - помилка (випадкова складова).

Тоді наша модель регресії на основі вибірки:

\[ y_i = \hat{\beta}_0 + \hat{\beta}_1 x_i + e_i \]

де \(e_i\) - помилка оцінки.

Генеральна сукупність і вибірка

Розрахункова регресійна модель дає оцінки для кожного спостереження:

\[ \hat{y}_i = \hat{\beta}_0 + \hat{\beta}_1 x_i \]

де \(\hat{y}_i\) - прогнозоване значення залежної змінної.

що дає нам найкращу лінію в нашому наборі даних.

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

Генеральна сукупність

Зв’язок у генеральній сукупності

\[ y_i = 0.05 + 0.72 x_i + u_i \] \[ y_i = \beta_0 + \beta_1 x_i + u_i \]

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

Генеральна сукупність

Зв’язок у генеральній сукупності

\[ y_i = 0.05 + 0.72 x_i + u_i \]

Зв’язок у вибірці

\[ \hat{y_i} = 0.18 + 0.73 x_i \]

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

Генеральна сукупність

Зв’язок у генеральній сукупності

\[ y_i = 0.05 + 0.72 x_i + u_i \]

Зв’язок у вибірці

\[ \hat{y_i} = 0.05 + 0.76 x_i \]

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

Генеральна сукупність

Зв’язок у генеральній сукупності

\[ y_i = 0.05 + 0.72 x_i + u_i \]

Зв’язок у вибірці

\[ \hat{y_i} = 0.0 + 0.78 x_i \]

Давайте повторимо це 10 000 разів.

Ця називається моделюванням (Монте-Карло).

Генеральна сукупність і вибірка

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

  • У середньому наші лінії регресії дуже добре відповідають лінії генеральної сукупності

  • Однак окремі лінії (зразки) можуть промахнутися.

  • Відмінності між окремими вибірками та генеральною сукупністю призводять до невизначеності.

Генеральна сукупність і вибірка

Питання: Чому ми співставляємо генеральну сукупність і вибірку?

Відповідь: Невизначеність має значення.

\(\hat{\beta}\) сама по собі є випадковою змінною, яка залежить від випадкової вибірки. Коли ми беремо зразок і запускаємо регресію, ми не знаємо, чи це «хороший» зразок (\(\hat{\beta}\) близький до \(\beta\)) чи «поганий зразок» (наш зразок сильно відрізняється від генеральної сукупності).

Оцінювання параметрів регресії

Оцінювання параметрів регресії

Ми можемо оцінити лінію регресії в Python:

lm = sm.OLS(y, sm.add_constant(x)).fit()

Але звідки такі оцінки?

Кілька слайдів назад:

\[ \hat{y}_i = \hat{\beta}_0 + \hat{\beta}_1 x_i \] що дає нам найкращий рядок через наш набір даних.

Але що ми маємо на увазі під «найкращою лінією»?

Бути «найкращим»

Питання: Що ми маємо на увазі під найкращою лінією?

Відповіді:

  • Загалом (у економетриці), найкраща лінія означає лінію, яка мінімізує суму квадратичних помилок (ESS):

\[ \text{ESS} = \sum_{i = 1}^{n} e_i^2\quad \]

де \(\quad e_i = y_i - \hat{y}_i\)

  • Звичайний метод найменших квадратів (OLS) мінімізує суму квадратів помилок.
  • На основі низки (здебільшого прийнятних) припущень, OLS
    • Є незміщенним
    • Це найкращий (мінімальна дисперсія) лінійний незміщений оцінювач

МНК

Давайте розглянемо набір даних, який ми згенерували раніше.

МНК

Для будь-якої лінії \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x\)

МНК

Для будь-якої лінії \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x\) ми можемо обчислити помилки: \(e_i = y_i - \hat{y}_i\)

МНК

Для будь-якої лінії \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x\) ми можемо обчислити помилки: \(e_i = y_i - \hat{y}_i\)

МНК

Для будь-якої лінії \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x\) ми можемо обчислити помилки: \(e_i = y_i - \hat{y}_i\)

МНК

ESS зводить помилки в квадрат \(\sum e_i^2\): більші помилки отримують більші штрафи.

МНК

Оцінка МНК — це комбінація \(\hat{\beta}_0\) і \(\hat{\beta}_1\), які мінімізують ESS.

МНК

У простій лінійній регресії оцінювач МНК виходить із вибору \(\hat{\beta}_0\) і \(\hat{\beta}_1\), які мінімізують суму квадратів помилок (ESS), тобто,

\[ \min_{\hat{\beta}_0,\, \hat{\beta}_1} \text{ESS} \]

але ми вже знаємо \(\text{ESS} = \sum_i e_i^2\). Тепер скористайтеся визначеннями \(e_i\) і \(\hat{y}\).

\[ \begin{aligned} e_i^2 &= \left( y_i - \hat{y}_i \right)^2 = \left( y_i - \hat{\beta}_0 - \hat{\beta}_1 x_i \right)^2 \\ &= y_i^2 - 2 y_i \hat{\beta}_0 - 2 y_i \hat{\beta}_1 x_i + \hat{\beta}_0^2 + 2 \hat{\beta}_0 \hat{\beta }_1 x_i + \hat{\beta}_1^2 x_i^2 \end{aligned} \]

МНК

Ми наближаємось. Нам потрібно мінімізувати ESS. Ми показали, як ESS пов’язано з нашою вибіркою (наші дані: \(x\) і \(y\)) і нашими оцінками (тобто, \(\hat{\beta}_0\) і \(\hat{\beta}_1\)).

\[ \text{ESS} = \sum_i e_i^2 = \sum_i \left( y_i^2 - 2 y_i \hat{\beta}_0 - 2 y_i \hat{\beta}_1 x_i + \hat{\beta} _0^2 + 2 \hat{\beta}_0 \hat{\beta}_1 x_i + \hat{\beta}_1^2 x_i^2 \right) \]

Для умов мінімізації тепер беремо перші похідні ESS відносно \(\hat{\beta}_0\) і \(\hat{\beta}_1\).

\[ \begin{aligned} \dfrac{\partial \text{ESS}}{\partial \hat{\beta}_0} &= \sum_i \left( 2 \hat{\beta}_0 + 2 \hat{\beta}_1 x_i - 2 y_i \right) = 2n \hat{\beta}_0 + 2 \hat{\beta}_1 \sum_i x_i - 2 \sum_i y_i \\ &= 2n \hat{\beta}_0 + 2n \hat{\beta}_1 \overline{x} - 2n \overline{y} \end{aligned} \]

де \(\overline{x} = \frac{\sum x_i}{n}\) і \(\overline{y} = \frac{\sum y_i}{n}\) є вибірковими середніми \(x\) і \(y\) ( розмір \(n\)).

МНК

Прирівнюємо похідну до нуля:

\[ \dfrac{\partial \text{ESS}}{\partial \hat{\beta}_0} = 2n \hat{\beta}_0 + 2n \hat{\beta}_1 \overline{x} - 2n \overline{y} = 0 \]

що означає

\[ \hat{\beta}_0 = \overline{y} - \hat{\beta}_1 \overline{x} \]

Тепер про \(\hat{\beta}_1\)

МНК

Візьміть похідну ESS відносно \(\hat{\beta}_1\)

\[ \begin{aligned} \dfrac{\partial \text{ESS}}{\partial \hat{\beta}_1} &= \sum_i \left( 2 \hat{\beta}_0 x_i + 2 \hat{\beta}_1 x_i^2 - 2 y_i x_i \right) = 2 \hat{\beta}_0 \sum_i x_i + 2 \hat{\beta}_1 \sum_i x_i^2 - 2 \sum_i y_i x_i \\ &= 2n \hat{\beta}_0 \overline{x} + 2 \hat{\beta}_1 \sum_i x_i^2 - 2 \sum_i y_i x_i \end{aligned} \]

встановити його рівним нулю

\[ \dfrac{\partial \text{ESS}}{\partial \hat{\beta}_1} = 2n \hat{\beta}_0 \overline{x} + 2 \hat{\beta}_1 \sum_i x_i ^2 - 2 \sum_i y_i x_i = 0 \]

замінюємо \(\hat{\beta}_0\), тобто, \(\hat{\beta}_0 = \overline{y} - \hat{\beta}_1 \overline{x}\) . Таким чином,

\[ 2n \left(\overline{y} - \hat{\beta}_1 \overline{x}\right) \overline{x} + 2 \hat{\beta}_1 \sum_i x_i^2 - 2 \sum_i y_i x_i = 0 \]

МНК

Продовжуючи з останнього слайда

\[ 2n \left(\overline{y} - \hat{\beta}_1 \overline{x}\right) \overline{x} + 2 \hat{\beta}_1 \sum_i x_i^2 - 2 \sum_i y_i x_i = 0 \]

розкриваємо дужки

\[ 2n \overline{y}\,\overline{x} - 2n \hat{\beta}_1 \overline{x}^2 + 2 \hat{\beta}_1 \sum_i x_i^2 - 2 \sum_i y_i x_i = 0 \]

\[ \implies 2 \hat{\beta}_1 \left( \sum_i x_i^2 - n \overline{x}^2 \right) = 2 \sum_i y_i x_i - 2n \overline{y}\,\overline{ x} \]

\[ \implies \hat{\beta}_1 = \dfrac{\sum_i y_i x_i - 2n \overline{y}\,\overline{x}}{\sum_i x_i^2 - n \overline{x}^2} = \dfrac{\sum_i (x_i - \overline{x})(y_i - \overline{y})}{\sum_i (x_i - \overline{x})^2} \]

МНК

Готово!

Тепер у нас є оцінювачі МНК для нахилу

\[ \hat{\beta}_1 = \dfrac{\sum_i (x_i - \overline{x})(y_i - \overline{y})}{\sum_i (x_i - \overline{x})^2}\]

і перетину

\[ \hat{\beta}_0 = \overline{y} - \hat{\beta}_1 \overline{x} \]

Тепер ми повернемося до припущень і властивостей OLS.

МНК: властивості та припущення

Властивості

Згадуємо: Функції щільності

Пам’ятайте, що ми використовуємо функції щільності ймовірності (PDF) для опису ймовірності того, що неперервна випадкова змінна приймає діапазон значень. (Площа = 1.)

Ці PDF-и характеризують розподіли ймовірностей, а найпоширеніші/відомі/популярні розподіли мають назви (наприклад, нормальний, t, Гамма).

Властивості

Згадуємо: Функції щільності

Імовірність того, що стандартна нормальна випадкова змінна набуває значення від -2 до 0: \(\mathop{\text{P}}\left(-2 \leq X \leq 0\right) = 0,48\)

Властивості

Ймовірність того, що стандартна нормальна випадкова змінна набуває значення від -1,96 до 1,96: \(\mathop{\text{P}}\left(-1,96 \leq X \leq 1,96\right) = 0,95\)

Властивості

Імовірність того, що стандартна нормальна випадкова змінна набуває значення більше 2: \(\mathop{\text{P}}\left(X > 2\right) = 0,023\)

Властивості

Уявіть, що ми намагаємося оцінити невідомий параметр \(\beta\), і нам відомі розподіли трьох конкуруючих оцінювачів.

Який би ми обрали?

Властивості

Питання: Які властивості можуть бути важливі для оцінювача?

Відповідь перша: зміщення (Bias)

Чи в середньому (після багатьох вибірок) оцінювач наближається до правильного значення?

Більш формально: Чи дорівнює середнє значення розподілу оцінювача параметру, який він оцінює?

\[ \mathop{\text{Bias}}_\beta \left( \hat{\beta} \right) = \mathop{\boldsymbol{E}}\left[ \hat{\beta} \right] - \beta \]

Властивості

Відповідь перша: зміщення (Bias)

Незміщенна оцінка: \(\mathop{\boldsymbol{E}}\left[ \hat{\beta} \right] = \beta\)

Зміщенна оцінка: \(\mathop{\boldsymbol{E}}\left[ \hat{\beta} \right] \neq \beta\)

Властивості

Відповідь друга: відхилення/дисперсія (Variance).

Важливі не лише центральні тенденції конкуруючих розподілів.

Ми також дбаємо про дисперсію оцінювача.

\[ \mathop{\text{Var}} \left( \hat{\beta} \right) = \mathop{\boldsymbol{E}}\left[ \left( \hat{\beta} - \mathop{\boldsymbol{E}}\left[ \hat{\beta} \right] \right)^2 \right] \]

Менші оцінки дисперсії означають, що ми отримуємо оцінки ближче до середнього в кожній вибірці.

Властивості

Відповідь друга: відхилення/дисперсія (Variance).

Властивості

Відповідь перша: зміщення

Відповідь друга: відхилення.

Тонкощі: Компроміс зміщення-дисперсії (bias-variance tradeoff).

Чи готові ми прийняти зміщення, щоб зменшити дисперсію?

В економетриці/статистиці ми зазвичай дотримуємося незміщених оцінок. Але інші дисципліни (особливо у сфері ML) більше думають про цей компроміс.

The bias-variance tradeoff.

Властивості

Як ви вже могли здогадатися,

  • МНК є незміщеною оцінкою.
  • МНК має мінімальне відхилення серед усіх незміщених лінійних оцінювачів.

Властивості

Але… ці (дуже гарні) властивості залежать від ряду припущень:

  1. Зв’язок генеральної сукупності є лінійним.

  2. Наша змінна \(X\) є екзогенною, тобто, \(\mathop{\boldsymbol{E}}\left[ u \mid X \right] = 0\).

  3. Змінна \(X\) має варіацію. І якщо існує кілька пояснювальних змінних, вони не є абсолютно колінеарними.

  4. Збурення генеральної сукупності \(u_i\) незалежно та однаково розподілені за нормальним законом розподілу із середнім в нулі \(\left( \mathop{\boldsymbol{E}}\left[ u \right] = 0 \right)\) та дисперсією \(\sigma^2\) (тобто, \(\mathop{\boldsymbol{E}}\left[ u^2 \right] = \sigma^2\)).

Припущення

Різні припущення гарантують різні властивості:

  • Припущення (1), (2) і (3) роблять OLS незміщеним.

  • Припущення (4) дає нам незміщену оцінку для дисперсії наших оцінок МНК.

Умовне сподівання

Для багатьох випадків, нашим найважливішим припущенням є екзогенність, тобто, \[ \begin{align} \mathop{E}\left[ u \mid X \right] = 0 \end{align} \] але що це насправді означає?

Один із способів подумати про це визначення:

Для будь-якого значення \(X\) середнє значення залишків має дорівнювати нулю.

  • Наприклад, \(\mathop{E}\left[ u \mid X=1 \right]=0\) і \(\mathop{E}\left[ u \mid X=100 \right]= 0\)

  • Наприклад, \(\mathop{E}\left[ u \mid X_2=\text{Жінка} \right]=0\) і \(\mathop{E}\left[ u \mid X_2=\text{Чоловік} \right]=0\)

Графічно…

Дійсна екзогенність, тобто, \(\mathop{E}\left[ u \mid X \right] = 0\)

Недійсна екзогенність, i.e., \(\mathop{E}\left[ u \mid X \right] \neq 0\)

Невизначеність та помилки

Щось ще?

До цього моменту ми знаємо, що МНК має деякі хороші властивості, і ми знаємо, як оцінити перетин і коефіцієнт нахилу за допомогою МНК.

Наш поточний робочий процес:

  • Отримати дані (точки зі значеннями \(x\) і \(y\))
  • Побудувати модель \(y\) на \(x\)
  • Побудуйте лінію МНК (тобто, \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1\))
  • Готово?

Але чого ми навчимося з цієї вправи?

Щось ще? Так!

Але чого ми навчимося з цієї вправи?

  • Наскільки ми повинні бути впевнені в точності наших оцінок?
  • Наскільки добре наша модель пояснює зміну \(y\)?

Ми повинні вміти справлятися з невизначеністю.

Вчимося на помилках

Як показало наше попереднє моделювання, наша проблема з невизначеністю полягає в тому, що ми не знаємо, чи наша вибіркова оцінка близька чи далека від невідомого параметра генеральної сукупності.

Проте ще не все втрачено. Ми можемо використовувати помилки \(\left(e_i = y_i - \hat{y}_i\right)\), щоб зрозуміти, наскільки добре наша модель пояснює варіацію \(y\).

Коли здається, що наша модель виконує «гарну» роботу, ми можемо з більшою впевненістю використовувати її, щоб дізнатися про зв’язок між \(y\) і \(x\).

Тепер нам просто потрібно формалізувати вищезазначене.

Вчимося на помилках

Спочатку ми оцінимо дисперсію \(u_i\) (нагадаємо: \(\mathop{\text{Var}} \left( u_i \right) = \sigma^2\)), використовуючи наші квадрати помилок, тобто,

\[ s^2 = \dfrac{\sum_i e_i^2}{n - k} \]

де \(k\) дає кількість параметрів моделі, яку ми оцінюємо (наприклад, \(\beta_0\) і \(\beta_1\) дадуть \(k=2\)).

\(s^2\) є незміщеною оцінкою \(\sigma^2\).

Вчимося на помилках

Дисперсія \(\hat{\beta}_1\) (для простої лінійної регресії) дорівнює

\[ \mathop{\text{Var}} \left( \hat{\beta}_1 \right) = \dfrac{s^2}{\sum_i \left( x_i - \overline{x} \right)^2 } \]

який показує, що дисперсія нашого оцінювача нахилу

  1. збільшується, оскільки наші збурення стають шумнішими

  2. зменшується зі збільшенням дисперсії \(x\)

Вчимося на помилках

Найчастіше: стандартна помилка \(\hat{\beta}_1\)

\[ \mathop{\hat{\text{SE}}} \left( \hat{\beta}_1 \right) = \sqrt{\dfrac{s^2}{\sum_i \left( x_i - \overline{ x} \right)^2}} \]

Нагадуємо: Стандартна помилка оцінювача — це стандартне відхилення розподілу оцінювача.

МНК в Python

import statsmodels.formula.api as smf

results = smf.ols('Global_Sales ~ NA_Sales', vgsales).fit()
print(results.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:           Global_Sales   R-squared:                       0.886
Model:                            OLS   Adj. R-squared:                  0.886
Method:                 Least Squares   F-statistic:                 1.284e+05
Date:                Mon, 22 Jan 2024   Prob (F-statistic):               0.00
Time:                        18:40:23   Log-Likelihood:                -12888.
No. Observations:               16598   AIC:                         2.578e+04
Df Residuals:                   16596   BIC:                         2.580e+04
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      0.0632      0.004     14.725      0.000       0.055       0.072
NA_Sales       1.7918      0.005    358.380      0.000       1.782       1.802
==============================================================================
Omnibus:                    10021.157   Durbin-Watson:                   1.926
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         39268559.707
Skew:                           1.178   Prob(JB):                         0.00
Kurtosis:                     241.275   Cond. No.                         1.43
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
import statsmodels.api as sm

X = sm.add_constant(vgsales.NA_Sales)
model = sm.OLS(vgsales.Global_Sales, X)
result = model.fit()
print(result.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:           Global_Sales   R-squared:                       0.886
Model:                            OLS   Adj. R-squared:                  0.886
Method:                 Least Squares   F-statistic:                 1.284e+05
Date:                Mon, 22 Jan 2024   Prob (F-statistic):               0.00
Time:                        18:40:23   Log-Likelihood:                -12888.
No. Observations:               16598   AIC:                         2.578e+04
Df Residuals:                   16596   BIC:                         2.580e+04
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0632      0.004     14.725      0.000       0.055       0.072
NA_Sales       1.7918      0.005    358.380      0.000       1.782       1.802
==============================================================================
Omnibus:                    10021.157   Durbin-Watson:                   1.926
Prob(Omnibus):                  0.000   Jarque-Bera (JB):         39268559.707
Skew:                           1.178   Prob(JB):                         0.00
Kurtosis:                     241.275   Cond. No.                         1.43
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

Тільки парна регресія

from scipy import stats

stats.linregress(x=vgsales.NA_Sales, y=vgsales.Global_Sales)
LinregressResult(slope=1.7918272775678399, intercept=0.0632023352818627, rvalue=0.9410473571255512, pvalue=0.0, stderr=0.004999800281795847, intercept_stderr=0.004292205029993517)
from sklearn.linear_model import LinearRegression

X = vgsales[['NA_Sales']]
y = vgsales['Global_Sales']

model = LinearRegression()
model.fit(X, y)
print(model.intercept_, model.coef_, model.score(X, y))
0.06320233528185787 [1.79182728] 0.8855701283529853

Вчимося на помилках

Ми використовуємо стандартну помилку \(\hat{SE_{\hat{\beta}_1}}\) разом із самим \(\hat{\beta}_1\), щоб дізнатися про параметр \(\beta_1\).

Після отримання розподілу \(\hat{\beta}_1\), у нас є два (пов’язаних) варіанти формального статистичного висновку щодо нашого невідомого параметра \(\beta_1\):

  • Довірчі інтервали: Використовуйте оцінку та її стандартну помилку, щоб створити інтервал, який при повторенні зазвичай міститиме справжній параметр.

  • Перевірка гіпотези: Визначте, чи є статистично значущі докази відхилення гіпотетичного значення або діапазону значень.

Довірчі інтервали

Довірчі інтервали

Будуємо довірчі інтервали рівня \((1-\alpha)\) для \(\beta_1\) \[ \hat{\beta_1}\ \pm t_{\alpha/2,\text{df}} \, \mathop{\hat{\text{SE}}} \left( \hat{\beta_1} \right) \]

\(t_{\alpha/2,\text{df}}\) позначає \(\alpha/2\) квантиль \(t\) розподілу з \(n-k\) ступенями свободи.

Довірчі інтервали

Будуємо довірчі інтервали рівня \((1-\alpha)\) для \(\beta_1\) \[ \hat{\beta_1}\ \pm t_{\alpha/2,\text{df}} \, \mathop{\hat{\text{SE}}} \left( \hat{\beta_1} \right) \]

Наприклад, 100 спостережень, два коефіцієнти (тобто, \(\hat{\beta}_0\) і \(\hat{\beta}_1 \implies k = 2\)), і \(\alpha = 0,05\) ( для 95% довірчого інтервалу) дає нам \(t_{0,025,\,98} = -1.98\)

Довірчі інтервали

Будуємо довірчі інтервали рівня \((1-\alpha)\) для \(\beta_1\)

results = smf.ols('y ~ x', pop_df).fit()
print(results.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.544
Model:                            OLS   Adj. R-squared:                  0.539
Method:                 Least Squares   F-statistic:                     116.9
Date:                Mon, 22 Jan 2024   Prob (F-statistic):           2.12e-18
Time:                        18:40:23   Log-Likelihood:                -87.291
No. Observations:                 100   AIC:                             178.6
Df Residuals:                      98   BIC:                             183.8
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      0.0490      0.059      0.833      0.407      -0.068       0.166
x              0.7216      0.067     10.811      0.000       0.589       0.854
==============================================================================
Omnibus:                        0.377   Durbin-Watson:                   1.976
Prob(Omnibus):                  0.828   Jarque-Bera (JB):                0.538
Skew:                           0.006   Prob(JB):                        0.764
Kurtosis:                       2.641   Cond. No.                         1.18
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

\[ \hat{\beta_1}\ \pm t_{\alpha/2,\text{df}} \, \mathop{\hat{\text{SE}}} \left( \hat{\beta_1} \right) \]

Отже, наш 95% довірчий інтервал становить \(0.7216 \pm 1.98 \times 0.067 = \left[ 0.589,\, 0.854 \right]\)

Довірчі інтервали

Отже, ми маємо довірчий інтервал для \(\beta_1\), тобто, \(\left[ 0.589,\, 0.854 \right]\).

Що це означає?

Неофіційно: Довірчий інтервал дає нам область (інтервал), в якій ми можемо певною мірою довіряти щодо вмісту параметра.

Більш формально: Якщо неодноразово робити вибірку з нашої сукупності та будувати довірчі інтервали для кожної з цих вибірок, \((1-\alpha)\) відсотків наших інтервалів (наприклад, 95%) міститиме параметр генеральної сукупності десь в інтервалі.

Тепер повернемося до нашої симуляції…

Довірчі інтервали

Ми відібрали 10 000 вибірок (кожна розміром \(n = 30\)) із нашої сукупності та оцінили нашу регресійну модель для кожної з цих симуляцій:

\[ y_i = \hat{\beta}_0 + \hat{\beta}_1 x_i + e_i \]
(повторюється 10 000 разів)

Тепер давайте оцінимо 95% довірчі інтервали для кожного з цих інтервалів…

Довірчі інтервали

З нашого попереднього моделювання: 97.5% 95% довірчих інтервалів містять справжнє значення параметра \(\beta_1\).

Тестування гіпотез

Тестування гіпотез

У багатьох дослідженнях ми хочемо знати більше, ніж точкову оцінку або діапазон значень. Ми хочемо знати, що наші статистичні дані говорять про існуючі теорії.

Ми хочемо перевірити гіпотези, висунуті чиновниками, політиками, економістами, науковцями, друзями, дивними сусідами тощо.

Приклади

  • Збільшення присутності поліції зменшує злочинність?

  • Будівництво гігантської стіни зменшує злочинність?

  • Розпуск уряду згубно впливає на економіку?

  • Чи легальний канабіс зменшує водіння в нетверезому стані або зменшує вживання опіоїдів?

  • Чи стандарти якості повітря покращують здоров’я та/або зменшують кількість робочіх місць?

Тестування гіпотез

Перевірка гіпотез спирається на дуже схожі результати та інтуїцію.

Хоча невизначеність, звичайно, існує, ми все ще можемо побудувати надійні статистичні тести (відкидаючи або не відхиляючи висунуту гіпотезу).

МНК t тест: Наша (нульова) гіпотеза стверджує, що \(\beta_1\) дорівнює значенню \(c\), тобто, \(H_o:\: \beta_1 = c\)

З властивостей МНК ми можемо показати, що тестова статистика

\[ t_\text{stat} = \dfrac{\hat{\beta}_1 - c}{\mathop{\hat{\text{SE}}} \left( \hat{\beta}_1 \right)} \]

слідує розподілу \(t\) з \(n-k\) ступенями свободи.

Тестування гіпотез

Для двостороннього тесту рівня \(\alpha\) ми відхиляємо нульову гіпотезу (і завершуємо альтернативну гіпотезу), коли

\[ \left|t_\text{stat}\right| > \left|t_{1-\alpha/2,\,df}\right| \]

це означає, що наша тестова статистика є більш екстремальною, ніж критичне значення.

Крім того, ми можемо обчислити p-значення, яке супроводжує нашу тестову статистику, що фактично дає нам імовірність побачити нашу тестову статистику або більш екстремальну тестову статистику, якщо нульова гіпотеза вірна.

Дуже малі p-значення (зазвичай < 0,05) означають, що ми навряд чи побачимо наші результати, якби нульова гіпотеза дійсно була вірною — ми схильні відхиляти нуьлову гіпотезу для p-значень нижче 0,05.

Тестування гіпотез

import statsmodels.formula.api as smf

results = smf.ols('y ~ x', pop_df).fit()
print(results.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.544
Model:                            OLS   Adj. R-squared:                  0.539
Method:                 Least Squares   F-statistic:                     116.9
Date:                Mon, 22 Jan 2024   Prob (F-statistic):           2.12e-18
Time:                        18:40:23   Log-Likelihood:                -87.291
No. Observations:                 100   AIC:                             178.6
Df Residuals:                      98   BIC:                             183.8
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      0.0490      0.059      0.833      0.407      -0.068       0.166
x              0.7216      0.067     10.811      0.000       0.589       0.854
==============================================================================
Omnibus:                        0.377   Durbin-Watson:                   1.976
Prob(Omnibus):                  0.828   Jarque-Bera (JB):                0.538
Skew:                           0.006   Prob(JB):                        0.764
Kurtosis:                       2.641   Cond. No.                         1.18
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

\(H_0\): \(\beta_1 = 0\) vs. \(H_a\): \(\beta_1 \neq 0\)

\(t_\text{stat} = 10.811\) та \(t_\text{0.975, 98} = `{python} round(t.ppf(0.025, df=98), 2)`\)

p-значення \(< 0,05\)

Тому ми відкидаємо \(H_0\)!

Тестування гіпотез

Повертаємося до нашої симуляції! Давайте подивимося, що насправді робить наша \(t\) статистика.

У цій ситуації ми фактично можемо знати (і забезпечити) нульову гіпотезу, оскільки ми згенерували дані.

Для кожного з 10 000 зразків ми обчислимо статистику \(t\), а потім побачимо, скільки статистичних даних \(t\) перевищує наше критичне значення ({python} round(t.ppf(0.025, df=98), 2), як вище).

Відповідь має бути приблизно 5 відсотків — наш рівень \(\alpha\).

Тестування гіпотез

У нашому моделюванні 2.1% нашої статистики \(t\) відхиляє нульову гіпотезу.

Розподіл нашої статистики \(t\) (заштрихування областей відхилення).

Відповідно, 2.1% наших значень \(p\) відхиляє нульову гіпотезу.

Розподіл наших значень \(p\) (заштрихування значень \(p\) нижче 0,05).

F-тест

Іноді можна зустріти \(F\)-тести.

Ми використовуємо \(F\)-тести для перевірки гіпотез, які включають кілька випадків
 (наприклад, \(\beta_1 = \beta_2\) або \(\beta_3 + \beta_4 = 1\)),

а не одна проста гіпотеза
(наприклад, \(\beta_1 = 0\), для якого ми просто використаємо тест \(t\)).

F-тест

Приклад

Економісти люблять казати: «Гроші взаємозамінні».

Уявіть собі, що ми можемо захотіти перевірити, чи дійсно гроші, отримані як дохід, мають такий же вплив на споживання, як гроші, отримані від податкових знижок.

\[ \text{Споживання}_i = \beta_0 + \beta_1 \text{Дохід}_{i} + \beta_2 \text{Знижка}_i + u_i \]

F-тест

Приклад, продовження

Ми можемо записати нашу нульову гіпотезу як

\[ H_o:\: \beta_1 = \beta_2 \iff H_o :\: \beta_1 - \beta_2 = 0 \]

Накладення цієї нульової гіпотези дає нам обмежену модель

\[ \text{Споживання}_i = \beta_0 + \beta_1 \text{Дохід}_{i} + \beta_1 \text{Знижка}_i + u_i \] \[ \text{Споживання}_i = \beta_0 + \beta_1 \left( \text{Дохід}_{i} + \text{Знижка}_i \right) + u_i \]

F-тест

Приклад, продовження

Щоб перевірити нульову гіпотезу \(H_o :\: \beta_1 = \beta_2\) проти \(H_a :\: \beta_1 \neq \beta_2\),
ми використовуємо статистику \(F\) \[ \begin{align} F_{q,\,n-k-1} = \dfrac{\left(\text{ESS}_r - \text{ESS}_u\right)/q}{\text{ESS}_u/(n-k-1)} \end{align} \] який (як випливає з назви) відповідає розподілу \(F\) із ступенями свободи в чисельнику \(q\) і ступенями свободи в знаменнику \(n-k-1\).

Тут \(q\) — це кількість обмежень, які ми накладаємо через \(H_o\).

F-тест

Приклад, продовження

\(\text{ESS}_r\) – це сума квадратів помилок (ESS) з нашої обмеженої моделі \[ \text{Споживання}_i = \beta_0 + \beta_1 \left( \text{Дохід}_{i} + \text{Знижка}_i \right) + u_i \]

а \(\text{ESS}_u\) – це сума квадратів помилок (ESS) з нашої необмеженої моделі \[ \text{Споживання}_i = \beta_0 + \beta_1 \text{Дохід}_{i} + \beta_2 \text{Знижка}_i + u_i \]

Тест \(F\) порівнює ефективність необмеженої моделі з ефективність обмеженої моделі, використовуючи їхні \(\text{ESS}\).

\[ \begin{align} F_\text{stat} = \dfrac{\left(\text{ESS}_r - \text{ESS}_u\right)/q}{\text{ESS}_u/(n-k-1)} \sim F_{ q,\,n-k-1} \end{align} \]

Дякую за увагу!



@araprof

@datamirosh

aranaur.rbind.io

aranaur

ihormiroshnychenko