Come ottenere la tabella ANOVA con robusti errori standard?


10

Sto eseguendo una regressione OLS in pool usando il pacchetto plm in R. Tuttavia, la mia domanda è più sulle statistiche di base, quindi provo a postarla qui prima;)

Poiché i risultati della mia regressione producono residui eteroschedastici, vorrei provare a utilizzare errori standard robusti per l'eteroschedasticità. Come risultato coeftest(mod, vcov.=vcovHC(mod, type="HC0"))ottengo una tabella contenente stime, errori standard, valori t e valori p per ogni variabile indipendente, che sono fondamentalmente i miei risultati di "robusta" regressione.

Per discutere dell'importanza delle diverse variabili, vorrei tracciare la quota di varianza spiegata da ciascuna variabile indipendente, quindi ho bisogno della rispettiva somma dei quadrati. Tuttavia, usando la funzione aov(), non so come dire a R di usare robusti errori standard.

Ora la mia domanda è: come posso ottenere la tabella / somma dei quadrati ANOVA che fa riferimento a robusti errori standard? È possibile calcolarlo in base alla tabella ANOVA dalla regressione con normali errori standard?

Modificare:

In altre parole e ignorando i miei problemi R:

Se R non viene influenzato dall'uso di solidi errori standard, anche i rispettivi contributi alla varianza spiegata dalle diverse variabili esplicative rimarranno invariati?2

Modificare:

In R, fornisce aov(mod)effettivamente una tabella ANOVA corretta per un panelmodel (plm)?

Risposte:


12

L'ANOVA nei modelli di regressione lineare equivale al test Wald (e al test del rapporto di verosimiglianza) dei corrispondenti modelli nidificati. Pertanto, quando si desidera eseguire il test corrispondente utilizzando errori standard coerenti con l'eteroschedasticità (HC), ciò non può essere ottenuto da una decomposizione delle somme dei quadrati, ma è possibile eseguire il test Wald utilizzando una stima della covarianza HC. Questa idea è utilizzato sia Anova()e linearHypothesis()dal carpacchetto e coeftest()e waldtest()dal lmtestpacchetto. Questi ultimi tre possono anche essere usati con plmoggetti.

Un esempio semplice (anche se non molto interessante / significativo) è il seguente. Usiamo il modello standard dalla ?plmpagina del manuale e vogliamo eseguire un test Wald per il significato di entrambi log(pcap)e unemp. Abbiamo bisogno di questi pacchetti:

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

Il modello (in alternativa) è:

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

Innanzitutto, diamo un'occhiata ai test di Wald marginali con errori standard HC per tutti i singoli coefficienti:

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

E poi eseguiamo un test Wald per entrambi log(pcap)e 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

In alternativa, possiamo anche adattare il modello all'ipotesi nulla ( mod0diciamo) senza i due coefficienti e quindi chiamare 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

La statistica del test e il valore p calcolati da linearHypothesis()ed waldtest()è esattamente lo stesso. Solo l'interfaccia e la formattazione dell'output sono leggermente diverse. In alcuni casi l'uno o l'altro è più semplice o più intuitivo.

Nota: se si fornisce una stima della matrice di covarianza (ovvero una matrice simile vocvHC(mod)) invece di uno stimatore della matrice di covarianza (ovvero una funzione simile vocvHC), assicurarsi di fornire la stima della matrice di covarianza HC del modello in alternativa, ovvero modello non limitato.


1
Se lo capisco correttamente, il test di Wald mostra se includere determinate variabili è significativo o meno. Ma c'è una misura di quanto effettivamente migliorano il modello, come ad esempio la somma dei quadrati?
Aki,

Come posso implementare errori standard HAC? Ho provato coeftest (mod, vcov = vcovHAC) ma ho ricevuto un messaggio di errore che diceva "nessun metodo applicabile per 'estfun' applicato a un oggetto di classe" c ('plm', 'panelmodel') ". Sembra che debba calcolare i pesi o prima una funzione di stima. Quale metodo consiglieresti?
Aki,

Mentre il plmpacchetto ha metodi per il vcovHC()generico dal sandwichpacchetto, non fornisce metodi per vcovHAC(). Invece viene plmfornito con le proprie funzioni dedicate per il calcolo delle matrici di covarianza nei modelli di pannelli che potenzialmente includono anche la correlazione seriale. Vedi vcovNW()o vcovSCC()nel pacchetto plm.
Achim Zeileis,

Grazie! Per quanto ne capisco, entrambe le funzioni si riferiscono a SE robusto di autocorrelazione. Esiste una funzione che può essere utilizzata sia per la SE resistente all'eteroscedasticità che per l'autocorrelazione?
Aki,

Tutte e tre le funzioni ( vcovHAC, vcovNW, vcovSCC) sono _H_eteroskedasticity e _A_utocorrelation _C_onsistent ... Questo è quello che sta per HAC.
Achim Zeileis,

2

Questo può essere fatto con la Anovafunzione nel carpacchetto. Vedi questa eccellente risposta per maggiori dettagli e una revisione di altre tecniche per affrontare l'eteroschedasticità in ANOVA.


Grazie. Il problema è che Anova () non sembra funzionare con modelli di tipo plm (panelmodel).
Aki,

@Aki se non sbaglio l'OLS in pool equivale al semplice OLS, basato su ciò che dice nella vignetta: cran.r-project.org/web/packages/plm/vignettes/plm.pdf
shadowtalker

@Aki, tuttavia, sembra che potresti essere interessato a un modello ANOVA più ricco. Ci sono alcuni esempi R qui: stats.stackexchange.com/questions/3874/…
shadowtalker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.