Как получить таблицу ANOVA с устойчивыми стандартными ошибками?

10

Я запускаю объединенную регрессию OLS с использованием пакета plm в R. Хотя мой вопрос больше относится к базовой статистике, поэтому я постараюсь сначала опубликовать ее здесь;)

Так как мои результаты регрессии дают гетероскедастические остатки, я хотел бы попробовать использовать устойчивые стандартные ошибки гетероскедастичности. В результате coeftest(mod, vcov.=vcovHC(mod, type="HC0"))я получаю таблицу, содержащую оценки, стандартные ошибки, t-значения и p-значения для каждой независимой переменной, которые в основном являются моими "надежными" результатами регрессии.

Для обсуждения важности различных переменных я хотел бы показать долю дисперсии, объясняемой каждой независимой переменной, поэтому мне нужна соответствующая сумма квадратов. Однако, используя функцию aov(), я не знаю, как сказать R использовать надежные стандартные ошибки.

Теперь мой вопрос: как мне получить таблицу ANOVA / сумму квадратов, которая относится к устойчивым стандартным ошибкам? Можно ли рассчитать его на основе таблицы ANOVA по регрессии с нормальными стандартными ошибками?

Редактировать:

Другими словами, не обращая внимания на мои R-проблемы:

Если на R не влияют устойчивые стандартные ошибки, будут ли неизменными также соответствующие вклады в объясненную дисперсию различными объясняющими переменными?2

Редактировать:

В R aov(mod)действительно дает правильную таблицу ANOVA для панельной модели (plm)?

Aki
источник

Ответы:

12

ANOVA в моделях линейной регрессии эквивалентен критерию Вальда (и критерию отношения правдоподобия) соответствующих вложенных моделей. Поэтому, если вы хотите провести соответствующий тест с использованием стандартных ошибок гетероскедастичности (HC), его нельзя получить из разложения сумм квадратов, но вы можете выполнить тест Вальда, используя ковариационную оценку HC. Эта идея используется в обоих Anova()и linearHypothesis()от carупаковки и coeftest()и waldtest()из lmtestпакета. Последние три также могут быть использованы с plmобъектами.

Простой (хотя и не очень интересный / значимый) пример заключается в следующем. Мы используем стандартную модель со ?plmстраницы руководства и хотим провести тест Вальда на предмет значимости и того, log(pcap)и другого unemp. Нам нужны эти пакеты:

library("plm")
library("sandwich")
library("car")
library("lmtest")

Модель (под альтернативой):

data("Produc", package = "plm")
mod <- plm(log(gsp) ~ log(pc) + log(emp) + log(pcap) + unemp,
  data = Produc, index = c("state", "year"))

Во-первых, давайте посмотрим на маргинальные тесты Вальда со стандартными ошибками HC для всех отдельных коэффициентов:

coeftest(mod, vcov = vcovHC)

t test of coefficients:

            Estimate Std. Error t value  Pr(>|t|)    
log(pc)    0.2920069  0.0617425  4.7294 2.681e-06 ***
log(emp)   0.7681595  0.0816652  9.4062 < 2.2e-16 ***
log(pcap) -0.0261497  0.0603262 -0.4335   0.66480    
unemp     -0.0052977  0.0024958 -2.1226   0.03411 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

И затем мы проводим тест Вальда для обоих log(pcap)и unemp:

linearHypothesis(mod, c("log(pcap)", "unemp"), vcov = vcovHC)

Linear hypothesis test

Hypothesis:
log(pcap) = 0
unemp = 0

Model 1: restricted model
Model 2: log(gsp) ~ log(pc) + log(emp) + log(pcap) + unemp

Note: Coefficient covariance matrix supplied.

  Res.Df Df  Chisq Pr(>Chisq)  
1    766                       
2    764  2 7.2934    0.02608 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

В качестве альтернативы, мы можем также подогнать модель под нулевой гипотезой ( mod0скажем) без двух коэффициентов и затем вызвать waldtest():

mod0 <- plm(log(gsp) ~ log(pc) + log(emp),
  data = Produc, index = c("state", "year"))
waldtest(mod0, mod, vcov = vcovHC)

Wald test

Model 1: log(gsp) ~ log(pc) + log(emp)
Model 2: log(gsp) ~ log(pc) + log(emp) + log(pcap) + unemp
  Res.Df Df  Chisq Pr(>Chisq)  
1    766                       
2    764  2 7.2934    0.02608 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Тестовая статистика и p-значение вычисляются linearHypothesis()и waldtest()являются абсолютно одинаковыми. Просто интерфейс и форматирование вывода несколько отличаются. В некоторых случаях один или другой является более простым или более интуитивным.

Примечание. Если вы предоставляете оценку ковариационной матрицы (т. Е. Матрицы vocvHC(mod)) вместо оценки ковариационной матрицы (т. Е. Функции vocvHC), убедитесь, что вы предоставили оценку ковариационной матрицы HC модели в соответствии с альтернативой, т. Е. Неограниченная модель.

Ахим Цейлейс
источник
1
Если я правильно понимаю, тест Вальда показывает, является ли включение определенных переменных значимым или нет. Но есть ли мера того, насколько они улучшают модель, например, сумма квадратов?
Аки
Как я могу реализовать стандартные ошибки HAC? Я пробовал coeftest (mod, vcov = vcovHAC), но получил сообщение об ошибке, в котором говорилось: «не применим метод для estfun, примененный к объекту класса« c («plm», «panelmodel») ». Кажется, мне нужно вычислить вес или функция оценки в первую очередь. Какой метод вы бы порекомендовали?
Aki
В то время как plmпакет имеет методы для vcovHC()универсального из sandwichпакета, он не предоставляет методы для vcovHAC(). Вместо этого plmпоставляется с собственными выделенными функциями для вычисления ковариационных матриц в панельных моделях, которые также могут включать последовательную корреляцию. Смотри vcovNW()или vcovSCC()в упаковке plm.
Ахим Цейлейс
Спасибо! Насколько я понимаю, обе функции относятся к устойчивой к автокорреляции SE. Есть ли какая-либо функция, которая может использоваться как для устойчивой к гетероскедастичности, так и для автокорреляционной SE?
Аки
Все три функции ( vcovHAC, vcovNW, vcovSCC) являются _H_eteroskedasticity и _A_utocorrelation _C_onsistent ... вот что HAC стоит.
Ахим Цейлейс
2

Это можно сделать с помощью Anovaфункции в carпакете. См. Этот превосходный ответ для более подробной информации и обзора других методов борьбы с гетероскедастичностью в ANOVA.

shadowtalker
источник
Спасибо. Проблема в том, что Anova () не работает с моделями типа plm (panelmodel).
Аки
@ Аки, если я не ошибаюсь, объединенные OLS эквивалентны обычным OLS, основываясь на том, что написано в виньетке: cran.r-project.org/web/packages/plm/vignettes/plm.pdf
shadowtalker
@ Аки, однако, звучит так, что вас может заинтересовать более богатая модель ANOVA. Вот несколько примеров R: stats.stackexchange.com/questions/3874/…
shadowtalker