соответствующий тест на значимость различия

Мне нужна помощь в проведении проверки гипотезы для сравнения коэффициентов для двух моих независимых переменных в Stata. Мой нуль и альтернатива:

null: β1=β2 vs alt: β1>β2.

До сих пор я использовал команду test для сравнения двух оценок. Однако я не знаю, смогу ли я изменить test, чтобы он соответствовал моему альтернативному варианту.


person hardy    schedule 13.06.2020    source источник


Ответы (1)


Чтобы сделать односторонние тесты на коэффициенты, вы можете

  • выполнить соответствующий двусторонний тест коэффициентов (или иногда просто посмотреть на результат регрессии)
  • используйте результаты, чтобы получить p-значение для одностороннего теста. Этот шаг можно выполнить двумя способами: либо напрямую используя обратное кумулятивное распределение Стьюдента, либо выполнив некоторые арифметические действия над значением p из двустороннего теста.

Если вы тестируете различия коэффициентов (поскольку a=b эквивалентно a-b=0), подход такой же, как и для одиночных коэффициентов. Вам нужно сделать двусторонний тест на разницу:

sysuse auto, clear
regress price mpg weight 
gen high_mpg    = mpg>20
gen high_weight = weight>3000
reg price high_mpg high_weight foreign 

/* Test H0: diff = 0 */
test high_weight - foreign = 0
display r(p)
display r(F)

/* The ttail approach works when the actual coefficient difference is positive or negative */
local sign_diff = sign(_b[high_weight] - _b[foreign] - 0)
display "p-value for Ha: diff < 10 = " ttail(r(df_r),`sign_diff'*sqrt(r(F)))
display "p-value for Ha: diff > 10 = " 1-ttail(r(df_r),`sign_diff'*sqrt(r(F)))

/* Can also do it by hand like this if diff is positive (like above) */
display "p-value for Ha: diff < 0 = " r(p)/2 
display "p-value for Ha: diff > 0 = " 1-r(p)/2 

/* if difference is negative, you can still do it by hand */
/* but need to flip the p-value division rules since we are on the other */
/* side of the distribution */
/* Test H0': diff2 = -400 */ 
test high_mpg - foreign  = -400
local sign_diff2 = sign(_b[high_mpg] - _b[foreign] + 400)
display "p-value for Ha': diff2 < 0 = " ttail(r(df_r),`sign_diff2'*sqrt(r(F)))
display 1-r(p)/2
display "p-value for Ha': diff2 > 0 = " 1-ttail(r(df_r),`sign_diff2'*sqrt(r(F)))
display r(p)/2

Если ваш тест возвращает r(chi2) вместо r(F), вам нужно поменять местами хвостовую часть на

normal(`sign_diff'*sqrt(r(chi2)))
person Dimitriy V. Masterov    schedule 13.06.2020
comment
Спасибо за ответ, Дмитрий, очень полезно. У меня есть 2 вещи, которые я хотел бы уточнить, если это нормально. 1) Я запустил тестовую команду и получил p-значение 0,0001 из r(p), что дало мне соответствующее p-значение приблизительно 0,9999, так как я хочу проверить Ha diff›0 интерпретирую ли я это как неспособность отказаться от null в пользу alt, чтобы разница была положительной? 2) Вместо этого мой тест вернул r(chi2). Таким образом, подменяя его местами, вы имеете в виду, что я должен использовать r (chi2) вместо r (F) или мне нужно переоценить, используя F-распределение? - person hardy; 14.06.2020
comment
(1) Да, рифмованная мнемоника отвергает нулевое значение, когда p-значение мало, поскольку p-значение соответствует вероятности наблюдения разницы, по крайней мере, такой большой при нулевом значении. Вы можете найти много хороших примеров на сайте резюме, который лучше подходит для вопросов статистики, не связанных с программированием. - person Dimitriy V. Masterov; 14.06.2020
comment
В (2) вы хотите заменить часть ttail на -normal(`sign_diff'*sqrt(r(chi2)))-. - person Dimitriy V. Masterov; 14.06.2020