Аналіз R-squared у регресії
R-squared показує, наскільки тісно дані прилягають до лінії регресії, тож у простій регресії R-squared пов'язаний із кореляцією між двома змінними. Зокрема, модуль кореляції дорівнює квадратному кореню з R-squared, а знак кореляції збігається зі знаком коефіцієнта регресії.
У цій вправі ви почнете використовувати статистичний пакет statsmodels, який виконує багато статистичного моделювання та тестування, що є в R і таких програмних пакетах, як SAS і MATLAB.
Ви візьмете два ряди x та y, обчислите їхню кореляцію, а потім виконаєте регресію y на x, використавши функцію OLS(y,x) із бібліотеки statsmodels.api (зверніть увагу, що залежна змінна, або права частина, y є першим аргументом). Більшість лінійних регресій містять сталий член — перетин із віссю (це \(\small \alpha\) у рівнянні регресії \(\small y_t=\alpha + \beta x_t + \epsilon_t\)). Щоб включити сталий член у функції OLS(), потрібно додати стовпчик із 1 до правої частини регресії.
Модуль statsmodels.api вже імпортовано для вас як sm.
Ця вправа є частиною курсу
Аналіз часових рядів у Python
Інструкції до вправи
- Обчисліть кореляцію між
xтаyза допомогою методу.corr(). - Запустіть регресію:
- Спочатку перетворіть Series
xна DataFramedfx. - Додайте сталий член за допомогою
sm.add_constant(), збережіть уdfx1. - Зробіть регресію
yнаdfx1, використавшиsm.OLS().fit().
- Спочатку перетворіть Series
- Виведіть результати регресії та порівняйте R-squared із кореляцією.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# Import the statsmodels module
import statsmodels.api as sm
# Compute correlation of x and y
correlation = ___
print("The correlation between x and y is %4.2f" %(correlation))
# Convert the Series x to a DataFrame and name the column x
dfx = pd.DataFrame(x, columns=['x'])
# Add a constant to the DataFrame dfx
dfx1 = sm.add_constant(___)
# Regress y on dfx1
result = sm.OLS(___, ___).fit()
# Print out the results and look at the relationship between R-squared and the correlation above
print(result.summary())