Я хочу проверить гипотезу, что «перехват = 0, бета = 1», поэтому я должен провести тест Уолда и использовать модуль statsmodel.formula.api.
Но я не уверен, какой код правильный при выполнении теста Wald.
from statsmodels.datasets import longley
import statsmodels.formula.api as smf
data = longley.load_pandas().data
hypothesis_0 = '(Intercept = 0, GNP = 0)'
hypothesis_1 = '(GNP = 0)'
hypothesis_2 = '(GNP = 1)'
hypothesis_3 = '(Intercept = 0, GNP = 1)'
results = smf.ols('TOTEMP ~ GNP', data).fit()
wald_0 = results.wald_test(hypothesis_0)
wald_1 = results.wald_test(hypothesis_1)
wald_2 = results.wald_test(hypothesis_2)
wald_3 = results.wald_test(hypothesis_3)
print(wald_0)
print(wald_1)
print(wald_2)
print(wald_3)
results.summary()
Сначала я подумал, что гипотеза 3 верна.
Но результат гипотезы_1 такой же, как и для F-теста регрессии, который представляет, что гипотеза «перехват = 0 и бета = 0».
Итак, я подумал, что модуль 'wald_test' по умолчанию установил 'intercept = 0'.
Я не уверен, какой из них правильный.
Не могли бы вы дать мне правильный ответ?
да вообще, зачем нужна проверка перехватить?
Гипотеза 3 является правильной совместной нулевой гипотезой для теста Вальда. Гипотеза 1 совпадает с F-тестом в итоговых результатах, который является гипотезой о том, что все коэффициенты наклона равны нулю.
Я изменил пример, чтобы использовать искусственные данные, чтобы мы могли видеть эффект различных «истинных» бета-коэффициентов.
import numpy as np
import pandas as pd
nobs = 100
np.random.seed(987125)
yx = np.random.randn(nobs, 2)
beta0 = 0
beta1 = 1
yx[:, 0] += beta0 + beta1 * yx[:, 1]
data = pd.DataFrame(yx, columns=['TOTEMP', 'GNP'])
hypothesis_0 = '(Intercept = 0, GNP = 0)'
hypothesis_1 = '(GNP = 0)'
hypothesis_2 = '(GNP = 1)'
hypothesis_3 = '(Intercept = 0, GNP = 1)'
results = smf.ols('TOTEMP ~ GNP', data).fit()
wald_0 = results.wald_test(hypothesis_0)
wald_1 = results.wald_test(hypothesis_1)
wald_2 = results.wald_test(hypothesis_2)
wald_3 = results.wald_test(hypothesis_3)
print('H0:', hypothesis_0)
print(wald_0)
print()
print('H0:', hypothesis_1)
print(wald_1)
print()
print('H0:', hypothesis_2)
print(wald_2)
print()
print('H0:', hypothesis_3)
print(wald_3)
В этом случае, когда beta0 = 0 и beta1 = 1, верны обе гипотезы 2 и 3. Гипотеза 0 и 1 не согласуются с смоделированными данными.
Результаты теста Вальда отвергают ложные и не отвергают истинные гипотезы, учитывая размер выборки и размер эффекта, которые должны давать высокую мощность.
H0: (Intercept = 0, GNP = 0)
<F test: F=array([[ 58.22023709]]), p=2.167936332972888e-17, df_denom=98, df_num=2>
H0: (GNP = 0)
<F test: F=array([[ 116.33149937]]), p=2.4054199668085043e-18, df_denom=98, df_num=1>
H0: (GNP = 1)
<F test: F=array([[ 0.1205935]]), p=0.7291363441993846, df_denom=98, df_num=1>
H0: (Intercept = 0, GNP = 1)
<F test: F=array([[ 0.0623734]]), p=0.9395692694166834, df_denom=98, df_num=2>
Подобные результаты можно проверить, изменив beta0 и beta1.
Зачем нужна проверка того, что перехватить были 0? Что означает ненулевой перехват о соотношении IV / DV?
В некоторых случаях мы можем захотеть проверить, проходит ли регрессия через начало координат, то есть имеет ли нулевой перехват. Но это не очень частый случай.
F-тест регрессии заключается в том, что все коэффициенты наклона равны нулю, но не ограничивает точку пересечения, то есть в этом случае так же, как гипотеза_1.