Скорректированный квадрат R для каждой переменной предиктора в python

У меня есть фрейм данных панд, который содержит несколько столбцов. Мне нужно выполнить многомерную линейную регрессию. Перед этим я хотел бы проанализировать R,R2, скорректированные значения R2 и p для каждой независимой переменной относительно зависимой переменной. Для R и R2 у меня нет проблем, так как я могу вычислить матрицу R и выбрать только зависимую переменную, а затем увидеть коэффициент R между ней и всеми независимыми переменными. Тогда я могу возвести в квадрат эти значения, чтобы получить R2. Моя проблема в том, как сделать то же самое с откорректированным R2 и значением p. В конце я хочу получить следующее:

 Variable     R        R2       ADJUSTED_R2   p_value
 A            0.4193   0.1758   ...
 B            0.2620   0.0686   ...
 C            0.2535   0.0643   ...

Все значения относятся к зависимой переменной, скажем, Y.

1 ответ

Решение

Следующее не даст вам ВСЕХ ответов, но поможет вам использовать python, pandas и statsmodels для регрессионного анализа.


Учитывая данные кадра, как это...

# Imports
import pandas as pd
import numpy as np
import itertools

# A datafrane with random numbers
np.random.seed(123)
rows = 12
listVars= ['y','x1', 'x2', 'x3']
rng = pd.date_range('1/1/2017', periods=rows, freq='D')
df_1 = pd.DataFrame(np.random.randint(100,150,size=(rows, len(listVars))), columns=listVars) 
df_1 = df_1.set_index(rng)

print(df_1)

введите описание изображения здесь

... вы можете получить любые результаты регрессии, используя библиотеку statsmodels и изменяя result = model.rsquared часть во фрагменте ниже:

x = df_1['x1']
x = sm.add_constant(x)
model = sm.OLS(df_1['y'], x).fit()    
result = model.rsquared
print(result)

введите описание изображения здесь

Теперь у вас есть R-квадрат. использование model.pvalues для р-значения. И использовать dir(model)чтобы внимательнее взглянуть на другие результаты модели (в выводе больше, чем вы видите ниже):

введите описание изображения здесь

Теперь это должно заставить вас получить желаемые результаты. Чтобы получить желаемые результаты для ВСЕХ комбинаций переменных / столбцов, вопрос и ответ здесь должны дать вам очень далеко.

Редактировать: Вы можете ближе познакомиться с некоторыми общими результатами регрессии, используя model.summary(), Используя это вместе с dir(model) Вы можете видеть, что не ВСЕ результаты регрессии доступны так же, как используются значения pvalues model.pvalues, Например, чтобы получить Дурбина-Уотсона, вам придется использовать durbinwatson = sm.stats.stattools.durbin_watson(model.fittedvalues, axis=0), Этот пост получил больше информации по этому вопросу.

Другие вопросы по тегам