Как проверить значения p параметров в OLS

При выполнении линейной регрессии, такой как y=a*x+b, сводка дает мне p-значения того, равны ли параметры нулю, что, если я хочу увидеть p-значение того, равен ли параметр a 2 или чему-то отличному от нуля?

Я ожидаю, что сводка ОЛС даст мне значение p того, отличается ли a от 2.

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

Marat 08.04.2019 16:50

Привет, я использую statsmodels.regression.linear_model.OLS, после подгонки я могу получить сводную таблицу, содержащую значения p параметров, я просто хочу проверить, отличается ли один из параметров от числа (не 0).

billy yvon 08.04.2019 16:59

Я все еще не уверен, что понимаю ваш вопрос, но почему бы вам не использовать стандартную ошибку для предполагаемого параметра для расчета p-значения?

Marat 08.04.2019 17:15

Привет, я мог бы, но мне интересно, есть ли функция, которая может помочь мне с моей проблемой

billy yvon 08.04.2019 17:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
2 658
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

мой комментарий объяснил:

Вот пример результата МНК (данные искусственные):

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.161
Model:                            OLS   Adj. R-squared:                 -0.007
Method:                 Least Squares   F-statistic:                    0.9608
Date:                Mon, 08 Apr 2019   Prob (F-statistic):              0.372
Time:                        11:14:10   Log-Likelihood:                -10.854
No. Observations:                   7   AIC:                             25.71
Df Residuals:                       5   BIC:                             25.60
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          2.1429      1.141      1.879      0.119      -0.789       5.075
x1             0.2500      0.255      0.980      0.372      -0.406       0.906
==============================================================================
Omnibus:                          nan   Durbin-Watson:                   1.743
Prob(Omnibus):                    nan   Jarque-Bera (JB):                0.482
Skew:                           0.206   Prob(JB):                        0.786
Kurtosis:                       1.782   Cond. No.                         10.4
==============================================================================

Итак, для параметра x1 имеем коэффициент 0,25 при STD 0,255.

p-значение x1=1:

>>> from scipy.stats import norm
>>> 2*(1 - norm.cdf(abs(1-0.25), scale=0.255))                                                                                          
0.00326968201269362

Большое спасибо, это работает. Однако я также хотел бы иметь таблицу, использующую summary_col, например, «таблицу 2» здесь, связь. Было бы лучше, если бы был способ получить нужные мне значения p, изменив параметры функции подгонки.

billy yvon 08.04.2019 18:07
statsmodels не делает этого из коробки, но, поскольку это открытый исходный код, вы можете внести свой вклад в эту функцию.
Marat 08.04.2019 18:21

Значение p соответствует вероятности наблюдения этого значения a при нулевой гипотезе (которая обычно равна 0, поскольку это тот случай, когда ковариата x не влияет на результат y).

Это при предположениях линейной регрессии, которые, среди прочего, утверждают, что a следует нормальному распределению. Поэтому, если вы действительно хотите изменить свою нулевую гипотезу на a=2, просто преобразуйте a так, чтобы a_ = a - 2 сейчас, когда a=2, a_ будет равно 0, как обычно.

Таким образом, вы можете достичь этого, найдя y+2x = a_*x + b, и у вас будет значение p для вероятности того, что a=2 произойдет случайно. Как я уже сказал, это довольно необычный тест...

Спасибо, значит, я никак не могу получить нужные значения p, изменив параметры функции подгонки?

billy yvon 08.04.2019 18:09

Вы всегда можете просто рассчитать p-значение самостоятельно? Вам дана средняя оценка для а и выборочное стандартное отклонение. Вы могли бы использовать значения из выходных данных OLS для построения собственной t-статистики?

nick 08.04.2019 18:16
Ответ принят как подходящий

Классы результатов имеют методы проверки гипотез. Большинство из них основаны на тесте Вальда, то есть мы оцениваем полную модель и проверяем, согласуется ли ограничение с данными.

http://www.statsmodels.org/devel/generated/statsmodels.regression.linear_model.RegressionResults.html

См., например, t_test, который векторизован для простой гипотезы и создает сводную таблицу, аналогичную таблице в сводке регрессии. http://www.statsmodels.org/devel/generated/statsmodels.regression.linear_model.RegressionResults.t_test.html у которого есть этот пример

>>> results = ols(formula, dta).fit()
>>> hypotheses = 'GNPDEFL = GNP, UNEMP = 2, YEAR/1829 = 1'
>>> t_test = results.t_test(hypotheses)

Есть несколько других методов проверки гипотез: wald_test для одной совместной гипотезы.
wald_test_terms проверяет, все ли параметры каждого термина равны нулю (например, для категориальных регрессоров) и
t_test_pairwise вычисляет t_test для каждой пары уровней категориального регрессора.

Это работает, большое спасибо. Кстати, вы знаете, как преобразовать этот результат в summary_col из statsmodels.iolib.summary2?

billy yvon 09.04.2019 01:25

АФАИК это невозможно. summary_col имеет ключевое слово info_dict, которое можно применить для добавления отдельных строк, но я не вижу возможности добавить дополнительные параметры/эффекты, включая p-значения или стандартные ошибки. запрос об улучшении ?

Josef 09.04.2019 02:23

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