Бутстрэп в регрессии
Давайте посмотрим, как бутстрэп применяется в регрессионном анализе. Этот метод помогает оценить неопределённость нестандартных оценок. Рассмотрим статистику \(R^{2}\), связанную с регрессией. При выполнении обычного МНК-регрессии вы получаете конкретное значение \(R^{2}\). Но как построить 95% доверительный интервал для \(R^{2}\)?
Изучите DataFrame df с зависимой переменной \(y\) и двумя независимыми переменными \(X1\) и \(X2\) с помощью df.head(). Регрессия уже подогнана с использованием statsmodels (sm):
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()
Проверьте результат с помощью reg_fit.summary() — вы увидите, что \(R^{2}=0.3504\). Используйте бутстрэп, чтобы вычислить 95% доверительный интервал.
Это упражнение является частью курса
Статистическое моделирование на Python
Инструкции к упражнению
- Сформируйте бутстрэп-выборку из исходного набора данных с помощью метода
sample()объекта pandas DataFrame. Количество строк должно совпадать с количеством строк в исходном DataFrame. - Подгоните регрессию аналогично
reg_fit(), используяsm.OLS(), и извлеките статистику \(R^{2}\) с помощью атрибутаrsquared. - Добавьте значение \(R^{2}\) в список
rsquared_boot. - Вычислите 95% доверительный интервал для
rsquared_bootкакr_sq_95_ci, используяnp.percentile().
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
rsquared_boot, coefs_boot, sims = [], [], 1000
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()
# Run 1K iterations
for i in range(sims):
# First create a bootstrap sample with replacement with n=df.shape[0]
bootstrap = ____
# Fit the regression and append the r square to rsquared_boot
rsquared_boot.append(____(bootstrap['y'],bootstrap.iloc[:,1:]).fit().rsquared)
# Calculate 95% CI on rsquared_boot
r_sq_95_ci = ____
print("R Squared 95% CI = {}".format(r_sq_95_ci))