При выполнении линейной регрессии, такой как y=a*x+b
, сводка дает мне p-значения того, равны ли параметры нулю, что, если я хочу увидеть p-значение того, равен ли параметр a
2 или чему-то отличному от нуля?
Я ожидаю, что сводка ОЛС даст мне значение p того, отличается ли a
от 2.
Привет, я использую statsmodels.regression.linear_model.OLS, после подгонки я могу получить сводную таблицу, содержащую значения p параметров, я просто хочу проверить, отличается ли один из параметров от числа (не 0).
Я все еще не уверен, что понимаю ваш вопрос, но почему бы вам не использовать стандартную ошибку для предполагаемого параметра для расчета p-значения?
Привет, я мог бы, но мне интересно, есть ли функция, которая может помочь мне с моей проблемой
мой комментарий объяснил:
Вот пример результата МНК (данные искусственные):
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, изменив параметры функции подгонки.
statsmodels
не делает этого из коробки, но, поскольку это открытый исходный код, вы можете внести свой вклад в эту функцию.
Значение 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, изменив параметры функции подгонки?
Вы всегда можете просто рассчитать p-значение самостоятельно? Вам дана средняя оценка для а и выборочное стандартное отклонение. Вы могли бы использовать значения из выходных данных OLS для построения собственной t-статистики?
Классы результатов имеют методы проверки гипотез. Большинство из них основаны на тесте Вальда, то есть мы оцениваем полную модель и проверяем, согласуется ли ограничение с данными.
См., например, 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
?
АФАИК это невозможно. summary_col
имеет ключевое слово info_dict
, которое можно применить для добавления отдельных строк, но я не вижу возможности добавить дополнительные параметры/эффекты, включая p-значения или стандартные ошибки. запрос об улучшении ?
пожалуйста, дайте более подробную информацию и, возможно, фрагмент кода с его выводом. Теперь даже непонятно, какой пакет вы используете