Как рассчитывается значение p для нескольких переменных в линейной регрессии? - PullRequest
1 голос
/ 07 июля 2019

enter image description here

Мне интересно, как вычисляется значение p для различных переменных в множественной линейной регрессии. Я уверен, что после прочтения нескольких ресурсов <5% указывает, что переменная имеет значение для модели. Но как рассчитывается значение p для каждой переменной в множественной линейной регрессии? </p>

Я попытался просмотреть сводку statsmodels с помощью функции summary (). Я могу просто увидеть значения. Я не нашел никакого ресурса о том, как вычисляется значение p для различных переменных в множественной линейной регрессии.

import statsmodels.api as sm
nsample = 100
x = np.linspace(0, 10, 100)
X = np.column_stack((x, x**2))
beta = np.array([1, 0.1, 10])
e = np.random.normal(size=nsample)
X = sm.add_constant(X)
y = np.dot(X, beta) + e
model = sm.OLS(y, X)
results = model.fit() 
print(results.summary())

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

1 Ответ

1 голос
/ 09 июля 2019

Инференциальная статистика работает по сравнению с известными дистрибутивами.В случае регрессии этим распределением обычно является t-распределение

. Вы заметите, что каждая переменная имеет оценочный коэффициент, из которого вычисляется связанная t-статистика.Например, x1 имеет значение t -0.278.Чтобы получить значение p, мы берем это значение t, помещаем его в распределение t и вычисляем вероятность получения такого же экстремального значения, как и вычисленное вами значение t.Вы можете получить некоторую интуицию для этого, заметив, что столбец p-значения называется P>|t|

Дополнительная сложность заключается в том, что точная форма t-распределения зависит от степеней свободы

Таким образом, для вычисления p-значения вам понадобятся 2 элемента информации: t-статистика и остаточные степени свободы вашей модели (в вашем случае 97)

В качестве примера взят x1,Вы можете вычислить p-значение в Python следующим образом:

import scipy.stats
scipy.stats.t.sf(abs(-0.278), df=97)*2

0.78160405761659357

То же самое делается для каждого из других предикторов, используя их соответствующие t-значения

...