2012-04-05 19 views
5

Qualcuno sa se esiste un pacchetto che esegue le regressioni di Fama-MacBeth in R e calcola gli errori standard? Sono a conoscenza del pacchetto sandwich e della sua capacità di stimare gli errori standard di Newey-West, oltre a fornire funzioni per il clustering. Tuttavia, non ho visto nulla per quanto riguarda Fama-MacBeth.Errori standard di Fama MacBeth in R

+3

'biblioteca ("SOS"); findFn ("macbeth") 'non trova nulla, ma' findFn ("fama") 'ottiene alcuni successi nei pacchetti relativi alle finanze. –

risposta

11

Il pacchetto plm può stimare regressioni di Fama-MacBeth e SE.

require(foreign) 
require(plm) 
require(lmtest) 
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta") 
fpmg <- pmg(y~x, test, index=c("year","firmid")) ##Fama-MacBeth 

> ##Fama-MacBeth 
> coeftest(fpmg) 

t test of coefficients: 

      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 0.031278 0.023356 1.3392 0.1806  
x   1.035586 0.033342 31.0599 <2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

tuttavia notare che questo metodo funziona solo se i dati possono essere costretti ad un pdata.frame. (. Fallirà se avete "duplicate couples (time-id)")

Per ulteriori dettagli si veda:

+0

nell'esempio coeftest (fpmg) non gestisce gli errori standard a doppio cluster. Si prega di mostrare come farlo per fpmg. http://stackoverflow.com/questions/37441230/r-no-way-to-get-double-clustered-standard-errors-for-an-object-of-class-cpmg –

+0

Una persona ha scritto che dobbiamo scambiare N e T e tutti lo stanno facendo. Vedo altri che l'hanno interrogato, ma sono stati messi a tacere;) –

+0

Entrambi gli ordini funzionano su 'df.petersen'. 'pmg' dovrebbe avere serie temporali medie. A volte le crossover medie hanno senso teorico. Nella regressione FM: la variabile RHS è un indice: lo stesso per tutti gli ID. Prova: 'df.petersen2 <-data.table (df.petersen); df.petersen2 [, ': =' (x = df.petersen2 [firmid == 1, x]), da = "firmid"] '. Quindi prova 'summary (pmg (y ~ x, data = df.petersen2, index = c (" year "," firmid ")))'. Otterrai delle NA, dato che stai facendo delle traversate senza variazione RHS. 'pmg' non è ben documentato, quindi non sono sicuro che faccia una regressione FM corretta, ma' index = c ("firmid", "year")) "produce una stima. –