различное значение p между линейной регрессией statsmodels и функцией dand.corr () панд - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над набором данных для прогнозирования цен на жилье.Он имеет 13 функций, и я использую модель множественной линейной регрессии.Когда я проверяю соотношение функций и целевого значения, отображаются странные результаты для метода df.corr() и функции Summary().

Для немногих функций значения коэффициента корреляции p низкие.Но если я использую функции summary() после регрессии, эти функции имеют разные значения p.Функция, которая имеет наименьшее значение коэффициента корреляции, не имеет наибольшего значения p.Или нет никакого сходства / корреляции в коэффициенте корреляции и значениях p, полученных этими двумя различными функциями.Что могло пойти не так?

для коэффициента корреляции

correlation_matrix = BostonHousing_df.corr().round(2)

для значений p

X=BostonHousing_df.iloc[:,:-1].values
y=BostonHousing_df.iloc[:,-1].values
X_opt = X1[:,[0,1,2,3,4,5,6,7,8,9,10,11,12,13]]
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
regressor_OLS.summary()

Поскольку метод dataframe.corr () по умолчанию использует корреляцию Pearson.Обе функции должны давать схожие результаты. Но этого не происходит. Ниже приведены два изображения результатов.

pvalues ​​

CorelationCoeff

если вы наблюдаете 2 результата на изображениях, у объектов с наименьшим коэффициентом корреляции нет высоких значений p.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема здесь в том, что при проверке парных корреляций Пирсона вы не учитываете влияние всех других переменных.Таким образом, вы не можете ожидать прямой связи между корреляцией Пирсона с целью и значением p в регрессионной модели.

Вот крайний пример, иллюстрирующий это:

Скажем, у нас есть цель c, которая определяется суммой двух признаков a+b.Скажем, у вас есть следующий тренировочный набор:

a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]    
b = [4, 3, 2, 1, 0, 6, 5, 4, 3, 2]  
c = [5, 5, 5, 5, 5, 7, 7, 7, 7, 7]

Обратите внимание, что, хотя a+b отлично дает вам c, если вы просто проверите соотношение между a и c, вы быесть 0!

numpy.corrcoef(a, c)  
> array([[1., 0.],
         [0., 1.]])  

Но если вы включите эти данные в оценку линейной регрессии, вы, конечно, получите чрезвычайно малое значение p для a.

Итак, как видите, небольшая попарная корреляция с целью не обязательно означает отсутствие эффекта / маленькое значение p.

...